libXt-1.1.5/Makefile.am000064401431060000012000000026511252061032400151140ustar00alancstaff00002660200006# # Copyright © 2003 Keith Packard, Noah Levitt # # 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 Keith Packard not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Keith Packard makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. SUBDIRS = util src include man specs test ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = xt.pc MAINTAINERCLEANFILES = ChangeLog INSTALL .PHONY: ChangeLog INSTALL INSTALL: $(INSTALL_CMD) ChangeLog: $(CHANGELOG_CMD) dist-hook: ChangeLog INSTALL libXt-1.1.5/config.guess000075501431060000012000001236721252061035000154060ustar00alancstaff00002660200006#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . 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 1992-2014 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # 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 tuples: *-*-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 -q __ELF__ 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 ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-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:*:[4567]) 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/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` 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 -q __LP64__ 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) 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 ;; 8664:Windows_NT:*) echo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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.[02]*:*) 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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-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; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*) 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 ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku 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 eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi 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 ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} 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 ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac 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: me -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep RlibXt-1.1.5/missing000075501431060000012000000153301252061035000144540ustar00alancstaff00002660200006#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written 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, see . # 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: rmation and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to . # 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 . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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 # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # 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 cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc 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. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # 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 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, 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. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # 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 ;; #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 preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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 preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" 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 preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # 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 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: eld by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # EachlibXt-1.1.5/docbook.am000064401431060000012000000062311252061032400150150ustar00alancstaff00002660200006# # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # # DocBook/XML generated output formats to be installed shelf_DATA = # DocBook/XML file with chapters, appendix and images it includes dist_shelf_DATA = $(docbook) $(chapters) if HAVE_XMLTO if HAVE_STYLESHEETS XMLTO_SEARCHPATH_FLAGS = \ --searchpath "$(XORG_SGML_PATH)/X11" \ --searchpath "$(abs_top_builddir)" XMLTO_HTML_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl XMLTO_HTML_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_HTML_STYLESHEET_FLAGS) \ $(XMLTO_HTML_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.html) %.html: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< if HAVE_XMLTO_TEXT shelf_DATA += $(docbook:.xml=.txt) %.txt: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< endif HAVE_XMLTO_TEXT if HAVE_FOP XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ XMLTO_PDF_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl XMLTO_FO_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_FO_STYLESHEET_FLAGS) \ $(XMLTO_FO_IMAGEPATH_FLAGS) \ $(XMLTO_PDF_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.pdf) %.pdf: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< shelf_DATA += $(docbook:.xml=.ps) %.ps: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< endif HAVE_FOP # Generate documents cross-reference target databases if HAVE_XSLTPROC XSLT_SEARCHPATH_FLAGS = \ --path "$(XORG_SGML_PATH)/X11" \ --path "$(abs_top_builddir)" XSLT_OLINK_FLAGS = \ --stringparam targets.filename "$@" \ --stringparam collect.xref.targets "only" \ --stringparam olink.base.uri "$(@:.db=)" XSLT_HTML_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl XSLT_PDF_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-fo.xsl shelf_DATA += $(docbook:.xml=.html.db) %.html.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< shelf_DATA += $(docbook:.xml=.pdf.db) %.pdf.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< endif HAVE_XSLTPROC endif HAVE_STYLESHEETS endif HAVE_XMLTO CLEANFILES = $(shelf_DATA) libXt-1.1.5/test-driver000075501431060000012000000110401252061035100152460ustar00alancstaff00002660200006#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libXt-1.1.5/install-sh000075501431060000012000000345231252061035000150660ustar00alancstaff00002660200006#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # 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 $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precelibXt-1.1.5/COPYING000064401431060000012000000130511252061032400141070ustar00alancstaff00002660200006 Copyright © 2001,2003 Keith Packard 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 Keith Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Keith Packard makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright (c) 1993, 2011, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright (c) 1993, 1994 X Consortium Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealing in this Software without prior written authorization from the X Consortium. libXt-1.1.5/ltmain.sh000044401431060000012000010515221252061034000146760ustar00alancstaff00002660200006 # 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 # 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 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% $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" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi 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 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 ;; 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 lt" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=libXt-1.1.5/include/Makefile.in000064401431060000012000000460711252061035000165530ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(xtinclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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 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)$(xtincludedir)" \ "$(DESTDIR)$(xtincludedir)" HEADERS = $(nodist_xtinclude_HEADERS) $(xtinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ xtincludedir = ${includedir}/X11 xtinclude_HEADERS = \ X11/Composite.h \ X11/CompositeP.h \ X11/ConstrainP.h \ X11/Constraint.h \ X11/Core.h \ X11/CoreP.h \ X11/Intrinsic.h \ X11/IntrinsicP.h \ X11/Object.h \ X11/ObjectP.h \ X11/RectObj.h \ X11/RectObjP.h \ X11/ResConfigP.h \ X11/ShellP.h \ X11/Vendor.h \ X11/VendorP.h \ \ X11/CallbackI.h \ X11/ConvertI.h \ X11/CreateI.h \ X11/EventI.h \ X11/HookObjI.h \ X11/InitialI.h \ X11/IntrinsicI.h \ X11/PassivGraI.h \ X11/ResourceI.h \ X11/SelectionI.h \ X11/ShellI.h \ X11/ThreadsI.h \ X11/TranslateI.h \ X11/VarargsI.h \ X11/Xtos.h nodist_xtinclude_HEADERS = \ X11/StringDefs.h \ X11/Shell.h DISTCLEANFILES = \ X11/StringDefs.h \ X11/Shell.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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 install-nodist_xtincludeHEADERS: $(nodist_xtinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(xtincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(xtincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(xtincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(xtincludedir)" || exit $$?; \ done uninstall-nodist_xtincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(xtincludedir)'; $(am__uninstall_files_from_dir) install-xtincludeHEADERS: $(xtinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(xtincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(xtincludedir)" || 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_HEADER) $$files '$(DESTDIR)$(xtincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(xtincludedir)" || exit $$?; \ done uninstall-xtincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(xtincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 $(HEADERS) installdirs: for dir in "$(DESTDIR)$(xtincludedir)" "$(DESTDIR)$(xtincludedir)"; 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nodist_xtincludeHEADERS \ install-xtincludeHEADERS 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: uninstall-nodist_xtincludeHEADERS \ uninstall-xtincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ 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-nodist_xtincludeHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip \ install-xtincludeHEADERS installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-nodist_xtincludeHEADERS uninstall-xtincludeHEADERS .PRECIOUS: Makefile # 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: ir@ 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 = @pdfdilibXt-1.1.5/include/Makefile.am000064401431060000012000000013331252061032400165330ustar00alancstaff00002660200006xtincludedir = ${includedir}/X11 xtinclude_HEADERS = \ X11/Composite.h \ X11/CompositeP.h \ X11/ConstrainP.h \ X11/Constraint.h \ X11/Core.h \ X11/CoreP.h \ X11/Intrinsic.h \ X11/IntrinsicP.h \ X11/Object.h \ X11/ObjectP.h \ X11/RectObj.h \ X11/RectObjP.h \ X11/ResConfigP.h \ X11/ShellP.h \ X11/Vendor.h \ X11/VendorP.h \ \ X11/CallbackI.h \ X11/ConvertI.h \ X11/CreateI.h \ X11/EventI.h \ X11/HookObjI.h \ X11/InitialI.h \ X11/IntrinsicI.h \ X11/PassivGraI.h \ X11/ResourceI.h \ X11/SelectionI.h \ X11/ShellI.h \ X11/ThreadsI.h \ X11/TranslateI.h \ X11/VarargsI.h \ X11/Xtos.h nodist_xtinclude_HEADERS = \ X11/StringDefs.h \ X11/Shell.h DISTCLEANFILES = \ X11/StringDefs.h \ X11/Shell.h libXt-1.1.5/include/X11/EventI.h000064401431060000012000000101531252061032400164130ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * Event.h - exported types and functions for toolkit event handler * * Author: Charles Haynes * Digital Equipment Corporation * Western Software Laboratory * Date: Sun Dec 6 1987 */ #ifndef _Event_h_ #define _Event_h_ typedef struct _XtGrabRec *XtGrabList; #include "PassivGraI.h" _XFUNCPROTOBEGIN extern void _XtEventInitialize( void ); typedef struct _XtEventRec { XtEventTable next; EventMask mask; /* also select_data count for RecExt */ XtEventHandler proc; XtPointer closure; unsigned int select:1; unsigned int has_type_specifier:1; unsigned int async:1; /* not used, here for Digital extension? */ } XtEventRec; typedef struct _XtGrabRec { XtGrabList next; Widget widget; unsigned int exclusive:1; unsigned int spring_loaded:1; }XtGrabRec; typedef struct _BlockHookRec { struct _BlockHookRec* next; XtAppContext app; XtBlockHookProc proc; XtPointer closure; } BlockHookRec, *BlockHook; extern void _XtFreeEventTable( XtEventTable* /* event_table */ ); extern Boolean _XtOnGrabList( Widget /* widget */, XtGrabRec* /* grabList */ ); extern void _XtRemoveAllInputs( XtAppContext /* app */ ); extern void _XtRefreshMapping( XEvent* /* event */, _XtBoolean /* dispatch */ ); extern void _XtSendFocusEvent( Widget /* child */, int /* type */); extern EventMask _XtConvertTypeToMask( int /* eventType */ ); /* EventUtil.c */ extern Widget _XtFindRemapWidget(XEvent *event, Widget widget, EventMask mask, XtPerDisplayInput pdi); extern void _XtUngrabBadGrabs(XEvent *event, Widget widget, EventMask mask, XtPerDisplayInput pdi); extern void _XtFillAncestorList(Widget **listPtr, int *maxElemsPtr, int *numElemsPtr, Widget start, Widget breakWidget); /* NextEvent.c */ extern Boolean XtAppPeekEvent_SkipTimer; _XFUNCPROTOEND #endif /* _Event_h_ */ CLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name olibXt-1.1.5/include/X11/IntrinsicI.h000064401431060000012000000146101252061032400172760ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtintrinsicI_h #define _XtintrinsicI_h #include "Xtos.h" #include "IntrinsicP.h" #ifdef WIN32 #define _WILLWINSOCK_ #endif #include #include "Object.h" #include "RectObj.h" #include "ObjectP.h" #include "RectObjP.h" #include "ConvertI.h" #include "TranslateI.h" #define RectObjClassFlag 0x02 #define WidgetClassFlag 0x04 #define CompositeClassFlag 0x08 #define ConstraintClassFlag 0x10 #define ShellClassFlag 0x20 #define WMShellClassFlag 0x40 #define TopLevelClassFlag 0x80 /* * The following macros, though very handy, are not suitable for * IntrinsicP.h as they violate the rule that arguments are to * be evaluated exactly once. */ #define XtDisplayOfObject(object) \ (XtIsWidget(object) ? (object)->core.screen->display : \ _XtIsHookObject(object) ? ((HookObject)(object))->hooks.screen->display : \ _XtWindowedAncestor(object)->core.screen->display) #define XtScreenOfObject(object) \ (XtIsWidget(object) ? (object)->core.screen : \ _XtIsHookObject(object) ? ((HookObject)(object))->hooks.screen : \ _XtWindowedAncestor(object)->core.screen) #define XtWindowOfObject(object) \ ((XtIsWidget(object) ? (object) : _XtWindowedAncestor(object)) \ ->core.window) #define XtIsManaged(object) \ (XtIsRectObj(object) ? (object)->core.managed : False) #define XtIsSensitive(object) \ (XtIsRectObj(object) ? ((object)->core.sensitive && \ (object)->core.ancestor_sensitive) : False) /**************************************************************** * * Byte utilities * ****************************************************************/ #define _XBCOPYFUNC _XtBcopy #include #define XtMemmove(dst, src, size) \ if ((char *)(dst) != (char *)(src)) { \ (void) memcpy((char *) (dst), (char *) (src), (int) (size)); \ } #define XtBZero(dst, size) \ bzero((char *) (dst), (int) (size)) #define XtMemcmp(b1, b2, size) \ memcmp((char *) (b1), (char *) (b2), (int) (size)) /**************************************************************** * * Stack cache allocation/free * ****************************************************************/ #define XtStackAlloc(size, stack_cache_array) \ ((size) <= sizeof(stack_cache_array) \ ? (XtPointer)(stack_cache_array) \ : XtMalloc((unsigned)(size))) #define XtStackFree(pointer, stack_cache_array) \ { if ((pointer) != ((XtPointer)(stack_cache_array))) XtFree(pointer); } /*************************************************************** * * Filename defines * **************************************************************/ /* used by XtResolvePathname */ #ifndef XFILESEARCHPATHDEFAULT #define XFILESEARCHPATHDEFAULT "/usr/lib/X11/%L/%T/%N%S:/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S" #endif /* the following two were both "X Toolkit " prior to R4 */ #ifndef XTERROR_PREFIX #define XTERROR_PREFIX "" #endif #ifndef XTWARNING_PREFIX #define XTWARNING_PREFIX "" #endif #ifndef ERRORDB #define ERRORDB "/usr/lib/X11/XtErrorDB" #endif _XFUNCPROTOBEGIN extern String XtCXtToolkitError; extern void _XtAllocError( String /* alloc_type */ ); extern void _XtCompileResourceList( XtResourceList /* resources */, Cardinal /* num_resources */ ); extern XtGeometryResult _XtMakeGeometryRequest( Widget /* widget */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply_return */, Boolean* /* clear_rect_obj */ ); extern Boolean _XtIsHookObject( Widget /* widget */ ); extern void _XtAddShellToHookObj( Widget /* widget */ ); /* GCManager.c */ extern void _XtGClistFree(Display *dpy, XtPerDisplay pd); /** GeoTattler stuff */ #ifdef XT_GEO_TATTLER extern void _XtGeoTab (int); extern void _XtGeoTrace ( Widget widget, ... ) _X_ATTRIBUTE_PRINTF(2,3); #define CALLGEOTAT(f) f #else /* XT_GEO_TATTLER */ #define CALLGEOTAT(f) #endif /* XT_GEO_TATTLER */ #ifndef XTTRACEMEMORY extern char* __XtMalloc ( unsigned /* size */ ); extern char* __XtCalloc ( unsigned /* num */, unsigned /* size */ ); #else #define __XtMalloc XtMalloc #define __XtCalloc XtCalloc #endif _XFUNCPROTOEND #endif /* _XtintrinsicI_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/Xtos.h000064401431060000012000000055531252061032400161660ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _Xtos_h #define _Xtos_h #define ALLOCATE_LOCAL_FALLBACK(_size) XtMalloc((unsigned long)(_size)) #define DEALLOCATE_LOCAL_FALLBACK(_ptr) XtFree((XtPointer)(_ptr)) #include #if defined (_LP64) || \ defined(__alpha) || defined(__alpha__) || \ defined(__ia64__) || defined(ia64) || \ defined(__sparc64__) || \ defined(__s390x__) || \ (defined(__hppa__) && defined(__LP64__)) || \ defined(__amd64__) || defined(amd64) || \ defined(__powerpc64__) || \ (defined(sgi) && (_MIPS_SZLONG == 64)) #define LONG64 #endif #endif /* _Xtos_h */ /* DON'T ADD STUFF AFTER THIS #endif */ is software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies anlibXt-1.1.5/include/X11/Intrinsic.h000064401431060000012000001735501252061032400171760ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifndef _XtIntrinsic_h #define _XtIntrinsic_h #include #include #include #include #ifdef XT_BC #include /* for R4 compatibility */ #else #include #include /* for XtNewString */ #endif /* XT_BC else */ #define XtSpecificationRelease 6 typedef char *String; /* We do this in order to get "const" declarations to work right. We * use _XtString instead of String so that C++ applications can * #define String to something else if they choose, to avoid conflicts * with other C++ libraries. */ #define _XtString char* /* _Xt names are private to Xt implementation, do not use in client code */ #if NeedWidePrototypes #define _XtBoolean int #define _XtDimension unsigned int #define _XtKeyCode unsigned int #define _XtPosition int #define _XtXtEnum unsigned int #else #define _XtBoolean Boolean #define _XtDimension Dimension #define _XtKeyCode KeyCode #define _XtPosition Position #define _XtXtEnum XtEnum #endif /* NeedWidePrototypes */ #include #ifdef VMS #define externalref globalref #define externaldef(psect) globaldef {"psect"} noshare #else #define externalref extern #define externaldef(psect) #endif /* VMS */ #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif #define XtNumber(arr) ((Cardinal) (sizeof(arr) / sizeof(arr[0]))) typedef struct _WidgetRec *Widget; typedef Widget *WidgetList; typedef struct _WidgetClassRec *WidgetClass; typedef struct _CompositeRec *CompositeWidget; typedef struct _XtActionsRec *XtActionList; typedef struct _XtEventRec *XtEventTable; typedef struct _XtAppStruct *XtAppContext; typedef unsigned long XtValueMask; typedef unsigned long XtIntervalId; typedef unsigned long XtInputId; typedef unsigned long XtWorkProcId; typedef unsigned long XtSignalId; typedef unsigned int XtGeometryMask; typedef unsigned long XtGCMask; /* Mask of values that are used by widget*/ typedef unsigned long Pixel; /* Index into colormap */ typedef int XtCacheType; #define XtCacheNone 0x001 #define XtCacheAll 0x002 #define XtCacheByDisplay 0x003 #define XtCacheRefCount 0x100 /**************************************************************** * * System Dependent Definitions; see spec for specific range * requirements. Do not assume every implementation uses the * same base types! * * * XtArgVal ought to be a union of XtPointer, char *, long, int *, and proc * * but casting to union types is not really supported. * * So the typedef for XtArgVal should be chosen such that * * sizeof (XtArgVal) >= sizeof(XtPointer) * sizeof(char *) * sizeof(long) * sizeof(int *) * sizeof(proc *) * * ArgLists rely heavily on the above typedef. * ****************************************************************/ typedef char Boolean; typedef long XtArgVal; typedef unsigned char XtEnum; typedef unsigned int Cardinal; typedef unsigned short Dimension; /* Size in pixels */ typedef short Position; /* Offset from 0 coordinate */ typedef void* XtPointer; /* The type Opaque is NOT part of the Xt standard, do NOT use it. */ /* (It remains here only for backward compatibility.) */ typedef XtPointer Opaque; #include #include #include #include #include typedef struct _TranslationData *XtTranslations; typedef struct _TranslationData *XtAccelerators; typedef unsigned int Modifiers; typedef void (*XtActionProc)( Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); typedef XtActionProc* XtBoundActions; typedef struct _XtActionsRec{ String string; XtActionProc proc; } XtActionsRec; typedef enum { /* address mode parameter representation */ /* ------------ ------------------------ */ XtAddress, /* address */ XtBaseOffset, /* offset */ XtImmediate, /* constant */ XtResourceString, /* resource name string */ XtResourceQuark, /* resource name quark */ XtWidgetBaseOffset, /* offset from ancestor */ XtProcedureArg /* procedure to invoke */ } XtAddressMode; typedef struct { XtAddressMode address_mode; XtPointer address_id; Cardinal size; } XtConvertArgRec, *XtConvertArgList; typedef void (*XtConvertArgProc)( Widget /* widget */, Cardinal* /* size */, XrmValue* /* value */ ); typedef struct { XtGeometryMask request_mode; Position x, y; Dimension width, height, border_width; Widget sibling; int stack_mode; /* Above, Below, TopIf, BottomIf, Opposite, DontChange */ } XtWidgetGeometry; /* Additions to Xlib geometry requests: ask what would happen, don't do it */ #define XtCWQueryOnly (1 << 7) /* Additions to Xlib stack modes: don't change stack order */ #define XtSMDontChange 5 typedef void (*XtConverter)( /* obsolete */ XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */ ); typedef Boolean (*XtTypeConverter)( Display* /* dpy */, XrmValue* /* args */, Cardinal* /* num_args */, XrmValue* /* from */, XrmValue* /* to */, XtPointer* /* converter_data */ ); typedef void (*XtDestructor)( XtAppContext /* app */, XrmValue* /* to */, XtPointer /* converter_data */, XrmValue* /* args */, Cardinal* /* num_args */ ); typedef Opaque XtCacheRef; typedef Opaque XtActionHookId; typedef void (*XtActionHookProc)( Widget /* w */, XtPointer /* client_data */, String /* action_name */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); typedef unsigned long XtBlockHookId; typedef void (*XtBlockHookProc)( XtPointer /* client_data */ ); typedef void (*XtKeyProc)( Display* /* dpy */, _XtKeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ ); typedef void (*XtCaseProc)( Display* /* display */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ ); typedef void (*XtEventHandler)( Widget /* widget */, XtPointer /* closure */, XEvent* /* event */, Boolean* /* continue_to_dispatch */ ); typedef unsigned long EventMask; typedef enum {XtListHead, XtListTail } XtListPosition; typedef unsigned long XtInputMask; #define XtInputNoneMask 0L #define XtInputReadMask (1L<<0) #define XtInputWriteMask (1L<<1) #define XtInputExceptMask (1L<<2) typedef void (*XtTimerCallbackProc)( XtPointer /* closure */, XtIntervalId* /* id */ ); typedef void (*XtInputCallbackProc)( XtPointer /* closure */, int* /* source */, XtInputId* /* id */ ); typedef void (*XtSignalCallbackProc)( XtPointer /* closure */, XtSignalId* /* id */ ); typedef struct { String name; XtArgVal value; } Arg, *ArgList; typedef XtPointer XtVarArgsList; typedef void (*XtCallbackProc)( Widget /* widget */, XtPointer /* closure */, /* data the application registered */ XtPointer /* call_data */ /* callback specific data */ ); typedef struct _XtCallbackRec { XtCallbackProc callback; XtPointer closure; } XtCallbackRec, *XtCallbackList; typedef enum { XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome } XtCallbackStatus; typedef enum { XtGeometryYes, /* Request accepted. */ XtGeometryNo, /* Request denied. */ XtGeometryAlmost, /* Request denied, but willing to take replyBox. */ XtGeometryDone /* Request accepted and done. */ } XtGeometryResult; typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind; typedef struct { Widget shell_widget; Widget enable_widget; } XtPopdownIDRec, *XtPopdownID; typedef struct _XtResource { String resource_name; /* Resource name */ String resource_class; /* Resource class */ String resource_type; /* Representation type desired */ Cardinal resource_size; /* Size in bytes of representation */ Cardinal resource_offset;/* Offset from base to put resource value */ String default_type; /* representation type of specified default */ XtPointer default_addr; /* Address of default resource */ } XtResource, *XtResourceList; typedef void (*XtResourceDefaultProc)( Widget /* widget */, int /* offset */, XrmValue* /* value */ ); typedef String (*XtLanguageProc)( Display* /* dpy */, String /* xnl */, XtPointer /* client_data */ ); typedef void (*XtErrorMsgHandler)( String /* name */, String /* type */, String /* class */, String /* default */, String* /* params */, Cardinal* /* num_params */ ); typedef void (*XtErrorHandler)( String /* msg */ ); typedef void (*XtCreatePopupChildProc)( Widget /* shell */ ); typedef Boolean (*XtWorkProc)( XtPointer /* closure */ /* data the application registered */ ); typedef struct { char match; String substitution; } SubstitutionRec, *Substitution; typedef Boolean (*XtFilePredicate)( String /* filename */ ); typedef XtPointer XtRequestId; typedef Boolean (*XtConvertSelectionProc)( Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type_return */, XtPointer* /* value_return */, unsigned long* /* length_return */, int* /* format_return */ ); typedef void (*XtLoseSelectionProc)( Widget /* widget */, Atom* /* selection */ ); typedef void (*XtSelectionDoneProc)( Widget /* widget */, Atom* /* selection */, Atom* /* target */ ); typedef void (*XtSelectionCallbackProc)( Widget /* widget */, XtPointer /* closure */, Atom* /* selection */, Atom* /* type */, XtPointer /* value */, unsigned long* /* length */, int* /* format */ ); typedef void (*XtLoseSelectionIncrProc)( Widget /* widget */, Atom* /* selection */, XtPointer /* client_data */ ); typedef void (*XtSelectionDoneIncrProc)( Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRequestId* /* receiver_id */, XtPointer /* client_data */ ); typedef Boolean (*XtConvertSelectionIncrProc)( Widget /* widget */, Atom* /* selection */, Atom* /* target */, Atom* /* type */, XtPointer* /* value */, unsigned long* /* length */, int* /* format */, unsigned long* /* max_length */, XtPointer /* client_data */, XtRequestId* /* receiver_id */ ); typedef void (*XtCancelConvertSelectionProc)( Widget /* widget */, Atom* /* selection */, Atom* /* target */, XtRequestId* /* receiver_id */, XtPointer /* client_data */ ); typedef Boolean (*XtEventDispatchProc)( XEvent* /* event */ ); typedef void (*XtExtensionSelectProc)( Widget /* widget */, int* /* event_types */, XtPointer* /* select_data */, int /* count */, XtPointer /* client_data */ ); /*************************************************************** * * Exported Interfaces * ****************************************************************/ _XFUNCPROTOBEGIN extern Boolean XtConvertAndStore( Widget /* widget */, _Xconst _XtString /* from_type */, XrmValue* /* from */, _Xconst _XtString /* to_type */, XrmValue* /* to_in_out */ ); extern Boolean XtCallConverter( Display* /* dpy */, XtTypeConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_in_out */, XtCacheRef* /* cache_ref_return */ ); extern Boolean XtDispatchEvent( XEvent* /* event */ ); extern Boolean XtCallAcceptFocus( Widget /* widget */, Time* /* time */ ); extern Boolean XtPeekEvent( /* obsolete */ XEvent* /* event_return */ ); extern Boolean XtAppPeekEvent( XtAppContext /* app_context */, XEvent* /* event_return */ ); extern Boolean XtIsSubclass( Widget /* widget */, WidgetClass /* widgetClass */ ); extern Boolean XtIsObject( Widget /* object */ ); extern Boolean _XtCheckSubclassFlag( /* implementation-private */ Widget /* object */, _XtXtEnum /* type_flag */ ); extern Boolean _XtIsSubclassOf( /* implementation-private */ Widget /* object */, WidgetClass /* widget_class */, WidgetClass /* flag_class */, _XtXtEnum /* type_flag */ ); extern Boolean XtIsManaged( Widget /* rectobj */ ); extern Boolean XtIsRealized( Widget /* widget */ ); extern Boolean XtIsSensitive( Widget /* widget */ ); extern Boolean XtOwnSelection( Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionProc /* convert */, XtLoseSelectionProc /* lose */, XtSelectionDoneProc /* done */ ); extern Boolean XtOwnSelectionIncremental( Widget /* widget */, Atom /* selection */, Time /* time */, XtConvertSelectionIncrProc /* convert_callback */, XtLoseSelectionIncrProc /* lose_callback */, XtSelectionDoneIncrProc /* done_callback */, XtCancelConvertSelectionProc /* cancel_callback */, XtPointer /* client_data */ ); extern XtGeometryResult XtMakeResizeRequest( Widget /* widget */, _XtDimension /* width */, _XtDimension /* height */, Dimension* /* width_return */, Dimension* /* height_return */ ); extern void XtTranslateCoords( Widget /* widget */, _XtPosition /* x */, _XtPosition /* y */, Position* /* rootx_return */, Position* /* rooty_return */ ); extern KeySym* XtGetKeysymTable( Display* /* dpy */, KeyCode* /* min_keycode_return */, int* /* keysyms_per_keycode_return */ ); extern void XtKeysymToKeycodeList( Display* /* dpy */, KeySym /* keysym */, KeyCode** /* keycodes_return */, Cardinal* /* keycount_return */ ); extern void XtStringConversionWarning( /* obsolete */ _Xconst _XtString /* from_value */, _Xconst _XtString /* to_type */ ); extern void XtDisplayStringConversionWarning( Display* /* dpy */, _Xconst _XtString /* from_value */, _Xconst _XtString /* to_type */ ); externalref XtConvertArgRec const colorConvertArgs[]; externalref XtConvertArgRec const screenConvertArg[]; extern void XtAppAddConverter( /* obsolete */ XtAppContext /* app_context */, _Xconst _XtString /* from_type */, _Xconst _XtString /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ ); extern void XtAddConverter( /* obsolete */ _Xconst _XtString /* from_type */, _Xconst _XtString /* to_type */, XtConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */ ); extern void XtSetTypeConverter( _Xconst _XtString /* from_type */, _Xconst _XtString /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ ); extern void XtAppSetTypeConverter( XtAppContext /* app_context */, _Xconst _XtString /* from_type */, _Xconst _XtString /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, XtCacheType /* cache_type */, XtDestructor /* destructor */ ); extern void XtConvert( /* obsolete */ Widget /* widget */, _Xconst _XtString /* from_type */, XrmValue* /* from */, _Xconst _XtString /* to_type */, XrmValue* /* to_return */ ); extern void XtDirectConvert( /* obsolete */ XtConverter /* converter */, XrmValuePtr /* args */, Cardinal /* num_args */, XrmValuePtr /* from */, XrmValue* /* to_return */ ); /**************************************************************** * * Translation Management * ****************************************************************/ extern XtTranslations XtParseTranslationTable( _Xconst _XtString /* table */ ); extern XtAccelerators XtParseAcceleratorTable( _Xconst _XtString /* source */ ); extern void XtOverrideTranslations( Widget /* widget */, XtTranslations /* translations */ ); extern void XtAugmentTranslations( Widget /* widget */, XtTranslations /* translations */ ); extern void XtInstallAccelerators( Widget /* destination */, Widget /* source */ ); extern void XtInstallAllAccelerators( Widget /* destination */, Widget /* source */ ); extern void XtUninstallTranslations( Widget /* widget */ ); extern void XtAppAddActions( XtAppContext /* app_context */, XtActionList /* actions */, Cardinal /* num_actions */ ); extern void XtAddActions( /* obsolete */ XtActionList /* actions */, Cardinal /* num_actions */ ); extern XtActionHookId XtAppAddActionHook( XtAppContext /* app_context */, XtActionHookProc /* proc */, XtPointer /* client_data */ ); extern void XtRemoveActionHook( XtActionHookId /* id */ ); extern void XtGetActionList( WidgetClass /* widget_class */, XtActionList* /* actions_return */, Cardinal* /* num_actions_return */ ); extern void XtCallActionProc( Widget /* widget */, _Xconst _XtString /* action */, XEvent* /* event */, String* /* params */, Cardinal /* num_params */ ); extern void XtRegisterGrabAction( XtActionProc /* action_proc */, _XtBoolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */ ); extern void XtSetMultiClickTime( Display* /* dpy */, int /* milliseconds */ ); extern int XtGetMultiClickTime( Display* /* dpy */ ); extern KeySym XtGetActionKeysym( XEvent* /* event */, Modifiers* /* modifiers_return */ ); /*************************************************************** * * Keycode and Keysym procedures for translation management * ****************************************************************/ extern void XtTranslateKeycode( Display* /* dpy */, _XtKeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ ); extern void XtTranslateKey( Display* /* dpy */, _XtKeyCode /* keycode */, Modifiers /* modifiers */, Modifiers* /* modifiers_return */, KeySym* /* keysym_return */ ); extern void XtSetKeyTranslator( Display* /* dpy */, XtKeyProc /* proc */ ); extern void XtRegisterCaseConverter( Display* /* dpy */, XtCaseProc /* proc */, KeySym /* start */, KeySym /* stop */ ); extern void XtConvertCase( Display* /* dpy */, KeySym /* keysym */, KeySym* /* lower_return */, KeySym* /* upper_return */ ); /**************************************************************** * * Event Management * ****************************************************************/ /* XtAllEvents is valid only for XtRemoveEventHandler and * XtRemoveRawEventHandler; don't use it to select events! */ #define XtAllEvents ((EventMask) -1L) extern void XtAddEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ ); extern void XtRemoveEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ ); extern void XtAddRawEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ ); extern void XtRemoveRawEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */ ); extern void XtInsertEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ ); extern void XtInsertRawEventHandler( Widget /* widget */, EventMask /* event_mask */, _XtBoolean /* nonmaskable */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ ); extern XtEventDispatchProc XtSetEventDispatcher( Display* /* dpy */, int /* event_type */, XtEventDispatchProc /* proc */ ); extern Boolean XtDispatchEventToWidget( Widget /* widget */, XEvent* /* event */ ); extern void XtInsertEventTypeHandler( Widget /* widget */, int /* type */, XtPointer /* select_data */, XtEventHandler /* proc */, XtPointer /* closure */, XtListPosition /* position */ ); extern void XtRemoveEventTypeHandler( Widget /* widget */, int /* type */, XtPointer /* select_data */, XtEventHandler /* proc */, XtPointer /* closure */ ); extern EventMask XtBuildEventMask( Widget /* widget */ ); extern void XtRegisterExtensionSelector( Display* /* dpy */, int /* min_event_type */, int /* max_event_type */, XtExtensionSelectProc /* proc */, XtPointer /* client_data */ ); extern void XtAddGrab( Widget /* widget */, _XtBoolean /* exclusive */, _XtBoolean /* spring_loaded */ ); extern void XtRemoveGrab( Widget /* widget */ ); extern void XtProcessEvent( /* obsolete */ XtInputMask /* mask */ ); extern void XtAppProcessEvent( XtAppContext /* app_context */, XtInputMask /* mask */ ); extern void XtMainLoop( /* obsolete */ void ); extern void XtAppMainLoop( XtAppContext /* app_context */ ); extern void XtAddExposureToRegion( XEvent* /* event */, Region /* region */ ); extern void XtSetKeyboardFocus( Widget /* subtree */, Widget /* descendent */ ); extern Widget XtGetKeyboardFocusWidget( Widget /* widget */ ); extern XEvent* XtLastEventProcessed( Display* /* dpy */ ); extern Time XtLastTimestampProcessed( Display* /* dpy */ ); /**************************************************************** * * Event Gathering Routines * ****************************************************************/ extern XtIntervalId XtAddTimeOut( /* obsolete */ unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ ); extern XtIntervalId XtAppAddTimeOut( XtAppContext /* app_context */, unsigned long /* interval */, XtTimerCallbackProc /* proc */, XtPointer /* closure */ ); extern void XtRemoveTimeOut( XtIntervalId /* timer */ ); extern XtInputId XtAddInput( /* obsolete */ int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ ); extern XtInputId XtAppAddInput( XtAppContext /* app_context */, int /* source */, XtPointer /* condition */, XtInputCallbackProc /* proc */, XtPointer /* closure */ ); extern void XtRemoveInput( XtInputId /* id */ ); extern XtSignalId XtAddSignal( XtSignalCallbackProc /* proc */, XtPointer /* closure */); extern XtSignalId XtAppAddSignal( XtAppContext /* app_context */, XtSignalCallbackProc /* proc */, XtPointer /* closure */ ); extern void XtRemoveSignal( XtSignalId /* id */ ); extern void XtNoticeSignal( XtSignalId /* id */ ); extern void XtNextEvent( /* obsolete */ XEvent* /* event */ ); extern void XtAppNextEvent( XtAppContext /* app_context */, XEvent* /* event_return */ ); #define XtIMXEvent 1 #define XtIMTimer 2 #define XtIMAlternateInput 4 #define XtIMSignal 8 #define XtIMAll (XtIMXEvent | XtIMTimer | XtIMAlternateInput | XtIMSignal) extern Boolean XtPending( /* obsolete */ void ); extern XtInputMask XtAppPending( XtAppContext /* app_context */ ); extern XtBlockHookId XtAppAddBlockHook( XtAppContext /* app_context */, XtBlockHookProc /* proc */, XtPointer /* client_data */ ); extern void XtRemoveBlockHook( XtBlockHookId /* id */ ); /**************************************************************** * * Random utility routines * ****************************************************************/ #define XtIsRectObj(object) (_XtCheckSubclassFlag(object, (XtEnum)0x02)) #define XtIsWidget(object) (_XtCheckSubclassFlag(object, (XtEnum)0x04)) #define XtIsComposite(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x08)) #define XtIsConstraint(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x10)) #define XtIsShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x20)) #undef XtIsOverrideShell extern Boolean XtIsOverrideShell(Widget /* object */); #define XtIsOverrideShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)overrideShellWidgetClass, \ (WidgetClass)shellWidgetClass, (XtEnum)0x20)) #define XtIsWMShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x40)) #undef XtIsVendorShell extern Boolean XtIsVendorShell(Widget /* object */); #define XtIsVendorShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)vendorShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #undef XtIsTransientShell extern Boolean XtIsTransientShell(Widget /* object */); #define XtIsTransientShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)transientShellWidgetClass, \ (WidgetClass)wmShellWidgetClass, (XtEnum)0x40)) #define XtIsTopLevelShell(widget) (_XtCheckSubclassFlag(widget, (XtEnum)0x80)) #undef XtIsApplicationShell extern Boolean XtIsApplicationShell(Widget /* object */); #define XtIsApplicationShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)applicationShellWidgetClass, \ (WidgetClass)topLevelShellWidgetClass, (XtEnum)0x80)) #undef XtIsSessionShell extern Boolean XtIsSessionShell(Widget /* object */); #define XtIsSessionShell(widget) \ (_XtIsSubclassOf(widget, (WidgetClass)sessionShellWidgetClass, \ (WidgetClass)topLevelShellWidgetClass, (XtEnum)0x80)) extern void XtRealizeWidget( Widget /* widget */ ); void XtUnrealizeWidget( Widget /* widget */ ); extern void XtDestroyWidget( Widget /* widget */ ); extern void XtSetSensitive( Widget /* widget */, _XtBoolean /* sensitive */ ); extern void XtSetMappedWhenManaged( Widget /* widget */, _XtBoolean /* mapped_when_managed */ ); extern Widget XtNameToWidget( Widget /* reference */, _Xconst _XtString /* names */ ); extern Widget XtWindowToWidget( Display* /* display */, Window /* window */ ); extern XtPointer XtGetClassExtension( WidgetClass /* object_class */, Cardinal /* byte_offset */, XrmQuark /* type */, long /* version */, Cardinal /* record_size */ ); /*************************************************************** * * Arg lists * ****************************************************************/ #define XtSetArg(arg, n, d) \ ((void)( (arg).name = (n), (arg).value = (XtArgVal)(d) )) extern ArgList XtMergeArgLists( ArgList /* args1 */, Cardinal /* num_args1 */, ArgList /* args2 */, Cardinal /* num_args2 */ ); /*************************************************************** * * Vararg lists * ****************************************************************/ #define XtVaNestedList "XtVaNestedList" #define XtVaTypedArg "XtVaTypedArg" extern XtVarArgsList XtVaCreateArgsList( XtPointer /*unused*/, ... ) _X_SENTINEL(0); /************************************************************* * * Information routines * ************************************************************/ #ifndef _XtIntrinsicP_h /* We're not included from the private file, so define these */ extern Display *XtDisplay( Widget /* widget */ ); extern Display *XtDisplayOfObject( Widget /* object */ ); extern Screen *XtScreen( Widget /* widget */ ); extern Screen *XtScreenOfObject( Widget /* object */ ); extern Window XtWindow( Widget /* widget */ ); extern Window XtWindowOfObject( Widget /* object */ ); extern String XtName( Widget /* object */ ); extern WidgetClass XtSuperclass( Widget /* object */ ); extern WidgetClass XtClass( Widget /* object */ ); extern Widget XtParent( Widget /* widget */ ); #endif /*_XtIntrinsicP_h*/ #undef XtMapWidget extern void XtMapWidget(Widget /* w */); #define XtMapWidget(widget) XMapWindow(XtDisplay(widget), XtWindow(widget)) #undef XtUnmapWidget extern void XtUnmapWidget(Widget /* w */); #define XtUnmapWidget(widget) \ XUnmapWindow(XtDisplay(widget), XtWindow(widget)) extern void XtAddCallback( Widget /* widget */, _Xconst _XtString /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ ); extern void XtRemoveCallback( Widget /* widget */, _Xconst _XtString /* callback_name */, XtCallbackProc /* callback */, XtPointer /* closure */ ); extern void XtAddCallbacks( Widget /* widget */, _Xconst _XtString /* callback_name */, XtCallbackList /* callbacks */ ); extern void XtRemoveCallbacks( Widget /* widget */, _Xconst _XtString /* callback_name */, XtCallbackList /* callbacks */ ); extern void XtRemoveAllCallbacks( Widget /* widget */, _Xconst _XtString /* callback_name */ ); extern void XtCallCallbacks( Widget /* widget */, _Xconst _XtString /* callback_name */, XtPointer /* call_data */ ); extern void XtCallCallbackList( Widget /* widget */, XtCallbackList /* callbacks */, XtPointer /* call_data */ ); extern XtCallbackStatus XtHasCallbacks( Widget /* widget */, _Xconst _XtString /* callback_name */ ); /**************************************************************** * * Geometry Management * ****************************************************************/ extern XtGeometryResult XtMakeGeometryRequest( Widget /* widget */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply_return */ ); extern XtGeometryResult XtQueryGeometry( Widget /* widget */, XtWidgetGeometry* /* intended */, XtWidgetGeometry* /* preferred_return */ ); extern Widget XtCreatePopupShell( _Xconst _XtString /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtVaCreatePopupShell( _Xconst _XtString /* name */, WidgetClass /* widgetClass */, Widget /* parent */, ... ) _X_SENTINEL(0); extern void XtPopup( Widget /* popup_shell */, XtGrabKind /* grab_kind */ ); extern void XtPopupSpringLoaded( Widget /* popup_shell */ ); extern void XtCallbackNone( Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ ); extern void XtCallbackNonexclusive( Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ ); extern void XtCallbackExclusive( Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ ); extern void XtPopdown( Widget /* popup_shell */ ); extern void XtCallbackPopdown( Widget /* widget */, XtPointer /* closure */, XtPointer /* call_data */ ); extern void XtMenuPopupAction( Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); extern Widget XtCreateWidget( _Xconst _XtString /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtCreateManagedWidget( _Xconst _XtString /* name */, WidgetClass /* widget_class */, Widget /* parent */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtVaCreateWidget( _Xconst _XtString /* name */, WidgetClass /* widget */, Widget /* parent */, ... ) _X_SENTINEL(0); extern Widget XtVaCreateManagedWidget( _Xconst _XtString /* name */, WidgetClass /* widget_class */, Widget /* parent */, ... ) _X_SENTINEL(0); extern Widget XtCreateApplicationShell( /* obsolete */ _Xconst _XtString /* name */, WidgetClass /* widget_class */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtAppCreateShell( _Xconst _XtString /* application_name */, _Xconst _XtString /* application_class */, WidgetClass /* widget_class */, Display* /* display */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtVaAppCreateShell( _Xconst _XtString /* application_name */, _Xconst _XtString /* application_class */, WidgetClass /* widget_class */, Display* /* display */, ... ) _X_SENTINEL(0); /**************************************************************** * * Toolkit initialization * ****************************************************************/ extern void XtToolkitInitialize( void ); extern XtLanguageProc XtSetLanguageProc( XtAppContext /* app_context */, XtLanguageProc /* proc */, XtPointer /* client_data */ ); extern void XtDisplayInitialize( XtAppContext /* app_context */, Display* /* dpy */, _Xconst _XtString /* application_name */, _Xconst _XtString /* application_class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, int* /* argc */, char** /* argv */ ); extern Widget XtOpenApplication( XtAppContext* /* app_context_return */, _Xconst _XtString /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, int* /* argc_in_out */, String* /* argv_in_out */, String* /* fallback_resources */, WidgetClass /* widget_class */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtVaOpenApplication( XtAppContext* /* app_context_return */, _Xconst _XtString /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, int* /* argc_in_out */, String* /* argv_in_out */, String* /* fallback_resources */, WidgetClass /* widget_class */, ... ) _X_SENTINEL(0); extern Widget XtAppInitialize( /* obsolete */ XtAppContext* /* app_context_return */, _Xconst _XtString /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, int* /* argc_in_out */, String* /* argv_in_out */, String* /* fallback_resources */, ArgList /* args */, Cardinal /* num_args */ ); extern Widget XtVaAppInitialize( /* obsolete */ XtAppContext* /* app_context_return */, _Xconst _XtString /* application_class */, XrmOptionDescList /* options */, Cardinal /* num_options */, int* /* argc_in_out */, String* /* argv_in_out */, String* /* fallback_resources */, ... ) _X_SENTINEL(0); extern Widget XtInitialize( /* obsolete */ _Xconst _XtString /* shell_name */, _Xconst _XtString /* application_class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, int* /* argc */, char** /* argv */ ); extern Display *XtOpenDisplay( XtAppContext /* app_context */, _Xconst _XtString /* display_string */, _Xconst _XtString /* application_name */, _Xconst _XtString /* application_class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, int* /* argc */, char** /* argv */ ); extern XtAppContext XtCreateApplicationContext( void ); extern void XtAppSetFallbackResources( XtAppContext /* app_context */, String* /* specification_list */ ); extern void XtDestroyApplicationContext( XtAppContext /* app_context */ ); extern void XtInitializeWidgetClass( WidgetClass /* widget_class */ ); extern XtAppContext XtWidgetToApplicationContext( Widget /* widget */ ); extern XtAppContext XtDisplayToApplicationContext( Display* /* dpy */ ); extern XrmDatabase XtDatabase( Display* /* dpy */ ); extern XrmDatabase XtScreenDatabase( Screen* /* screen */ ); extern void XtCloseDisplay( Display* /* dpy */ ); extern void XtGetApplicationResources( Widget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaGetApplicationResources( Widget /* widget */, XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... ) _X_SENTINEL(0); extern void XtGetSubresources( Widget /* widget */, XtPointer /* base */, _Xconst _XtString /* name */, _Xconst _XtString /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaGetSubresources( Widget /* widget */, XtPointer /* base */, _Xconst _XtString /* name */, _Xconst _XtString /* class */, XtResourceList /* resources */, Cardinal /* num_resources */, ... ) _X_SENTINEL(0); extern void XtSetValues( Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaSetValues( Widget /* widget */, ... ) _X_SENTINEL(0); extern void XtGetValues( Widget /* widget */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaGetValues( Widget /* widget */, ... ) _X_SENTINEL(0); extern void XtSetSubvalues( XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaSetSubvalues( XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... ) _X_SENTINEL(0); extern void XtGetSubvalues( XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ArgList /* args */, Cardinal /* num_args */ ); extern void XtVaGetSubvalues( XtPointer /* base */, XtResourceList /* resources */, Cardinal /* num_resources */, ... ) _X_SENTINEL(0); extern void XtGetResourceList( WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ ); extern void XtGetConstraintResourceList( WidgetClass /* widget_class */, XtResourceList* /* resources_return */, Cardinal* /* num_resources_return */ ); #define XtUnspecifiedPixmap ((Pixmap)2) #define XtUnspecifiedShellInt (-1) #define XtUnspecifiedWindow ((Window)2) #define XtUnspecifiedWindowGroup ((Window)3) #define XtCurrentDirectory "XtCurrentDirectory" #define XtDefaultForeground "XtDefaultForeground" #define XtDefaultBackground "XtDefaultBackground" #define XtDefaultFont "XtDefaultFont" #define XtDefaultFontSet "XtDefaultFontSet" #define XtOffset(p_type,field) \ ((Cardinal) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) #ifdef offsetof #define XtOffsetOf(s_type,field) offsetof(s_type,field) #else #define XtOffsetOf(s_type,field) XtOffset(s_type*,field) #endif /************************************************************* * * Session Management * ************************************************************/ typedef struct _XtCheckpointTokenRec { int save_type; int interact_style; Boolean shutdown; Boolean fast; Boolean cancel_shutdown; int phase; int interact_dialog_type; /* return */ Boolean request_cancel; /* return */ Boolean request_next_phase; /* return */ Boolean save_success; /* return */ int type; /* implementation private */ Widget widget; /* implementation private */ } XtCheckpointTokenRec, *XtCheckpointToken; XtCheckpointToken XtSessionGetToken( Widget /* widget */ ); void XtSessionReturnToken( XtCheckpointToken /* token */ ); /************************************************************* * * Error Handling * ************************************************************/ extern XtErrorMsgHandler XtAppSetErrorMsgHandler( XtAppContext /* app_context */, XtErrorMsgHandler /* handler */ ); extern void XtSetErrorMsgHandler( /* obsolete */ XtErrorMsgHandler /* handler */ ); extern XtErrorMsgHandler XtAppSetWarningMsgHandler( XtAppContext /* app_context */, XtErrorMsgHandler /* handler */ ); extern void XtSetWarningMsgHandler( /* obsolete */ XtErrorMsgHandler /* handler */ ); extern void XtAppErrorMsg( XtAppContext /* app_context */, _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String* /* params */, Cardinal* /* num_params */ ); extern void XtErrorMsg( /* obsolete */ _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String* /* params */, Cardinal* /* num_params */ ); extern void XtAppWarningMsg( XtAppContext /* app_context */, _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String* /* params */, Cardinal* /* num_params */ ); extern void XtWarningMsg( /* obsolete */ _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String* /* params */, Cardinal* /* num_params */ ); extern XtErrorHandler XtAppSetErrorHandler( XtAppContext /* app_context */, XtErrorHandler /* handler */ ); extern void XtSetErrorHandler( /* obsolete */ XtErrorHandler /* handler */ ); extern XtErrorHandler XtAppSetWarningHandler( XtAppContext /* app_context */, XtErrorHandler /* handler */ ); extern void XtSetWarningHandler( /* obsolete */ XtErrorHandler /* handler */ ); extern void XtAppError( XtAppContext /* app_context */, _Xconst _XtString /* message */ ); extern void XtError( /* obsolete */ _Xconst _XtString /* message */ ); extern void XtAppWarning( XtAppContext /* app_context */, _Xconst _XtString /* message */ ); extern void XtWarning( /* obsolete */ _Xconst _XtString /* message */ ); extern XrmDatabase *XtAppGetErrorDatabase( XtAppContext /* app_context */ ); extern XrmDatabase *XtGetErrorDatabase( /* obsolete */ void ); extern void XtAppGetErrorDatabaseText( XtAppContext /* app_context */, _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String /* buffer_return */, int /* nbytes */, XrmDatabase /* database */ ); extern void XtGetErrorDatabaseText( /* obsolete */ _Xconst _XtString /* name */, _Xconst _XtString /* type */, _Xconst _XtString /* class */, _Xconst _XtString /* default */, String /* buffer_return */, int /* nbytes */ ); /**************************************************************** * * Memory Management * ****************************************************************/ extern char *XtMalloc( Cardinal /* size */ ); extern char *XtCalloc( Cardinal /* num */, Cardinal /* size */ ); extern char *XtRealloc( char* /* ptr */, Cardinal /* num */ ); extern void XtFree( char* /* ptr */ ); #ifndef _X_RESTRICT_KYWD # define _X_RESTRICT_KYWD #endif extern Cardinal XtAsprintf( String *new_string, _Xconst char * _X_RESTRICT_KYWD format, ... ) _X_ATTRIBUTE_PRINTF(2,3); #ifdef XTTRACEMEMORY extern char *_XtMalloc( /* implementation-private */ Cardinal /* size */, char * /* file */, int /* line */ ); extern char *_XtRealloc( /* implementation-private */ char * /* ptr */, Cardinal /* size */, char * /* file */, int /* line */ ); extern char *_XtCalloc( /* implementation-private */ Cardinal /* num */, Cardinal /* size */, char * /* file */, int /* line */ ); extern void _XtFree( /* implementation-private */ char * /* ptr */ ); #define XtMalloc(size) _XtMalloc(size, __FILE__, __LINE__) #define XtRealloc(ptr,size) _XtRealloc(ptr, size, __FILE__, __LINE__) #define XtCalloc(num,size) _XtCalloc(num, size, __FILE__, __LINE__) #define XtFree(ptr) _XtFree(ptr) #endif /* ifdef XTTRACEMEMORY */ #define XtNew(type) ((type *) XtMalloc((unsigned) sizeof(type))) #undef XtNewString extern String XtNewString(String /* str */); #define XtNewString(str) \ ((str) != NULL ? (strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) : NULL) /************************************************************* * * Work procs * **************************************************************/ extern XtWorkProcId XtAddWorkProc( /* obsolete */ XtWorkProc /* proc */, XtPointer /* closure */ ); extern XtWorkProcId XtAppAddWorkProc( XtAppContext /* app_context */, XtWorkProc /* proc */, XtPointer /* closure */ ); extern void XtRemoveWorkProc( XtWorkProcId /* id */ ); /**************************************************************** * * Graphic Context Management *****************************************************************/ extern GC XtGetGC( Widget /* widget */, XtGCMask /* valueMask */, XGCValues* /* values */ ); extern GC XtAllocateGC( Widget /* widget */, Cardinal /* depth */, XtGCMask /* valueMask */, XGCValues* /* values */, XtGCMask /* dynamicMask */, XtGCMask /* unusedMask */ ); /* This implementation of XtDestroyGC differs from the formal specification * for historic backwards compatibility reasons. As other implementations * may conform to the spec, use of XtReleaseGC is strongly encouraged. */ extern void XtDestroyGC( /* obsolete */ GC /* gc */ ); extern void XtReleaseGC( Widget /* object */, GC /* gc */ ); extern void XtAppReleaseCacheRefs( XtAppContext /* app_context */, XtCacheRef* /* cache_ref */ ); extern void XtCallbackReleaseCacheRef( Widget /* widget */, XtPointer /* closure */, /* XtCacheRef */ XtPointer /* call_data */ ); extern void XtCallbackReleaseCacheRefList( Widget /* widget */, XtPointer /* closure */, /* XtCacheRef* */ XtPointer /* call_data */ ); extern void XtSetWMColormapWindows( Widget /* widget */, Widget* /* list */, Cardinal /* count */ ); extern String XtFindFile( _Xconst _XtString /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ ); extern String XtResolvePathname( Display* /* dpy */, _Xconst _XtString /* type */, _Xconst _XtString /* filename */, _Xconst _XtString /* suffix */, _Xconst _XtString /* path */, Substitution /* substitutions */, Cardinal /* num_substitutions */, XtFilePredicate /* predicate */ ); /**************************************************************** * * Selections * *****************************************************************/ #define XT_CONVERT_FAIL (Atom)0x80000001 extern void XtDisownSelection( Widget /* widget */, Atom /* selection */, Time /* time */ ); extern void XtGetSelectionValue( Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* callback */, XtPointer /* closure */, Time /* time */ ); extern void XtGetSelectionValues( Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* closures */, Time /* time */ ); extern void XtAppSetSelectionTimeout( XtAppContext /* app_context */, unsigned long /* timeout */ ); extern void XtSetSelectionTimeout( /* obsolete */ unsigned long /* timeout */ ); extern unsigned long XtAppGetSelectionTimeout( XtAppContext /* app_context */ ); extern unsigned long XtGetSelectionTimeout( /* obsolete */ void ); extern XSelectionRequestEvent *XtGetSelectionRequest( Widget /* widget */, Atom /* selection */, XtRequestId /* request_id */ ); extern void XtGetSelectionValueIncremental( Widget /* widget */, Atom /* selection */, Atom /* target */, XtSelectionCallbackProc /* selection_callback */, XtPointer /* client_data */, Time /* time */ ); extern void XtGetSelectionValuesIncremental( Widget /* widget */, Atom /* selection */, Atom* /* targets */, int /* count */, XtSelectionCallbackProc /* callback */, XtPointer* /* client_data */, Time /* time */ ); extern void XtSetSelectionParameters( Widget /* requestor */, Atom /* selection */, Atom /* type */, XtPointer /* value */, unsigned long /* length */, int /* format */ ); extern void XtGetSelectionParameters( Widget /* owner */, Atom /* selection */, XtRequestId /* request_id */, Atom* /* type_return */, XtPointer* /* value_return */, unsigned long* /* length_return */, int* /* format_return */ ); extern void XtCreateSelectionRequest( Widget /* requestor */, Atom /* selection */ ); extern void XtSendSelectionRequest( Widget /* requestor */, Atom /* selection */, Time /* time */ ); extern void XtCancelSelectionRequest( Widget /* requestor */, Atom /* selection */ ); extern Atom XtReservePropertyAtom( Widget /* widget */ ); extern void XtReleasePropertyAtom( Widget /* widget */, Atom /* selection */ ); extern void XtGrabKey( Widget /* widget */, _XtKeyCode /* keycode */, Modifiers /* modifiers */, _XtBoolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ ); extern void XtUngrabKey( Widget /* widget */, _XtKeyCode /* keycode */, Modifiers /* modifiers */ ); extern int XtGrabKeyboard( Widget /* widget */, _XtBoolean /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ ); extern void XtUngrabKeyboard( Widget /* widget */, Time /* time */ ); extern void XtGrabButton( Widget /* widget */, int /* button */, Modifiers /* modifiers */, _XtBoolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ ); extern void XtUngrabButton( Widget /* widget */, unsigned int /* button */, Modifiers /* modifiers */ ); extern int XtGrabPointer( Widget /* widget */, _XtBoolean /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ ); extern void XtUngrabPointer( Widget /* widget */, Time /* time */ ); extern void XtGetApplicationNameAndClass( Display* /* dpy */, String* /* name_return */, String* /* class_return */ ); extern void XtRegisterDrawable( Display* /* dpy */, Drawable /* drawable */, Widget /* widget */ ); extern void XtUnregisterDrawable( Display* /* dpy */, Drawable /* drawable */ ); extern Widget XtHooksOfDisplay( Display* /* dpy */ ); typedef struct { String type; Widget widget; ArgList args; Cardinal num_args; } XtCreateHookDataRec, *XtCreateHookData; typedef struct { String type; Widget widget; XtPointer event_data; Cardinal num_event_data; } XtChangeHookDataRec, *XtChangeHookData; typedef struct { Widget old, req; ArgList args; Cardinal num_args; } XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData; typedef struct { String type; Widget widget; XtGeometryMask changeMask; XWindowChanges changes; } XtConfigureHookDataRec, *XtConfigureHookData; typedef struct { String type; Widget widget; XtWidgetGeometry* request; XtWidgetGeometry* reply; XtGeometryResult result; } XtGeometryHookDataRec, *XtGeometryHookData; typedef struct { String type; Widget widget; } XtDestroyHookDataRec, *XtDestroyHookData; extern void XtGetDisplays( XtAppContext /* app_context */, Display*** /* dpy_return */, Cardinal* /* num_dpy_return */ ); extern Boolean XtToolkitThreadInitialize( void ); extern void XtAppSetExitFlag( XtAppContext /* app_context */ ); extern Boolean XtAppGetExitFlag( XtAppContext /* app_context */ ); extern void XtAppLock( XtAppContext /* app_context */ ); extern void XtAppUnlock( XtAppContext /* app_context */ ); /* * Predefined Resource Converters */ /* String converters */ extern Boolean XtCvtStringToAcceleratorTable( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToAtom( Display* /* dpy */, XrmValuePtr /* args */, /* Display */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToBool( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToBoolean( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToCommandArgArray( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToCursor( Display* /* dpy */, XrmValuePtr /* args */, /* Display */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToDimension( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToDirectoryString( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToDisplay( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToFile( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToFloat( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToFont( Display* /* dpy */, XrmValuePtr /* args */, /* Display */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToFontSet( Display* /* dpy */, XrmValuePtr /* args */, /* Display, locale */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToFontStruct( Display* /* dpy */, XrmValuePtr /* args */, /* Display */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToGravity( Display* /* dpy */, XrmValuePtr /* args */, Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToInitialState( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToInt( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToPixel( Display* /* dpy */, XrmValuePtr /* args */, /* Screen, Colormap */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); #define XtCvtStringToPosition XtCvtStringToShort extern Boolean XtCvtStringToRestartStyle( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToShort( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToTranslationTable( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToUnsignedChar( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtStringToVisual( Display* /* dpy */, XrmValuePtr /* args */, /* Screen, depth */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); /* int converters */ extern Boolean XtCvtIntToBool( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToBoolean( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToColor( Display* /* dpy */, XrmValuePtr /* args */, /* Screen, Colormap */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); #define XtCvtIntToDimension XtCvtIntToShort extern Boolean XtCvtIntToFloat( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToFont( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToPixel( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToPixmap( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); #define XtCvtIntToPosition XtCvtIntToShort extern Boolean XtCvtIntToShort( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); extern Boolean XtCvtIntToUnsignedChar( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); /* Color converter */ extern Boolean XtCvtColorToPixel( Display* /* dpy */, XrmValuePtr /* args */, /* none */ Cardinal* /* num_args */, XrmValuePtr /* fromVal */, XrmValuePtr /* toVal */, XtPointer* /* closure_ret */ ); /* Pixel converter */ #define XtCvtPixelToColor XtCvtIntToColor _XFUNCPROTOEND #endif /*_XtIntrinsic_h*/ /* DON'T ADD STUFF AFTER THIS #endif */ */, Cursor /* cursor */ ); extern void XtUngrabButton( Widget /* widget */, unsigned int /* button */, Modifiers /* modifiers */libXt-1.1.5/include/X11/ShellI.h000064401431060000012000000003241252061032400164000ustar00alancstaff00002660200006#ifndef _XtShellInternal_h #define _XtShellInternal_h #include _XFUNCPROTOBEGIN extern void _XtShellGetCoordinates(Widget widget, Position *x, Position *y); #endif /* _XtShellInternal_h */ libXt-1.1.5/include/X11/VarargsI.h000064401431060000012000000045311252061032400167420ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifndef _VarargsI_h_ #define _VarargsI_h_ #include /* private routines */ _XFUNCPROTOBEGIN extern void _XtCountVaList( va_list /*var*/, int* /*total_count*/, int* /*typed_count*/ ); extern void _XtVaToArgList( Widget /*widget*/, va_list /*var*/, int /*max_count*/, ArgList* /*args_return*/, Cardinal* /*num_args_return*/ ); extern void _XtVaToTypedArgList( va_list /*var*/, int /*count*/, XtTypedArgList* /*args_return*/, Cardinal* /*num_args_return*/ ); extern XtTypedArgList _XtVaCreateTypedArgList( va_list /*var*/, int /*count*/ ); extern void _XtFreeArgList( ArgList /*args*/, int /*total_count*/, int /*typed_count*/ ); extern void _XtGetApplicationResources( Widget /*w*/, XtPointer /*base*/, XtResourceList /*resources*/, Cardinal /*num_resources*/, ArgList /*args*/, Cardinal /*num_args*/, XtTypedArgList /*typed_args*/, Cardinal /*num_typed_args*/ ); extern void _XtGetSubresources( Widget /*w*/, XtPointer /*base*/, const char* /*name*/, const char* /*class*/, XtResourceList /*resources*/, Cardinal /*num_resources*/, ArgList /*args*/, Cardinal /*num_args*/, XtTypedArgList /*typed_args*/, Cardinal /*num_typed_args*/ ); _XFUNCPROTOEND #endif /* _VarargsI_h_ */ libXt-1.1.5/include/X11/HookObjI.h000064401431060000012000000042131252061032400166650ustar00alancstaff00002660200006/* Copyright 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifndef _XtHookObjI_h #define _XtHookObjI_h _XFUNCPROTOBEGIN /* This object is implementation-dependent and private to the library. */ typedef struct _HookObjRec *HookObject; typedef struct _HookObjClassRec *HookObjectClass; externalref WidgetClass hookObjectClass; typedef struct _HookObjPart { /* resources */ XtCallbackList createhook_callbacks; XtCallbackList changehook_callbacks; XtCallbackList confighook_callbacks; XtCallbackList geometryhook_callbacks; XtCallbackList destroyhook_callbacks; WidgetList shells; Cardinal num_shells; /* private data */ Cardinal max_shells; Screen* screen; }HookObjPart; typedef struct _HookObjRec { ObjectPart object; HookObjPart hooks; } HookObjRec; typedef struct _HookObjClassPart { int unused; } HookObjClassPart; typedef struct _HookObjClassRec { ObjectClassPart object_class; HookObjClassPart hook_class; } HookObjClassRec; externalref HookObjClassRec hookObjClassRec; _XFUNCPROTOEND #endif /* ifndef _Xt_HookObjI_h */ ND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibXt-1.1.5/include/X11/SelectionI.h000064401431060000012000000121161252061032400172600ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtselectionI_h #define _XtselectionI_h #include "Intrinsic.h" typedef struct _RequestRec *Request; typedef struct _SelectRec *Select; typedef struct _RequestRec { Select ctx; /* logical owner */ Widget widget; /* widget actually receiving Selection events */ Window requestor; Atom property; Atom target; Atom type; int format; XtPointer value; unsigned long bytelength; unsigned long offset; XtIntervalId timeout; XSelectionRequestEvent event; /* for XtGetSelectionRequest */ Boolean allSent; } RequestRec; typedef struct { Atom prop; Boolean avail; } SelectionPropRec, *SelectionProp; typedef struct { Display *dpy; Atom incr_atom, indirect_atom, timestamp_atom; int propCount; SelectionProp list; } PropListRec, *PropList; typedef struct _SelectRec { Atom selection; /* constant */ Display *dpy; /* constant */ Widget widget; Time time; unsigned long serial; XtConvertSelectionProc convert; XtLoseSelectionProc loses; XtSelectionDoneProc notify; XtCancelConvertSelectionProc owner_cancel; XtPointer owner_closure; PropList prop_list; Request req; /* state for local non-incr xfer */ int ref_count; /* of active transfers */ unsigned int incremental:1; unsigned int free_when_done:1; unsigned int was_disowned:1; } SelectRec; typedef struct _ParamRec { Atom selection; Atom param; } ParamRec, *Param; typedef struct _ParamInfoRec { unsigned int count; Param paramlist; } ParamInfoRec, *ParamInfo; typedef struct _QueuedRequestRec { Atom selection; Atom target; Atom param; XtSelectionCallbackProc callback; XtPointer closure; Time time; Boolean incremental; } QueuedRequestRec, *QueuedRequest; typedef struct _QueuedRequestInfoRec { int count; Atom *selections; QueuedRequest *requests; } QueuedRequestInfoRec, *QueuedRequestInfo; typedef struct { XtSelectionCallbackProc *callbacks; XtPointer *req_closure; Atom property; Atom *target; Atom type; int format; char *value; int bytelength; int offset; XtIntervalId timeout; XtEventHandler proc; Widget widget; Time time; Select ctx; Boolean *incremental; int current; } CallBackInfoRec, *CallBackInfo; typedef struct { Atom target; Atom property; } IndirectPair; #define IndirectPairWordSize 2 typedef struct { int active_transfer_count; } RequestWindowRec; #define MAX_SELECTION_INCR(dpy) (((65536 < XMaxRequestSize(dpy)) ? \ (65536 << 2) : (XMaxRequestSize(dpy) << 2))-100) #define MATCH_SELECT(event, info) ((event->time == info->time) && \ (event->requestor == XtWindow(info->widget)) && \ (event->selection == info->ctx->selection) && \ (event->target == *info->target)) #endif /* _XtselectionI_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/Constraint.h000064401431060000012000000050101252061032400173410ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtConstraint_h #define _XtConstraint_h _XFUNCPROTOBEGIN typedef struct _ConstraintClassRec *ConstraintWidgetClass; #ifndef VMS externalref WidgetClass constraintWidgetClass; #endif _XFUNCPROTOEND #endif /* _XtConstraint_h */ /* DON'T ADD STUFF AFTER THIS #endif */ **************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portiolibXt-1.1.5/include/X11/CreateI.h000064401431060000012000000025011252061032400165330ustar00alancstaff00002660200006#ifndef _XtcreateI_h #define _XtcreateI_h _XFUNCPROTOBEGIN extern Widget _XtCreateWidget(String name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args); extern Widget _XtCreatePopupShell(String name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args); extern Widget _XtAppCreateShell(String name, String class, WidgetClass widget_class, Display *display, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args); extern Widget _XtCreateHookObj(Screen *screen); _XFUNCPROTOEND #include _XFUNCPROTOBEGIN /* VarCreate.c */ extern Widget _XtVaOpenApplication(XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, va_list var_args); extern Widget _XtVaAppInitialize(XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, va_list var_args); _XFUNCPROTOEND #endif /* _XtcreateI_h */ libXt-1.1.5/include/X11/CoreP.h000064401431060000012000000206131252061032400162330ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef XtCoreP_h #define XtCoreP_h #include _XFUNCPROTOBEGIN externalref int _XtInheritTranslations; #define XtInheritTranslations ((String) &_XtInheritTranslations) #define XtInheritRealize ((XtRealizeProc) _XtInherit) #define XtInheritResize ((XtWidgetProc) _XtInherit) #define XtInheritExpose ((XtExposeProc) _XtInherit) #define XtInheritSetValuesAlmost ((XtAlmostProc) _XtInherit) #define XtInheritAcceptFocus ((XtAcceptFocusProc) _XtInherit) #define XtInheritQueryGeometry ((XtGeometryHandler) _XtInherit) #define XtInheritDisplayAccelerator ((XtStringProc) _XtInherit) /*************************************************************** * Widget Core Data Structures * * **************************************************************/ typedef struct _CorePart { Widget self; /* pointer to widget itself */ WidgetClass widget_class; /* pointer to Widget's ClassRec */ Widget parent; /* parent widget */ XrmName xrm_name; /* widget resource name quarkified */ Boolean being_destroyed; /* marked for destroy */ XtCallbackList destroy_callbacks; /* who to call when widget destroyed */ XtPointer constraints; /* constraint record */ Position x, y; /* window position */ Dimension width, height; /* window dimensions */ Dimension border_width; /* window border width */ Boolean managed; /* is widget geometry managed? */ Boolean sensitive; /* is widget sensitive to user events*/ Boolean ancestor_sensitive; /* are all ancestors sensitive? */ XtEventTable event_table; /* private to event dispatcher */ XtTMRec tm; /* translation management */ XtTranslations accelerators; /* accelerator translations */ Pixel border_pixel; /* window border pixel */ Pixmap border_pixmap; /* window border pixmap or NULL */ WidgetList popup_list; /* list of popups */ Cardinal num_popups; /* how many popups */ String name; /* widget resource name */ Screen *screen; /* window's screen */ Colormap colormap; /* colormap */ Window window; /* window ID */ Cardinal depth; /* number of planes in window */ Pixel background_pixel; /* window background pixel */ Pixmap background_pixmap; /* window background pixmap or NULL */ Boolean visible; /* is window mapped and not occluded?*/ Boolean mapped_when_managed;/* map window if it's managed? */ } CorePart; typedef struct _WidgetRec { CorePart core; } WidgetRec, CoreRec; /****************************************************************** * * Core Class Structure. Widgets, regardless of their class, will have * these fields. All widgets of a given class will have the same values * for these fields. Widgets of a given class may also have additional * common fields. These additional fields are included in incremental * class structures, such as CommandClass. * * The fields that are specific to this subclass, as opposed to fields that * are part of the superclass, are called "subclass fields" below. Many * procedures are responsible only for the subclass fields, and not for * any superclass fields. * ********************************************************************/ typedef struct _CoreClassPart { WidgetClass superclass; /* pointer to superclass ClassRec */ String class_name; /* widget resource class name */ Cardinal widget_size; /* size in bytes of widget record */ XtProc class_initialize; /* class initialization proc */ XtWidgetClassProc class_part_initialize; /* dynamic initialization */ XtEnum class_inited; /* has class been initialized? */ XtInitProc initialize; /* initialize subclass fields */ XtArgsProc initialize_hook; /* notify that initialize called */ XtRealizeProc realize; /* XCreateWindow for widget */ XtActionList actions; /* widget semantics name to proc map */ Cardinal num_actions; /* number of entries in actions */ XtResourceList resources; /* resources for subclass fields */ Cardinal num_resources; /* number of entries in resources */ XrmClass xrm_class; /* resource class quarkified */ Boolean compress_motion; /* compress MotionNotify for widget */ XtEnum compress_exposure; /* compress Expose events for widget*/ Boolean compress_enterleave;/* compress enter and leave events */ Boolean visible_interest; /* select for VisibilityNotify */ XtWidgetProc destroy; /* free data for subclass pointers */ XtWidgetProc resize; /* geom manager changed widget size */ XtExposeProc expose; /* rediplay window */ XtSetValuesFunc set_values; /* set subclass resource values */ XtArgsFunc set_values_hook; /* notify that set_values called */ XtAlmostProc set_values_almost; /* set_values got "Almost" geo reply */ XtArgsProc get_values_hook; /* notify that get_values called */ XtAcceptFocusProc accept_focus; /* assign input focus to widget */ XtVersionType version; /* version of intrinsics used */ XtPointer callback_private; /* list of callback offsets */ String tm_table; /* state machine */ XtGeometryHandler query_geometry; /* return preferred geometry */ XtStringProc display_accelerator;/* display your accelerator */ XtPointer extension; /* pointer to extension record */ } CoreClassPart; typedef struct _WidgetClassRec { CoreClassPart core_class; } WidgetClassRec, CoreClassRec; externalref WidgetClassRec widgetClassRec; #define coreClassRec widgetClassRec _XFUNCPROTOEND #endif /* _XtCoreP_h */ /* DON'T ADD STUFF AFTER THIS #endif */ any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and thatlibXt-1.1.5/include/X11/VendorP.h000064401431060000012000000067421252061032400166070ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * VendorP.h - Private definitions for VendorShell widget * * Author: Paul Asente * Digital Equipment Corporation * Western Software Laboratory * Date: Thu Dec 3, 1987 */ /*********************************************************************** * * VendorShell Widget Private Data * ***********************************************************************/ #ifndef _XtVendorPrivate_h #define _XtVendorPrivate_h #include /* New fields for the VendorShell widget class record */ _XFUNCPROTOBEGIN typedef struct { XtPointer extension; /* pointer to extension record */ } VendorShellClassPart; typedef struct _VendorShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; } VendorShellClassRec; externalref VendorShellClassRec vendorShellClassRec; /* New fields for the vendor shell widget. */ typedef struct { int vendor_specific; } VendorShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; } VendorShellRec, *VendorShellWidget; _XFUNCPROTOEND #endif /* _XtVendorPrivate_h */ libXt-1.1.5/include/X11/RectObj.h000064401431060000012000000050061252061032400165520ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtRect_h #define _XtRect_h _XFUNCPROTOBEGIN typedef struct _RectObjRec *RectObj; typedef struct _RectObjClassRec *RectObjClass; #ifndef VMS externalref WidgetClass rectObjClass; #endif _XFUNCPROTOEND #endif /* _XtRect_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/ResConfigP.h000064401431060000012000000056221252061032400172250ustar00alancstaff00002660200006/* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /***************************************************************** (C) COPYRIGHT International Business Machines Corp. 1992,1997 All Rights Reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE IBM CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the IBM Corporation shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the IBM Corporation. ******************************************************************/ #ifndef _RESCONFIGP_H #define _RESCONFIGP_H #include _XFUNCPROTOBEGIN /* * Atom names for resource configuration management customization tool. */ #define RCM_DATA "Custom Data" #define RCM_INIT "Custom Init" extern void _XtResourceConfigurationEH( Widget /* w */, XtPointer /* client_data */, XEvent * /* event */ ); _XFUNCPROTOEND #endif libXt-1.1.5/include/X11/ThreadsI.h000064401431060000012000000102651252061032400167300ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ********************************************************/ /* Copyright 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* $XFree86: xc/lib/Xt/ThreadsI.h,v 3.5 2001/12/14 19:56:31 dawes Exp $ */ #ifndef _XtThreadsI_h #define _XtThreadsI_h #include #ifdef XTHREADS typedef struct _LockRec *LockPtr; typedef void (*ThreadAppProc)( XtAppContext /* app */ ); typedef void (*ThreadAppYieldLockProc)( XtAppContext, /* app */ Boolean*, /* push_thread */ Boolean*, /* pushed_thread */ int* /* level */ ); typedef void (*ThreadAppRestoreLockProc)( XtAppContext /* app */, int, /* level */ Boolean* /* pushed_thread */ ); _XFUNCPROTOBEGIN extern void (*_XtProcessLock)( void ); extern void (*_XtProcessUnlock)( void ); extern void (*_XtInitAppLock)( XtAppContext /* app */ ); _XFUNCPROTOEND #define INIT_APP_LOCK(app) if(_XtInitAppLock) (*_XtInitAppLock)(app) #define FREE_APP_LOCK(app) if(app && app->free_lock)(*app->free_lock)(app) #define LOCK_PROCESS if(_XtProcessLock)(*_XtProcessLock)() #define UNLOCK_PROCESS if(_XtProcessUnlock)(*_XtProcessUnlock)() #define LOCK_APP(app) if(app && app->lock)(*app->lock)(app) #define UNLOCK_APP(app) if(app && app->unlock)(*app->unlock)(app) #define YIELD_APP_LOCK(app,push,pushed,level)\ if(app && app->yield_lock) (*app->yield_lock)(app,push,pushed,level) #define RESTORE_APP_LOCK(app,level,pushed)\ if(app && app->restore_lock) (*app->restore_lock)(app,level,pushed) #define WIDGET_TO_APPCON(w) \ XtAppContext app = (w && _XtProcessLock ? \ XtWidgetToApplicationContext(w) : NULL) #define DPY_TO_APPCON(d) \ XtAppContext app = (_XtProcessLock ? XtDisplayToApplicationContext(d): NULL) #else /* defined(XTHREADS) */ #define LOCK_PROCESS #define UNLOCK_PROCESS #define LOCK_APP(app) #define UNLOCK_APP(app) #define INIT_APP_LOCK(app) #define FREE_APP_LOCK(app) #define WIDGET_TO_APPCON(w) #define DPY_TO_APPCON(d) #endif /* !defined(XTHREADS) */ #endif /* _XtThreadsI_h */ libXt-1.1.5/include/X11/PassivGraI.h000064401431060000012000000125711252061032400172370ustar00alancstaff00002660200006/******************************************************** Copyright 1988 by Hewlett-Packard Company Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 names of Hewlett-Packard or Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ /* Copyright 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifndef _PDI_h_ #define _PDI_h_ #define KEYBOARD TRUE #define POINTER FALSE _XFUNCPROTOBEGIN typedef enum { XtNoServerGrab, XtPassiveServerGrab, XtActiveServerGrab, XtPseudoPassiveServerGrab, XtPseudoActiveServerGrab }XtServerGrabType; typedef struct _XtServerGrabRec { struct _XtServerGrabRec *next; Widget widget; unsigned int ownerEvents:1; unsigned int pointerMode:1; unsigned int keyboardMode:1; unsigned int hasExt:1; unsigned int confineToIsWidgetWin:1; KeyCode keybut; unsigned short modifiers; unsigned short eventMask; } XtServerGrabRec, *XtServerGrabPtr; typedef struct _XtGrabExtRec { Mask *pKeyButMask; Mask *pModifiersMask; Window confineTo; Cursor cursor; } XtServerGrabExtRec, *XtServerGrabExtPtr; #define GRABEXT(p) ((XtServerGrabExtPtr)((p)+1)) typedef struct _XtDeviceRec{ XtServerGrabRec grab; /* need copy in order to protect during grab */ XtServerGrabType grabType; }XtDeviceRec, *XtDevice; #define XtMyAncestor 0 #define XtMyDescendant 1 #define XtMyCousin 2 #define XtMySelf 3 #define XtUnrelated 4 typedef char XtGeneology; /* do not use an enum makes PerWidgetInput larger */ typedef struct { Widget focusKid; XtServerGrabPtr keyList, ptrList; Widget queryEventDescendant; unsigned int map_handler_added:1; unsigned int realize_handler_added:1; unsigned int active_handler_added:1; unsigned int haveFocus:1; XtGeneology focalPoint; }XtPerWidgetInputRec, *XtPerWidgetInput; typedef struct XtPerDisplayInputRec{ XtGrabList grabList; XtDeviceRec keyboard, pointer; KeyCode activatingKey; Widget *trace; int traceDepth, traceMax; Widget focusWidget; }XtPerDisplayInputRec, *XtPerDisplayInput; #define IsServerGrab(g) ((g == XtPassiveServerGrab) ||\ (g == XtActiveServerGrab)) #define IsAnyGrab(g) ((g == XtPassiveServerGrab) ||\ (g == XtActiveServerGrab) ||\ (g == XtPseudoPassiveServerGrab)) #define IsEitherPassiveGrab(g) ((g == XtPassiveServerGrab) ||\ (g == XtPseudoPassiveServerGrab)) #define IsPseudoGrab(g) ((g == XtPseudoPassiveServerGrab)) extern void _XtDestroyServerGrabs( Widget /* w */, XtPointer /* pwi */, /*XtPerWidgetInput*/ XtPointer /* call_data */ ); extern XtPerWidgetInput _XtGetPerWidgetInput( Widget /* widget */, _XtBoolean /* create */ ); extern XtServerGrabPtr _XtCheckServerGrabsOnWidget( XEvent* /* event */, Widget /* widget */, _XtBoolean /* isKeyboard */ ); /* extern XtGrabList* _XtGetGrabList( XtPerDisplayInput ); */ #define _XtGetGrabList(pdi) (&(pdi)->grabList) extern void _XtFreePerWidgetInput( Widget /* w */, XtPerWidgetInput /* pwi */ ); extern Widget _XtProcessKeyboardEvent( XKeyEvent* /* event */, Widget /* widget */, XtPerDisplayInput /* pdi */ ); extern Widget _XtProcessPointerEvent( XButtonEvent* /* event */, Widget /* widget */, XtPerDisplayInput /* pdi */ ); extern void _XtRegisterPassiveGrabs( Widget /* widget */ ); extern void _XtClearAncestorCache( Widget /* widget */ ); _XFUNCPROTOEND #endif /* _PDI_h_ */ libXt-1.1.5/include/X11/Core.h000064401431060000012000000050631252061032400161150ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtCore_h #define _XtCore_h _XFUNCPROTOBEGIN typedef struct _WidgetClassRec *CoreWidgetClass; typedef struct _WidgetRec *CoreWidget; externalref WidgetClass coreWidgetClass; #ifndef VMS externalref WidgetClass widgetClass; #endif _XFUNCPROTOEND #endif /* _XtCore_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/InitialI.h000064401431060000012000000304741252061032400167330ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtinitialI_h #define _XtinitialI_h /**************************************************************** * * Displays * ****************************************************************/ #ifndef X_NOT_POSIX #ifdef _POSIX_SOURCE #include #else #define _POSIX_SOURCE #include #undef _POSIX_SOURCE #endif #endif #ifndef PATH_MAX #ifdef WIN32 #define PATH_MAX 512 #else #include #endif #ifndef PATH_MAX #ifdef MAXPATHLEN #define PATH_MAX MAXPATHLEN #else #define PATH_MAX 1024 #endif #endif #endif #include #include _XFUNCPROTOBEGIN typedef struct _TimerEventRec { struct timeval te_timer_value; struct _TimerEventRec *te_next; XtTimerCallbackProc te_proc; XtAppContext app; XtPointer te_closure; } TimerEventRec; typedef struct _InputEvent { XtInputCallbackProc ie_proc; XtPointer ie_closure; struct _InputEvent *ie_next; struct _InputEvent *ie_oq; XtAppContext app; int ie_source; XtInputMask ie_condition; } InputEvent; typedef struct _SignalEventRec { XtSignalCallbackProc se_proc; XtPointer se_closure; struct _SignalEventRec *se_next; XtAppContext app; Boolean se_notice; } SignalEventRec; typedef struct _WorkProcRec { XtWorkProc proc; XtPointer closure; struct _WorkProcRec *next; XtAppContext app; } WorkProcRec; typedef struct { #ifndef USE_POLL fd_set rmask; fd_set wmask; fd_set emask; #endif int nfds; } FdStruct; typedef struct _LangProcRec { XtLanguageProc proc; XtPointer closure; } LangProcRec; typedef struct _ProcessContextRec { XtAppContext defaultAppContext; XtAppContext appContextList; ConverterTable globalConverterTable; LangProcRec globalLangProcRec; } ProcessContextRec, *ProcessContext; typedef struct { char* start; char* current; int bytes_remaining; } Heap; typedef struct _DestroyRec DestroyRec; typedef struct _XtAppStruct { XtAppContext next; /* link to next app in process context */ ProcessContext process; /* back pointer to our process context */ InternalCallbackList destroy_callbacks; Display **list; TimerEventRec *timerQueue; WorkProcRec *workQueue; InputEvent **input_list; InputEvent *outstandingQueue; SignalEventRec *signalQueue; XrmDatabase errorDB; XtErrorMsgHandler errorMsgHandler, warningMsgHandler; XtErrorHandler errorHandler, warningHandler; struct _ActionListRec *action_table; ConverterTable converterTable; unsigned long selectionTimeout; FdStruct fds; short count; /* num of assigned entries in list */ short max; /* allocate size of list */ short last; short input_count; short input_max; /* elts input_list init'd with */ Boolean sync, being_destroyed, error_inited; #ifndef NO_IDENTIFY_WINDOWS Boolean identify_windows; /* debugging hack */ #endif Heap heap; String * fallback_resources; /* Set by XtAppSetFallbackResources. */ struct _ActionHookRec* action_hook_list; struct _BlockHookRec* block_hook_list; int destroy_list_size; /* state data for 2-phase destroy */ int destroy_count; int dispatch_level; DestroyRec* destroy_list; Widget in_phase2_destroy; LangProcRec langProcRec; struct _TMBindCacheRec * free_bindings; String display_name_tried; Display **dpy_destroy_list; int dpy_destroy_count; Boolean exit_flag; Boolean rebuild_fdlist; #ifdef XTHREADS LockPtr lock_info; ThreadAppProc lock; ThreadAppProc unlock; ThreadAppYieldLockProc yield_lock; ThreadAppRestoreLockProc restore_lock; ThreadAppProc free_lock; #endif } XtAppStruct; extern void _XtHeapInit(Heap* heap); extern void _XtHeapFree(Heap* heap); #ifdef XTTRACEMEMORY extern char *_XtHeapMalloc( Heap* /* heap */, Cardinal /* size */, char * /* file */, int /* line */ ); #define _XtHeapAlloc(heap,bytes) _XtHeapMalloc(heap, bytes, __FILE__, __LINE__) #else /* XTTRACEMEMORY */ extern char* _XtHeapAlloc( Heap* /* heap */, Cardinal /* size */ ); #endif /* XTTRACEMEMORY */ extern void _XtSetDefaultErrorHandlers( XtErrorMsgHandler* /* errMsg */, XtErrorMsgHandler* /* warnMsg */, XtErrorHandler* /* err */, XtErrorHandler* /* warn */ ); extern void _XtSetDefaultSelectionTimeout( unsigned long* /* timeout */ ); extern XtAppContext _XtDefaultAppContext( void ); extern ProcessContext _XtGetProcessContext( void ); Display * _XtAppInit( XtAppContext* /* app_context_return */, String /* application_class */, XrmOptionDescRec* /* options */, Cardinal /* num_options */, int* /* argc_in_out */, String** /* argv_in_out */, String* /* fallback_resources */ ); extern void _XtDestroyAppContexts( void ); extern void _XtCloseDisplays( XtAppContext /* app */ ); extern int _XtAppDestroyCount; extern int _XtWaitForSomething( XtAppContext /* app */, _XtBoolean /* ignoreEvents */, _XtBoolean /* ignoreTimers */, _XtBoolean /* ignoreInputs */, _XtBoolean /* ignoreSignals */, _XtBoolean /* block */, #ifdef XTHREADS _XtBoolean /* drop_lock */, #endif unsigned long* /* howlong */ ); typedef struct _CaseConverterRec *CaseConverterPtr; typedef struct _CaseConverterRec { KeySym start; /* first KeySym valid in converter */ KeySym stop; /* last KeySym valid in converter */ XtCaseProc proc; /* case converter function */ CaseConverterPtr next; /* next converter record */ } CaseConverterRec; typedef struct _ExtensionSelectorRec { XtExtensionSelectProc proc; int min, max; XtPointer client_data; } ExtSelectRec; typedef struct _XtPerDisplayStruct { InternalCallbackList destroy_callbacks; Region region; CaseConverterPtr case_cvt; /* user-registered case converters */ XtKeyProc defaultKeycodeTranslator; XtAppContext appContext; unsigned long keysyms_serial; /* for tracking MappingNotify events */ KeySym *keysyms; /* keycode to keysym table */ int keysyms_per_keycode; /* number of keysyms for each keycode*/ int min_keycode, max_keycode; /* range of keycodes */ KeySym *modKeysyms; /* keysym values for modToKeysysm */ ModToKeysymTable *modsToKeysyms; /* modifiers to Keysysms index table*/ unsigned char isModifier[32]; /* key-is-modifier-p bit table */ KeySym lock_meaning; /* Lock modifier meaning */ Modifiers mode_switch; /* keyboard group modifiers */ Modifiers num_lock; /* keyboard numlock modifiers */ Boolean being_destroyed; Boolean rv; /* reverse_video resource */ XrmName name; /* resolved app name */ XrmClass class; /* application class */ Heap heap; struct _GCrec *GClist; /* support for XtGetGC */ Drawable **pixmap_tab; /* ditto for XtGetGC */ String language; /* XPG language string */ XEvent last_event; /* last event dispatched */ Time last_timestamp; /* from last event dispatched */ int multi_click_time; /* for XtSetMultiClickTime */ struct _TMKeyContextRec* tm_context; /* for XtGetActionKeysym */ InternalCallbackList mapping_callbacks; /* special case for TM */ XtPerDisplayInputRec pdi; /* state for modal grabs & kbd focus */ struct _WWTable *WWtable; /* window to widget table */ XrmDatabase *per_screen_db; /* per screen resource databases */ XrmDatabase cmd_db; /* db from command line, if needed */ XrmDatabase server_db; /* resource property else .Xdefaults */ XtEventDispatchProc* dispatcher_list; ExtSelectRec* ext_select_list; int ext_select_count; Widget hook_object; #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT Atom rcm_init; /* ResConfig - initialize */ Atom rcm_data; /* ResConfig - data atom */ #endif } XtPerDisplayStruct, *XtPerDisplay; typedef struct _PerDisplayTable { Display *dpy; XtPerDisplayStruct perDpy; struct _PerDisplayTable *next; } PerDisplayTable, *PerDisplayTablePtr; extern PerDisplayTablePtr _XtperDisplayList; extern XtPerDisplay _XtSortPerDisplayList( Display* /* dpy */ ); extern XtPerDisplay _XtGetPerDisplay( Display* /* dpy */ ); extern XtPerDisplayInputRec* _XtGetPerDisplayInput( Display* /* dpy */ ); #if 0 #ifdef DEBUG #define _XtGetPerDisplay(display) \ ((_XtperDisplayList != NULL && (_XtperDisplayList->dpy == (display))) \ ? &_XtperDisplayList->perDpy \ : _XtSortPerDisplayList(display)) #define _XtGetPerDisplayInput(display) \ ((_XtperDisplayList != NULL && (_XtperDisplayList->dpy == (display))) \ ? &_XtperDisplayList->perDpy.pdi \ : &_XtSortPerDisplayList(display)->pdi) #else #define _XtGetPerDisplay(display) \ ((_XtperDisplayList->dpy == (display)) \ ? &_XtperDisplayList->perDpy \ : _XtSortPerDisplayList(display)) #define _XtGetPerDisplayInput(display) \ ((_XtperDisplayList->dpy == (display)) \ ? &_XtperDisplayList->perDpy.pdi \ : &_XtSortPerDisplayList(display)->pdi) #endif /*DEBUG*/ #endif extern void _XtDisplayInitialize( Display* /* dpy */, XtPerDisplay /* pd */, _Xconst char* /* name */, XrmOptionDescRec* /* urlist */, Cardinal /* num_urs */, int* /* argc */, char** /* argv */ ); extern void _XtCacheFlushTag( XtAppContext /* app */, XtPointer /* tag */ ); extern void _XtFreeActions( struct _ActionListRec* /* action_table */ ); extern void _XtDoPhase2Destroy( XtAppContext /* app */, int /* dispatch_level */ ); extern void _XtDoFreeBindings( XtAppContext /* app */ ); extern void _XtExtensionSelect( Widget /* widget */ ); #define _XtSafeToDestroy(app) ((app)->dispatch_level == 0) extern void _XtAllocWWTable( XtPerDisplay pd ); extern void _XtFreeWWTable( XtPerDisplay pd ); extern String _XtGetUserName(String dest, int len); extern XrmDatabase _XtPreparseCommandLine(XrmOptionDescRec *urlist, Cardinal num_urs, int argc, String *argv, String *applName, String *displayName, String *language); _XFUNCPROTOEND #endif /* _XtinitialI_h */ libXt-1.1.5/include/X11/Composite.h000064401431060000012000000066401252061032400171710ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtComposite_h #define _XtComposite_h typedef struct _CompositeClassRec *CompositeWidgetClass; typedef Cardinal (*XtOrderProc)( Widget /* child */ ); _XFUNCPROTOBEGIN extern void XtManageChildren( WidgetList /* children */, Cardinal /* num_children */ ); extern void XtManageChild( Widget /* child */ ); extern void XtUnmanageChildren( WidgetList /* children */, Cardinal /* num_children */ ); extern void XtUnmanageChild( Widget /* child */ ); typedef void (*XtDoChangeProc)( Widget /* composite_parent */, WidgetList /* unmanage_children */, Cardinal * /* num_unmanage_children */, WidgetList /* manage_children */, Cardinal * /* num_manage_children */, XtPointer /* client_data */ ); extern void XtChangeManagedSet( WidgetList /* unmanage_children */, Cardinal /* num_unmanage_children */, XtDoChangeProc /* do_change_proc */, XtPointer /* client_data */, WidgetList /* manage_children */, Cardinal /* num_manage_children */ ); _XFUNCPROTOEND #ifndef VMS externalref WidgetClass compositeWidgetClass; #endif #endif /* _XtComposite_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/IntrinsicP.h000064401431060000012000000226761252061032400173200ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtintrinsicP_h #define _XtintrinsicP_h #include /* * Field sizes and offsets of XrmResource must match those of XtResource. * Type long is used instead of XrmQuark here because XrmQuark and String * are not the same size on all systems. */ typedef struct { long xrm_name; /* Resource name quark */ long xrm_class; /* Resource class quark */ long xrm_type; /* Resource representation type quark */ Cardinal xrm_size; /* Size in bytes of representation */ int xrm_offset; /* -offset-1 */ long xrm_default_type; /* Default representation type quark */ XtPointer xrm_default_addr; /* Default resource address */ } XrmResource, *XrmResourceList; typedef unsigned long XtVersionType; #define XT_VERSION 11 #ifndef XT_REVISION #define XT_REVISION 6 #endif #define XtVersion (XT_VERSION * 1000 + XT_REVISION) #define XtVersionDontCheck 0 typedef void (*XtProc)( void ); typedef void (*XtWidgetClassProc)( WidgetClass /* class */ ); typedef void (*XtWidgetProc)( Widget /* widget */ ); typedef Boolean (*XtAcceptFocusProc)( Widget /* widget */, Time* /* time */ ); typedef void (*XtArgsProc)( Widget /* widget */, ArgList /* args */, Cardinal* /* num_args */ ); typedef void (*XtInitProc)( Widget /* request */, Widget /* new */, ArgList /* args */, Cardinal* /* num_args */ ); typedef Boolean (*XtSetValuesFunc)( Widget /* old */, Widget /* request */, Widget /* new */, ArgList /* args */, Cardinal* /* num_args */ ); typedef Boolean (*XtArgsFunc)( Widget /* widget */, ArgList /* args */, Cardinal* /* num_args */ ); typedef void (*XtAlmostProc)( Widget /* old */, Widget /* new */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply */ ); typedef void (*XtExposeProc)( Widget /* widget */, XEvent* /* event */, Region /* region */ ); /* compress_exposure options*/ #define XtExposeNoCompress ((XtEnum)False) #define XtExposeCompressSeries ((XtEnum)True) #define XtExposeCompressMultiple 2 #define XtExposeCompressMaximal 3 /* modifiers */ #define XtExposeGraphicsExpose 0x10 #define XtExposeGraphicsExposeMerged 0x20 #define XtExposeNoExpose 0x40 #define XtExposeNoRegion 0x80 typedef void (*XtRealizeProc)( Widget /* widget */, XtValueMask* /* mask */, XSetWindowAttributes* /* attributes */ ); typedef XtGeometryResult (*XtGeometryHandler)( Widget /* widget */, XtWidgetGeometry* /* request */, XtWidgetGeometry* /* reply */ ); typedef void (*XtStringProc)( Widget /* widget */, String /* str */ ); typedef struct { String name; /* resource name */ String type; /* representation type name */ XtArgVal value; /* representation */ int size; /* size of representation */ } XtTypedArg, *XtTypedArgList; typedef void (*XtAllocateProc)( WidgetClass /* widget_class */, Cardinal * /* constraint_size */, Cardinal * /* more_bytes */, ArgList /* args */, Cardinal * /* num_args */, XtTypedArgList /* typed_args */, Cardinal * /* num_typed_args */, Widget * /* widget_return */, XtPointer * /* more_bytes_return */ ); typedef void (*XtDeallocateProc)( Widget /* widget */, XtPointer /* more_bytes */ ); struct _XtStateRec; /* Forward declare before use for C++ */ typedef struct _XtTMRec { XtTranslations translations; /* private to Translation Manager */ XtBoundActions proc_table; /* procedure bindings for actions */ struct _XtStateRec *current_state; /* Translation Manager state ptr */ unsigned long lastEventTime; } XtTMRec, *XtTM; #include #include #include #include #include #define XtDisplay(widget) DisplayOfScreen((widget)->core.screen) #define XtScreen(widget) ((widget)->core.screen) #define XtWindow(widget) ((widget)->core.window) #define XtClass(widget) ((widget)->core.widget_class) #define XtSuperclass(widget) (XtClass(widget)->core_class.superclass) #define XtIsRealized(object) (XtWindowOfObject(object) != None) #define XtParent(widget) ((widget)->core.parent) #undef XtIsRectObj extern Boolean XtIsRectObj(Widget); #define XtIsRectObj(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x02) #undef XtIsWidget extern Boolean XtIsWidget(Widget); #define XtIsWidget(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x04) #undef XtIsComposite extern Boolean XtIsComposite(Widget); #define XtIsComposite(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x08) #undef XtIsConstraint extern Boolean XtIsConstraint(Widget); #define XtIsConstraint(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x10) #undef XtIsShell extern Boolean XtIsShell(Widget); #define XtIsShell(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x20) #undef XtIsWMShell extern Boolean XtIsWMShell(Widget); #define XtIsWMShell(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x40) #undef XtIsTopLevelShell extern Boolean XtIsTopLevelShell(Widget); #define XtIsTopLevelShell(obj) \ (((Object)(obj))->object.widget_class->core_class.class_inited & 0x80) #ifdef DEBUG #define XtCheckSubclass(w, widget_class_ptr, message) \ if (!XtIsSubclass(((Widget)(w)), (widget_class_ptr))) { \ String params[3]; \ Cardinal num_params = 3; \ params[0] = ((Widget)(w))->core.widget_class->core_class.class_name;\ params[1] = (widget_class_ptr)->core_class.class_name; \ params[2] = (message); \ XtAppErrorMsg(XtWidgetToApplicationContext((Widget)(w)), \ "subclassMismatch", "xtCheckSubclass", "XtToolkitError", \ "Widget class %s found when subclass of %s expected: %s",\ params, &num_params); \ } #else #define XtCheckSubclass(w, widget_class, message) /* nothing */ #endif _XFUNCPROTOBEGIN extern Widget _XtWindowedAncestor( /* internal; implementation-dependent */ Widget /* object */ ); #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(LIBXT_COMPILATION) __declspec(dllimport) #else extern #endif void _XtInherit( void ); extern void _XtHandleFocus( Widget /* widget */, XtPointer /* client_data */, XEvent * /* event */, Boolean * /* cont */); extern void XtCreateWindow( Widget /* widget */, unsigned int /* window_class */, Visual* /* visual */, XtValueMask /* value_mask */, XSetWindowAttributes* /* attributes */ ); extern void XtResizeWidget( Widget /* widget */, _XtDimension /* width */, _XtDimension /* height */, _XtDimension /* border_width */ ); extern void XtMoveWidget( Widget /* widget */, _XtPosition /* x */, _XtPosition /* y */ ); extern void XtConfigureWidget( Widget /* widget */, _XtPosition /* x */, _XtPosition /* y */, _XtDimension /* width */, _XtDimension /* height */, _XtDimension /* border_width */ ); extern void XtResizeWindow( Widget /* widget */ ); extern void XtProcessLock( void ); extern void XtProcessUnlock( void ); _XFUNCPROTOEND #endif /* _XtIntrinsicP_h */ /* DON'T ADD STUFF AFTER THIS #endif */ , Widget /* new */, XtWidgetGeometry* /* request */, libXt-1.1.5/include/X11/ObjectP.h000064401431060000012000000154451252061032400165600ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _Xt_ObjectP_h_ #define _Xt_ObjectP_h_ #include _XFUNCPROTOBEGIN /********************************************************** * Object Instance Data Structures * **********************************************************/ /* these fields match CorePart and can not be changed */ typedef struct _ObjectPart { Widget self; /* pointer to widget itself */ WidgetClass widget_class; /* pointer to Widget's ClassRec */ Widget parent; /* parent widget */ XrmName xrm_name; /* widget resource name quarkified */ Boolean being_destroyed; /* marked for destroy */ XtCallbackList destroy_callbacks; /* who to call when widget destroyed */ XtPointer constraints; /* constraint record */ } ObjectPart; typedef struct _ObjectRec { ObjectPart object; } ObjectRec; /******************************************************** * Object Class Data Structures * ********************************************************/ /* these fields match CoreClassPart and can not be changed */ /* ideally these structures would only contain the fields required; but because the CoreClassPart cannot be changed at this late date extraneous fields are necessary to make the field offsets match */ typedef struct _ObjectClassPart { WidgetClass superclass; /* pointer to superclass ClassRec */ String class_name; /* widget resource class name */ Cardinal widget_size; /* size in bytes of widget record */ XtProc class_initialize; /* class initialization proc */ XtWidgetClassProc class_part_initialize; /* dynamic initialization */ XtEnum class_inited; /* has class been initialized? */ XtInitProc initialize; /* initialize subclass fields */ XtArgsProc initialize_hook; /* notify that initialize called */ XtProc obj1; /* NULL */ XtPointer obj2; /* NULL */ Cardinal obj3; /* NULL */ XtResourceList resources; /* resources for subclass fields */ Cardinal num_resources; /* number of entries in resources */ XrmClass xrm_class; /* resource class quarkified */ Boolean obj4; /* NULL */ XtEnum obj5; /* NULL */ Boolean obj6; /* NULL */ Boolean obj7; /* NULL */ XtWidgetProc destroy; /* free data for subclass pointers */ XtProc obj8; /* NULL */ XtProc obj9; /* NULL */ XtSetValuesFunc set_values; /* set subclass resource values */ XtArgsFunc set_values_hook; /* notify that set_values called */ XtProc obj10; /* NULL */ XtArgsProc get_values_hook; /* notify that get_values called */ XtProc obj11; /* NULL */ XtVersionType version; /* version of intrinsics used */ XtPointer callback_private; /* list of callback offsets */ String obj12; /* NULL */ XtProc obj13; /* NULL */ XtProc obj14; /* NULL */ XtPointer extension; /* pointer to extension record */ }ObjectClassPart; typedef struct { XtPointer next_extension; /* 1st 4 required for all extension records */ XrmQuark record_type; /* NULLQUARK; when on ObjectClassPart */ long version; /* must be XtObjectExtensionVersion */ Cardinal record_size; /* sizeof(ObjectClassExtensionRec) */ XtAllocateProc allocate; XtDeallocateProc deallocate; } ObjectClassExtensionRec, *ObjectClassExtension; typedef struct _ObjectClassRec { ObjectClassPart object_class; } ObjectClassRec; externalref ObjectClassRec objectClassRec; _XFUNCPROTOEND #define XtObjectExtensionVersion 1L #define XtInheritAllocate ((XtAllocateProc) _XtInherit) #define XtInheritDeallocate ((XtDeallocateProc) _XtInherit) #endif /*_Xt_ObjectP_h_*/ ll Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies anlibXt-1.1.5/include/X11/Vendor.h000064401431060000012000000053261252061032400164640ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtVendor_h #define _XtVendor_h #include /*********************************************************************** * * VendorShell Widget * ***********************************************************************/ /* Class record constants */ typedef struct _VendorShellClassRec *VendorShellWidgetClass; _XFUNCPROTOBEGIN externalref WidgetClass vendorShellWidgetClass; _XFUNCPROTOEND #endif /* _XtVendor_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/ShellP.h000064401431060000012000000306621252061032400164170ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * ShellP.h - Private definitions for Shell widget * * Author: Paul Asente * Digital Equipment Corporation * Western Software Laboratory * Date: Thu Dec 3, 1987 */ #ifndef _XtShellPrivate_h #define _XtShellPrivate_h #include /* ***** * ***** VendorP.h is included later on; it needs fields defined in the first * ***** part of this header file * ***** */ _XFUNCPROTOBEGIN /*********************************************************************** * * Shell Widget Private Data * ***********************************************************************/ /* New fields for the Shell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } ShellClassPart; typedef struct { XtPointer next_extension; /* 1st 4 mandated for all extension records */ XrmQuark record_type; /* NULLQUARK; on ShellClassPart */ long version; /* must be XtShellExtensionVersion */ Cardinal record_size; /* sizeof(ShellClassExtensionRec) */ XtGeometryHandler root_geometry_manager; } ShellClassExtensionRec, *ShellClassExtension; #define XtShellExtensionVersion 1L #define XtInheritRootGeometryManager ((XtGeometryHandler)_XtInherit) typedef struct _ShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; } ShellClassRec; externalref ShellClassRec shellClassRec; /* New fields for the shell widget */ typedef struct { char *geometry; XtCreatePopupChildProc create_popup_child_proc; XtGrabKind grab_kind; Boolean spring_loaded; Boolean popped_up; Boolean allow_shell_resize; Boolean client_specified; /* re-using old name */ #define _XtShellPositionValid ((Boolean)(1<<0)) #define _XtShellNotReparented ((Boolean)(1<<1)) #define _XtShellPPositionOK ((Boolean)(1<<2)) #define _XtShellGeometryParsed ((Boolean)(1<<3)) Boolean save_under; Boolean override_redirect; XtCallbackList popup_callback; XtCallbackList popdown_callback; Visual* visual; } ShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; } ShellRec, *ShellWidget; /*********************************************************************** * * OverrideShell Widget Private Data * ***********************************************************************/ /* New fields for the OverrideShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } OverrideShellClassPart; typedef struct _OverrideShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; OverrideShellClassPart override_shell_class; } OverrideShellClassRec; externalref OverrideShellClassRec overrideShellClassRec; /* No new fields for the override shell widget */ typedef struct {int frabjous;} OverrideShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; OverrideShellPart override; } OverrideShellRec, *OverrideShellWidget; /*********************************************************************** * * WMShell Widget Private Data * ***********************************************************************/ /* New fields for the WMShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } WMShellClassPart; typedef struct _WMShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; } WMShellClassRec; externalref WMShellClassRec wmShellClassRec; /* New fields for the WM shell widget */ typedef struct { char *title; int wm_timeout; Boolean wait_for_wm; Boolean transient; Boolean urgency; Widget client_leader; String window_role; struct _OldXSizeHints { /* pre-R4 Xlib structure */ long flags; int x, y; int width, height; int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; int y; } min_aspect, max_aspect; } size_hints; XWMHints wm_hints; int base_width, base_height; int win_gravity; Atom title_encoding; } WMShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; } WMShellRec, *WMShellWidget; _XFUNCPROTOEND #include _XFUNCPROTOBEGIN /*********************************************************************** * * TransientShell Widget Private Data * ***********************************************************************/ /* New fields for the TransientShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } TransientShellClassPart; typedef struct _TransientShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TransientShellClassPart transient_shell_class; } TransientShellClassRec; externalref TransientShellClassRec transientShellClassRec; /* New fields for the transient shell widget */ typedef struct { Widget transient_for; } TransientShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TransientShellPart transient; } TransientShellRec, *TransientShellWidget; /*********************************************************************** * * TopLevelShell Widget Private Data * ***********************************************************************/ /* New fields for the TopLevelShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } TopLevelShellClassPart; typedef struct _TopLevelShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; } TopLevelShellClassRec; externalref TopLevelShellClassRec topLevelShellClassRec; /* New fields for the top level shell widget */ typedef struct { char *icon_name; Boolean iconic; Atom icon_name_encoding; } TopLevelShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; } TopLevelShellRec, *TopLevelShellWidget; /*********************************************************************** * * ApplicationShell Widget Private Data * ***********************************************************************/ /* New fields for the ApplicationShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } ApplicationShellClassPart; typedef struct _ApplicationShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; ApplicationShellClassPart application_shell_class; } ApplicationShellClassRec; externalref ApplicationShellClassRec applicationShellClassRec; /* New fields for the application shell widget */ typedef struct { #if defined(__cplusplus) || defined(c_plusplus) char *c_class; #else char *class; #endif XrmClass xrm_class; int argc; char **argv; } ApplicationShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; ApplicationShellPart application; } ApplicationShellRec, *ApplicationShellWidget; /*********************************************************************** * * SessionShell Widget Private Data * ***********************************************************************/ /* New fields for the SessionShell widget class record */ typedef struct { XtPointer extension; /* pointer to extension record */ } SessionShellClassPart; typedef struct _SessionShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; ApplicationShellClassPart application_shell_class; SessionShellClassPart session_shell_class; } SessionShellClassRec; externalref SessionShellClassRec sessionShellClassRec; typedef struct _XtSaveYourselfRec *XtSaveYourself; /* implementation-private */ /* New fields for the session shell widget */ typedef struct { SmcConn connection; String session_id; String* restart_command; String* clone_command; String* discard_command; String* resign_command; String* shutdown_command; String* environment; String current_dir; String program_path; unsigned char restart_style; unsigned char checkpoint_state; Boolean join_session; XtCallbackList save_callbacks; XtCallbackList interact_callbacks; XtCallbackList cancel_callbacks; XtCallbackList save_complete_callbacks; XtCallbackList die_callbacks; XtCallbackList error_callbacks; XtSaveYourself save; XtInputId input_id; XtPointer ses20; XtPointer ses19; XtPointer ses18; XtPointer ses17; XtPointer ses16; XtPointer ses15; XtPointer ses14; XtPointer ses13; XtPointer ses12; XtPointer ses11; XtPointer ses10; XtPointer ses9; XtPointer ses8; XtPointer ses7; XtPointer ses6; XtPointer ses5; XtPointer ses4; XtPointer ses3; XtPointer ses2; XtPointer ses1; } SessionShellPart; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; ApplicationShellPart application; SessionShellPart session; } SessionShellRec, *SessionShellWidget; _XFUNCPROTOEND #endif /* _XtShellPrivate_h */ libXt-1.1.5/include/X11/RectObjP.h000064401431060000012000000144141252061032400166750ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _Xt_RectObjP_h_ #define _Xt_RectObjP_h_ #include #include _XFUNCPROTOBEGIN /********************************************************** * Rectangle Object Instance Data Structures * **********************************************************/ /* these fields match CorePart and can not be changed */ typedef struct _RectObjPart { Position x, y; /* rectangle position */ Dimension width, height; /* rectangle dimensions */ Dimension border_width; /* rectangle border width */ Boolean managed; /* is widget geometry managed? */ Boolean sensitive; /* is widget sensitive to user events*/ Boolean ancestor_sensitive; /* are all ancestors sensitive? */ }RectObjPart; typedef struct _RectObjRec { ObjectPart object; RectObjPart rectangle; } RectObjRec; /******************************************************** * Rectangle Object Class Data Structures * ********************************************************/ /* these fields match CoreClassPart and can not be changed */ /* ideally these structures would only contain the fields required; but because the CoreClassPart cannot be changed at this late date extraneous fields are necessary to make the field offsets match */ typedef struct _RectObjClassPart { WidgetClass superclass; /* pointer to superclass ClassRec */ String class_name; /* widget resource class name */ Cardinal widget_size; /* size in bytes of widget record */ XtProc class_initialize; /* class initialization proc */ XtWidgetClassProc class_part_initialize; /* dynamic initialization */ XtEnum class_inited; /* has class been initialized? */ XtInitProc initialize; /* initialize subclass fields */ XtArgsProc initialize_hook; /* notify that initialize called */ XtProc rect1; /* NULL */ XtPointer rect2; /* NULL */ Cardinal rect3; /* NULL */ XtResourceList resources; /* resources for subclass fields */ Cardinal num_resources; /* number of entries in resources */ XrmClass xrm_class; /* resource class quarkified */ Boolean rect4; /* NULL */ XtEnum rect5; /* NULL */ Boolean rect6; /* NULL */ Boolean rect7; /* NULL */ XtWidgetProc destroy; /* free data for subclass pointers */ XtWidgetProc resize; /* geom manager changed widget size */ XtExposeProc expose; /* rediplay rectangle */ XtSetValuesFunc set_values; /* set subclass resource values */ XtArgsFunc set_values_hook; /* notify that set_values called */ XtAlmostProc set_values_almost; /* set values almost for geometry */ XtArgsProc get_values_hook; /* notify that get_values called */ XtProc rect9; /* NULL */ XtVersionType version; /* version of intrinsics used */ XtPointer callback_private; /* list of callback offsets */ String rect10; /* NULL */ XtGeometryHandler query_geometry; /* return preferred geometry */ XtProc rect11; /* NULL */ XtPointer extension; /* pointer to extension record */ } RectObjClassPart; typedef struct _RectObjClassRec { RectObjClassPart rect_class; } RectObjClassRec; externalref RectObjClassRec rectObjClassRec; _XFUNCPROTOEND #endif /*_Xt_RectObjP_h_*/ libXt-1.1.5/include/X11/ConvertI.h000064401431060000012000000065111252061032400167550ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ _XFUNCPROTOBEGIN /* Representation types */ extern XrmQuark _XtQString; /* * Resource conversions */ typedef struct _ConverterRec **ConverterTable; extern void _XtAddDefaultConverters( ConverterTable /* table */ ); extern void _XtSetDefaultConverterTable( ConverterTable* /* table */ ); extern void _XtFreeConverterTable( ConverterTable /* table */ ); extern void _XtTableAddConverter( ConverterTable /* table */, XrmRepresentation /* from_type */, XrmRepresentation /* to_type */, XtTypeConverter /* converter */, XtConvertArgList /* convert_args */, Cardinal /* num_args */, _XtBoolean /* new_style */, XtCacheType /* cache_type */, XtDestructor /* destructor */, _XtBoolean /* global */ ); extern Boolean _XtConvert( Widget /* widget */, XrmRepresentation /* from_type */, XrmValuePtr /* from */, XrmRepresentation /* to_type */, XrmValuePtr /* to */, XtCacheRef* /* cache_ref_return */ ); void _XtConvertInitialize(void); _XFUNCPROTOEND libXt-1.1.5/include/X11/CallbackI.h000064401431060000012000000077121252061032400170350ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /**************************************************************** * * Callbacks * ****************************************************************/ typedef XrmResource **CallbackTable; #define _XtCBCalling 1 #define _XtCBFreeAfterCalling 2 _XFUNCPROTOBEGIN typedef struct internalCallbackRec { unsigned short count; char is_padded; /* contains NULL padding for external form */ char call_state; /* combination of _XtCB{FreeAfter}Calling */ #ifdef LONG64 unsigned int align_pad; /* padding to align callback list */ #endif /* XtCallbackList */ } InternalCallbackRec, *InternalCallbackList; typedef Boolean (*_XtConditionProc)( XtPointer /* data */ ); extern void _XtAddCallback( InternalCallbackList* /* callbacks */, XtCallbackProc /* callback */, XtPointer /* closure */ ); extern void _XtAddCallbackOnce( InternalCallbackList* /* callbacks */, XtCallbackProc /* callback */, XtPointer /* closure */ ); extern InternalCallbackList _XtCompileCallbackList( XtCallbackList /* xtcallbacks */ ); extern XtCallbackList _XtGetCallbackList( InternalCallbackList* /* callbacks */ ); extern void _XtRemoveAllCallbacks( InternalCallbackList* /* callbacks */ ); extern void _XtRemoveCallback( InternalCallbackList* /* callbacks */, XtCallbackProc /* callback */, XtPointer /* closure */ ); extern void _XtPeekCallback( Widget /* widget */, XtCallbackList /* callbacks */, XtCallbackProc * /* callback */, XtPointer * /* closure */ ); extern void _XtCallConditionalCallbackList( Widget /* widget */, XtCallbackList /* callbacks */, XtPointer /* call_data */, _XtConditionProc /* cond_proc */ ); _XFUNCPROTOEND libXt-1.1.5/include/X11/TranslateI.h000064401431060000012000000414061252061032400172740ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * TranslateI.h - Header file private to translation management * * Author: Gabe Beged-Dov, HP * * Former Author: Charles Haynes * Digital Equipment Corporation * Western Research Laboratory * Date: Sat Aug 29 1987 */ /*#define REFCNT_TRANSLATIONS*/ #define CACHE_TRANSLATIONS #define TM_NO_MATCH (-2) #define _XtRStateTablePair "_XtStateTablePair" typedef unsigned char TMByteCard; typedef unsigned short TMShortCard; typedef unsigned long TMLongCard; typedef short TMShortInt; typedef struct _TMTypeMatchRec *TMTypeMatch; typedef struct _TMModifierMatchRec *TMModifierMatch; typedef struct _TMEventRec *TMEventPtr; typedef Boolean (*MatchProc)(TMTypeMatch typeMatch, TMModifierMatch modMatch, TMEventPtr eventSeq); typedef struct _ModToKeysymTable { Modifiers mask; int count; int idx; } ModToKeysymTable; typedef struct _LateBindings { unsigned int knot:1; unsigned int pair:1; unsigned short ref_count; /* garbage collection */ KeySym keysym; } LateBindings, *LateBindingsPtr; typedef short ModifierMask; typedef struct _ActionsRec *ActionPtr; typedef struct _ActionsRec { int idx; /* index into quarkTable to find proc */ String *params; /* pointer to array of params */ Cardinal num_params; /* number of params */ ActionPtr next; /* next action to perform */ } ActionRec; typedef struct _XtStateRec *StatePtr; typedef struct _XtStateRec { unsigned int isCycleStart:1; unsigned int isCycleEnd:1; TMShortCard typeIndex; TMShortCard modIndex; ActionPtr actions; /* rhs list of actions to perform */ StatePtr nextLevel; }StateRec; #define XtTableReplace 0 #define XtTableAugment 1 #define XtTableOverride 2 #define XtTableUnmerge 3 typedef unsigned int _XtTranslateOp; /* * New Definitions */ typedef struct _TMModifierMatchRec{ TMLongCard modifiers; TMLongCard modifierMask; LateBindingsPtr lateModifiers; Boolean standard; }TMModifierMatchRec; typedef struct _TMTypeMatchRec{ TMLongCard eventType; TMLongCard eventCode; TMLongCard eventCodeMask; MatchProc matchEvent; }TMTypeMatchRec; typedef struct _TMBranchHeadRec { unsigned int isSimple:1; unsigned int hasActions:1; unsigned int hasCycles:1; unsigned int more:13; TMShortCard typeIndex; TMShortCard modIndex; }TMBranchHeadRec, *TMBranchHead; /* NOTE: elements of this structure must match those of * TMComplexStateTreeRec and TMParseStateTreeRec. */ typedef struct _TMSimpleStateTreeRec{ unsigned int isSimple:1; unsigned int isAccelerator:1; unsigned int mappingNotifyInterest:1; unsigned int refCount:13; TMShortCard numBranchHeads; TMShortCard numQuarks; /* # of entries in quarkTbl */ TMShortCard unused; /* to ensure same alignment */ TMBranchHeadRec *branchHeadTbl; XrmQuark *quarkTbl; /* table of quarkified rhs*/ }TMSimpleStateTreeRec, *TMSimpleStateTree; /* NOTE: elements of this structure must match those of * TMSimpleStateTreeRec and TMParseStateTreeRec. */ typedef struct _TMComplexStateTreeRec{ unsigned int isSimple:1; unsigned int isAccelerator:1; unsigned int mappingNotifyInterest:1; unsigned int refCount:13; TMShortCard numBranchHeads; TMShortCard numQuarks; /* # of entries in quarkTbl */ TMShortCard numComplexBranchHeads; TMBranchHeadRec *branchHeadTbl; XrmQuark *quarkTbl; /* table of quarkified rhs*/ StatePtr *complexBranchHeadTbl; }TMComplexStateTreeRec, *TMComplexStateTree; /* NOTE: elements of this structure must match those of * TMSimpleStateTreeRec and TMComplexStateTreeRec. */ typedef struct _TMParseStateTreeRec{ unsigned int isSimple:1; unsigned int isAccelerator:1; unsigned int mappingNotifyInterest:1; unsigned int isStackQuarks:1; unsigned int isStackBranchHeads:1; unsigned int isStackComplexBranchHeads:1; unsigned int unused:10; /* to ensure correct alignment */ TMShortCard numBranchHeads; TMShortCard numQuarks; /* # of entries in quarkTbl */ TMShortCard numComplexBranchHeads; TMBranchHeadRec *branchHeadTbl; XrmQuark *quarkTbl; /* table of quarkified rhs*/ StatePtr *complexBranchHeadTbl; TMShortCard branchHeadTblSize; TMShortCard quarkTblSize; /*total size of quarkTbl */ TMShortCard complexBranchHeadTblSize; StatePtr head; }TMParseStateTreeRec, *TMParseStateTree; typedef union _TMStateTreeRec{ TMSimpleStateTreeRec simple; TMParseStateTreeRec parse; TMComplexStateTreeRec complex; }*TMStateTree, **TMStateTreePtr, **TMStateTreeList; typedef struct _TMSimpleBindProcsRec { XtActionProc *procs; }TMSimpleBindProcsRec, *TMSimpleBindProcs; typedef struct _TMComplexBindProcsRec { Widget widget; /*widgetID to pass to action Proc*/ XtTranslations aXlations; XtActionProc *procs; }TMComplexBindProcsRec, *TMComplexBindProcs; typedef struct _TMSimpleBindDataRec { unsigned int isComplex:1; /* must be first */ TMSimpleBindProcsRec bindTbl[1]; /* variable length */ }TMSimpleBindDataRec, *TMSimpleBindData; typedef struct _TMComplexBindDataRec { unsigned int isComplex:1; /* must be first */ struct _ATranslationData *accel_context; /* for GetValues */ TMComplexBindProcsRec bindTbl[1]; /* variable length */ }TMComplexBindDataRec, *TMComplexBindData; typedef union _TMBindDataRec{ TMSimpleBindDataRec simple; TMComplexBindDataRec complex; }*TMBindData; typedef struct _TranslationData{ unsigned char hasBindings; /* must be first */ unsigned char operation; /*replace,augment,override*/ TMShortCard numStateTrees; struct _TranslationData *composers[2]; EventMask eventMask; TMStateTree stateTreeTbl[1]; /* variable length */ }TranslationData; /* * ATranslations is returned by GetValues for translations that contain * accelerators. The TM can differentiate between this and TranslationData * (that don't have a bindTbl) by looking at the first field (hasBindings) * of either structure. All ATranslationData structures associated with a * widget are chained off the BindData record of the widget. */ typedef struct _ATranslationData{ unsigned char hasBindings; /* must be first */ unsigned char operation; struct _TranslationData *xlations; /* actual translations */ struct _ATranslationData *next; /* chain the contexts together */ TMComplexBindProcsRec bindTbl[1]; /* accelerator bindings */ }ATranslationData, *ATranslations; typedef struct _TMConvertRec { XtTranslations old; /* table to merge into */ XtTranslations new; /* table to merge from */ } TMConvertRec; #define _XtEventTimerEventType ((TMLongCard)~0L) #define KeysymModMask (1L<<27) /* private to TM */ #define AnyButtonMask (1L<<28) /* private to TM */ typedef struct _EventRec { TMLongCard modifiers; TMLongCard modifierMask; LateBindingsPtr lateModifiers; TMLongCard eventType; TMLongCard eventCode; TMLongCard eventCodeMask; MatchProc matchEvent; Boolean standard; } Event; typedef struct _EventSeqRec *EventSeqPtr; typedef struct _EventSeqRec { Event event; /* X event description */ StatePtr state; /* private to state table builder */ EventSeqPtr next; /* next event on line */ ActionPtr actions; /* r.h.s. list of actions to perform */ } EventSeqRec; typedef EventSeqRec EventRec; typedef EventSeqPtr EventPtr; typedef struct _TMEventRec { XEvent *xev; Event event; }TMEventRec; typedef struct _ActionHookRec { struct _ActionHookRec* next; /* must remain first */ XtAppContext app; XtActionHookProc proc; XtPointer closure; } ActionHookRec, *ActionHook; /* choose a number between 2 and 8 */ #define TMKEYCACHELOG2 6 #define TMKEYCACHESIZE (1<> 4)])[(idx) & 15])) #define TMGetModifierMatch(idx) \ ((TMModifierMatch) \ &((_XtGlobalTM.modMatchSegmentTbl[(idx) >> 4])[(idx) & 15])) /* Useful Access Macros */ #define TMNewMatchSemantics() (_XtGlobalTM.newMatchSemantics) #define TMBranchMore(branch) (branch->more) #define TMComplexBranchHead(tree, br) \ (((TMComplexStateTree)tree)->complexBranchHeadTbl[TMBranchMore(br)]) #define TMGetComplexBindEntry(bindData, idx) \ ((TMComplexBindProcs)&(((TMComplexBindData)bindData)->bindTbl[idx])) #define TMGetSimpleBindEntry(bindData, idx) \ ((TMSimpleBindProcs)&(((TMSimpleBindData)bindData)->bindTbl[idx])) #define _InitializeKeysymTables(dpy, pd) \ if (pd->keysyms == NULL) \ _XtBuildKeysymTables(dpy, pd) /* * Internal Functions */ extern void _XtPopup( Widget /* widget */, XtGrabKind /* grab_kind */, _XtBoolean /* spring_loaded */ ); extern String _XtPrintXlations( Widget /* w */, XtTranslations /* xlations */, Widget /* accelWidget */, _XtBoolean /* includeRHS */ ); extern void _XtRegisterGrabs( Widget /* widget */ ); extern XtPointer _XtInitializeActionData( struct _XtActionsRec * /* actions */, Cardinal /* count */, _XtBoolean /* inPlace */ ); extern void _XtAddEventSeqToStateTree( EventSeqPtr /* eventSeq */, TMParseStateTree /* stateTree */ ); extern Boolean _XtMatchUsingStandardMods( TMTypeMatch /* typeMatch */, TMModifierMatch /* modMatch */, TMEventPtr /* eventSeq */ ); extern Boolean _XtMatchUsingDontCareMods( TMTypeMatch /* typeMatch */, TMModifierMatch /* modMatch */, TMEventPtr /* eventSeq */ ); extern Boolean _XtRegularMatch( TMTypeMatch /* typeMatch */, TMModifierMatch /* modMatch */, TMEventPtr /* eventSeq */ ); extern Boolean _XtMatchAtom( TMTypeMatch /* typeMatch */, TMModifierMatch /* modMatch */, TMEventPtr /* eventSeq */ ); extern void _XtTranslateEvent( Widget /* widget */, XEvent* /* event */ ); #include "CallbackI.h" #include "EventI.h" #include "HookObjI.h" #include "PassivGraI.h" #include "ThreadsI.h" #include "InitialI.h" #include "ResourceI.h" #include "StringDefs.h" extern void _XtBuildKeysymTables(Display *dpy, XtPerDisplay pd); #ifndef NO_MIT_HACKS extern void _XtDisplayTranslations( Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); extern void _XtDisplayAccelerators( Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); extern void _XtDisplayInstalledAccelerators( Widget /* widget */, XEvent* /* event */, String* /* params */, Cardinal* /* num_params */ ); #endif /* ifndef NO_MIT_HACKS */ extern void _XtPopupInitialize( XtAppContext /* app_context */ ); extern void _XtBindActions( Widget /* widget */, XtTM /* tm_rec */ ); extern Boolean _XtComputeLateBindings( Display* /* dpy */, LateBindingsPtr /* lateModifiers */, Modifiers* /* computed */, Modifiers* /* computedMask */ ); extern XtTranslations _XtCreateXlations( TMStateTree * /* stateTrees */, TMShortCard /* numStateTrees */, XtTranslations /* first */, XtTranslations /* second */ ); extern Boolean _XtCvtMergeTranslations( Display* /* dpy */, XrmValuePtr /* args */, Cardinal* /* num_args */, XrmValuePtr /* from */, XrmValuePtr /* to */, XtPointer* /* closure_ret */ ); void _XtRemoveStateTreeByIndex( XtTranslations /* xlations */, TMShortCard /* i */); void _XtFreeTranslations( XtAppContext /* app */, XrmValuePtr /* toVal */, XtPointer /* closure */, XrmValuePtr /* args */, Cardinal* /* num_args */ ); extern TMShortCard _XtGetModifierIndex( Event* /* event */ ); extern TMShortCard _XtGetQuarkIndex( TMParseStateTree /* stateTreePtr */, XrmQuark /* quark */ ); extern XtTranslations _XtGetTranslationValue( Widget /* widget */ ); extern TMShortCard _XtGetTypeIndex( Event* /* event */ ); extern void _XtGrabInitialize( XtAppContext /* app */ ); extern void _XtInstallTranslations( Widget /* widget */ ); extern void _XtRemoveTranslations( Widget /* widget */ ); extern void _XtDestroyTMData( Widget /* widget */ ); extern void _XtMergeTranslations( Widget /* widget */, XtTranslations /* newXlations */, _XtTranslateOp /* operation */ ); extern void _XtActionInitialize( XtAppContext /* app */ ); extern TMStateTree _XtParseTreeToStateTree( TMParseStateTree /* parseTree */ ); extern String _XtPrintActions( ActionRec* /* actions */, XrmQuark* /* quarkTbl */ ); extern String _XtPrintState( TMStateTree /* stateTree */, TMBranchHead /* branchHead */); extern String _XtPrintEventSeq( EventSeqPtr /* eventSeq */, Display* /* dpy */ ); typedef Boolean (*_XtTraversalProc)( StatePtr /* state */, XtPointer /* data */ ); extern void _XtTraverseStateTree( TMStateTree /* tree */, _XtTraversalProc /* func */, XtPointer /* data */ ); extern void _XtTranslateInitialize( void ); extern void _XtAddTMConverters( ConverterTable /* table */ ); extern void _XtUnbindActions( Widget /* widget */, XtTranslations /* xlations */, TMBindData /* bindData */ ); extern void _XtUnmergeTranslations( Widget /* widget */, XtTranslations /* xlations */ ); /* TMKey.c */ extern void _XtAllocTMContext(XtPerDisplay pd); _XFUNCPROTOEND reeList; typedef struct _TMSimpleBindProcsRec { XtActionProc *procs; }TMSimpleBindProcsRec, *TMSimpleBindProcs; typedef struct _TMComplexBindProcsRec { Widget widget; /*widgetID to pass to action Proc*/ XtTranslations aXlations; libXt-1.1.5/include/X11/Object.h000064401431060000012000000050071252061032400164310ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtObject_h #define _XtObject_h _XFUNCPROTOBEGIN typedef struct _ObjectRec *Object; typedef struct _ObjectClassRec *ObjectClass; #ifndef VMS externalref WidgetClass objectClass; #endif _XFUNCPROTOEND #endif /* _XtObject_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/ConstrainP.h000064401431060000012000000076441252061032400173140ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtConstraintP_h #define _XtConstraintP_h #include _XFUNCPROTOBEGIN typedef struct _ConstraintPart { XtPointer mumble; /* No new fields, keep C compiler happy */ } ConstraintPart; typedef struct _ConstraintRec { CorePart core; CompositePart composite; ConstraintPart constraint; } ConstraintRec, *ConstraintWidget; typedef struct _ConstraintClassPart { XtResourceList resources; /* constraint resource list */ Cardinal num_resources; /* number of constraints in list */ Cardinal constraint_size; /* size of constraint record */ XtInitProc initialize; /* constraint initialization */ XtWidgetProc destroy; /* constraint destroy proc */ XtSetValuesFunc set_values; /* constraint set_values proc */ XtPointer extension; /* pointer to extension record */ } ConstraintClassPart; typedef struct { XtPointer next_extension; /* 1st 4 mandated for all extension records */ XrmQuark record_type; /* NULLQUARK; on ConstraintClassPart */ long version; /* must be XtConstraintExtensionVersion */ Cardinal record_size; /* sizeof(ConstraintClassExtensionRec) */ XtArgsProc get_values_hook; } ConstraintClassExtensionRec, *ConstraintClassExtension; typedef struct _ConstraintClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ConstraintClassPart constraint_class; } ConstraintClassRec; externalref ConstraintClassRec constraintClassRec; _XFUNCPROTOEND #define XtConstraintExtensionVersion 1L #endif /* _XtConstraintP_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/CompositeP.h000064401431060000012000000111511252061032400173020ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtCompositeP_h #define _XtCompositeP_h #include _XFUNCPROTOBEGIN /************************************************************************ * * Additional instance fields for widgets of (sub)class 'Composite' * ************************************************************************/ typedef struct _CompositePart { WidgetList children; /* array of ALL widget children */ Cardinal num_children; /* total number of widget children */ Cardinal num_slots; /* number of slots in children array */ XtOrderProc insert_position; /* compute position of new child */ } CompositePart,*CompositePtr; typedef struct _CompositeRec { CorePart core; CompositePart composite; } CompositeRec; /********************************************************************* * * Additional class fields for widgets of (sub)class 'Composite' * ********************************************************************/ typedef struct _CompositeClassPart { XtGeometryHandler geometry_manager; /* geometry manager for children */ XtWidgetProc change_managed; /* change managed state of child */ XtWidgetProc insert_child; /* physically add child to parent */ XtWidgetProc delete_child; /* physically remove child */ XtPointer extension; /* pointer to extension record */ } CompositeClassPart,*CompositePartPtr; typedef struct { XtPointer next_extension; /* 1st 4 mandated for all extension records */ XrmQuark record_type; /* NULLQUARK; on CompositeClassPart */ long version; /* must be XtCompositeExtensionVersion */ Cardinal record_size; /* sizeof(CompositeClassExtensionRec) */ Boolean accepts_objects; Boolean allows_change_managed_set; } CompositeClassExtensionRec, *CompositeClassExtension; typedef struct _CompositeClassRec { CoreClassPart core_class; CompositeClassPart composite_class; } CompositeClassRec; externalref CompositeClassRec compositeClassRec; _XFUNCPROTOEND #define XtCompositeExtensionVersion 2L #define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit) #define XtInheritChangeManaged ((XtWidgetProc) _XtInherit) #define XtInheritInsertChild ((XtWidgetProc) _XtInherit) #define XtInheritDeleteChild ((XtWidgetProc) _XtInherit) #endif /* _XtCompositeP_h */ /* DON'T ADD STUFF AFTER THIS #endif */ libXt-1.1.5/include/X11/ResourceI.h000064401431060000012000000072031252061032400171230ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /**************************************************************** * * Resources * ****************************************************************/ #ifndef _XtresourceI_h #define _XtresourceI_h #define StringToQuark(string) XrmStringToQuark(string) #define StringToName(string) XrmStringToName(string) #define StringToClass(string) XrmStringToClass(string) _XFUNCPROTOBEGIN extern void _XtDependencies( XtResourceList * /* class_resp */, Cardinal * /* class_num_resp */, XrmResourceList * /* super_res */, Cardinal /* super_num_res */, Cardinal /* super_widget_size */); extern void _XtResourceDependencies( WidgetClass /* wc */ ); extern void _XtConstraintResDependencies( ConstraintWidgetClass /* wc */ ); extern XtCacheRef* _XtGetResources( Widget /* w */, ArgList /* args */, Cardinal /* num_args */, XtTypedArgList /* typed_args */, Cardinal* /* num_typed_args */ ); extern void _XtCopyFromParent( Widget /* widget */, int /* offset */, XrmValue* /* value */ ); extern void _XtCopyToArg(char *src, XtArgVal *dst, unsigned int size); extern void _XtCopyFromArg(XtArgVal src, char *dst, unsigned int size); extern XrmResourceList* _XtCreateIndirectionTable(XtResourceList resources, Cardinal num_resources); extern void _XtResourceListInitialize(void); _XFUNCPROTOEND #endif /* _XtresourceI_h */ libXt-1.1.5/Makefile.in000064401431060000012000000736501252061035000151330ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # # Copyright © 2003 Keith Packard, Noah Levitt # # 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 Keith Packard not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Keith Packard makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = xt.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-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 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)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/xt.pc.in COPYING ChangeLog INSTALL README compile \ config.guess config.sub install-sh ltmain.sh missing 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__post_remove_distdir = $(am__remove_distdir) 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 $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip 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@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ SUBDIRS = util src include man specs test ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = xt.pc MAINTAINERCLEANFILES = ChangeLog INSTALL all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 xt.pc: $(top_builddir)/config.status $(srcdir)/xt.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 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; \ $(am__define_uniq_tagged_files); \ 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-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files 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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -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__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_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.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 $(distdir)/_build/sub $(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/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(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__post_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 $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(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-hdr \ 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-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-pkgconfigDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck 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-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-am uninstall uninstall-am \ uninstall-pkgconfigDATA .PRECIOUS: Makefile .PHONY: ChangeLog INSTALL INSTALL: $(INSTALL_CMD) ChangeLog: $(CHANGELOG_CMD) dist-hook: ChangeLog INSTALL # 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: " | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$libXt-1.1.5/aclocal.m4000064401431060000012000015005341252061033600147270ustar00alancstaff00002660200006# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) 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-2014 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. # 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.15' 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.15], [], [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.15])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-2014 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. # 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], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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-2014 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. # 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", "OBJC", "OBJCXX", "UPC", or "GJC". # 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh. echo '/* dummy */' > 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], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) 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-2014 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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-2014 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) 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-2014 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. # 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+set}" != 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-2014 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. # 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 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. # 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-2014 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. # 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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 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. # _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])]) # Copyright (C) 1999-2014 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 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. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 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. # 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-2014 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. # _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-2014 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. # _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}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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([m4/ax_define_dir.m4]) # 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 # 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], [[!?.]$], [], [.]) )]) # _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' ;; 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*) 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*) ;; *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 ;; *) _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 ;; 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*) 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 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*) 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 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 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 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 # 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 # _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], []) 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])]) # 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 ]) # 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) ]) # 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])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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 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., 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES dnl xorg-macros.m4. Generated from xorg-macros.m4.in xorgversion.m4 by configure. dnl dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the "Software"), dnl to deal in the Software without restriction, including without limitation dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, dnl and/or sell copies of the Software, and to permit persons to whom the dnl Software is furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice (including the next dnl paragraph) shall be included in all copies or substantial portions of the dnl Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER dnl DEALINGS IN THE SOFTWARE. # XORG_MACROS_VERSION(required-version) # ------------------------------------- # Minimum version: 1.1.0 # # If you're using a macro added in Version 1.1 or newer, include this in # your configure.ac with the minimum required version, such as: # XORG_MACROS_VERSION(1.1) # # To ensure that this macro is defined, also add: # m4_ifndef([XORG_MACROS_VERSION], # [m4_fatal([must install xorg-macros 1.1 or later before running autoconf/autogen])]) # # # See the "minimum version" comment for each macro you use to see what # version you require. m4_defun([XORG_MACROS_VERSION],[ m4_define([vers_have], [1.19.0]) m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) m4_if(m4_cmp(maj_have, maj_needed), 0,, [m4_fatal([xorg-macros major version ]maj_needed[ is required but ]vers_have[ found])]) m4_if(m4_version_compare(vers_have, [$1]), -1, [m4_fatal([xorg-macros version $1 or higher is required but ]vers_have[ found])]) m4_undefine([vers_have]) m4_undefine([maj_have]) m4_undefine([maj_needed]) ]) # XORG_MACROS_VERSION # XORG_PROG_RAWCPP() # ------------------ # Minimum version: 1.0.0 # # Find cpp program and necessary flags for use in pre-processing text files # such as man pages and config files AC_DEFUN([XORG_PROG_RAWCPP],[ AC_REQUIRE([AC_PROG_CPP]) AC_PATH_PROGS(RAWCPP, [cpp], [${CPP}], [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib]) # Check for flag to avoid builtin definitions - assumes unix is predefined, # which is not the best choice for supporting other OS'es, but covers most # of the ones we need for now. AC_MSG_CHECKING([if $RAWCPP requires -undef]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp redefine unix ?]])]) if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then AC_MSG_RESULT([no]) else if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS=-undef AC_MSG_RESULT([yes]) # under Cygwin unix is still defined even with -undef elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS="-undef -ansi" AC_MSG_RESULT([yes, with -ansi]) else AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.]) fi fi rm -f conftest.$ac_ext AC_MSG_CHECKING([if $RAWCPP requires -traditional]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp preserve "whitespace"?]])]) if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then AC_MSG_RESULT([no]) else if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then TRADITIONALCPPFLAGS="-traditional" RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" AC_MSG_RESULT([yes]) else AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do.]) fi fi rm -f conftest.$ac_ext AC_SUBST(RAWCPPFLAGS) AC_SUBST(TRADITIONALCPPFLAGS) ]) # XORG_PROG_RAWCPP # XORG_MANPAGE_SECTIONS() # ----------------------- # Minimum version: 1.0.0 # # Determine which sections man pages go in for the different man page types # on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files. # Not sure if there's any better way than just hardcoding by OS name. # Override default settings by setting environment variables # Added MAN_SUBSTS in version 1.8 # Added AC_PROG_SED in version 1.8 AC_DEFUN([XORG_MANPAGE_SECTIONS],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_SED]) if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi if test x$APP_MAN_DIR = x ; then APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' fi if test x$LIB_MAN_SUFFIX = x ; then LIB_MAN_SUFFIX=3 fi if test x$LIB_MAN_DIR = x ; then LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' fi if test x$FILE_MAN_SUFFIX = x ; then case $host_os in solaris*) FILE_MAN_SUFFIX=4 ;; *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' fi if test x$MISC_MAN_SUFFIX = x ; then case $host_os in solaris*) MISC_MAN_SUFFIX=5 ;; *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' fi if test x$DRIVER_MAN_SUFFIX = x ; then case $host_os in solaris*) DRIVER_MAN_SUFFIX=7 ;; *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' fi if test x$ADMIN_MAN_SUFFIX = x ; then case $host_os in solaris*) ADMIN_MAN_SUFFIX=1m ;; *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' fi AC_SUBST([APP_MAN_SUFFIX]) AC_SUBST([LIB_MAN_SUFFIX]) AC_SUBST([FILE_MAN_SUFFIX]) AC_SUBST([MISC_MAN_SUFFIX]) AC_SUBST([DRIVER_MAN_SUFFIX]) AC_SUBST([ADMIN_MAN_SUFFIX]) AC_SUBST([APP_MAN_DIR]) AC_SUBST([LIB_MAN_DIR]) AC_SUBST([FILE_MAN_DIR]) AC_SUBST([MISC_MAN_DIR]) AC_SUBST([DRIVER_MAN_DIR]) AC_SUBST([ADMIN_MAN_DIR]) XORG_MAN_PAGE="X Version 11" AC_SUBST([XORG_MAN_PAGE]) MAN_SUBSTS="\ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xservername__|Xorg|g' \ -e 's|__xconfigfile__|xorg.conf|g' \ -e 's|__projectroot__|\$(prefix)|g' \ -e 's|__apploaddir__|\$(appdefaultdir)|g' \ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" AC_SUBST([MAN_SUBSTS]) ]) # XORG_MANPAGE_SECTIONS # XORG_CHECK_SGML_DOCTOOLS([MIN-VERSION]) # ------------------------ # Minimum version: 1.7.0 # # Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent # provided by xorg-sgml-doctools, if installed. AC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[ AC_MSG_CHECKING([for X.Org SGML entities m4_ifval([$1],[>= $1])]) XORG_SGML_PATH= PKG_CHECK_EXISTS([xorg-sgml-doctools m4_ifval([$1],[>= $1])], [XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`], [m4_ifval([$1],[:], [if test x"$cross_compiling" != x"yes" ; then AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent], [XORG_SGML_PATH=$prefix/share/sgml]) fi]) ]) # Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing # the path and the name of the doc stylesheet if test "x$XORG_SGML_PATH" != "x" ; then AC_MSG_RESULT([$XORG_SGML_PATH]) STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl else AC_MSG_RESULT([no]) fi AC_SUBST(XORG_SGML_PATH) AC_SUBST(STYLESHEET_SRCDIR) AC_SUBST(XSL_STYLESHEET) AM_CONDITIONAL([HAVE_STYLESHEETS], [test "x$XSL_STYLESHEET" != "x"]) ]) # XORG_CHECK_SGML_DOCTOOLS # XORG_CHECK_LINUXDOC # ------------------- # Minimum version: 1.0.0 # # Defines the variable MAKE_TEXT if the necessary tools and # files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt. # Whether or not the necessary tools and files are found can be checked # with the AM_CONDITIONAL "BUILD_LINUXDOC" AC_DEFUN([XORG_CHECK_LINUXDOC],[ AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) AC_REQUIRE([XORG_WITH_PS2PDF]) AC_PATH_PROG(LINUXDOC, linuxdoc) AC_MSG_CHECKING([whether to build documentation]) if test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then BUILDDOC=yes else BUILDDOC=no fi AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes]) AC_MSG_RESULT([$BUILDDOC]) AC_MSG_CHECKING([whether to build pdf documentation]) if test x$have_ps2pdf != xno && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes else BUILDPDFDOC=no fi AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt -f" MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps" MAKE_PDF="$PS2PDF" MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0" AC_SUBST(MAKE_TEXT) AC_SUBST(MAKE_PS) AC_SUBST(MAKE_PDF) AC_SUBST(MAKE_HTML) ]) # XORG_CHECK_LINUXDOC # XORG_CHECK_DOCBOOK # ------------------- # Minimum version: 1.0.0 # # Checks for the ability to build output formats from SGML DocBook source. # For XXX in {TXT, PDF, PS, HTML}, the AM_CONDITIONAL "BUILD_XXXDOC" # indicates whether the necessary tools and files are found and, if set, # $(MAKE_XXX) blah.sgml will produce blah.xxx. AC_DEFUN([XORG_CHECK_DOCBOOK],[ AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) BUILDTXTDOC=no BUILDPDFDOC=no BUILDPSDOC=no BUILDHTMLDOC=no AC_PATH_PROG(DOCBOOKPS, docbook2ps) AC_PATH_PROG(DOCBOOKPDF, docbook2pdf) AC_PATH_PROG(DOCBOOKHTML, docbook2html) AC_PATH_PROG(DOCBOOKTXT, docbook2txt) AC_MSG_CHECKING([whether to build text documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x && test x$BUILD_TXTDOC != xno; then BUILDTXTDOC=yes fi AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes]) AC_MSG_RESULT([$BUILDTXTDOC]) AC_MSG_CHECKING([whether to build PDF documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes fi AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) AC_MSG_CHECKING([whether to build PostScript documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x && test x$BUILD_PSDOC != xno; then BUILDPSDOC=yes fi AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes]) AC_MSG_RESULT([$BUILDPSDOC]) AC_MSG_CHECKING([whether to build HTML documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x && test x$BUILD_HTMLDOC != xno; then BUILDHTMLDOC=yes fi AM_CONDITIONAL(BUILD_HTMLDOC, [test x$BUILDHTMLDOC = xyes]) AC_MSG_RESULT([$BUILDHTMLDOC]) MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKTXT" MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPS" MAKE_PDF="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPDF" MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKHTML" AC_SUBST(MAKE_TEXT) AC_SUBST(MAKE_PS) AC_SUBST(MAKE_PDF) AC_SUBST(MAKE_HTML) ]) # XORG_CHECK_DOCBOOK # XORG_WITH_XMLTO([MIN-VERSION], [DEFAULT]) # ---------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-xmlto option, it allows maximum flexibilty in making decisions # as whether or not to use the xmlto package. When DEFAULT is not specified, # --with-xmlto assumes 'auto'. # # Interface to module: # HAVE_XMLTO: used in makefiles to conditionally generate documentation # XMLTO: returns the path of the xmlto program found # returns the path set by the user in the environment # --with-xmlto: 'yes' user instructs the module to use xmlto # 'no' user instructs the module not to use xmlto # # Added in version 1.10.0 # HAVE_XMLTO_TEXT: used in makefiles to conditionally generate text documentation # xmlto for text output requires either lynx, links, or w3m browsers # # If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_XMLTO],[ AC_ARG_VAR([XMLTO], [Path to xmlto command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(xmlto, AS_HELP_STRING([--with-xmlto], [Use xmlto to regenerate documentation (default: ]_defopt[)]), [use_xmlto=$withval], [use_xmlto=]_defopt) m4_undefine([_defopt]) if test "x$use_xmlto" = x"auto"; then AC_PATH_PROG([XMLTO], [xmlto]) if test "x$XMLTO" = "x"; then AC_MSG_WARN([xmlto not found - documentation targets will be skipped]) have_xmlto=no else have_xmlto=yes fi elif test "x$use_xmlto" = x"yes" ; then AC_PATH_PROG([XMLTO], [xmlto]) if test "x$XMLTO" = "x"; then AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH]) fi have_xmlto=yes elif test "x$use_xmlto" = x"no" ; then if test "x$XMLTO" != "x"; then AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified]) fi have_xmlto=no else AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no']) fi # Test for a minimum version of xmlto, if provided. m4_ifval([$1], [if test "$have_xmlto" = yes; then # scrape the xmlto version AC_MSG_CHECKING([the xmlto version]) xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` AC_MSG_RESULT([$xmlto_version]) AS_VERSION_COMPARE([$xmlto_version], [$1], [if test "x$use_xmlto" = xauto; then AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed]) have_xmlto=no else AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed]) fi]) fi]) # Test for the ability of xmlto to generate a text target have_xmlto_text=no cat > conftest.xml << "EOF" EOF AS_IF([test "$have_xmlto" = yes], [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1], [have_xmlto_text=yes], [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])]) rm -f conftest.xml AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes]) AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes]) ]) # XORG_WITH_XMLTO # XORG_WITH_XSLTPROC([MIN-VERSION], [DEFAULT]) # -------------------------------------------- # Minimum version: 1.12.0 # Minimum version for optional DEFAULT argument: 1.12.0 # # XSLT (Extensible Stylesheet Language Transformations) is a declarative, # XML-based language used for the transformation of XML documents. # The xsltproc command line tool is for applying XSLT stylesheets to XML documents. # It is used under the cover by xmlto to generate html files from DocBook/XML. # The XSLT processor is often used as a standalone tool for transformations. # It should not be assumed that this tool is used only to work with documnetation. # When DEFAULT is not specified, --with-xsltproc assumes 'auto'. # # Interface to module: # HAVE_XSLTPROC: used in makefiles to conditionally generate documentation # XSLTPROC: returns the path of the xsltproc program found # returns the path set by the user in the environment # --with-xsltproc: 'yes' user instructs the module to use xsltproc # 'no' user instructs the module not to use xsltproc # have_xsltproc: returns yes if xsltproc found in PATH or no # # If the user sets the value of XSLTPROC, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_XSLTPROC],[ AC_ARG_VAR([XSLTPROC], [Path to xsltproc command]) # Preserves the interface, should it be implemented later m4_ifval([$1], [m4_warn([syntax], [Checking for xsltproc MIN-VERSION is not implemented])]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(xsltproc, AS_HELP_STRING([--with-xsltproc], [Use xsltproc for the transformation of XML documents (default: ]_defopt[)]), [use_xsltproc=$withval], [use_xsltproc=]_defopt) m4_undefine([_defopt]) if test "x$use_xsltproc" = x"auto"; then AC_PATH_PROG([XSLTPROC], [xsltproc]) if test "x$XSLTPROC" = "x"; then AC_MSG_WARN([xsltproc not found - cannot transform XML documents]) have_xsltproc=no else have_xsltproc=yes fi elif test "x$use_xsltproc" = x"yes" ; then AC_PATH_PROG([XSLTPROC], [xsltproc]) if test "x$XSLTPROC" = "x"; then AC_MSG_ERROR([--with-xsltproc=yes specified but xsltproc not found in PATH]) fi have_xsltproc=yes elif test "x$use_xsltproc" = x"no" ; then if test "x$XSLTPROC" != "x"; then AC_MSG_WARN([ignoring XSLTPROC environment variable since --with-xsltproc=no was specified]) fi have_xsltproc=no else AC_MSG_ERROR([--with-xsltproc expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_XSLTPROC], [test "$have_xsltproc" = yes]) ]) # XORG_WITH_XSLTPROC # XORG_WITH_PERL([MIN-VERSION], [DEFAULT]) # ---------------------------------------- # Minimum version: 1.15.0 # # PERL (Practical Extraction and Report Language) is a language optimized for # scanning arbitrary text files, extracting information from those text files, # and printing reports based on that information. # # When DEFAULT is not specified, --with-perl assumes 'auto'. # # Interface to module: # HAVE_PERL: used in makefiles to conditionally scan text files # PERL: returns the path of the perl program found # returns the path set by the user in the environment # --with-perl: 'yes' user instructs the module to use perl # 'no' user instructs the module not to use perl # have_perl: returns yes if perl found in PATH or no # # If the user sets the value of PERL, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_PERL],[ AC_ARG_VAR([PERL], [Path to perl command]) # Preserves the interface, should it be implemented later m4_ifval([$1], [m4_warn([syntax], [Checking for perl MIN-VERSION is not implemented])]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(perl, AS_HELP_STRING([--with-perl], [Use perl for extracting information from files (default: ]_defopt[)]), [use_perl=$withval], [use_perl=]_defopt) m4_undefine([_defopt]) if test "x$use_perl" = x"auto"; then AC_PATH_PROG([PERL], [perl]) if test "x$PERL" = "x"; then AC_MSG_WARN([perl not found - cannot extract information and report]) have_perl=no else have_perl=yes fi elif test "x$use_perl" = x"yes" ; then AC_PATH_PROG([PERL], [perl]) if test "x$PERL" = "x"; then AC_MSG_ERROR([--with-perl=yes specified but perl not found in PATH]) fi have_perl=yes elif test "x$use_perl" = x"no" ; then if test "x$PERL" != "x"; then AC_MSG_WARN([ignoring PERL environment variable since --with-perl=no was specified]) fi have_perl=no else AC_MSG_ERROR([--with-perl expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_PERL], [test "$have_perl" = yes]) ]) # XORG_WITH_PERL # XORG_WITH_ASCIIDOC([MIN-VERSION], [DEFAULT]) # ---------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-asciidoc option, it allows maximum flexibilty in making decisions # as whether or not to use the asciidoc package. When DEFAULT is not specified, # --with-asciidoc assumes 'auto'. # # Interface to module: # HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation # ASCIIDOC: returns the path of the asciidoc program found # returns the path set by the user in the environment # --with-asciidoc: 'yes' user instructs the module to use asciidoc # 'no' user instructs the module not to use asciidoc # # If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_ASCIIDOC],[ AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(asciidoc, AS_HELP_STRING([--with-asciidoc], [Use asciidoc to regenerate documentation (default: ]_defopt[)]), [use_asciidoc=$withval], [use_asciidoc=]_defopt) m4_undefine([_defopt]) if test "x$use_asciidoc" = x"auto"; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test "x$ASCIIDOC" = "x"; then AC_MSG_WARN([asciidoc not found - documentation targets will be skipped]) have_asciidoc=no else have_asciidoc=yes fi elif test "x$use_asciidoc" = x"yes" ; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test "x$ASCIIDOC" = "x"; then AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH]) fi have_asciidoc=yes elif test "x$use_asciidoc" = x"no" ; then if test "x$ASCIIDOC" != "x"; then AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified]) fi have_asciidoc=no else AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no']) fi m4_ifval([$1], [if test "$have_asciidoc" = yes; then # scrape the asciidoc version AC_MSG_CHECKING([the asciidoc version]) asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2` AC_MSG_RESULT([$asciidoc_version]) AS_VERSION_COMPARE([$asciidoc_version], [$1], [if test "x$use_asciidoc" = xauto; then AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed]) have_asciidoc=no else AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed]) fi]) fi]) AM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes]) ]) # XORG_WITH_ASCIIDOC # XORG_WITH_DOXYGEN([MIN-VERSION], [DEFAULT]) # ------------------------------------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # Minimum version for optional DOT checking: 1.18.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-doxygen option, it allows maximum flexibilty in making decisions # as whether or not to use the doxygen package. When DEFAULT is not specified, # --with-doxygen assumes 'auto'. # # Interface to module: # HAVE_DOXYGEN: used in makefiles to conditionally generate documentation # DOXYGEN: returns the path of the doxygen program found # returns the path set by the user in the environment # --with-doxygen: 'yes' user instructs the module to use doxygen # 'no' user instructs the module not to use doxygen # # If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_DOXYGEN],[ AC_ARG_VAR([DOXYGEN], [Path to doxygen command]) AC_ARG_VAR([DOT], [Path to the dot graphics utility]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(doxygen, AS_HELP_STRING([--with-doxygen], [Use doxygen to regenerate documentation (default: ]_defopt[)]), [use_doxygen=$withval], [use_doxygen=]_defopt) m4_undefine([_defopt]) if test "x$use_doxygen" = x"auto"; then AC_PATH_PROG([DOXYGEN], [doxygen]) if test "x$DOXYGEN" = "x"; then AC_MSG_WARN([doxygen not found - documentation targets will be skipped]) have_doxygen=no else have_doxygen=yes fi elif test "x$use_doxygen" = x"yes" ; then AC_PATH_PROG([DOXYGEN], [doxygen]) if test "x$DOXYGEN" = "x"; then AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH]) fi have_doxygen=yes elif test "x$use_doxygen" = x"no" ; then if test "x$DOXYGEN" != "x"; then AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified]) fi have_doxygen=no else AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no']) fi m4_ifval([$1], [if test "$have_doxygen" = yes; then # scrape the doxygen version AC_MSG_CHECKING([the doxygen version]) doxygen_version=`$DOXYGEN --version 2>/dev/null` AC_MSG_RESULT([$doxygen_version]) AS_VERSION_COMPARE([$doxygen_version], [$1], [if test "x$use_doxygen" = xauto; then AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed]) have_doxygen=no else AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed]) fi]) fi]) dnl Check for DOT if we have doxygen. The caller decides if it is mandatory dnl HAVE_DOT is a variable that can be used in your doxygen.in config file: dnl HAVE_DOT = @HAVE_DOT@ HAVE_DOT=no if test "x$have_doxygen" = "xyes"; then AC_PATH_PROG([DOT], [dot]) if test "x$DOT" != "x"; then HAVE_DOT=yes fi fi AC_SUBST([HAVE_DOT]) AM_CONDITIONAL([HAVE_DOT], [test "$HAVE_DOT" = "yes"]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes]) ]) # XORG_WITH_DOXYGEN # XORG_WITH_GROFF([DEFAULT]) # ---------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-groff option, it allows maximum flexibilty in making decisions # as whether or not to use the groff package. When DEFAULT is not specified, # --with-groff assumes 'auto'. # # Interface to module: # HAVE_GROFF: used in makefiles to conditionally generate documentation # HAVE_GROFF_MM: the memorandum macros (-mm) package # HAVE_GROFF_MS: the -ms macros package # GROFF: returns the path of the groff program found # returns the path set by the user in the environment # --with-groff: 'yes' user instructs the module to use groff # 'no' user instructs the module not to use groff # # Added in version 1.9.0: # HAVE_GROFF_HTML: groff has dependencies to output HTML format: # pnmcut pnmcrop pnmtopng pnmtops from the netpbm package. # psselect from the psutils package. # the ghostcript package. Refer to the grohtml man pages # # If the user sets the value of GROFF, AC_PATH_PROG skips testing the path. # # OS and distros often splits groff in a basic and full package, the former # having the groff program and the later having devices, fonts and macros # Checking for the groff executable is not enough. # # If macros are missing, we cannot assume that groff is useless, so we don't # unset HAVE_GROFF or GROFF env variables. # HAVE_GROFF_?? can never be true while HAVE_GROFF is false. # AC_DEFUN([XORG_WITH_GROFF],[ AC_ARG_VAR([GROFF], [Path to groff command]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_WITH(groff, AS_HELP_STRING([--with-groff], [Use groff to regenerate documentation (default: ]_defopt[)]), [use_groff=$withval], [use_groff=]_defopt) m4_undefine([_defopt]) if test "x$use_groff" = x"auto"; then AC_PATH_PROG([GROFF], [groff]) if test "x$GROFF" = "x"; then AC_MSG_WARN([groff not found - documentation targets will be skipped]) have_groff=no else have_groff=yes fi elif test "x$use_groff" = x"yes" ; then AC_PATH_PROG([GROFF], [groff]) if test "x$GROFF" = "x"; then AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH]) fi have_groff=yes elif test "x$use_groff" = x"no" ; then if test "x$GROFF" != "x"; then AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified]) fi have_groff=no else AC_MSG_ERROR([--with-groff expects 'yes' or 'no']) fi # We have groff, test for the presence of the macro packages if test "x$have_groff" = x"yes"; then AC_MSG_CHECKING([for ${GROFF} -ms macros]) if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then groff_ms_works=yes else groff_ms_works=no fi AC_MSG_RESULT([$groff_ms_works]) AC_MSG_CHECKING([for ${GROFF} -mm macros]) if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then groff_mm_works=yes else groff_mm_works=no fi AC_MSG_RESULT([$groff_mm_works]) fi # We have groff, test for HTML dependencies, one command per package if test "x$have_groff" = x"yes"; then AC_PATH_PROGS(GS_PATH, [gs gswin32c]) AC_PATH_PROG(PNMTOPNG_PATH, [pnmtopng]) AC_PATH_PROG(PSSELECT_PATH, [psselect]) if test "x$GS_PATH" != "x" -a "x$PNMTOPNG_PATH" != "x" -a "x$PSSELECT_PATH" != "x"; then have_groff_html=yes else have_groff_html=no AC_MSG_WARN([grohtml dependencies not found - HTML Documentation skipped. Refer to grohtml man pages]) fi fi # Set Automake conditionals for Makefiles AM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes]) AM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes]) AM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes]) AM_CONDITIONAL([HAVE_GROFF_HTML], [test "$have_groff_html" = yes]) ]) # XORG_WITH_GROFF # XORG_WITH_FOP([MIN-VERSION], [DEFAULT]) # --------------------------------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # Minimum version for optional MIN-VERSION argument: 1.15.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-fop option, it allows maximum flexibilty in making decisions # as whether or not to use the fop package. When DEFAULT is not specified, # --with-fop assumes 'auto'. # # Interface to module: # HAVE_FOP: used in makefiles to conditionally generate documentation # FOP: returns the path of the fop program found # returns the path set by the user in the environment # --with-fop: 'yes' user instructs the module to use fop # 'no' user instructs the module not to use fop # # If the user sets the value of FOP, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_FOP],[ AC_ARG_VAR([FOP], [Path to fop command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(fop, AS_HELP_STRING([--with-fop], [Use fop to regenerate documentation (default: ]_defopt[)]), [use_fop=$withval], [use_fop=]_defopt) m4_undefine([_defopt]) if test "x$use_fop" = x"auto"; then AC_PATH_PROG([FOP], [fop]) if test "x$FOP" = "x"; then AC_MSG_WARN([fop not found - documentation targets will be skipped]) have_fop=no else have_fop=yes fi elif test "x$use_fop" = x"yes" ; then AC_PATH_PROG([FOP], [fop]) if test "x$FOP" = "x"; then AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH]) fi have_fop=yes elif test "x$use_fop" = x"no" ; then if test "x$FOP" != "x"; then AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified]) fi have_fop=no else AC_MSG_ERROR([--with-fop expects 'yes' or 'no']) fi # Test for a minimum version of fop, if provided. m4_ifval([$1], [if test "$have_fop" = yes; then # scrape the fop version AC_MSG_CHECKING([for fop minimum version]) fop_version=`$FOP -version 2>/dev/null | cut -d' ' -f3` AC_MSG_RESULT([$fop_version]) AS_VERSION_COMPARE([$fop_version], [$1], [if test "x$use_fop" = xauto; then AC_MSG_WARN([fop version $fop_version found, but $1 needed]) have_fop=no else AC_MSG_ERROR([fop version $fop_version found, but $1 needed]) fi]) fi]) AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes]) ]) # XORG_WITH_FOP # XORG_WITH_M4([MIN-VERSION]) # --------------------------- # Minimum version: 1.19.0 # # This macro attempts to locate an m4 macro processor which supports # -I option and is only useful for modules relying on M4 in order to # expand macros in source code files. # # Interface to module: # M4: returns the path of the m4 program found # returns the path set by the user in the environment # AC_DEFUN([XORG_WITH_M4], [ AC_CACHE_CHECK([for m4 that supports -I option], [ac_cv_path_M4], [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4], [[$ac_path_M4 -I. /dev/null > /dev/null 2>&1 && \ ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]], [AC_MSG_ERROR([could not find m4 that supports -I option])], [$PATH:/usr/gnu/bin])]) AC_SUBST([M4], [$ac_cv_path_M4]) ]) # XORG_WITH_M4 # XORG_WITH_PS2PDF([DEFAULT]) # ---------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-ps2pdf option, it allows maximum flexibilty in making decisions # as whether or not to use the ps2pdf package. When DEFAULT is not specified, # --with-ps2pdf assumes 'auto'. # # Interface to module: # HAVE_PS2PDF: used in makefiles to conditionally generate documentation # PS2PDF: returns the path of the ps2pdf program found # returns the path set by the user in the environment # --with-ps2pdf: 'yes' user instructs the module to use ps2pdf # 'no' user instructs the module not to use ps2pdf # # If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_PS2PDF],[ AC_ARG_VAR([PS2PDF], [Path to ps2pdf command]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_WITH(ps2pdf, AS_HELP_STRING([--with-ps2pdf], [Use ps2pdf to regenerate documentation (default: ]_defopt[)]), [use_ps2pdf=$withval], [use_ps2pdf=]_defopt) m4_undefine([_defopt]) if test "x$use_ps2pdf" = x"auto"; then AC_PATH_PROG([PS2PDF], [ps2pdf]) if test "x$PS2PDF" = "x"; then AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped]) have_ps2pdf=no else have_ps2pdf=yes fi elif test "x$use_ps2pdf" = x"yes" ; then AC_PATH_PROG([PS2PDF], [ps2pdf]) if test "x$PS2PDF" = "x"; then AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH]) fi have_ps2pdf=yes elif test "x$use_ps2pdf" = x"no" ; then if test "x$PS2PDF" != "x"; then AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified]) fi have_ps2pdf=no else AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes]) ]) # XORG_WITH_PS2PDF # XORG_ENABLE_DOCS (enable_docs=yes) # ---------------- # Minimum version: 1.6.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a builder to skip all # documentation targets except traditional man pages. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_DOCS: used in makefiles to conditionally generate documentation # --enable-docs: 'yes' user instructs the module to generate docs # 'no' user instructs the module not to generate docs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_DOCS],[ m4_define([docs_default], m4_default([$1], [yes])) AC_ARG_ENABLE(docs, AS_HELP_STRING([--enable-docs], [Enable building the documentation (default: ]docs_default[)]), [build_docs=$enableval], [build_docs=]docs_default) m4_undefine([docs_default]) AM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes]) AC_MSG_CHECKING([whether to build documentation]) AC_MSG_RESULT([$build_docs]) ]) # XORG_ENABLE_DOCS # XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes) # ---------------- # Minimum version: 1.6.0 # # This macro enables a builder to skip all developer documentation. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_DEVEL_DOCS: used in makefiles to conditionally generate developer docs # --enable-devel-docs: 'yes' user instructs the module to generate developer docs # 'no' user instructs the module not to generate developer docs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[ m4_define([devel_default], m4_default([$1], [yes])) AC_ARG_ENABLE(devel-docs, AS_HELP_STRING([--enable-devel-docs], [Enable building the developer documentation (default: ]devel_default[)]), [build_devel_docs=$enableval], [build_devel_docs=]devel_default) m4_undefine([devel_default]) AM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes]) AC_MSG_CHECKING([whether to build developer documentation]) AC_MSG_RESULT([$build_devel_docs]) ]) # XORG_ENABLE_DEVEL_DOCS # XORG_ENABLE_SPECS (enable_specs=yes) # ---------------- # Minimum version: 1.6.0 # # This macro enables a builder to skip all functional specification targets. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_SPECS: used in makefiles to conditionally generate specs # --enable-specs: 'yes' user instructs the module to generate specs # 'no' user instructs the module not to generate specs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_SPECS],[ m4_define([spec_default], m4_default([$1], [yes])) AC_ARG_ENABLE(specs, AS_HELP_STRING([--enable-specs], [Enable building the specs (default: ]spec_default[)]), [build_specs=$enableval], [build_specs=]spec_default) m4_undefine([spec_default]) AM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes]) AC_MSG_CHECKING([whether to build functional specifications]) AC_MSG_RESULT([$build_specs]) ]) # XORG_ENABLE_SPECS # XORG_ENABLE_UNIT_TESTS (enable_unit_tests=auto) # ---------------------------------------------- # Minimum version: 1.13.0 # # This macro enables a builder to enable/disable unit testing # It makes no assumption about the test cases implementation # Test cases may or may not use Automake "Support for test suites" # They may or may not use the software utility library GLib # # When used in conjunction with XORG_WITH_GLIB, use both AM_CONDITIONAL # ENABLE_UNIT_TESTS and HAVE_GLIB. Not all unit tests may use glib. # The variable enable_unit_tests is used by other macros in this file. # # Interface to module: # ENABLE_UNIT_TESTS: used in makefiles to conditionally build tests # enable_unit_tests: used in configure.ac for additional configuration # --enable-unit-tests: 'yes' user instructs the module to build tests # 'no' user instructs the module not to build tests # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_UNIT_TESTS],[ AC_BEFORE([$0], [XORG_WITH_GLIB]) AC_BEFORE([$0], [XORG_LD_WRAP]) AC_REQUIRE([XORG_MEMORY_CHECK_FLAGS]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], [Enable building unit test cases (default: ]_defopt[)]), [enable_unit_tests=$enableval], [enable_unit_tests=]_defopt) m4_undefine([_defopt]) AM_CONDITIONAL(ENABLE_UNIT_TESTS, [test "x$enable_unit_tests" != xno]) AC_MSG_CHECKING([whether to build unit test cases]) AC_MSG_RESULT([$enable_unit_tests]) ]) # XORG_ENABLE_UNIT_TESTS # XORG_ENABLE_INTEGRATION_TESTS (enable_unit_tests=auto) # ------------------------------------------------------ # Minimum version: 1.17.0 # # This macro enables a builder to enable/disable integration testing # It makes no assumption about the test cases' implementation # Test cases may or may not use Automake "Support for test suites" # # Please see XORG_ENABLE_UNIT_TESTS for unit test support. Unit test support # usually requires less dependencies and may be built and run under less # stringent environments than integration tests. # # Interface to module: # ENABLE_INTEGRATION_TESTS: used in makefiles to conditionally build tests # enable_integration_tests: used in configure.ac for additional configuration # --enable-integration-tests: 'yes' user instructs the module to build tests # 'no' user instructs the module not to build tests # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_INTEGRATION_TESTS],[ AC_REQUIRE([XORG_MEMORY_CHECK_FLAGS]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_ENABLE(integration-tests, AS_HELP_STRING([--enable-integration-tests], [Enable building integration test cases (default: ]_defopt[)]), [enable_integration_tests=$enableval], [enable_integration_tests=]_defopt) m4_undefine([_defopt]) AM_CONDITIONAL([ENABLE_INTEGRATION_TESTS], [test "x$enable_integration_tests" != xno]) AC_MSG_CHECKING([whether to build unit test cases]) AC_MSG_RESULT([$enable_integration_tests]) ]) # XORG_ENABLE_INTEGRATION_TESTS # XORG_WITH_GLIB([MIN-VERSION], [DEFAULT]) # ---------------------------------------- # Minimum version: 1.13.0 # # GLib is a library which provides advanced data structures and functions. # This macro enables a module to test for the presence of Glib. # # When used with ENABLE_UNIT_TESTS, it is assumed GLib is used for unit testing. # Otherwise the value of $enable_unit_tests is blank. # # Please see XORG_ENABLE_INTEGRATION_TESTS for integration test support. Unit # test support usually requires less dependencies and may be built and run under # less stringent environments than integration tests. # # Interface to module: # HAVE_GLIB: used in makefiles to conditionally build targets # with_glib: used in configure.ac to know if GLib has been found # --with-glib: 'yes' user instructs the module to use glib # 'no' user instructs the module not to use glib # AC_DEFUN([XORG_WITH_GLIB],[ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(glib, AS_HELP_STRING([--with-glib], [Use GLib library for unit testing (default: ]_defopt[)]), [with_glib=$withval], [with_glib=]_defopt) m4_undefine([_defopt]) have_glib=no # Do not probe GLib if user explicitly disabled unit testing if test "x$enable_unit_tests" != x"no"; then # Do not probe GLib if user explicitly disabled it if test "x$with_glib" != x"no"; then m4_ifval( [$1], [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $1], [have_glib=yes], [have_glib=no])], [PKG_CHECK_MODULES([GLIB], [glib-2.0], [have_glib=yes], [have_glib=no])] ) fi fi # Not having GLib when unit testing has been explicitly requested is an error if test "x$enable_unit_tests" = x"yes"; then if test "x$have_glib" = x"no"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) fi fi # Having unit testing disabled when GLib has been explicitly requested is an error if test "x$enable_unit_tests" = x"no"; then if test "x$with_glib" = x"yes"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) fi fi # Not having GLib when it has been explicitly requested is an error if test "x$with_glib" = x"yes"; then if test "x$have_glib" = x"no"; then AC_MSG_ERROR([--with-glib=yes specified but glib-2.0 not found]) fi fi AM_CONDITIONAL([HAVE_GLIB], [test "$have_glib" = yes]) ]) # XORG_WITH_GLIB # XORG_LD_WRAP([required|optional]) # --------------------------------- # Minimum version: 1.13.0 # # Check if linker supports -wrap, passed via compiler flags # # When used with ENABLE_UNIT_TESTS, it is assumed -wrap is used for unit testing. # Otherwise the value of $enable_unit_tests is blank. # # Argument added in 1.16.0 - default is "required", to match existing behavior # of returning an error if enable_unit_tests is yes, and ld -wrap is not # available, an argument of "optional" allows use when some unit tests require # ld -wrap and others do not. # AC_DEFUN([XORG_LD_WRAP],[ XORG_CHECK_LINKER_FLAGS([-Wl,-wrap,exit],[have_ld_wrap=yes],[have_ld_wrap=no], [AC_LANG_PROGRAM([#include void __wrap_exit(int status) { return; }], [exit(0);])]) # Not having ld wrap when unit testing has been explicitly requested is an error if test "x$enable_unit_tests" = x"yes" -a "x$1" != "xoptional"; then if test "x$have_ld_wrap" = x"no"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but ld -wrap support is not available]) fi fi AM_CONDITIONAL([HAVE_LD_WRAP], [test "$have_ld_wrap" = yes]) # ]) # XORG_LD_WRAP # XORG_CHECK_LINKER_FLAGS # ----------------------- # SYNOPSIS # # XORG_CHECK_LINKER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE], [PROGRAM-SOURCE]) # # DESCRIPTION # # Check whether the given linker FLAGS work with the current language's # linker, or whether they give an error. # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # PROGRAM-SOURCE is the program source to link with, if needed # # NOTE: Based on AX_CHECK_COMPILER_FLAGS. # # LICENSE # # Copyright (c) 2009 Mike Frysinger # Copyright (c) 2009 Steven G. Johnson # Copyright (c) 2009 Matteo Frigo # # 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 3 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well.# AC_DEFUN([XORG_CHECK_LINKER_FLAGS], [AC_MSG_CHECKING([whether the linker accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(xorg_cv_linker_flags_[$1]), [ ax_save_FLAGS=$LDFLAGS LDFLAGS="$1" AC_LINK_IFELSE([m4_default([$4],[AC_LANG_PROGRAM()])], AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, AS_TR_SH(xorg_cv_linker_flags_[$1])=no) LDFLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$LDFLAGS LDFLAGS="$1" AC_LINK_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, eval AS_TR_SH(xorg_cv_linker_flags_[$1])=no) LDFLAGS=$ax_save_FLAGS]) eval xorg_check_linker_flags=$AS_TR_SH(xorg_cv_linker_flags_[$1]) AC_MSG_RESULT($xorg_check_linker_flags) if test "x$xorg_check_linker_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ]) # XORG_CHECK_LINKER_FLAGS # XORG_MEMORY_CHECK_FLAGS # ----------------------- # Minimum version: 1.16.0 # # This macro attempts to find appropriate memory checking functionality # for various platforms which unit testing code may use to catch various # forms of memory allocation and access errors in testing. # # Interface to module: # XORG_MALLOC_DEBUG_ENV - environment variables to set to enable debugging # Usually added to TESTS_ENVIRONMENT in Makefile.am # # If the user sets the value of XORG_MALLOC_DEBUG_ENV, it is used verbatim. # AC_DEFUN([XORG_MEMORY_CHECK_FLAGS],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_VAR([XORG_MALLOC_DEBUG_ENV], [Environment variables to enable memory checking in tests]) # Check for different types of support on different platforms case $host_os in solaris*) AC_CHECK_LIB([umem], [umem_alloc], [malloc_debug_env='LD_PRELOAD=libumem.so UMEM_DEBUG=default']) ;; *-gnu*) # GNU libc - Value is used as a single byte bit pattern, # both directly and inverted, so should not be 0 or 255. malloc_debug_env='MALLOC_PERTURB_=15' ;; darwin*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib' ;; *bsd*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1' ;; esac # User supplied flags override default flags if test "x$XORG_MALLOC_DEBUG_ENV" != "x"; then malloc_debug_env="$XORG_MALLOC_DEBUG_ENV" fi AC_SUBST([XORG_MALLOC_DEBUG_ENV],[$malloc_debug_env]) ]) # XORG_WITH_LINT # XORG_CHECK_MALLOC_ZERO # ---------------------- # Minimum version: 1.0.0 # # Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if # malloc(0) returns NULL. Packages should add one of these cflags to # their AM_CFLAGS (or other appropriate *_CFLAGS) to use them. AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[ AC_ARG_ENABLE(malloc0returnsnull, AS_HELP_STRING([--enable-malloc0returnsnull], [malloc(0) returns NULL (default: auto)]), [MALLOC_ZERO_RETURNS_NULL=$enableval], [MALLOC_ZERO_RETURNS_NULL=auto]) AC_MSG_CHECKING([whether malloc(0) returns NULL]) if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then AC_CACHE_VAL([xorg_cv_malloc0_returns_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([ #include ],[ char *m0, *r0, *c0, *p; m0 = malloc(0); p = malloc(10); r0 = realloc(p,0); c0 = calloc(0,10); exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1); ])], [xorg_cv_malloc0_returns_null=yes], [xorg_cv_malloc0_returns_null=no])]) MALLOC_ZERO_RETURNS_NULL=$xorg_cv_malloc0_returns_null fi AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" else MALLOC_ZERO_CFLAGS="" XMALLOC_ZERO_CFLAGS="" XTMALLOC_ZERO_CFLAGS="" fi AC_SUBST([MALLOC_ZERO_CFLAGS]) AC_SUBST([XMALLOC_ZERO_CFLAGS]) AC_SUBST([XTMALLOC_ZERO_CFLAGS]) ]) # XORG_CHECK_MALLOC_ZERO # XORG_WITH_LINT() # ---------------- # Minimum version: 1.1.0 # # This macro enables the use of a tool that flags some suspicious and # non-portable constructs (likely to be bugs) in C language source code. # It will attempt to locate the tool and use appropriate options. # There are various lint type tools on different platforms. # # Interface to module: # LINT: returns the path to the tool found on the platform # or the value set to LINT on the configure cmd line # also an Automake conditional # LINT_FLAGS: an Automake variable with appropriate flags # # --with-lint: 'yes' user instructs the module to use lint # 'no' user instructs the module not to use lint (default) # # If the user sets the value of LINT, AC_PATH_PROG skips testing the path. # If the user sets the value of LINT_FLAGS, they are used verbatim. # AC_DEFUN([XORG_WITH_LINT],[ AC_ARG_VAR([LINT], [Path to a lint-style command]) AC_ARG_VAR([LINT_FLAGS], [Flags for the lint-style command]) AC_ARG_WITH(lint, [AS_HELP_STRING([--with-lint], [Use a lint-style source code checker (default: disabled)])], [use_lint=$withval], [use_lint=no]) # Obtain platform specific info like program name and options # The lint program on FreeBSD and NetBSD is different from the one on Solaris case $host_os in *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*) lint_name=splint lint_options="-badflag" ;; *freebsd* | *netbsd*) lint_name=lint lint_options="-u -b" ;; *solaris*) lint_name=lint lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" ;; esac # Test for the presence of the program (either guessed by the code or spelled out by the user) if test "x$use_lint" = x"yes" ; then AC_PATH_PROG([LINT], [$lint_name]) if test "x$LINT" = "x"; then AC_MSG_ERROR([--with-lint=yes specified but lint-style tool not found in PATH]) fi elif test "x$use_lint" = x"no" ; then if test "x$LINT" != "x"; then AC_MSG_WARN([ignoring LINT environment variable since --with-lint=no was specified]) fi else AC_MSG_ERROR([--with-lint expects 'yes' or 'no'. Use LINT variable to specify path.]) fi # User supplied flags override default flags if test "x$LINT_FLAGS" != "x"; then lint_options=$LINT_FLAGS fi AC_SUBST([LINT_FLAGS],[$lint_options]) AM_CONDITIONAL(LINT, [test "x$LINT" != x]) ]) # XORG_WITH_LINT # XORG_LINT_LIBRARY(LIBNAME) # -------------------------- # Minimum version: 1.1.0 # # Sets up flags for building lint libraries for checking programs that call # functions in the library. # # Interface to module: # LINTLIB - Automake variable with the name of lint library file to make # MAKE_LINT_LIB - Automake conditional # # --enable-lint-library: - 'yes' user instructs the module to created a lint library # - 'no' user instructs the module not to create a lint library (default) AC_DEFUN([XORG_LINT_LIBRARY],[ AC_REQUIRE([XORG_WITH_LINT]) AC_ARG_ENABLE(lint-library, [AS_HELP_STRING([--enable-lint-library], [Create lint library (default: disabled)])], [make_lint_lib=$enableval], [make_lint_lib=no]) if test "x$make_lint_lib" = x"yes" ; then LINTLIB=llib-l$1.ln if test "x$LINT" = "x"; then AC_MSG_ERROR([Cannot make lint library without --with-lint]) fi elif test "x$make_lint_lib" != x"no" ; then AC_MSG_ERROR([--enable-lint-library expects 'yes' or 'no'.]) fi AC_SUBST(LINTLIB) AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno]) ]) # XORG_LINT_LIBRARY # XORG_COMPILER_BRAND # ------------------- # Minimum version: 1.14.0 # # Checks for various brands of compilers and sets flags as appropriate: # GNU gcc - relies on AC_PROG_CC (via AC_PROG_CC_C99) to set GCC to "yes" # GNU g++ - relies on AC_PROG_CXX to set GXX to "yes" # clang compiler - sets CLANGCC to "yes" # Intel compiler - sets INTELCC to "yes" # Sun/Oracle Solaris Studio cc - sets SUNCC to "yes" # AC_DEFUN([XORG_COMPILER_BRAND], [ AC_LANG_CASE( [C], [ AC_REQUIRE([AC_PROG_CC_C99]) ], [C++], [ AC_REQUIRE([AC_PROG_CXX]) ] ) AC_CHECK_DECL([__clang__], [CLANGCC="yes"], [CLANGCC="no"]) AC_CHECK_DECL([__INTEL_COMPILER], [INTELCC="yes"], [INTELCC="no"]) AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) ]) # XORG_COMPILER_BRAND # XORG_TESTSET_CFLAG(, , [, ...]) # --------------- # Minimum version: 1.16.0 # # Test if the compiler works when passed the given flag as a command line argument. # If it succeeds, the flag is appeneded to the given variable. If not, it tries the # next flag in the list until there are no more options. # # Note that this does not guarantee that the compiler supports the flag as some # compilers will simply ignore arguments that they do not understand, but we do # attempt to weed out false positives by using -Werror=unknown-warning-option and # -Werror=unused-command-line-argument # AC_DEFUN([XORG_TESTSET_CFLAG], [ m4_if([$#], 0, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])]) m4_if([$#], 1, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])]) AC_LANG_COMPILER_REQUIRE AC_LANG_CASE( [C], [ AC_REQUIRE([AC_PROG_CC_C99]) define([PREFIX], [C]) define([CACHE_PREFIX], [cc]) define([COMPILER], [$CC]) ], [C++], [ define([PREFIX], [CXX]) define([CACHE_PREFIX], [cxx]) define([COMPILER], [$CXX]) ] ) [xorg_testset_save_]PREFIX[FLAGS]="$PREFIX[FLAGS]" if test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "x" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unknown-warning-option], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option], AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=yes], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=no])) [xorg_testset_]CACHE_PREFIX[_unknown_warning_option]=$[xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option] PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" fi if test "x$[xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]" = "x" ; then if test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" fi PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument" AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unused-command-line-argument], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument], AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=yes], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=no])) [xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]=$[xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument] PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" fi found="no" m4_foreach([flag], m4_cdr($@), [ if test $found = "no" ; then if test "x$xorg_testset_]CACHE_PREFIX[_unknown_warning_option" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" fi if test "x$xorg_testset_]CACHE_PREFIX[_unused_command_line_argument" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument" fi PREFIX[FLAGS]="$PREFIX[FLAGS] ]flag[" dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname AC_MSG_CHECKING([if ]COMPILER[ supports ]flag[]) cacheid=AS_TR_SH([xorg_cv_]CACHE_PREFIX[_flag_]flag[]) AC_CACHE_VAL($cacheid, [AC_LINK_IFELSE([AC_LANG_PROGRAM([int i;])], [eval $cacheid=yes], [eval $cacheid=no])]) PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" eval supported=\$$cacheid AC_MSG_RESULT([$supported]) if test "$supported" = "yes" ; then $1="$$1 ]flag[" found="yes" fi fi ]) ]) # XORG_TESTSET_CFLAG # XORG_COMPILER_FLAGS # --------------- # Minimum version: 1.16.0 # # Defines BASE_CFLAGS or BASE_CXXFLAGS to contain a set of command line # arguments supported by the selected compiler which do NOT alter the generated # code. These arguments will cause the compiler to print various warnings # during compilation AND turn a conservative set of warnings into errors. # # The set of flags supported by BASE_CFLAGS and BASE_CXXFLAGS will grow in # future versions of util-macros as options are added to new compilers. # AC_DEFUN([XORG_COMPILER_FLAGS], [ AC_REQUIRE([XORG_COMPILER_BRAND]) AC_ARG_ENABLE(selective-werror, AS_HELP_STRING([--disable-selective-werror], [Turn off selective compiler errors. (default: enabled)]), [SELECTIVE_WERROR=$enableval], [SELECTIVE_WERROR=yes]) AC_LANG_CASE( [C], [ define([PREFIX], [C]) ], [C++], [ define([PREFIX], [CXX]) ] ) # -v is too short to test reliably with XORG_TESTSET_CFLAG if test "x$SUNCC" = "xyes"; then [BASE_]PREFIX[FLAGS]="-v" else [BASE_]PREFIX[FLAGS]="" fi # This chunk of warnings were those that existed in the legacy CWARNFLAGS XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wall]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-arith]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-declarations]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wformat=2], [-Wformat]) AC_LANG_CASE( [C], [ XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wstrict-prototypes]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-prototypes]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnested-externs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wbad-function-cast]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wold-style-definition], [-fd]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wdeclaration-after-statement]) ] ) # This chunk adds additional warnings that could catch undesired effects. XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wunused]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wuninitialized]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wshadow]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-noreturn]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-format-attribute]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wredundant-decls]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wlogical-op]) # These are currently disabled because they are noisy. They will be enabled # in the future once the codebase is sufficiently modernized to silence # them. For now, I don't want them to drown out the other warnings. # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual]) # Turn some warnings into errors, so we don't accidently get successful builds # when there are problems that should be fixed. if test "x$SELECTIVE_WERROR" = "xyes" ; then XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=implicit], [-errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=nonnull]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=init-self]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=main]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=missing-braces]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=sequence-point]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=return-type], [-errwarn=E_FUNC_HAS_NO_RETURN_STMT]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=trigraphs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=array-bounds]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=write-strings]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=address]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=int-to-pointer-cast], [-errwarn=E_BAD_PTR_INT_COMBINATION]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=pointer-to-int-cast]) # Also -errwarn=E_BAD_PTR_INT_COMBINATION else AC_MSG_WARN([You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wimplicit]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnonnull]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Winit-self]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmain]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-braces]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wsequence-point]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wreturn-type]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wtrigraphs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Warray-bounds]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wwrite-strings]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Waddress]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wint-to-pointer-cast]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-to-int-cast]) fi AC_SUBST([BASE_]PREFIX[FLAGS]) ]) # XORG_COMPILER_FLAGS # XORG_CWARNFLAGS # --------------- # Minimum version: 1.2.0 # Deprecated since: 1.16.0 (Use XORG_COMPILER_FLAGS instead) # # Defines CWARNFLAGS to enable C compiler warnings. # # This function is deprecated because it defines -fno-strict-aliasing # which alters the code generated by the compiler. If -fno-strict-aliasing # is needed, then it should be added explicitly in the module when # it is updated to use BASE_CFLAGS. # AC_DEFUN([XORG_CWARNFLAGS], [ AC_REQUIRE([XORG_COMPILER_FLAGS]) AC_REQUIRE([XORG_COMPILER_BRAND]) AC_LANG_CASE( [C], [ CWARNFLAGS="$BASE_CFLAGS" if test "x$GCC" = xyes ; then CWARNFLAGS="$CWARNFLAGS -fno-strict-aliasing" fi AC_SUBST(CWARNFLAGS) ] ) ]) # XORG_CWARNFLAGS # XORG_STRICT_OPTION # ----------------------- # Minimum version: 1.3.0 # # Add configure option to enable strict compilation flags, such as treating # warnings as fatal errors. # If --enable-strict-compilation is passed to configure, adds strict flags to # $BASE_CFLAGS or $BASE_CXXFLAGS and the deprecated $CWARNFLAGS. # # Starting in 1.14.0 also exports $STRICT_CFLAGS for use in other tests or # when strict compilation is unconditionally desired. AC_DEFUN([XORG_STRICT_OPTION], [ AC_REQUIRE([XORG_CWARNFLAGS]) AC_REQUIRE([XORG_COMPILER_FLAGS]) AC_ARG_ENABLE(strict-compilation, AS_HELP_STRING([--enable-strict-compilation], [Enable all warnings from compiler and make them errors (default: disabled)]), [STRICT_COMPILE=$enableval], [STRICT_COMPILE=no]) AC_LANG_CASE( [C], [ define([PREFIX], [C]) ], [C++], [ define([PREFIX], [CXX]) ] ) [STRICT_]PREFIX[FLAGS]="" XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-pedantic]) XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror], [-errwarn]) # Earlier versions of gcc (eg: 4.2) support -Werror=attributes, but do not # activate it with -Werror, so we add it here explicitly. XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror=attributes]) if test "x$STRICT_COMPILE" = "xyes"; then [BASE_]PREFIX[FLAGS]="$[BASE_]PREFIX[FLAGS] $[STRICT_]PREFIX[FLAGS]" AC_LANG_CASE([C], [CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"]) fi AC_SUBST([STRICT_]PREFIX[FLAGS]) AC_SUBST([BASE_]PREFIX[FLAGS]) AC_LANG_CASE([C], AC_SUBST([CWARNFLAGS])) ]) # XORG_STRICT_OPTION # XORG_DEFAULT_OPTIONS # -------------------- # Minimum version: 1.3.0 # # Defines default options for X.Org modules. # AC_DEFUN([XORG_DEFAULT_OPTIONS], [ AC_REQUIRE([AC_PROG_INSTALL]) XORG_COMPILER_FLAGS XORG_CWARNFLAGS XORG_STRICT_OPTION XORG_RELEASE_VERSION XORG_CHANGELOG XORG_INSTALL XORG_MANPAGE_SECTIONS m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])]) ]) # XORG_DEFAULT_OPTIONS # XORG_INSTALL() # ---------------- # Minimum version: 1.4.0 # # Defines the variable INSTALL_CMD as the command to copy # INSTALL from $prefix/share/util-macros. # AC_DEFUN([XORG_INSTALL], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ || (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" AC_SUBST([INSTALL_CMD]) ]) # XORG_INSTALL dnl Copyright 2005 Red Hat, Inc dnl dnl Permission to use, copy, modify, distribute, and sell this software and its dnl documentation for any purpose is hereby granted without fee, provided that dnl the above copyright notice appear in all copies and that both that dnl copyright notice and this permission notice appear in supporting dnl documentation. dnl dnl The above copyright notice and this permission notice shall be included dnl in all copies or substantial portions of the Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR dnl OTHER DEALINGS IN THE SOFTWARE. dnl dnl Except as contained in this notice, the name of the copyright holders shall dnl not be used in advertising or otherwise to promote the sale, use or dnl other dealings in this Software without prior written authorization dnl from the copyright holders. dnl # XORG_RELEASE_VERSION # -------------------- # Defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use. AC_DEFUN([XORG_RELEASE_VERSION],[ AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | cut -d . -f 1`], [Major version of this package]) PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` if test "x$PVM" = "x"; then PVM="0" fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR], [$PVM], [Minor version of this package]) PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` if test "x$PVP" = "x"; then PVP="0" fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_PATCHLEVEL], [$PVP], [Patch version of this package]) ]) # XORG_CHANGELOG() # ---------------- # Minimum version: 1.2.0 # # Defines the variable CHANGELOG_CMD as the command to generate # ChangeLog from git. # # AC_DEFUN([XORG_CHANGELOG], [ CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ || (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ echo 'git directory not found: installing possibly empty changelog.' >&2)" AC_SUBST([CHANGELOG_CMD]) ]) # XORG_CHANGELOG selective compiler errors. (default: enabled)]), [SELECTIVE_WERROR=$enableval], [SELECTIVE_WERROR=yes]) AC_LANG_CASE( [C], [ libXt-1.1.5/m4/ax_define_dir.m4000064401431060000012000000032521252061032400164200ustar00alancstaff00002660200006# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_define_dir.html # =========================================================================== # # SYNOPSIS # # AX_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) # # DESCRIPTION # # This macro sets VARNAME to the expansion of the DIR variable, taking # care of fixing up ${prefix} and such. # # VARNAME is then offered as both an output variable and a C preprocessor # symbol. # # Example: # # AX_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) # # LICENSE # # Copyright (c) 2008 Stepan Kasal # Copyright (c) 2008 Andreas Schwab # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2008 Alexandre Oliva # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AU_ALIAS([AC_DEFINE_DIR], [AX_DEFINE_DIR]) AC_DEFUN([AX_DEFINE_DIR], [ prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn dnl refers to ${prefix}. Thus we have to use `eval' twice. eval ax_define_dir="\"[$]$2\"" eval ax_define_dir="\"$ax_define_dir\"" AC_SUBST($1, "$ax_define_dir") AC_DEFINE_UNQUOTED($1, "$ax_define_dir", [$3]) test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE ]) libXt-1.1.5/compile000075501431060000012000000162451252061035000144410ustar00alancstaff00002660200006#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libXt-1.1.5/test/Converters.c000064401431060000012000000051361252061032400163360ustar00alancstaff00002660200006/* * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #include #include /* Test for Solaris bug 4163152 XtCvtIntToPixmap() gets a SIGBUS in 64-bit Fixed by libXt commit 16d9941f3aa38dde115cbff639e131761c1b36d0 */ static void test_XtCvtIntToPixmap(void) { Display *display = NULL; /* not actually used */ Boolean status; XrmValue args[2]; Cardinal num_args; XrmValue fromVal; XrmValue toVal; Pixmap res; XtPointer *closure_ret = NULL; int num[2]; XtToolkitInitialize(); num[0] = 7; num[1] = -1; num_args = 0; fromVal.addr = (XtPointer) num; fromVal.size = sizeof(int); toVal.addr = (XtPointer) &res; toVal.size = sizeof(Pixmap); status = XtCvtIntToPixmap(display, &args[0], &num_args, &fromVal, &toVal, closure_ret); g_assert(res == num[0]); num[0] = -1; num[1] = 7; num_args = 0; fromVal.addr = (XtPointer) (&num[1]); fromVal.size = sizeof(int); toVal.addr = (XtPointer) &res; toVal.size = sizeof(Pixmap); status = XtCvtIntToPixmap(display, &args[0], &num_args, &fromVal, &toVal, closure_ret); g_assert(res == num[1]); } int main(int argc, char** argv) { g_test_init(&argc, &argv, NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/Converters/XtCvtIntToPixmap", test_XtCvtIntToPixmap); return g_test_run(); } is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the follibXt-1.1.5/test/Event.c000064401431060000012000000053421252061032400152640ustar00alancstaff00002660200006/* * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include /* Test XtAppMainLoop without a display doesn't wait for an XEvent. Based on https://bugs.freedesktop.org/show_bug.cgi?id=34715 */ static void _Tick(XtPointer baton, XtIntervalId* id) { static int count = 0; XtAppContext app = (XtAppContext)baton; count ++; #ifdef DEBUG printf("%d beep!\n", count); #endif if (3 == count) XtAppSetExitFlag(app); else XtAppAddTimeOut(app, 1000, _Tick, app); } static sigjmp_buf jump_env; static void sigalrm (int sig) { siglongjmp(jump_env, 1); } static void test_XtAppMainLoop_34715(void) { XtAppContext app; struct sigaction sa; XtToolkitInitialize(); app = XtCreateApplicationContext(); XtAppAddTimeOut(app, 1000, _Tick, app); /* AppTimeouts should finish and exit in 3 seconds. Give them 10 seconds just in case system is busy, then fail. */ sa.sa_handler = sigalrm; sa.sa_flags = SA_RESTART; sigemptyset (&sa.sa_mask); if (sigsetjmp(jump_env, 1) == 0) { sigaction(SIGALRM, &sa, NULL); alarm(10); XtAppMainLoop(app); } else { g_assert(XtAppGetExitFlag(app) == TRUE); g_assert(0 /* timed out */); } g_assert(XtAppGetExitFlag(app) == TRUE); XtDestroyApplicationContext(app); } int main(int argc, char** argv) { g_test_init(&argc, &argv, NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/Event/XtAppMainLoop/34715", test_XtAppMainLoop_34715); return g_test_run(); } libXt-1.1.5/test/Alloc.c000064401431060000012000000116421252061032400152350ustar00alancstaff00002660200006/* * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #include #include #include #include static const char *program_name; /* Just a long string of characters to pull from */ const char test_chars[] = "|000 nul|001 soh|002 stx|003 etx|004 eot|005 enq|006 ack|007 bel|" "|010 bs |011 ht |012 nl |013 vt |014 np |015 cr |016 so |017 si |" "|020 dle|021 dc1|022 dc2|023 dc3|024 dc4|025 nak|026 syn|027 etb|" "|030 can|031 em |032 sub|033 esc|034 fs |035 gs |036 rs |037 us |" "|040 sp |041 ! |042 \" |043 # |044 $ |045 % |046 & |047 ' |" "|050 ( |051 ) |052 * |053 + |054 , |055 - |056 . |057 / |" "|060 0 |061 1 |062 2 |063 3 |064 4 |065 5 |066 6 |067 7 |" "|070 8 |071 9 |072 : |073 ; |074 < |075 = |076 > |077 ? |" "|100 @ |101 A |102 B |103 C |104 D |105 E |106 F |107 G |" "|110 H |111 I |112 J |113 K |114 L |115 M |116 N |117 O |" "|120 P |121 Q |122 R |123 S |124 T |125 U |126 V |127 W |" "|130 X |131 Y |132 Z |133 [ |134 \\ |135 ] |136 ^ |137 _ |" "|140 ` |141 a |142 b |143 c |144 d |145 e |146 f |147 g |" "|150 h |151 i |152 j |153 k |154 l |155 m |156 n |157 o |" "|160 p |161 q |162 r |163 s |164 t |165 u |166 v |167 w |" "|170 x |171 y |172 z |173 { |174 | |175 } |176 ~ |177 del|" "| 00 nul| 01 soh| 02 stx| 03 etx| 04 eot| 05 enq| 06 ack| 07 bel|" "| 08 bs | 09 ht | 0a nl | 0b vt | 0c np | 0d cr | 0e so | 0f si |" "| 10 dle| 11 dc1| 12 dc2| 13 dc3| 14 dc4| 15 nak| 16 syn| 17 etb|" "| 18 can| 19 em | 1a sub| 1b esc| 1c fs | 1d gs | 1e rs | 1f us |" "| 20 sp | 21 ! | 22 \" | 23 # | 24 $ | 25 % | 26 & | 27 ' |" "| 28 ( | 29 ) | 2a * | 2b + | 2c , | 2d - | 2e . | 2f / |" "| 30 0 | 31 1 | 32 2 | 33 3 | 34 4 | 35 5 | 36 6 | 37 7 |" "| 38 8 | 39 9 | 3a : | 3b ; | 3c < | 3d = | 3e > | 3f ? |" "| 40 @ | 41 A | 42 B | 43 C | 44 D | 45 E | 46 F | 47 G |" "| 48 H | 49 I | 4a J | 4b K | 4c L | 4d M | 4e N | 4f O |" "| 50 P | 51 Q | 52 R | 53 S | 54 T | 55 U | 56 V | 57 W |" "| 58 X | 59 Y | 5a Z | 5b [ | 5c \\ | 5d ] | 5e ^ | 5f _ |" "| 60 ` | 61 a | 62 b | 63 c | 64 d | 65 e | 66 f | 67 g |" "| 68 h | 69 i | 6a j | 6b k | 6c l | 6d m | 6e n | 6f o |" "| 70 p | 71 q | 72 r | 73 s | 74 t | 75 u | 76 v | 77 w |" "| 78 x | 79 y | 7a z | 7b { | 7c | | 7d } | 7e ~ | 7f del|"; /* Test a simple short string & int */ static void test_XtAsprintf_short(void) { char snbuf[1024]; char *asbuf; gint32 r = g_test_rand_int(); int snlen, aslen; snlen = snprintf(snbuf, sizeof(snbuf), "%s: %d\n", program_name, r); aslen = XtAsprintf(&asbuf, "%s: %d\n", program_name, r); g_assert(asbuf != NULL); g_assert(snlen == aslen); g_assert(strcmp(snbuf, asbuf) == 0); g_assert(asbuf[aslen] == '\0'); } /* Test a string long enough to be past the 256 character limit that makes XtAsprintf re-run snprintf after allocating memory */ static void test_XtAsprintf_long(void) { char *asbuf; int aslen; gint r1 = g_test_rand_int_range(0, 256); gint r2 = g_test_rand_int_range(1024, sizeof(test_chars) - r1); aslen = XtAsprintf(&asbuf, "%.*s", r2, test_chars + r1); g_assert(asbuf != NULL); g_assert(aslen == r2); g_assert(strncmp(asbuf, test_chars + r1, r2) == 0); g_assert(asbuf[aslen] == '\0'); } int main(int argc, char** argv) { program_name = argv[0]; g_test_init(&argc, &argv, NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/Alloc/XtAsprintf/short", test_XtAsprintf_short); g_test_add_func("/Alloc/XtAsprintf/long", test_XtAsprintf_long); return g_test_run(); } libXt-1.1.5/test/Makefile.am000064401431060000012000000005351252061032400160720ustar00alancstaff00002660200006if ENABLE_UNIT_TESTS if HAVE_GLIB check_PROGRAMS = Alloc Converters Event TESTS=$(check_PROGRAMS) AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(GLIB_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include LDADD= $(top_builddir)/src/libXt.la $(GLIB_LIBS) TESTS_ENVIRONMENT = $(MALLOC_DEBUG_ENV) endif HAVE_GLIB endif ENABLE_UNIT_TESTS libXt-1.1.5/test/Makefile.in000064401431060000012000001037131252061035100161050ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@check_PROGRAMS = \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ Alloc$(EXEEXT) \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ Converters$(EXEEXT) \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ Event$(EXEEXT) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = Alloc_SOURCES = Alloc.c Alloc_OBJECTS = Alloc.$(OBJEXT) Alloc_LDADD = $(LDADD) am__DEPENDENCIES_1 = @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@Alloc_DEPENDENCIES = $(top_builddir)/src/libXt.la \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = Converters_SOURCES = Converters.c Converters_OBJECTS = Converters.$(OBJEXT) Converters_LDADD = $(LDADD) @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@Converters_DEPENDENCIES = $(top_builddir)/src/libXt.la \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ $(am__DEPENDENCIES_1) Event_SOURCES = Event.c Event_OBJECTS = Event.$(OBJEXT) Event_LDADD = $(LDADD) @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@Event_DEPENDENCIES = $(top_builddir)/src/libXt.la \ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@ $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = Alloc.c Converters.c Event.c DIST_SOURCES = Alloc.c Converters.c Event.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@TESTS = $(check_PROGRAMS) @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(GLIB_CFLAGS) @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@LDADD = $(top_builddir)/src/libXt.la $(GLIB_LIBS) @ENABLE_UNIT_TESTS_TRUE@@HAVE_GLIB_TRUE@TESTS_ENVIRONMENT = $(MALLOC_DEBUG_ENV) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(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) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_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 Alloc$(EXEEXT): $(Alloc_OBJECTS) $(Alloc_DEPENDENCIES) $(EXTRA_Alloc_DEPENDENCIES) @rm -f Alloc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Alloc_OBJECTS) $(Alloc_LDADD) $(LIBS) Converters$(EXEEXT): $(Converters_OBJECTS) $(Converters_DEPENDENCIES) $(EXTRA_Converters_DEPENDENCIES) @rm -f Converters$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Converters_OBJECTS) $(Converters_LDADD) $(LIBS) Event$(EXEEXT): $(Event_OBJECTS) $(Event_DEPENDENCIES) $(EXTRA_Event_DEPENDENCIES) @rm -f Event$(EXEEXT) $(AM_V_CCLD)$(LINK) $(Event_OBJECTS) $(Event_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Alloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Converters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Event.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? Alloc.log: Alloc$(EXEEXT) @p='Alloc$(EXEEXT)'; \ b='Alloc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Converters.log: Converters$(EXEEXT) @p='Converters$(EXEEXT)'; \ b='Converters'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) Event.log: Event$(EXEEXT) @p='Event$(EXEEXT)'; \ b='Event'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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-checkPROGRAMS clean-generic 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-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: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am 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 \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: LOG): possible infinite" \ "recursion detectelibXt-1.1.5/man/XtSendSelectionRequest.man000064401431060000012000000001021252061032400207410ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateSelectionRequest.__libmansuffix__ libXt-1.1.5/man/XtAppAddWorkProc.man000064401431060000012000000057651252061032400174750ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-AddWork-Proc, XtRemove-Work-Proc wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddWorkProc __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddWorkProc, XtRemoveWorkProc \- Add and remove background processing procedures .SH SYNTAX .HP XtWorkProcId XtAppAddWorkProc(XtAppContext \fIapp_context\fP, XtWorkProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveWorkProc(XtWorkProcId \fIid\fP); .SH ARGUMENTS .ds Co that identifies the application .IP \fIapp_context\fP 1i Specifies the application context \*(Co. .ds Cd it is called .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIproc\fP 1i Specifies the procedure that is\*(Pr. .IP \fIid\fP 1i Specifies which work procedure to remove. .SH DESCRIPTION The .ZN XtAppAddWorkProc function adds the specified work procedure for the application identified by app_context. .LP The .ZN XtRemoveWorkProc function explicitly removes the specified background work procedure. .SH "SEE ALSO" XtAppNextEvent(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtVaAppInitialize.man000064401431060000012000000000711252061032400176670ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppInitialize.__libmansuffix__ libXt-1.1.5/man/XtVaCreateManagedWidget.man000064401431060000012000000000701252061032400207500ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateWidget.__libmansuffix__ libXt-1.1.5/man/XtMakeResizeRequest.man000064401431060000012000000000771252061032400202540ustar00alancstaff00002660200006.so man__libmansuffix__/XtMakeGeometryRequest.__libmansuffix__ libXt-1.1.5/man/XtGetErrorDatabase.man000064401431060000012000000062371252061032400200260ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Error-Database XtGet-Error-Database-Text wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetErrorDatabase __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtGetErrorDatabase, XtGetErrorDatabaseText \- obtain error database .SH SYNTAX .HP XrmDatabase *XtGetErrorDatabase(void); .HP void XtGetErrorDatabaseText(char *\fIname\fP, char *\fItype\fP, char *\fIclass\fP, char *\fIdefault\fP, char *\fIbuffer_return\fP, int \fInbytes\fP); .SH ARGUMENTS .IP \fIbuffer_return\fP 1i Specifies the buffer into which the error message is to be returned. .ds Cl \ of the error message .IP \fIclass\fP 1i Specifies the resource class\*(Cl. .IP \fIdefault\fP 1i Specifies the default message to use\*(Dm. .IP \fIname\fP 1i .br .ns .IP \fItype\fP 1i Specifies the name and type that are concatenated to form the resource name of the error message. .IP \fInbytes\fP 1i Specifies the size of the buffer in bytes. .SH DESCRIPTION The .ZN XtGetErrorDatabase function has been superceded by .ZN XtAppGetErrorDatabase . .LP The .ZN XtGetErrorDatabaseText function has been superceded by .ZN XtAppGetErrorDatabaseText . .SH "SEE ALSO" .BR XtAppGetErrorDatabase (__libmansuffix__) .BR XtAppGetErrorDatabaseText (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtUngrabButton.man000064401431060000012000000000631252061032400172510ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtParseAcceleratorTable.man000064401431060000012000000074161252061032400210370ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtParse-Accelerator-Table XtInstall-Accelerators XtInstall-All-Accelerators wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtParseAcceleratorTable __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtParseAcceleratorTable, XtInstallAccelerators, XtInstallAllAccelerators \- managing accelerator tables .SH SYNTAX .HP XtAccelerators XtParseAcceleratorTable(String \fIsource\fP); .HP void XtInstallAccelerators(Widget \fIdestination\fP, Widget \fIsource\fP); .HP void XtInstallAllAccelerators(Widget \fIdestination\fP, Widget \fIsource\fP); .SH ARGUMENTS .ds So to compile .IP \fIsource\fP 1i Specifies the accelerator table \*(So. .IP \fIdestination\fP 1i Specifies the widget on which the accelerators are to be installed. .ds Sr widget or the root widget of the widget tree .IP \fIsource\fP 1i Specifies the \*(Sr from which the accelerators are to come. .SH DESCRIPTION The .ZN XtParseAcceleratorTable function compiles the accelerator table into the opaque internal representation. .LP The .ZN XtInstallAccelerators function installs the accelerators from source onto destination by augmenting the destination translations with the source accelerators. If the source display_accelerator method is non-NULL, .ZN XtInstallAccelerators calls it with the source widget and a string representation of the accelerator table, which indicates that its accelerators have been installed and that it should display them appropriately. The string representation of the accelerator table is its canonical translation table representation. .LP The .ZN XtInstallAllAccelerators function recursively descends the widget tree rooted at source and installs the accelerators of each widget encountered onto destination. A common use os to call .ZN XtInstallAllAccelerators and pass the application main window as the source. .SH "SEE ALSO" XtParseTranslationTable(1) .br \fI\*(xT\fP .br \fI\*(xL\fP .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fRlibXt-1.1.5/man/XtGrabPointer.man000064401431060000012000000000631252061032400170530ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtSetTypeConverter.man000064401431060000012000000000771252061032400201310ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppSetTypeConverter.__libmansuffix__ libXt-1.1.5/man/XtAsprintf.man000064401431060000012000000000621252061032400164240ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtToolkitThreadInitialize.man000064401431060000012000000051661252061032400214470ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtToolkit-Thread-Initialize wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtToolkitThreadInitialize __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtToolkitThreadInitialize \- initialize the toolkit for multiple threads .SH SYNTAX .HP Boolean XtToolkitThreadInitialize(void); .SH DESCRIPTION If .ZN XtToolkitThreadInitialize was previously called, it returns. The application programmer must ensure that two or more threads do not simultaneously attempt to call .ZN XtToolkitThreadInitialize ; the effect of this is undefined. .ZN XtToolkitThreadInitialize returns .ZN True if the host operating system has threads and the Intrinsics are thread safe. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCalloc.man000064401431060000012000000000621252061032400160330ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtAddTimeOut.man000064401431060000012000000000641252061032400166370ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddInput.__libmansuffix__ libXt-1.1.5/man/XtCallConverter.man000064401431060000012000000000731252061032400174030ustar00alancstaff00002660200006.so man__libmansuffix__/XtConvertAndStore.__libmansuffix__ libXt-1.1.5/man/XtSetArg.man000064401431060000012000000075731252061032400160410ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Arg XtMerge-Arg-Lists wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetArg __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetArg, XtMergeArgLists \- set and merge ArgLists .SH SYNTAX .HP int XtSetArg(Arg \fIarg\fP, String \fIname\fP, XtArgVal \fIvalue\fP); .HP ArgList XtMergeArgLists(ArgList \fIargs1\fP, Cardinal \fInum_args1\fP, ArgList \fIargs2\fP, Cardinal \fInum_args2\fP); .SH ARGUMENTS .IP \fIarg\fP 1i Specifies the name-value pair to set. .IP \fIargs1\fP 1i Specifies the first .ZN ArgList . .IP \fIargs2\fP 1i Specifies the second .ZN ArgList . .IP \fInum_args1\fP 1i Specifies the number of arguments in the first argument list. .IP \fInum_args2\fP 1i Specifies the number of arguments in the second argument list. .IP \fIname\fP 1i Specifies the name of the resource. .IP \fIvalue\fP 1i Specifies the value of the resource if it will fit in an .ZN XtArgVal or the address. .SH DESCRIPTION The .ZN XtSetArg function is usually used in a highly stylized manner to minimize the probability of making a mistake; for example: .LP .Ds Arg args[20]; int n; n = 0; XtSetArg(args[n], XtNheight, 100); n++; XtSetArg(args[n], XtNwidth, 200); n++; XtSetValues(widget, args, n); .De .LP Alternatively, an application can statically declare the argument list and use .ZN XtNumber : .LP .Ds static Args args[] = { {XtNheight, (XtArgVal) 100}, {XtNwidth, (XtArgVal) 200}, }; XtSetValues(Widget, args, XtNumber(args)); .De .LP Note that you should not use auto-increment or auto-decrement within the first argument to .ZN XtSetArg . .ZN XtSetArg can be implemented as a macro that dereferences the first argument twice. .LP The .ZN XtMergeArgLists function allocates enough storage to hold the combined .ZN ArgList structures and copies them into it. Note that it does not check for duplicate entries. When it is no longer needed, free the returned storage by using .ZN XtFree . .SH "SEE ALSO" XtOffset(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtDestroyApplicationContext.man000064401431060000012000000001041252061032400220150ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateApplicationContext.__libmansuffix__ libXt-1.1.5/man/XtAppAddSignal.man000064401431060000012000000101051252061032400171240ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Signal wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddSignal __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddSignal, XtRemoveSignal, XtNoticeSignal \- register and remove a signal source .SH SYNTAX .HP XtSignalId XtAppAddSignal(XtAppContext \fIapp_context\fP, XtSignalCallbackProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveSignal(XtSignalId \fIid\fP); .HP void XtNoticeSignal(XtSignalId \fIid\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when a signal has been raised. .IP \fIid\fP 1i Specifies the ID returned from the corresponding .ZN XtAppAddSignal call. .IP \fIproc\fP 1i Specifies the procedure that is to be called when the signal has been raised. .SH DESCRIPTION The .ZN XtAppAddSignal function initiates a mechanism for handling signals within the context of the Intrinsics. Prior to establishing an operating system dependent signal handler the application may call .ZN XtAppAddSignal and store the returned \fIid\fP in a place accessible to the signal handler. .LP Upon receipt of a signal from the operating system, the application may call .ZN XtNoticeSignal passing the \fIid\fP returned by the call to .ZN XtAppAddSignal . .LP .ZN XtNoticeSignal is the only Intrinsics function that can safely be called from a signal handler. If .ZN XtNoticeSignal is called multiple times before the Intrinsics are able to invoke the registered callback, the callback is only called once. Logically the Intrinsics maintain ``pending'' for each registered callback. This flag is initially .ZN False and is set to .ZN True by .ZN XtNoticeSignal ; the Intrinsics invoke the callback whenever the flag is .ZN True , and the flag is set to .ZN False just before the callback is invoked. .LP The .ZN XtRemoveSignal function is called to remove the specified Intrinsics signal handler. The client should disable the source of the signal before calling .ZN XtRemoveSignal . .SH "SEE ALSO" XtAppAddTimeOut(__libmansuffix__),XtAppAddInput(__libmansuffix__),XtAppAddWorkProc(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Signal wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddSignal libXt-1.1.5/man/XtInsertEventHandler.man000064401431060000012000000000731252061032400204040ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddEventHandler.__libmansuffix__ libXt-1.1.5/man/XtAppErrorMsg.man000064401431060000012000000100431252061032400170370ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Error-Msg XtApp-Set-Error-Msg-Handler XtApp-Set-Warning-Msg-Handler XtApp-Warning-Msg wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppErrorMsg __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppErrorMsg, XtAppSetErrorMsgHandler, XtAppSetWarningMsgHandler, XtAppWarningMsg \- high-level error handlers .SH SYNTAX .HP void XtAppErrorMsg(XtAppContext \fIapp_context\fP, String \fIname\fP, String \fItype\fP, String \fIclass\fP, String \fIdefault\fP, String *\fIparams\fP, Cardinal *\fInum_params\fP); .HP void XtAppSetErrorMsgHandler(XtAppContext \fIapp_context\fP, XtErrorMsgHandler \fImsg_handler\fP); .HP void XtAppSetWarningMsgHandler(XtAppContext \fIapp_context\fP, XtErrorMsgHandler \fImsg_handler\fP); .HP void XtAppWarningMsg(XtAppContext \fIapp_context\fP, String \fIname\fP, String \fItype\fP, String \fIclass\fP, String \fIdefault\fP, String *\fIparams\fP, Cardinal *\fInum_params\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .ds Cl .IP \fIclass\fP 1i Specifies the resource class\*(Cl. .IP \fIdefault\fP 1i Specifies the default message to use\*(Dm. .IP \fIname\fP 1i Specifies the general kind of error. .IP \fItype\fP 1i Specifies the detailed name of the error. .ds Mh fatal error procedure, which should not return \ or the nonfatal error procedure, which usually returns .IP \fImsg_handler\fP 1i Specifies the new \*(Mh. .IP \fInum_params\fP 1i Specifies the number of values in the parameter list. .IP \fIparams\fP 1i Specifies a pointer to a list of values to be stored in the message. .SH DESCRIPTION The .ZN XtAppErrorMsg function calls the high-level error handler and passes the specified information. .LP The .ZN XtAppSetErrorMsgHandler function registers the specified procedure, which is called when a fatal error occurs. .LP The .ZN XtAppSetWarningMsgHandler function registers the specified procedure, which is called when a nonfatal error condition occurs. .LP The .ZN XtAppWarningMsg function calls the high-level error handler and passes the specified information. .SH "SEE ALSO" XtAppGetErrorDatabase(__libmansuffix__), XtAppError(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsShell.man000064401431060000012000000000611252061032400162000ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtSessionGetToken.man000064401431060000012000000054651252061032400177360ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSession-Get-Token XtSession-Return-Token wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSessionGetToken __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSessionGetToken, XtSessionReturnToken \- token management for checkpointing .SH SYNTAX .HP XtCheckpointToken XtSessionGetToken(Widget \fIw\fP, int \fItype\fP); .HP void XtSessionReturnToken(XtCheckpointToken \fItoken\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the session widget. .IP \fItype\fP 1i Specifies the value in the type field of the token. .IP \fItoken\fP 1i Specifies the token to be returned. .SH DESCRIPTION The .ZN XtSessionGetToken function will return NULL if the checkpoint operation instigated by the session manager is not currently under way. .LP To indicate the completion of a deferred save operation and to return the checkpoint token use .ZN XtSessionReturnToken . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtTranslateKeycode.man000064401431060000012000000000741252061032400201020ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetKeyTranslator.__libmansuffix__ libXt-1.1.5/man/XtAppSetErrorMsgHandler.man000064401431060000012000000000671252061032400210160ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtAddWorkProc.man000064401431060000012000000000641252061032400170170ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddInput.__libmansuffix__ libXt-1.1.5/man/XtCallbackExclusive.man000064401431060000012000000000611252061032400202210ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopup.__libmansuffix__ libXt-1.1.5/man/XtMergeArgLists.man000064401431060000012000000000621252061032400173460ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetArg.__libmansuffix__ libXt-1.1.5/man/XtIsWidget.man000064401431060000012000000000611252061032400163540ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtFree.man000064401431060000012000000000621252061032400155170ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtGetActionList.man000064401431060000012000000060371252061032400173570ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Action-List wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetActionList __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetActionList \- obtain class action list .SH SYNTAX .HP void XtGetActionList(WidgetClass \fIwidget_class\fP, XtActionList* \fIactions_return\fP, Cardinal* \fInum_actions_return\fP); .SH ARGUMENTS .IP \fIwidget_class\fP 1i Specifies the widget class whose actions are to be returned. .IP \fIactions_return\fP 1i Returns the action list. .IP \fInum_actions_return\fP 1i Returns the number of action procedures declared by the class. .SH DESCRIPTION .ZN XtGetActionList returns the action table defined by the specified widget class. This table does not include actions defined by the superclasses. If \fIwidget_class\fP is not initialized, or is not .ZN coreWidgetClass or a subclass thereof, or if the class does not define any actions, *\fIactions_return\fP will be NULL and *\fInum_actions_return\fP will be zero. If *\fIactions_return\fP is non-NULL the client is responsible for freeing the table using .ZN XtFree when it is no longer needed. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCancelSelectionRequest.man000064401431060000012000000001021252061032400212350ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateSelectionRequest.__libmansuffix__ libXt-1.1.5/man/XtAugmentTranslations.man000064401431060000012000000001011252061032400206320ustar00alancstaff00002660200006.so man__libmansuffix__/XtParseTranslationTable.__libmansuffix__ libXt-1.1.5/man/XtAddConverter.man000064401431060000012000000000731252061032400172200ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddConverter.__libmansuffix__ libXt-1.1.5/man/XtVaGetApplicationResources.man000064401431060000012000000001031252061032400217170ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetApplicationResources.__libmansuffix__ libXt-1.1.5/man/XtGetActionKeysym.man000064401431060000012000000062631252061032400177260ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Action-Keysym wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetActionKeysym __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetActionKeysym \- obtain corresponding keysym .SH SYNTAX .HP KeySym XtGetActionKeysym(XEvent* \fIevent\fP, Modifiers* \fImodifiers_return\fP); .SH ARGUMENTS .IP \fIevent\fP 1i Specifies the event pointer passed to the action procedure by the Intrinsics. .IP \fImodifiers_return\fP 1i Returns the modifiers that caused the match, if non-NULL. .SH DESCRIPTION If .ZN XtGetActionKeysym is called after an action procedure has been invoked by the Intrinsics and before that action procedure returns, and if the event pointer has the same value as the event pointer passed to that action routine, and if the event is a .ZN KeyPress or .ZN KeyRelease event, then .ZN XtGetActionKeysym returns the KeySym that matched the final event specification in the translation table and, if \fImodifiers_return\fP is non-NULL, the modifier state actually used to generate this KeySym; otherwise, if the event is a .ZN KeyPress or .ZN KeyRelease event, then .ZN XtGetActionKeysym calls .ZN XtTranslateKeycode and returns the results; else it returns .ZN NoSymbol and does not examine \fImodifiers_return\fP. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP " be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C LangulibXt-1.1.5/man/XtScreenOfObject.man000064401431060000012000000000631252061032400174720ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplay.__libmansuffix__ libXt-1.1.5/man/XtSetLanguageProc.man000064401431060000012000000102331252061032400176620ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Language-Proc wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetLanguageProc __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetLanguageProc \- set the language procedure .SH SYNTAX .HP Widget XtSetLanguageProc(XtAppContext \fIapp_context\fP, XtLanguageProc \fIproc\fP, XtPointer \fIclient_data\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context in which the language procedure is to be used, or NULL. .LP .IP \fIproc\fP 1i Specifies the language procedure, or NULL. .LP .IP \fIclient_data\fP 1i Specifies additional client data to be passed to the language procedure when it is called. .SH DESCRIPTION .ZN XtSetLanguageProc sets the language procedure that will be called from .ZN XtDisplayInitialize for all subsequent Displays initialized in the specified application context. If \fIapp_context\fP is NULL, the specified language procedure is registered in all application contexts created by the calling process, including any future application contexts that may be created. If \fIproc\fP is NULL a default language procedure is registered. .ZN XtSetLanguageProc returns the previously registered language procedure. If a language procedure has not yet been registered, the return value is unspecified but if this return value is used in a subsequent call to .ZN XtSetLanguageProc , it will cause the default language procedure to be registered. .LP The default language procedure does the following: .IP \(bu 5 Sets the locale according to the environment. On ANSI C-based systems this is done by calling .ZN setlocale ( .ZN LC_ALL , language ). If an error is encountered a warning message is issued with .ZN XtWarning . .IP \(bu 5 Calls .ZN XSupportsLocale to verify that the current locale is supported. If the locale is not supported, a warning message is issued with .ZN XtWarning and the locale is set to ``C''. .IP \(bu 5 Calls .ZN XSetLocaleModifiers specifying the empty string. .IP \(bu 5 Returns the value of the current locale. On ANSI C-based systems this is the return value from a final call to .ZN setlocale ( .ZN LC_ALL , NULL ). .LP A client wishing to use this mechanism to establish locale can do so by calling .ZN XtSetLanguageProc prior to .ZN XtDisplayInitialize. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRemoveCallbacks.man000064401431060000012000000000671252061032400177000ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddCallback.__libmansuffix__ libXt-1.1.5/man/XtAppAddInput.man000064401431060000012000000101321252061032400170060ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Input wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddInput __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddInput, XtRemoveInput \- register and remove an input source .SH SYNTAX .HP XtInputId XtAppAddInput(XtAppContext \fIapp_context\fP, int \fIsource\fP, XtPointer \fIcondition\fP, XtInputCallbackProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveInput(XtInputId \fIid\fP); .SH ARGUMENTS .ds Co that identifies the application .IP \fIapp_context\fP 1i Specifies the application context \*(Co. .ds Cd input is available .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIcondition\fP 1i Specifies the mask that indicates a read, write, or exception condition or some operating system dependent condition. .IP \fIid\fP 1i Specifies the ID returned from the corresponding .ZN XtAppAddInput call. .ds Pr \ to be called when input is available .IP \fIproc\fP 1i Specifies the procedure that is\*(Pr. .IP \fIsource\fP 1i Specifies the source file descriptor on a UNIX-based system or other operating system dependent device specification. .SH DESCRIPTION The .ZN XtAppAddInput function registers with the \*(xI read routine a new source of events, which is usually file input but can also be file output. Note that file should be loosely interpreted to mean any sink or source of data. .ZN XtAppAddInput also specifies the conditions under which the source can generate events. When input is pending on this source, the callback procedure is called. .LP The legal values for the condition argument are operating-system dependent. On a UNIX-based system, the condition is some union of .ZN XtInputReadMask , .ZN XtInputWriteMask , and .ZN XtInputExceptMask . The .ZN XtRemoveInput function causes the \*(xI read routine to stop watching for input from the input source. .SH "SEE ALSO" XtAppAddTimeOut(__libmansuffix__),XtAppAddSignal(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP .LP .SH "BUGS" In ANSI C it is necessary to cast the condition to an XtPointer, e.g.: .RS 4 .br XtAppAddInput(app_context, .RS 4 .br source, .br .B (XtPointer) (XtInputReadMask | XtInputWriteMask), .br proc, .br client_data); .RE libXt-1.1.5/man/XtQueryGeometry.man000064401431060000012000000065701252061032400174710ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtQuery-Geometry wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtQueryGeometry __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtQueryGeometry \- query the preferred geometry of a child widget .SH SYNTAX .HP XtGeometryResult XtQueryGeometry(Widget \fIw\fP\^, XtWidgetGeometry *\fIintended\fP, XtWidgetGeometry *\fIpreferred_return\fP\^); .SH ARGUMENTS .IP \fIintended\fP 1i Specifies any changes the parent plans to make to the child's geometry or NULL. .IP \fIpreferred_return\fP 1i Returns the child widget's preferred geometry. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION To discover a child's preferred geometry, the child's parent sets any changes that it intends to make to the child's geometry in the corresponding fields of the intended structure, sets the corresponding bits in intended.request_mode, and calls .ZN XtQueryGeometry . .LP .ZN XtQueryGeometry clears all bits in the preferred_return->request_mode and checks the query_geometry field of the specified widget's class record. If query_geometry is not NULL, .ZN XtQueryGeometry calls the query_geometry procedure and passes as arguments the specified widget, intended, and preferred_return structures. If the intended argument is NULL, .ZN XtQueryGeometry replaces it with a pointer to an .ZN XtWidgetGeometry structure with request_mode=0 before calling query_geometry. .SH "SEE ALSO" XtConfigureWidget(__libmansuffix__), XtMakeGeometryRequest(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRemoveBlockHook.man000064401431060000012000000000731252061032400176710ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddBlockHook.__libmansuffix__ libXt-1.1.5/man/XtError.man000064401431060000012000000062041252061032400157330ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtError XtSet-Error-Handler XtSet-Warning-Handler XtWarning wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtError __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtError, XtSetErrorHandler, XtSetWarningHandler, XtWarning \- low-level error handlers .SH SYNTAX .HP void XtError(String \fImessage\fP); .HP void XtSetErrorHandler(XtErrorHandler \fIhandler\fP): .HP void XtSetWarningHandler(XtErrorHandler \fIhandler\fP); .HP void XtWarning(String \fImessage\fP); .SH ARGUMENTS .IP \fImessage\fP 1i Specifies the nonfatal error message that is to be reported. .ds Ha fatal error procedure, which should not return, \ or the nonfatal error procedure, which usually returns .IP \fIhandler\fP 1i Specifies the new \*(Ha. .ds Me reported .IP \fImessage\fP 1i Specifies the message that is to be \*(Me. .SH DESCRIPTION The .ZN XtError function has been superceded by .ZN XtAppError . .LP The .ZN XtSetErrorHandler function has been superceded by .ZN XtAppSetErrorHandler . .LP The .ZN XtSetWarningHandler function has been superceded by .ZN XtAppSetWarningHandler . .LP The .ZN XtWarning function has been superceded by .ZN XtAppWarning . .SH "SEE ALSO" .BR XtAppError (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtProcessEvent.man000064401431060000012000000000651252061032400172610ustar00alancstaff00002660200006.so man__libmansuffix__/XtNextEvent.__libmansuffix__ libXt-1.1.5/man/XtGetSelectionValues.man000064401431060000012000000000751252061032400204070ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetSelectionValue.__libmansuffix__ libXt-1.1.5/man/XtNumber.man000064401431060000012000000000621252061032400160660ustar00alancstaff00002660200006.so man__libmansuffix__/XtOffset.__libmansuffix__ libXt-1.1.5/man/XtAppUnlock.man000064401431060000012000000000631252061032400165330ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppLock.__libmansuffix__ libXt-1.1.5/man/XtOwnSelection.man000064401431060000012000000132221252061032400172510ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtOwn-Selection XtOwn-Selection-Incremental XtDisown-Selection wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtOwnSelection __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtOwnSelection, XtOwnSelectionIncremental, XtDisownSelection \- set selection owner .SH SYNTAX .HP Boolean XtOwnSelection(Widget \fIw\fP, Atom \fIselection\fP, Time \fItime\fP, XtConvertSelectionProc \fIconvert_proc\fP, XtLoseSelectionProc \fIlose_selection\fP, XtSelectionDoneProc \fIdone_proc\fP); .HP Boolean XtOwnSelectionIncremental(Widget \fIw\fP, Atom \fIselection\fP, Time \fItime\fP, XtConvertSelectionIncrProc \fIconvert_callback\fP, XtLoseSelectionIncrProc \fIlose_callback\fP, XtSelectionDoneIncrProc \fIdone_callback\fP, XtCancelConvertSelectionProc \fIcancel_callback\fP, XtPointer \fIclient_data\fP); .HP void XtDisownSelection(Widget \fIw\fP, Atom \fIselection\fP, Time \fItime\fP); .SH ARGUMENTS .IP \fIconvert_proc\fP 1i Specifies the procedure that is to be called whenever someone requests the current value of the selection. .IP \fIdone_proc\fP 1i Specifies the procedure that is called after the requestor has received the selection or NULL if the owner is not interested in being called back. .IP \fIlose_selection\fP 1i Specifies the procedure that is to be called whenever the widget has lost selection ownership or NULL if the owner is not interested in being called back. .IP \fIselection\fP 1i Specifies an atom that describes the type of the selection (for example, .ZN XA_PRIMARY , .ZN XA_SECONDARY , or .ZN XA_CLIPBOARD ). .ds Ti ownership should commence or is to be relinquished .IP \fItime\fP 1i Specifies the timestamp that indicates when the selection \*(Ti. .ds Wi that wishes to become the owner or to relinquish ownership .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtOwnSelection function informs the \*(xI selection mechanism that a widget believes it owns a selection. It returns .ZN True if the widget has successfully become the owner and .ZN False otherwise. The widget may fail to become the owner if some other widget has asserted ownership at a time later than this widget. Note that widgets can lose selection ownership either because someone else asserted later ownership of the selection or because the widget voluntarily gave up ownership of the selection. Also note that the lose_selection procedure is not called if the widget fails to obtain selection ownership in the first place. .LP The .ZN XtOwnSelectionIncremental procedure informs the Intrinsics incremental selection mechanism that the specified widget wishes to own the selection. It returns .ZN True if the specified widget successfully becomes the selection owner or .ZN False otherwise. For more information about \fIselection\fP, \fItarget\fP, and \fItime\fP, see Section 2.6 of the \fIInter-Client Communication Conventions Manual\fP. .LP A widget that becomes the selection owner using .ZN XtOwnSelectionIncremental may use .ZN XtDisownSelection to relinquish selection ownership. .LP The .ZN XtDisownSelection function informs the \*(xI selection mechanism that the specified widget is to lose ownership of the selection. If the widget does not currently own the selection either because it lost the selection or because it never had the selection to begin with, .ZN XtDisownSelection does nothing. .LP After a widget has called .ZN XtDisownSelection , its convert procedure is not called even if a request arrives later with a timestamp during the period that this widget owned the selection. However, its done procedure will be called if a conversion that started before the call to .ZN XtDisownSelection finishes after the call to .ZN XtDisownSelection . .SH "SEE ALSO" XtAppGetSelectionTimeout(__libmansuffix__), XtGetSelectionValue(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP roc \fIcancel_callback\fP, XtPointer \fIclient_data\fP); .HP void XtDisownSelection(Widget \fIw\fP, Atom \fIselection\fP, Time \fItime\fP); .SH ARGUMENTS .IP \fIconvert_proc\fP 1i Specifies the procedure that is to be called whenever someone requests the current value of the selection. .IP \fIdone_proc\fP 1i Specifies the procedure that is called after the requestlibXt-1.1.5/man/XtGetKeyboardFocusWidget.man000064401431060000012000000054001252061032400212030ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Keyboard-Focus-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetKeyboardFocusWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetKeyboardFocusWidget \- extension event handling .SH SYNTAX .HP Widget XtGetKeyboardFocusWidget(Widget \fIwidget\fP); .SH ARGUMENTS .IP \fIwidget\fP 1i Specifies the widget for this event handler. Must be of class Core or any subclass thereof. .SH DESCRIPTION .ZN XtGetKeyboardFocusWidget function returns the widget that would be the end result of keyboard event forwarding for a keyboard event for the specified widget. .SH "SEE ALSO" XtInsertEventTypeHandler(__libmansuffix__), XtRemoveEventTypeHandler(__libmansuffix__), XtRegisterExtensionSelector(__libmansuffix__), XtSetEventDispatcher(__libmansuffix__), XtDispatchEventToWidget(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetClassExtension.man000064401431060000012000000067031252061032400202500ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Class-Extension wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetClassExtension __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetClassExtension \- locate a class extension record .SH SYNTAX .HP XtPointer XtGetClassExtension(WidgetClass \fIobject_class\fP, Cardinal \fIbyte_offset\fP, XrmQuark \fItype\fP, long \fIversion\fP, Cardinal \fIrecord_size\fP); .SH ARGUMENTS .IP \fIobject_class\fP 1i Specifies the widget class containing the extension list to be searched. .IP \fIbyte_offset\fP 1i Specifies the offset in bytes form the base of the widget class of the extension field to be searched. .IP \fItype\fP 1i Specifies the name of the class extension to be located. .IP \fIversion\fP 1i Specifies the minimum acceptable version of the class extension required for a match. .IP \fIrecord_size\fP 1i Specifies the minimum acceptable length of the class extension record required for match, or 0. .SH DESCRIPTION The list of extension records at the specified offset in the specified \fIwidget_class\fP will be searched for a match on the specified \fItype\fP, a version greater than or equal to the specified \fIversion\fP, and a record size greater than or equal the specified \fIrecord_size\fP if it is nonzero. .ZN XtGetClassExtension returns a pointer to a matching extension record or NULL if no match is found. The returned extension record is owned by the widget class and must not be modified or freed by the caller, except possibly to be modified by the widget class owner. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP ed to do so, subject to the following conditions: .\" .\" ThelibXt-1.1.5/man/XtRealloc.man000064401431060000012000000000621252061032400162170ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtVaCreateArgsList.man000064401431060000012000000057231252061032400200120ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtVa-Create-Args-List wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtVaCreateArgsList __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtVaCreateArgsList \- dynamically allocate a varargs list .SH SYNTAX .HP XtVarArgsList XtVaCreateArgsList(XtPointer \fIunused\fP, ...\^); .SH ARGUMENTS .IP \fIunused\fP 1i Must be specified as NULL. .IP \fI...\fP 1i Specifies a variable parameter list of resource name and value pairs. .SH DESCRIPTION The .ZN XtVaCreateArgsList function allocates memory and copies its arguments into a single list pointer, which may be used with .ZN XtVaNestedList . The end of both lists is identified by a \fIname\fP entry containing NULL. Any entries of type .ZN XtVaTypedArg are copied as specified without applying conversions. Data passed by reference (including Strings) are not copied, only the pointers themselves; the caller must ensure that the data remain valid for the lifetime of the created varargs list. The list should be freed using .ZN XtFree when no longer needed. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtScreenDatabase.man000064401431060000012000000000751252061032400175060ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplayInitialize.__libmansuffix__ libXt-1.1.5/man/XtVaSetValues.man000064401431060000012000000000651252061032400170430ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtWidgetToApplicationContext.man000064401431060000012000000001041252061032400221120ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateApplicationContext.__libmansuffix__ libXt-1.1.5/man/XtDisplayOfObject.man000064401431060000012000000000631252061032400176600ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplay.__libmansuffix__ libXt-1.1.5/man/XtIsSensitive.man000064401431060000012000000000701252061032400171020ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetSensitive.__libmansuffix__ libXt-1.1.5/man/XtVaGetSubresources.man000064401431060000012000000000731252061032400202530ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetSubresources.__libmansuffix__ libXt-1.1.5/man/XtOwnSelectionIncremental.man000064401431060000012000000000701252061032400214300ustar00alancstaff00002660200006.so man__libmansuffix__/XtOwnSelection.__libmansuffix__ libXt-1.1.5/man/XtAppSetExitFlag.man000064401431060000012000000051001252061032400174540ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Set-Exit-Flag XtApp-Get-Exit-Flag wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppSetExitFlag __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppSetExitFlag, XtAppGetExitFlag \- thread support functions .SH SYNTAX .HP void XtAppSetExitFlag(XtAppContext \fIapp_context\fP); .HP Boolean XtAppGetExitFlag(XtAppContext \fIapp_context\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .SH DESCRIPTION To indicate that an application context should exit, use .ZN XtAppSetExitFlag . .LP To test the exit status of an application context, use .ZN XtAppGetExitFlag . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAddEventHandler.man000064401431060000012000000142561252061032400176400ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAdd-Event-Handler XtAdd-Raw-Event-Handler XtRemove-Event-Handler XtRemove-Raw-Event-Handler XtInsert-Event-Handler XtInsert-Raw-Event-Handler wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddEventHandler __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAddEventHandler, XtAddRawEventHandler, XtRemoveEventHandler, XtRemoveRawEventHandler, XtInsertEventHandler, XtInsertRawEventHandler \- add and remove event handlers .SH SYNTAX .HP void XtAddEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtAddRawEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveRawEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtInsertEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP, XtListPosition \fIposition\fP); .HP void XtInsertRawEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP, XtListPosition \fIposition\fP); .HP typedef enum { XtListHead, XtListTail } XtListPosition; .SH ARGUMENTS .IP \fIclient_data\fP 1i Specifies additional data to be passed to the client's event handler. .ds Em to call or unregister this procedure .IP \fIevent_mask\fP 1i Specifies the event mask for which \*(Em. .ds Nm called or removed .IP \fInonmaskable\fP 1i Specifies a Boolean value that indicates whether this procedure should be \*(Nm on the nonmaskable events .Pn ( GraphicsExpose , .ZN NoExpose , .ZN SelectionClear , .ZN SelectionRequest , .ZN SelectionNotify , .ZN ClientMessage , and .ZN MappingNotify ). .ds Pr \ to be added or removed .IP \fIproc\fP 1i Specifies the procedure that is\*(Pr. .ds Wi for which this event handler is being registered .IP \fIw\fP 1i Specifies the widget \*(Wi. .IP \fIposition\fP 1i Specifies when the event handler is to be called relative to other previously registered handlers. .SH DESCRIPTION The .ZN XtAddEventHandler function registers a procedure with the dispatch mechanism that is to be called when an event that matches the mask occurs on the specified widget. If the procedure is already registered with the same client_data, the specified mask is ORed into the existing mask. If the widget is realized, .ZN XtAddEventHandler calls .ZN XSelectInput , if necessary. .LP The .ZN XtAddRawEventHandler function is similar to .ZN XtAddEventHandler except that it does not affect the widget's mask and never causes an .ZN XSelectInput for its events. Note that the widget might already have those mask bits set because of other nonraw event handlers registered on it. .LP The .ZN XtRemoveRawEventHandler function stops the specified procedure from receiving the specified events. Because the procedure is a raw event handler, this does not affect the widget's mask and never causes a call on .ZN XSelectInput . .LP .ZN XtInsertEventHandler is identical to .ZN XtAddEventHandler with the additional \fIposition\fP argument. if \fIposition\fP is .ZN XtListHead , the event handler is registered to that it will be called before any event handlers that were previously registered for the same widget. If \fIposition\fP is .ZN XtListTail , the event handler is registered to be called after any previously registered event handlers. If the procedure is already registered with the same \fIclient_data\fP value, the specified mask augments the existing mask and the procedure is repositioned in the list. .LP .ZN XtInsertRawEventHandler is similar to .ZN XtInsertEventHandler except that it does not modify the widget's event mask and never causes an .ZN XSelectInput for the specified events. If the procedure is already registered with the same \fIclient_data\fP value, the specified mask augments the existing mask and the procedure is repositioned in the list. .SH "SEE ALSO" XtAppNextEvent(__libmansuffix__), XtBuildEventMask(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP NS" .SH NAME XtAddEventHandler, XtAddRawEventHandler, XtRemoveEventHandler, XtRemoveRawEventHandler, XtInsertEventHandler, XtInsertRawEventHandler \- add and remove event handlers .SH SYNTAX .HP void XtAddEventHandler(Widget \fIw\fP, EventMask \fIevent_mask\fP, Boolean \fInonmaskable\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_dalibXt-1.1.5/man/XtPending.man000064401431060000012000000000651252061032400162250ustar00alancstaff00002660200006.so man__libmansuffix__/XtNextEvent.__libmansuffix__ libXt-1.1.5/man/XtRemoveGrab.man000064401431060000012000000000631252061032400166700ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddGrab.__libmansuffix__ libXt-1.1.5/man/XtAddExposureToRegion.man000064401431060000012000000055531252061032400205420ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAdd-Exposure-To-Region wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddExposureToRegion __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAddExposureToRegion \- merge exposure events into a region .SH SYNTAX .HP void XtAddExposureToRegion(XEvent *\fIevent\fP, Region \fIregion\fP); .SH ARGUMENTS .IP \fIevent\fP 1i Specifies a pointer to the .ZN Expose or .ZN GraphicsExpose event. .IP \fIregion\fP 1i Specifies the region object (as defined in .Pn < X11/Xutil.h >). .SH DESCRIPTION The .ZN XtAddExposureToRegion function computes the union of the rectangle defined by the exposure event and the specified region. Then, it stores the results back in region. If the event argument is not an .ZN Expose or .ZN GraphicsExpose event, .ZN XtAddExposureToRegion returns without an error and without modifying region. .LP This function is used by the exposure compression mechanism (see Section 7.9.3). .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetSelectionValue.man000064401431060000012000000110271252061032400202230ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Selection-Value XtGet-Selection-Values wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSelectionValue __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetSelectionValue, XtGetSelectionValues \- obtain selection values .SH SYNTAX .HP void XtGetSelectionValue(Widget \fIw\fP, Atom \fIselection\fP, Atom \fItarget\fP, XtSelectionCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP, Time \fItime\fP); .HP void XtGetSelectionValues(Widget \fIw\fP, Atom \fIselection\fP, Atom *\fItargets\fP, int \fIcount\fP, XtSelectionCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP, Time \fItime\fP); .SH ARGUMENTS .ds Cb \ that is to be called when the selection value has been obtained .IP \fIcallback\fP 1i Specifies the callback procedure\*(Cb. .ds Cd it is called .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIclient_data\fP 1i Specifies the client data (one for each target type) that is passed to the callback procedure when it is called for that target. .IP \fIcount\fP 1i Specifies the length of the targets and client_data lists. .IP \fIselection\fP 1i Specifies the particular selection desired (that is, primary or secondary). .IP \fItarget\fP 1i Specifies the type of the information that is needed about the selection. .IP \fItargets\fP 1i Specifies the types of information that is needed about the selection. .ds Ti value is desired .IP \fItime\fP 1i Specifies the timestamp that indicates when the selection \*(Ti. .ds Wi that is making the request .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtGetSelectionValue function requests the value of the selection that has been converted to the target type. The specified callback will be called some time after .ZN XtGetSelectionValue is called; in fact, it may be called before or after .ZN XtGetSelectionValue returns. .LP The .ZN XtGetSelectionValues function is similar to .ZN XtGetSelectionValue except that it takes a list of target types and a list of client data and obtains the current value of the selection converted to each of the targets. The effect is as if each target were specified in a separate call to .ZN XtGetSelectionValue . The callback is called once with the corresponding client data for each target. .ZN XtGetSelectionValues does guarantee that all the conversions will use the same selection value because the ownership of the selection cannot change in the middle of the list, as would be when calling .ZN XtGetSelectionValue repeatedly. .SH "SEE ALSO" XtAppGetSelectionTimeout(__libmansuffix__), XtOwnSelection(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsTransientShell.man000064401431060000012000000000611252061032400200700ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtRegisterExtensionSelector.man000064401431060000012000000001021252061032400220130ustar00alancstaff00002660200006.so man__libmansuffix__/XtInsertEventTypeHandler.__libmansuffix__ libXt-1.1.5/man/XtResizeWidget.man000064401431060000012000000000731252061032400172450ustar00alancstaff00002660200006.so man__libmansuffix__/XtConfigureWidget.__libmansuffix__ libXt-1.1.5/man/XtSetKeyTranslator.man000064401431060000012000000114421252061032400201200ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Key-Translator XtTranslate-Keycode XtRegister-Case-Converter XtConvert-Case wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetKeyTranslator __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetKeyTranslator, XtTranslateKeycode, XtRegisterCaseConverter, XtConvertCase \- convert KeySym to KeyCodes .SH SYNTAX .HP void XtSetKeyTranslator(Display *\fIdisplay\fP, XtKeyProc \fIproc\fP); .HP void XtTranslateKeycode(Display *\fIdisplay\fP, KeyCode \fIkeycode\fP, Modifiers \fImodifiers\fP, Modifiers *\fImodifiers_return\fP, KeySym *\fIkeysym_return\fP); .HP void XtRegisterCaseConverter(Display *\fIdisplay\fP, XtCaseProc \fIproc\fP, KeySym \fIstart\fP, KeySym \fIstop\fP); .HP void XtConvertCase(Display *\fIdisplay\fP, KeySym \fIkeysym\fP, KeySym *\fIlower_return\fP, KeySym *\fIupper_return\fP); .SH ARGUMENTS .ds Di .IP \fIdisplay\fP 1i Specifies the display\*(Di. .IP \fIkeycode\fP 1i Specifies the KeyCode to translate. .IP \fIkeysym\fP 1i Specifies the KeySym to convert. .IP \fIkeysym_return\fP 1i Returns the resulting KeySym. .IP \fIlower_return\fP 1i Returns the lowercase equivalent of the KeySym. .IP \fIupper_return\fP 1i Returns the uppercase equivalent of the KeySym. .IP \fImodifiers\fP 1i Specifies the modifiers to the KeyCode. .IP \fImodifiers_return\fP 1i Returns a mask that indicates the modifiers actually used to generate the KeySym. .ds Pr \ to perform key translations or conversions .IP \fIproc\fP 1i Specifies the procedure that is\*(Pr. .IP \fIstart\fP 1i Specifies the first KeySym for which this converter is valid. .IP \fIstop\fP 1i Specifies the last KeySym for which this converter is valid. .SH DESCRIPTION The .ZN XtSetKeyTranslator function sets the specified procedure as the current key translator. The default translator is .ZN XtTranslateKey , an .ZN XtKeyProc that uses Shift and Lock modifiers with the interpretations defined by the core protocol. It is provided so that new translators can call it to get default KeyCode-to-KeySym translations and so that the default translator can be reinstalled. .LP The .ZN XtTranslateKeycode function passes the specified arguments directly to the currently registered KeyCode to KeySym translator. .LP The .ZN XtRegisterCaseConverter registers the specified case converter. The start and stop arguments provide the inclusive range of KeySyms for which this converter is to be called. The new converter overrides any previous converters for KeySyms in that range. No interface exists to remove converters; you need to register an identity converter. When a new converter is registered, the \*(xI refreshes the keyboard state if necessary. The default converter understands case conversion for all KeySyms defined in the core protocol. .LP The .ZN XtConvertCase function calls the appropriate converter and returns the results. A user-supplied .ZN XtKeyProc may need to use this function. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP . .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$libXt-1.1.5/man/XtReleaseGC.man000064401431060000012000000000611252061032400164270ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetGC.__libmansuffix__ libXt-1.1.5/man/XtGetSelectionValueIncremental.man000064401431060000012000000122171252061032400224070ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Selection-Value-Incremental XtGet-Selection-Values-Incremental wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSelectionValueIncremental __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetSelectionValueIncremental, XtGetSelectionValuesIncremental \- obtain selection values .SH SYNTAX .HP void XtGetSelectionValueIncremental(Widget \fIw\fP, Atom \fIselection\fP, Atom \fItarget\fP, XtSelectionCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP, Time \fItime\fP); .HP void XtGetSelectionValuesIncremental(Widget \fIw\fP, Atom \fIselection\fP, Atom *\fItargets\fP, int \fIcount\fP, XtSelectionCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP, Time \fItime\fP); .SH ARGUMENTS .ds Cb \ that is to be called when the selection value has been obtained .IP \fIcallback\fP 1i Specifies the callback procedure\*(Cb. .ds Cd it is called .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIclient_data\fP 1i Specifies the client data (one for each target type) that is passed to the callback procedure when it is called for that target. .IP \fIcount\fP 1i Specifies the length of the targets and client_data lists. .IP \fIselection\fP 1i Specifies the particular selection desired (that is, primary or secondary). .IP \fItarget\fP 1i Specifies the type of the information that is needed about the selection. .IP \fItargets\fP 1i Specifies the types of information that is needed about the selection. .ds Ti value is desired .IP \fItime\fP 1i Specifies the timestamp that indicates when the selection \*(Ti. .ds Wi that is making the request .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtGetSelectionValueIncremental function is similar to .ZN XtGetSelectionValue except that the \fIselection_callback\fP procedure will be called repeatedly upon delivery of multiple segments of the selection value. The end of the selection value is indicated when \fIselection_callback\fP is called with a non-NULL value of length zero, which must still be freed by the client. If the transfer of the selection is aborted in the middle of a transfer (for example, because to timeout), the \fIselection_callback\fP procedure is called with a type value equal to the symbolic constant .ZN XT_CONVERT_FAIL so that the requestor can dispose of the partial selection value it has collected up until that point. Upon receiving .ZN XT_CONVERT_FAIL , the requesting client must determine for itself whether or not a partially completed transfer is meaningful. .LP The .ZN XtGetSelectionValuesIncremental function is similar to .ZN XtGetSelectionValueIncremental except that it takes a list of target types and a list of client data and obtains the current value of the selection converted to each of the targets. The effect is as if each target were specified in a separate call to .ZN XtGetSelectionValueIncremental . The callback is called once with the corresponding client data for each target. .ZN XtGetSelectionValuesIncremental does guarantee that all the conversions will use the same selection value because the ownership of the selection cannot change in the middle of the list, as would be when calling .ZN XtGetSelectionValueIncremental repeatedly. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetSubresources.man000064401431060000012000000076161252061032400177760ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Subresources XtVa-Get-Subresources wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSubresources __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetSubresources, XtVaGetSubresources \- obtain subresources .SH SYNTAX .HP void XtGetSubresources(Widget \fIw\fP, XtPointer \fIbase\fP, String \fIname\fP, String \fIclass\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaGetSubresources(Widget \fIw\fP, XtPointer \fIbase\fP, String \fIname\fP, String \fIclass\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP); .SH ARGUMENTS .ds Al to override resources obtained from the resource database .IP \fIargs\fP 1i Specifies the argument list \*(Al. .ds Ba written .IP \fIbase\fP 1i Specifies the base address of the subpart data structure where the resources should be \*(Ba. .IP \fIclass\fP 1i Specifies the class of the subpart. .IP \fIname\fP 1i Specifies the name of the subpart. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fInum_resources\fP 1i Specifies the number of resources in the resource list. .IP \fIresources\fP 1i Specifies the resource list for the subpart. .ds Wi that wants resources for a subpart \ or that identifies the resource database to search .IP \fIw\fP 1i Specifies the widget \*(Wi. .IP \fI...\fP 1i Specifies the variable arguments \*(Al. .SH DESCRIPTION The .ZN XtGetSubresources function constructs a name/class list from the application name/class, the name/classes of all its ancestors, and the widget itself. Then, it appends to this list the name/class pair passed in. The resources are fetched from the argument list, the resource database, or the default values in the resource list. Then, they are copied into the subpart record. If args is NULL, num_args must be zero. However, if num_args is zero, the argument list is not referenced. .SH "SEE ALSO" XtGetApplicationResources, XtVaGetApplicationResources .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppGetErrorDatabaseText.man000064401431060000012000000000771252061032400213300ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppGetErrorDatabase.__libmansuffix__ libXt-1.1.5/man/XtIsManaged.man000064401431060000012000000000721252061032400164670ustar00alancstaff00002660200006.so man__libmansuffix__/XtManageChildren.__libmansuffix__ libXt-1.1.5/man/XtCreateManagedWidget.man000064401431060000012000000000701252061032400204610ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateWidget.__libmansuffix__ libXt-1.1.5/man/XtDestroyWidget.man000064401431060000012000000000701252061032400174320ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateWidget.__libmansuffix__ libXt-1.1.5/man/XtToolkitInitialize.man000064401431060000012000000001041252061032400203020ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateApplicationContext.__libmansuffix__ libXt-1.1.5/man/XtIsComposite.man000064401431060000012000000000611252061032400170730ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtAppInitialize.man000064401431060000012000000117261252061032400174110ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Initialize XtVa-App-Initialize .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppInitialize __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppInitialize, XtVaAppInitialize \- initialize, open, or close a display .SH SYNTAX .HP Widget XtAppInitialize(XtAppContext* \fIapp_context_return\fP, String \fIapplication_class\fP, XrmOptionDescRec* \fIoptions\fP, Cardinal \fInum_options\fP, int* \fIargc_in_out\fP, String* \fIargv_in_out\fP, String* \fIfallback_resources\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaAppInitialize(XtAppContext* \fIapp_context_return\fP, String \fIapplication_class\fP, XrmOptionDescRec* \fIoptions\fP, Cardinal \fInum_options\fP, int* \fIargc_in_out\fP, String* \fIargv_in_out\fP, String* \fIfallback_resources\fP, ...\^); .SH ARGUMENTS .IP \fIapp_context_return\fP 1i Specifies the application context. .ds Ac , which usually is the generic name for all instances of this application .IP \fIapplication_class\fP 1i Specifies the class name of this application\*(Ac. .IP \fIoptions\fP 1i Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to .ZN XrmParseCommand . For further information, see \fI\*(xL\fP. .IP \fInum_options\fP 1i Specifies the number of entries in the options list. .IP \fIargc_in_out\fP 1i Specifies a pointer to the number of command line parameters. .IP \fIargv_in_out\fP 1i Specifies the command line parameters. .IP \fIfallback_resources\fP 1i Specifies resource values to be used if the application class resource file cannot be opened or read, or NULL. .IP \fIargs\fP 1i Specifies the argument list to override any other resource specification for the created shell widget. .IP \fInum_args\fP 1i Specifies the number of entries in the argument list. .IP \fI...\fP 1i Specifies the variable argument list to override any other resource specification for the created shell widget. .SH DESCRIPTION The .ZN XtAppInitialize function calls .ZN XtToolkitInitialize followed by .ZN XtCreateApplicationContext , then calls .ZN XtOpenDisplay with \fIdisplay_string\fP NULL and \fIapplication_name\fP NULL, and finally calls .ZN XtAppCreateShell with \fIapplication_name\fP NULL, \fIwidget_class\fP .ZN applicationShellWidgetClass , and the specified \fIargs\fP and \fInum_args\fP and returns the created shell. The modified \fIargc\fP and \fIargv\fP returned by .ZN XtDisplayInitialize are returned in \fIargc_in_out\fP and \fIargv_in_out\fP. If \fIapp_context_return\fP is not NULL, the created application context is also returned. If the display specified by the command line cannot be opened, an error message is issued and .ZN XtAppInitialize terminates the application. If \fIfallback_resources\fP is non-NULL, .ZN XtAppSetFallbackResources is called with the value prior to calling .ZN XtOpenDisplay . .LP XtAppInitialize and XtVaAppInitialize have been superceded by .ZN XtOpenApplication and .ZN XtVaOpenApplication respectively. .SH "SEE ALSO" XtOpenApplication(__libmansuffix__), XtVaOpenApplication(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtConvertCase.man000064401431060000012000000000741252061032400170550ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetKeyTranslator.__libmansuffix__ libXt-1.1.5/man/XtSetKeyboardFocus.man000064401431060000012000000075371252061032400200700ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Keyboard-Focus wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetKeyboardFocus __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetKeyboardFocus \- focus events on a child widget .SH SYNTAX .HP XtSetKeyboardFocus(Widget \fIsubtree\fP, Widget \fIdescendant\fP); .SH ARGUMENTS .IP \fIsubtree\fP 1i Specifies either the widget in the subtree structure which is to receive the keyboard event, or .ZN None . Note that it is not an error to specify .ZN None when no input focus was previously set. .ds Wi for which the keyboard focus is to be set .IP \fIdescendant\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION If a future .ZN KeyPress or .ZN KeyRelease event occurs within the specified subtree, .ZN XtSetKeyboardFocus causes .ZN XtDispatchEvent to remap and send the event to the specified descendant widget. .LP When there is no modal cascade, keyboard events can occur within a widget W in one of three ways: .IP \(bu 5 W has the X input focus. .IP \(bu 5 W has the keyboard focus of one of its ancestors, and the event occurs within the ancestor or one of the ancestor's descendants. .IP \(bu 5 No ancestor of W has a descendant within the keyboard focus, and the pointer is within W. .LP When there is a modal cascade, a widget W receives keyboard events if an ancestor of W is in the active subset of the modal cascade and one or more of the previous conditions is .ZN True . .LP When subtree or one of its descendants acquires the X input focus or the pointer moves into the subtree such that keyboard events would now be delivered to subtree, a .ZN FocusIn event is generated for the descendant if .ZN FocusNotify events have been selected by the descendant. Similarly, when W loses the X input focus or the keyboard focus for one of its ancestors, a .ZN FocusOut event is generated for descendant if .ZN FocusNotify events have been selected by the descendant. .SH "SEE ALSO" XtCallAcceptFocus(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP nd/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtNewString.man000064401431060000012000000000621252061032400165560ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtName.man000064401431060000012000000044051252061032400155230ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtName __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtName \- obtain widget's name .SH SYNTAX .HP String XtName(Widget \fIw\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION .ZN XtName returns the widget's name. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppSetErrorHandler.man000064401431060000012000000000641252061032400203440ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppError.__libmansuffix__ libXt-1.1.5/man/XtSetValues.man000064401431060000012000000166521252061032400165650ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Values XtVa-Set-Values XtSet-Subvalues XtVa-Set-Subvalues XtGet-Values XtVa-Get-Values XtGet-Subvalues XtVa-Get-Subvalues constraint-Widget-Class wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetValues __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetValues, XtVaSetValues, XtSetSubvalues, XtVaSetSubvalues, XtGetValues, XtVaGetValues, XtGetSubvalues, XtVaGetSubvalues \- obtain and set widget resources .SH SYNTAX .HP void XtSetValues(Widget \fIw\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaSetValues(Widget \fIw\fP, ...\^); .HP void XtSetSubvalues(XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaSetSubvalues(XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ...\^); .HP void XtGetValues(Widget \fIw\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaGetValues(Widget \fIw\fP, ...\^); .HP void XtGetSubvalues(XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaGetSubvalues(XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ...\^); .SH ARGUMENTS .ds Al of name/address pairs that contain the resource name \ and either the address into which the resource value is to be stored \ or their new values .IP \fIargs\fP 1i Specifies the argument list \*(Al. .ds Ba retrieved or written .IP \fIbase\fP 1i Specifies the base address of the subpart data structure where the resources should be \*(Ba. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fIresources\fP 1i Specifies the nonwidget resource list or values. .IP \fInum_resources\fP 1i Specifies the number of resources in the resource list. .IP \fIw\fP 1i Specifies the widget. .IP \fI...\fP 1i Specifies the variable argument list \*(Al. .SH DESCRIPTION The .ZN XtSetValues function starts with the resources specified for the .ZN Core widget fields and proceeds down the subclass chain to the widget. At each stage, it writes the new value (if specified by one of the arguments) or the existing value (if no new value is specified) to a new widget data record. .ZN XtSetValues then calls the set_values procedures for the widget in superclass-to-subclass order. .IN "hook" If the widget has any non-NULL set_values_hook fields, these are called immediately after the corresponding set_values procedure. This procedure permits subclasses to set nonwidget data for .ZN XtSetValues . .LP If the widget's parent is a subclass of .ZN constraintWidgetClass , .ZN XtSetValues also updates the widget's constraints. It starts with the constraint resources specified for .ZN constraintWidgetClass and proceeds down the subclass chain to the parent's class. At each stage, it writes the new value or the existing value to a new constraint record. It then calls the constraint set_values procedures from .ZN constraintWidgetClass down to the parent's class. The constraint set_values procedures are called with widget arguments, as for all set_values procedures, not just the constraint record arguments, so that they can make adjustments to the desired values based on full information about the widget. .LP .ZN XtSetValues determines if a geometry request is needed by comparing the current widget to the new widget. If any geometry changes are required, it makes the request, and the geometry manager returns .ZN XtGeometryYes , .ZN XtGeometryAlmost , or .ZN XtGeometryNo . If .ZN XtGeometryYes , .ZN XtSetValues calls the widget's resize procedure. If .ZN XtGeometryNo , .ZN XtSetValues resets the geometry fields to their original values. If .ZN XtGeometryAlmost , .ZN XtSetValues calls the set_values_almost procedure, which determines what should be done and writes new values for the geometry fields into the new widget. .ZN XtSetValues then repeats this process, deciding once more whether the geometry manager should be called. .LP Finally, if any of the set_values procedures returned .ZN True , .ZN XtSetValues causes the widget's expose procedure to be invoked by calling the Xlib .ZN XClearArea function on the widget's window. .LP The .ZN XtSetSubvalues function stores resources into the structure identified by base. .LP The .ZN XtGetValues function starts with the resources specified for the core widget fields and proceeds down the subclass chain to the widget. The value field of a passed argument list should contain the address into which to store the corresponding resource value. It is the caller's responsibility to allocate and deallocate this storage according to the size of the resource representation type used within the widget. .LP If the widget's parent is a subclass of .ZN constraintWidgetClass , .ZN XtGetValues then fetches the values for any constraint resources requested. It starts with the constraint resources specified for .ZN constraintWidgetClass and proceeds down to the subclass chain to the parent's constraint resources. If the argument list contains a resource name that is not found in any of the resource lists searched, the value at the corresponding address is not modified. .IN "hook" Finally, if the get_values_hook procedures are non-NULL, they are called in superclass-to-subclass order after all the resource values have been fetched by .ZN XtGetValues . This permits a subclass to provide nonwidget resource data to .ZN XtGetValues . .LP The .ZN XtGetSubvalues function obtains resource values from the structure identified by base. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP ress of the subpart data structure where the resources should be \*(Ba. .IP \fInum_arglibXt-1.1.5/man/XtCallbackNonexclusive.man000064401431060000012000000000611252061032400207340ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopup.__libmansuffix__ libXt-1.1.5/man/XtAddGrab.man000064401431060000012000000104141252061032400161240ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAdd-Grab wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddGrab __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAddGrab, XtRemoveGrab \- redirect user input to a modal widget .SH SYNTAX .HP void XtAddGrab(Widget \fIw\fP, Boolean \fIexclusive\fP, Boolean \fIspring_loaded\fP); .HP void XtRemoveGrab(Widget \fIw\fP); .SH ARGUMENTS .IP \fIexclusive\fP 1i Specifies whether user events should be dispatched exclusively to this widget or also to previous widgets in the cascade. .IP \fIspring_loaded\fP 1i Specifies whether this widget was popped up because the user pressed a pointer button. .ds Wi to add to or remove from the modal cascade .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtAddGrab function appends the widget (and associated parameters) to the modal cascade and checks that exclusive is .ZN True if spring_loaded is .ZN True . If these are not .ZN True , .ZN XtAddGrab generates an error. .LP The modal cascade is used by .ZN XtDispatchEvent when it tries to dispatch a user event. When at least one modal widget is in the widget cascade, .ZN XtDispatchEvent first determines if the event should be delivered. It starts at the most recent cascade entry and follows the cascade up to and including the most recent cascade entry added with the exclusive parameter .ZN True . .LP This subset of the modal cascade along with all descendants of these widgets comprise the active subset. User events that occur outside the widgets in this subset are ignored or remapped. Modal menus with submenus generally add a submenu widget to the cascade with exclusive .ZN False . Modal dialog boxes that need to restrict user input to the most deeply nested dialog box add a subdialog widget to the cascade with exclusive .ZN True . User events that occur within the active subset are delivered to the appropriate widget, which is usually a child or further descendant of the modal widget. .LP Regardless of where on the screen they occur, remap events are always delivered to the most recent widget in the active subset of the cascade that has spring_loaded .ZN True , if any such widget exists. .LP The .ZN XtRemoveGrab function removes widgets from the modal cascade starting at the most recent widget up to and including the specified widget. It issues an error if the specified widget is not on the modal cascade. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRealizeWidget.man000064401431060000012000000106411252061032400174010ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtRealize-Widget XtIs-Realized XtUnrealize-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtRealizeWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtRealizeWidget, XtIsRealized, XtUnrealizeWidget \- realize and unrealize widgets .SH SYNTAX .HP void XtRealizeWidget(Widget \fIw\fP); .HP Boolean XtIsRealized(Widget \fIw\fP); .HP void XtUnrealizeWidget(Widget \fIw\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION If the widget is already realized, .ZN XtRealizeWidget simply returns. Otherwise, it performs the following: .IP \(bu 5 Binds all action names in the widget's translation table to procedures (see Section 10.1.2). .IP \(bu 5 Makes a post-order traversal of the widget tree rooted at the specified widget and calls the change_managed procedure of each composite widget that has one or more managed children. .IP \(bu 5 Constructs an .ZN XSetWindowAttributes structure filled in with information derived from the .ZN Core widget fields and calls the realize procedure for the widget, which adds any widget-specific attributes and creates the X window. .IP \(bu 5 If the widget is not a subclass of .ZN compositeWidgetClass , .ZN XtRealizeWidget returns; otherwise, it continues and performs the following: .RS .IP \- 5 Descends recursively to each of the widget's managed children and calls the realize procedures. Primitive widgets that instantiate children are responsible for realizing those children themselves. .IP \- 5 Maps all of the managed children windows that have mapped_when_managed .ZN True . (If a widget is managed but mapped_when_managed is .ZN False , the widget is allocated visual space but is not displayed. Some people seem to like this to indicate certain states.) .RE .LP If the widget is a top-level shell widget (that is, it has no parent), and mapped_when_managed is .ZN True , .ZN XtRealizeWidget maps the widget window. .LP The .ZN XtIsRealized function returns .ZN True if the widget has been realized, that is, if the widget has a nonzero X window ID. .LP Some widget procedures (for example, set_values) might wish to operate differently after the widget has been realized. .LP The .ZN XtUnrealizeWidget function destroys the windows of an existing widget and all of its children (recursively down the widget tree). To recreate the windows at a later time, call .ZN XtRealizeWidget again. If the widget was managed, it will be unmanaged automatically before its window is freed. .SH "SEE ALSO" XtManageChildren(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtSetWarningHandler.man000064401431060000012000000000611252061032400202140ustar00alancstaff00002660200006.so man__libmansuffix__/XtError.__libmansuffix__ libXt-1.1.5/man/XtParseTranslationTable.man000064401431060000012000000102141252061032400210770ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtParse-Translation-Table XtAugment-Translations XtOverride-Translations XtUninstall-Translations wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtParseTranslationTable __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtParseTranslationTable, XtAugmentTranslations, XtOverrideTranslations, XtUninstallTranslations \- manage translation tables .SH SYNTAX .HP XtTranslations XtParseTranslationTable(String \fItable\fP); .HP void XtAugmentTranslations(Widget \fIw\fP, XtTranslations \fItranslations\fP); .HP void XtOverrideTranslations(Widget \fIw\fP, XtTranslations \fItranslations\fP); .HP void XtUninstallTranslations(Widget \fIw\fP); .SH ARGUMENTS .IP \fItable\fP 1i Specifies the translation table to compile. .IP \fItranslations\fP 1i Specifies the compiled translation table to merge in (must not be NULL). .ds Wi into which the new translations are to be merged or removed .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtParseTranslationTable function compiles the translation table into the opaque internal representation of type .ZN XtTranslations . Note that if an empty translation table is required for any purpose, one can be obtained by calling .ZN XtParseTranslationTable and passing an empty string. .LP The .ZN XtAugmentTranslations function nondestructively merges the new translations into the existing widget translations. If the new translations contain an event or event sequence that already exists in the widget's translations, the new translation is ignored. .LP The .ZN XtOverrideTranslations function destructively merges the new translations into the existing widget translations. If the new translations contain an event or event sequence that already exists in the widget's translations, the new translation is merged in and override the widget's translation. .LP To replace a widget's translations completely, use .ZN XtSetValues on the XtNtranslations resource and specify a compiled translation table as the value. .LP The .ZN XtUninstallTranslations function causes the entire translation table for widget to be removed. .SH "SEE ALSO" XtAppAddActions(__libmansuffix__), XtCreatePopupShell(__libmansuffix__), XtParseAcceleratorTable(__libmansuffix__), XtPopup(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP d associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtRemoveActionHook.man000064401431060000012000000000741252061032400200550ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddActionHook.__libmansuffix__ libXt-1.1.5/man/XtDispatchEventToWidget.man000064401431060000012000000001021252061032400210410ustar00alancstaff00002660200006.so man__libmansuffix__/XtInsertEventTypeHandler.__libmansuffix__ libXt-1.1.5/man/XtSetSensitive.man000064401431060000012000000071321252061032400172700ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Sensitive XtIs-Sensitive wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetSensitive __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetSensitive, XtIsSensitive \- set and check a widget's sensitivity state .SH SYNTAX .HP void XtSetSensitive(Widget \fIw\fP, Boolean \fIsensitive\fP); .HP Boolean XtIsSensitive(Widget \fIw\fP); .SH ARGUMENTS .IP \fIsensitive\fP 1i Specifies a Boolean value that indicates whether the widget should receive keyboard and pointer events. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtSetSensitive function first calls .ZN XtSetValues on the current widget with an argument list specifying that the sensitive field should change to the new value. It then recursively propagates the new value down the managed children tree by calling .ZN XtSetValues on each child to set the ancestor_sensitive to the new value if the new values for sensitive and the child's ancestor_sensitive are not the same. .LP .ZN XtSetSensitive calls .ZN XtSetValues to change sensitive and ancestor_sensitive. Therefore, when one of these changes, the widget's set_values procedure should take whatever display actions are needed (for example, greying out or stippling the widget). .LP .ZN XtSetSensitive maintains the invariant that if parent has either sensitive or ancestor_sensitive .ZN False , then all children have ancestor_sensitive .ZN False . .LP The .ZN XtIsSensitive function returns .ZN True or .ZN False to indicate whether or not user input events are being dispatched. If both core.sensitive and core.ancestor_sensitive are .ZN True , .ZN XtIsSensitive returns .ZN True ; otherwise, it returns .ZN False . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsSubclass.man000064401431060000012000000000611252061032400167100ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtAppReleaseCacheRefs.man000064401431060000012000000054111252061032400204260ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Release-Cache-Refs wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppReleaseCacheRefs __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppReleaseCacheRefs \- decrement reference counts for resources .SH SYNTAX .HP void XtAppReleaseCacheRefs(XtAppContext \fIapp_context\fP, XtCacheRef* \fIrefs\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIrefs\fP 1i Specifies the list of cache references to be released. .SH DESCRIPTION .ZN XtAppReleaseCacheRefs decrements the reference count for the conversion entries identified by the \fIrefs\fP argument. This argument is a pointer to a NULL-terminated list of .ZN XtCacheRef values. If any reference count reaches zero, the destructor, if any, will be called and the resource removed from the conversion cache. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C LangulibXt-1.1.5/man/XtMalloc.man000064401431060000012000000122701252061032400160510ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtNew-String wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtMalloc __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtMalloc, XtCalloc, XtRealloc, XtFree, XtNew, XtNewString \- memory management functions .SH SYNTAX .HP char *XtMalloc(Cardinal \fIsize\fP); .HP char *XtCalloc(Cardinal \fInum\fP, Cardinal \fIsize\fP); .HP char *XtRealloc(char *\fIptr\fP, Cardinal \fInum\fP); .HP void XtFree(char *\fIptr\fP); .HP \fItype\fP *XtNew(\fItype\fP); .HP String XtNewString(String \fIstring\fP); .HP Cardinal XtAsprintf(String *\fInew_string\fP, const char *\fIformat\fP, ...); .SH ARGUMENTS .IP \fInum\fP 1i Specifies the number of bytes or array elements. .ds Po to the old storage or to the block of storage that is to be freed .IP \fIptr\fP 1i Specifies a pointer \*(Po. .IP \fIsize\fP 1i Specifies the size of an array element (in bytes) or the number of bytes desired. .IP \fIstring\fP 1i Specifies a previously declared string. .IP \fItype\fP 1i Specifies a previously declared data type. .IP \fInew_string\fP 1i Specifies a pointer to write a newly allocated string to. .IP \fIformat\fP 1i Specifies a formatting string as defined by sprintf(3c) .SH DESCRIPTION The .ZN XtMalloc functions returns a pointer to a block of storage of at least the specified size bytes. If there is insufficient memory to allocate the new block, .ZN XtMalloc calls .ZN XtErrorMsg . .LP The .ZN XtCalloc function allocates space for the specified number of array elements of the specified size and initializes the space to zero. If there is insufficient memory to allocate the new block, .ZN XtCalloc calls .ZN XtErrorMsg . .LP The .ZN XtRealloc function changes the size of a block of storage (possibly moving it). Then, it copies the old contents (or as much as will fit) into the new block and frees the old block. If there is insufficient memory to allocate the new block, .ZN XtRealloc calls .ZN XtErrorMsg . If ptr is NULL, .ZN XtRealloc allocates the new storage without copying the old contents; that is, it simply calls .ZN XtMalloc . .LP The .ZN XtFree function returns storage and allows it to be reused. If ptr is NULL, .ZN XtFree returns immediately. .LP .ZN XtNew returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, .ZN XtNew calls .ZN XtErrorMsg . .ZN XtNew is a convenience macro that calls .ZN XtMalloc with the following arguments specified: .LP .Ds .TA .5i .ta .5i ((type *) XtMalloc((unsigned) sizeof(type)) .De .LP .ZN XtNewString returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, .ZN XtNewString calls .ZN XtErrorMsg . .ZN XtNewString is a convenience macro that calls .ZN XtMalloc with the following arguments specified: .LP .Ds .TA .5i .ta .5i (strcpy(XtMalloc((unsigned) strlen(str) + 1), str)) .De .LP The .ZN XtAsprintf function allocates space for a string large enough to hold the string specified by the sprintf(3c) format pattern when used with the remaining arguments, and fills it with the formatted results. The address of the allocated string is placed into the pointer passed as ret. The length of the string (not including the terminating null byte) is returned. If there is insufficient memory to allocate the new block, .ZN XtAsprintf calls .ZN XtErrorMsg . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtReservePropertyAtom.man000064401431060000012000000053261252061032400206470ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtReserve-Property-Atom XtRelease-Property-Atom wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtReservePropertyAtom __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtReservePropertyAtom, XtReleasePropertyAtom \- maintain a cache of property atoms .SH SYNTAX .HP Widget XtReservePropertyAtom(Widget \fIw\fP); .HP void XtReleasePropertyAtom(Widget \fIw\fP, Atom \fIatom\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget used to reserve the atom. .IP \fIatom\fP 1i Specifies the atom whose reservation is to be released. .SH DESCRIPTION .ZN XtReservePropertyAtom returns an atom that may be used for properties in conjunction with conversion requests from widget \fIw\fP. The atom returned will be unique for the display of the widget specified. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUlibXt-1.1.5/man/XtOffset.man000064401431060000012000000065651252061032400161020ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtOffset __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtOffset, XtOffsetOf, XtNumber \- determine the byte offset or number of array elements .SH SYNTAX .HP Cardinal XtOffset(Type \fIpointer_type\fP, Field \fIfield_name\fP); .HP Cardinal XtOffsetOf(Type \fIstructure_type\fP, Field \fIfield_name\fP); .HP Cardinal XtNumber(ArrayVariable \fIarray\fP); .SH ARGUMENTS .IP \fIarray\fP 1i Specifies a fixed-size array. .IP \fIfield_name\fP 1i Specifies the name of the field for which to calculate the byte offset. .IP \fIpointer_type\fP 1i Specifies a type that is declared as a pointer to the structure. .IP \fIstructure_type\fP 1i Specifies a type that is declared as a structure. .SH DESCRIPTION The .ZN XtOffset macro is usually used to determine the offset of various resource fields from the beginning of a widget and can be used at compile time in static initializations. .LP The .ZN XtOffsetOf macro expands to a constant expression that gives the offset in bytes to the specified structure member from the beginning of the structure. It is normally used to statically initialize resource lists and is more portable than .ZN XtOffset , which serves the same function. .LP The .ZN XtNumber macro returns the number of elements in the specified argument lists, resources lists, and other counted arrays. .SH "SEE ALSO" XtGetResourceList(__libmansuffix__), XtSetArg(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCreatePopupShell.man000064401431060000012000000074601252061032400200660ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCreate-Popup-Shell XtVaCreate-Popup-Shell wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreatePopupShell __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCreatePopupShell, XtVaCreatePopupShell \- create a popup shell .SH SYNTAX .HP Widget XtCreatePopupShell(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaCreatePopupShell(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ...\^); .SH ARGUMENTS .ds Al to override the resource defaults .IP \fIargs\fP 1i Specifies the argument list \*(Al. .ds Sh \ shell .IP \fIname\fP 1i Specifies the text name for the created\*(Sh widget. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fIparent\fP 1i Specifies the parent widget. .ds Wc \ pointer for the created shell widget .IP \fIwidget_class\fP 1i Specifies the widget class\*(Wc. .IP \fI...\fP 1i Specifies the variable argument list \*(Al. .SH DESCRIPTION The .ZN XtCreatePopupShell function ensures that the specified class is a subclass of .ZN Shell and, rather than using insert_child to attach the widget to the parent's .IN "insert_child procedure" children list, attaches the shell to the parent's pop-ups list directly. .LP A spring-loaded pop-up invoked from a translation table already must exist at the time that the translation is invoked, so the translation manager can find the shell by name. Pop-ups invoked in other ways can be created ``on-the-fly'' when the pop-up actually is needed. This delayed creation of the shell is particularly useful when you pop up an unspecified number of pop-ups. You can look to see if an appropriate unused shell (that is, not currently popped up) exists and create a new shell if needed. .SH "SEE ALSO" XtCreateWidget(__libmansuffix__), XtPopdown(__libmansuffix__), XtPopup(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtDisplayInitialize.man000064401431060000012000000152061252061032400202730ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtDisplay-Initialize XtOpen-Display XtClose-Display XtDatabase XtScreen-Database wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtDisplayInitialize __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtDisplayInitialize, XtOpenDisplay, XtDatabase, XtScreenDatabase, XtCloseDisplay \- initialize, open, or close a display .SH SYNTAX .HP void XtDisplayInitialize(XtAppContext \fIapp_context\fP, Display *\fIdisplay\fP, String \fIapplication_name\fP, String \fIapplication_class\fP, XrmOptionDescRec *\fIoptions\fP, Cardinal \fInum_options\fP, int *\fIargc\fP, String *\fIargv\fP); .HP Display *XtOpenDisplay(XtAppContext \fIapp_context\fP, String \fIdisplay_string\fP, String \fIapplication_name\fP, String \fIapplication_class\fP, XrmOptionDescRec *\fIoptions\fP, Cardinal \fInum_options\fP, int *\fIargc\fP, String *\fIargv\fP); .HP void XtCloseDisplay(Display *\fIdisplay\fP); .HP XrmDatabase XtDatabase(Display *\fIdisplay\fP); .HP XrmDatabase XtScreenDatabase(Screen* \fIscreen\fP); .SH ARGUMENTS .IP \fIargc\fP 1i Specifies a pointer to the number of command line parameters. .IP \fIargv\fP 1i Specifies the command line parameters. .IP \fIapp_context\fP 1i Specifies the application context. .ds Ac , which usually is the generic name for all instances of this application .IP \fIapplication_class\fP 1i Specifies the class name of this application\*(Ac. .IP \fIapplication_name\fP 1i Specifies the name of the application instance. .IP \fIdisplay\fP 1i Specifies the display\*(Di. Note that a display can be in at most one application context. .IP \fInum_options\fP 1i Specifies the number of entries in the options list. .IP \fIoptions\fP 1i Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to .ZN XrmParseCommand . For further information, see \fI\*(xL\fP. .IP \fIscreen\fP 1i Specifies the screen whose resource database is to be returned. .SH DESCRIPTION The .ZN XtDisplayInitialize function builds the resource database, calls the Xlib .ZN XrmParseCommand function to parse the command line, and performs other per display initialization. After .ZN XrmParseCommand has been called, argc and argv contain only those parameters that were not in the standard option table or in the table specified by the options argument. If the modified argc is not zero, most applications simply print out the modified argv along with a message listing the allowable options. On UNIX-based systems, the application name is usually the final component of argv[0]. If the synchronize resource is .ZN True for the specified application, .ZN XtDisplayInitialize calls the Xlib .ZN XSynchronize function to put Xlib into synchronous mode for this display connection. If the reverseVideo resource is .ZN True , the \*(xI exchange .ZN XtDefaultForeground and .ZN XtDefaultBackground for widgets created on this display. (See Section 9.6.1). .LP The .ZN XtOpenDisplay function calls .ZN XOpenDisplay the specified display name. If display_string is NULL, .ZN XtOpenDisplay uses the current value of the \-display option specified in argv and if no display is specified in argv, uses the user's default display (on UNIX-based systems, this is the value of the DISPLAY environment variable). .LP If this succeeds, it then calls .ZN XtDisplayInitialize and pass it the opened display and the value of the \-name option specified in argv as the application name. If no name option is specified, it uses the application name passed to .ZN XtOpenDisplay . If the application name is NULL, it uses the last component of argv[0]. .ZN XtOpenDisplay returns the newly opened display or NULL if it failed. .LP .ZN XtOpenDisplay is provided as a convenience to the application programmer. .LP The .ZN XtCloseDisplay function closes the specified display as soon as it is safe to do so. If called from within an event dispatch (for example, a callback procedure), .ZN XtCloseDisplay does not close the display until the dispatch is complete. Note that applications need only call .ZN XtCloseDisplay if they are to continue executing after closing the display; otherwise, they should call .ZN XtDestroyApplicationContext or just exit. .LP The .ZN XtDatabase function returns the fully merged resource database that was built by .ZN XtDisplayInitialize associated with the display that was passed in. If this display has not been initialized by .ZN XtDisplayInitialize , the results are not defined. .LP The .ZN XtScreenDatabase function returns the fully merged resource database associated with the specified screen. If the \fIscreen\fP does not belong to a .ZN Display initialized by .ZN XtDisplayInitialize , the results are undefined. .SH "SEE ALSO" XtAppCreateShell(__libmansuffix__), XtCreateApplicationContext(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppSetFallbackResources.man000064401431060000012000000072211252061032400213510ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Set-Fallback-Resources wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppSetFallbackResources __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppSetFallbackResources \- set fallback resources .SH SYNTAX .HP void XtAppSetFallbackResources(XtAppContext \fIapp_context\fP, String* \fIspecification_list\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIspecification_list\fP 1i Specifies a NULL-terminated list of resource specifications to pre-load the database, or NULL. .SH DESCRIPTION Each entry in \fIspecification_list\fP points to a string in the format .ZN XrmPutLineResource . following a call to .ZN XtAppSetFallbackResources , when a resource database is being created for a particular screen and the Intrinsics are not able to find or read an application-specific class resource file and if \fIspecification_list\fP is not NULL the resource specification in \fIspecification_list\fP will be merged into the screen resource database in place of the application-specific class resource file. .ZN XtAppSetFallbackResources is not required to copy \fIspecification_list\fP; the caller must ensure that the contents of the list and the strings addressed by the list remain valid until all displays are initialized or until .ZN XtAppSetFallbackResources is called again. The value NULL for \fIspecification_list\fP removes any previous fallback resource specification for the application context. The intended use for fallback resources is to provide a minimal number of resources that will make the application usable (or at least terminate with helpful diagnostic messages) when some problem exists in finding and loading the application defaults file. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP e of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C LangulibXt-1.1.5/man/XtVaCreateWidget.man000064401431060000012000000000701252061032400174730ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreateWidget.__libmansuffix__ libXt-1.1.5/man/XtAddCallback.man000064401431060000012000000077731252061032400167630ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAdd-Callback XtAdd-Callbacks XtRemove-Callback XtRemove-Callbacks XtRemove-All-Callbacks wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddCallback __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAddCallback, XtAddCallbacks, XtRemoveCallback, XtRemoveCallbacks, XtRemoveAllCallbacks \- add and remove callback procedures .SH SYNTAX .HP void XtAddCallback(Widget \fIw\fP, String \fIcallback_name\fP, XtCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP); .HP void XtAddCallbacks(Widget \fIw\fP, String \fIcallback_name\fP, XtCallbackList \fIcallbacks\fP); .HP void XtRemoveCallback(Widget \fIw\fP, String \fIcallback_name\fP, XtCallbackProc \fIcallback\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveCallbacks(Widget \fIw\fP, String \fIcallback_name\fP, XtCallbackList \fIcallbacks\fP); .HP void XtRemoveAllCallbacks(Widget \fIw\fP, String \fIcallback_name\fP, .SH ARGUMENTS .IP \fIcallback\fP 1i Specifies the callback procedure\*(Cb. .IP \fIcallbacks\fP 1i Specifies the null-terminated list of callback procedures and corresponding client data. .ds Cn \ to which the procedure is to be appended or deleted .IP \fIcallback_name\fP 1i Specifies the callback list\*(Cn. .ds Cd it is invoked by XtCallbacks or NULL, \ or the client data to match on the registered callback procedures .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtAddCallback function adds the specified callback procedure to the specified widget's callback list. .LP The .ZN XtAddCallbacks add the specified list of callbacks to the specified widget's callback list. .LP The .ZN XtRemoveCallback function removes a callback only if both the procedure and the client data match. .LP The .ZN XtRemoveCallbacks function removes the specified callback procedures from the specified widget's callback list. .LP The .ZN XtRemoveAllCallbacks function removes all the callback procedures from the specified widget's callback list. .SH "SEE ALSO" XtCallCallbacks(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtSetMultiClickTime.man000064401431060000012000000055711252061032400202030ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Multi-Click-Time Xt-Get-Multi-Click-Time wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetMultiClickTime __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetMultiClickTime, XtGetMultiClickTime \- set and get multi-click times .SH SYNTAX .HP void XtSetMultiClickTime(Display* \fIdisplay\fP, int \fItime\fP); .HP int XtGetMultiClickTime(Display* \fIdisplay\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the display connection. .IP \fItime\fP 1i Specifies the multi-click time in milliseconds. .SH DESCRIPTION .ZN XtSetMultiClickTime sets the time interval used by the translation manager to determine when multiple events are interpreted as a repeated event. .LP .ZN XtGetMultiClickTime returns the time in milliseconds that the translation manager uses to determine if multiple events are to be interpreted as a repeated event for purposes of matching a translation entry containing a repeat count. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP es of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" ThelibXt-1.1.5/man/XtCallActionProc.man000064401431060000012000000065111252061032400175000ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCall-Action-Proc wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCallActionProc __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCallActionProc \- invoke an action procedure directly .SH SYNTAX .HP void XtCallActionProc(Widget \fIwidget\fP, String \fIaction\fP, XEvent* \fIevent\fP, String* \fIparams\fP, Cardinal \fInum_params\fP); .SH ARGUMENTS .IP \fIwidget\fP 1i Specifies the widget in which the action is to be invoked. Must be of class core of any subclass thereof. .IP \fIaction\fP 1i Specifies the name of the action routine. .IP \fIevent\fP 1i Specifies the contents of the \fIevent\fP passed to the action routine. .IP \fIparams\fP 1i Specifies the contents of the \fIparams\fP passed to the action routine. .IP \fInum_params\fP 1i Specifies the num of entries in \fIparams\fP. .SH DESCRIPTION .ZN XtCallActionProc searches for the named action routine in the same manner and order as translation tables are bound. If found, the action routine is invoked with the specified widget, event pointer, and parameters. It is the responsibility of the caller to ensure that the contents of \fIevent\fP, \fIparams\fP, and \fInum_params\fP arguments are appropriate for the specified routine, and if necessary, that the specified widget is realized or sensitive. If the named action routine cannot be found, .ZN XtCallActionProc generates a warning message and returns. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRegisterGrabAction.man000064401431060000012000000053171252061032400203640ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtRegister-Grab-Action wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtRegisterGrabAction __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtRegisterGrabAction \- register button and key grabs .SH SYNTAX .HP void XtRegisterGrabAction(XtActionProc \fIaction_proc\fP, Boolean \fIowner_events\fP, unsigned int \fIevent_mask\fP, int \fIpointer_mode\fP, int \fIkeyboard_mode\fP); .SH ARGUMENTS .IP \fIaction_proc\fP 1i Specifies the action procedure to search for in translation tables. .IP \fIaction\fP 1i .IP \fIevent\fP 1i .IP \fIparams\fP 1i .IP \fInum_params\fP 1i Specify arguments to .ZN XtGrabButton or .ZN XtGrabKey .SH DESCRIPTION .ZN XtRegisterGrabAction adds the specified \fIaction_proc\fP to a list known to the translation manager. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRegisterDrawable.man000064401431060000012000000067231252061032400200760ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtRegister-Drawable XtUnregister-Drawable XtWindow-To-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtRegisterDrawable __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtRegisterDrawable \- register a drawable with the Intrinsics event dispatcher .SH SYNTAX .HP void XtRegisterDrawable(Display* \fIdisplay\fP, Drawable \fIdrawable\fP, Widget \fIwidget\fP); .HP void XtUnregisterDrawable(Display* \fIdisplay\fP, Drawable \fIdrawable\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the drawable's display. .IP \fIdrawable\fP 1i Specifies the drawable to register. .IP \fIwidget\fP 1i Specifies the widget to register the drawable for. .SH DESCRIPTION .ZN XtRegisterDrawable associates the specified drawable with the specified widget so that future calls to .ZN XtWindowToWidget with the drawable will return the widget. The default event dispatcher will dispatch future core events that arrive with the drawable to the widget as though the event contained the widget's window, but the event itself will not be changed in any way when being passed to even handler or action procedures. .LP If the drawable is already registered with another widget, or if the drawable is the window of a widget in the client's widget tree, the results of calling .ZN XtRegisterDrawable are undefined. .LP .ZN XtUnregisterDrawable removes an association created with .ZN XtRegisterDrawable . If the drawable is the window of a widget in the client's widget tree the results of calling .ZN XtUnregisterDrawable are undefined. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCreateWidget.man000064401431060000012000000177571252061032400172300ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCreate-Widget XtCreate-Managed-Widget XtDestroy-Widget XtVa-Create-Widget XtVa-Create-Managed-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreateWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCreateWidget, XtVaCreateWidget, XtCreateManagedWidget, XtVaCreateManagedWidget, XtDestroyWidget \- create and destroy widgets .SH SYNTAX .HP Widget XtCreateWidget(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaCreateWidget(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ...\^); .HP Widget XtCreateManagedWidget(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaCreateManagedWidget(String \fIname\fP, WidgetClass \fIwidget_class\fP, Widget \fIparent\fP, ...\^); .HP void XtDestroyWidget(Widget \fIw\fP); .SH ARGUMENTS .ds Al to override the resource defaults .IP \fIargs\fP 1i Specifies the argument list \*(Al. .IP \fIname\fP 1i Specifies the resource name for the created widget, which is used for retrieving resources and, for that reason, should not be the same as any other widget that is a child of same parent. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fIparent\fP 1i Specifies the parent widget. .IP \fIw\fP 1i Specifies the widget. .ds Wc \ pointer for the created widget .IP \fIwidget_class\fP 1i Specifies the widget class\*(Wc. .IP \fI...\fP Specifies the variable argument list \*(Al. .SH DESCRIPTION The .ZN XtCreateWidget function performs much of the boilerplate operations of widget creation: .IP \(bu 5 Checks to see if the class_initialize procedure has been called for this class and for all superclasses and, if not, calls those necessary in a superclass-to-subclass order. .IP \(bu 5 Allocates memory for the widget instance. .IP \(bu 5 If the parent is a subclass of .ZN constraintWidgetClass , it allocates memory for the parent's constraints and stores the address of this memory into the constraints field. .IP \(bu 5 Initializes the core nonresource data fields (for example, parent and visible). .IP \(bu 5 Initializes the resource fields (for example, background_pixel) by using the resource lists specified for this class and all superclasses. .IP \(bu 5 If the parent is a subclass of .ZN constraintWidgetClass , it initializes the resource fields of the constraints record by using the constraint resource list specified for the parent's class and all superclasses up to .ZN constraintWidgetClass . .IP \(bu 5 Calls the initialize procedures for the widget by starting at the .ZN Core initialize procedure on down to the widget's initialize procedure. .IP \(bu 5 If the parent is a subclass of .ZN compositeWidgetClass , it puts the widget into its parent's children list by calling its parent's insert_child procedure. For further information, see Section 3.5. .IP \(bu 5 If the parent is a subclass of .ZN constraintWidgetClass , it calls the constraint initialize procedures, starting at .ZN constraintWidgetClass on down to the parent's constraint initialize procedure. .LP Note that you can determine the number of arguments in an argument list by using the .ZN XtNumber macro. For further information, see Section 11.1. .LP The .ZN XtCreateManagedWidget function is a convenience routine that calls .ZN XtCreateWidget and .ZN XtManageChild . .LP The .ZN XtDestroyWidget function provides the only method of destroying a widget, including widgets that need to destroy themselves. It can be called at any time, including from an application callback routine of the widget being destroyed. This requires a two-phase destroy process in order to avoid dangling references to destroyed widgets. .LP In phase one, .ZN XtDestroyWidget performs the following: .IP \(bu 5 If the being_destroyed field of the widget is .ZN True , it returns immediately. .IP \(bu 5 Recursively descends the widget tree and sets the being_destroyed field to .ZN True for the widget and all children. .IP \(bu 5 Adds the widget to a list of widgets (the destroy list) that should be destroyed when it is safe to do so. .LP Entries on the destroy list satisfy the invariant that if w2 occurs after w1 on the destroy list then w2 is not a descendent of w1. (A descendant refers to both normal and pop-up children.) .LP Phase two occurs when all procedures that should execute as a result of the current event have been called (including all procedures registered with the event and translation managers), that is, when the current invocation of .ZN XtDispatchEvent is about to return or immediately if not in .ZN XtDispatchEvent . .LP In phase two, .ZN XtDestroyWidget performs the following on each entry in the destroy list: .IP \(bu 5 Calls the destroy callback procedures registered on the widget (and all descendants) in post-order (it calls children callbacks before parent callbacks). .IP \(bu 5 If the widget's parent is a subclass of .ZN compositeWidgetClass and if the parent is not being destroyed, it calls .ZN XtUnmanageChild on the widget and then calls the widget's parent's delete_child procedure (see Section 3.4). .IP \(bu 5 If the widget's parent is a subclass of .ZN constraintWidgetClass , it calls the constraint destroy procedure for the parent, then the parent's superclass, until finally it calls the constraint destroy procedure for .ZN constraintWidgetClass . .IP \(bu 5 Calls the destroy methods for the widget (and all descendants) in post-order. For each such widget, it calls the destroy procedure declared in the widget class, then the destroy procedure declared in its superclass, until finally it calls the destroy procedure declared in the Core class record. .IP \(bu 5 Calls .ZN XDestroyWindow if the widget is realized (that is, has an X window). The server recursively destroys all descendant windows. .IP \(bu 5 Recursively descends the tree and deallocates all pop-up widgets, constraint records, callback lists and, if the widget is a subclass of .ZN compositeWidgetClass , children. .SH "SEE ALSO" XtAppCreateShell(__libmansuffix__), XtCreatePopupShell(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP : .\" .\" The abolibXt-1.1.5/man/XtUnregisterDrawable.man000064401431060000012000000000741252061032400204320ustar00alancstaff00002660200006.so man__libmansuffix__/XtRegisterDrawable.__libmansuffix__ libXt-1.1.5/man/XtRemoveEventHandler.man000064401431060000012000000000731252061032400203750ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddEventHandler.__libmansuffix__ libXt-1.1.5/man/XtScreen.man000064401431060000012000000000631252061032400160560ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplay.__libmansuffix__ libXt-1.1.5/man/XtAppError.man000064401431060000012000000070231252061032400163740ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Error XtApp-Set-Error-Handler XtApp-Set-Warning-Handler XtApp-Warning wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppError __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppError, XtAppSetErrorHandler, XtAppSetWarningHandler, XtAppWarning \- low-level error handlers .SH SYNTAX .HP void XtAppError(XtAppContext \fIapp_context\fP, String \fImessage\fP); .HP void XtAppSetErrorHandler(XtAppContext \fIapp_context\fP, XtErrorHandler \fIhandler\fP); .HP void XtAppSetWarningHandler(XtAppContext \fIapp_context\fP, XtErrorHandler \fIhandler\fP); .HP void XtAppWarning(XtAppContext \fIapp_context\fP, String \fImessage\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fImessage\fP 1i Specifies the nonfatal error message that is to be reported. .ds Ha fatal error procedure, which should not return, \ or the nonfatal error procedure, which usually returns .IP \fIhandler\fP 1i Specifies the new \*(Ha. .ds Me reported .IP \fImessage\fP 1i Specifies the message that is to be \*(Me. .SH DESCRIPTION The .ZN XtAppError function calls the installed error procedure and passes the specified message. .LP The .ZN XtAppSetErrorHandler function registers the specified procedure, which is called when a fatal error condition occurs. .LP The .ZN XtAppSetWarningHandler registers the specified procedure, which is called when a nonfatal error condition occurs. .LP The .ZN XtAppWarning function calls the installed nonfatal error procedure and passes the specified message. .SH "SEE ALSO" XtAppGetErrorDatabase(__libmansuffix__), XtAppErrorMsg(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/MenuPopdown.man000064401431060000012000000000631252061032400165760ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopdown.__libmansuffix__ libXt-1.1.5/man/XtWindow.man000064401431060000012000000000631252061032400161060ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplay.__libmansuffix__ libXt-1.1.5/man/XtAppGetExitFlag.man000064401431060000012000000000721252061032400174430ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppSetExitFlag.__libmansuffix__ libXt-1.1.5/man/XtWarning.man000064401431060000012000000000611252061032400162420ustar00alancstaff00002660200006.so man__libmansuffix__/XtError.__libmansuffix__ libXt-1.1.5/man/XtOffsetOf.man000064401431060000012000000000621252061032400163510ustar00alancstaff00002660200006.so man__libmansuffix__/XtOffset.__libmansuffix__ libXt-1.1.5/man/XtCallbackNone.man000064401431060000012000000000611252061032400171510ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopup.__libmansuffix__ libXt-1.1.5/man/XtSetSelectionParameters.man000064401431060000012000000105431252061032400212700ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Selection-Parameters XtGet-Selection-Parameters wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetSelectionParameters __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetSelectionParameters \- specify target parameters for a selection request with a single target .SH SYNTAX .HP void XtSetSelectionParameters(Widget \fIrequestor\fP, Atom \fIselection\fP, Atom \fItype\fP, XtPointer \fIvalue\fP, unsigned long \fIlength\fP, int \fIformat\fP); .SH ARGUMENTS .IP \fIrequestor\fP 1i Specifies the widget making the request. Must be of class Core or any subclass thereof. .IP \fIselection\fP 1i Specifies the atom that names the selection. .IP \fItype\fP 1i Specifies the type of the property in which the parameters will be passed. .IP \fIvalue\fP 1i Specifies a pointer to the parameters. .IP \fIlength\fP 1i Specifies the number of elements containing data in \fIvalue\fP, each element of a sized indicated by \fIformat\fP. .IP \fIformat\fP 1i Specifies the size in bits of the data in the elements of \fIvalue\fP. .SH DESCRIPTION The specified parameters will be copied and stored in a new property of the specified type and format on the requestor's window. To initiate a selection request with a target and these parameters, a subsequent call to .ZN XtGetSelectionValue or to .ZN XtGetSelectionValueIncremental specifying the same requestor widget and selection atom will generate a .ZN ConvertSelection request referring referring to the property containing the parameters. If .ZN XtSetSelectionParameters is called more than once with the same widget and selection without a call to specify a request, the most recently specified parameters are used in the subsequent request. .LP The possible values of \fIformat\fP may be 8, 16, or 32. If the \fIformat\fP is 8, the elements of \fIvalue\fP are assumed to be sizeof(char); if 16, sizeof(short); if 32, sizeof(long). .LP To generate a MULTIPLE target request with parameters for any of the multiple targets of the selection request, precede individual calls to .ZN XtGetSelectionValue and .ZN XtGetSelectionValueIncremental with corresponding individual calls to .ZN XtSetSelectionParameters , and enclose these all within .ZN XtCreateSelectionRequest and .ZN XtSendSelectionRequest . .ZN XtGetSelectionValues and .ZN XtGetSelectionValuesIncremental cannot be used to make selection requests with parameterized targets. .SH "SEE ALSO" XtGetSelectionParameters(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRegisterCaseConverter.man000064401431060000012000000000741252061032400211110ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetKeyTranslator.__libmansuffix__ libXt-1.1.5/man/XtDisplay.man000064401431060000012000000061001252061032400162420ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtDisplay-Of-Object XtScreen-Of-Object XtWindow-Of-Object wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtDisplay __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtDisplay, XtDisplayOfObject, XtScreen, XtScreenOfObject, XtWindow, XtWindowOfObject \- obtain window information about a widget .SH SYNTAX .HP Display *XtDisplay(Widget \fIw\fP); .HP Display *XtDisplayOfObject(Widget \fIobject\fP); .HP Screen *XtScreen(Widget \fIw\fP); .HP Screen *XtScreenOfObject(Widget \fIobject\fP); .HP Window XtWindow(Widget \fIw\fP); .HP Window XtWindowOfObject(Widget \fIobject\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .LP .IP \fIobject\fP 1i Specifies the widget. .SH DESCRIPTION .ZN XtDisplay returns the display pointer for the specified widget. .LP .ZN XtDisplayOfObject returns the display pointer for the specified object. .LP .ZN XtScreen returns the screen pointer for the specified widget. .LP .ZN XtScreenOfObject returns the screen pointer for the specified object. .LP .ZN XtWindow returns the window of the specified widget. .LP .ZN XtWindowOfObject returns the window of the specified object. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtProcessLock.man000064401431060000012000000045611252061032400170750ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtProcess-Lock XtProcess-Unlock wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtProcessLock __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtProcessLock, XtProcessUnlock \- lock and unlock process .SH SYNTAX .HP void XtProcessLock(void); .HP void XtProcessUnlock(void); .SH DESCRIPTION .ZN XtProcessLock is used to lock all process global data. .LP .ZN XtProcessUnlock unlocks the process. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppAddActions.man000064401431060000012000000052141252061032400173140ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Actions wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddActions __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddActions \- register an action table .SH SYNTAX .HP void XtAppAddActions(XtAppContext \fIapp_context\fP, XtActionList \fIactions\fP, Cardinal \fInum_actions\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIactions\fP 1i Specifies the action table to register. .IP \fInum_args\fP 1i Specifies the number of entries in this action table. .SH DESCRIPTION The .ZN XtAppAddActions function adds the specified action table and registers it with the translation manager. .SH "SEE ALSO" XtParseTranslationTable(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP d associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtAppAddConverter.man000064401431060000012000000067441252061032400176740ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Converter XtAdd-Converter wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddConverter __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtAppAddConverter, XtAddConverter \- register resource converter .SH SYNTAX .HP void XtAppAddConverter(XtAppContext \fIapp_context\fP, String \fIfrom_type\fP, String \fIto_type\fP, XtConverter \fIconverter\fP, XtConvertArgList \fIconvert_args\fP, Cardinal \fInum_args\fP); .HP void XtAddConverter(String \fIfrom_type\fP, String \fIto_type\fP, XtConverter \fIconverter\fP, XtConvertArgList \fIconvert_args\fP, Cardinal \fInum_args\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIconverter\fP 1i Specifies the type converter procedure. .IP \fIconvert_args\fP 1i Specifies how to compute the additional arguments to the converter or NULL. .IP \fIfrom_type\fP 1i Specifies the source type. .IP \fInum_args\fP 1i Specifies the number of additional arguments to the converter or zero. .IP \fIto_type\fP 1i Specifies the destination type. .SH DESCRIPTION .ZN XtAppAddConverter is equivalent in function to .ZN XtAppSetTypeConverter with \fIcache_type\fP equal to .ZN XtCacheAll for old-format type converters. It has been superseded by .ZN XtAppSetTypeConverter . .LP .ZN XtAddConverter is equivalent in function to .ZN XtSetTypeConverter with \fIcache_type\fP equal to .ZN XtCacheAll for old-format type converters. It has been superseded by .ZN XtSetTypeConverter . .SH "SEE ALSO" XtConvert(__libmansuffix__), XtStringConversionWarning(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtHasCallbacks.man000064401431060000012000000000711252061032400171510ustar00alancstaff00002660200006.so man__libmansuffix__/XtCallCallbacks.__libmansuffix__ libXt-1.1.5/man/XtIsTopLevelShell.man000064401431060000012000000000611252061032400176530ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtCreateApplicationShell.man000064401431060000012000000056131252061032400212240ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Create-Application-Shell wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreateApplicationShell __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtCreateApplicationShell \- create top-level widget instance .SH SYNTAX .HP Widget XtCreateApplicationShell(String \fIname\fP, WidgetClass \fIwidget_class\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .SH ARGUMENTS .IP \fIname\fP 1i Specifies the name of the shell. .IP \fIargs\fP 1i Specifies the argument list to override any other resource specifications. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .SH DESCRIPTION The procedure .ZN XtCreateApplicationShell calls .ZN XtAppCreateShell with the \fIapplication\fP NULL, the application class passed to .ZN XtInitialize , and the default application context created by .ZN XtInitialize . This routine has been replaced by .ZN XtAppCreateShell . .SH "SEE ALSO" XtAppCreateShell(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsApplicationShell.man000064401431060000012000000000611252061032400203640ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtAppMainLoop.man000064401431060000012000000000701252061032400170140ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppNextEvent.__libmansuffix__ libXt-1.1.5/man/XtUnmapWidget.man000064401431060000012000000000651252061032400170650ustar00alancstaff00002660200006.so man__libmansuffix__/XtMapWidget.__libmansuffix__ libXt-1.1.5/man/XtAppNextEvent.man000064401431060000012000000156711252061032400172330ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Next-Event XtApp-Pending XtApp-Peek-Event XtApp-Process-Event Xt-Dispatch-Event XtApp-Main-Loop wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppNextEvent __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppNextEvent, XtAppPending, XtAppPeekEvent, XtAppProcessEvent, XtDispatchEvent, XtAppMainLoop \- query and process events and input .SH SYNTAX .HP void XtAppNextEvent(XtAppContext \fIapp_context\fP, XEvent *\fIevent_return\fP); .HP Boolean XtAppPeekEvent(XtAppContext \fIapp_context\fP, XEvent *\fIevent_return\fP); .HP XtInputMask XtAppPending(XtAppContext \fIapp_context\fP); .HP void XtAppProcessEvent(XtAppContext \fIapp_context\fP, XtInputMask \fImask\fP); .HP Boolean XtDispatchEvent(XEvent *\fIevent\fP); .HP void XtAppMainLoop(XtAppContext \fIapp_context\fP); .SH ARGUMENTS .ds Co that identifies the application .IP \fIapp_context\fP 1i Specifies the application context \*(Co. .IP \fIevent\fP 1i Specifies a pointer to the event structure that is to be dispatched to the appropriate event handler. .IP \fIevent_return\fP 1i Returns the event information to the specified event structure. .IP \fImask\fP 1i Specifies what types of events to process. The mask is the bitwise inclusive OR of any combination of .ZN XtIMXEvent , .ZN XtIMTimer , .ZN XtIMAlternateInput , and .ZN XtIMSignal . As a convenience, the \*(tk defines the symbolic name .ZN XtIMAll to be the bitwise inclusive OR of all event types. .SH DESCRIPTION If the X event queue is empty, .ZN XtAppNextEvent flushes the X output buffers of each Display in the application context and waits for an event while looking at the other input sources, timeout timeout values, and signal handlers and calling any callback procedures triggered by them. This wait time can be used for background processing (see Section 7.8). .LP If there is an event in the queue, .ZN XtAppPeekEvent fills in the event and returns a nonzero value. If no X input is on the queue, .ZN XtAppPeekEvent flushes the output buffer and blocks until input is available (possibly calling some timeout callbacks in the process). If the input is an event, .ZN XtAppPeekEvent fills in the event and returns a nonzero value. Otherwise, the input is for an alternate input source, and .ZN XtAppPeekEvent returns zero. .LP The .ZN XtAppPending function returns a nonzero value if there are events pending from the X server, timer pending, or other input sources pending. The value returned is a bit mask that is the OR of .ZN XtIMXEvent , .ZN XtIMTimer , .ZN XtIMAlternateInput , and .ZN XtIMSignal (see .ZN XtAppProcessEvent ). If there are no events pending, .ZN XtAppPending flushes the output buffer and returns zero. .LP The .ZN XtAppProcessEvent function processes one timer, alternate input, signal source, or X event. If there is nothing of the appropriate type to process, .ZN XtAppProcessEvent blocks until there is. If there is more than one type of thing available to process, it is undefined which will get processed. Usually, this procedure is not called by client applications (see .ZN XtAppMainLoop ). .ZN XtAppProcessEvent processes timer events by calling any appropriate timer callbacks, alternate input by calling any appropriate alternate input callbacks, signal source by calling any appropriate signal callbacks, and X events by calling .ZN XtDispatchEvent . .LP When an X event is received, it is passed to .ZN XtDispatchEvent , which calls the appropriate event handlers and passes them the widget, the event, and client-specific data registered with each procedure. If there are no handlers for that event registered, the event is ignored and the dispatcher simply returns. The order in which the handlers are called is undefined. .LP The .ZN XtDispatchEvent function sends those events to the event handler functions that have been previously registered with the dispatch routine. .ZN XtDispatchEvent returns .ZN True if it dispatched the event to some handler and .ZN False if it found no handler to dispatch the event to. The most common use of .ZN XtDispatchEvent is to dispatch events acquired with the .ZN XtAppNextEvent procedure. However, it also can be used to dispatch user-constructed events. .ZN XtDispatchEvent also is responsible for implementing the grab semantics for .ZN XtAddGrab . .LP The .ZN XtAppMainLoop function first reads the next incoming X event by calling .ZN XtAppNextEvent and then it dispatches the event to the appropriate registered procedure by calling .ZN XtDispatchEvent . This constitutes the main loop of \*(tk applications, and, as such, it does not return unless .ZN XtAppSetExitFlag is called. Applications are expected to exit in response to some user action. There is nothing special about .ZN XtAppMainLoop ; it is simply an loop that calls .ZN XtAppNextEvent and then .ZN XtDispatchEvent , until .ZN XtAppGetExitFlag () returns true. .LP Applications can provide their own version of this loop, which tests some global termination flag or tests that the number of top-level widgets is larger than zero before circling back to the call to .ZN XtAppNextEvent . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP shed to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtClass.man000064401431060000012000000130301252061032400157020ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCheck-Subclass XtIs-Object XtIs-RectObj XtIs-Widget XtIs-Composite XtIs-Constraint XtIs-Shell XtIs-Override-Shell XtIs-WM-Shell XtIs-Vendor-Shell XtIs-Transient-Shell XtIs-Top-Level-Shell XtIs-Application-Shell wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtClass __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtClass, XtSuperclass, XtIsSubclass, XtCheckSubclass, XtIsObject, XtIsRectObj, XtIsWidget, XtIsComposite, XtIsConstraint, XtIsShell, XtIsOverrideShell, XtIsWMShell, XtIsVendorShell, XtIsTransientShell, XtIsTopLevelShell, XtIsApplicationShell, XtIsSessionShell \- obtain and verify a widget's class .SH SYNTAX .HP WidgetClass XtClass(Widget \fIw\fP); .HP WidgetClass XtSuperclass(Widget \fIw\fP); .HP Boolean XtIsSubclass(Widget \fIw\fP, WidgetClass \fIwidget_class\fP); .HP void XtCheckSubclass(Widget \fIwidget\fP, WidgetClass \fIwidget_class\fP, String \fImessage\fP); .HP Boolean XtIsObject(Widget \fIw\fP); .HP Boolean XtIsRectObj(Widget \fIw\fP); .HP Boolean XtIsWidget(Widget \fIw\fP); .HP Boolean XtIsComposite(Widget \fIw\fP); .HP Boolean XtIsConstraint(Widget \fIw\fP, .HP Boolean XtIsShell(Widget \fIw\fP); .HP Boolean XtIsOverrideShell(Widget \fIw\fP); .HP Boolean XtIsWMShell(Widget \fIw\fP); .HP Boolean XtIsVendorShell(Widget \fIw\fP); .HP Boolean XtIsTransientShell(Widget \fIw\fP); .HP Boolean XtIsTopLevelShell(Widget \fIw\fP); .HP Boolean XtIsApplicationShell(Widget \fIw\fP); .HP Boolean XtIsSessionShell(Widget \fIw\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .IP \fIwidget_class\fP 1i Specifies the widget class\*(Wc. .ds Me used .IP \fImessage\fP 1i Specifies the message that is to be \*(Me. .SH DESCRIPTION The .ZN XtClass function returns a pointer to the widget's class structure. .LP The .ZN XtSuperclass function returns a pointer to the widget's superclass class structure. .LP The .ZN XtIsSubclass function returns .ZN True if the class of the specified widget is equal to or is a subclass of the specified class. The widget's class can be any number of subclasses down the chain and need not be an immediate subclass of the specified class. Composite widgets that need to restrict the class of the items they contain can use .ZN XtIsSubclass to find out if a widget belongs to the desired class of objects. .LP The .ZN XtCheckSubclass macro determines if the class of the specified widget is equal to or is a subclass of the specified widget class. The widget can be any number of subclasses down the chain and need not be an immediate subclass of the specified widget class. If the specified widget is not a subclass, .ZN XtCheckSubclass constructs an error message from the supplied message, the widget's actual class, and the expected class and calls .ZN XtErrorMsg . .ZN XtCheckSubclass should be used at the entry point of exported routines to ensure that the client has passed in a valid widget class for the exported operation. .LP .ZN XtCheckSubclass is only executed when the widget has been compiled with the compiler symbol DEBUG defined; otherwise, it is defined as the empty string and generates no code. .LP To test if a given widget belongs to a subclass of an Intrinsics-defined class, the Intrinsics defines macros or functions equivalent to .ZN XtIsSubclass for each of the built-in classes. These procedures are .ZN XtIsObject , .ZN XtIsRectObj , .ZN XtIsWidget , .ZN XtIsComposite , .ZN XtIsConstraint , .ZN XtIsShell , .ZN XtIsOverrideShell , .ZN XtIsWMShell , .ZN XtIsVendorShell , .ZN XtIsTransientShell , .ZN XtIsTopLevelShell , .ZN XtIsApplicationShell , and .ZN XtIsSessionShell . .LP The .SH "SEE ALSO" XtAppErrorMsg(__libmansuffix__), XtDisplay(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtInitializeWidgetClass.man000064401431060000012000000052271252061032400211010ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtInitialize-Widget-Class wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtInitializeWidgetClass __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtInitializeWidgetClass \- initialize a widget class .SH SYNTAX .HP void XtInitializeWidgetClass(WidgetClass \fIobject_class\fP); .SH ARGUMENTS .IP \fIobject_class\fP 1i Specifies the object class to initialize. .SH DESCRIPTION If the specified widget class is already initialized, .ZN XtInitializeWidgetClass returns immediately. .LP If the class initialization procedure registers type converters, these type converters are not available until the first object of the class or subclass is created or .ZN XtInitializeWidgetClass is called. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP d associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" ThelibXt-1.1.5/man/XtManageChild.man000064401431060000012000000000721252061032400167730ustar00alancstaff00002660200006.so man__libmansuffix__/XtManageChildren.__libmansuffix__ libXt-1.1.5/man/XtAppProcessEvent.man000064401431060000012000000000701252061032400177160ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppNextEvent.__libmansuffix__ libXt-1.1.5/man/XtPeekEvent.man000064401431060000012000000000651252061032400165270ustar00alancstaff00002660200006.so man__libmansuffix__/XtNextEvent.__libmansuffix__ libXt-1.1.5/man/XtSetMappedWhenManaged.man000064401431060000012000000000651252061032400206220ustar00alancstaff00002660200006.so man__libmansuffix__/XtMapWidget.__libmansuffix__ libXt-1.1.5/man/XtBuildEventMask.man000064401431060000012000000054141252061032400175210ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtBuild-Event-Mask wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtBuildEventMask __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtBuildEventMask \- retrieve a widget's event mask .SH SYNTAX .HP EventMask XtBuildEventMask(Widget \fIw\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtBuildEventMask function returns the event mask representing the logical OR of all event masks for event handlers registered on the widget with .ZN XtAddEventHandler and all event translations, including accelerators, installed on the widget. This is the same event mask stored into the .ZN XSetWindowAttributes structure by .ZN XtRealizeWidget and sent to the server when event handlers and translations are installed or removed on the realized widget. .SH "SEE ALSO" XtAddEventHandler(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetSubvalues.man000064401431060000012000000000651252061032400172520ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtWarningMsg.man000064401431060000012000000000641252061032400167140ustar00alancstaff00002660200006.so man__libmansuffix__/XtErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtGetErrorDatabaseText.man000064401431060000012000000000741252061032400206640ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetErrorDatabase.__libmansuffix__ libXt-1.1.5/man/XtVaGetSubvalues.man000064401431060000012000000000651252061032400175410ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtRemoveTimeOut.man000064401431060000012000000000711252061032400174020ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddTimeOut.__libmansuffix__ libXt-1.1.5/man/XtGrabKeyboard.man000064401431060000012000000000631252061032400171730ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtSetSelectionTimeout.man000064401431060000012000000000771252061032400206140ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetSelectionTimeout.__libmansuffix__ libXt-1.1.5/man/MenuPopup.man000064401431060000012000000000611252061032400162510ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopup.__libmansuffix__ libXt-1.1.5/man/XtProcessUnlock.man000064401431060000012000000000671252061032400174350ustar00alancstaff00002660200006.so man__libmansuffix__/XtProcessLock.__libmansuffix__ libXt-1.1.5/man/XtAddInput.man000064401431060000012000000065401252061032400163550ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAdd-Input XtAdd-TimeOut XtAddWorkProc wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddInput __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtAddInput, XtAddTimeOut, XtAddWorkProc \- register input, timeout, and workprocs .SH SYNTAX .HP XtInputId XtAddInput(int \fIsource\fP, XtPointer \fIcondition\fP, XtInputCallbackProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP XtIntervalId XtAddTimeOut(unsigned long \fIinterval\fP, XtInputCallbackProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP XtWorkProcId XtAddWorkProc(XtWorkProc \fIproc\fP, XtPointer \fIclient_data\fP); .LP .SH ARGUMENTS .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when input is available .IP \fIcondition\fP 1i Specifies the mask that indicates a read, write, or exception condition or some operating system dependent condition. .IP \fIproc\fP 1i Specifies the procedure that is to be called when input is available. .IP \fIsource\fP 1i Specifies the source file descriptor on a UNIX-based system or other operating system dependent device specification. .SH DESCRIPTION .ZN XtAddInput has been replaced by .ZN XtAppAddInput. .LP .ZN XtAddTimeOut has been replaced by .ZN XtAppAddTimeOut. .LP .ZN XtAddWorkProc has been replaced by .ZN XtAppAddWorkProc . .SH "SEE ALSO" XtAppAddInput(__libmansuffix__), XtAppAddTimeOut(__libmansuffix__), XtAppAddWorkProc(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUlibXt-1.1.5/man/XtRemoveRawEventHandler.man000064401431060000012000000000731252061032400210470ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddEventHandler.__libmansuffix__ libXt-1.1.5/man/XtGetGC.man000064401431060000012000000063761252061032400156050ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-GC XtRelease-GC wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetGC __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetGC, XtReleaseGC \- obtain and destroy a sharable GC .SH SYNTAX .HP GC XtGetGC(Widget \fIw\fP, XtGCMask \fIvalue_mask\fP, XGCValues *\fIvalues\fP); .HP void XtReleaseGC(Widget \fIw\fP, GC \fIgc\fP); .SH ARGUMENTS .IP \fIgc\fP 1i Specifies the GC to be deallocated. .IP \fIvalues\fP 1i Specifies the actual values for this GC. .ds Vm fields of the values are specified .IP \fIvalue_mask\fP 1i Specifies which \*(Vm. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtGetGC function returns a sharable, read-only GC. The parameters to this function are the same as those for .ZN XCreateGC except that a widget is passed instead of a display. .ZN XtGetGC shares only GCs in which all values in the GC returned by .ZN XCreateGC are the same. In particular, it does not use the value_mask provided to determine which fields of the GC a widget considers relevant. The value_mask is used only to tell the server which fields should be filled in with widget data and which it should fill in with default values. For further information about value_mask and values, see .ZN XCreateGC in the \fI\*(xL\fP. .LP The .ZN XtReleaseGC function deallocate the specified shared GC. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAddRawEventHandler.man000064401431060000012000000000731252061032400203020ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddEventHandler.__libmansuffix__ libXt-1.1.5/man/XtKeysymToKeycodeList.man000064401431060000012000000000721252061032400205630ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetKeysymTable.__libmansuffix__ libXt-1.1.5/man/XtAppAddTimeOut.man000064401431060000012000000064221252061032400173040ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Time-Out XtRemove-Time-Out wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddTimeOut __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddTimeOut, XtRemoveTimeOut \- register and remove timeouts .SH SYNTAX .HP XtIntervalId XtAppAddTimeOut(XtAppContext \fIapp_context\fP, unsigned long \fIinterval\fP, XtTimerCallbackProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveTimeOut(XtIntervalId \fItimer\fP); .SH ARGUMENTS .ds Co for which the timer is to be set .IP \fIapp_context\fP 1i Specifies the application context \*(Co. .IP \fIclient_data\fP 1i Specifies the argument that is to be passed to the specified procedure when \*(Cd. .IP \fIinterval\fP 1i Specifies the time interval in milliseconds. .ds Pr \ to be called when time expires .IP \fIproc\fP 1i Specifies the procedure that is\*(Pr. .IP \fItimer\fP 1i Specifies the ID for the timeout request to be destroyed. .SH DESCRIPTION The .ZN XtAppAddTimeOut function creates a timeout and returns an identifier for it. The timeout value is set to interval. The callback procedure is called when the time interval elapses, and then the timeout is removed. .LP The .ZN XtRemoveTimeOut function removes the timeout. Note that timeouts are automatically removed once they trigger. .SH "SEE ALSO" XtAppAddInput(__libmansuffix__),XtAppAddSignal(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsVendorShell.man000064401431060000012000000000611252061032400173560ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtCallCallbacks.man000064401431060000012000000073631252061032400173240ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCall-Callbacks XtHas-Callbacks XtCall-Callbacks-List wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCallCallbacks __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCallCallbacks, XtCallCallbackList, XtHasCallbacks \- process callbacks .SH SYNTAX .HP void XtCallCallbacks(Widget \fIw\fP, String \fIcallback_name\fP, XtPointer \fIcall_data\fP); .HP void XtCallCallbackList(Widget \fIw\fP, XtCallbackList \fIcallbacks\fP, XtPointer \fIcall_data\fP); .LP typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} XtCallbackStatus; .HP XtCallbackStatus XtHasCallbacks(Widget \fIw\fP, String \fIcallback_name\fP); .SH ARGUMENTS .ds Cn \ to be executed or checked .IP \fIcallback_name\fP 1i Specifies the callback list\*(Cn. .IP \fIcall_data\fP 1i Specifies a callback-list specific data value to pass to each of the callback procedure in the list. .IP \fIcallbacks\fP 1i Specifies the callback list to be executed. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtCallCallbacks function calls each procedure that is registered in the specified widget's callback list. .LP If \fIcallbacks\fP is not NULL, .ZN XtCallCallbackList calls each of the callback procedures in the list, passing client data and \fIcall_data\fP. The \fIcallbacks\fP parameter must specify the contents of a widget or object resource declared with representation type .ZN XtRCallback . .LP The .ZN XtHasCallbacks function first checks to see if the widget has a callback list identified by callback_name. If the callback list does not exist, .ZN XtHasCallbacks returns .ZN XtCallbackNoList . If the callback list exists but is empty, it returns .ZN XtCallbackHasNone . If the callback list exists and has at least one callback registered, it returns .ZN XtCallbackHasSome . .SH "SEE ALSO" XtAddCallback(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtSessionReturnToken.man000064401431060000012000000000731252061032400204640ustar00alancstaff00002660200006.so man__libmansuffix__/XtSessionGetToken.__libmansuffix__ libXt-1.1.5/man/XtSetEventDispatcher.man000064401431060000012000000001021252061032400203750ustar00alancstaff00002660200006.so man__libmansuffix__/XtInsertEventTypeHandler.__libmansuffix__ libXt-1.1.5/man/XtGetApplicationNameAndClass.man000064401431060000012000000056601252061032400217640ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Application-Name-And-Class wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetApplicationNameAndClass __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetApplicationNameAndClass \- retrieve application name and class .SH SYNTAX .HP void XtGetApplicationNameAndClass(Display* \fIdisplay\fP, String* \fIname_return\fP, String* \fIclass_return\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies an open display connection that has been initialized with .ZN XtDisplayInitialize . .IP \fIname_return\fP 1i Returns the application name. .IP \fIclass_return\fP 1i Returns the application class. .SH DESCRIPTION .ZN XtGetApplicationNameAndClass returns the application name and class passed to .ZN XtDisplayInitialize for the specified display. If the display was never initialized or has been closed, the result is undefined. The returned strings are owned by the Intrinsics and must not be modified or freed by the caller. .SH "SEE ALSO" .BR XtDisplayInitialize (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtOpenApplication.man000064401431060000012000000121421252061032400177250ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtOpen-Application XtVa-Open-Application .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtOpenApplication __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtOpenApplication, XtVaOpenApplication \- initialize, open, or close a display .SH SYNTAX .HP Widget XtOpenApplication(XtAppContext *\fIapp_context_return\fP, String \fIapplication_class\fP, XrmOptionDescRec *\fIoptions\fP, Cardinal \fInum_options\fP, int *\fIargc_in_out\fP, String *\fIargv_in_out\fP, String *\fIfallback_resources\fP, WidgetClass \fIwidget_class\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaOpenApplication(XtAppContext *\fIapp_context_return\fP, String \fIapplication_class\fP, XrmOptionDescRec *\fIoptions\fP, Cardinal \fInum_options\fP, int *\fIargc_in_out\fP, String *\fIargv_in_out\fP, String *\fIfallback_resources\fP, WidgetClass \fIwidget_class\fP, ...\^); .SH ARGUMENTS .IP \fIapp_context_return\fP 1i Specifies the application context. .ds Ac , which usually is the generic name for all instances of this application .IP \fIapplication_class\fP 1i Specifies the class name of this application\*(Ac. .IP \fIoptions\fP 1i Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to .ZN XrmParseCommand . For further information, see \fI\*(xL\fP. .IP \fInum_options\fP 1i Specifies the number of entries in the options list. .IP \fIargc_in_out\fP 1i Specifies a pointer to the number of command line parameters. .IP \fIargv_in_out\fP 1i Specifies the command line parameters. .IP \fIfallback_resources\fP 1i Specifies resource values to be used if the application class resource file cannot be opened or read, or NULL. .IP \fIwidget_class\fP 1i Specifies the widget class of the shell to be created. .IP \fIargs\fP 1i Specifies the argument list to override any other resource specification for the created shell widget. .IP \fInum_args\fP 1i Specifies the number of entries in the argument list. .IP \fI...\fP 1i Specifies the variable argument list to override any other resource specification for the created shell widget. .SH DESCRIPTION The .ZN XtOpenApplication function calls .ZN XtToolkitInitialize followed by .ZN XtCreateApplicationContext , then calls .ZN XtOpenDisplay with \fIdisplay_string\fP NULL and \fIapplication_name\fP NULL, and finally calls .ZN XtAppCreateShell with \fIapplication_name\fP NULL, the specified \fIwidget_class\fP, and the specified \fIargs\fP and \fInum_args\fP and returns the created shell. The modified \fIargc\fP and \fIargv\fP returned by .ZN XtDisplayInitialize are returned in \fIargc_in_out\fP and \fIargv_in_out\fP. If \fIapp_context_return\fP is not NULL, the created application context is also returned. If the display specified by the command line cannot be opened, an error message is issued and .ZN XtOpenApplication terminates the application. If \fIfallback_resources\fP is non-NULL, .ZN XtAppSetFallbackResources is called with the value prior to calling .ZN XtOpenDisplay . .LP XtAppInitialize and XtVaAppInitialize have been superceded by .ZN XtOpenApplication and .ZN XtVaOpenApplication respectively. .SH "SEE ALSO" XtAppInitialize(__libmansuffix__), XtVaAppInitialize(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtDisplayToApplicationContext.man000064401431060000012000000047701252061032400223110ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtDisplay-To-Application-Context wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtDisplayToApplicationContext __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtDisplayToApplicationContext \- obtain an application context .SH SYNTAX .HP XtAppContext XtDisplayToApplicationContext(Display* \fIdpy\fP); .SH ARGUMENTS .ds Wi that you want the application context for .IP \fIdpy\fP 1i Specifies the display \*(Wi. .SH DESCRIPTION The .ZN XtDisplayToApplicationContext function returns the application context for the specified display. .SH "SEE ALSO" \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRemoveWorkProc.man000064401431060000012000000000721252061032400175630ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddWorkProc.__libmansuffix__ libXt-1.1.5/man/XtReleasePropertyAtom.man000064401431060000012000000000771252061032400206120ustar00alancstaff00002660200006.so man__libmansuffix__/XtReservePropertyAtom.__libmansuffix__ libXt-1.1.5/man/XtConvert.man000064401431060000012000000100621252061032400162570ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtDirect-Convert wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtConvert __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtConvert, XtDirectConvert \- invoke resource converters .SH SYNTAX .HP void XtConvert(Widget \fIw\fP, String \fIfrom_type\fP, XrmValuePtr \fIfrom\fP, String \fIto_type\fP, XrmValuePtr \fIto_return\fP); .HP void XtDirectConvert(XtConverter \fIconverter\fP, XrmValuePtr \fIargs\fP, Cardinal \fInum_args\fP, XrmValuePtr \fIfrom\fP, XrmValuePtr \fIto_return\fP); .SH ARGUMENTS .ds Al that contains the additional arguments needed to perform \ the conversion (often NULL) .IP \fIargs\fP 1i Specifies the argument list \*(Al. .IP \fIconverter\fP 1i Specifies the conversion procedure that is to be called. .IP \fIfrom\fP 1i Specifies the value to be converted. .IP \fIfrom_type\fP 1i Specifies the source type. .IP \fInum_args\fP 1i Specifies the number of additional arguments (often zero). .IP \fIto_type\fP 1i Specifies the destination type. .IP \fIto_return\fP 1i Returns the converted value. .ds Wi to use for additional arguments (if any are needed) .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtConvert function looks up the type converter registered to convert from_type to to_type, computes any additional arguments needed, and then calls .ZN XtDirectConvert . .ZN XtConvert has been replaced by .ZN XtConvertAndStore . .LP The .ZN XtDirectConvert function looks in the converter cache to see if this conversion procedure has been called with the specified arguments. If so, it returns a descriptor for information stored in the cache; otherwise, it calls the converter and enters the result in the cache. .LP Before calling the specified converter, .ZN XtDirectConvert sets the return value size to zero and the return value address to NULL. To determine if the conversion was successful, the client should check to_return.address for non-NULL. .ZN XtDirectConvert has been replaced by .ZN XtCallConverter . .SH "SEE ALSO" XtAppAddConverter(__libmansuffix__), XtStringConversionWarning(__libmansuffix__), XtConvertAndStore(__libmansuffix__), XtCallConverter(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppSetWarningMsgHandler.man000064401431060000012000000000671252061032400213320ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtMoveWidget.man000064401431060000012000000000731252061032400167120ustar00alancstaff00002660200006.so man__libmansuffix__/XtConfigureWidget.__libmansuffix__ libXt-1.1.5/man/XtResolvePathname.man000064401431060000012000000167371252061032400177530ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtResolve-Pathname wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtResolvePathname __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtResolvePathname \- search for a file using standard substitution .SH SYNTAX .HP String XtResolvePathname(Display *\fIdisplay\fP, String \fItype\fP, String \fIfilename\fP, String \fIsuffix\fP, String \fIpath\fP, Substitution \fIsubstitutions\fP, Cardinal \fInum_substitutions\fP, XtFilePredicate \fIpredicate\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1.2i Specifies the display to use to find the language for language substitutions. .IP \fItype\fP .br .ns .IP \fIfilename\fP .br .ns .IP \fIsuffix\fP 1.2i Specify values to substitute into the path. .IP \fIpath\fP 1.2i Specifies the list of file specifications, or NULL. .IP \fIsubstitutions\fP 1.2i Specifies a list of additional substitutions to make into the path, or NULL. .IP \fInum_substitutions\fP 1.2i Specifies the number of entries in \fIsubstitutions\fP. .IP \fIpredicate\fP 1.2i Specifies a procedure called to judge each potential file name, or NULL. .SH DESCRIPTION The substitutions specified by .ZN XtResolvePathname are determined from the value of the language string retrieved by .ZN XtDisplayInitialize for the specified display. To set the language for all applications specify ``*xnlLanguage: \fIlang\fP'' in the resource database. .IN "xnlLanguage" The format and content of the language string are implementation-defined. One suggested syntax is to compose the language string of three parts; a ``language part'', a ``territory part'' and a ``codeset part''. The manner in which this composition is accomplished is implementation-defined and the \*(xI make no interpretation of the parts other than to use them in substitutions as described below. .LP .ZN XtResolvePathname calls .ZN XtFindFile with the following substitutions in addition to any passed by the caller and returns the value returned by .ZN XtFindFile : .IP %N 5 The value of the \fIfilename\fP parameter, or the application's class name if \fIfilename\fP is NULL. .IP %T 5 The value of the \fItype\fP parameter. .IP %S 5 The value of the \fIsuffix\fP parameter. .IP %L 5 The language string associated with the specified display. .IP %l 5 The language part of the display's language string. .IP %t 5 The territory part of the display's language string. .IP %c 5 The codeset part of the display's language string. .IP %C 5 The customization string retrieved from the resource database associated with \fIdisplay\fP. .IP %D 5 The value of the implementation-specific default path. .LP If a path is passed to .ZN XtResolvePathname , it will be passed along to .ZN XtFindFile . If the \fIpath\fP argument is NULL, the value of the .ZN \s-1XFILESEARCHPATH\s+1 .IN "XFILESEARCHPATH" "" "@DEF@" environment variable will be passed to .ZN XtFindFile . If .ZN \s-1XFILESEARCHPATH\s+1 is not defined, an implementation-specific default path will be used which contains at least 6 entries. These entries must contain the following substitutions: .nf .ta 3n 23n 27n 1. %C, %N, %S, %T, %L or %C, %N, %S, %T, %l, %t, %c 2. %C, %N, %S, %T, %l 3. %C, %N, %S, %T 4. %N, %S, %T, %L or %N, %S, %T, %l, %t, %c 5. %N, %S, %T, %l 6. %N, %S, %T .fi The order of these six entries within the path must be as given above. The order and use of substitutions within a given entry is implementation dependent. If the path begins with a colon, it will be preceded by %N%S. If the path includes two adjacent colons, \fB%N%S\fP will be inserted between them. .LP The \fItype\fP parameter is intended to be a category of files, usually being translated into a directory in the pathname. Possible values might include ``app-defaults'', ``help'', and ``bitmap''. .LP The \fIsuffix\fP parameter is intended to be appended to the file name. Possible values might include ``.txt'', ``.dat'', and ``.bm''. .LP A suggested value for the default path on POSIX-based systems is .IP __projectroot__/lib/X11/%L/%T/%N%C%S:__projectroot__/lib/X11/%l/%T/%N%C%S:\\ .br __projectroot__/lib/X11/%T/%N%C%S:__projectroot__/lib/X11/%L/%T/%N%S:\\ .br __projectroot__/lib/X11/%l/%T/%N%S:__projectroot__/lib/X11/%T/%N%S .LP Using this example, if the user has specified a language, it will be used as a subdirectory of __projectroot__/lib/X11 that will be searched for other files. If the desired file is not found there, the lookup will be tried again using just the language part of the specification. If the file is not there, it will be looked for in __projectroot__/lib/X11. The \fItype\fP parameter is used as a subdirectory of the language directory or of __projectroot__/lib/X11, and \fIsuffix\fP is appended to the file name. .LP The %D substitution allows the addition of path elements to the implementation-specific default path, typically to allow additional directories to be searched without preventing resources in the system directories from being found. For example, a user installing resource files under a directory called ``ourdir'' might set .ZN \s-1XFILESEARCHPATH\s+1 to .IP %D:ourdir/%T/%N%C:ourdir/%T/%N .LP The customization string is obtained by querying the resource database currently associated with the display (the database returned by .ZN XrmGetDatabase ) for the resource \fIapplication_name\fP.customization, class \fIapplication_class\fP.Customization where \fIapplication_name\fP and \fIapplication_class\fP are the values returned by .ZN XtGetApplicationNameAndClass . If no value is specified in the database, the empty string is used. .LP It is the responsibility of the caller to free the returned string using .ZN XtFree when it is no longer needed. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetConstraintResourceList.man000064401431060000012000000000731252061032400217700ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetResourceList.__libmansuffix__ libXt-1.1.5/man/XtGetSelectionParameters.man000064401431060000012000000071071252061032400212560ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-Selection-Parameters XtGet-Selection-Parameters wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSelectionParameters __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetSelectionParameters \- retrieve target parameters for a selection request with a single target .SH SYNTAX .HP void XtGetSelectionParameters(Widget \fIowner\fP, Atom \fIselection\fP, XtRequestId \fIrequest_id\fP, Atom *\fItype_return\fP, XtPointer *\fIvalue_return\fP, unsigned long *\fIlength_return\fP, int *\fIformat_return\fP); .SH ARGUMENTS .IP \fIowner\fP 1i Specifies the widget that owns the specified selection. .IP \fIselection\fP 1i Specifies the selection being processed. .IP \fIrequest_id\fP 1i Specifies the requestor id in the case of incremental selections, or NULL in the case of atomic transfers. .IP \fItype_return\fP 1i Specifies a pointer to an atom in which the property type of the parameters will be stored. .IP \fIvalue_return\fP 1i Specifies a pointer into which a pointer to the parameters are to be stored. A NULL will be stored if no parameters accompany the request. .IP \fIlength_return\fP 1i Specifies a pointer into which the number of data elements in \fIvalue_return\fP of size indicated by \fIformat_return\fP will be stored. .IP \fIformat_return\fP 1i Specifies a pointer into which the size in bits of the parameter data in the elements of \fIvalue_return\fP will be stored. .SH DESCRIPTION .ZN XtGetSelectionParameters may only be called from within an .ZN XtConvertSelectionProc or from within the last call to an .ZN XtConvertSelectionIncrProc with a new request_id. .SH "SEE ALSO" XtSetSelectionParameters(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtParent.man000064401431060000012000000044411252061032400160740ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtParent __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtParent \- obtain widget's parent widget id .SH SYNTAX .HP Widget XtParent(Widget \fIw\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION .ZN XtParent returns the widget's parent widget ID. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCallCallbackList.man000064401431060000012000000000711252061032400177620ustar00alancstaff00002660200006.so man__libmansuffix__/XtCallCallbacks.__libmansuffix__ libXt-1.1.5/man/XtUngrabKey.man000064401431060000012000000000631252061032400165260ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtAddCallbacks.man000064401431060000012000000000671252061032400171330ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddCallback.__libmansuffix__ libXt-1.1.5/man/XtCloseDisplay.man000064401431060000012000000000751252061032400172350ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplayInitialize.__libmansuffix__ libXt-1.1.5/man/XtGetKeysymTable.man000064401431060000012000000067171252061032400175440ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Keysym-Table XtKeysym-To-Keycode-List wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetKeysymTable __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetKeysymTable, XtKeysymToKeycodeList \- query keysyms and keycodes .SH SYNTAX .HP Keysym* XtGetKeysymTable(Display* \fIdisplay\fP, KeyCode* \fImin_keycode_return\fP, int *\fIkeysyms_per_keycode_return\fP); .HP void XtKeysymToKeycodeList(Display* \fIdisplay\fP, KeySym \fIkeysym\fP, KeyCode** \fIkeycodes_return\fP, Cardinal* \fIkeycount_return\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the display whose table is required. .LP .IP \fImin_keycode_return\fP 1i Returns the minimum KeyCode valid for the display. .LP .IP \fIkeysyms_per_keycode_return\fP Returns the number of KeySyms stored for each KeyCode. .LP .IP \fIkeysym\fP 1i Specifies the KeySym for which to search. .LP .IP \fIkeycodes_return\fP 1i Returns a list of KeyCodes that have \fIkeysym\fP associated with them, or NULL if \fIkeycount_return\fP is 0. .LP .IP \fIkeycount_return\fP 1i Returns the number of KeyCodes in the keycode list. .SH DESCRIPTION .ZN XtGetKeysymTable returns a pointer to the Intrinsics' copy of the server's KeyCode-to-KeySym table. This table must not be modified. .LP The .ZN XtKeysymToKeycodeList procedure returns all the KeyCodes that have \fIkeysym\fP in their entry for the keyboard mapping table associated with \fIdisplay\fP. The caller should free the storage pointed to by \fIkeycodes_return\fP using .ZN XtFree when it is no longer useful. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtSetWarningMsgHandler.man000064401431060000012000000000641252061032400206660ustar00alancstaff00002660200006.so man__libmansuffix__/XtErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtPopup.man000064401431060000012000000160171252061032400157500ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtPopup-Spring-Loaded XtCallback-None XtCallback-Nonexclusive XtCallback-Exclusive wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtPopup __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtPopup, XtPopupSpringLoaded, XtCallbackNone, XtCallbackNonexclusive, XtCallbackExclusive \- map a pop-up .SH SYNTAX .HP void XtPopup(Widget \fIpopup_shell\fP, XtGrabKind \fIgrab_kind\fP); .HP void XtPopupSpringLoaded(Widget \fIpopup_shell\fP); .HP void XtCallbackNone(Widget \fIw\fP, XtPointer \fIclient_data\fP, XtPointer \fIcall_data\fP): .HP void XtCallbackNonexclusive(Widget \fIw\fP, XtPointer \fIclient_data\fP, XtPointer \fIcall_data\fP); .HP void XtCallbackExclusive(Widget \fIw\fP, XtPointer \fIclient_data\fP, XtPointer \fIcall_data\fP); .HP void MenuPopup(String \fIshell_name\fP); .SH ARGUMENTS .IP \fIcall_data\fP 1i Specifies the callback data, which is not used by this procedure. .IP \fIclient_data\fP 1i Specifies the pop-up shell. .IP \fIgrab_kind\fP 1i Specifies the way in which user events should be constrained. .IP \fIpopup_shell\fP 1i Specifies the widget shell\*(Ps. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtPopup function performs the following: .IP \(bu 5 Calls .ZN XtCheckSubclass .\".ZN XtCheckSubclass(popup_shell, popupShellWidgetClass) to ensure popup_shell is a subclass of .ZN Shell . .IP \(bu 5 Generates an error if the shell's popped_up field is already .ZN True . .IP \(bu 5 Calls the callback procedures on the shell's popup_callback list. .IP \(bu 5 Sets the shell popped_up field to .ZN True , the shell spring_loaded field to .ZN False , and the shell grab_kind field from grab_kind. .IP \(bu 5 If the shell's create_popup_child field is non-NULL, .ZN XtPopup calls it with popup_shell as the parameter. .IP \(bu 5 If grab_kind is either .ZN XtGrabNonexclusive or .ZN XtGrabExclusive , it calls: .LP .Ds XtAddGrab(popup_shell, (grab_kind == XtGrabExclusive), False) .De .IP \(bu 5 Calls .ZN XtRealizeWidget with popup_shell specified. .IP \(bu 5 Calls .ZN XMapWindow with popup_shell specified. .LP The .ZN XtPopupSpringLoaded function performs exactly as .ZN XtPopup except that it sets the shell \fIspring_loaded\fP field to .ZN True and always calls .ZN XtAddGrab with \fIexclusive\fP .ZN True and \fIspring_loaded\fP .ZN True . .LP The .ZN XtCallbackNone , .ZN XtCallbackNonexclusive , and .ZN XtCallbackExclusive functions call .ZN XtPopup with the shell specified by the client data argument and grab_kind set as the name specifies. .ZN XtCallbackNone , .ZN XtCallbackNonexclusive , and .ZN XtCallbackExclusive specify .ZN XtGrabNone , .ZN XtGrabNonexclusive , and .ZN XtGrabExclusive , respectively. Each function then sets the widget that executed the callback list to be insensitive by using .ZN XtSetSensitive . Using these functions in callbacks is not required. In particular, an application must provide customized code for callbacks that create pop-up shells dynamically or that must do more than desensitizing the button. .LP .ZN MenuPopup is known to the translation manager, which must perform special actions for spring-loaded pop-ups. Calls to .ZN MenuPopup in a translation specification are mapped into calls to a nonexported action procedure, and the translation manager fills in parameters based on the event specified on the left-hand side of a translation. .LP If .ZN MenuPopup is invoked on .ZN ButtonPress (possibly with modifiers), the translation manager pops up the shell with grab_kind set to .ZN XtGrabExclusive and spring_loaded set to .ZN True . If .ZN MenuPopup is invoked on .ZN EnterWindow (possibly with modifiers), the translation manager pops up the shell with grab_kind set to .ZN XtGrabNonexclusive and spring_loaded set to .ZN False . Otherwise, the translation manager generates an error. When the widget is popped up, the following actions occur: .IP \(bu 5 Calls .ZN XtCheckSubclass .\".ZN XtCheckSubclass(popup_shell, popupShellWidgetClass) to ensure popup_shell is a subclass of .ZN Shell . .IP \(bu 5 Generates an error if the shell's popped_up field is already .ZN True . .IP \(bu 5 Calls the callback procedures on the shell's popup_callback list. .IP \(bu 5 Sets the shell popped_up field to .ZN True and the shell grab_kind and spring_loaded fields appropriately. .IP \(bu 5 If the shell's create_popup_child field is non-NULL, it is called with popup_shell as the parameter. .IP \(bu 5 Calls: .LP .Ds XtAddGrab(popup_shell, (grab_kind == XtGrabExclusive), spring_loaded) .De .IP \(bu 5 Calls .ZN XtRealizeWidget with popup_shell specified. .IP \(bu 5 Calls .ZN XMapWindow with popup_shell specified. .LP (Note that these actions are the same as those for .ZN XtPopup .) .ZN MenuPopup tries to find the shell by searching the widget tree starting at the parent of the widget in which it is invoked. If it finds a shell with the specified name in the pop-up children of that parent, it pops up the shell with the appropriate parameters. Otherwise, it moves up the parent chain as needed. If .ZN MenuPopup gets to the application widget and cannot find a matching shell, it generates an error. .SH "SEE ALSO" XtCreatePopupShell(__libmansuffix__), XtPopdown(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtInstallAccelerators.man000064401431060000012000000001011252061032400205660ustar00alancstaff00002660200006.so man__libmansuffix__/XtParseAcceleratorTable.__libmansuffix__ libXt-1.1.5/man/XtWindowToWidget.man000064401431060000012000000000701252061032400175530ustar00alancstaff00002660200006.so man__libmansuffix__/XtNameToWidget.__libmansuffix__ libXt-1.1.5/man/XtIsSessionShell.man000064401431060000012000000000611252061032400175440ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtMakeGeometryRequest.man000064401431060000012000000123311252061032400206020ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtMake-Geometry-Request XtMake-Resize-Request wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtMakeGeometryRequest __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtMakeGeometryRequest, XtMakeResizeRequest \- make geometry manager request .SH SYNTAX .HP XtGeometryResult XtMakeGeometryRequest(Widget \fIw\fP, XtWidgetGeometry *\fIrequest\fP, XtWidgetGeometry *\fIreply_return\fP); .HP XtGeometryResult XtMakeResizeRequest(Widget \fIw\fP, Dimension \fIwidth\fP, \fIheight\fP, Dimension *\fIwidth_return\fP, Dimension *\fIheight_return\fP); .SH ARGUMENTS .IP \fIreply_return\fP 1i Returns the allowed widget size or may be NULL if the requesting widget is not interested in handling .ZN XtGeometryAlmost . .IP \fIrequest\fP 1i Specifies the desired widget geometry (size, position, border width, and stacking order). .ds Wi that is making the request .IP \fIw\fP 1i Specifies the widget \*(Wi. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the allowed widget width and height. .SH DESCRIPTION Depending on the condition, .ZN XtMakeGeometryRequest performs the following: .IP \(bu 5 If the widget is unmanaged or the widget's parent is not realized, it makes the changes and returns .ZN XtGeometryYes . .IP \(bu 5 If the parent is not a subclass of .ZN compositeWidgetClass or the parent's geometry_manager is NULL, it issues an error. .IP \(bu 5 If the widget's being_destroyed field is .ZN True , it returns .ZN XtGeometryNo . .IP \(bu 5 If the widget x, y, width, height and border_width fields are all equal to the requested values, it returns .ZN XtGeometryYes ; otherwise, it calls the parent's geometry_manager procedure with the given parameters. .IP \(bu 5 If the parent's geometry manager returns .ZN XtGeometryYes and if .ZN XtCWQueryOnly is not set in the request_mode and if the widget is realized, .ZN XtMakeGeometryRequest calls the .ZN XConfigureWindow Xlib function to reconfigure the widget's window (set its size, location, and stacking order as appropriate). .IP \(bu 5 If the geometry manager returns .ZN XtGeometryDone , the change has been approved and actually has been done. In this case, .ZN XtMakeGeometryRequest does no configuring and returns .ZN XtGeometryYes . .ZN XtMakeGeometryRequest never returns .ZN XtGeometryDone . .LP Otherwise, .ZN XtMakeGeometryRequest returns the resulting value from the parent's geometry manager. .LP Children of primitive widgets are always unmanaged; thus, .ZN XtMakeGeometryRequest always returns .ZN XtGeometryYes when called by a child of a primitive widget. .LP The .ZN XtMakeResizeRequest function, a simple interface to .ZN XtMakeGeometryRequest , creates a .ZN XtWidgetGeometry structure and specifies that width and height should change. The geometry manager is free to modify any of the other window attributes (position or stacking order) to satisfy the resize request. If the return value is .ZN XtGeometryAlmost , width_return and height_return contain a compromise width and height. If these are acceptable, the widget should immediately make an .ZN XtMakeResizeRequest and request that the compromise width and height be applied. If the widget is not interested in .ZN XtGeometryAlmost replies, it can pass NULL for width_return and height_return. .SH "SEE ALSO" XtConfigureWidget(__libmansuffix__), XtQueryGeometery(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/Makefile.in000064401431060000012000000633161252061035000157040ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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 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)$(libmandir)" DATA = $(libman_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ libmandir = $(LIB_MAN_DIR) libman_PRE = \ $(all_shadows:=.man) \ XtAddActions.man \ XtAddCallback.man \ XtAddEventHandler.man \ XtAddExposureToRegion.man \ XtAddGrab.man \ XtAddInput.man \ XtAllocateGC.man \ XtAppAddActionHook.man \ XtAppAddActions.man \ XtAppAddBlockHook.man \ XtAppAddConverter.man \ XtAppAddInput.man \ XtAppAddSignal.man \ XtAppAddTimeOut.man \ XtAppAddWorkProc.man \ XtAppCreateShell.man \ XtAppError.man \ XtAppErrorMsg.man \ XtAppGetErrorDatabase.man \ XtAppGetSelectionTimeout.man \ XtAppInitialize.man \ XtAppLock.man \ XtAppNextEvent.man \ XtAppReleaseCacheRefs.man \ XtAppSetExitFlag.man \ XtAppSetFallbackResources.man \ XtAppSetTypeConverter.man \ XtBuildEventMask.man \ XtCallAcceptFocus.man \ XtCallActionProc.man \ XtCallCallbacks.man \ XtClass.man \ XtConfigureWidget.man \ XtConvert.man \ XtConvertAndStore.man \ XtCreateApplicationContext.man \ XtCreateApplicationShell.man \ XtCreatePopupShell.man \ XtCreateSelectionRequest.man \ XtCreateWidget.man \ XtCreateWindow.man \ XtDisplay.man \ XtDisplayInitialize.man \ XtDisplayStringConversionWarning.man \ XtDisplayToApplicationContext.man \ XtError.man \ XtErrorMsg.man \ XtFindFile.man \ XtGetActionKeysym.man \ XtGetActionList.man \ XtGetApplicationNameAndClass.man \ XtGetApplicationResources.man \ XtGetClassExtension.man \ XtGetDisplays.man \ XtGetErrorDatabase.man \ XtGetGC.man \ XtGetKeyboardFocusWidget.man \ XtGetKeysymTable.man \ XtGetResourceList.man \ XtGetSelectionParameters.man \ XtGetSelectionRequest.man \ XtGetSelectionTimeout.man \ XtGetSelectionValue.man \ XtGetSelectionValueIncremental.man \ XtGetSubresources.man \ XtGrabKey.man \ XtHooksOfDisplay.man \ XtInitialize.man \ XtInitializeWidgetClass.man \ XtInsertEventTypeHandler.man \ XtLastEventProcessed.man \ XtMakeGeometryRequest.man \ XtMalloc.man \ XtManageChildren.man \ XtMapWidget.man \ XtName.man \ XtNameToWidget.man \ XtNextEvent.man \ XtOffset.man \ XtOpenApplication.man \ XtOwnSelection.man \ XtParent.man \ XtParseAcceleratorTable.man \ XtParseTranslationTable.man \ XtPopdown.man \ XtPopup.man \ XtProcessLock.man \ XtQueryGeometry.man \ XtRealizeWidget.man \ XtRegisterDrawable.man \ XtRegisterGrabAction.man \ XtReservePropertyAtom.man \ XtResolvePathname.man \ XtSessionGetToken.man \ XtSetArg.man \ XtSetKeyTranslator.man \ XtSetKeyboardFocus.man \ XtSetLanguageProc.man \ XtSetMultiClickTime.man \ XtSetSelectionParameters.man \ XtSetSensitive.man \ XtSetValues.man \ XtSetWMColormapWindows.man \ XtStringConversionWarning.man \ XtToolkitThreadInitialize.man \ XtTranslateCoords.man \ XtVaCreateArgsList.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) CLEANFILES = $(libman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .man all_shadows = \ $(XtAddCallback_shadows) \ $(XtAddEventHandler_shadows) \ $(XtAddGrab_shadows) \ $(XtAppAddConverter_shadows) \ $(XtAppAddInput_shadows) \ $(XtAppAddTimeOut_shadows) \ $(XtAppAddWorkProc_shadows) \ $(XtAppCreateShell_shadows) \ $(XtAppError_shadows) \ $(XtAppErrorMsg_shadows) \ $(XtAppGetErrorDatabase_shadows) \ $(XtAppGetSelectionTimeout_shadows) \ $(XtAppNextEvent_shadows) \ $(XtNextEvent_shadows) \ $(XtCallCallbacks_shadows) \ $(XtClass_shadows) \ $(XtConfigureWidget_shadows) \ $(XtConvert_shadows) \ $(XtConvertAndStore_shadows) \ $(XtCreateApplicationContext_shadows) \ $(XtCreatePopupShell_shadows) \ $(XtCreateWidget_shadows) \ $(XtDisplay_shadows) \ $(XtDisplayInitialize_shadows) \ $(XtGetGC_shadows) \ $(XtGetResourceList_shadows) \ $(XtGetSelectionValue_shadows) \ $(XtGetSubresources_shadows) \ $(XtGetApplicationResources_shadows) \ $(XtMakeGeometryRequest_shadows) \ $(XtMalloc_shadows) \ $(XtManageChildren_shadows) \ $(XtMapWidget_shadows) \ $(XtNameToWidget_shadows) \ $(XtOffset_shadows) \ $(XtOwnSelection_shadows) \ $(XtParseAcceleratorTable_shadows) \ $(XtParseTranslationTable_shadows) \ $(XtPopdown_shadows) \ $(XtPopup_shadows) \ $(XtRealizeWidget_shadows) \ $(XtSetArg_shadows) \ $(XtSetKeyTranslator_shadows) \ $(XtSetSensitive_shadows) \ $(XtSetValues_shadows) \ $(XtGetKeysymTable_shadows) \ $(XtAppSetTypeConverter_shadows) \ $(XtAppAddActionHook_shadows) \ $(XtSetMultiClickTime_shadows) \ $(XtInsertEventTypeHandler_shadows) \ $(XtLastEventProcessed_shadows) \ $(XtAppAddSignal_shadows) \ $(XtAddInput_shadows) \ $(XtAppAddBlockHook_shadows) \ $(XtAppInitialize_shadows) \ $(XtSessionGetToken_shadows) \ $(XtErrorMsg_shadows) \ $(XtError_shadows) \ $(XtGetErrorDatabase_shadows) \ $(XtGetSelectionValueIncremental_shadows) \ $(XtGetSelectionTimeout_shadows) \ $(XtCreateSelectionRequest_shadows) \ $(XtReservePropertyAtom_shadows) \ $(XtGrabKey_shadows) \ $(XtRegisterDrawable_shadows) \ $(XtAppSetExitFlag_shadows) \ $(XtAppLock_shadows) \ $(XtProcessLock_shadows) \ $(XtOpenApplication_shadows) XtAddCallback_shadows = \ XtAddCallbacks \ XtRemoveCallback \ XtRemoveCallbacks \ XtRemoveAllCallbacks XtAddEventHandler_shadows = \ XtAddRawEventHandler \ XtRemoveEventHandler \ XtRemoveRawEventHandler \ XtInsertEventHandler \ XtInsertRawEventHandler XtAddGrab_shadows = \ XtRemoveGrab XtAppAddConverter_shadows = \ XtAddConverter XtAppAddInput_shadows = \ XtRemoveInput XtAppAddTimeOut_shadows = \ XtRemoveTimeOut XtAppAddWorkProc_shadows = \ XtRemoveWorkProc XtAppCreateShell_shadows = \ XtVaAppCreateShell XtAppError_shadows = \ XtAppSetErrorHandler \ XtAppSetWarningHandler \ XtAppWarning XtAppErrorMsg_shadows = \ XtAppSetErrorMsgHandler \ XtAppSetWarningMsgHandler \ XtAppWarningMsg XtAppGetErrorDatabase_shadows = \ XtAppGetErrorDatabaseText XtAppGetSelectionTimeout_shadows = \ XtAppSetSelectionTimeout XtAppNextEvent_shadows = \ XtAppPending \ XtAppPeekEvent \ XtAppProcessEvent \ XtDispatchEvent \ XtAppMainLoop XtNextEvent_shadows = \ XtPending \ XtPeekEvent \ XtProcessEvent \ XtMainLoop XtCallCallbacks_shadows = \ XtCallCallbackList \ XtHasCallbacks XtClass_shadows = \ XtSuperclass \ XtIsSubclass \ XtCheckSubclass \ XtIsObject \ XtIsRectObj \ XtIsWidget \ XtIsComposite \ XtIsConstraint \ XtIsShell \ XtIsOverrideShell \ XtIsWMShell \ XtIsVendorShell \ XtIsTransientShell \ XtIsTopLevelShell \ XtIsApplicationShell \ XtIsSessionShell XtConfigureWidget_shadows = \ XtMoveWidget \ XtResizeWidget XtConvert_shadows = \ XtDirectConvert XtConvertAndStore_shadows = \ XtCallConverter XtCreateApplicationContext_shadows = \ XtDestroyApplicationContext \ XtWidgetToApplicationContext \ XtToolkitInitialize XtCreatePopupShell_shadows = \ XtVaCreatePopupShell XtCreateWidget_shadows = \ XtVaCreateWidget \ XtCreateManagedWidget \ XtVaCreateManagedWidget \ XtDestroyWidget XtDisplay_shadows = \ XtDisplayOfObject \ XtScreen \ XtScreenOfObject \ XtWindow \ XtWindowOfObject XtDisplayInitialize_shadows = \ XtOpenDisplay \ XtCloseDisplay \ XtDatabase \ XtScreenDatabase XtGetGC_shadows = \ XtReleaseGC XtGetResourceList_shadows = \ XtGetConstraintResourceList XtGetSelectionValue_shadows = \ XtGetSelectionValues XtGetSubresources_shadows = \ XtVaGetSubresources XtGetApplicationResources_shadows = \ XtVaGetApplicationResources XtMakeGeometryRequest_shadows = \ XtMakeResizeRequest XtMalloc_shadows = \ XtCalloc \ XtRealloc \ XtFree \ XtNew \ XtNewString \ XtAsprintf XtManageChildren_shadows = \ XtManageChild \ XtUnmanageChildren \ XtUnmanageChild \ XtIsManaged \ XtChangeManagedSet XtMapWidget_shadows = \ XtSetMappedWhenManaged \ XtUnmapWidget XtNameToWidget_shadows = \ XtWindowToWidget XtOffset_shadows = \ XtOffsetOf \ XtNumber XtOwnSelection_shadows = \ XtOwnSelectionIncremental \ XtDisownSelection XtParseAcceleratorTable_shadows = \ XtInstallAccelerators \ XtInstallAllAccelerators XtParseTranslationTable_shadows = \ XtAugmentTranslations \ XtOverrideTranslations \ XtUninstallTranslations XtPopdown_shadows = \ XtCallbackPopdown \ MenuPopdown XtPopup_shadows = \ XtPopupSpringLoaded \ XtCallbackNone \ XtCallbackNonexclusive \ XtCallbackExclusive \ MenuPopup XtRealizeWidget_shadows = \ XtIsRealized \ XtUnrealizeWidget XtSetArg_shadows = \ XtMergeArgLists XtSetKeyTranslator_shadows = \ XtTranslateKeycode \ XtRegisterCaseConverter \ XtConvertCase XtSetSensitive_shadows = \ XtIsSensitive XtSetValues_shadows = \ XtVaSetValues \ XtSetSubvalues \ XtGetValues \ XtVaGetValues \ XtGetSubvalues \ XtVaGetSubvalues \ XtVaSetSubvalues XtGetKeysymTable_shadows = \ XtKeysymToKeycodeList XtAppSetTypeConverter_shadows = \ XtSetTypeConverter XtAppAddActionHook_shadows = \ XtRemoveActionHook XtSetMultiClickTime_shadows = \ XtGetMultiClickTime XtInsertEventTypeHandler_shadows = \ XtRemoveEventTypeHandler \ XtRegisterExtensionSelector \ XtSetEventDispatcher \ XtDispatchEventToWidget XtLastEventProcessed_shadows = \ XtLastTimestampProcessed XtAppAddSignal_shadows = \ XtNoticeSignal \ XtRemoveSignal XtAddInput_shadows = \ XtAddTimeOut \ XtAddWorkProc XtAppAddBlockHook_shadows = \ XtRemoveBlockHook XtAppInitialize_shadows = \ XtVaAppInitialize XtSessionGetToken_shadows = \ XtSessionReturnToken XtErrorMsg_shadows = \ XtSetErrorMsgHandler \ XtSetWarningMsgHandler \ XtWarningMsg XtError_shadows = \ XtSetErrorHandler \ XtSetWarningHandler \ XtWarning XtGetErrorDatabase_shadows = \ XtGetErrorDatabaseText XtGetSelectionValueIncremental_shadows = \ XtGetSelectionValuesIncremental XtGetSelectionTimeout_shadows = \ XtSetSelectionTimeout XtCreateSelectionRequest_shadows = \ XtSendSelectionRequest \ XtCancelSelectionRequest XtReservePropertyAtom_shadows = \ XtReleasePropertyAtom XtGrabKey_shadows = \ XtUngrabKey \ XtGrabKeyboard \ XtUngrabKeyboard \ XtGrabButton \ XtUngrabButton \ XtGrabPointer \ XtUngrabPointer XtRegisterDrawable_shadows = \ XtUnregisterDrawable XtAppSetExitFlag_shadows = \ XtAppGetExitFlag XtAppLock_shadows = \ XtAppUnlock XtProcessLock_shadows = \ XtProcessUnlock XtOpenApplication_shadows = \ XtVaOpenApplication all: all-am .SUFFIXES: .SUFFIXES: .$(LIB_MAN_SUFFIX) .man $(srcdir)/Makefile.in: $(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) --foreign man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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 install-libmanDATA: $(libman_DATA) @$(NORMAL_INSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libmandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libmandir)" || 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)$(libmandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(libmandir)" || exit $$?; \ done uninstall-libmanDATA: @$(NORMAL_UNINSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libmandir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(libmandir)"; 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-libmanDATA 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: uninstall-libmanDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am 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-libmanDATA 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 tags-am uninstall \ uninstall-am uninstall-libmanDATA .PRECIOUS: Makefile # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # 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: Store_shadows = \ XtCallConverter XtCreateApplicationContext_shadows = \ XtDestroyApplicationContext \ XtWidgetToApplicationContext \ XtToolkitInitialize XtCreatePopupShell_shadows = \ XtVaCreatePopupShell XtCreateWidget_shadows = \ XtVaCreateWidget \ XtCreateManagedWidget \ XtVaCreateManlibXt-1.1.5/man/XtFindFile.man000064401431060000012000000110441252061032400163200ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtFind-File wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtFindFile __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtFindFile \- search for a file using substitutions in the path list .SH SYNTAX .HP String XtFindFile(String \fIpath\fP, Substitution \fIsubstitutions\fP, Cardinal \fInum_substitutions\fP, XtFilePredicate \fIpredicate\fP); .SH ARGUMENTS .IP \fIpath\fP 1i Specifies a path of file names, including substitution characters. .IP \fIsubstitutions\fP 1i Specifies a list of substitutions to make into a path. .IP \fInum_substitutions\fP 1i Specifies the number of substitutions passed in. .IP \fIpredicate\fP 1i Specifies a procedure to call to judge a potential file name, or NULL. .SH DESCRIPTION The \fIpath\fP parameter specifies a string that consists of a series of potential file names delimited by colons. Within each name, the percent character specifies a string substitution selected by the following character. The character sequence ``%:'' specifies an embedded colon that is not a delimiter; the sequence is replaced by a single colon. The character sequence ``%%'' specifies a percent character that does not introduce a substitution; the sequence is replaced by a single percent character. If a percent character is followed by any other character, .ZN XtFindFile looks through the specified \fIsubstitutions\fP for that character in the \fImatch\fP field and if found replaces the percent and match characters with the string in the corresponding \fIsubstitution\fP field. A \fIsubstitution\fP field entry of NULL is equivalent to a pointer to an empty string. If the operating system does not interpret multiple embedded name separators in the path (i.e., ``/'' in POSIX) the same way as a single separator, .ZN XtFindFile will collapse multiple separators into a single one after performing all string substitutions. Except for collapsing embedded separators, the contents of the string substitutions are not interpreted by .ZN XtFindFile and may therefore contain any operating-system-dependent characters, including additional name separators. Each resulting string is passed to the predicate procedure until a string is found for which the procedure returns .ZN True ; this string is the return value for .ZN XtFindFile . If no string yields a .ZN True return from the predicate, .ZN XtFindFile returns NULL. .LP If the \fIpredicate\fP parameter is NULL, an internal procedure that checks if the file exists, is readable, and is not a directory will be used. .LP It is the responsibility of the caller to free the returned string using .ZN XtFree when it is no longer needed. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtWindowOfObject.man000064401431060000012000000000631252061032400175220ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplay.__libmansuffix__ libXt-1.1.5/man/XtPopdown.man000064401431060000012000000107351252061032400162740ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCallback-Popdown wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtPopdown __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtPopdown, XtCallbackPopdown \- unmap a pop-up .SH SYNTAX .HP void XtPopdown(Widget \fIpopup_shell\fP); .HP void XtCallbackPopdown(Widget \fIw\fP, XtPointer \fIclient_data\fP, XtPointer \fIcall_data\fP); .HP void MenuPopdown(String \fIshell_name\fP); .SH ARGUMENTS .IP \fIcall_data\fP 1i Specifies the callback data, which is not used by this procedure. .IP \fIclient_data\fP 1i Specifies a pointer to the .ZN XtPopdownID structure. .ds Ps \ to pop down .IP \fIpopup_shell\fP 1i Specifies the widget shell\*(Ps. .ds Sn down .IP \fIshell_name\fP 1i Specifies the name of the widget shell to pop \*(Sn. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtPopdown function performs the following: .IP \(bu 5 Calls .ZN XtCheckSubclass .\".ZN XtCheckSubclass(popup_shell, popupShellWidgetClass) to ensure popup_shell is a subclass of .ZN Shell . .IP \(bu 5 Checks that popup_shell is currently popped_up; otherwise, it generates an error. .IP \(bu 5 Unmaps popup_shell's window. .IP \(bu 5 If popup_shell's grab_kind is either .ZN XtGrabNonexclusive or .ZN XtGrabExclusive , it calls .ZN XtRemoveGrab . .\".ZN XtRemoveGrab(popup_shell) .IP \(bu 5 Sets pop-up shell's popped_up field to .ZN False . .IP \(bu 5 Calls the callback procedures on the shell's popdown_callback list. .LP The .ZN XtCallbackPopdown function casts the client data parameter to an .ZN XtPopdownID pointer: .LP .Ds 0 typedef struct { Widget shell_widget; Widget enable_widget; } XtPopdownIDRec, *XtPopdownID; .De .LP The shell_widget is the pop-up shell to pop down, and the enable_widget is the widget that was used to pop it up. .LP .ZN XtCallbackPopdown calls .ZN XtPopdown with the specified shell_widget and then calls .ZN XtSetSensitive to resensitize the enable_widget. .LP If a shell name is not given, .ZN MenuPopdown calls .ZN XtPopdown with the widget for which the translation is specified. If a shell_name is specified in the translation table, .ZN MenuPopdown tries to find the shell by looking up the widget tree starting at the parent of the widget in which it is invoked. If it finds a shell with the specified name in the pop-up children of that parent, it pops down the shell; otherwise, it moves up the parent chain as needed. If .ZN MenuPopdown gets to the application top-level shell widget and cannot find a matching shell, it generates an error. .SH "SEE ALSO" XtCreatePopupShell(__libmansuffix__), XtPopup(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP nterface .ds xL Xlib \- C Language libXt-1.1.5/man/XtGetSelectionTimeout.man000064401431060000012000000052751252061032400206050ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Selection-Timeout XtSet-Selection-Timeout wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSelectionTimeout __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtGetSelectionTimeout, XtSetSelectionTimeout \- set and obtain selection timeout values .SH SYNTAX .HP unsigned long XtGetSelectionTimeout(void); .HP void XtSetSelectionTimeout(unsigned long \fItimeout\fP); .SH ARGUMENTS .IP \fItimeout\fP 1i Specifies the selection timeout in milliseconds. .SH DESCRIPTION The .ZN XtGetSelectionTimeout function has been superceded by .ZN XtAppGetSelectionTimeout . .LP The .ZN XtSetSelectionTimeout function has been superceded by .ZN XtAppSetSelectionTimeout . .SH "SEE ALSO" .BR XtAppGetSelectionTimeout (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsObject.man000064401431060000012000000000611252061032400163370ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtChangeManagedSet.man000064401431060000012000000000721252061032400177550ustar00alancstaff00002660200006.so man__libmansuffix__/XtManageChildren.__libmansuffix__ libXt-1.1.5/man/XtTranslateCoords.man000064401431060000012000000054001252061032400177460ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtTranslate-Coords wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtTranslateCoords __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtTranslateCoords \- translate widget coordinates .SH SYNTAX .HP void XtTranslateCoords(Widget \fIw\fP, Position \fIx\fP, \fIy\fP, Position *\fIrootx_return\fP, *\fIrooty_return\fP); .SH ARGUMENTS .IP \fIrootx_return\fP 1i .br .ns .IP \fIrooty_return\fP 1i Returns the root-relative x and y coordinates. .ds Nu widget-relative .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the \*(Nu x and y coordinates. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION While .ZN XtTranslateCoords is similar to the Xlib .ZN XTranslateCoordinates function, it does not generate a server request because all the required information already is in the widget's data structures. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP thout limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtAppPending.man000064401431060000012000000000701252061032400166620ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppNextEvent.__libmansuffix__ libXt-1.1.5/man/XtUnmanageChild.man000064401431060000012000000000721252061032400173360ustar00alancstaff00002660200006.so man__libmansuffix__/XtManageChildren.__libmansuffix__ libXt-1.1.5/man/XtErrorMsg.man000064401431060000012000000072471252061032400164120ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtError-Msg XtSet-Error-Msg-Handler XtSet-Warning-Msg-Handler XtWarning-Msg wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtErrorMsg __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtErrorMsg, XtSetErrorMsgHandler, XtWarningMsg, XtSetWarningMsgHandler \- high-level error handlers .SH SYNTAX .HP void XtErrorMsg(String \fIname\fP, String \fItype\fP, String \fIclass\fP, String \fIdefault\fP, String *\fIparams\fP, Cardinal *\fInum_params\fP); .HP void XtSetErrorMsgHandler(XtErrorMsgHandler \fImsg_handler\fP); .HP void XtSetWarningMsgHandler(XtErrorMsgHandler \fImsg_handler\fP); .HP void XtWarningMsg(String \fIname\fP, String \fItype\fP, String \fIclass\fP, String \fIdefault\fP, String *\fIparams\fP, Cardinal *\fInum_params\fP); .SH ARGUMENTS .ds Cl .IP \fIclass\fP 1i Specifies the resource class\*(Cl. .IP \fIdefault\fP 1i Specifies the default message to use\*(Dm. .IP \fIname\fP 1i Specifies the general kind of error. .IP \fItype\fP 1i Specifies the detailed name of the error. .ds Mh fatal error procedure, which should not return \ or the nonfatal error procedure, which usually returns .IP \fImsg_handler\fP 1i Specifies the new \*(Mh. .IP \fInum_params\fP 1i Specifies the number of values in the parameter list. .IP \fIparams\fP 1i Specifies a pointer to a list of values to be stored in the message. .SH DESCRIPTION The .ZN XtErrorMsg function has been superceded by .ZN XtAppErrorMsg . .LP The .ZN XtSetErrorMsgHandler function has been superceded by .ZN XtAppSetErrorMsgHandler . .LP The .ZN XtSetWarningMsgHandler function has been superceded by .ZN XtAppSetWarningMsgHandler . .LP The .ZN XtWarningMsg function has been superceded by .ZN XtAppWarningMsg .SH "SEE ALSO" .BR XtAppErrorMsg (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAllocateGC.man000064401431060000012000000112031252061032400165730ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtAllocate-GC wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAllocateGC __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAllocateGC \- obtain a sharable GC with modifiable fields .SH SYNTAX .HP GC XtAllocateGC(Widget \fIw\fP, Cardinal \fIdepth\fP, XtGCMask \fIvalue_mask\fP, XGCValues *\fIvalues\fP, XtGCMask \fIdynamic_mask\fP, XtGCMask \fIunused_mask\fP); .SH ARGUMENTS .IP \fIvalues\fP 1i Specifies the actual values for this GC. .ds Vm fields of the values are specified .IP \fIvalue_mask\fP 1i Specifies which \*(Vm. .IP \fIw\fP 1i Specifies the widget. .IP \fIdepth\fP 1i Specifies the depth for which the returned GC is valid, or 0. .IP \fIdynamic_mask\fP 1i Specifies the fields of the GC that will be modified by the caller. .IP \fIunused_mask\fP 1i Specifies the fields of the GC that will not be needed by the caller. .SH DESCRIPTION The .ZN XtAllocateGC function returns a sharable GC that may be modified by the client. The \fIscreen\fP field of the specified widget or of the nearest widget ancestor of the specified object and the specified \fIdepth\fP argument supply the root and drawable depths for which the GC is to be valid. If \fIdepth\fP is zero the depth is taken from the \fIdepth\fP field of the specified widget or of the nearest widget ancestor of the specified object. .LP The \fIvalue_mask\fP argument specifies the fields of the GC that will be initialized with the respective members of the \fIvalues\fP structure. The \fIdynamic_mask\fP argument specifies fields that the caller intends to modify during program execution. The caller must ensure that the corresponding GC field is set prior to each use of the GC. The \fIunused_mask\fP argument specifies fields of the GC that are of no interest to the caller. The caller may make no assumptions about the contents of any fields specified in \fIunused_mask\fP. The caller may assume that at all times all fields not specified in either \fIdynamic_mask\fP or \fIunused_mask\fP have their default value if not specified in \fIvalue_mask\fP or the value specified by \fIvalues\fP. If a field is specified in both \fIvalue_mask\fP and \fPdynamic_mask\fP, the effect is as if it were specified only in \fIdynamic_mask\fP and then immediately set to the value in \fIvalues\fP. If a field is set in \fIunused_mask\fP and also in either \fIvalue_mask\fP or \fIdynamic_mask\fP, the specification in \fIunused_mask\fP is ignored. .LP .ZN XtAllocateGC tries to minimize the number of unique GCs created by comparing the arguments with those of previous calls and returning an existing GC when there are no conflicts. .ZN XtAllocateGC may modify and return an existing GC if it was allocated with a nonzero \fIunused_mask\fP. .SH "SEE ALSO" .ZN XtGetGC .br \fI\*(xT\fP .br \fI\*(xL\fP tAllocateGC(Widget \fIw\fP, Cardinal \fIdepth\fP, XtGCMask \fIvalue_mask\fP, XGCValues *\fIvalues\fP, XtGCMask \fIdynamic_mask\fP, XtGCMask \fIunused_mask\fP); .SH ARGUMENTS .IP \fIvalues\fP 1i Specifies the actual values for this GC. .ds Vm fields of the values are specified .IP \fIvalue_mask\fP 1i Specifies which \*(Vm. .IP \fIw\fP 1i Specifies the widget. .IP \fIdepth\fP 1i SlibXt-1.1.5/man/XtIsWMShell.man000064401431060000012000000000611252061032400164440ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtAppSetTypeConverter.man000064401431060000012000000076471252061032400206040ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Set-Type-Converter XtSet-Type-Converter wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppSetTypeConverter __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppSetTypeConverter, XtSetTypeConverter \- register resource converter .SH SYNTAX .HP void XtAppSetTypeConverter(XtAppContext \fIapp_context\fP, String \fIfrom_type\fP, String \fIto_type\fP, XtConverter \fIconverter\fP, XtConvertArgList \fIconvert_args\fP, Cardinal \fInum_args\fP, XtCacheType \fIcache_type\fP, XtDestructor \fIdestructor\fP); .HP void XtSetTypeConverter(String \fIfrom_type\fP, String \fIto_type\fP, XtConverter \fIconverter\fP, XtConvertArgList \fIconvert_args\fP, Cardinal \fInum_args\fP, XtCacheType \fIcache_type\fP, XtDestructor \fIdestructor\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIconverter\fP 1i Specifies the type converter procedure. .IP \fIconvert_args\fP 1i Specifies how to compute the additional arguments to the converter or NULL. .IP \fIfrom_type\fP 1i Specifies the source type. .IP \fInum_args\fP 1i Specifies the number of additional arguments to the converter or zero. .IP \fIto_type\fP 1i Specifies the destination type. .IP \fIcache_type\fP 1i Specifies whether or not resources produced by this converter are sharable or display-specific and when they should be freed. .IP \fIdestructor\fP 1i Specifies a destroy procedure for resources produced by this conversion, or NULL if no additional action is required to deallocate resources produced by the converter. .SH DESCRIPTION .ZN XtSetTypeConverter registers the specified type converter and destructor in all application contexts created by the calling process, including any future application contexts that may be created. .ZN XtAppSetTypeConverter registers the specified type converter in the single application context specified. If the same \fIfrom_type\fP and \fIto_type\fP are specified in multiple calls to either function, the most recent overrides the previous ones. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtStringConversionWarning.man000064401431060000012000000056521252061032400215120ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtString-Conversion-Warning wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtStringConversionWarning __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtStringConversionWarning \- issue a conversion warning message .SH SYNTAX .HP void XtStringConversionWarning(String \fIsrc\fP, String \fIdst_type\fP); .SH ARGUMENTS .IP \fIsrc\fP 1i Specifies the string that could not be converted. .IP \fIdst_type\fP 1i Specifies the name of the type to which the string could not be converted. .SH DESCRIPTION The .ZN XtStringConversionWarning function issues a warning message with name ``conversionError'', type ``string'', class ``XtToolkitError, and the default message string ``Cannot convert "\fIsrc\fP" to type \fIdst_type\fP''. .LP .ZN XtStringConversionWarning has been replaced by .ZN XtDisplayStringConversionWarning . .SH "SEE ALSO" XtAppAddConverter(__libmansuffix__), XtAppErrorMsg(3t), XtConvert(__libmansuffix__), XtDisplayStringConversionWarning(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP ics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language libXt-1.1.5/man/XtAppGetErrorDatabase.man000064401431060000012000000072021252061032400204600ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Get-Error-Database XtApp-Get-Error-Database-Text wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppGetErrorDatabase __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppGetErrorDatabase, XtAppGetErrorDatabaseText \- obtain error database .SH SYNTAX .HP XrmDatabase *XtAppGetErrorDatabase(\^XtAppContext \fIapp_context\fP); .HP void XtAppGetErrorDatabaseText(XtAppContext \fIapp_context\fP, char *\fIname\fP, char *\fItype\fP, char *\fIclass\fP, char *\fIdefault\fP, char *\fIbuffer_return\fP, int \fInbytes\fP, XrmDatabase \fIdatabase\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIbuffer_return\fP 1i Specifies the buffer into which the error message is to be returned. .ds Cl \ of the error message .IP \fIclass\fP 1i Specifies the resource class\*(Cl. .IP \fIdatabase\fP 1i Specifies the name of the alternative database that is to be used or NULL if the application's database is to be used. .IP \fIdefault\fP 1i Specifies the default message to use\*(Dm. .IP \fIname\fP 1i .br .ns .IP \fItype\fP 1i Specifies the name and type that are concatenated to form the resource name of the error message. .IP \fInbytes\fP 1i Specifies the size of the buffer in bytes. .SH DESCRIPTION The .ZN XtAppGetErrorDatabase function returns the address of the error database. The \*(xI do a lazy binding of the error database and do not merge in the database file until the first call to .ZN XtAppGetErrorDatbaseText . .LP The .ZN XtAppGetErrorDatabaseText returns the appropriate message from the error database or returns the specified default message if one is not found in the error database. .SH "SEE ALSO" XtAppError(__libmansuffix__), XtAppErrorMsg(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRemoveEventTypeHandler.man000064401431060000012000000001021252061032400212300ustar00alancstaff00002660200006.so man__libmansuffix__/XtInsertEventTypeHandler.__libmansuffix__ libXt-1.1.5/man/XtSuperclass.man000064401431060000012000000000611252061032400167610ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtCreateWindow.man000064401431060000012000000064071252061032400172420ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCreate-Window wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreateWindow __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCreateWindow \- window creation convenience function .SH SYNTAX .HP void XtCreateWindow(Widget \fIw\fP, unsigned int \fIwindow_class\fP, Visual *\fIvisual\fP, XtValueMask \fIvalue_mask\fP, XSetWindowAttributes *\fIattributes\fP); .SH ARGUMENTS .IP \fIattributes\fP 1i Specifies the window attributes to use in the .ZN XCreateWindow call. .ds Vm attribute fields to use .IP \fIvalue_mask\fP 1i Specifies which \*(Vm. .IP \fIvisual\fP 1i Specifies the visual type (usually .ZN CopyFromParent ). .ds Wi that is used to set the x,y coordinates and so on .IP \fIw\fP 1i Specifies the widget \*(Wi. .IP \fIwindow_class\fP 1i Specifies the Xlib window class (for example, .ZN InputOutput , .ZN InputOnly , or .ZN CopyFromParent ). .SH DESCRIPTION The .ZN XtCreateWindow function calls the Xlib .ZN XCreateWindow function with values from the widget structure and the passed parameters. Then, it assigns the created window to the widget's window field. .LP .ZN XtCreateWindow evaluates the following fields of the .ZN Core widget structure: .IP \(bu 5 depth .IP \(bu 5 screen .IP \(bu 5 parent -> core.window .IP \(bu 5 x .IP \(bu 5 y .IP \(bu 5 width .IP \(bu 5 height .IP \(bu 5 border_width .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGetDisplays.man000064401431060000012000000052161252061032400170740ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Displays wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetDisplays __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetDisplays \- retrieve a list of displays associated with an application context .SH SYNTAX .HP void XtGetDisplays(XtAppContext \fIapp_context\fP, Display ***\fIdpy_return\fP, Cardinal* \fInum_dpy_return\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIdpy_return\fP 1i Returns a list of open X display connections in the specified application context. .IP \fInum_dpy_return\fP 1i Returns the count of open X display connections in \fIdpy_return\fP. .SH DESCRIPTION To free the list of displays, use .ZN XtFree . .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtIsRealized.man000064401431060000012000000000711252061032400166710ustar00alancstaff00002660200006.so man__libmansuffix__/XtRealizeWidget.__libmansuffix__ libXt-1.1.5/man/XtVaGetValues.man000064401431060000012000000000651252061032400170270ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtIsRectObj.man000064401431060000012000000000611252061032400164610ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtDispatchEvent.man000064401431060000012000000000701252061032400173760ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppNextEvent.__libmansuffix__ libXt-1.1.5/man/XtCreateApplicationContext.man000064401431060000012000000070161252061032400216000ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCreate-Application-Context XtDestroy-Application-Context XtWidget-To-Application-Context XtToolkit-Initialize wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreateApplicationContext __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCreateApplicationContext, XtDestroyApplicationContext, XtWidgetToApplicationContext, XtToolkitInitialize \- create, destroy, and obtain an application context .SH SYNTAX .HP XtAppContext XtCreateApplicationContext(void); .HP void XtDestroyApplicationContext(XtAppContext \fIapp_context\fP); .HP XtAppContext XtWidgetToApplicationContext(Widget \fIw\fP); .HP void XtToolkitInitialize(void); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .ds wi that you want the application context for .IP \fIw\fP 1i Specifies the widget \*(Wi. .SH DESCRIPTION The .ZN XtCreateApplicationContext function returns an application context, which is an opaque type. Every application must have at least one application context. .LP The .ZN XtDestroyApplicationContext function destroys the specified application context as soon as it is safe to do so. If called from with an event dispatch (for example, a callback procedure), .ZN XtDestroyApplicationContext does not destroy the application context until the dispatch is complete. .LP The .ZN XtWidgetToApplicationContext function returns the application context for the specified widget. .LP The .ZN XtToolkitInitialize function initializes the Intrinsics internals. If .ZN XtToolkitInitialize was previously called it returns immediately. .LP .SH "SEE ALSO" XtDisplayInitialize(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtInsertRawEventHandler.man000064401431060000012000000000731252061032400210560ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddEventHandler.__libmansuffix__ libXt-1.1.5/man/XtManageChildren.man000064401431060000012000000210311252061032400174760ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtManage-Children XtManage-Child XtUnmanage-Children XtUnmanage-Child XtChange-ManagedSet XtIs-Managed wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtManageChildren __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtManageChildren, XtManageChild, XtUnmanageChildren, XtUnmanageChild, XtChangeManagedSet, XtIsManaged \- manage and unmanage children .SH SYNTAX typedef Widget *WidgetList; .HP void XtManageChildren(WidgetList \fIchildren\fP, Cardinal \fInum_children\fP); .HP void XtManageChild(Widget \fIchild\fP); .HP void XtUnmanageChildren(WidgetList \fIchildren\fP, Cardinal \fInum_children\fP); .HP void XtUnmanageChild(Widget \fIchild\fP); .HP void XtChangeManagedSet(WidgetList \fIunmanage_children\fP, Cardinal \fInum_unmanage_children\fP, XtDoChangeProc \fIdo_change_proc\fP, XtPointer \fIclient_data\fP, WidgetList \fImanage_children\fP, Cardinal \fInum_manage_children\fP); .HP Boolean XtIsManaged(Widget \fIwidget\fP); .SH ARGUMENTS .IP \fIchild\fP 1i Specifies the child. .IP \fIchildren\fP 1i Specifies a list of child widgets. .IP \fInum_children\fP 1i Specifies the number of children. .IP \fIwidget\fP 1i Specifies the widget. .IP \fImanage_children\fP 1i Specifies the list of widget children to add to the managed set. .IP \fInum_manage_children\fP 1i Specifies the number of entries in the manage_children list. .IP \fIunmanage_children\fP 1i Specifies the list of widget children to remove from the managed set. .IP \fInum_unmanage_children\fP 1i Specifies the number of entries in the unmanage_children list. .IP \fIdo_change_proc\fP 1i Specifies the post unmanage, pre manage hook procedure to invoke. .IP \fIclient_data\fP 1i Specifies the client data to be passed to the hook procedure. .SH DESCRIPTION The .ZN XtManageChildren function performs the following: .IP \(bu 5 Issues an error if the children do not all have the same parent or if the parent is not a subclass of .ZN compositeWidgetClass . .IP \(bu 5 Returns immediately if the common parent is being destroyed; otherwise, for each unique child on the list, .ZN XtManageChildren ignores the child if it already is managed or is being destroyed and marks it if not. .IP \(bu 5 If the parent is realized and after all children have been marked, it makes some of the newly managed children viewable: .RS .IP \- 5 Calls the change_managed routine of the widgets' parent. .IP \- 5 Calls .ZN XtRealizeWidget on each previously unmanaged child that is unrealized. .IP \- 5 Maps each previously unmanaged child that has map_when_managed .ZN True . .RE .LP Managing children is independent of the ordering of children and independent of creating and deleting children. The layout routine of the parent should consider children whose managed field is .ZN True and should ignore all other children. Note that some composite widgets, especially fixed boxes, call .ZN XtManageChild from their insert_child procedure. .LP If the parent widget is realized, its change_managed procedure is called to notify it that its set of managed children has changed. The parent can reposition and resize any of its children. It moves each child as needed by calling .ZN XtMoveWidget , which first updates the x and y fields and then calls .ZN XMoveWindow if the widget is realized. .LP The .ZN XtManageChild function constructs a .ZN WidgetList of length one and calls .ZN XtManageChildren . .LP The .ZN XtUnmanageChildren function performs the following: .IP \(bu 5 Issues an error if the children do not all have the same parent or if the parent is not a subclass of .ZN compositeWidgetClass . .IP \(bu 5 Returns immediately if the common parent is being destroyed; otherwise, for each unique child on the list, .ZN XtUnmanageChildren performs the following: .RS .IP \- 5 Ignores the child if it already is unmanaged or is being destroyed and marks it if not. .IP \- 5 If the child is realized, it makes it nonvisible by unmapping it. .RE .IP \(bu 5 Calls the change_managed routine of the widgets' parent after all children have been marked if the parent is realized. .LP .ZN XtUnmanageChildren does not destroy the children widgets. Removing widgets from a parent's managed set is often a temporary banishment, and, some time later, you may manage the children again. .LP The .ZN XtUnmanageChild function constructs a widget list of length one and calls .ZN XtUnmanageChildren . .LP The .ZN XtChangeManagedSet function performs the following: .IP \(bu 5 Issues an error if the widgets specified in the \fImanage_children\fP and the \fIunmanage_children\fP lists to no all have the same parent, or if that parent is not a subclass of compositeWidgetClass. .IP \(bu 5 Returns immediately if the common parent is being destroyed. .IP \(bu 5 If no .ZN CompositeClassExtension is defined, or a .ZN CompositeClassExtension is defined but with an \fIallows_change_managed_set\fP field with a value of .ZN False , and .ZN XtChangeManagedSet was invoked with a non-NULL \fIdo_change_proc\fP procedure then .ZN XtChangeManagedSet performs the following: .RS .IP \- 5 Calls .ZN XtUnmanageChildren (\fIunmanage_children\fP, \fInum_unmanage_children\fP). .IP \- 5 Calls the \fIdo_change_proc\fP specified. .IP \- 5 Calls .ZN XtManageChildren (\fImanage_children\fP, \fInum_manage_children\fP) and then returns immediately. .RE .IP \(bu 5 Otherwise, if a .ZN CompositeClassExtension is defined with an \fIallows_change_managed_set\fP field with a value of .ZN True , or if no .ZN CompositeClassExtension is defined, and .ZN XtChangeManagedSet was invoked with a NULL \fIdo_change_proc\fP procedure, then the following is performed: .RS .IP \- 5 For each child on the \fIunmanage_children\fP list; if the child is already unmanaged or is being destroyed it is ignored, otherwise it is marked as being unmanaged and if it is realized it is made nonvisible by being unmapped. .IP \- 5 If the \fIdo_change_proc\fP procedure is non-NULL then it is invoked as specified. .IP \- 5 For each child on the \fImanage_children\fP list; if the child is already managed or it is being destroyed it is ignored, otherwise it is marked as managed .RE .IP \(bu 5 If the parent is realized and after all children have been marked, the change_managed method of the parent is invoked and subsequently some of the newly managed children are made viewable by: .RS .IP \- 5 Calling .ZN XtRealizeWidget on each of the previously unmanaged child that is unrealized. .IP \- 5 Mapping each previously unmanaged child that has \fImap_when_managed\fP .ZN True . .RE .LP The .ZN XtIsManaged function returns .ZN True if the specified widget is of class RectObj or any subclass thereof and is managed, or .ZN False otherwise. .SH "SEE ALSO" XtMapWidget(__libmansuffix__), XtRealizeWidget(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP ot. .IP \(bu 5 If the parent is realized and after all children have been marked, it makes some of the newly managed children viewable: .RS .IP \- 5 Calls the change_managed routine of the widgets' parent. .IP \- 5 Calls .ZN XtRealizeWidget on each previously unmanaged child that is unrealized. .IP \- 5 Maps each previously unmanaged child that has map_when_managed .ZN True . .RE .LP Managing children is independent of the ordering of children and independent of creating and deletinlibXt-1.1.5/man/XtAppLock.man000064401431060000012000000050101252061032400161650ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Lock XtApp-Unlock wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppLock __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppLock, XtAppUnlock \- lock and unlock application context .SH SYNTAX .HP void XtAppLock(XtAppContext \fIapp_context\fP); .HP void XtAppUnlock(XtAppContext \fIapp_context\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .SH DESCRIPTION .ZN XtAppLock locks the application context including all its related displays and widgets. .LP .ZN XtAppUnlock unlocks the application context. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtDisownSelection.man000064401431060000012000000000701252061032400177460ustar00alancstaff00002660200006.so man__libmansuffix__/XtOwnSelection.__libmansuffix__ libXt-1.1.5/man/XtPopupSpringLoaded.man000064401431060000012000000000611252061032400202340ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopup.__libmansuffix__ libXt-1.1.5/man/XtLastEventProcessed.man000064401431060000012000000057551252061032400204310ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtLast-Event-Processed XtLast-Timestamp-Processed wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtLastEventProcessed __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtLastEventProcessed, XtLastTimestampProcessed \- last event, last timestamp processed .SH SYNTAX .HP XEvent* XtLastEventProcessed(Display* \fIdisplay\fP); .HP Time XtLastTimestampProcessed(Display* \fIdisplay\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the open display connection. .SH DESCRIPTION .ZN XtLastEventProcessed returns the last event passed to .ZN XtDispatchEvent for the specified display and NULL if there has been no event. The client must not modify the contents of the returned event. .LP .ZN XtLastTimestampProcessed returns the timestamp of the last .ZN KeyPress , .ZN KeyRelease , .ZN ButtonPress , .ZN ButtonRelease , .ZN MotionNotify , .ZN EnterNotify , .ZN LeaveNotify , .ZN PropertyNotify , or .ZN SelectionClear event that has been passed to .ZN XtDispatchEvent for the specified display and zero if there has been no such event. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtUnmanageChildren.man000064401431060000012000000000721252061032400200430ustar00alancstaff00002660200006.so man__libmansuffix__/XtManageChildren.__libmansuffix__ libXt-1.1.5/man/XtSetErrorMsgHandler.man000064401431060000012000000000641252061032400203520ustar00alancstaff00002660200006.so man__libmansuffix__/XtErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtInsertEventTypeHandler.man000064401431060000012000000201571252061032400212530ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtInsert-Event-Type-Handler XtRemove-Event-Type-Handler XtSet-Event-Dispatcher XtDispatch-Event-To-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtInsertEventTypeHandler __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtInsertEventTypeHandler, XtRemoveEventTypeHandler, XtRegisterExtensionSelector, XtSetEventDispatcher, XtDispatchEventToWidget \- extension event handling .SH SYNTAX .HP void XtInsertEventTypeHandler(Widget \fIwidget\fP, int \fIevent_type\fP, XtPointer \fIselect_data\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP, XtListPosition \fIposition\fP); .HP void XtRemoveEventTypeHandler(Widget \fIwidget\fP, int \fIevent_type\fP, XtPointer \fIselect_data\fP, XtEventHandler \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRegisterExtensionSelector(Display* \fIdisplay\fP, int \fImin_event_type\fP, int \fImax_event_type\fP, XtExtensionSelectProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP XtEventDispatchProc XtSetEventDispatcher(Widget \fIwidget\fP, int \fIevent_type\fP, XtEventDispatchProc \fIproc\fP); .HP Boolean XtDispatchEventToWidget(Widget \fIwidget\fP, XEvent* \fIevent\fP); .SH ARGUMENTS .IP \fIwidget\fP 1i Specifies the widget for this event handler. Must be of class Core or any subclass thereof. .IP \fIevent_type\fP 1i Specifies the event type. .IP \fIselect_data\fP 1i Specifies data used to select or deselect events from the server. .IP \fIproc\fP 1i Specifies the proc. .IP \fIclient_data\fP 1i Specifies additional data to be passed to the event handler. .IP \fIposition\fP 1i Specifies when the event handler is to be called relative to other previously registered handlers. .IP \fIdisplay\fP 1i Specifies the display. .IP \fImin_event_type,\ max_event_type\fP 1i Specifies the range of event types for this extension. .IP \fIevent\fP 1i Specifies a pointer to the event to be dispatched. .SH DESCRIPTION The .ZN XtInsertEventTypeHandler function registers a procedure with the dispatch mechanism that is to be called when an event that matches the specified \fIevent_type\fP is dispatched to the specified \fIwidget\fP. .LP If \fIevent_type\fP is one of the core X protocol events then \fIselect_data\fP must be a pointer to a value of type .ZN EventMask , indicating the event mask to be used to select for the desired event. This event mask will be included in the value returned by .ZN XtBuildEventMask . If the widget is realized .ZN XtInsertEventTypeHandler calls .ZN XSelectInput if necessary. Specifying NULL for \fIselect_data\fP is equivalent to specifying a pointer to an event mask containing 0. This is similar to the .ZN XtInsertRawEventHandler function. .LP If \fIevent_type\fP specifies an extension event type then the semantics of the data pointed to by \fIselect_data\fP are defined by the extension selector registered for the specified event type. .LP In either case the Intrinsics are not required to copy the data pointed to by \fIselect_data\fP, so the caller must ensure that it remains valid as long as the event handler remains registered with this value of \fIselect_data\fP. .LP The \fIposition\fP argument allows the client to control the order of the invocation of event handlers registered for the same event type. If the client does not care about the order, it should normally specify .ZN XtListTail , which registers this event handler after any previously registered handlers for this event type. .LP The .ZN XtRemoveEventTypeHandler function unregisters an even handler registered with .ZN XtInsertEventTypeHandler for the specified event type. The request is ignored if \fIclient_data\fP does not match the value given with the handler was registered. .LP If \fIevent_type\fP specifies on of the core X protocol events, \fIselect_data\fP must be a pointer to a value of type .ZN EventMask , indicating the mask to be used to deselect for the appropriate event. If the widget is realized, .ZN XtRemoveEventTypeHandler calls .ZN XSelectInput if necessary. Specifying NULL for \fIselect_data\fP is equivalent to specifying a pointer to an event mask containing 0. This is similar to the .ZN XtRemoveRawEventHandler function. .LP If \fIevent_type\fP specifies an extension event type then the semantics of the data pointed to by \fIselect_data\fP are defined by the extension selector registered for the specified event type. .LP The .ZN XtRegisterExtensionSelector function registers a procedure to arrange for the delivery of extension events to widgets. .LP If \fImin_event_type\fP and \fImax_event_type\fP match the parameters to a previous call to .ZN XtRegisterExtensionSelector for the same display, the \fIproc\fP and \fIclient_data\fP replace the previously registered values. If the range specified by \fImin_event_type\fP and \fImax_event_type\fP overlaps the range of the parameters to a previous call for the same display in any other way, an error results. .LP The .ZN XtSetEventDispatcher function registers the event dispatcher procedure specified by \fIproc\fP for events with the type \fIevent_type\fP. The previously registered dispatcher (or the default dispatcher if there was no previously registered dispatcher) is returned. If \fIproc\fP is NULL, the default procedure is restored for the specified type. .LP In the future, when .ZN XtDispatchEvent is called with an event of \fIevent_type\fP, the specified \fIproc\fP (or the default dispatcher) will be invoked to determine a widget ot which to dispatch the event. .LP The .ZN XtDispatchEventToWidget function scans the list of registered event handlers for the specified widget and calls each handler that has been registered for the specified event type, subject to the \fIcontinue_to_dispatch\fP value returned by each handler. The Intrinsics behave as if event handlers were registered at the head of the list for .ZN Expose , .ZN NoExpose , .ZN GraphicsExpose , and .ZN VisibilityNotify events to invoke the widget's expose procedure according to the exposure compression rules and to update the widget's \fIvisible\fP field if \fIvisible_interest\fP is .ZN True . These internal event handlers never set \fIcontinue_to_dispatch\fP to .ZN False . .LP .ZN XtDispatchEventToWidget returns .ZN True if any event handler was called and .ZN False otherwise. .LP .SH "SEE ALSO" XtGetKeyboardFocusWidget(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtInitialize.man000064401431060000012000000067711252061032400167540ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw Xt-Initialize .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtInitialize __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtInitialize \- initialize .SH SYNTAX .HP Widget XtInitialize(String \fIshell_name\fP, String \fIapplication_class\fP, XrmOptionDescRec* \fIoptions\fP, Cardinal \fInum_options\fP, int* \fIargc\fP, char** \fIargv\fP); .SH ARGUMENTS .IP \fIshell_name\fP 1i Specifies the name of the created shell widget. .ds Ac , which usually is the generic name for all instances of this application .IP \fIapplication_class\fP 1i Specifies the class name of this application\*(Ac. .IP \fIoptions\fP 1i Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to .ZN XrmParseCommand . For further information, see \fI\*(xL\fP. .IP \fInum_options\fP 1i Specifies the number of entries in the options list. .IP \fIargc\fP 1i Specifies a pointer to the number of command line parameters. .IP \fIargv\fP 1i Specifies the command line parameters. .SH DESCRIPTION .ZN XtInitialize calls .ZN XtToolkitInitialize followed by .ZN XtOpenDisplay with \fIdisplay_string\fP NULL and \fIapplication_name\fP NULL, and finally calls .ZN XtAppCreateShell with \fIapplication_name\fP NULL, \fIwidget_class\fP .ZN applicationShellWidgetClass , and the specified \fIargs\fP and \fInum_args\fP and returns the created shell. The semantics of calling .ZN XtInitialize more than once are undefined. This routine has been replaced by .ZN XtAppInitialize . .SH "SEE ALSO" .BR XtAppInitialize (__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtNoticeSignal.man000064401431060000012000000000701252061032400172140ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddSignal.__libmansuffix__ libXt-1.1.5/man/XtUngrabKeyboard.man000064401431060000012000000000631252061032400175360ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtUnrealizeWidget.man000064401431060000012000000000711252061032400177400ustar00alancstaff00002660200006.so man__libmansuffix__/XtRealizeWidget.__libmansuffix__ libXt-1.1.5/man/XtDirectConvert.man000064401431060000012000000000631252061032400174120ustar00alancstaff00002660200006.so man__libmansuffix__/XtConvert.__libmansuffix__ libXt-1.1.5/man/XtNew.man000064401431060000012000000000621252061032400153670ustar00alancstaff00002660200006.so man__libmansuffix__/XtMalloc.__libmansuffix__ libXt-1.1.5/man/XtAppGetSelectionTimeout.man000064401431060000012000000061761252061032400212470ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Get-Selection-Timeout XtApp-Set-Selection-Timeout wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppGetSelectionTimeout __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppGetSelectionTimeout, XtAppSetSelectionTimeout \- set and obtain selection timeout values .SH SYNTAX .HP unsigned long XtAppGetSelectionTimeout(XtAppContext \fIapp_context\fP); .HP void XtAppSetSelectionTimeout(XtAppContext \fIapp_context\fP, unsigned long \fItimeout\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fItimeout\fP 1i Specifies the selection timeout in milliseconds. .SH DESCRIPTION The .ZN XtAppGetSelectionTimeout function returns the current selection timeout value, in milliseconds. The selection timeout is the time within which the two communicating applications must respond to one another. The initial timeout value is set by the .ZN selectionTimeout application resource, or, if .ZN selectionTimeout is not specified, it defaults to five seconds. .LP The .ZN XtAppSetSelectionTimeout function sets the \*(xI's selection timeout mechanism. Note that most applications should not set the selection timeout. .SH "SEE ALSO" XtOwnSelection(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtNextEvent.man000064401431060000012000000067271252061032400165740ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtNext-Event XtPeek-Event XtProcess-Event XtMain-Loop wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtNextEvent __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtNextEvent, XtPending, XtPeekEvent, XtProcessEvent, XtMainLoop \- query and process events and input .SH SYNTAX .HP void XtNextEvent(XEvent *\fIevent_return\fP); .HP Boolean XtPeekEvent(XEvent *\fIevent_return\fP); .HP Boolean XtPending(void); .HP void XtProcessEvent(XtInputMask \fImask\fP); .HP void XtMainLoop(void); .SH ARGUMENTS .IP \fIevent\fP 1i Specifies a pointer to the event structure that is to be dispatched to the appropriate event handler. .IP \fIevent_return\fP 1i Returns the event information to the specified event structure. .IP \fImask\fP 1i Specifies what types of events to process. The mask is the bitwise inclusive OR of any combination of .ZN XtIMXEvent , .ZN XtIMTimer , .ZN XtIMAlternateInput , and .ZN XtIMSignal . As a convenience, the \*(tk defines the symbolic name .ZN XtIMAll to be the bitwise inclusive OR of all event types. .SH DESCRIPTION .ZN XtNextEvent has been replaced by .ZN XtAppNextEvent . .LP .ZN XtPeekEvent has been replaced by .ZN XtAppPeekEvent . .LP .ZN XtPending has been replaced by .ZN XtAppPending . .LP .ZN XtProcessEvent has been replaced by .ZN XtAppProcessEvent . .LP .ZN XtMainLoop has been replaced by .ZN XtAppMainLoop . .SH "SEE ALSO" XtAppNextEvent(3xt), XtAppPending(__libmansuffix__), XtAppPeekEvent(__libmansuffix__), XtAppProcessEvent(__libmansuffix__), XtAppMainLoop(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP C Language Interface .ds xL Xlib \- C LalibXt-1.1.5/man/XtDatabase.man000064401431060000012000000000751252061032400163460ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplayInitialize.__libmansuffix__ libXt-1.1.5/man/XtUngrabPointer.man000064401431060000012000000000631252061032400174160ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtMainLoop.man000064401431060000012000000000651252061032400163570ustar00alancstaff00002660200006.so man__libmansuffix__/XtNextEvent.__libmansuffix__ libXt-1.1.5/man/XtGrabButton.man000064401431060000012000000000631252061032400167060ustar00alancstaff00002660200006.so man__libmansuffix__/XtGrabKey.__libmansuffix__ libXt-1.1.5/man/XtHooksOfDisplay.man000064401431060000012000000050651252061032400175440ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtHooks-Of-Display XtGet-Displays wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtHooksOfDisplay __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtHooksOfDisplay \- external agent access points .SH SYNTAX .HP Widget XtHooksOfDisplay(Display* \fIdisplay\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the desired display. .SH DESCRIPTION The class of this object is a private, implementation dependent, subclass of Object. The hook object has no parent. The resources of this object are the callback lists for hooks and the read-only resources for getting a list of parentless shells. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppPeekEvent.man000064401431060000012000000000701252061032400171640ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppNextEvent.__libmansuffix__ libXt-1.1.5/man/XtGetSelectionRequest.man000064401431060000012000000062111252061032400205760ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Selection-Request wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetSelectionRequest __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetSelectionRequest \- retrieve the event that triggered the XtConvertSelectionProc .SH SYNTAX .HP XSelectionRequestEvent* XtGetSelectionRequest(Widget \fIw\fP, Atom \fIselection\fP, XtRequestId \fIrequest_id\fP); .SH ARGUMENTS .IP \fIw\fP 1i Specifies the widget. .IP \fIselection\fP 1i Specifies the selection being processed. .IP \fIrequest_id\fP 1i Specifies the requestor id in the case of incremental selections, or NULL in the case of atomic transfers. .SH DESCRIPTION .ZN XtGetSelectionRequest may only be called from within an .ZN XtConvertSelectionProc procedure and returns a pointer to the .ZN SelectionRequest event that caused the conversion procedure to be invoked. \fIRequest_id\fP specifies a unique id for the individual request in the case that multiple incremental transfers are outstanding. For atomic transfers, \fIrequest_id\fP must be specified as NULL. If no .ZN SelectionRequest event is being processed for the specified \fIwidget\fP, \fIselection\fP, and \fIrequest_id\fP, .ZN XtGetSelectionRequest returns NULL. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtRemoveAllCallbacks.man000064401431060000012000000000671252061032400203310ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddCallback.__libmansuffix__ libXt-1.1.5/man/XtOpenDisplay.man000064401431060000012000000000751252061032400170710ustar00alancstaff00002660200006.so man__libmansuffix__/XtDisplayInitialize.__libmansuffix__ libXt-1.1.5/man/XtIsConstraint.man000064401431060000012000000000611252061032400172550ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtGetSelectionValuesIncremental.man000064401431060000012000000001101252061032400225570ustar00alancstaff00002660200006.so man__libmansuffix__/XtGetSelectionValueIncremental.__libmansuffix__ libXt-1.1.5/man/XtGetValues.man000064401431060000012000000000651252061032400165400ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtDisplayStringConversionWarning.man000064401431060000012000000057721252061032400230430ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtDisplay-String-Conversion-Warning wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtDisplayStringConversionWarning __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtDisplayStringConversionWarning \- issue a conversion warning message .SH SYNTAX .HP void XtDisplayStringConversionWarning(Display* \fIdisplay\fP, String \fIfrom_value\fP, \fIto_type\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the display connection with which the conversion is associated. .IP \fIfrom_value\fP 1i Specifies the string that could not be converted. .IP \fIto_type\fP 1i Specifies the target representation type requested. .SH DESCRIPTION The .ZN XtDisplayStringConversionWarning function issues a warning message using .ZN XtAppWarningMsg with name ``conversionError'', type ``string'', class ``XtToolkitError, and the default message string ``Cannot convert "\fIfrom_value\fP" to type \fIto_type\fP''. .LP To issue other types of warning or error messages, the type converter should use .ZN XtAppWarningMsg or .ZN XtAppErrorMsg . .SH "SEE ALSO" XtAppWarningMsg(3t) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtVaCreatePopupShell.man000064401431060000012000000000741252061032400203470ustar00alancstaff00002660200006.so man__libmansuffix__/XtCreatePopupShell.__libmansuffix__ libXt-1.1.5/man/XtRemoveCallback.man000064401431060000012000000000671252061032400175150ustar00alancstaff00002660200006.so man__libmansuffix__/XtAddCallback.__libmansuffix__ libXt-1.1.5/man/XtRemoveSignal.man000064401431060000012000000000701252061032400172300ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddSignal.__libmansuffix__ libXt-1.1.5/man/XtSetWMColormapWindows.man000064401431060000012000000064301252061032400207120ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtSet-WMColormap-Windows wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtSetWMColormapWindows __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtSetWMColormapWindows \- Set the value of the WM_COLORMAP_WINDOWS property .SH SYNTAX .HP void XtSetWMColormapWindows(Widget \fIwidget\fP, Widget* \fIlist\fP, Cardinal \fIcount\fP); .SH ARGUMENTS .IP \fIwidget\fP 1i Specifies the widget on whose window the WM_COLORMAP_WINDOWS property will be stored. Must be of class Core or any subclass thereof. .IP \fIlist\fP 1i Specifies a list of widgets whose windows are are potentially to be listed in the WM_COLORMAP_WINDOWS property. .IP \fIcount\fP 1i Specifies the number of widgets in \fIlist\fP. .SH DESCRIPTION .ZN XtSetWMColormapWindows returns immediately if \fIwidget\fP is not realized or if \fIcount\fP is zero. Otherwise, .ZN XtSetWMColormapWindows constructs an ordered list of windows by examining each widget in \fIlist\fP in turn and ignoring the widget if it is not realized, or adding the widget's window to the window list if the widget is realized and its colormap resource is different from the colormap resources of all widgets whose windows are already on the window list. .LP Finally, .ZN XtSetWMColormapWindows stores the resulting window list in the WM_COLORMAP_WINDOWS property on the specified widget's window. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtVaAppCreateShell.man000064401431060000012000000000721252061032400177620ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppCreateShell.__libmansuffix__ libXt-1.1.5/man/XtInstallAllAccelerators.man000064401431060000012000000001011252061032400212170ustar00alancstaff00002660200006.so man__libmansuffix__/XtParseAcceleratorTable.__libmansuffix__ libXt-1.1.5/man/XtGetApplicationResources.man000064401431060000012000000076301252061032400214440ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Application-Resources, XtVa-Get-Application-Resources wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetApplicationResources __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetApplicationResources, XtVaGetApplicationResources \- obtain application resources .SH SYNTAX .HP void XtGetApplicationResources(Widget \fIw\fP, XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP void XtVaGetApplicationResources(Widget \fIw\fP, XtPointer \fIbase\fP, XtResourceList \fIresources\fP, Cardinal \fInum_resources\fP, ...\^); .SH ARGUMENTS .ds Al to override resources obtained from the resource database .IP \fIargs\fP 1i Specifies the argument list \*(Al. .ds Ba written .IP \fIbase\fP 1i Specifies the base address of the subpart data structure where the resources should be \*(Ba. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fInum_resources\fP 1i Specifies the number of resources in the resource list. .IP \fIresources\fP 1i Specifies the resource list for the subpart. .ds Wi that wants resources for a subpart \ or that identifies the resource database to search .IP \fIw\fP 1i Specifies the widget \*(Wi. .IP \fI...\fP 1i Specifies the variable arguments \*(Al. .SH DESCRIPTION The .ZN XtGetApplicationResources function first uses the passed widget, which is usually an application shell, to construct a resource name and class list, Then, it retrieves the resources from the argument list, the resource database, or the resource list default values. After adding base to each address, .ZN XtGetApplicationResources copies the resources into the address given in the resource list. If args is NULL, num_args must be zero. However, if num_args is zero, the argument list is not referenced. The portable way to specify application resources is to declare them as members of a structure and pass the address of the structure as the base argument. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCallbackPopdown.man000064401431060000012000000000631252061032400177020ustar00alancstaff00002660200006.so man__libmansuffix__/XtPopdown.__libmansuffix__ libXt-1.1.5/man/XtRemoveInput.man000064401431060000012000000000671252061032400171200ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppAddInput.__libmansuffix__ libXt-1.1.5/man/XtSetErrorHandler.man000064401431060000012000000000611252061032400177000ustar00alancstaff00002660200006.so man__libmansuffix__/XtError.__libmansuffix__ libXt-1.1.5/man/XtAppCreateShell.man000064401431060000012000000076661252061032400175130ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Create-Shell XtVa-App-Create-Shell wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppCreateShell __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppCreateShell, XtVaAppCreateShell \- create top-level widget instance .SH SYNTAX .HP Widget XtAppCreateShell(String \fIapplication_name\fP, String \fIapplication_class\fP, WidgetClass \fIwidget_class\fP, Display *\fIdisplay\fP, ArgList \fIargs\fP, Cardinal \fInum_args\fP); .HP Widget XtVaAppCreateShell(String \fIapplication_name\fP, String \fIapplication_class\fP, WidgetClass \fIwidget_class\fP, Display *\fIdisplay\fP, ...\^); .SH ARGUMENTS .IP \fIapplication_name\fP 1i Specifies the name of the application instance. .ds Ac , which usually is the generic name for all instances of this application .IP \fIapplication_class\fP 1i Specifies the class name of this application\*(Ac. .ds Wc \ that the application top-level widget should be .IP \fIwidget_class\fP 1i Specifies the widget class\*(Wc. .ds Di \ from which to get the resources .IP \fIdisplay\fP 1i Specifies the display\*(Di. .IP \fIargs\fP 1i Specifies the argument list\*(Di. .IP \fInum_args\fP 1i Specifies the number of arguments in the argument list. .IP \fI...\fP 1i Specifies the variable argument list\*(Di. .SH DESCRIPTION The .ZN XtAppCreateShell function saves the specified application name and application class for qualifying all widget resource specifiers. The application name and application class are used as the left-most components in all widget resource names for this application. .ZN XtAppCreateShell should be used to create a new logical application within a program or to create a shell on another display. In the first case, it allows the specification of a new root in the resource hierarchy. In the second case, it uses the resource database associated with the other display. .LP Note that the widget returned by .ZN XtAppCreateShell has the \s-1WM_COMMAND\s+1 property set for session managers (see Chapter 4). .SH "SEE ALSO" XtCreateWidget(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtGrabKey.man000064401431060000012000000160241252061032400161670ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGrab-Key XtUngrab-Key XtGrab-Keyboard XtUngrab-Keyboard XtGrab-Button XtUngrab-Button XtGrab-Pointer XtUngrab-Pointer wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGrabKey __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGrabKey, XtUngrabKey, XtGrabKeyboard, XtUngrabKeyboard, XtGrabButton, XtUngrabButton, XtGrabPointer, XtUngrabPointer \- manage grabs .SH SYNTAX .HP void XtGrabKey(Widget \fIwidget\fP, KeyCode \fIkeycode\fP, Modifiers \fImodifiers\fP, Boolean \fIowner_events\fP, int \fIpointer_mode\fP, int \fIkeyboard_mode\fP); .HP void XtUngrabKey(Widget \fIwidget\fP, KeyCode \fIkeycode\fP, Modifiers \fImodifiers\fP); .HP int XtGrabKeyboard(Widget \fIwidget\fP, Boolean \fIowner_events\fP, int \fIpointer_mode\fP, int \fIkeyboard_mode\fP, Time \fItime\fP); .HP void XtUngrabKeyboard(Widget \fIwidget\fP, Time \fItime\fP); .HP void XtGrabButton(Widget \fIwidget\fP, int \fIbutton\fP, Modifiers \fImodifiers\fP, Boolean \fIowner_events\fP, unsigned int \fIevent_mask\fP, int \fIpointer_mode\fP, int \fIkeyboard_mode\fP, Window \fIconfine_to\fP, Cursor \fIcursor\fP); .HP void XtUngrabButton(Widget \fIwidget\fP, KeyCode \fIbutton\fP, Modifiers \fImodifiers\fP); .HP int XtGrabPointer(Widget \fIwidget\fP, Boolean \fIowner_events\fP, unsigned int \fIevent_mask\fP, int \fIpointer_mode\fP, int \fIkeyboard_mode\fP, Window \fIconfine_to\fP, Cursor \fIcursor\fP, Time \fItime\fP); .HP void XtUngrabPointer(Widget \fIwidget\fP, Time \fItime\fP); .SH ARGUMENTS .IP \fIwidget\fP 1i Specifies the widget in whose window the grab will occur. Must be of class Core or a subclass thereof. .sp 6p .IP \fIkeycode\fP .br .ns .IP \fImodifiers\fP .br .ns .IP \fIowner_events\fP .br .ns .IP \fIpointer_mode\fP .br .ns .IP \fIkeyboard_mode\fP .br .ns .IP \fItime\fP .br .ns .IP \fIbutton\fP .br .ns .IP \fIconfine_to\fP .br .ns .IP \fIcursor\fP 1i Specifies arguments to the associated Xlib function call. .SH DESCRIPTION .ZN XtGrabKey calls .ZN XGrabKey specifying the widget's window as the grab window if the widget is realized. The remaining arguments are exactly as for .ZN XGrabKey . If the widget is not realized, or is later unrealized, the call to .ZN XGrabKey will be performed (again) when the widget is realized and its window becomes mapped. In the future, if .ZN XtDispatchEvent is called with a .ZN KeyPress event matching the specified keycode and modifiers (which may be .ZN AnyKey or .ZN AnyModifier , respectively) for the widget's window, the Intrinsics will call .ZN XtUngrabKeyboard with the timestamp from the .ZN KeyPress event if either of the following conditions is true: .IP \(bu 3 There is a modal cascade and the widget is not in the active subset of the cascade and the keyboard was not previously grabbed, or .IP \(bu 3 .ZN XFilterEvent returns .ZN True . .LP .ZN XtUngrabKey calls .ZN XUngrabKey specifying the widget's window as the ungrab window if the widget is realized. The remaining arguments are exactly as for .ZN XUngrabKey . If the widget is not realized, .ZN XtUngrabKey removes a deferred .ZN XtGrabKey request, if any, for the specified widget, keycode, and modifiers. .LP If the specified widget is realized .ZN XtGrabKeyboard calls .ZN XGrabKeyboard specifying the widget's window as the grab window. The remaining arguments and return value are exactly as for .ZN XGrabKeyboard . If the widget is not realized, .ZN XtGrabKeyboard immediately returns .ZN GrabNotViewable . No future ungrab is implied by .ZN XtGrabKeyboard . .LP .ZN XtUngrabKeyboard calls .ZN XUngrabKeyboard with the specified time. .LP .ZN XtGrabButton calls .ZN XGrabButton specifying the widget's window as the grab window if the widget is realized. The remaining arguments are exactly as for .ZN XGrabButton . If the widget is not realized, or is later unrealized, the call to .ZN XGrabButton will be performed (again) when the widget is realized and its window becomes mapped. In the future, if .ZN XtDispatchEvent is called with a .ZN ButtonPress event matching the specified button and modifiers (which may be .ZN AnyButton or .ZN AnyModifier , respectively) for the widget's window, the Intrinsics will call .ZN XtUngrabPointer with the timestamp from the .ZN ButtonPress event if either of the following conditions is true: .IP \(bu 3 There is a modal cascade and the widget is not in the active subset of the cascade and the pointer was not previously grabbed, or .IP \(bu 3 .ZN XFilterEvent returns .ZN True . .LP .ZN XtUngrabButton calls .ZN XUngrabButton specifying the widget's window as the ungrab window if the widget is realized. The remaining arguments are exactly as for .ZN XUngrabButton . If the widget is not realized, .ZN XtUngrabButton removes a deferred .ZN XtGrabButton request, if any, for the specified widget, button, and modifiers. .LP .ZN XtGrabPointer calls .ZN XGrabPointer specifying the widget's window as the grab window. The remaining arguments and return value are exactly as for .ZN XGrabPointer . If the widget is not realized, .ZN XtGrabPointer immediately returns .ZN GrabNotViewable . No future ungrab is implied by .ZN XtGrabPointer . .LP .ZN XtUngrabPointer calls .ZN XUngrabPointer with the specified time. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP CTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C LangulibXt-1.1.5/man/XtUninstallTranslations.man000064401431060000012000000001011252061032400212030ustar00alancstaff00002660200006.so man__libmansuffix__/XtParseTranslationTable.__libmansuffix__ libXt-1.1.5/man/XtGetMultiClickTime.man000064401431060000012000000000751252061032400201610ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetMultiClickTime.__libmansuffix__ libXt-1.1.5/man/XtGetResourceList.man000064401431060000012000000102171252061032400177240ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtGet-Resource-List XtGet-Constraint-Resource-List wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtGetResourceList __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtGetResourceList, XtGetConstraintResourceList \- obtain resource list .SH SYNTAX .HP void XtGetResourceList(WidgetClass \fIclass\fP, XtResourceList *\fIresources_return\fP, Cardinal *\fInum_resources_return\fP); .HP void XtGetConstraintResourceList(WidgetClass \fIclass\fP, XtResourceList *\fIresources_return\fP, Cardinal *\fInum_resources_return\fP); .SH ARGUMENTS .IP \fInum_resources_return\fP 1i Specifies a pointer to where to store the number of entries in the resource list. .IP \fIresources_return\fP 1i Specifies a pointer to where to store the returned resource list. The caller must free this storage using .ZN XtFree when done with it. .ds Cl \ for which you want the list .IP \fIwidget_class\fP 1i Specifies the widget class\*(Wc. .SH DESCRIPTION If .ZN XtGetResourceList is called before the widget class is initialized (that is, before the first widget of that class has been created), .ZN XtGetResourceList returns the resource list as specified in the widget class record. If it is called after the widget class has been initialized, .ZN XtGetResourceList returns a merged resource list that contains the resources for all superclasses. The list returned by .ZN XtGetResourceList should be freed using .ZN XtFree when it is no longer needed. .LP If .ZN XtGetConstraintResourceList is called before the widget class is initialized (that is, before the first widget of that class has been created), .ZN XtGetConstraintResourceList returns the resource list as specified in the widget class Constraint part record. If it is called after the widget class has been initialized, .ZN XtGetConstraintResourceList returns a merged resource list that contains the Constraint resources for all superclasses. If the specified class is not a subclass of .ZN constraintWidgetClass , \fI*resources_return\fP is set to NULL and \fI*num_resources_return\fP is set to zero. The list returned by .ZN XtGetConstraintResourceList should be freed using .ZN XtFree when it is no longer needed. .SH "SEE ALSO" XtGetSubresources(__libmansuffix__), XtOffset(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtConfigureWidget.man000064401431060000012000000111471252061032400177310ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtConfigure-Widget XtMove-Widget XtResize-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtConfigureWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtConfigureWidget, XtMoveWidget, XtResizeWidget \- move and resize widgets .SH SYNTAX .HP void XtConfigureWidget(Widget \fIw\fP, Position \fIx\fP, Position \fIy\fP, Dimension \fIwidth\fP, Dimension \fIheight\fP, Dimension \fIborder_width\fP); .HP void XtMoveWidget(Widget \fIw\fP, Position \fIx\fP, Position \fIy\fP); .HP void XtResizeWidget(Widget \fIw\fP, Dimension \fIwidth\fP, Dimension \fIheight\fP, Dimension \fIborder_width\fP); .HP void XtResizeWindow(Widget \fIw\fP); .SH ARGUMENTS .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i .br .ns .IP \fIborder_width\fP 1i Specify the new widget size. .IP \fIw\fP 1i Specifies the widget. .ds Nu new widget .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the \*(Nu x and y coordinates. .SH DESCRIPTION The .ZN XtConfigureWidget function returns immediately if the specified geometry fields are the same as the old values. Otherwise, .ZN XtConfigureWidget writes the new x, y, width, height, and border_width values into the widget and, if the widget is realized, makes an Xlib .ZN XConfigureWindow call on the widget's window. .LP If either the new width or height is different from its old value, .ZN XtConfigureWidget calls the widget's resize procedure to notify it of the size change; otherwise, it simply returns. .LP The .ZN XtMoveWidget function returns immediately if the specified geometry fields are the same as the old values. Otherwise, .ZN XtMoveWidget writes the new x and y values into the widget and, if the widget is realized, issues an Xlib .ZN XMoveWindow call on the widget's window. .LP The .ZN XtResizeWidget function returns immediately if the specified geometry fields are the same as the old values. Otherwise, .ZN XtResizeWidget writes the new width, height, and border_width values into the widget and, if the widget is realized, issues an .ZN XConfigureWindow call on the widget's window. .LP If the new width or height are different from the old values, .ZN XtResizeWidget calls the widget's resize procedure to notify it of the size change. .LP The .ZN XtResizeWindow function calls the .ZN XConfigureWindow Xlib function to make the window of the specified widget match its width, height, and border width. This request is done unconditionally because there is no way to tell if these values match the current values. Note that the widget's resize procedure is not called. .LP There are very few times to use .ZN XtResizeWindow ; instead, you should use .ZN XtResizeWidget . .SH "SEE ALSO" XtMakeGeometryRequest(__libmansuffix__), XtQueryGeometry(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/Makefile.am000064401431060000012000000253101252061032400156640ustar00alancstaff00002660200006libmandir = $(LIB_MAN_DIR) libman_PRE = \ $(all_shadows:=.man) \ XtAddActions.man \ XtAddCallback.man \ XtAddEventHandler.man \ XtAddExposureToRegion.man \ XtAddGrab.man \ XtAddInput.man \ XtAllocateGC.man \ XtAppAddActionHook.man \ XtAppAddActions.man \ XtAppAddBlockHook.man \ XtAppAddConverter.man \ XtAppAddInput.man \ XtAppAddSignal.man \ XtAppAddTimeOut.man \ XtAppAddWorkProc.man \ XtAppCreateShell.man \ XtAppError.man \ XtAppErrorMsg.man \ XtAppGetErrorDatabase.man \ XtAppGetSelectionTimeout.man \ XtAppInitialize.man \ XtAppLock.man \ XtAppNextEvent.man \ XtAppReleaseCacheRefs.man \ XtAppSetExitFlag.man \ XtAppSetFallbackResources.man \ XtAppSetTypeConverter.man \ XtBuildEventMask.man \ XtCallAcceptFocus.man \ XtCallActionProc.man \ XtCallCallbacks.man \ XtClass.man \ XtConfigureWidget.man \ XtConvert.man \ XtConvertAndStore.man \ XtCreateApplicationContext.man \ XtCreateApplicationShell.man \ XtCreatePopupShell.man \ XtCreateSelectionRequest.man \ XtCreateWidget.man \ XtCreateWindow.man \ XtDisplay.man \ XtDisplayInitialize.man \ XtDisplayStringConversionWarning.man \ XtDisplayToApplicationContext.man \ XtError.man \ XtErrorMsg.man \ XtFindFile.man \ XtGetActionKeysym.man \ XtGetActionList.man \ XtGetApplicationNameAndClass.man \ XtGetApplicationResources.man \ XtGetClassExtension.man \ XtGetDisplays.man \ XtGetErrorDatabase.man \ XtGetGC.man \ XtGetKeyboardFocusWidget.man \ XtGetKeysymTable.man \ XtGetResourceList.man \ XtGetSelectionParameters.man \ XtGetSelectionRequest.man \ XtGetSelectionTimeout.man \ XtGetSelectionValue.man \ XtGetSelectionValueIncremental.man \ XtGetSubresources.man \ XtGrabKey.man \ XtHooksOfDisplay.man \ XtInitialize.man \ XtInitializeWidgetClass.man \ XtInsertEventTypeHandler.man \ XtLastEventProcessed.man \ XtMakeGeometryRequest.man \ XtMalloc.man \ XtManageChildren.man \ XtMapWidget.man \ XtName.man \ XtNameToWidget.man \ XtNextEvent.man \ XtOffset.man \ XtOpenApplication.man \ XtOwnSelection.man \ XtParent.man \ XtParseAcceleratorTable.man \ XtParseTranslationTable.man \ XtPopdown.man \ XtPopup.man \ XtProcessLock.man \ XtQueryGeometry.man \ XtRealizeWidget.man \ XtRegisterDrawable.man \ XtRegisterGrabAction.man \ XtReservePropertyAtom.man \ XtResolvePathname.man \ XtSessionGetToken.man \ XtSetArg.man \ XtSetKeyTranslator.man \ XtSetKeyboardFocus.man \ XtSetLanguageProc.man \ XtSetMultiClickTime.man \ XtSetSelectionParameters.man \ XtSetSensitive.man \ XtSetValues.man \ XtSetWMColormapWindows.man \ XtStringConversionWarning.man \ XtToolkitThreadInitialize.man \ XtTranslateCoords.man \ XtVaCreateArgsList.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) CLEANFILES = $(libman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .man all_shadows = \ $(XtAddCallback_shadows) \ $(XtAddEventHandler_shadows) \ $(XtAddGrab_shadows) \ $(XtAppAddConverter_shadows) \ $(XtAppAddInput_shadows) \ $(XtAppAddTimeOut_shadows) \ $(XtAppAddWorkProc_shadows) \ $(XtAppCreateShell_shadows) \ $(XtAppError_shadows) \ $(XtAppErrorMsg_shadows) \ $(XtAppGetErrorDatabase_shadows) \ $(XtAppGetSelectionTimeout_shadows) \ $(XtAppNextEvent_shadows) \ $(XtNextEvent_shadows) \ $(XtCallCallbacks_shadows) \ $(XtClass_shadows) \ $(XtConfigureWidget_shadows) \ $(XtConvert_shadows) \ $(XtConvertAndStore_shadows) \ $(XtCreateApplicationContext_shadows) \ $(XtCreatePopupShell_shadows) \ $(XtCreateWidget_shadows) \ $(XtDisplay_shadows) \ $(XtDisplayInitialize_shadows) \ $(XtGetGC_shadows) \ $(XtGetResourceList_shadows) \ $(XtGetSelectionValue_shadows) \ $(XtGetSubresources_shadows) \ $(XtGetApplicationResources_shadows) \ $(XtMakeGeometryRequest_shadows) \ $(XtMalloc_shadows) \ $(XtManageChildren_shadows) \ $(XtMapWidget_shadows) \ $(XtNameToWidget_shadows) \ $(XtOffset_shadows) \ $(XtOwnSelection_shadows) \ $(XtParseAcceleratorTable_shadows) \ $(XtParseTranslationTable_shadows) \ $(XtPopdown_shadows) \ $(XtPopup_shadows) \ $(XtRealizeWidget_shadows) \ $(XtSetArg_shadows) \ $(XtSetKeyTranslator_shadows) \ $(XtSetSensitive_shadows) \ $(XtSetValues_shadows) \ $(XtGetKeysymTable_shadows) \ $(XtAppSetTypeConverter_shadows) \ $(XtAppAddActionHook_shadows) \ $(XtSetMultiClickTime_shadows) \ $(XtInsertEventTypeHandler_shadows) \ $(XtLastEventProcessed_shadows) \ $(XtAppAddSignal_shadows) \ $(XtAddInput_shadows) \ $(XtAppAddBlockHook_shadows) \ $(XtAppInitialize_shadows) \ $(XtSessionGetToken_shadows) \ $(XtErrorMsg_shadows) \ $(XtError_shadows) \ $(XtGetErrorDatabase_shadows) \ $(XtGetSelectionValueIncremental_shadows) \ $(XtGetSelectionTimeout_shadows) \ $(XtCreateSelectionRequest_shadows) \ $(XtReservePropertyAtom_shadows) \ $(XtGrabKey_shadows) \ $(XtRegisterDrawable_shadows) \ $(XtAppSetExitFlag_shadows) \ $(XtAppLock_shadows) \ $(XtProcessLock_shadows) \ $(XtOpenApplication_shadows) XtAddCallback_shadows = \ XtAddCallbacks \ XtRemoveCallback \ XtRemoveCallbacks \ XtRemoveAllCallbacks XtAddEventHandler_shadows = \ XtAddRawEventHandler \ XtRemoveEventHandler \ XtRemoveRawEventHandler \ XtInsertEventHandler \ XtInsertRawEventHandler XtAddGrab_shadows = \ XtRemoveGrab XtAppAddConverter_shadows = \ XtAddConverter XtAppAddInput_shadows = \ XtRemoveInput XtAppAddTimeOut_shadows = \ XtRemoveTimeOut XtAppAddWorkProc_shadows = \ XtRemoveWorkProc XtAppCreateShell_shadows = \ XtVaAppCreateShell XtAppError_shadows = \ XtAppSetErrorHandler \ XtAppSetWarningHandler \ XtAppWarning XtAppErrorMsg_shadows = \ XtAppSetErrorMsgHandler \ XtAppSetWarningMsgHandler \ XtAppWarningMsg XtAppGetErrorDatabase_shadows = \ XtAppGetErrorDatabaseText XtAppGetSelectionTimeout_shadows = \ XtAppSetSelectionTimeout XtAppNextEvent_shadows = \ XtAppPending \ XtAppPeekEvent \ XtAppProcessEvent \ XtDispatchEvent \ XtAppMainLoop XtNextEvent_shadows = \ XtPending \ XtPeekEvent \ XtProcessEvent \ XtMainLoop XtCallCallbacks_shadows = \ XtCallCallbackList \ XtHasCallbacks XtClass_shadows = \ XtSuperclass \ XtIsSubclass \ XtCheckSubclass \ XtIsObject \ XtIsRectObj \ XtIsWidget \ XtIsComposite \ XtIsConstraint \ XtIsShell \ XtIsOverrideShell \ XtIsWMShell \ XtIsVendorShell \ XtIsTransientShell \ XtIsTopLevelShell \ XtIsApplicationShell \ XtIsSessionShell XtConfigureWidget_shadows = \ XtMoveWidget \ XtResizeWidget XtConvert_shadows = \ XtDirectConvert XtConvertAndStore_shadows = \ XtCallConverter XtCreateApplicationContext_shadows = \ XtDestroyApplicationContext \ XtWidgetToApplicationContext \ XtToolkitInitialize XtCreatePopupShell_shadows = \ XtVaCreatePopupShell XtCreateWidget_shadows = \ XtVaCreateWidget \ XtCreateManagedWidget \ XtVaCreateManagedWidget \ XtDestroyWidget XtDisplay_shadows = \ XtDisplayOfObject \ XtScreen \ XtScreenOfObject \ XtWindow \ XtWindowOfObject XtDisplayInitialize_shadows = \ XtOpenDisplay \ XtCloseDisplay \ XtDatabase \ XtScreenDatabase XtGetGC_shadows = \ XtReleaseGC XtGetResourceList_shadows = \ XtGetConstraintResourceList XtGetSelectionValue_shadows = \ XtGetSelectionValues XtGetSubresources_shadows = \ XtVaGetSubresources XtGetApplicationResources_shadows = \ XtVaGetApplicationResources XtMakeGeometryRequest_shadows = \ XtMakeResizeRequest XtMalloc_shadows = \ XtCalloc \ XtRealloc \ XtFree \ XtNew \ XtNewString \ XtAsprintf XtManageChildren_shadows = \ XtManageChild \ XtUnmanageChildren \ XtUnmanageChild \ XtIsManaged \ XtChangeManagedSet XtMapWidget_shadows = \ XtSetMappedWhenManaged \ XtUnmapWidget XtNameToWidget_shadows = \ XtWindowToWidget XtOffset_shadows = \ XtOffsetOf \ XtNumber XtOwnSelection_shadows = \ XtOwnSelectionIncremental \ XtDisownSelection XtParseAcceleratorTable_shadows = \ XtInstallAccelerators \ XtInstallAllAccelerators XtParseTranslationTable_shadows = \ XtAugmentTranslations \ XtOverrideTranslations \ XtUninstallTranslations XtPopdown_shadows = \ XtCallbackPopdown \ MenuPopdown XtPopup_shadows = \ XtPopupSpringLoaded \ XtCallbackNone \ XtCallbackNonexclusive \ XtCallbackExclusive \ MenuPopup XtRealizeWidget_shadows = \ XtIsRealized \ XtUnrealizeWidget XtSetArg_shadows = \ XtMergeArgLists XtSetKeyTranslator_shadows = \ XtTranslateKeycode \ XtRegisterCaseConverter \ XtConvertCase XtSetSensitive_shadows = \ XtIsSensitive XtSetValues_shadows = \ XtVaSetValues \ XtSetSubvalues \ XtGetValues \ XtVaGetValues \ XtGetSubvalues \ XtVaGetSubvalues \ XtVaSetSubvalues XtGetKeysymTable_shadows = \ XtKeysymToKeycodeList XtAppSetTypeConverter_shadows = \ XtSetTypeConverter XtAppAddActionHook_shadows = \ XtRemoveActionHook XtSetMultiClickTime_shadows = \ XtGetMultiClickTime XtInsertEventTypeHandler_shadows = \ XtRemoveEventTypeHandler \ XtRegisterExtensionSelector \ XtSetEventDispatcher \ XtDispatchEventToWidget XtLastEventProcessed_shadows = \ XtLastTimestampProcessed XtAppAddSignal_shadows = \ XtNoticeSignal \ XtRemoveSignal XtAddInput_shadows = \ XtAddTimeOut \ XtAddWorkProc XtAppAddBlockHook_shadows = \ XtRemoveBlockHook XtAppInitialize_shadows = \ XtVaAppInitialize XtSessionGetToken_shadows = \ XtSessionReturnToken XtErrorMsg_shadows = \ XtSetErrorMsgHandler \ XtSetWarningMsgHandler \ XtWarningMsg XtError_shadows = \ XtSetErrorHandler \ XtSetWarningHandler \ XtWarning XtGetErrorDatabase_shadows = \ XtGetErrorDatabaseText XtGetSelectionValueIncremental_shadows = \ XtGetSelectionValuesIncremental XtGetSelectionTimeout_shadows = \ XtSetSelectionTimeout XtCreateSelectionRequest_shadows = \ XtSendSelectionRequest \ XtCancelSelectionRequest XtReservePropertyAtom_shadows = \ XtReleasePropertyAtom XtGrabKey_shadows = \ XtUngrabKey \ XtGrabKeyboard \ XtUngrabKeyboard \ XtGrabButton \ XtUngrabButton \ XtGrabPointer \ XtUngrabPointer XtRegisterDrawable_shadows = \ XtUnregisterDrawable XtAppSetExitFlag_shadows = \ XtAppGetExitFlag XtAppLock_shadows = \ XtAppUnlock XtProcessLock_shadows = \ XtProcessUnlock XtOpenApplication_shadows = \ XtVaOpenApplication # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ emoveCallbacks \ XtRemoveAllCallbacks XtAddEventHandler_shadows = \ XtAddRawEventHandler \ XtRemoveEventHandler \ XtRemoveRawEventHandler \ XtInsertEventHandler \ XtInsertRawEventHandler XtAddGrab_shadows = \ XtRemoveGrab XtAppAddConverter_shadows = \ XtAddConverter XtAppAddInput_shlibXt-1.1.5/man/XtVaOpenApplication.man000064401431060000012000000000731252061032400202140ustar00alancstaff00002660200006.so man__libmansuffix__/XtOpenApplication.__libmansuffix__ libXt-1.1.5/man/XtMapWidget.man000064401431060000012000000063071252061032400165270ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtMap-Widget XtSet-Mapped-When-Managed XtUnmap-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtMapWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtMapWidget, XtSetMappedWhenManaged, XtUnmapWidget \- map and unmap widgets .SH SYNTAX .HP int XtMapWidget(Widget \fIw\fP\^); .HP void XtSetMappedWhenManaged(Widget \fIw\fP, Boolean \fImap_when_managed\fP); .HP int XtUnmapWidget(Widget \fIw\fP\^); .SH ARGUMENTS .IP \fImap_when_managed\fP 1i Specifies a Boolean value that indicates the new value of the map_when_managed field. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION If the widget is realized and managed and if the new value of map_when_managed is .ZN True , .ZN XtSetMappedWhenManaged maps the window. If the widget is realized and managed and if the new value of map_when_managed is .ZN False , it unmaps the window. .ZN XtSetMappedWhenManaged is a convenience function that is equivalent to (but slightly faster than) calling .ZN XtSetValues and setting the new value for the mappedWhenManaged resource. As an alternative to using .ZN XtSetMappedWhenManaged to control mapping, a client may set mapped_when_managed to .ZN False and use .ZN XtMapWidget and .ZN XtUnmapWidget explicitly. .SH "SEE ALSO" XtManageChildren(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP eal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The abolibXt-1.1.5/man/XtLastTimestampProcessed.man000064401431060000012000000000761252061032400213020ustar00alancstaff00002660200006.so man__libmansuffix__/XtLastEventProcessed.__libmansuffix__ libXt-1.1.5/man/XtAddActions.man000064401431060000012000000050001252061032400166440ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealing in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Actions wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAddActions __libmansuffix__ __xorgversion__ "XT COMPATIBILITY FUNCTIONS" .SH NAME XtAddActions \- register an action table .SH SYNTAX .HP void XtAddActions(XtActionList \fIactions\fP, Cardinal \fInum_actions\fP); .SH ARGUMENTS .IP \fIactions\fP 1i Specifies the action table to register. .IP \fInum_args\fP 1i Specifies the number of entries in this action table. .SH DESCRIPTION .ZN XtAddActions has been replaced by .ZN XtAppAddActions . .SH "SEE ALSO" XtAppAddActions(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCreateSelectionRequest.man000064401431060000012000000106411252061032400212640ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCreate-Selection-Request XtSend-Selection-Request XtCancel-Selection-Request wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCreateSelectionRequest __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCreateSelectionRequest, XtSendSelectionRequest, XtCancelSelectionRequest \- bundle multiple selection conversion requests into a single request using MULTIPLE target .SH SYNTAX .HP void XtCreateSelectionRequest(Widget \fIrequestor\fP, Atom \fIselection\fP): .HP void XtSendSelectionRequest(Widget \fIrequestor\fP, Atom \fIselection\fP, Time \fItime\fP); .HP void XtCancelSelectionRequest(Widget \fIrequestor\fP, Atom \fIselection\fP); .SH ARGUMENTS .IP \fIrequestor\fP 1i Specifies the widget making the request. Must be of class Core or a subclass thereof. .IP \fIselection\fP 1i Specifies the particular selection desired. .IP \fItime\fP 1i Specifies the timestamp to be used in making the request. .SH DESCRIPTION When .ZN XtCreateSelectionRequest is called, subsequent calls to .ZN XtGetSelectionValue and .ZN XtGetSelectionValueIncremental with the requestor and selection as specified to .ZN XtCreateSelectionRequest will be bundled into a single selection conversion request with multiple targets. The request is actually initiated by calling .ZN XtSendSelectionRequest . .LP When .ZN XtSendSelectionRequest is called with a value of \fIrequestor\fP and \fIselection\fP matching a previous call to .ZN XtCreateSelectionRequest , a selection conversion request is actually sent to the selection owner. If a single target request is queued, that request is made. If multiple targets are queued they are bundled into a single request with the target MULTIPLE using the specified timestamp. As the conversions are made, the callbacks associated with each .ZN XtGetSelectionValue and .ZN XtGetSelectionValueIncremental are invoked in turn. .LP Multi-threaded applications should lock the application context before calling .ZN XtCreateSelectionRequest and release the lock after calling .ZN XtSendSelectionRequest to ensure that the thread assembling the request is safe from interference by another thread assembling a different request naming the same widget and selection. .LP When .ZN XtCancelSelectionRequest is called, any requests queued since the last call to .ZN XtCreateSelectionRequest are cleaned up. Subsequent calls to .ZN XtGetSelectionValue , .ZN XtGetSelectionValues , .ZN XtGetSelectionValueIncremental , and .ZN XtGetSelectionValuesIncremental will not be deferred. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtConvertAndStore.man000064401431060000012000000126601252061032400177250ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtConvert-And-Store XtCall-Converter wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtConvertAndStore __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtConvertAndStore, XtCallConverter \- invoke resource converters .SH SYNTAX .HP Boolean XtConvertAndStore(Widget \fIwidget\fP, String \fIfrom_type\fP, XrmValuePtr \fIfrom\fP, String \fIto_type\fP, XrmValuePtr \fIto_in_out\fP); .HP Boolean XtCallConverter(Display* \fIdpy\fP, XtConverter \fIconverter\fP, XrmValuePtr \fIargs\fP, Cardinal \fInum_args\fP, XrmValuePtr \fIfrom\fP, XrmValuePtr \fIto_in_out\fP, XtCacheRef* \fIcache_ref_return\fP); .SH ARGUMENTS .IP \fIargs\fP 1i Specifies the argument list that contains the additional arguments needed to perform the conversion, or NULL. .IP \fIconverter\fP 1i Specifies the conversion procedure that is to be called. .IP \fIfrom\fP 1i Specifies the value to be converted. .IP \fIfrom_type\fP 1i Specifies the source type. .IP \fInum_args\fP 1i Specifies the number of additional arguments (often zero). .IP \fIto_type\fP 1i Specifies the destination type. .IP \fIto_in_out\fP 1i Returns the converted value. .IP \fIwidget\fP 1i Specifies the widget to use for additional arguments, if any are needed, and the destroy callback list. .IP \fIdpy\fP 1i Specifies the display with which the conversion is to be associated. .SH DESCRIPTION The .ZN XtConvertAndStore function looks up the type converter registered to convert from_type to to_type, computes any additional arguments needed, and then calls .ZN XtCallConverter . (or .ZN XtDirectConvert if an old-style converter was registered with .ZN XtAddConverter or .ZN XtAppAddConverter . ) with the from and to_in_out arguments. .LP The .ZN XtCallConverter function looks up the specified type converter in the application context associated with the display and, if the converter was not registered or was registered with cache type .ZN XtCacheAll or .ZN XtCacheByDisplay looks in the conversion cache to see if this conversion procedure has been called with the specified conversion arguments. If so, it checks the success status of the prior call, and if the conversion failed, .ZN XtCallConverter returns .ZN False immediately; otherwise it checks the size specified in the \fIto\fP argument and, if it is greater than or equal to the size stored in the cache, copies the information stored in the cache into the location specified by \fIto->addr\fP, stores the cache size into \fIto->size\fP, and returns .ZN True . If the size specified in the \fIto\fP argument is smaller than the size stored in the cache, .ZN XtCallConverter copies the cache size into the \fIto->size\fP and returns .ZN False . If the converter was registered with cache type .ZN XtCacheNone or no value was found in the conversion cache, .ZN XtCallConverter calls the converter and, if it was not registered with cache type .ZN XtCacheNone , enters the result into the cache. .ZN XtCallConverter then returns what the converter returned. .LP The \fIcache_ref_return\fP field specifies storage allocated by the caller in which an opaque value will be stored. If the type converter has been registered with the .ZN XtCacheRefCount modifier and if the value returned in in \fIcache_ref_return\fP is non-NULL, then the call should store the \fIcache_ref_return\fP value in order to decrement the reference count when the converted value is no longer required. The \fIcache_ref_return\fP argument should be NULL if the caller is unwilling or unable to store the value. .SH "SEE ALSO" XtAppReleaseCacheRefs(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtOverrideTranslations.man000064401431060000012000000001011252061032400210110ustar00alancstaff00002660200006.so man__libmansuffix__/XtParseTranslationTable.__libmansuffix__ libXt-1.1.5/man/XtCheckSubclass.man000064401431060000012000000000611252061032400173520ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtNameToWidget.man000064401431060000012000000077541252061032400172040ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtName-To-Widget XtWindow-To-Widget wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtNameToWidget __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtNameToWidget, XtWindowToWidget \- translating strings to widgets or widgets to windows .SH SYNTAX .HP Widget XtNameToWidget(Widget \fIreference\fP, String \fInames\fP); .HP Widget XtWindowToWidget(Display *\fIdisplay\fP, Window \fIwindow\fP); .SH ARGUMENTS .ds Di \ on which the window is defined .IP \fIdisplay\fP 1i Specifies the display\*(Di. .IP \fInames\fP 1i Specifies the fully qualified name of the desired widget. .IP \fIreference\fP 1i Specifies the widget from which the search is to start. .IP \fIwindow\fP 1i Specify the window for which you want the widget. .SH DESCRIPTION The .ZN XtNameToWidget function looks for a widget whose name is the first component in the specified names and that is a pop-up child of reference (or a normal child if reference is a subclass of .ZN compositeWidgetClass ). It then uses that widget as the new reference and repeats the search after deleting the first component from the specified names. If it cannot find the specified widget, .ZN XtNameToWidget returns NULL. .LP Note that the names argument contains the name of a widget with respect to the specified reference widget and can contain more than one widget name (separated by periods) for widgets that are not direct children of the specified reference widget. .LP If more than one child of the reference widget matches the name, .ZN XtNameToWidget can return any of the children. The \*(xI do not require that all children of a widget have unique names. If the specified names contain more than one component and if more than one child matches the first component, .ZN XtNameToWidget can return NULL if the single branch that it follows does not contain the named widget. That is, .ZN XtNameToWidget does not back up and follow other matching branches of the widget tree. .LP The .ZN XtWindowToWidget function translates the specified window and display pointer into the appropriate widget instance. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP \fP\\$2 .. .ny0 .TH libXt-1.1.5/man/XtIsOverrideShell.man000064401431060000012000000000611252061032400177000ustar00alancstaff00002660200006.so man__libmansuffix__/XtClass.__libmansuffix__ libXt-1.1.5/man/XtAppWarningMsg.man000064401431060000012000000000671252061032400173600ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppErrorMsg.__libmansuffix__ libXt-1.1.5/man/XtAppSetWarningHandler.man000064401431060000012000000000641252061032400206600ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppError.__libmansuffix__ libXt-1.1.5/man/XtSetSubvalues.man000064401431060000012000000000651252061032400172660ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/man/XtAppWarning.man000064401431060000012000000000641252061032400167060ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppError.__libmansuffix__ libXt-1.1.5/man/XtAppSetSelectionTimeout.man000064401431060000012000000001021252061032400212420ustar00alancstaff00002660200006.so man__libmansuffix__/XtAppGetSelectionTimeout.__libmansuffix__ libXt-1.1.5/man/XtAppAddActionHook.man000064401431060000012000000064531252061032400177600ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Action-Hook XtRemove-Action-Hook wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddActionHook __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddActionHook, XtRemoveActionHook \- register an action hook procedure .SH SYNTAX .HP XtActionHookId XtAppAddActionHook(XtAppContext \fIapp_context\fP, XtActionHookProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveActionHook(XtActionHookId \fIid\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIproc\fP 1i Specifies the action hook procedure. .IP \fInum_args\fP 1i Specifies the application-specific data to be passed to the action hook. .SH DESCRIPTION .ZN XtAppAddActionHook adds the specified procedure to the front of a list maintained in the application context. In the future, when an action routine is about to be invoked for any widget in this application context, either through the translation manager or via .ZN XtCallActionProc , the action hohok procedures will be called in reverse order of registration jut prior to invoking the action routine. .LP Action hook procedures are removed automatically and the .ZN XtActionHookId s destroyed when the application context in which they were added is destroyed. .LP .ZN XtRemoveActionHook removes the specified action hook procedure from the list in which it was registered. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtCallAcceptFocus.man000064401431060000012000000052511252061032400176360ustar00alancstaff00002660200006.\" Copyright 1993 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining .\" a copy of this software and associated documentation files (the .\" "Software"), to deal in the Software without restriction, including .\" without limitation the rights to use, copy, modify, merge, publish, .\" distribute, sublicense, and/or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, subject to .\" the following conditions: .\" .\" The above copyright notice and this permission notice shall be .\" included in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, .\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, .\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtCall-Accept-Focus wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtCallAcceptFocus __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtCallAcceptFocus \- calla widget's accept_focus procedure .SH SYNTAX .HP Boolean XtCallAcceptFocus(Widget \fIw\fP, Time *\fItime\fP); .SH ARGUMENTS .IP \fItime\fP 1i Specifies the X time of the event that is causing the accept focus. .IP \fIw\fP 1i Specifies the widget. .SH DESCRIPTION The .ZN XtCallAcceptFocus function calls the specified widget's accept_focus procedure, passing it the specified widget and time, and returns what the accept_focus procedure returns. If accept_focus is NULL, .ZN XtCallAcceptFocus returns .ZN False . .SH "SEE ALSO" XtSetKeyboardFocus(__libmansuffix__) .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtAppAddBlockHook.man000064401431060000012000000061061252061032400175700ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994 X Consortium .\" .\" Permission is hereby granted, free of charge, to any person obtaining a .\" copy of this software and associated documentation files (the "Software"), .\" to deal in the Software without restriction, including without limitation .\" the rights to use, copy, modify, merge, publish, distribute, sublicense, .\" and/or sell copies of the Software, and to permit persons to whom the .\" Software furnished to do so, subject to the following conditions: .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from the .\" X Consortium. .\" .ds tk X Toolkit .ds xT X Toolkit Intrinsics \- C Language Interface .ds xI Intrinsics .ds xW X Toolkit Athena Widgets \- C Language Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .ds Rn 3 .ds Vn 2.2 .hw XtApp-Add-Block-Hook XtRemove-Block-Hook wid-get .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .ny0 .TH XtAppAddBlockHook __libmansuffix__ __xorgversion__ "XT FUNCTIONS" .SH NAME XtAppAddBlockHook, XtRemoveBlockHook \- register a block hook procedure .SH SYNTAX .HP XtBlockHookId XtAppAddBlockHook(XtAppContext \fIapp_context\fP, XtBlockHookProc \fIproc\fP, XtPointer \fIclient_data\fP); .HP void XtRemoveBlockHook(XtBlockHookId \fIid\fP); .SH ARGUMENTS .IP \fIapp_context\fP 1i Specifies the application context. .IP \fIproc\fP 1i Specifies the block hook procedure. .IP \fInum_args\fP 1i Specifies the application-specific data to be passed to the block hook. .SH DESCRIPTION .ZN XtAppAddBlockHook registers the specified procedure and returns an identifier for it. The hook is called at any time in the future when the Intrinsics are about to block pending some input. .LP Block hook procedures are removed automatically and the .ZN XtBlockHookId is destroyed when the application context in which they were added is destroyed. .LP .ZN XtRemoveBlockHook removes the specified block hook procedure from the list in which it was registered. .SH "SEE ALSO" .br \fI\*(xT\fP .br \fI\*(xL\fP libXt-1.1.5/man/XtVaSetSubvalues.man000064401431060000012000000000651252061032400175550ustar00alancstaff00002660200006.so man__libmansuffix__/XtSetValues.__libmansuffix__ libXt-1.1.5/xt.pc.in000064401431060000012000000004731252061032400144440ustar00alancstaff00002660200006prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ appdefaultdir=@appdefaultdir@ datarootdir=@datarootdir@ errordbdir=@ERRORDBDIR@ Name: Xt Description: X Toolkit Library Version: @VERSION@ Requires: xproto x11 Requires.private: ice sm Cflags: -I${includedir} Libs: -L${libdir} -lXt libXt-1.1.5/specs/CH11.xml000064401431060000012000005103021252061032400153500ustar00alancstaff00002660200006 Utility Functions The Intrinsics provide a number of utility functions that you can use to Determine the number of elements in an array. Translate strings to widget instances. Manage memory usage. Share graphics contexts. Manipulate selections. Merge exposure events into a region. Translate widget coordinates. Locate a widget given a window id. Handle errors. Set the WM_COLORMAP_WINDOWS property. Locate files by name with string substitutions. Register callback functions for external agents. Locate all the displays of an application context. Determining the Number of Elements in an Array To determine the number of elements in a fixed-size array, use . Cardinal XtNumber ArrayType array array Specifies a fixed-size array of arbitrary type. The macro returns the number of elements allocated to the array. Translating Strings to Widget Instances To translate a widget name to a widget instance, use . Widget XtNameToWidget Widget reference String names reference Specifies the widget from which the search is to start. Must be of class Core or any subclass thereof. names Specifies the partially qualified name of the desired widget. The function searches for a descendant of the reference widget whose name matches the specified names. The names parameter specifies a simple object name or a series of simple object name components separated by periods or asterisks. returns the descendant with the shortest name matching the specification according to the following rules, where child is either a pop-up child or a normal child if the widget's class is a subclass of Composite : Enumerate the object subtree rooted at the reference widget in breadth-first order, qualifying the name of each object with the names of all its ancestors up to, but not including, the reference widget. The ordering between children of a common parent is not defined. Return the first object in the enumeration that matches the specified name, where each component of names matches exactly the corresponding component of the qualified object name and asterisk matches any series of components, including none. If no match is found, return NULL. Since breadth-first traversal is specified, the descendant with the shortest matching name (i.e., the fewest number of components), if any, will always be returned. However, since the order of enumeration of children is undefined and since the Intrinsics do not require that all children of a widget have unique names, may return any child that matches if there are multiple objects in the subtree with the same name. Consecutive separators (periods or asterisks) including at least one asterisk are treated as a single asterisk. Consecutive periods are treated as a single period. Managing Memory Usage The Intrinsics memory management functions provide uniform checking for null pointers and error reporting on memory allocation errors. These functions are completely compatible with their standard C language runtime counterparts malloc, calloc, realloc, and free with the following added functionality: , , and give an error if there is not enough memory. simply returns if passed a NULL pointer. simply allocates new storage if passed a NULL pointer. See the standard C library documentation on malloc, calloc, realloc, and free for more information. To allocate storage, use . char * XtMalloc Cardinal size size Specifies the number of bytes desired. The function returns a pointer to a block of storage of at least the specified size bytes. If there is insufficient memory to allocate the new block, calls . To allocate and initialize an array, use . char * XtCalloc Cardinal num Cardinal size num Specifies the number of array elements to allocate. size Specifies the size of each array element in bytes. The function allocates space for the specified number of array elements of the specified size and initializes the space to zero. If there is insufficient memory to allocate the new block, calls . returns the address of the allocated storage. To change the size of an allocated block of storage, use . char *XtRealloc char *ptr Cardinal num ptr Specifies a pointer to the old storage allocated with , , or , or NULL. num Specifies number of bytes desired in new storage. The function changes the size of a block of storage, possibly moving it. Then it copies the old contents (or as much as will fit) into the new block and frees the old block. If there is insufficient memory to allocate the new block, calls . If ptr is NULL, simply calls . then returns the address of the new block. To free an allocated block of storage, use . void XtFree char *ptr ptr Specifies a pointer to a block of storage allocated with , , or , or NULL. The function returns storage, allowing it to be reused. If ptr is NULL, returns immediately. To allocate storage for a new instance of a type, use . type XtNew type t type Specifies a previously declared type. returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, calls . is a convenience macro that calls with the following arguments specified: ((type *) XtMalloc((unsigned) sizeof(type))) The storage allocated by should be freed using . To copy an instance of a string, use . String XtNewString String string string Specifies a previously declared string. returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, calls . is a convenience macro that calls with the following arguments specified: (strcpy(XtMalloc((unsigned)strlen(str) + 1), str)) The storage allocated by should be freed using . Sharing Graphics Contexts The Intrinsics provide a mechanism whereby cooperating objects can share a graphics context (GC), thereby reducing both the number of GCs created and the total number of server calls in any given application. The mechanism is a simple caching scheme and allows for clients to declare both modifiable and nonmodifiable fields of the shared GCs. To obtain a shareable GC with modifiable fields, use . GC XtAllocateGC Widget object Cardinal depth XtGCMask value_mask XGCValues *values XtGCMask dynamic_mask XtGCMask unused_mask object Specifies an object, giving the screen for which the returned GC is valid. Must be of class Object or any subclass thereof. depth Specifies the depth for which the returned GC is valid, or 0. value_mask Specifies fields of the GC that are initialized from values. values Specifies the values for the initialized fields. dynamic_mask Specifies fields of the GC that will be modified by the caller. unused_mask Specifies fields of the GC that will not be needed by the caller. The function returns a shareable GC that may be modified by the client. The screen field of the specified widget or of the nearest widget ancestor of the specified object and the specified depth argument supply the root and drawable depths for which the GC is to be valid. If depth is zero, the depth is taken from the depth field of the specified widget or of the nearest widget ancestor of the specified object. The value_mask argument specifies fields of the GC that are initialized with the respective member of the values structure. The dynamic_mask argument specifies fields that the caller intends to modify during program execution. The caller must ensure that the corresponding GC field is set prior to each use of the GC. The unused_mask argument specifies fields of the GC that are of no interest to the caller. The caller may make no assumptions about the contents of any fields specified in unused_mask. The caller may assume that at all times all fields not specified in either dynamic_mask or unused_mask have their default value if not specified in value_mask or the value specified by values. If a field is specified in both value_mask and dynamic_mask, the effect is as if it were specified only in dynamic_mask and then immediately set to the value in values. If a field is set in unused_mask and also in either value_mask or dynamic_mask, the specification in unused_mask is ignored. tries to minimize the number of unique GCs created by comparing the arguments with those of previous calls and returning an existing GC when there are no conflicts. may modify and return an existing GC if it was allocated with a nonzero unused_mask. To obtain a shareable GC with no modifiable fields, use . GC XtGetGC Widget object XtGCMask value_mask XGCValues *values object Specifies an object, giving the screen and depth for which the returned GC is valid. Must be of class Object or any subclass thereof. value_mask Specifies which fields of the values structure are specified. values Specifies the actual values for this GC. The function returns a shareable, read-only GC. The parameters to this function are the same as those for XCreateGC except that an Object is passed instead of a Display. is equivalent to with depth, dynamic_mask, and unused_mask all zero. shares only GCs in which all values in the GC returned by XCreateGC are the same. In particular, it does not use the value_mask provided to determine which fields of the GC a widget considers relevant. The value_mask is used only to tell the server which fields should be filled in from values and which it should fill in with default values. To deallocate a shared GC when it is no longer needed, use . void XtReleaseGC Widget object GC gc object Specifies any object on the Display for which the GC was created. Must be of class Object or any subclass thereof. gc Specifies the shared GC obtained with either or . References to shareable GCs are counted and a free request is generated to the server when the last user of a given GC releases it. Managing Selections Arbitrary widgets in multiple applications can communicate with each other by means of the Intrinsics global selection mechanism, which conforms to the specifications in the Inter-Client Communication Conventions Manual.. The Intrinsics supply functions for providing and receiving selection data in one logical piece (atomic transfers) or in smaller logical segments (incremental transfers). The incremental interface is provided for a selection owner or selection requestor that cannot or prefers not to pass the selection value to and from the Intrinsics in a single call. For instance, either an application that is running on a machine with limited memory may not be able to store the entire selection value in memory or a selection owner may already have the selection value available in discrete chunks, and it would be more efficient not to have to allocate additional storage to copy the pieces contiguously. Any owner or requestor that prefers to deal with the selection value in segments can use the incremental interfaces to do so. The transfer between the selection owner or requestor and the Intrinsics is not required to match the underlying transport protocol between the application and the X server; the Intrinsics will break too large a selection into smaller pieces for transport if necessary and will coalesce a selection transmitted incrementally if the value was requested atomically. Setting and Getting the Selection Timeout Value To set the Intrinsics selection timeout, use . void XtAppSetSelectionTimeout XtAppContext app_context unsigned long timeout app_context Specifies the application context. timeout Specifies the selection timeout in milliseconds. To get the current selection timeout value, use . unsigned long XtAppGetSelectionTimeout XtAppContext app_context app_context Specifies the application context. The function returns the current selection timeout value in milliseconds. The selection timeout is the time within which the two communicating applications must respond to one another. The initial timeout value is set by the selectionTimeout application resource as retrieved by . If selectionTimeout is not specified, the default is five seconds. Using Atomic Transfers When using atomic transfers, the owner will completely process one selection request at a time. The owner may consider each request individually, since there is no possibility for overlap between evaluation of two requests. Atomic Transfer Procedures The following procedures are used by the selection owner when providing selection data in a single unit. The procedure pointer specified by the owner to supply the selection data to the Intrinsics is of type . typedef Boolean (*XtConvertSelectionProc) Widget w Atom *selection Atom *target Atom *type_return XtPointer *value_return unsigned long *length_return int *format_return w Specifies the widget that currently owns this selection. selection Specifies the atom naming the selection requested (for example, XA_PRIMARY or XA_SECONDARY ). target Specifies the target type of the selection that has been requested, which indicates the desired information about the selection (for example, File Name, Text, Window). type_return Specifies a pointer to an atom into which the property type of the converted value of the selection is to be stored. For instance, either File Name or Text might have property type XA_STRING. value_return Specifies a pointer into which a pointer to the converted value of the selection is to be stored. The selection owner is responsible for allocating this storage. If the selection owner has provided an for the selection, this storage is owned by the selection owner; otherwise, it is owned by the Intrinsics selection mechanism, which frees it by calling when it is done with it. length_return Specifies a pointer into which the number of elements in value_return, each of size indicated by format_return, is to be stored. format_return Specifies a pointer into which the size in bits of the data elements of the selection value is to be stored. This procedure is called by the Intrinsics selection mechanism to get the value of a selection as a given type from the current selection owner. It returns True if the owner successfully converted the selection to the target type or False otherwise. If the procedure returns False, the values of the return arguments are undefined. Each should respond to target value TARGETS by returning a value containing the list of the targets into which it is prepared to convert the selection. The value returned in format_return must be one of 8, 16, or 32 to allow the server to byte-swap the data if necessary. This procedure does not need to worry about responding to the MULTIPLE or the TIMESTAMP target values (see in the Inter-Client Communication Conventions Manual.). A selection request with the MULTIPLE target type is transparently transformed into a series of calls to this procedure, one for each target type, and a selection request with the TIMESTAMP target value is answered automatically by the Intrinsics using the time specified in the call to or . To retrieve the SelectionRequest event that triggered the procedure, use . XSelectionRequestEvent *XtGetSelectionRequest Widget w Atom selection XtRequestId request_id w Specifies the widget that currently owns this selection. Must be of class Core or any subclass thereof. selection Specifies the selection being processed. request_id Specifies the requestor id in the case of incremental selections, or NULL in the case of atomic transfers. may be called only from within an procedure and returns a pointer to the SelectionRequest event that caused the conversion procedure to be invoked. Request_id specifies a unique id for the individual request in the case that multiple incremental transfers are outstanding. For atomic transfers, request_id must be specified as NULL. If no SelectionRequest event is being processed for the specified widget, selection, and request_id, returns NULL. The procedure pointer specified by the owner when it desires notification upon losing ownership is of type . typedef void (*XtLoseSelectionProc) Widget w Atom *selection w Specifies the widget that has lost selection ownership. selection Specifies the atom naming the selection. This procedure is called by the Intrinsics selection mechanism to inform the specified widget that it has lost the given selection. Note that this procedure does not ask the widget to relinquish the selection ownership; it is merely informative. The procedure pointer specified by the owner when it desires notification of receipt of the data or when it manages the storage containing the data is of type . typedef void (*XtSelectionDoneProc) Widget w Atom *selection Atom *target w Specifies the widget that owns the converted selection. selection Specifies the atom naming the selection that was converted. target Specifies the target type to which the conversion was done. This procedure is called by the Intrinsics selection mechanism to inform the selection owner that a selection requestor has successfully retrieved a selection value. If the selection owner has registered an , it should expect it to be called once for each conversion that it performs, after the converted value has been successfully transferred to the requestor. If the selection owner has registered an , it also owns the storage containing the converted selection value. Getting the Selection Value The procedure pointer specified by the requestor to receive the selection data from the Intrinsics is of type . typedef void (*XtSelectionCallbackPro) Widget w XtPointer client_data Atom *selection Atom *type XtPointer value unsigned long *length int *format w Specifies the widget that requested the selection value. client_data Specifies a value passed in by the widget when it requested the selection. selection Specifies the name of the selection that was requested. type Specifies the representation type of the selection value (for example, XA_STRING ). Note that it is not the target that was requested (which the client must remember for itself), but the type that is used to represent the target. The special symbolic constant XT_CONVERT_FAIL is used to indicate that the selection conversion failed because the selection owner did not respond within the Intrinsics selection timeout interval. value Specifies a pointer to the selection value. The requesting client owns this storage and is responsible for freeing it by calling when it is done with it. length Specifies the number of elements in value. format Specifies the size in bits of the data in each element of value. This procedure is called by the Intrinsics selection mechanism to deliver the requested selection to the requestor. If the SelectionNotify event returns a property of None, meaning the conversion has been refused because there is no owner for the specified selection or the owner cannot convert the selection to the requested target for any reason, the procedure is called with a value of NULL and a length of zero. To obtain the selection value in a single logical unit, use or . void XtGetSelectionValue Widget w Atom selection Atom target XtSelectionCallbackProc callback XtPointer client_data Time time w Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired; for example, XA_PRIMARY. target Specifies the type of information needed about the selection. callback Specifies the procedure to be called when the selection value has been obtained. Note that this is how the selection value is communicated back to the client. client_data Specifies additional data to be passed to the specified procedure when it is called. time Specifies the timestamp that indicates when the selection request was initiated. This should be the timestamp of the event that triggered this request; the value CurrentTime is not acceptable. The function requests the value of the selection converted to the target type. The specified callback is called at some time after is called, when the selection value is received from the X server. It may be called before or after returns. For more information about selection, target, and time, see Section 2.6 in the Inter-Client Communication Conventions Manual.. void XtGetSelectionValues Widget w Atom selection Atom *targets int count XtSelectionCallbackProc callback XtPointer *client_data Time time w Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired (that is, primary or secondary). targets Specifies the types of information needed about the selection. count Specifies the length of the targets and client_data lists. callback Specifies the callback procedure to be called with each selection value obtained. Note that this is how the selection values are communicated back to the client. client_data Specifies a list of additional data values, one for each target type, that are passed to the callback procedure when it is called for that target. time Specifies the timestamp that indicates when the selection request was initiated. This should be the timestamp of the event that triggered this request; the value CurrentTime is not acceptable. The function is similar to multiple calls to except that it guarantees that no other client can assert ownership between requests and therefore that all the conversions will refer to the same selection value. The callback is invoked once for each target value with the corresponding client data. For more information about selection, target, and time, see section 2.6 in the Inter-Client Communication Conventions Manual.. Setting the Selection Owner To set the selection owner and indicate that the selection value will be provided in one piece, use . Boolean XtOwnSelection Widget w Atom selection Time time XtConvertSelectionProc convert_proc XtLoseSelectionProc lose_selection XtSelectionDoneProc done_proc w Specifies the widget that wishes to become the owner. Must be of class Core or any subclass thereof. selection Specifies the name of the selection (for example, XA_PRIMARY ). time Specifies the timestamp that indicates when the ownership request was initiated. This should be the timestamp of the event that triggered ownership; the value CurrentTime is not acceptable. convert_proc Specifies the procedure to be called whenever a client requests the current value of the selection. lose_selection Specifies the procedure to be called whenever the widget has lost selection ownership, or NULL if the owner is not interested in being called back. done_proc Specifies the procedure called after the requestor has received the selection value, or NULL if the owner is not interested in being called back. The function informs the Intrinsics selection mechanism that a widget wishes to own a selection. It returns True if the widget successfully becomes the owner and False otherwise. The widget may fail to become the owner if some other widget has asserted ownership at a time later than this widget. The widget can lose selection ownership either because some other widget asserted later ownership of the selection or because the widget voluntarily gave up ownership of the selection. The lose_selection procedure is not called if the widget fails to obtain selection ownership in the first place. If a done_proc is specified, the client owns the storage allocated for passing the value to the Intrinsics. If done_proc is NULL, the convert_proc must allocate storage using , , or , and the value specified is freed by the Intrinsics when the transfer is complete. Usually, a selection owner maintains ownership indefinitely until some other widget requests ownership, at which time the Intrinsics selection mechanism informs the previous owner that it has lost ownership of the selection. However, in response to some user actions (for example, when a user deletes the information selected), the application may wish to explicitly inform the Intrinsics by using that it no longer is to be the selection owner. void XtDisownSelection Widget w Atom selection Time time w Specifies the widget that wishes to relinquish ownership. selection Specifies the atom naming the selection being given up. time Specifies the timestamp that indicates when the request to relinquish selection ownership was initiated. The function informs the Intrinsics selection mechanism that the specified widget is to lose ownership of the selection. If the widget does not currently own the selection, either because it lost the selection or because it never had the selection to begin with, does nothing. After a widget has called , its convert procedure is not called even if a request arrives later with a timestamp during the period that this widget owned the selection. However, its done procedure is called if a conversion that started before the call to finishes after the call to . Using Incremental Transfers When using the incremental interface, an owner may have to process more than one selection request for the same selection, converted to the same target, at the same time. The incremental functions take a request_id argument, which is an identifier that is guaranteed to be unique among all incremental requests that are active concurrently. For example, consider the following: Upon receiving a request for the selection value, the owner sends the first segment. While waiting to be called to provide the next segment value but before sending it, the owner receives another request from a different requestor for the same selection value. To distinguish between the requests, the owner uses the request_id value. This allows the owner to distinguish between the first requestor, which is asking for the second segment, and the second requestor, which is asking for the first segment. Incremental Transfer Procedures The following procedures are used by selection owners who wish to provide the selection data in multiple segments. The procedure pointer specified by the incremental owner to supply the selection data to the Intrinsics is of type . typedef XtPointer XtRequestId; typedef Boolean (*XtConvertSelectionIncrProc) Widget w Atom *selection Atom *target Atom *type_return XtPointer *value_return unsigned long *length_return int *format_return unsigned long *max_length XtPointer client_data XtRequestId *request_id w Specifies the widget that currently owns this selection. selection Specifies the atom that names the selection requested. target Specifies the type of information required about the selection. type_return Specifies a pointer to an atom into which the property type of the converted value of the selection is to be stored. value_return Specifies a pointer into which a pointer to the converted value of the selection is to be stored. The selection owner is responsible for allocating this storage. length_return Specifies a pointer into which the number of elements in value_return, each of size indicated by format_return, is to be stored. format_return Specifies a pointer into which the size in bits of the data elements of the selection value is to be stored so that the server may byte-swap the data if necessary. max_length Specifies the maximum number of bytes which may be transferred at any one time. client_data Specifies the value passed in by the widget when it took ownership of the selection. request_id Specifies an opaque identification for a specific request. This procedure is called repeatedly by the Intrinsics selection mechanism to get the next incremental chunk of data from a selection owner who has called . It must return True if the procedure has succeeded in converting the selection data or False otherwise. On the first call with a particular request id, the owner must begin a new incremental transfer for the requested selection and target. On subsequent calls with the same request id, the owner may assume that the previously supplied value is no longer needed by the Intrinsics; that is, a fixed transfer area may be allocated and returned in value_return for each segment to be transferred. This procedure should store a non-NULL value in value_return and zero in length_return to indicate that the entire selection has been delivered. After returning this final segment, the request id may be reused by the Intrinsics to begin a new transfer. To retrieve the SelectionRequest event that triggered the selection conversion procedure, use , described in Section 11.5.2.1. The procedure pointer specified by the incremental selection owner when it desires notification upon no longer having ownership is of type . typedef void (*XtLoseSelectionIncrProc) Widget w Atom *selection XtPointer client_data w Specifies the widget that has lost the selection ownership. selection Specifies the atom that names the selection. client_data Specifies the value passed in by the widget when it took ownership of the selection. This procedure, which is optional, is called by the Intrinsics to inform the selection owner that it no longer owns the selection. The procedure pointer specified by the incremental selection owner when it desires notification of receipt of the data or when it manages the storage containing the data is of type . typedef void (*XtSelectionDoneIncrProc) Widget w Atom *selection Atom *target XtRequestId *request_id XtPointer client_data w Specifies the widget that owns the selection. selection Specifies the atom that names the selection being transferred. target Specifies the target type to which the conversion was done. request_id Specifies an opaque identification for a specific request. client_data Specified the value passed in by the widget when it took ownership of the selection. This procedure, which is optional, is called by the Intrinsics after the requestor has retrieved the final (zero-length) segment of the incremental transfer to indicate that the entire transfer is complete. If this procedure is not specified, the Intrinsics will free only the final value returned by the selection owner using . The procedure pointer specified by the incremental selection owner to notify it if a transfer should be terminated prematurely is of type . typedef void (*XtCancelConvertSelectionProc) Widget w Atom *selection Atom *target XtRequestId *request_id XtPointer client_data w Specifies the widget that owns the selection. selection Specifies the atom that names the selection being transferred. target Specifies the target type to which the conversion was done. request_id Specifies an opaque identification for a specific request. client_data Specifies the value passed in by the widget when it took ownership of the selection. This procedure is called by the Intrinsics when it has been determined by means of a timeout or other mechanism that any remaining segments of the selection no longer need to be transferred. Upon receiving this callback, the selection request is considered complete and the owner can free the memory and any other resources that have been allocated for the transfer. Getting the Selection Value Incrementally To obtain the value of the selection using incremental transfers, use or . void XtGetSelectionValueIncremental Widget w Atom selection Atom target XtSelectionCallbackProc selection_callback XtPointer client_data Time time w Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired. target Specifies the type of information needed about the selection. selection_callback Specifies the callback procedure to be called to receive each data segment. client_data Specifies client-specific data to be passed to the specified callback procedure when it is invoked. time Specifies the timestamp that indicates when the selection request was initiated. This should be the timestamp of the event that triggered this request; the value CurrentTime is not acceptable. The function is similar to except that the selection_callback procedure will be called repeatedly upon delivery of multiple segments of the selection value. The end of the selection value is indicated when selection_callback is called with a non-NULL value of length zero, which must still be freed by the client. If the transfer of the selection is aborted in the middle of a transfer (for example, because of a timeout), the selection_callback procedure is called with a type value equal to the symbolic constant XT_CONVERT_FAIL so that the requestor can dispose of the partial selection value it has collected up until that point. Upon receiving XT_CONVERT_FAIL, the requesting client must determine for itself whether or not a partially completed data transfer is meaningful. For more information about selection, target, and time, see in the Inter-Client Communication Conventions Manual. void XtGetSelectionValuesIncremental Widget w Atom selection Atom *targets int count XtSelectionCallbackProc selection_callback XtPointer *client_data Time time w Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired. targets Specifies the types of information needed about the selection. count Specifies the length of the targets and client_data lists. selection_callback Specifies the callback procedure to be called to receive each selection value. client_data Specifies a list of client data (one for each target type) values that are passed to the callback procedure when it is invoked for the corresponding target. time Specifies the timestamp that indicates when the selection request was initiated. This should be the timestamp of the event that triggered this request; the value CurrentTime is not acceptable. The function is similar to except that it takes a list of targets and client data. is equivalent to calling successively for each target/client_data pair except that does guarantee that all the conversions will use the same selection value because the ownership of the selection cannot change in the middle of the list, as would be possible when calling repeatedly. For more information about selection, target, and time, see Section 2.6 in the Inter-Client Communication Conventions Manual. Setting the Selection Owner for Incremental Transfers To set the selection owner when using incremental transfers, use . Boolean XtOwnSelectionIncremental Widget w Atom selection Time time XtConvertSelectionIncrProc convert_callback XtLoseSelectionIncrProc lose_callback XtSelectionDoneIncrProc done_callback XtCancelConvertSelectionProc cancel_callback XtPointer client_data w Specifies the widget that wishes to become the owner. Must be of class Core or any subclass thereof. selection Specifies the atom that names the selection. time Specifies the timestamp that indicates when the selection ownership request was initiated. This should be the timestamp of the event that triggered ownership; the value CurrentTime is not acceptable. convert_callback Specifies the procedure to be called whenever the current value of the selection is requested. lose_callback Specifies the procedure to be called whenever the widget has lost selection ownership, or NULL if the owner is not interested in being notified. done_callback Specifies the procedure called after the requestor has received the entire selection, or NULL if the owner is not interested in being notified. cancel_callback Specifies the callback procedure to be called when a selection request aborts because a timeout expires, or NULL if the owner is not interested in being notified. client_data Specifies the argument to be passed to each of the callback procedures when they are called. The procedure informs the Intrinsics incremental selection mechanism that the specified widget wishes to own the selection. It returns True if the specified widget successfully becomes the selection owner or False otherwise. For more information about selection, target, and time, see Section 2.6 in the Inter-Client Communication Conventions Manual. If a done_callback procedure is specified, the client owns the storage allocated for passing the value to the Intrinsics. If done_callback is NULL, the convert_callback procedure must allocate storage using , , or , and the final value specified is freed by the Intrinsics when the transfer is complete. After a selection transfer has started, only one of the done_callback or cancel_callback procedures is invoked to indicate completion of the transfer. The lose_callback procedure does not indicate completion of any in-progress transfers; it is invoked at the time a SelectionClear event is dispatched regardless of any active transfers, which are still expected to continue. A widget that becomes the selection owner using may use to relinquish selection ownership. Setting and Retrieving Selection Target Parameters To specify target parameters for a selection request with a single target, use . void XtSetSelectionParameters Widget requestor Atom selection Atom type XtPointer value unsigned long length int format requestor Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the atom that names the selection. type Specifies the type of the property in which the parameters are passed. value Specifies a pointer to the parameters. length Specifies the number of elements containing data in value, each element of a size indicated by format. format Specifies the size in bits of the data in the elements of value. The specified parameters are copied and stored in a new property of the specified type and format on the requestor's window. To initiate a selection request with a target and these parameters, a subsequent call to or to specifying the same requestor widget and selection atom will generate a ConvertSelection request referring to the property containing the parameters. If is called more than once with the same widget and selection without a call to specify a request, the most recently specified parameters are used in the subsequent request. The possible values of format are 8, 16, or 32. If the format is 8, the elements of value are assumed to be sizeof(char); if 16, sizeof(short); if 32, sizeof(long). To generate a MULTIPLE target request with parameters for any of the multiple targets of the selection request, precede individual calls to and with corresponding individual calls to , and enclose these all within and XtSendSelectionRequest. and cannot be used to make selection requests with parameterized targets. To retrieve any target parameters needed to perform a selection conversion, the selection owner calls . void XtGetSelectionParameters Widget owner Atom selection XtRequestId request_id Atom *type_return XtPointer *value_return unsigned long *length_return int *format_return owner Specifies the widget that owns the specified selection. selection Specifies the selection being processed. request_id Specifies the requestor id in the case of incremental selections, or NULL in the case of atomic transfers. type_return Specifies a pointer to an atom in which the property type of the parameters is stored. value_return Specifies a pointer into which a pointer to the parameters is to be stored. A NULL is stored if no parameters accompany the request. length_return Specifies a pointer into which the number of data elements in value_return of size indicated by format_return are stored. format_return Specifies a pointer into which the size in bits of the parameter data in the elements of value is stored. may be called only from within an or from within the first call to an with a new request_id. It is the responsibility of the caller to free the returned parameters using when the parameters are no longer needed. Generating MULTIPLE Requests To have the Intrinsics bundle multiple calls to make selection requests into a single request using a MULTIPLE target, use and . void XtCreateSelectionRequest Widget requestor Atom selection requestor Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired. When is called, subsequent calls to , , , and , with the requestor and selection as specified to , are bundled into a single selection request with multiple targets. The request is made by calling . void XtSendSelectionRequest Widget requestor Atom selection Time time requestor Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired. time Specifies the timestamp that indicates when the selection request was initiated. The value CurrentTime is not acceptable. When is called with a value of requestor and selection matching a previous call to , a selection request is sent to the selection owner. If a single target request is queued, that request is made. If multiple targets are queued, they are bundled into a single request with a target of MULTIPLE using the specified timestamp. As the values are returned, the callbacks specified in , , , and are invoked. Multi-threaded applications should lock the application context before calling and release the lock after calling to ensure that the thread assembling the request is safe from interference by another thread assembling a different request naming the same widget and selection. To relinquish the composition of a MULTIPLE request without sending it, use . void XtCancelSelectionRequest Widget requestor Atom selection requestor Specifies the widget making the request. Must be of class Core or any subclass thereof. selection Specifies the particular selection desired. When is called, any requests queued since the last call to for the same widget and selection are discarded and any resources reserved are released. A subsequent call to will not result in any request being made. Subsequent calls to , , , or will not be deferred. Auxiliary Selection Properties Certain uses of parameterized selections require clients to name other window properties within a selection parameter. To permit reuse of temporary property names in these circumstances and thereby reduce the number of unique atoms created in the server, the Intrinsics provides two interfaces for acquiring temporary property names. To acquire a temporary property name atom for use in a selection request, the client may call . Atom XtReservePropertyAtom Widget w w Specifies the widget making a selection request. returns an atom that may be used as a property name during selection requests involving the specified widget. As long as the atom remains reserved, it is unique with respect to all other reserved atoms for the widget. To return a temporary property name atom for reuse and to delete the property named by that atom, use . void XtReleasePropertyAtom Widget w Atom atom w Specifies the widget used to reserve the property name atom. atom Specifies the property name atom returned by that is to be released for reuse. marks the specified property name atom as no longer in use and ensures that any property having that name on the specified widget's window is deleted. If atom does not specify a value returned by for the specified widget, the results are undefined. Retrieving the Most Recent Timestamp To retrieve the timestamp from the most recent call to that contained a timestamp, use . Time XtLastTimestampProcessed Display *display display Specifies an open display connection. If no KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify, EnterNotify, LeaveNotify, PropertyNotify, or SelectionClear event has yet been passed to for the specified display, returns zero. Retrieving the Most Recent Event To retrieve the event from the most recent call to for a specific display, use . XEvent *XtLastEventProcessed Display *display display Specifies the display connection from which to retrieve the event. Returns the last event passed to for the specified display. Returns NULL if there is no such event. The client must not modify the contents of the returned event. Merging Exposure Events into a Region The Intrinsics provide an utility function that merges Expose and GraphicsExpose events into a region for clients to process at once rather than processing individual rectangles. For further information about regions, see in Xlib — C Language X Interface.. To merge Expose and GraphicsExpose events into a region, use . void XtAddExposureToRegion XEvent *event Region region event Specifies a pointer to the Expose or GraphicsExpose event. region Specifies the region object (as defined in <X11/Xutil.h>). The function computes the union of the rectangle defined by the exposure event and the specified region. Then it stores the results back in region. If the event argument is not an Expose or GraphicsExpose event, returns without an error and without modifying region. This function is used by the exposure compression mechanism; see Translating Widget Coordinates To translate an x-y coordinate pair from widget coordinates to root window absolute coordinates, use . void XtTranslateCoords Widget w Position x Position *rootx_return w Specifies the widget. Must be of class RectObj or any subclass thereof. x y Specify the widget-relative x and y coordinates. rootx_return rooty_return Return the root-relative x and y coordinates. While is similar to the Xlib XTranslateCoordinates function, it does not generate a server request because all the required information already is in the widget's data structures. Translating a Window to a Widget To translate a given window and display pointer into a widget instance, use . Widget XtWindowToWidget Display *display Window window display Specifies the display on which the window is defined. window Specifies the drawable for which you want the widget. If there is a realized widget whose window is the specified drawable on the specified display, returns that widget. If not and if the drawable has been associated with a widget through , returns the widget associated with the drawable. In other cases it returns NULL. Handling Errors The Intrinsics allow a client to register procedures that are called whenever a fatal or nonfatal error occurs. These facilities are intended for both error reporting and logging and for error correction or recovery. Two levels of interface are provided: A high-level interface that takes an error name and class and retrieves the error message text from an error resource database. A low-level interface that takes a simple string to display. The high-level functions construct a string to pass to the lower-level interface. The strings may be specified in application code and are overridden by the contents of an external systemwide file, the "error database file". The location and name of this file are implementation-dependent. The application-context-specific error handling is not implemented on many systems, although the interfaces are always present. Most implementations will have just one set of error handlers for all application contexts within a process. If they are set for different application contexts, the ones registered last will prevail. To obtain the error database (for example, to merge with an application- or widget-specific database), use . XrmDatabase *XtAppGetErrorDatabase XtAppContext app_context app_context Specifies the application context. The function returns the address of the error database. The Intrinsics do a lazy binding of the error database and do not merge in the database file until the first call to . For a complete listing of all errors and warnings that can be generated by the Intrinsics, see The high-level error and warning handler procedure pointers are of type . typedef void (*XtErrorMsgHandler) String name String type String class String defaultp String *params Cardinal *num_params name Specifies the name to be concatenated with the specified type to form the resource name of the error message. type Specifies the type to be concatenated with the name to form the resource name of the error message. class Specifies the resource class of the error message. defaultp Specifies the default message to use if no error database entry is found. params Specifies a pointer to a list of parameters to be substituted in the message. num_params Specifies the number of entries in params. The specified name can be a general kind of error, like "invalidParameters" or "invalidWindow", and the specified type gives extra information such as the name of the routine in which the error was detected. Standard printf notation is used to substitute the parameters into the message. An error message handler can obtain the error database text for an error or a warning by calling . void XtAppGetErrorDatabaseText XtAppContext app_context String name String default String buffer_return int nbytes XrmDatabase database app_context Specifies the application context. name type Specify the name and type concatenated to form the resource name of the error message. class Specifies the resource class of the error message. default Specifies the default message to use if an error database entry is not found. buffer_return Specifies the buffer into which the error message is to be returned. nbytes Specifies the size of the buffer in bytes. database Specifies the name of the alternative database to be used, or NULL if the application context's error database is to be used. The returns the appropriate message from the error database or returns the specified default message if one is not found in the error database. To form the full resource name and class when querying the database, the name and type are concatenated with a single "." between them and the class is concatenated with itself with a single "." if it does not already contain a ".". To return the application name and class as passed to for a particular Display, use . void XtGetApplicationNameAndClass Display* display String* name_return String* class_return display Specifies an open display connection that has been initialized with . name_return Returns the application name. class_return Returns the application class. returns the application name and class passed to for the specified display. If the display was never initialized or has been closed, the result is undefined. The returned strings are owned by the Intrinsics and must not be modified or freed by the caller. To register a procedure to be called on fatal error conditions, use . XtErrorMsgHandler XtAppSetErrorMsgHandler XtAppContext app_context XtErrorMsgHandler msg_handler app_context Specifies the application context. msg_handler Specifies the new fatal error procedure, which should not return. returns a pointer to the previously installed high-level fatal error handler. The default high-level fatal error handler provided by the Intrinsics is named _XtDefaultErrorMsg and constructs a string from the error resource database and calls . Fatal error message handlers should not return. If one does, subsequent Intrinsics behavior is undefined. To call the high-level error handler, use . void XtAppErrorMsg XtAppContext app_context String name String type String class String default String *params Cardinal *num_params app_context Specifies the application context. name Specifies the general kind of error. type Specifies the detailed name of the error. class Specifies the resource class. default Specifies the default message to use if an error database entry is not found. params Specifies a pointer to a list of values to be stored in the message. num_params Specifies the number of entries in params. The Intrinsics internal errors all have class "XtToolkitError". To register a procedure to be called on nonfatal error conditions, use . XtErrorMsgHandler XtAppSetWarningMsgHandler XtAppContext app_context XtErrorMsgHandler msg_handler app_context Specifies the application context. msg_handler Specifies the new nonfatal error procedure, which usually returns. returns a pointer to the previously installed high-level warning handler. The default high-level warning handler provided by the Intrinsics is named _XtDefaultWarningMsg and constructs a string from the error resource database and calls . To call the installed high-level warning handler, use . void XtAppWarningMsg XtAppContext app_context String name String type String class String default String *params Cardinal *num_params app_context Specifies the application context. name Specifies the general kind of error. type Specifies the detailed name of the error. class Specifies the resource class. default Specifies the default message to use if an error database entry is not found. params Specifies a pointer to a list of values to be stored in the message. num_params Specifies the number of entries in params. The Intrinsics internal warnings all have class "XtToolkitError". The low-level error and warning handler procedure pointers are of type . typedef void (*XtErrorHandler) String message message Specifies the error message. The error handler should display the message string in some appropriate fashion. To register a procedure to be called on fatal error conditions, use . XtErrorHandler XtAppSetErrorHandler XtAppContext app_context XtErrorHandler handler app_context Specifies the application context. handler Specifies the new fatal error procedure, which should not return. returns a pointer to the previously installed low-level fatal error handler. The default low-level error handler provided by the Intrinsics is _XtDefaultError. On POSIX-based systems, it prints the message to standard error and terminates the application. Fatal error message handlers should not return. If one does, subsequent Intrinsics behavior is undefined. To call the installed fatal error procedure, use . void XtAppError XtAppContext app_context String message app_context Specifies the application context. message Specifies the message to be reported. Most programs should use , not , to provide for customization and internationalization of error messages. To register a procedure to be called on nonfatal error conditions, use . XtErrorHandler XtAppSetWarningHandler XtAppContext app_context XtErrorHandler handler app_context Specifies the application context. handler Specifies the new nonfatal error procedure, which usually returns. returns a pointer to the previously installed low-level warning handler. The default low-level warning handler provided by the Intrinsics is _XtDefaultWarning. On POSIX-based systems, it prints the message to standard error and returns to the caller. To call the installed nonfatal error procedure, use . void XtAppWarning XtAppContext app_context String message app_context Specifies the application context. message Specifies the nonfatal error message to be reported. Most programs should use , not , to provide for customization and internationalization of warning messages. Setting WM_COLORMAP_WINDOWS A client may set the value of the WM_COLORMAP_WINDOWS property on a widget's window by calling . void XtSetWMColormapWindows Widget widget Widget* list Cardinal count widget Specifies the widget on whose window the WM_COLORMAP_WINDOWS property is stored. Must be of class Core or any subclass thereof. list Specifies a list of widgets whose windows are potentially to be listed in the WM_COLORMAP_WINDOWS property. count Specifies the number of widgets in list. returns immediately if widget is not realized or if count is 0. Otherwise, constructs an ordered list of windows by examining each widget in list in turn and ignoring the widget if it is not realized, or adding the widget's window to the window list if the widget is realized and if its colormap resource is different from the colormap resources of all widgets whose windows are already on the window list. Finally, stores the resulting window list in the WM_COLORMAP_WINDOWS property on the specified widget's window. Refer to Section 4.1.8 in the Inter-Client Communication Conventions Manual. for details of the semantics of the WM_COLORMAP_WINDOWS property. Finding File Names The Intrinsics provide procedures to look for a file by name, allowing string substitutions in a list of file specifications. Two routines are provided for this: and . uses an arbitrary set of client-specified substitutions, and uses a set of standard substitutions corresponding to the X/Open Portability Guide language localization conventions. Most applications should use . A string substitution is defined by a list of Substitution entries. typedef struct { char match; String substitution; } SubstitutionRec, *Substitution; File name evaluation is handled in an operating-system-dependent fashion by an procedure. typedef Boolean (*XtFilePredicate) String filename filename Specifies a potential filename. A file predicate procedure is called with a string that is potentially a file name. It should return True if this string specifies a file that is appropriate for the intended use and False otherwise. To search for a file using substitutions in a path list, use . String XtFindFile String path Substitution substitutions Cardinal num_substitutions XtFilePredicate predicate path Specifies a path of file names, including substitution characters. substitutions Specifies a list of substitutions to make into the path. num_substitutions Specifies the number of substitutions passed in. predicate Specifies a procedure called to judge each potential file name, or NULL. The path parameter specifies a string that consists of a series of potential file names delimited by colons. Within each name, the percent character specifies a string substitution selected by the following character. The character sequence "%:" specifies an embedded colon that is not a delimiter; the sequence is replaced by a single colon. The character sequence "%%" specifies a percent character that does not introduce a substitution; the sequence is replaced by a single percent character. If a percent character is followed by any other character, looks through the specified substitutions for that character in the match field and, if found, replaces the percent and match characters with the string in the corresponding substitution field. A substitution field entry of NULL is equivalent to a pointer to an empty string. If the operating system does not interpret multiple embedded name separators in the path (i.e., "/" in POSIX) the same way as a single separator, will collapse multiple separators into a single one after performing all string substitutions. Except for collapsing embedded separators, the contents of the string substitutions are not interpreted by and may therefore contain any operating-system-dependent characters, including additional name separators. Each resulting string is passed to the predicate procedure until a string is found for which the procedure returns True; this string is the return value for . If no string yields a True return from the predicate, returns NULL. If the predicate parameter is NULL, an internal procedure that checks if the file exists, is readable, and is not a directory is used. It is the responsibility of the caller to free the returned string using when it is no longer needed. To search for a file using standard substitutions in a path list, use . String XtResolvePathname Display *display String type Substitution substitutions Cardinal num_substitutions XtFilePredicate predicate display Specifies the display to use to find the language for language substitutions. type filename suffix Specify values to substitute into the path. path Specifies the list of file specifications, or NULL. substitutions Specifies a list of additional substitutions to make into the path, or NULL. num_substitutions Specifies the number of entries in substitutions. predicate Specifies a procedure called to judge each potential file name, or NULL. The substitutions specified by are determined from the value of the language string retrieved by for the specified display. To set the language for all applications specify "*xnlLanguage: lang" in the resource database. The format and content of the language string are implementation-defined. One suggested syntax is to compose the language string of three parts; a "language part", a "territory part" and a "codeset part". The manner in which this composition is accomplished is implementation-defined, and the Intrinsics make no interpretation of the parts other than to use them in substitutions as described below. calls with the following substitutions in addition to any passed by the caller and returns the value returned by : %N The value of the filename parameter, or the application's class name if filename is NULL. %T The value of the type parameter. %S The value of the suffix parameter. %L The language string associated with the specified display. %l The language part of the display's language string. %t The territory part of the display's language string. %c The codeset part of the display's language string. %C The customization string retrieved from the resource database associated with display. %D The value of the implementation-specific default path. If a path is passed to , it is passed along to . If the path argument is NULL, the value of the XFILESEARCHPATH environment variable is passed to . If XFILESEARCHPATH is not defined, an implementation-specific default path is used that contains at least six entries. These entries must contain the following substitutions: 1. %C, %N, %S, %T, %L or %C, %N, %S, %T, %l, %t, %c 2. %C, %N, %S, %T, %l 3. %C, %N, %S, %T 4. %N, %S, %T, %L or %N, %S, %T, %l, %t, %c 5. %N, %S, %T, %l 6. %N, %S, %T The order of these six entries within the path must be as given above. The order and use of substitutions within a given entry are implementation-dependent. If the path begins with a colon, it is preceded by %N%S. If the path includes two adjacent colons, %N%S is inserted between them. The type parameter is intended to be a category of files, usually being translated into a directory in the pathname. Possible values might include "app-defaults", "help", and "bitmap". The suffix parameter is intended to be appended to the file name. Possible values might include ".txt", ".dat", and ".bm". A suggested value for the default path on POSIX-based systems is /usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:\ /usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:\ /usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S Using this example, if the user has specified a language, it is used as a subdirectory of /usr/lib/X11 that is searched for other files. If the desired file is not found there, the lookup is tried again using just the language part of the specification. If the file is not there, it is looked for in /usr/lib/X11. The type parameter is used as a subdirectory of the language directory or of /usr/lib/X11, and suffix is appended to the file name. The %D substitution allows the addition of path elements to the implementation-specific default path, typically to allow additional directories to be searched without preventing resources in the system directories from being found. For example, a user installing resource files under a directory called "ourdir" might set XFILESEARCHPATH to %D:ourdir/%T/%N%C:ourdir/%T/%N The customization string is obtained by querying the resource database currently associated with the display (the database returned by XrmGetDatabase) for the resource application_name.customization, class application_class.Customization, where application_name and application_class are the values returned by . If no value is specified in the database, the empty string is used. It is the responsibility of the caller to free the returned string using when it is no longer needed. Hooks for External Agents Applications may register functions that are called at a particular control points in the Intrinsics. These functions are intended to be used to provide notification of an "X Toolkit event", such as widget creation, to an external agent, such as an interactive resource editor, drag-and-drop server, or an aid for physically challenged users. The control points containing such registration hooks are identified in a "hook registration" object. To retrieve the hook registration widget, use . Widget XtHooksOfDisplay Display *display display Specifies the desired display. The class of this object is a private, implementation-dependent subclass of Object. The hook object has no parent. The resources of this object are the callback lists for hooks and the read-only resources for getting a list of parentless shells. All of the callback lists are initially empty. When a display is closed, the hook object associated with it is destroyed. The following procedures can be called with the hook registration object as an argument: , , , , , , , , XtSuperclass, , , XtIsObject, XtIsRectObj, XtIsWidget, XtIsComposite, XtIsConstraint, XtIsShell, XtIsOverrideShell, XtIsWMShell, XtIsVendorShell, XtIsTransientShell, XtIsToplevelShell, XtIsApplicationShell, XtIsSessionShell , XtParent, , , , , Hook Object Resources The resource names, classes, and representation types that are specified in the hook object resource list are: Name Class Representation XtNcreateHook XtCCallback XtRCallback XtNchangeHook XtCCallback XtRCallback XtNconfigureHook XtCCallback XtRCallback XtNgeometryHook XtCCallback XtRCallback XtNdestroyHook XtCCallback XtRCallback XtNshells XtCReadOnly XtRWidgetList XtNnumShells XtCReadOnly XtRCardinal Descriptions of each of these resources: The XtNcreateHook callback list is called from: , , , , and their corresponding varargs versions. The call_data parameter in a createHook callback may be cast to type XtCreateHookData. typedef struct { String type; Widget widget; ArgList args; Cardinal num_args; } XtCreateHookDataRec, *XtCreateHookData; The type is set to XtHcreate, widget is the newly created widget, and args and num_args are the arguments passed to the create function. The callbacks are called before returning from the create function. The XtNchangeHook callback list is called from: , , , , , , , XtAddCallbacks, , , , , , , , , The call_data parameter in a changeHook callback may be cast to type XtChangeHookData. typedef struct { String type; Widget widget; XtPointer event_data; Cardinal num_event_data; } XtChangeHookDataRec, *XtChangeHookData; When the changeHook callbacks are called as a result of a call to or , type is set to XtHsetValues, widget is the new widget passed to the set_values procedure, and event_data may be cast to type XtChangeHookSetValuesData. typedef struct { Widget old, req; ArgList args; Cardinal num_args; } XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData; The old, req, args, and num_args are the parameters passed to the set_values procedure. The callbacks are called after the set_values and constraint set_values procedures have been called. When the changeHook callbacks are called as a result of a call to or , type is set to XtHmanageChildren, widget is the parent, event_data may be cast to type WidgetList and is the list of children being managed, and num_event_data is the length of the widget list. The callbacks are called after the children have been managed. When the changeHook callbacks are called as a result of a call to or , type is set to XtHunmanageChildren, widget is the parent, event_data may be cast to type WidgetList and is a list of the children being unmanaged, and num_event_data is the length of the widget list. The callbacks are called after the children have been unmanaged. The changeHook callbacks are called twice as a result of a call to , once after unmanaging and again after managing. When the callbacks are called the first time, type is set to XtHunmanageSet, widget is the parent, event_data may be cast to type WidgetList and is a list of the children being unmanaged, and num_event_data is the length of the widget list. When the callbacks are called the second time, the type is set to XtHmanageSet, widget is the parent, event_data may be cast to type WidgetList and is a list of the children being managed, and num_event_data is the length of the widget list. When the changeHook callbacks are called as a result of a call to , the type is set to XtHrealizeWidget and widget is the widget being realized. The callbacks are called after the widget has been realized. When the changeHook callbacks are called as a result of a call to , the type is set to XtHunrealizeWidget, and widget is the widget being unrealized. The callbacks are called after the widget has been unrealized. When the changeHook callbacks are called as a result of a call to , type is set to XtHaddCallback, widget is the widget to which the callback is being added, and event_data may be cast to type String and is the name of the callback being added. The callbacks are called after the callback has been added to the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHaddCallbacks, widget is the widget to which the callbacks are being added, and event_data may be cast to type String and is the name of the callbacks being added. The callbacks are called after the callbacks have been added to the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHremoveCallback, widget is the widget from which the callback is being removed, and event_data may be cast to type String and is the name of the callback being removed. The callbacks are called after the callback has been removed from the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHremoveCallbacks, widget is the widget from which the callbacks are being removed, and event_data may be cast to type String and is the name of the callbacks being removed. The callbacks are called after the callbacks have been removed from the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHremoveAllCallbacks and widget is the widget from which the callbacks are being removed. The callbacks are called after the callbacks have been removed from the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHaugmentTranslations and widget is the widget whose translations are being modified. The callbacks are called after the widget's translations have been modified. When the changeHook callbacks are called as a result of a call to , the type is set to XtHoverrideTranslations and widget is the widget whose translations are being modified. The callbacks are called after the widget's translations have been modified. When the changeHook callbacks are called as a result of a call to , The type is XtHuninstallTranslations and widget is the widget whose translations are being uninstalled. The callbacks are called after the widget's translations have been uninstalled. When the changeHook callbacks are called as a result of a call to , the type is set to XtHsetKeyboardFocus and event_data may be cast to type Widget and is the value of the descendant argument passed to . The callbacks are called before returning from . When the changeHook callbacks are called as a result of a call to , type is set to XtHsetWMColormapWindows, event_data may be cast to type WidgetList and is the value of the list argument passed to , and num_event_data is the length of the list. The callbacks are called before returning from . When the changeHook callbacks are called as a result of a call to , the type is set to XtHsetMappedWhenManaged and event_data may be cast to type Boolean and is the value of the mapped_when_managed argument passed to . The callbacks are called after setting the widget's mapped_when_managed field and before realizing or unrealizing the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHmapWidget and widget is the widget being mapped. The callbacks are called after mapping the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHunmapWidget and widget is the widget being unmapped. The callbacks are called after unmapping the widget. When the changeHook callbacks are called as a result of a call to , the type is set to XtHpopup, widget is the widget being popped up, and event_data may be cast to type XtGrabKind and is the value of the grab_kind argument passed to . The callbacks are called before returning from . When the changeHook callbacks are called as a result of a call to , the type is set to XtHpopupSpringLoaded and widget is the widget being popped up. The callbacks are called before returning from . When the changeHook callbacks are called as a result of a call to , the type is set to XtHpopdown and widget is the widget being popped down. The callbacks are called before returning from . A widget set that exports interfaces that change application state without employing the Intrinsics library should invoke the change hook itself. This is done by: XtCallCallbacks(XtHooksOfDisplay(dpy), XtNchangeHook, call_data); The XtNconfigureHook callback list is called any time the Intrinsics move, resize, or configure a widget and when is called. The call_data parameter may be cast to type XtConfigureHookData. typedef struct { String type; Widget widget; XtGeometryMask changeMask; XWindowChanges changes; } XtConfigureHookDataRec, *XtConfigureHookData; When the configureHook callbacks are called, the type is XtHconfigure, widget is the widget being configured, and changeMask and changes reflect the changes made to the widget. The callbacks are called after changes have been made to the widget. The XtNgeometryHook callback list is called from and once before and once after geometry negotiation occurs. The call_data parameter may be cast to type XtGeometryHookData. typedef struct { String type; Widget widget; XtWidgetGeometry* request; XtWidgetGeometry* reply; XtGeometryResult result; } XtGeometryHookDataRec, *XtGeometryHookData; When the geometryHook callbacks are called prior to geometry negotiation, the type is XtHpreGeometry, widget is the widget for which the request is being made, and request is the requested geometry. When the geometryHook callbacks are called after geometry negotiation, the type is XtHpostGeometry, widget is the widget for which the request was made, request is the requested geometry, reply is the resulting geometry granted, and result is the value returned from the geometry negotiation. The XtNdestroyHook callback list is called when a widget is destroyed. The call_data parameter may be cast to type XtDestroyHookData. typedef struct { String type; Widget widget; } XtDestroyHookDataRec, *XtDestroyHookData; When the destroyHook callbacks are called as a result of a call to , the type is XtHdestroy and widget is the widget being destroyed. The callbacks are called upon completion of phase one destroy for a widget. The XtNshells and XtnumShells are read-only resources that report a list of all parentless shell widgets associated with a display. Clients who use these hooks must exercise caution in calling Intrinsics functions in order to avoid recursion. Querying Open Displays To retrieve a list of the Displays associated with an application context, use . void XtGetDisplays XtAppContext app_context Display ***dpy_return Cardinal *num_dpy_return app_context Specifies the application context. dpy_return Returns a list of open Display connections in the specified application context. num_dpy_return Returns the count of open Display connections in dpy_return. may be used by an external agent to query the list of open displays that belong to an application context. To free the list of displays, use . callbacks are called as a result of a call to , the type is set to XtHaugmentTranslations and widget is the widget whose translations are being modified. The callbacks alibXt-1.1.5/specs/Makefile.in000064401431060000012000000607001252061035000162400ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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@ # # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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 am__dist_shelf_DATA_DIST = intrinsics.xml acknowledgement.xml \ preface.xml CH01.xml CH02.xml CH03.xml CH04.xml CH05.xml \ CH06.xml CH07.xml CH08.xml CH09.xml CH10.xml CH11.xml CH12.xml \ CH13.xml appA.xml appB.xml appC.xml appD.xml appE.xml appF.xml 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)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = intrinsics.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@chapters = \ @ENABLE_SPECS_TRUE@ acknowledgement.xml \ @ENABLE_SPECS_TRUE@ preface.xml \ @ENABLE_SPECS_TRUE@ CH01.xml \ @ENABLE_SPECS_TRUE@ CH02.xml \ @ENABLE_SPECS_TRUE@ CH03.xml \ @ENABLE_SPECS_TRUE@ CH04.xml \ @ENABLE_SPECS_TRUE@ CH05.xml \ @ENABLE_SPECS_TRUE@ CH06.xml \ @ENABLE_SPECS_TRUE@ CH07.xml \ @ENABLE_SPECS_TRUE@ CH08.xml \ @ENABLE_SPECS_TRUE@ CH09.xml \ @ENABLE_SPECS_TRUE@ CH10.xml \ @ENABLE_SPECS_TRUE@ CH11.xml \ @ENABLE_SPECS_TRUE@ CH12.xml \ @ENABLE_SPECS_TRUE@ CH13.xml \ @ENABLE_SPECS_TRUE@ appA.xml \ @ENABLE_SPECS_TRUE@ appB.xml \ @ENABLE_SPECS_TRUE@ appC.xml \ @ENABLE_SPECS_TRUE@ appD.xml \ @ENABLE_SPECS_TRUE@ appE.xml \ @ENABLE_SPECS_TRUE@ appF.xml # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir) # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.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) --foreign specs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/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_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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 install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || 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)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || 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)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-dist_shelfDATA install-shelfDATA 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: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA 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-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # 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: r)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@libXt-1.1.5/specs/appC.xml000064401431060000012000001560511252061032400156060ustar00alancstaff00002660200006 Compatibility Functions <footnote> <para> This appendix is part of the formal Intrinsics Specification. </para> </footnote> In prototype versions of the X Toolkit each widget class implemented an Xt<Widget>Create (for example, XtLabelCreate) function, in which most of the code was identical from widget to widget. In the Intrinsics, a single generic performs most of the common work and then calls the initialize procedure implemented for the particular widget class. Each Composite class also implemented the procedures Xt<Widget>Add and an Xt<Widget>Delete (for example, XtButtonBoxAddButton and XtButtonBoxDeleteButton). In the Intrinsics, the Composite generic procedures and perform error checking and screening out of certain children. Then they call the change_managed procedure implemented for the widget's Composite class. If the widget's parent has not yet been realized, the call to the change_managed procedure is delayed until realization time. Old-style calls can be implemented in the X Toolkit by defining one-line procedures or macros that invoke a generic routine. For example, you could define the macro XtLabelCreate as: #define XtLabelCreate(name, parent, args, num_args) \ ((LabelWidget) XtCreateWidget(name, labelWidgetClass, parent, args, num_args)) Pop-up shells in some of the prototypes automatically performed an on their child within their insert_child procedure. Creators of pop-up children need to call themselves. and have been replaced by and . To initialize the Intrinsics internals, create an application context, open and initialize a display, and create the initial application shell instance, an application may use or . Widget XtAppInitialize XtAppContext *app_context_return String application_class XrmOptionDescList options Cardinal num_options int *argc_in_out String *argv_in_out String *fallback_resources ArgList args Cardinal num_args app_context_return Returns the application context, if non-NULL. application_class Specifies the class name of the application. options Specifies the command line options table. num_options Specifies the number of entries in options. argc_in_out Specifies a pointer to the number of command line arguments. argv_in_out Specifies a pointer to the command line arguments. fallback_resources Specifies resource values to be used if the application class resource file cannot be opened or read, or NULL. args Specifies the argument list to override any other resource specifications for the created shell widget. num_args Specifies the number of entries in the argument list. The function calls followed by , then calls with display_string NULL and application_name NULL, and finally calls with application_name NULL, widget_class application\%Shell\%Widget\%Class, and the specified args and num_args and returns the created shell. The modified argc and argv returned by are returned in argc_in_out and argv_in_out. If app_context_return is not NULL, the created application context is also returned. If the display specified by the command line cannot be opened, an error message is issued and terminates the application. If fallback_resources is non-NULL, is called with the value prior to calling . Widget XtVaAppInitialize XtAppContext *app_context_return String application_class XrmOptionDescList options Cardinal num_options int *argc_in_out String *argv_in_out String *fallback_resources app_context_return Returns the application context, if non-NULL. application_class Specifies the class name of the application. options Specifies the command line options table. num_options Specifies the number of entries in options. argc_in_out Specifies a pointer to the number of command line arguments. argv_in_out Specifies the command line arguments array. fallback_resources Specifies resource values to be used if the application class resource file cannot be opened, or NULL. ... Specifies the variable argument list to override any other resource specifications for the created shell. The procedure is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. As a convenience to people converting from earlier versions of the toolkit without application contexts, the following routines exist: , , , , , , , , , , , , and . Widget XtInitialize String shell_name String application_class XrmOptionDescRec options Cardinal num_options int *argc String argv shell_name This parameter is ignored; therefore, you can specify NULL. application_class Specifies the class name of this application. options Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to XrmParseCommand. num_options Specifies the number of entries in the options list. argc Specifies a pointer to the number of command line parameters. argv Specifies the command line parameters. calls to initialize the toolkit internals, creates a default application context for use by the other convenience routines, calls with display_string NULL and application_name NULL, and finally calls with application_name NULL and returns the created shell. The semantics of calling more than once are undefined. This routine has been replaced by . void XtMainLoop void first reads the next alternate input, timer, or X event by calling . Then it dispatches this to the appropriate registered procedure by calling . This routine has been replaced by . void XtNextEvent XEvent *event_return event_return Returns the event information to the specified event structure. If no input is on the X input queue for the default application context, flushes the X output buffer and waits for an event while looking at the alternate input sources and timeout values and calling any callback procedures triggered by them. This routine has been replaced by . must be called before using this routine. void XtProcessEvent XtInputMask mask mask Specifies the type of input to process. processes one X event, timeout, or alternate input source (depending on the value of mask), blocking if necessary. It has been replaced by . must be called before using this function. Boolean XtPeekEvent XEvent *event_return event_return Returns the event information to the specified event structure. If there is an event in the queue for the default application context, fills in the event and returns a nonzero value. If no X input is on the queue, flushes the output buffer and blocks until input is available, possibly calling some timeout callbacks in the process. If the input is an event, fills in the event and returns a nonzero value. Otherwise, the input is for an alternate input source, and returns zero. This routine has been replaced by . must be called before using this routine. Boolean XtPending returns a nonzero value if there are events pending from the X server or alternate input sources in the default application context. If there are no events pending, it flushes the output buffer and returns a zero value. It has been replaced by . must be called before using this routine. XtInputId XtAddInput int source XtPointer condition XtInputCallbackProc proc XtPointer client_data source Specifies the source file descriptor on a POSIX-based system or other operating-system-dependent device specification. condition Specifies the mask that indicates either a read, write, or exception condition or some operating-system-dependent condition. proc Specifies the procedure called when input is available. client_data Specifies the parameter to be passed to proc when input is available. The function registers in the default application context a new source of events, which is usually file input but can also be file output. (The word file should be loosely interpreted to mean any sink or source of data.) also specifies the conditions under which the source can generate events. When input is pending on this source in the default application context, the callback procedure is called. This routine has been replaced by . must be called before using this routine. XtIntervalId XtAddTimeOut unsigned long interval XtTimerCallbackProc proc XtPointer client_data interval Specifies the time interval in milliseconds. proc Specifies the procedure to be called when time expires. client_data Specifies the parameter to be passed to proc when it is called. The function creates a timeout in the default application context and returns an identifier for it. The timeout value is set to interval. The callback procedure will be called after the time interval elapses, after which the timeout is removed. This routine has been replaced by . must be called before using this routine. XtWorkProcId XtAddWorkProc XtWorkProc proc XtPointer client_data proc Procedure to call to do the work. client_data Client data to pass to proc when it is called. This routine registers a work procedure in the default application context. It has been replaced by . must be called before using this routine. Widget XtCreateApplicationShell String name WidgetClass widget_class ArgList args Cardinal num_args name This parameter is ignored; therefore, you can specify NULL. widget_class Specifies the widget class pointer for the created application shell widget. This will usually be topLevelShellWidgetClass or a subclass thereof. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in args. The procedure calls with application_name NULL, the application class passed to , and the default application context created by . This routine has been replaced by . An old-format resource type converter procedure pointer is of type . typedef void (*XtConverter) XrmValue *args Cardinal *num_args XrmValue *from XrmValue *to args Specifies a list of additional XrmValue arguments to the converter if additional context is needed to perform the conversion, or NULL. num_args Specifies the number of entries in args. from Specifies the value to convert. to Specifies the descriptor to use to return the converted value. Type converters should perform the following actions: Check to see that the number of arguments passed is correct. Attempt the type conversion. If successful, return the size and pointer to the data in the to argument; otherwise, call and return without modifying the to argument. Most type converters just take the data described by the specified from argument and return data by writing into the specified to argument. A few need other information, which is available in the specified argument list. A type converter can invoke another type converter, which allows differing sources that may convert into a common intermediate result to make maximum use of the type converter cache. Note that the address returned in to->addr cannot be that of a local variable of the converter because this is not valid after the converter returns. It should be a pointer to a static variable. The procedure type has been replaced by . The function is a convenience routine for old-format resource converters that convert from strings. void XtStringConversionWarning String src src Specifies the string that could not be converted. dst_type Specifies the name of the type to which the string could not be converted. The function issues a warning message with name "conversionError", type "string", class "XtToolkitError, and the default message string "Cannot convert "src" to type dst_type". This routine has been superseded by . To register an old-format converter, use or . void XtAddConverter String from_type String to_type XtConverter converter XtConvertArgList convert_args Cardinal num_args from_type Specifies the source type. to_type Specifies the destination type. converter Specifies the type converter procedure. convert_args Specifies how to compute the additional arguments to the converter, or NULL. num_args Specifies the number of entries in convert_args. is equivalent in function to with cache_type equal to XtCacheAll for old-format type converters. It has been superseded by . void XtAppAddConverter XtAppContext app_context String from_type String to_type XtConverter converter XtConvertArgList convert_args Cardinal num_args app_context Specifies the application context. from_type Specifies the source type. to_type Specifies the destination type. converter Specifies the type converter procedure. convert_args Specifies how to compute the additional arguments to the converter, or NULL. num_args Specifies the number of entries in convert_args. is equivalent in function to with cache_type equal to XtCacheAll for old-format type converters. It has been superseded by . To invoke resource conversions, a client may use or, for old-format converters only, . void XtConvert Widget w String from_type XrmValuePtr from String to_type XrmValuePtr to_return w Specifies the widget to use for additional arguments, if any are needed. from_type Specifies the source type. from Specifies the value to be converted. to_type Specifies the destination type. to_return Returns the converted value. void XtDirectConvert XtConverter converter XrmValuePtr args Cardinal num_args XrmValuePtr from XrmValuePtr to_return converter Specifies the conversion procedure to be called. args Specifies the argument list that contains the additional arguments needed to perform the conversion (often NULL). num_args Specifies the number of entries in args. from Specifies the value to be converted. to_return Returns the converted value. The function looks up the type converter registered to convert from_type to to_type, computes any additional arguments needed, and then calls or . The function looks in the converter cache to see if this conversion procedure has been called with the specified arguments. If so, it returns a descriptor for information stored in the cache; otherwise, it calls the converter and enters the result in the cache. Before calling the specified converter, sets the return value size to zero and the return value address to NULL. To determine if the conversion was successful, the client should check to_return.addr for non-NULL. The data returned by must be copied immediately by the caller, as it may point to static data in the type converter. has been replaced by , and has been superseded by . To deallocate a shared GC when it is no longer needed, use . void XtDestroyGC Widget w GC gc w Specifies any object on the display for which the shared GC was created. Must be of class Object or any subclass thereof. gc Specifies the shared GC to be deallocated. References to sharable GCs are counted and a free request is generated to the server when the last user of a given GC destroys it. Note that some earlier versions of had only a gc argument. Therefore, this function is not very portable, and you are encouraged to use instead. To declare an action table in the default application context and register it with the translation manager, use . void XtAddActions XtActionList actions Cardinal num_actions actions Specifies the action table to register. num_actions Specifies the number of entries in actions. If more than one action is registered with the same name, the most recently registered action is used. If duplicate actions exist in an action table, the first is used. The Intrinsics register an action table for and as part of X Toolkit initialization. This routine has been replaced by . must be called before using this routine. To set the Intrinsics selection timeout in the default application context, use . void XtSetSelectionTimeout unsigned long timeout timeout Specifies the selection timeout in milliseconds. This routine has been replaced by . must be called before using this routine. To get the current selection timeout value in the default application context, use . unsigned long XtGetSelectionTimeout The selection timeout is the time within which the two communicating applications must respond to one another. If one of them does not respond within this interval, the Intrinsics abort the selection request. This routine has been replaced by . must be called before using this routine. To obtain the global error database (for example, to merge with an application- or widget-specific database), use . XrmDatabase *XtGetErrorDatabase The function returns the address of the error database. The Intrinsics do a lazy binding of the error database and do not merge in the database file until the first call to XtGetErrorDatbaseText. This routine has been replaced by . An error message handler can obtain the error database text for an error or a warning by calling . void XtGetErrorDatabaseText String name String default String buffer_return int nbytes name type Specify the name and type that are concatenated to form the resource name of the error message. class Specifies the resource class of the error message. default Specifies the default message to use if an error database entry is not found. buffer_return Specifies the buffer into which the error message is to be returned. nbytes Specifies the size of the buffer in bytes. The returns the appropriate message from the error database associated with the default application context or returns the specified default message if one is not found in the error database. To form the full resource name and class when querying the database, the name and type are concatenated with a single "." between them and the class is concatenated with itself with a single "." if it does not already contain a ".". This routine has been superseded by . To register a procedure to be called on fatal error conditions, use . void XtSetErrorMsgHandler XtErrorMsgHandler msg_handler msg_handler Specifies the new fatal error procedure, which should not return. The default error handler provided by the Intrinsics constructs a string from the error resource database and calls . Fatal error message handlers should not return. If one does, subsequent Intrinsics behavior is undefined. This routine has been superseded by . To call the high-level error handler, use . void XtErrorMsg String name String type String class String default String *params Cardinal *num_params name Specifies the general kind of error. type Specifies the detailed name of the error. class Specifies the resource class. default Specifies the default message to use if an error database entry is not found. params Specifies a pointer to a list of values to be stored in the message. num_params Specifies the number of entries in params. This routine has been superseded by . To register a procedure to be called on nonfatal error conditions, use . void XtSetWarningMsgHandler XtErrorMsgHandler msg_handler msg_handler Specifies the new nonfatal error procedure, which usually returns. The default warning handler provided by the Intrinsics constructs a string from the error resource database and calls . This routine has been superseded by . To call the installed high-level warning handler, use . void XtWarningMsg String name String type String class String default String *params Cardinal *num_params name Specifies the general kind of error. type Specifies the detailed name of the error. class Specifies the resource class. default Specifies the default message to use if an error database entry is not found. params Specifies a pointer to a list of values to be stored in the message. num_params Specifies the number of entries in params. This routine has been superseded by . To register a procedure to be called on fatal error conditions, use . void XtSetErrorHandler XtErrorHandler handler handler Specifies the new fatal error procedure, which should not return. The default error handler provided by the Intrinsics is _XtError. On POSIX-based systems, it prints the message to standard error and terminates the application. Fatal error message handlers should not return. If one does, subsequent X Toolkit behavior is undefined. This routine has been superseded by . To call the installed fatal error procedure, use . void XtError String message message Specifies the message to be reported. Most programs should use , not , to provide for customization and internationalization of error messages. This routine has been superseded by . To register a procedure to be called on nonfatal error conditions, use . void XtSetWarningHandler XtErrorHandler handler handler Specifies the new nonfatal error procedure, which usually returns. The default warning handler provided by the Intrinsics is _XtWarning. On POSIX-based systems, it prints the message to standard error and returns to the caller. This routine has been superseded by . To call the installed nonfatal error procedure, use . void XtWarning String message message Specifies the nonfatal error message to be reported. Most programs should use , not , to provide for customization and internationalization of warning messages. This routine has been superseded by . ss when querying the database, the name and type are concatenated with a single "." between them and the class is concatenated with itself with a single "." if it does not already contain a ".". This routine has been superseded by . To register a procedure to be called on fatal error conditiolibXt-1.1.5/specs/CH09.xml000064401431060000012000004124521252061032400153660ustar00alancstaff00002660200006 Resource Management A resource is a field in the widget record with a corresponding resource entry in the resources list of the widget or any of its superclasses. This means that the field is settable by (by naming the field in the argument list), by an entry in a resource file (by using either the name or class), and by . In addition, it is readable by . Not all fields in a widget record are resources. Some are for bookkeeping use by the generic routines (like managed and being_destroyed). Others can be for local bookkeeping, and still others are derived from resources (many graphics contexts and pixmaps). Widgets typically need to obtain a large set of resources at widget creation time. Some of the resources come from the argument list supplied in the call to , some from the resource database, and some from the internal defaults specified by the widget. Resources are obtained first from the argument list, then from the resource database for all resources not specified in the argument list, and last, from the internal default, if needed. Resource Lists A resource entry specifies a field in the widget, the textual name and class of the field that argument lists and external resource files use to refer to the field, and a default value that the field should get if no value is specified. The declaration for the XtResource structure is typedef struct { String resource_name; String resource_class; String resource_type; Cardinal resource_size; Cardinal resource_offset; String default_type; XtPointer default_addr; } XtResource, *XtResourceList; When the resource list is specified as the CoreClassPart, ObjectClassPart, RectObjClassPart, or ConstraintClassPart resources field, the strings pointed to by resource_name, resource_class, resource_type, and default_type must be permanently allocated prior to or during the execution of the class initialization procedure and must not be subsequently deallocated. The resource_name field contains the name used by clients to access the field in the widget. By convention, it starts with a lowercase letter and is spelled exactly like the field name, except all underscores (_) are deleted and the next letter is replaced by its uppercase counterpart. For example, the resource name for background_pixel becomes backgroundPixel. Resource names beginning with the two-character sequence ``xt'', and resource classes beginning with the two-character sequence ``Xt'' are reserved to the Intrinsics for future standard and implementation-dependent uses. Widget header files typically contain a symbolic name for each resource name. All resource names, classes, and types used by the Intrinsics are named in <X11/StringDefs.h>. The Intrinsics's symbolic resource names begin with ``XtN'' and are followed by the string name (for example, XtNbackgroundPixel for backgroundPixel). The resource_class field contains the class string used in resource specification files to identify the field. A resource class provides two functions: It isolates an application from different representations that widgets can use for a similar resource. It lets you specify values for several actual resources with a single name. A resource class should be chosen to span a group of closely related fields. For example, a widget can have several pixel resources: background, foreground, border, block cursor, pointer cursor, and so on. Typically, the background defaults to white and everything else to black. The resource class for each of these resources in the resource list should be chosen so that it takes the minimal number of entries in the resource database to make the background ivory and everything else darkblue. In this case, the background pixel should have a resource class of ``Background'' and all the other pixel entries a resource class of ``Foreground''. Then, the resource file needs only two lines to change all pixels to ivory or darkblue: *Background: ivory *Foreground: darkblue Similarly, a widget may have several font resources (such as normal and bold), but all fonts should have the class Font. Thus, changing all fonts simply requires only a single line in the default resource file: *Font: 6x13 By convention, resource classes are always spelled starting with a capital letter to distinguish them from resource names. Their symbolic names are preceded with ``XtC'' (for example, XtCBackground). The resource_type field gives the physical representation type of the resource and also encodes information about the specific usage of the field. By convention, it starts with an uppercase letter and is spelled identically to the type name of the field. The resource type is used when resources are fetched to convert from the resource database format (usually String) or the format of the resource default value (almost anything, but often String) to the desired physical representation (see ). The Intrinsics define the following resource types: Resource Type Structure or Field Type XtRAcceleratorTable XtAccelerators XtRAtom Atom XtRBitmap Pixmap, depth=1 XtRBoolean Boolean XtRBool Bool XtRCallback XtCallbackList XtRCardinal Cardinal XtRColor XColor XtRColormap Colormap XtRCommandArgArray String* XtRCursor Cursor XtRDimension Dimension XtRDirectoryString String XtRDisplay Display* XtREnum XtEnum XtREnvironmentArray String* XtRFile FILE* XtRFloat float XtRFont Font XtRFontSet XFontSet XtRFontStruct XFontStruct* XtRFunction (*)() XtRGeometry char*, format as defined by XParseGeometry XtRGravity int XtRInitialState int XtRInt int XtRLongBoolean long XtRObject Object XtRPixel Pixel XtRPixmap Pixmap XtRPointer XtPointer XtRPosition Position XtRRestartStyle unsigned char XtRScreen Screen* XtRShort short XtRSmcConn XtPointer XtRString String XtRStringArray String* XtRStringTable String* XtRTranslationTable XtTranslations XtRUnsignedChar unsigned char XtRVisual Visual* XtRWidget Widget XtRWidgetClass WidgetClass XtRWidgetList WidgetList XtRWindow Window <X11/StringDefs.h> also defines the following resource types as a convenience for widgets, although they do not have any corresponding data type assigned: XtREditMode, XtRJustify, and XtROrientation. The resource_size field is the size of the physical representation in bytes; you should specify it as sizeof(type) so that the compiler fills in the value. The resource_offset field is the offset in bytes of the field within the widget. You should use the macro to retrieve this value. The default_type field is the representation type of the default resource value. If default_type is different from resource_type and the default value is needed, the resource manager invokes a conversion procedure from default_type to resource_type. Whenever possible, the default type should be identical to the resource type in order to minimize widget creation time. However, there are sometimes no values of the type that the program can easily specify. In this case, it should be a value for which the converter is guaranteed to work (for example, XtDefaultForeground for a pixel resource). The default_addr field specifies the address of the default resource value. As a special case, if default_type is XtRString, then the value in the default_addr field is the pointer to the string rather than a pointer to the pointer. The default is used if a resource is not specified in the argument list or in the resource database or if the conversion from the representation type stored in the resource database fails, which can happen for various reasons (for example, a misspelled entry in a resource file). Two special representation types (XtRImmediate and XtRCallProc) are usable only as default resource types. XtRImmediate indicates that the value in the default_addr field is the actual value of the resource rather than the address of the value. The value must be in the correct representation type for the resource, coerced to an XtPointer. No conversion is possible, since there is no source representation type. XtRCallProc indicates that the value in the default_addr field is a procedure pointer. This procedure is automatically invoked with the widget, resource_offset, and a pointer to an XrmValue in which to store the result. XtRCallProc procedure pointers are of type . typedef void (*XtResourceDefaultProc) Widget w int offset XrmValue *value w Specifies the widget whose resource value is to be obtained. offset Specifies the offset of the field in the widget record. value Specifies the resource value descriptor to return. The procedure should fill in the value->addr field with a pointer to the resource value in its correct representation type. To get the resource list structure for a particular class, use . void XtGetResourceList WidgetClass class XtResourceList *resources_return Cardinal *num_resources_return class Specifies the object class to be queried. It must be objectClass or any subclass thereof. resources_return Returns the resource list. num_resources_return Returns the number of entries in the resource list. If is called before the class is initialized, it returns the resource list as specified in the class record. If it is called after the class has been initialized, returns a merged resource list that includes the resources for all superclasses. The list returned by should be freed using when it is no longer needed. To get the constraint resource list structure for a particular widget class, use . void XtGetConstraintResourceList WidgetClass class XtResourceList *resources_return Cardinal *num_resources_return class Specifies the object class to be queried. It must be objectClass or any subclass thereof. resources_return Returns the constraint resource list. num_resources_return Returns the number of entries in the constraint resource list. If is called before the widget class is initialized, the resource list as specified in the widget class Constraint part is returned. If is called after the widget class has been initialized, the merged resource list for the class and all Constraint superclasses is returned. If the specified class is not a subclass of constraintWidgetClass, *resources_return is set to NULL and *num_resources_return is set to zero. The list returned by should be freed using when it is no longer needed. The routines and also use the resource list to set and get widget state; see and . Here is an abbreviated version of a possible resource list for a Label widget: /* Resources specific to Label */ static XtResource resources[] = { {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), XtOffsetOf(LabelRec, label.foreground), XtRString, XtDefaultForeground}, {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), XtOffsetOf(LabelRec, label.font), XtRString, XtDefaultFont}, {XtNlabel, XtCLabel, XtRString, sizeof(String), XtOffsetOf(LabelRec, label.label), XtRString, NULL}, . . . } The complete resource name for a field of a widget instance is the concatenation of the application shell name (from XtAppCreateShell ), the instance names of all the widget's parents up to the top of the widget tree, the instance name of the widget itself, and the resource name of the specified field of the widget. Similarly, the full resource class of a field of a widget instance is the concatenation of the application class (from XtAppCreateShell ), the widget class names of all the widget's parents up to the top of the widget tree, the widget class name of the widget itself, and the resource class of the specified field of the widget. Byte Offset Calculations To determine the byte offset of a field within a structure type, use . Cardinal XtOffsetOf Type structure_type Field field_name structure_type Specifies a type that is declared as a structure. field_name Specifies the name of a member within the structure. The macro expands to a constant expression that gives the offset in bytes to the specified structure member from the beginning of the structure. It is normally used to statically initialize resource lists and is more portable than , which serves the same function. To determine the byte offset of a field within a structure pointer type, use . Cardinal XtOffset Type pointer_type Field field_name pointer_type Specifies a type that is declared as a pointer to a structure. field_name Specifies the name of a member within the structure. The macro expands to a constant expression that gives the offset in bytes to the specified structure member from the beginning of the structure. It may be used to statically initialize resource lists. is less portable than . Superclass-to-Subclass Chaining of Resource Lists The function gets resources as a superclass-to-subclass chained operation. That is, the resources specified in the objectClass resource list are fetched, then those in rectObjClass, and so on down to the resources specified for this widget's class. Within a class, resources are fetched in the order they are declared. In general, if a widget resource field is declared in a superclass, that field is included in the superclass's resource list and need not be included in the subclass's resource list. For example, the Core class contains a resource entry for background_pixel. Consequently, the implementation of Label need not also have a resource entry for background_pixel. However, a subclass, by specifying a resource entry for that field in its own resource list, can override the resource entry for any field declared in a superclass. This is most often done to override the defaults provided in the superclass with new ones. At class initialization time, resource lists for that class are scanned from the superclass down to the class to look for resources with the same offset. A matching resource in a subclass will be reordered to override the superclass entry. If reordering is necessary, a copy of the superclass resource list is made to avoid affecting other subclasses of the superclass. Also at class initialization time, the Intrinsics produce an internal representation of the resource list to optimize access time when creating widgets. In order to save memory, the Intrinsics may overwrite the storage allocated for the resource list in the class record; therefore, widgets must allocate resource lists in writable storage and must not access the list contents directly after the class_initialize procedure has returned. Subresources A widget does not do anything to retrieve its own resources; instead, does this automatically before calling the class initialize procedure. Some widgets have subparts that are not widgets but for which the widget would like to fetch resources. Such widgets call to accomplish this. void XtGetSubresources Widget w XtPointer base String name String class XtResourceList resources Cardinal num_resources ArgList args Cardinal num_args w Specifies the object used to qualify the subpart resource name and class. Must be of class Object or any subclass thereof. base Specifies the base address of the subpart data structure into which the resources will be written. name Specifies the name of the subpart. class Specifies the class of the subpart. resources Specifies the resource list for the subpart. num_resources Specifies the number of entries in the resource list. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function constructs a name and class list from the application name and class, the names and classes of all the object's ancestors, and the object itself. Then it appends to this list the name and class pair passed in. The resources are fetched from the argument list, the resource database, or the default values in the resource list. Then they are copied into the subpart record. If args is NULL, num_args must be zero. However, if num_args is zero, the argument list is not referenced. may overwrite the specified resource list with an equivalent representation in an internal format, which optimizes access time if the list is used repeatedly. The resource list must be allocated in writable storage, and the caller must not modify the list contents after the call if the same list is to be used again. Resources fetched by are reference-counted as if they were referenced by the specified object. Subresources might therefore be freed from the conversion cache and destroyed when the object is destroyed, but not before then. To fetch resources for widget subparts using varargs lists, use . void XtVaGetSubresources Widget w XtPointer base String name String class XtResourceList resources Cardinal num_resources w Specifies the object used to qualify the subpart resource name and class. Must be of class Object or any subclass thereof. base Specifies the base address of the subpart data structure into which the resources will be written. name Specifies the name of the subpart. class Specifies the class of the subpart. resources Specifies the resource list for the subpart. num_resources Specifies the number of entries in the resource list. ... Specifies the variable argument list to override any other resource specifications. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Obtaining Application Resources To retrieve resources that are not specific to a widget but apply to the overall application, use . void XtGetApplicationResources Widget w XtPointer base XtResourceList resources Cardinal num_resources ArgList args Cardinal num_args w Specifies the object that identifies the resource database to search (the database is that associated with the display for this object). Must be of class Object or any subclass thereof. base Specifies the base address into which the resource values will be written. resources Specifies the resource list. num_resources Specifies the number of entries in the resource list. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function first uses the passed object, which is usually an application shell widget, to construct a resource name and class list. The full name and class of the specified object (that is, including its ancestors, if any) is logically added to the front of each resource name and class. Then it retrieves the resources from the argument list, the resource database, or the resource list default values. After adding base to each address, copies the resources into the addresses obtained by adding base to each offset in the resource list. If args is NULL, num_args must be zero. However, if num_args is zero, the argument list is not referenced. The portable way to specify application resources is to declare them as members of a structure and pass the address of the structure as the base argument. may overwrite the specified resource list with an equivalent representation in an internal format, which optimizes access time if the list is used repeatedly. The resource list must be allocated in writable storage, and the caller must not modify the list contents after the call if the same list is to be used again. Any per-display resources fetched by will not be freed from the resource cache until the display is closed. To retrieve resources for the overall application using varargs lists, use . void XtVaGetApplicationResources Widget w XtPointer base XtResourceList resources Cardinal num_resources w Specifies the object that identifies the resource database to search (the database is that associated with the display for this object). Must be of class Object or any subclass thereof. base Specifies the base address into which the resource values will be written. resources Specifies the resource list for the subpart. num_resources Specifies the number of entries in the resource list. ... Specifies the variable argument list to override any other resource specifications. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Resource Conversions The Intrinsics provide a mechanism for registering representation converters that are automatically invoked by the resource-fetching routines. The Intrinsics additionally provide and register several commonly used converters. This resource conversion mechanism serves several purposes: It permits user and application resource files to contain textual representations of nontextual values. It allows textual or other representations of default resource values that are dependent on the display, screen, or colormap, and thus must be computed at runtime. It caches conversion source and result data. Conversions that require much computation or space (for example, string-to-translation-table) or that require round-trips to the server (for example, string-to-font or string-to-color) are performed only once. Predefined Resource Converters The Intrinsics define all the representations used in the Object, RectObj, Core, Composite, Constraint, and Shell widget classes. The Intrinsics register the following resource converters that accept input values of representation type XtRString. Target Representation Converter Name Additional Args XtRAcceleratorTable XtCvtStringToAcceleratorTable XtRAtom XtCvtStringToAtom Display* XtRBoolean XtCvtStringToBoolean XtRBool XtCvtStringToBool XtRCommandArgArray XtCvtStringToCommandArgArray XtRCursor XtCvtStringToCursor Display* XtRDimension XtCvtStringToDimension XtRDirectoryString XtCvtStringToDirectoryString XtRDisplay XtCvtStringToDisplay XtRFile XtCvtStringToFile XtRFloat XtCvtStringToFloat XtRFont XtCvtStringToFont Display* XtRFontSet XtCvtStringToFontSet Display*, String locale XtRFontStruct XtCvtStringToFontStruct Display* XtRGravity XtCvtStringToGravity XtRInitialState XtCvtStringToInitialState XtRInt XtCvtStringToInt XtRPixel XtCvtStringToPixel colorConvertArgs XtRPosition XtCvtStringToPosition XtRRestartStyle XtCvtStringToRestartStyle XtRShort XtCvtStringToShort XtRTranslationTable XtCvtStringToTranslationTable XtRUnsignedChar XtCvtStringToUnsignedChar XtRVisual XtCvtStringToVisual Screen*, Cardinal depth The String-to-Pixel conversion has two predefined constants that are guaranteed to work and contrast with each other: XtDefaultForeground and XtDefaultBackground. They evaluate to the black and white pixel values of the widget's screen, respectively. If the application resource reverseVideo is True, they evaluate to the white and black pixel values of the widget's screen, respectively. Similarly, the String-to-Font and String-to-FontStruct converters recognize the constant XtDefaultFont and evaluate this in the following manner: Query the resource database for the resource whose full name is ``xtDefaultFont'', class ``XtDefaultFont'' (that is, no widget name/class prefixes), and use a type XtRString value returned as the font name or a type XtRFont or XtRFontStruct value directly as the resource value. If the resource database does not contain a value for xtDefaultFont, class XtDefaultFont, or if the returned font name cannot be successfully opened, an implementation-defined font in ISO8859-1 character set encoding is opened. (One possible algorithm is to perform an XListFonts using a wildcard font name and use the first font in the list. This wildcard font name should be as broad as possible to maximize the probability of locating a useable font; for example, "-*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-1".) If no suitable ISO8859-1 font can be found, issue a warning message and return False. The String-to-FontSet converter recognizes the constant XtDefaultFontSet and evaluate this in the following manner: Query the resource database for the resource whose full name is ``xtDefaultFontSet'', class ``XtDefaultFontSet'' (that is, no widget name/class prefixes), and use a type XtRString value returned as the base font name list or a type XtRFontSet value directly as the resource value. If the resource database does not contain a value for xtDefaultFontSet, class XtDefaultFontSet, or if a font set cannot be successfully created from this resource, an implementation-defined font set is created. (One possible algorithm is to perform an XCreateFontSet using a wildcard base font name. This wildcard base font name should be as broad as possible to maximize the probability of locating a useable font; for example, "-*-*-*-R-*-*-*-120-*-*-*-*".) If no suitable font set can be created, issue a warning message and return False. If a font set is created but missing_charset_list is not empty, a warning is issued and the partial font set is returned. The Intrinsics register the String-to-FontSet converter with a conversion argument list that extracts the current process locale at the time the converter is invoked. This ensures that the converter is invoked again if the same conversion is required in a different locale. The String-to-Gravity conversion accepts string values that are the names of window and bit gravities and their numerical equivalents, as defined in Xlib — C Language X Interface.: ForgetGravity, UnmapGravity, NorthWestGravity, NorthGravity, NorthEastGravity, WestGravity, CenterGravity, EastGravity, SouthWestGravity, SouthGravity, SouthEastGravity, and StaticGravity. Alphabetic case is not significant in the conversion. The String-to-CommandArgArray conversion parses a String into an array of strings. White space characters separate elements of the command line. The converter recognizes the backslash character ``\\'' as an escape character to allow the following white space character to be part of the array element. The String-to-DirectoryString conversion recognizes the string ``XtCurrentDirectory'' and returns the result of a call to the operating system to get the current directory. The String-to-RestartStyle conversion accepts the values RestartIfRunning, RestartAnyway, RestartImmediately, and RestartNever as defined by the X Session Management Protocol. The String-to-InitialState conversion accepts the values NormalState or IconicState as defined by the Inter-Client Communication Conventions Manual.. The String-to-Visual conversion calls XMatchVisualInfo using the screen and depth fields from the core part and returns the first matching Visual on the list. The widget resource list must be certain to specify any resource of type XtRVisual after the depth resource. The allowed string values are the visual class names defined in X Window System Protocol, Section 8; StaticGray, StaticColor, TrueColor, GrayScale, PseudoColor, and DirectColor. The Intrinsics register the following resource converter that accepts an input value of representation type XtRColor. Target Representation Converter Name Additional Args XtRPixel XtCvtColorToPixel The Intrinsics register the following resource converters that accept input values of representation type XtRInt. Target Representation Converter Name Additional Args XtRBoolean XtCvtIntToBoolean XtRBool XtCvtIntToBool XtRColor XtCvtIntToColor colorConvertArgs XtRDimension XtCvtIntToDimension XtRFloat XtCvtIntToFloat XtRFont XtCvtIntToFont XtRPixel XtCvtIntToPixel XtRPixmap XtCvtIntToPixmap XtRPosition XtCvtIntToPosition XtRShort XtCvtIntToShort XtRUnsignedChar XtCvtIntToUnsignedChar The Intrinsics register the following resource converter that accepts an input value of representation type XtRPixel. Target Representation Converter Name Additional Args XtRColor XtCvtPixelToColor New Resource Converters Type converters use pointers to XrmValue structures (defined in <X11/Xresource.h>; see Section 15.4 in Xlib — C Language X Interface.) for input and output values. typedef struct { unsigned int size; XPointer addr; } XrmValue, *XrmValuePtr; The addr field specifies the address of the data, and the size field gives the total number of significant bytes in the data. For values of type String, addr is the address of the first character and size includes the NULL-terminating byte. A resource converter procedure pointer is of type . typedef Boolean (*XtTypeConverter) Display *display XrmValue *args Cardinal *num_args XrmValue *from XrmValue *to XtPointer *converter_data display Specifies the display connection with which this conversion is associated. args Specifies a list of additional XrmValue arguments to the converter if additional context is needed to perform the conversion, or NULL. For example, the String-to-Font converter needs the widget's display, and the String-to-Pixel converter needs the widget's screen and colormap. num_args Specifies the number of entries in args. from Specifies the value to convert. to Specifies a descriptor for a location into which to store the converted value. converter_data Specifies a location into which the converter may store converter-specific data associated with this conversion. The display argument is normally used only when generating error messages, to identify the application context (with the function XtDisplayToApplicationContext ). The to argument specifies the size and location into which the converter should store the converted value. If the addr field is NULL, the converter should allocate appropriate storage and store the size and location into the to descriptor. If the type converter allocates the storage, it remains under the ownership of the converter and must not be modified by the caller. The type converter is permitted to use static storage for this purpose, and therefore the caller must immediately copy the data upon return from the converter. If the addr field is not NULL, the converter must check the size field to ensure that sufficient space has been allocated before storing the converted value. If insufficient space is specified, the converter should update the size field with the number of bytes required and return False without modifying the data at the specified location. If sufficient space was allocated by the caller, the converter should update the size field with the number of bytes actually occupied by the converted value. For converted values of type XtRString, the size should include the NULL-terminating byte, if any. The converter may store any value in the location specified in converter_data; this value will be passed to the destructor, if any, when the resource is freed by the Intrinsics. The converter must return True if the conversion was successful and False otherwise. If the conversion cannot be performed because of an improper source value, a warning message should also be issued with . Most type converters just take the data described by the specified from argument and return data by writing into the location specified in the to argument. A few need other information, which is available in args. A type converter can invoke another type converter, which allows differing sources that may convert into a common intermediate result to make maximum use of the type converter cache. Note that if an address is written into to->addr, it cannot be that of a local variable of the converter because the data will not be valid after the converter returns. Static variables may be used, as in the following example. If the converter modifies the resource database, the changes affect any in-progress widget creation, , or in an implementation-defined manner; however, insertion of new entries or changes to existing entries is allowed and will not directly cause an error. The following is an example of a converter that takes a string and converts it to a Pixel. Note that the display parameter is used only to generate error messages; the Screen conversion argument is still required to inform the Intrinsics that the converted value is a function of the particular display (and colormap). #define done(type, value) \\ { \\ if (toVal->addr != NULL) { \\ if (toVal->size < sizeof(type)) { \\ toVal->size = sizeof(type); \\ return False; \\ } \\ *(type*)(toVal->addr) = (value); \\ } \\ else { \\ static type static_val; \\ static_val = (value); \\ toVal->addr = (XPointer)&static_val; \\ } \\ toVal->size = sizeof(type); \\ return True; \\ } static Boolean CvtStringToPixel(dpy, args, num_args, fromVal, toVal, converter_data) Display *dpy; XrmValue *args; Cardinal *num_args; XrmValue *fromVal; XrmValue *toVal; XtPointer *converter_data; { static XColor screenColor; XColor exactColor; Screen *screen; Colormap colormap; Status status; if (*num_args != 2) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "wrongParameters", "cvtStringToPixel", "XtToolkitError", "String to pixel conversion needs screen and colormap arguments", (String *)NULL, (Cardinal *)NULL); screen = *((Screen**) args[0].addr); colormap = *((Colormap *) args[1].addr); if (CompareISOLatin1(str, XtDefaultBackground) == 0) { *closure_ret = False; done(Pixel, WhitePixelOfScreen(screen)); } if (CompareISOLatin1(str, XtDefaultForeground) == 0) { *closure_ret = False; done(Pixel, BlackPixelOfScreen(screen)); } status = XAllocNamedColor(DisplayOfScreen(screen), colormap, (char*)fromVal->addr, &screenColor, &exactColor); if (status == 0) { String params[1]; Cardinal num_params = 1; params[0] = (String)fromVal->addr; XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "noColormap", "cvtStringToPixel", "XtToolkitError", "Cannot allocate colormap entry for \\"%s\\"", params,\ &num_params); *converter_data = (char *) False; return False; } else { *converter_data = (char *) True; done(Pixel, &screenColor.pixel); } } All type converters should define some set of conversion values for which they are guaranteed to succeed so these can be used in the resource defaults. This issue arises only with conversions, such as fonts and colors, where there is no string representation that all server implementations will necessarily recognize. For resources like these, the converter should define a symbolic constant in the same manner as XtDefaultForeground, XtDefaultBackground, and XtDefaultFont. To allow the Intrinsics to deallocate resources produced by type converters, a resource destructor procedure may also be provided. A resource destructor procedure pointer is of type . typedef void (*XtDestructor) XtAppContext app XrmValue *to XtPointer converter_data XrmValue *args Cardinal *num_args app Specifies an application context in which the resource is being freed. to Specifies a descriptor for the resource produced by the type converter. converter_data Specifies the converter-specific data returned by the type converter. args Specifies the additional converter arguments as passed to the type converter when the conversion was performed. num_args Specifies the number of entries in args. The destructor procedure is responsible for freeing the resource specified by the to argument, including any auxiliary storage associated with that resource, but not the memory directly addressed by the size and location in the to argument or the memory specified by args. Issuing Conversion Warnings The procedure is a convenience routine for resource type converters that convert from string values. void XtDisplayStringConversionWarning Display *display String from_value display Specifies the display connection with which the conversion is associated. from_value Specifies the string that could not be converted. to_type Specifies the target representation type requested. The procedure issues a warning message using with name ``conversionError'', type ``string'', class ``XtToolkitError'', and the default message ``Cannot convert "from_value" to type to_type''. To issue other types of warning or error messages, the type converter should use or . To retrieve the application context associated with a given display connection, use . XtAppContext XtDisplayToApplicationContext Display *display display Specifies an open and initialized display connection. The function returns the application context in which the specified display was initialized. If the display is not known to the Intrinsics, an error message is issued. Registering a New Resource Converter When registering a resource converter, the client must specify the manner in which the conversion cache is to be used when there are multiple calls to the converter. Conversion cache control is specified via an XtCacheType argument. typedef int XtCacheType; An XtCacheType field may contain one of the following values: XtCacheNone Specifies that the results of a previous conversion may not be reused to satisfy any other resource requests; the specified converter will be called each time the converted value is required. XtCacheAll Specifies that the results of a previous conversion should be reused for any resource request that depends upon the same source value and conversion arguments. XtCacheByDisplay Specifies that the results of a previous conversion should be used as for XtCacheAll but the destructor will be called, if specified, if is called for the display connection associated with the converted value, and the value will be removed from the conversion cache. The qualifier XtCacheRefCount may be ORed with any of the above values. If XtCacheRefCount is specified, calls to , , , and that use the converted value will be counted. When a widget using the converted value is destroyed, the count is decremented, and, if the count reaches zero, the destructor procedure will be called and the converted value will be removed from the conversion cache. To register a type converter for all application contexts in a process, use , and to register a type converter in a single application context, use . void XtSetTypeConverter String from_type String to_type XtTypeConverter converter XtConvertArgList convert_args Cardinal num_args XtCacheType cache_type XtDestructor destructor from_type Specifies the source type. to_type Specifies the destination type. converter Specifies the resource type converter procedure. convert_args Specifies additional conversion arguments, or NULL. num_args Specifies the number of entries in convert_args. cache_type Specifies whether or not resources produced by this converter are sharable or display-specific and when they should be freed. destructor Specifies a destroy procedure for resources produced by this conversion, or NULL if no additional action is required to deallocate resources produced by the converter. XtAppSetTypeConverter XtAppContext app_context String from_type String to_type XtTypeConverter converter XtConvertArgList convert_args Cardinal num_args XtCacheType cache_type XtDestructor destructor app_context Specifies the application context. from_type Specifies the source type. to_type Specifies the destination type. converter Specifies the resource type converter procedure. convert_args Specifies additional conversion arguments, or NULL. num_args Specifies the number of entries in convert_args. cache_type Specifies whether or not resources produced by this converter are sharable or display-specific and when they should be freed. destructor Specifies a destroy procedure for resources produced by this conversion, or NULL if no additional action is required to deallocate resources produced by the converter. registers the specified type converter and destructor in all application contexts created by the calling process, including any future application contexts that may be created. registers the specified type converter in the single application context specified. If the same from_type and to_type are specified in multiple calls to either function, the most recent overrides the previous ones. For the few type converters that need additional arguments, the Intrinsics conversion mechanism provides a method of specifying how these arguments should be computed. The enumerated type XtAddressMode and the structure XtConvertArgRec specify how each argument is derived. These are defined in <X11/Intrinsic.h>. typedef enum { /* address mode parameter representation */ XtAddress, /* address */ XtBaseOffset, /* offset */ XtImmediate, /* constant */ XtResourceString, /* resource name string */ XtResourceQuark, /* resource name quark */ XtWidgetBaseOffset, /* offset */ XtProcedureArg /* procedure to call */ } XtAddressMode; typedef struct { XtAddressMode address_mode; XtPointer address_id; Cardinal size; } XtConvertArgRec, *XtConvertArgList; The size field specifies the length of the data in bytes. The address_mode field specifies how the address_id field should be interpreted. XtAddress causes address_id to be interpreted as the address of the data. XtBaseOffset causes address_id to be interpreted as the offset from the widget base. XtImmediate causes address_id to be interpreted as a constant. XtResourceString causes address_id to be interpreted as the name of a resource that is to be converted into an offset from the widget base. XtResourceQuark causes address_id to be interpreted as the result of an XrmStringToQuark conversion on the name of a resource, which is to be converted into an offset from the widget base. XtWidgetBaseOffset is similar to XtBaseOffset except that it searches for the closest windowed ancestor if the object is not of a subclass of Core (see ). XtProcedureArg specifies that address_id is a pointer to a procedure to be invoked to return the conversion argument. If XtProcedureArg is specified, address_id must contain the address of a function of type . typedef void (*XtConvertArgProc) XtAppContext app XrmValue *to XtPointer converter_data XrmValue *args Cardinal *num_args app Specifies an application context in which the resource is being freed. to Specifies a descriptor for the resource produced by the type converter. converter_data Specifies the converter-specific data returned by the type converter. args Specifies the additional converter arguments as passed to the type converter when the conversion was performed. num_args Specifies the number of entries in args. The destructor procedure is responsible for freeing the resource specified by the to argument, including any auxiliary storage associated with that resource, but not the memory directly addressed by the size and location in the to argument or the memory specified by args. Resource Converter Invocation All resource-fetching routines (for example, , , and so on) call resource converters if the resource database or varargs list specifies a value that has a different representation from the desired representation or if the widget's default resource value representation is different from the desired representation. To invoke explicit resource conversions, use or . typedef XtPointer XtCacheRef; Boolean XtCallConverter Display* display XtTypeConverter converter XrmValuePtr conversion_args Cardinal num_args XrmValuePtr from XrmValuePtr to_in_out XtCacheRef *cache_ref_return display Specifies the display with which the conversion is to be associated. converter Specifies the conversion procedure to be called. conversion_args Specifies the additional conversion arguments needed to perform the conversion, or NULL. num_args Specifies the number of entries in conversion_args. from Specifies a descriptor for the source value. to_in_out Returns the converted value. cache_ref_return Returns a conversion cache id. The function looks up the specified type converter in the application context associated with the display and, if the converter was not registered or was registered with cache type XtCacheAll or XtCacheByDisplay, looks in the conversion cache to see if this conversion procedure has been called with the specified conversion arguments. If so, it checks the success status of the prior call, and if the conversion failed, returns False immediately; otherwise it checks the size specified in the to argument, and, if it is greater than or equal to the size stored in the cache, copies the information stored in the cache into the location specified by to->addr, stores the cache size into to->size, and returns True. If the size specified in the to argument is smaller than the size stored in the cache, copies the cache size into to->size and returns False. If the converter was registered with cache type XtCacheNone or no value was found in the conversion cache, calls the converter, and if it was not registered with cache type XtCacheNone, enters the result in the cache. then returns what the converter returned. The cache_ref_return field specifies storage allocated by the caller in which an opaque value will be stored. If the type converter has been registered with the XtCacheRefCount modifier and if the value returned in cache_ref_return is non-NULL, then the caller should store the cache_ref_return value in order to decrement the reference count when the converted value is no longer required. The cache_ref_return argument should be NULL if the caller is unwilling or unable to store the value. To explicitly decrement the reference counts for resources obtained from , use . void XtAppReleaseCacheRefs XtAppContext app_context XtCacheRef *refs app_context Specifies the application context. refs Specifies the list of cache references to be released. decrements the reference count for the conversion entries identified by the refs argument. This argument is a pointer to a NULL-terminated list of XtCacheRef values. If any reference count reaches zero, the destructor, if any, will be called and the resource removed from the conversion cache. As a convenience to clients needing to explicitly decrement reference counts via a callback function, the Intrinsics define two callback procedures, and . void XtCallbackReleaseCacheRef Widget object XtPointer client_data XtPointer call_data object Specifies the object with which the resource is associated. client_data Specifies the conversion cache entry to be released. call_data Is ignored. This callback procedure may be added to a callback list to release a previously returned XtCacheRef value. When adding the callback, the callback client_data argument must be specified as the value of the XtCacheRef data cast to type XtPointer. void XtCallbackReleaseCacheRefList Widget object XtPointer client_data XtPointer call_data object Specifies the object with which the resources are associated. client_data Specifies the conversion cache entries to be released. call_data Is ignored. This callback procedure may be added to a callback list to release a list of previously returned XtCacheRef values. When adding the callback, the callback client_data argument must be specified as a pointer to a NULL-terminated list of XtCacheRef values. To lookup and call a resource converter, copy the resulting value, and free a cached resource when a widget is destroyed, use . Boolean XtConvertAndStore Widget object String from_type XrmValuePtr from String to_type XrmValuePtr to_in_out object Specifies the object to use for additional arguments, if any are needed, and the destroy callback list. Must be of class Object or any subclass thereof. from_type Specifies the source type. from Specifies the value to be converted. to_type Specifies the destination type. to_in_out Specifies a descriptor for storage into which the converted value will be returned. The function looks up the type converter registered to convert from_type to to_type, computes any additional arguments needed, and then calls (or if an old-style converter was registered with or ; see Appendix C) with the from and to_in_out arguments. The to_in_out argument specifies the size and location into which the converted value will be stored and is passed directly to the converter. If the location is specified as NULL, it will be replaced with a pointer to private storage and the size will be returned in the descriptor. The caller is expected to copy this private storage immediately and must not modify it in any way. If a non-NULL location is specified, the caller must allocate sufficient storage to hold the converted value and must also specify the size of that storage in the descriptor. The size field will be modified on return to indicate the actual size of the converted data. If the conversion succeeds, returns True; otherwise, it returns False. adds to the destroyCallback list of the specified object if the conversion returns an XtCacheRef value. The resulting resource should not be referenced after the object has been destroyed. performs processing equivalent to when initializing the object instance. Because there is extra memory overhead required to implement reference counting, clients may distinguish those objects that are never destroyed before the application exits from those that may be destroyed and whose resources should be deallocated. To specify whether reference counting is to be enabled for the resources of a particular object when the object is created, the client can specify a value for the Boolean resource XtNinitialResourcesPersistent, class XtCInitialResourcesPersistent. When is called, if this resource is not specified as False in either the arglist or the resource database, then the resources referenced by this object are not reference-counted, regardless of how the type converter may have been registered. The effective default value is True; thus clients that expect to destroy one or more objects and want resources deallocated must explicitly specify False for XtNinitialResourcesPersistent. The resources are still freed and destructors called when is called if the conversion was registered as XtCacheByDisplay. Reading and Writing Widget State Any resource field in a widget can be read or written by a client. On a write operation, the widget decides what changes it will actually allow and updates all derived fields appropriately. Obtaining Widget State To retrieve the current values of resources associated with a widget instance, use . void XtGetValues Widget object ArgList args Cardinal num_args object Specifies the object whose resource values are to be returned. Must be of class Object or any subclass thereof. args Specifies the argument list of name/address pairs that contain the resource names and the addresses into which the resource values are to be stored. The resource names are widget-dependent. num_args Specifies the number of entries in the argument list. The function starts with the resources specified for the Object class and proceeds down the subclass chain to the class of the object. The value field of a passed argument list must contain the address into which to copy the contents of the corresponding object instance field. If the field is a pointer type, the lifetime of the pointed-to data is defined by the object class. For the Intrinsics-defined resources, the following lifetimes apply: Not valid following any operation that modifies the resource: XtNchildren resource of composite widgets. All resources of representation type XtRCallback. Remain valid at least until the widget is destroyed: XtNaccelerators, XtNtranslations. Remain valid until the Display is closed: XtNscreen. It is the caller's responsibility to allocate and deallocate storage for the copied data according to the size of the resource representation type used within the object. If the class of the object's parent is a subclass of constraintWidgetClass, then fetches the values for any constraint resources requested. It starts with the constraint resources specified for constraintWidgetClass and proceeds down the subclass chain to the parent's constraint resources. If the argument list contains a resource name that is not found in any of the resource lists searched, the value at the corresponding address is not modified. If any get_values_hook procedures in the object's class or superclass records are non-NULL, they are called in superclass-to-subclass order after all the resource values have been fetched by . Finally, if the object's parent is a subclass of constraintWidgetClass, and if any of the parent's class or superclass records have declared ConstraintClassExtension records in the Constraint class part extension field with a record type of NULLQUARK, and if the get_values_hook field in the extension record is non-NULL, calls the get_values_hook procedures in superclass-to-subclass order. This permits a Constraint parent to provide nonresource data via . Get_values_hook procedures may modify the data stored at the location addressed by the value field, including (but not limited to) making a copy of data whose resource representation is a pointer. None of the Intrinsics-defined object classes copy data in this manner. Any operation that modifies the queried object resource may invalidate the pointed-to data. To retrieve the current values of resources associated with a widget instance using varargs lists, use . void XtVaGetValues Widget object ... object Specifies the object whose resource values are to be returned. Must be of class Object or any subclass thereof. ... Specifies the variable argument list for the resources to be returned. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. All value entries in the list must specify pointers to storage allocated by the caller to which the resource value will be copied. It is the caller's responsibility to ensure that sufficient storage is allocated. If XtVaTypedArg is specified, the type argument specifies the representation desired by the caller and the size argument specifies the number of bytes allocated to store the result of the conversion. If the size is insufficient, a warning message is issued and the list entry is skipped. Widget Subpart Resource Data: The get_values_hook Procedure Widgets that have subparts can return resource values from them through by supplying a get_values_hook procedure. The get_values_hook procedure pointer is of type . typedef void (*XtArgsProc) Widget w ArgList args Cardinal *num_args w Specifies the widget whose subpart resource values are to be retrieved. args Specifies the argument list that was passed to or the transformed varargs list passed to . num_args Specifies the number of entries in the argument list. The widget with subpart resources should call in the get_values_hook procedure and pass in its subresource list and the args and num_args parameters. Widget Subpart State To retrieve the current values of subpart resource data associated with a widget instance, use . For a discussion of subpart resources, see . void XtGetSubvalues XtPointer base XtResourceList resources Cardinal num_resources ArgList args Cardinal num_args base Specifies the base address of the subpart data structure for which the resources should be retrieved. resources Specifies the subpart resource list. num_resources Specifies the number of entries in the resource list. args Specifies the argument list of name/address pairs that contain the resource names and the addresses into which the resource values are to be stored. num_args Specifies the number of entries in the argument list. The function obtains resource values from the structure identified by base. The value field in each argument entry must contain the address into which to store the corresponding resource value. It is the caller's responsibility to allocate and deallocate this storage according to the size of the resource representation type used within the subpart. If the argument list contains a resource name that is not found in the resource list, the value at the corresponding address is not modified. To retrieve the current values of subpart resources associated with a widget instance using varargs lists, use . void XtVaGetSubvalues XtPointer base XtResourceList resources Cardinal num_resources ... base Specifies the base address of the subpart data structure for which the resources should be retrieved. resources Specifies the subpart resource list. num_resources Specifies the number of entries in the resource list. ... Specifies a variable argument list of name/address pairs that contain the resource names and the addresses into which the resource values are to be stored. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. XtVaTypedArg is not supported for . If XtVaTypedArg is specified in the list, a warning message is issued and the entry is then ignored. Setting Widget State To modify the current values of resources associated with a widget instance, use . void XtSetValues Widget object ArgList args Cardinal num_args object Specifies the object whose resources are to be modified. Must be of class Object or any subclass thereof. args Specifies the argument list of name/value pairs that contain the resources to be modified and their new values. num_args Specifies the number of entries in the argument list. The function starts with the resources specified for the Object class fields and proceeds down the subclass chain to the object. At each stage, it replaces the object resource fields with any values specified in the argument list. then calls the set_values procedures for the object in superclass-to-subclass order. If the object has any non-NULL set_values_hook fields, these are called immediately after the corresponding set_values procedure. This procedure permits subclasses to set subpart data via . If the class of the object's parent is a subclass of constraintWidgetClass, also updates the object's constraints. It starts with the constraint resources specified for constraintWidgetClass and proceeds down the subclass chain to the parent's class. At each stage, it replaces the constraint resource fields with any values specified in the argument list. It then calls the constraint set_values procedures from constraintWidgetClass down to the parent's class. The constraint set_values procedures are called with widget arguments, as for all set_values procedures, not just the constraint records, so that they can make adjustments to the desired values based on full information about the widget. Any arguments specified that do not match a resource list entry are silently ignored. If the object is of a subclass of RectObj, determines if a geometry request is needed by comparing the old object to the new object. If any geometry changes are required, restores the original geometry and makes the request on behalf of the widget. If the geometry manager returns XtGeometryYes, calls the object's resize procedure. If the geometry manager returns XtGeometryDone, continues, as the object's resize procedure should have been called by the geometry manager. If the geometry manager returns XtGeometryNo, ignores the geometry request and continues. If the geometry manager returns XtGeometryAlmost, calls the set_values_almost procedure, which determines what should be done. then repeats this process, deciding once more whether the geometry manager should be called. Finally, if any of the set_values procedures returned True, and the widget is realized, causes the widget's expose procedure to be invoked by calling XClearArea on the widget's window. To modify the current values of resources associated with a widget instance using varargs lists, use . void XtVaSetValues Widget object ... object Specifies the object whose resources are to be modified. Must be of class Object or any subclass thereof. ... Specifies the variable argument list of name/value pairs that contain the resources to be modified and their new values. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Widget State: The set_values Procedure The set_values procedure pointer in a widget class is of type . typedef Boolean (*XtSetValuesFunc) Widget current Widget request Widget new ArgList args Cardinal *num_args current Specifies a copy of the widget as it was before the call. request Specifies a copy of the widget with all values changed as asked for by the call before any class set_values procedures have been called. new Specifies the widget with the new values that are actually allowed. args Specifies the argument list passed to or the transformed argument list passed to . num_args Specifies the number of entries in the argument list. The set_values procedure should recompute any field derived from resources that are changed (for example, many GCs depend on foreground and background pixels). If no recomputation is necessary, and if none of the resources specific to a subclass require the window to be redisplayed when their values are changed, you can specify NULL for the set_values field in the class record. Like the initialize procedure, set_values mostly deals only with the fields defined in the subclass, but it has to resolve conflicts with its superclass, especially conflicts over width and height. Sometimes a subclass may want to overwrite values filled in by its superclass. In particular, size calculations of a superclass are often incorrect for a subclass, and, in this case, the subclass must modify or recalculate fields declared and computed by its superclass. As an example, a subclass can visually surround its superclass display. In this case, the width and height calculated by the superclass set_values procedure are too small and need to be incremented by the size of the surround. The subclass needs to know if its superclass's size was calculated by the superclass or was specified explicitly. All widgets must place themselves into whatever size is explicitly given, but they should compute a reasonable size if no size is requested. How does a subclass know the difference between a specified size and a size computed by a superclass? The request and new parameters provide the necessary information. The request widget is a copy of the widget, updated as originally requested. The new widget starts with the values in the request, but it has additionally been updated by all superclass set_values procedures called so far. A subclass set_values procedure can compare these two to resolve any potential conflicts. The set_values procedure need not refer to the request widget unless it must resolve conflicts between the current and new widgets. Any changes the widget needs to make, including geometry changes, should be made in the new widget. In the above example, the subclass with the visual surround can see if the width and height in the request widget are zero. If so, it adds its surround size to the width and height fields in the new widget. If not, it must make do with the size originally specified. In this case, zero is a special value defined by the class to permit the application to invoke this behavior. The new widget is the actual widget instance record. Therefore, the set_values procedure should do all its work on the new widget; the request widget should never be modified. If the set_values procedure needs to call any routines that operate on a widget, it should specify new as the widget instance. Before calling the set_values procedures, the Intrinsics modify the resources of the request widget according to the contents of the arglist; if the widget names all its resources in the class resource list, it is never necessary to examine the contents of args. Finally, the set_values procedure must return a Boolean that indicates whether the widget needs to be redisplayed. Note that a change in the geometry fields alone does not require the set_values procedure to return True; the X server will eventually generate an Expose event, if necessary. After calling all the set_values procedures, forces a redisplay by calling XClearArea if any of the set_values procedures returned True. Therefore, a set_values procedure should not try to do its own redisplaying. Set_values procedures should not do any work in response to changes in geometry because eventually will perform a geometry request, and that request might be denied. If the widget actually changes size in response to a call to , its resize procedure is called. Widgets should do any geometry-related work in their resize procedure. Note that it is permissible to call before a widget is realized. Therefore, the set_values procedure must not assume that the widget is realized. Widget State: The set_values_almost Procedure The set_values_almost procedure pointer in the widget class record is of type . typedef void (*XtAlmostProc) Widget old Widget new XtWidgetGeometry *request XtWidgetGeometry *reply old Specifies a copy of the object as it was before the call. new Specifies the object instance record. request Specifies the original geometry request that was sent to the geometry manager that caused XtGeometryAlmost to be returned. reply Specifies the compromise geometry that was returned by the geometry manager with XtGeometryAlmost. Most classes inherit the set_values_almost procedure from their superclass by specifying XtInheritSetValuesAlmost in the class initialization. The set_values_almost procedure in rectObjClass accepts the compromise suggested. The set_values_almost procedure is called when a client tries to set a widget's geometry by means of a call to and the geometry manager cannot satisfy the request but instead returns XtGeometryNo or XtGeometryAlmost and a compromise geometry. The new object is the actual instance record. The x, y, width, height, and border_width fields contain the original values as they were before the call, and all other fields contain the new values. The request parameter contains the new geometry request that was made to the parent. The reply parameter contains reply->request_mode equal to zero if the parent returned XtGeometryNo and contains the parent's compromise geometry otherwise. The set_values_almost procedure takes the original geometry and the compromise geometry and determines if the compromise is acceptable or whether to try a different compromise. It returns its results in the request parameter, which is then sent back to the geometry manager for another try. To accept the compromise, the procedure must copy the contents of the reply geometry into the request geometry; to attempt an alternative geometry, the procedure may modify any part of the request argument; to terminate the geometry negotiation and retain the original geometry, the procedure must set request->request_mode to zero. The geometry fields of the old and new instances must not be modified directly. Widget State: The ConstraintClassPart set_values Procedure The constraint set_values procedure pointer is of type . The values passed to the parent's constraint set_values procedure are the same as those passed to the child's class set_values procedure. A class can specify NULL for the set_values field of the ConstraintPart if it need not compute anything. The constraint set_values procedure should recompute any constraint fields derived from constraint resources that are changed. Furthermore, it may modify other widget fields as appropriate. For example, if a constraint for the maximum height of a widget is changed to a value smaller than the widget's current height, the constraint set_values procedure may reset the height field in the widget. Widget Subpart State To set the current values of subpart resources associated with a widget instance, use . For a discussion of subpart resources, see . void XtSetSubvalues XtPointer base XtResourceList resources Cardinal num_resources ArgList args Cardinal num_args base Specifies the base address of the subpart data structure into which the resources should be written. resources Specifies the subpart resource list. num_resources Specifies the number of entries in the resource list. args Specifies the argument list of name/value pairs that contain the resources to be modified and their new values. num_args Specifies the number of entries in the argument list. The function updates the resource fields of the structure identified by base. Any specified arguments that do not match an entry in the resource list are silently ignored. To set the current values of subpart resources associated with a widget instance using varargs lists, use . void XtVaSetSubvalues XtPointer base XtResourceList resources Cardinal num_resources base Specifies the base address of the subpart data structure into which the resources should be written. resources Specifies the subpart resource list. num_resources Specifies the number of entries in the resource list. ... Specifies the variable argument list of name/value pairs that contain the resources to be modified and their new values. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. XtVaTypedArg is not supported for . If an entry containing XtVaTypedArg is specified in the list, a warning message is issued and the entry is ignored. Widget Subpart Resource Data: The set_values_hook Procedure The set_values_hook procedure is obsolete, as the same information is now available to the set_values procedure. The procedure has been retained for those widgets that used it in versions prior to Release 4. Widgets that have a subpart can set the subpart resource values through by supplying a set_values_hook procedure. The set_values_hook procedure pointer in a widget class is of type . typedef Boolean (*XtArgsFunc) Widget w Arglist args Cardinal *num_args w Specifies the widget whose subpart resource values are to be changed. args Specifies the argument list that was passed to or the transformed varargs list passed to . num_args Specifies the number of entries in the argument list. The widget with subpart resources may call from the set_values_hook procedure and pass in its subresource list and the args and num_args parameters. a> reply Specifies the compromise geometry that was returned by the geometrlibXt-1.1.5/specs/appD.xml000064401431060000012000000673651252061032400156200ustar00alancstaff00002660200006 Intrinsics Error Messages All Intrinsics errors and warnings have class ``XtToolkitError''. The following two tables summarize the common errors and warnings that can be generated by the Intrinsics. Additional implementation-dependent messages are permitted. Error Messages Name Type Default Message allocError calloc Cannot perform calloc allocError malloc Cannot perform malloc allocError realloc Cannot perform realloc internalError xtMakeGeometryRequest internal error; ShellClassExtension is NULL invalidArgCount xtGetValues Argument count > 0 on NULL argument list in XtGetValues invalidArgCount xtSetValues Argument count > 0 on NULL argument list in XtSetValues invalidClass applicationShellInsertChild ApplicationShell does not accept RectObj children; ignored invalidClass constraintSetValue Subclass of Constraint required in CallConstraintSetValues invalidClass xtAppCreateShell XtAppCreateShell requires non-NULL widget class invalidClass xtCreatePopupShell XtCreatePopupShell requires non-NULL widget class invalidClass xtCreateWidget XtCreateWidget requires non-NULL widget class invalidClass xtPopdown XtPopdown requires a subclass of shellWidgetClass invalidClass xtPopup XtPopup requires a subclass of shellWidgetClass invalidDimension xtCreateWindow Widget %s has zero width and/or height invalidDimension shellRealize Shell widget %s has zero width and/or height invalidDisplay xtInitialize Can't open display: %s invalidGetValues xtGetValues NULL ArgVal in XtGetValues invalidExtension shellClassPartInitialize widget class %s has invalid ShellClassExtension record invalidExtension xtMakeGeometryRequest widget class %s has invalid ShellClassExtension record invalidGeometryManager xtMakeGeometryRequest XtMakeGeometryRequest - parent has no geometry manager invalidParameter xtAddInput invalid condition passed to XtAddInput invalidParameter xtAddInput invalid condition passed to XtAppAddInput invalidParent xtChangeManagedSet Attempt to manage a child when parent is not Composite invalidParent xtChangeManagedSet Attempt to unmanage a child when parent is not Composite invalidParent xtCreatePopupShell XtCreatePopupShell requires non-NULL parent invalidParent xtCreateWidget XtCreateWidget requires non-NULL parent invalidParent xtMakeGeometryRequest non-shell has no parent in XtMakeGeometryRequest invalidParent xtMakeGeometryRequest XtMakeGeometryRequest - parent not composite invalidParent xtManageChildren Attempt to manage a child when parent is not Composite invalidParent xtUnmanageChildren Attempt to unmanage a child when parent is not Composite invalidProcedure inheritanceProc Unresolved inheritance operation invalidProcedure realizeProc No realize class procedure defined invalidWindow eventHandler Event with wrong window missingWidget fetchDisplayArg FetchDisplayArg called without a widget to reference nonWidget xtCreateWidget attempt to add non-widget child "%s" to parent "%s" which supports only widgets noPerDisplay closeDisplay Couldn't find per display information noPerDisplay getPerDisplay Couldn't find per display information noSelectionProperties freeSelectionProperty internal error: no selection property context for display noWidgetAncestor windowedAncestor Object "%s" does not have windowed ancestor nullDisplay xtRegisterExtensionSelector XtRegisterExtensionSelector requires a non-NULL display nullProc insertChild "%s" parent has NULL insert_child method r2versionMismatch widget Widget class %s must be re-compiled. R3versionMismatch widget Widget class %s must be re-compiled. R4orR5versionMismatch widget Widget class %s must be re-compiled. rangeError xtRegisterExtensionSelector Attempt to register multiple selectors for one extension event type sessionManagement SmcOpenConnection Tried to connect to session manager, %s subclassMismatch xtCheckSubclass Widget class %s found when subclass of %s expected: %s Warning Messages Name Type Default Message ambiguousParent xtChangeManagedSet Not all children have same parent ambiguousParent xtManageChildren Not all children have same parent in XtManageChildren ambiguousParent xtUnmanageChildren Not all children have same parent in XtUnmanageChildren badFormat xtGetSelectionValue Selection owner returned type INCR property with format != 32 badGeometry shellRealize Shell widget "%s" has an invalid geometry specification: "%s" badValue cvtStringToPixel Color name "%s" is not defined communicationError select Select failed; error code %s conversionError string Cannot convert string "%s" to type %s conversionError stringToVisual Cannot find Visual of class %s for display %s conversionFailed xtConvertVarToArgList Type conversion failed conversionFailed xtGetTypedArg Type conversion (%s to %s) failed for widget '%s' displayError invalidDisplay Can't find display structure grabError xtAddGrab XtAddGrab requires exclusive grab if spring_loaded is TRUE grabError xtRemoveGrab XtRemoveGrab asked to remove a widget not on the list initializationError xtInitialize Initializing Resource Lists twice insufficientSpace xtGetTypedArg Insufficient space for converted type '%s' in widget '%s' internalError shell Shell's window manager interaction is broken invalidAddressMode computeArgs Conversion arguments for widget '%s' contain an unsupported address mode invalidArgCount getResources argument count > 0 on NULL argument list invalidCallbackList xtAddCallback Cannot find callback list in XtAddCallback invalidCallbackList xtAddCallback Cannot find callback list in XtAddCallbacks invalidCallbackList xtCallCallback Cannot find callback list in XtCallCallbacks invalidCallbackList xtRemoveAllCallback Cannot find callback list in XtRemoveAllCallbacks invalidCallbackList xtRemoveCallback Cannot find callback list in XtRemoveCallbacks invalidChild xtChangeManagedSet Null child passed to UnmanageChildren invalidChild xtManageChildren null child passed to ManageChildren invalidChild xtManageChildren null child passed to XtManageChildren invalidChild xtUnmanageChildren Null child passed to XtUnmanageChildren invalidChild xtUnmanageChildren Null child found in argument list to unmanage invalidDepth setValues Can't change widget depth invalidExtension xtCreateWidget widget "%s" class %s has invalid CompositeClassExtension record invalidExtension xtCreateWidget widget class %s has invalid ConstraintClassExtension record invalidGrab ungrabKeyOrButton Attempt to remove nonexistent passive grab invalidGrabKind xtPopup grab kind argument has invalid value; XtGrabNone assumed invalidParameters freeTranslations Freeing XtTranslations requires no extra arguments invalidParameters mergeTranslations MergeTM to TranslationTable needs no extra arguments invalidParameters xtMenuPopdown XtMenuPopdown called with num_params != 0 or 1 invalidParameters xtMenuPopupAction MenuPopup wants exactly one argument invalidParent xtCopyFromParent CopyFromParent must have non-NULL parent invalidPopup xtMenuPopup Can't find popup widget "%s" in XtMenuPopup invalidPopup xtMenuPopdown Can't find popup in widget "%s" in XtMenuPopdown invalidPopup unsupportedOperation Pop-up menu creation is only supported on ButtonPress, KeyPress or EnterNotify events. invalidPopup unsupportedOperation Pop-up menu creation is only supported on Button, Key or EnterNotify events. invalidProcedure deleteChild null delete_child procedure for class %s in XtDestroy invalidProcedure inputHandler XtRemoveInput: Input handler not found invalidProcedure set_values_almost set_values_almost procedure shouldn't be NULL invalidResourceCount getResources resource count > 0 on NULL resource list invalidResourceName computeArgs Cannot find resource name %s as argument to conversion invalidShell xtTranslateCoords Widget has no shell ancestor invalidSizeOverride xtDependencies Representation size %d must match superclass's to override %s missingCharsetList cvtStringToFontSet Missing charsets in String to FontSet conversion noActionProc xtCallActionProc No action proc named "%s" is registered for widget "%s" noColormap cvtStringToPixel Cannot allocate colormap entry for "%s" noFont cvtStringToFont Unable to load any usable ISO8859-1 font noFont cvtStringToFontSet Unable to load any usable fontset noFont cvtStringToFontStruct Unable to load any usable ISO8859-1 font notInConvertSelection xtGetSelectionRequest XtGetSelectionRequest or XtGetSelectionParameters called for widget "%s" outside of ConvertSelection proc notRectObj xtChangeManagedSet child "%s", class %s is not a RectObj notRectObj xtManageChildren child "%s", class %s is not a RectObj nullWidget xtConvertVarToArgList XtVaTypedArg conversion needs non-NULL widget handle r3versionMismatch widget Shell Widget class %s binary compiled for R3 translationError nullTable Can't remove accelerators from NULL table translationError nullTable Tried to remove nonexistent accelerators translationError ambiguousActions Overriding earlier translation manager actions. translationError newActions New actions are:%s translationError nullTable table to (un)merge must not be null translationError nullTable Can't translate event through NULL table translationError oldActions Previous entry was: %s %s translationError unboundActions Actions not found: %s translationError xtTranslateInitialize Initializing Translation manager twice. translationParseError missingComma ... possibly due to missing ',' in event sequence. translationParseError nonLatin1 ... probably due to non-Latin1 character in quoted string translationParseError parseError translation table syntax error: %s translationParseError parseString Missing '"'. translationParseError showLine ... found while parsing '%s' typeConversionError noConverter No type converter registered for '%s' to '%s' conversion. unknownType xtConvertVarToArgList Unable to find type of resource for conversion unknownType xtGetTypedArg Unable to find type of resource for conversion versionMismatch widget Widget class %s version mismatch (recompilation needed):\\n widget %d vs. intrinsics %d. wrongParameters cvtIntOrPixelToXColor Pixel to color conversion needs screen and colormap arguments wrongParameters cvtIntToBool Integer to Bool conversion needs no extra arguments wrongParameters cvtIntToBoolean Integer to Boolean conversion needs no extra arguments wrongParameters cvtIntToFloat Integer to Float conversion needs no extra arguments wrongParameters cvtIntToFont Integer to Font conversion needs no extra arguments wrongParameters cvtIntToPixel Integer to Pixel conversion needs no extra arguments wrongParameters cvtIntToPixmap Integer to Pixmap conversion needs no extra arguments wrongParameters cvtIntToShort Integer to Short conversion needs no extra arguments wrongParameters cvtIntToUnsignedChar Integer to UnsignedChar conversion needs no extra arguments wrongParameters cvtStringToAcceleratorTable String to AcceleratorTable conversion needs no extra arguments wrongParameters cvtStringToAtom String to Atom conversion needs Display argument wrongParameters cvtStringToBool String to Bool conversion needs no extra arguments wrongParameters cvtStringToBoolean String to Boolean conversion needs no extra arguments wrongParameters cvtStringToCommandArgArray String to CommandArgArray conversion needs no extra arguments wrongParameters cvtStringToCursor String to cursor conversion needs display argument wrongParameters cvtStringToDimension String to Dimension conversion needs no extra arguments wrongParameters cvtStringToDirectoryString String to DirectoryString conversion needs no extra arguments wrongParameters cvtStringToDisplay String to Display conversion needs no extra arguments wrongParameters cvtStringToFile String to File conversion needs no extra arguments wrongParameters cvtStringToFloat String to Float conversion needs no extra arguments wrongParameters cvtStringToFont String to font conversion needs display argument wrongParameters cvtStringToFontSet String to FontSet conversion needs display and locale arguments wrongParameters cvtStringToFontStruct String to font conversion needs display argument wrongParameters cvtStringToGravity String to Gravity conversion needs no extra arguments wrongParameters cvtStringToInitialState String to InitialState conversion needs no extra arguments wrongParameters cvtStringToInt String to Integer conversion needs no extra arguments wrongParameters cvtStringToPixel String to pixel conversion needs screen and colormap arguments wrongParameters cvtStringToRestartStyle String to RestartStyle conversion needs no extra arguments wrongParameters cvtStringToShort String to Integer conversion needs no extra arguments wrongParameters cvtStringToTranslationTable String to TranslationTable conversion needs no extra arguments wrongParameters cvtStringToUnsignedChar String to Integer conversion needs no extra arguments wrongParameters cvtStringToVisual String to Visual conversion needs screen and depth arguments wrongParameters cvtXColorToPixel Color to Pixel conversion needs no extra arguments wrongParameters freeCursor Free Cursor requires display argument wrongParameters freeDirectoryString Free Directory String requires no extra arguments wrongParameters freeFile Free File requires no extra arguments wrongParameters freeFont Free Font needs display argument wrongParameters freeFontSet FreeFontSet needs display and locale arguments wrongParameters freeFontStruct Free FontStruct requires display argument wrongParameters freePixel Freeing a pixel requires screen and colormap arguments ry>child "%s", class %s is not a RectObj notRectObj xtManageChildren child "%s", class %s is not a RectObj nullWidget xtlibXt-1.1.5/specs/CH07.xml000064401431060000012000004463331252061032400153710ustar00alancstaff00002660200006 Event Management While Xlib allows the reading and processing of events anywhere in an application, widgets in the X Toolkit neither directly read events nor grab the server or pointer. Widgets register procedures that are to be called when an event or class of events occurs in that widget. A typical application consists of startup code followed by an event loop that reads events and dispatches them by calling the procedures that widgets have registered. The default event loop provided by the Intrinsics is . The event manager is a collection of functions to perform the following tasks: Add or remove event sources other than X server events (in particular, timer interrupts, file input, or POSIX signals). Query the status of event sources. Add or remove procedures to be called when an event occurs for a particular widget. Enable and disable the dispatching of user-initiated events (keyboard and pointer events) for a particular widget. Constrain the dispatching of events to a cascade of pop-up widgets. Register procedures to be called when specific events arrive. Register procedures to be called when the Intrinsics will block. Enable safe operation in a multi-threaded environment. Most widgets do not need to call any of the event handler functions explicitly. The normal interface to X events is through the higher-level translation manager, which maps sequences of X events, with modifiers, into procedure calls. Applications rarely use any of the event manager routines besides . Adding and Deleting Additional Event Sources While most applications are driven only by X events, some applications need to incorporate other sources of input into the Intrinsics event-handling mechanism. The event manager provides routines to integrate notification of timer events and file data pending into this mechanism. The next section describes functions that provide input gathering from files. The application registers the files with the Intrinsics read routine. When input is pending on one of the files, the registered callback procedures are invoked. Adding and Removing Input Sources To register a new file as an input source for a given application context, use . XtInputId XtAppAddInput XtAppContext app_context int source XtPointer condition XtInputCallbackProc proc XtPointer client_data app_context Specifies the application context that identifies the application. source Specifies the source file descriptor on a POSIX-based system or other operating-system-dependent device specification. condition Specifies the mask that indicates a read, write, or exception condition or some other operating-system-dependent condition. proc Specifies the procedure to be called when the condition is found. client_data Specifies an argument passed to the specified procedure when it is called. The function registers with the Intrinsics read routine a new source of events, which is usually file input but can also be file output. Note that file should be loosely interpreted to mean any sink or source of data. also specifies the conditions under which the source can generate events. When an event is pending on this source, the callback procedure is called. The legal values for the condition argument are operating-system-dependent. On a POSIX-based system, source is a file number and the condition is some union of the following: XtInputReadMask Specifies that proc is to be called when source has data to be read. XtInputWriteMask Specifies that proc is to be called when source is ready for writing. XtInputExceptMask Specifies that proc is to be called when source has exception data. Callback procedure pointers used to handle file events are of type . typedef void (*XtInputCallbackProc) XtPointer client_data int *source XtInputId *id client_data Passes the client data argument that was registered for this procedure in XtApp\%AddInput. source Passes the source file descriptor generating the event. id Passes the id returned from the corresponding call. See for information regarding the use of in multiple threads. To discontinue a source of input, use . void XtRemoveInput XtInputId id id Specifies the id returned from the corresponding call. The function causes the Intrinsics read routine to stop watching for events from the file source specified by id. See for information regarding the use of in multiple threads. Adding and Removing Blocking Notifications Occasionally it is desirable for an application to receive notification when the Intrinsics event manager detects no pending input from file sources and no pending input from X server event sources and is about to block in an operating system call. To register a hook that is called immediately prior to event blocking, use . XtBlockHookId XtAppAddBlockHook XtAppContext app_context XtBlockHookProc proc XtPointer client_data app_context Specifies the application context that identifies the application. proc Specifies the procedure to be called before blocking. client_data Specifies an argument passed to the specified procedure when it is called. The function registers the specified procedure and returns an identifier for it. The hook procedure proc is called at any time in the future when the Intrinsics are about to block pending some input. The procedure pointers used to provide notification of event blocking are of type . void *XtBlockHookProc XtPointer client_data client_data Passes the client data argument that was registered for this procedure in XtApp\%AddBlockHook. To discontinue the use of a procedure for blocking notification, use . void XtRemoveBlockHook XtBlockHookId id id Specifies the identifier returned from the corresponding call to . The function removes the specified procedure from the list of procedures that are called by the Intrinsics read routine before blocking on event sources. Adding and Removing Timeouts The timeout facility notifies the application or the widget through a callback procedure that a specified time interval has elapsed. Timeout values are uniquely identified by an interval id. To register a timeout callback, use . XtIntervalId XtAppAddTimeOut XtAppContext app_context unsigned long interval XtTimerCallbackProc proc XtPointer client_data app_context Specifies the application context for which the timer is to be set. interval Specifies the time interval in milliseconds. proc Specifies the procedure to be called when the time expires. client_data Specifies an argument passed to the specified procedure when it is called. The function creates a timeout and returns an identifier for it. The timeout value is set to interval. The callback procedure proc is called when or is next called after the time interval elapses, and then the timeout is removed. Callback procedure pointers used with timeouts are of type . void *XtTimerCallbackProc XtPointer client_data XtIntervalId *timer client_data Passes the client data argument that was registered for this procedure in XtApp\%AddTimeOut. timer Passes the id returned from the corresponding call. See for information regarding the use of in multiple threads. To clear a timeout value, use . void XtRemoveTimeOut XtIntervalId timer timer Specifies the id for the timeout request to be cleared. The function removes the pending timeout. Note that timeouts are automatically removed once they trigger. Please refer to Section 7.12 for information regarding the use of in multiple threads. Adding and Removing Signal Callbacks The signal facility notifies the application or the widget through a callback procedure that a signal or other external asynchronous event has occurred. The registered callback procedures are uniquely identified by a signal id. Prior to establishing a signal handler, the application or widget should call and store the resulting identifier in a place accessible to the signal handler. When a signal arrives, the signal handler should call to notify the Intrinsics that a signal has occured. To register a signal callback use . XtSignalId XtAppAddSignal XtAppContext app_context XtSignalCallbackProc proc XtPointer client_data app_context Specifies the application context that identifies the application. proc Specifies the procedure to be called when the signal is noticed. client_data Specifies an argument passed to the specified procedure when it is called. The callback procedure pointers used to handle signal events are of type . typedef void (*XtSignalCallbackProc) XtPointer client_data XtSignalId *id client_data Passes the client data argument that was registered for this procedure in . id Passes the id returned from the corresponding call. To notify the Intrinsics that a signal has occured, use . void XtNoticeSignal XtSignalId id id Specifies the id returned from the corresponding call. On a POSIX-based system, is the only Intrinsics function that can safely be called from a signal handler. If is invoked multiple times before the Intrinsics are able to invoke the registered callback, the callback is only called once. Logically, the Intrinsics maintain ``pending'' flag for each registered callback. This flag is initially False and is set to True by . When or (with a mask including XtIMSignal) is called, all registered callbacks with ``pending'' True are invoked and the flags are reset to False. If the signal handler wants to track how many times the signal has been raised, it can keep its own private counter. Typically the handler would not do any other work; the callback does the actual processing for the signal. The Intrinsics never block signals from being raised, so if a given signal can be raised multiple times before the Intrinsics can invoke the callback for that signal, the callback must be designed to deal with this. In another case, a signal might be raised just after the Intrinsics sets the pending flag to False but before the callback can get control, in which case the pending flag will still be True after the callback returns, and the Intrinsics will invoke the callback again, even though all of the signal raises have been handled. The callback must also be prepared to handle this case. To remove a registered signal callback, call . void XtRemoveSignal XtSignalId id id Specifies the id returned by the corresponding call to . The client should typically disable the source of the signal before calling . If the signal could have been raised again before the source was disabled and the client wants to process it, then after disabling the source but before calling the client can test for signals with and process them by calling with the mask XtIMSignal. Constraining Events to a Cascade of Widgets Modal widgets are widgets that, except for the input directed to them, lock out user input to the application. When a modal menu or modal dialog box is popped up using , user events (keyboard and pointer events) that occur outside the modal widget should be delivered to the modal widget or ignored. In no case will user events be delivered to a widget outside the modal widget. Menus can pop up submenus, and dialog boxes can pop up further dialog boxes to create a pop-up cascade. In this case, user events may be delivered to one of several modal widgets in the cascade. Display-related events should be delivered outside the modal cascade so that exposure events and the like keep the application's display up-to-date. Any event that occurs within the cascade is delivered as usual. The user events delivered to the most recent spring-loaded shell in the cascade when they occur outside the cascade are called remap events and are KeyPress, KeyRelease, ButtonPress, and ButtonRelease. The user events ignored when they occur outside the cascade are MotionNotify and EnterNotify. All other events are delivered normally. In particular, note that this is one way in which widgets can receive LeaveNotify events without first receiving EnterNotify events; they should be prepared to deal with this, typically by ignoring any unmatched LeaveNotify events. uses the and functions to constrain user events to a modal cascade and subsequently to remove a grab when the modal widget is popped down. To constrain or redirect user input to a modal widget, use . void XtAddGrab Widget w Boolean exclusive Boolean spring_loaded w Specifies the widget to add to the modal cascade. Must be of class Core or any subclass thereof. exclusive Specifies whether user events should be dispatched exclusively to this widget or also to previous widgets in the cascade. spring_loaded Specifies whether this widget was popped up because the user pressed a pointer button. The function appends the widget to the modal cascade and checks that exclusive is True if spring_loaded is True. If this condition is not met, generates a warning message. The modal cascade is used by when it tries to dispatch a user event. When at least one modal widget is in the widget cascade, first determines if the event should be delivered. It starts at the most recent cascade entry and follows the cascade up to and including the most recent cascade entry added with the exclusive parameter True. This subset of the modal cascade along with all descendants of these widgets comprise the active subset. User events that occur outside the widgets in this subset are ignored or remapped. Modal menus with submenus generally add a submenu widget to the cascade with exclusive False. Modal dialog boxes that need to restrict user input to the most deeply nested dialog box add a subdialog widget to the cascade with exclusive True. User events that occur within the active subset are delivered to the appropriate widget, which is usually a child or further descendant of the modal widget. Regardless of where in the application they occur, remap events are always delivered to the most recent widget in the active subset of the cascade registered with spring_loaded True, if any such widget exists. If the event occurred in the active subset of the cascade but outside the spring-loaded widget, it is delivered normally before being delivered also to the spring-loaded widget. Regardless of where it is dispatched, the Intrinsics do not modify the contents of the event. To remove the redirection of user input to a modal widget, use . void XtRemoveGrab Widget w w Specifies the widget to remove from the modal cascade. The function removes widgets from the modal cascade starting at the most recent widget up to and including the specified widget. It issues a warning if the specified widget is not on the modal cascade. Requesting Key and Button Grabs The Intrinsics provide a set of key and button grab interfaces that are parallel to those provided by Xlib and that allow the Intrinsics to modify event dispatching when necessary. X Toolkit applications and widgets that need to passively grab keys or buttons or actively grab the keyboard or pointer should use the following Intrinsics routines rather than the corresponding Xlib routines. To passively grab a single key of the keyboard, use . void XtGrabKey Widget widget KeyCode keycode Modifiers modifiers Boolean owner_events int pointer_mode widget Specifies the widget in whose window the key is to be grabbed. Must be of class Core or any subclass thereof. keycode modifiers owner_events pointer_mode keyboard_mode Specify arguments to XGrabKey; see Section 12.2 in Xlib — C Language X Interface. calls XGrabKey specifying the widget's window as the grab window if the widget is realized. The remaining arguments are exactly as for XGrabKey. If the widget is not realized, or is later unrealized, the call to XGrabKey is performed (again) when the widget is realized and its window becomes mapped. In the future, if is called with a KeyPress event matching the specified keycode and modifiers (which may be AnyKey or AnyModifier, respectively) for the widget's window, the Intrinsics will call with the timestamp from the KeyPress event if either of the following conditions is true: There is a modal cascade and the widget is not in the active subset of the cascade and the keyboard was not previously grabbed, or XFilterEvent returns True. To cancel a passive key grab, use . void XtUngrabKey Widget widget KeyCode keycode Modifiers modifiers widget Specifies the widget in whose window the key was grabbed. keycode modifiers Specify arguments to XUngrabKey; see Section 12.2 in Xlib — C Language X Interface. The procedure calls XUngrabKey specifying the widget's window as the ungrab window if the widget is realized. The remaining arguments are exactly as for XUngrabKey. If the widget is not realized, removes a deferred request, if any, for the specified widget, keycode, and modifiers. To actively grab the keyboard, use . int XtGrabKeyboard Widget widget Boolean owner_events int pointer_mode Time time widget Specifies the widget for whose window the keyboard is to be grabbed. Must be of class Core or any subclass thereof. owner_events pointer_mode keyboard_mode time Specify arguments to XGrabKeyboard; see Section 12.2 in Xlib — C Language X Interface. If the specified widget is realized, calls XGrabKeyboard specifying the widget's window as the grab window. The remaining arguments and return value are exactly as for XGrabKeyboard. If the widget is not realized, immediately returns GrabNotViewable. No future automatic ungrab is implied by . To cancel an active keyboard grab, use . void XtUngrabKeyboard Widget widget Time time widget Specifies the widget that has the active keyboard grab. time Specifies the additional argument to XUngrabKeyboard; see Section 12.2 in Xlib — C Language X Interface. calls XUngrabKeyboard with the specified time. To passively grab a single pointer button, use . void XtGrabButton Widget widget int button Modifiers modifiers Boolean owner_events unsigned int event_mask int pointer_mode Window confine_to Cursor cursor widget Specifies the widget in whose window the button is to be grabbed. Must be of class Core or any subclass thereof. button modifiers owner_events event_mask pointer_mode keyboard_mode confine_to cursor Specify arguments to XGrabButton; see Section 12.1 in Xlib — C Language X Interface. calls XGrabButton specifying the widget's window as the grab window if the widget is realized. The remaining arguments are exactly as for XGrabButton. If the widget is not realized, or is later unrealized, the call to XGrabButton is performed (again) when the widget is realized and its window becomes mapped. In the future, if is called with a ButtonPress event matching the specified button and modifiers (which may be AnyButton or AnyModifier, respectively) for the widget's window, the Intrinsics will call with the timestamp from the ButtonPress event if either of the following conditions is true: There is a modal cascade and the widget is not in the active subset of the cascade and the pointer was not previously grabbed, or XFilterEvent returns True. To cancel a passive button grab, use . void XtUngrabButton Widget widget unsigned int button Modifiers modifiers widget Specifies the widget in whose window the button was grabbed. button modifiers Specify arguments to XUngrabButton; see Section 12.1 in Xlib — C Language X Interface. The procedure calls XUngrabButton specifying the widget's window as the ungrab window if the widget is realized. The remaining arguments are exactly as for XUngrabButton. If the widget is not realized, removes a deferred request, if any, for the specified widget, button, and modifiers. To actively grab the pointer, use . int XtGrabPointer Widget widget Boolean owner_events unsigned int event_mask int pointer_mode Window confine_to Cursor cursor Time time widget Specifies the widget for whose window the pointer is to be grabbed. Must be of class Core or any subclass thereof. owner_events event_mask pointer_mode keyboard_mode confine_to cursor time Specify arguments to XGrabPointer; see Section 12.1 in Xlib — C Language X Interface. If the specified widget is realized, calls XGrabPointer, specifying the widget's window as the grab window. The remaining arguments and return value are exactly as for XGrabPointer. If the widget is not realized, immediately returns GrabNotViewable. No future automatic ungrab is implied by . To cancel an active pointer grab, use . void XtUngrabPointer Widget widget Time time widget Specifies the widget that has the active pointer grab. time Specifies the time argument to XUngrabPointer; see Section 12.1 in Xlib — C Language X Interface. calls XUngrabPointer with the specified time. Focusing Events on a Child To redirect keyboard input to a normal descendant of a widget without calling XSetInputFocus, use . void XtSetKeyboardFocus Widget subtree subtree Specifies the subtree of the hierarchy for which the keyboard focus is to be set. Must be of class Core or any subclass thereof. descendant Specifies either the normal (non-pop-up) descendant of subtree to which keyboard events are logically directed, or None. It is not an error to specify None when no input focus was previously set. Must be of class Object or any subclass thereof. causes to remap keyboard events occurring within the specified subtree and dispatch them to the specified descendant widget or to an ancestor. If the descendant's class is not a subclass of Core, the descendant is replaced by its closest windowed ancestor. When there is no modal cascade, keyboard events can be dispatched to a widget in one of five ways. Assume the server delivered the event to the window for widget E (because of X input focus, key or keyboard grabs, or pointer position). If neither E nor any of E's ancestors have redirected the keyboard focus, or if the event activated a grab for E as specified by a call to with any value of owner_events, or if the keyboard is actively grabbed by E with owner_events False via or on a previous key press, the event is dispatched to E. Beginning with the ancestor of E closest to the root that has redirected the keyboard focus or E if no such ancestor exists, if the target of that focus redirection has in turn redirected the keyboard focus, recursively follow this focus chain to find a widget F that has not redirected focus. If E is the final focus target widget F or a descendant of F, the event is dispatched to E. If E is not F, an ancestor of F, or a descendant of F, and the event activated a grab for E as specified by a call to for E, is called. If E is an ancestor of F, and the event is a key press, and either E has grabbed the key with and owner_events False, or E has grabbed the key with and owner_events True, and the coordinates of the event are outside the rectangle specified by E's geometry, then the event is dispatched to E. Otherwise, define A as the closest common ancestor of E and F: If there is an active keyboard grab for any widget via either or on a previous key press, or if no widget between F and A (noninclusive) has grabbed the key and modifier combination with and any value of owner_events, the event is dispatched to F. Else, the event is dispatched to the ancestor of F closest to A that has grabbed the key and modifier combination with . When there is a modal cascade, if the final destination widget as identified above is in the active subset of the cascade, the event is dispatched; otherwise the event is remapped to a spring-loaded shell or discarded. Regardless of where it is dispatched, the Intrinsics do not modify the contents of the event. When subtree or one of its descendants acquires the X input focus or the pointer moves into the subtree such that keyboard events would now be delivered to the subtree, a FocusIn event is generated for the descendant if FocusChange events have been selected by the descendant. Similarly, when subtree loses the X input focus or the keyboard focus for one of its ancestors, a FocusOut event is generated for descendant if FocusChange events have been selected by the descendant. A widget tree may also actively manage the X server input focus. To do so, a widget class specifies an accept_focus procedure. The accept_focus procedure pointer is of type . Boolean *XtAcceptFocusProc Widget w Time *time w Specifies the widget. time Specifies the X time of the event causing the accept focus. Widgets that need the input focus can call XSetInputFocus explicitly, pursuant to the restrictions of the Inter-Client Communication Conventions Manual.. To allow outside agents, such as the parent, to cause a widget to take the input focus, every widget exports an accept_focus procedure. The widget returns a value indicating whether it actually took the focus or not, so that the parent can give the focus to another widget. Widgets that need to know when they lose the input focus must use the Xlib focus notification mechanism explicitly (typically by specifying translations for FocusIn and FocusOut events). Widgets classes that never want the input focus should set the accept_focus field to NULL. To call a widget's accept_focus procedure, use . Boolean XtCallAcceptFocus Widget w Time *time w Specifies the widget. Must be of class Core or any subclass thereof. time Specifies the X time of the event that is causing the focus change. The function calls the specified widget's accept_focus procedure, passing it the specified widget and time, and returns what the accept_focus procedure returns. If accept_focus is NULL, returns False. Events for Drawables That Are Not a Widget's Window Sometimes an application must handle events for drawables that are not associated with widgets in its widget tree. Examples include handling GraphicsExpose and NoExpose events on Pixmaps, and handling PropertyNotify events on the root window. To register a drawable with the Intrinsics event dispatching, use . void XtRegisterDrawable Display *display Drawable drawable Widget widget display Specifies the drawable's display. drawable Specifies the drawable to register. widget Specifies the widget to register the drawable for. associates the specified drawable with the specified widget so that future calls to with the drawable will return the widget. The default event dispatcher will dispatch future events that arrive for the drawable to the widget in the same manner as events that contain the widget's window. If the drawable is already registered with another widget, or if the drawable is the window of a widget in the client's widget tree, the results of calling are undefined. To unregister a drawable with the Intrinsics event dispatching, use . void XtUnregisterDrawable Display *display Drawable drawable display Specifies the drawable's display. drawable Specifies the drawable to unregister. removes an association created with . If the drawable is the window of a widget in the client's widget tree the results of calling are undefined. Querying Event Sources The event manager provides several functions to examine and read events (including file and timer events) that are in the queue. The next three functions are Intrinsics equivalents of the XPending, XPeekEvent, and XNextEvent Xlib calls. To determine if there are any events on the input queue for a given application, use . XtInputMask XtAppPending XtAppContext app_context app_context Specifies the application context that identifies the application to check. The function returns a nonzero value if there are events pending from the X server, timer pending, other input sources pending, or signal sources pending. The value returned is a bit mask that is the OR of XtIMXEvent, XtIMTimer, XtIMAlternateInput, and XtIMSignal (see XtAppProcessEvent ). If there are no events pending, flushes the output buffers of each Display in the application context and returns zero. To return the event from the head of a given application's input queue without removing input from the queue, use . Boolean XtAppPeekEvent XtAppContext app_context XEvent *event_return app_context Specifies the application context that identifies the application. event_return Returns the event information to the specified event structure. If there is an X event in the queue, copies it into event_return and returns True. If no X input is on the queue, flushes the output buffers of each Display in the application context and blocks until some input is available (possibly calling some timeout callbacks in the interim). If the next available input is an X event, fills in event_return and returns True. Otherwise, the input is for an input source registered with , and returns False. The sample implementations provides XtAppPeekEvent as described. Timeout callbacks are called while blocking for input. If some input for an input source is available, will return True without returning an event. To remove and return the event from the head of a given application's X event queue, use . void XtAppNextEvent XtAppContext app_context XEvent *event_return app_context Specifies the application context that identifies the application. event_return Returns the event information to the specified event structure. If the X event queue is empty, flushes the X output buffers of each Display in the application context and waits for an X event while looking at the other input sources and timeout values and calling any callback procedures triggered by them. This wait time can be used for background processing; see . Dispatching Events The Intrinsics provide functions that dispatch events to widgets or other application code. Every client interested in X events on a widget uses to register which events it is interested in and a procedure (event handler) to be called when the event happens in that window. The translation manager automatically registers event handlers for widgets that use translation tables; see . Applications that need direct control of the processing of different types of input should use . void XtAppProcessEvent XtAppContext app_context XtInputMask mask app_context Specifies the application context that identifies the application for which to process input. mask Specifies what types of events to process. The mask is the bitwise inclusive OR of any combination of XtIMXEvent, XtIMTimer, XtIMAlternateInput, and XtIMSignal. As a convenience, Intrinsic.h defines the symbolic name XtIMAll to be the bitwise inclusive OR of these four event types. The function processes one timer, input source, signal source, or X event. If there is no event or input of the appropriate type to process, then blocks until there is. If there is more than one type of input available to process, it is undefined which will get processed. Usually, this procedure is not called by client applications; see . processes timer events by calling any appropriate timer callbacks, input sources by calling any appropriate input callbacks, signal source by calling any appropriate signal callbacks, and X events by calling . When an X event is received, it is passed to , which calls the appropriate event handlers and passes them the widget, the event, and client-specific data registered with each procedure. If no handlers for that event are registered, the event is ignored and the dispatcher simply returns. To dispatch an event returned by , retrieved directly from the Xlib queue, or synthetically constructed, to any registered event filters or event handlers, call . Boolean XtDispatchEvent XEvent *event event Specifies a pointer to the event structure to be dispatched to the appropriate event handlers. The function first calls XFilterEvent with the event and the window of the widget to which the Intrinsics intend to dispatch the event, or the event window if the Intrinsics would not dispatch the event to any handlers. If XFilterEvent returns True and the event activated a server grab as identified by a previous call to or , calls or with the timestamp from the event and immediately returns True. If XFilterEvent returns True and a grab was not activated, just immediately returns True. Otherwise, sends the event to the event handler functions that have been previously registered with the dispatch routine. returns True if XFilterEvent returned True, or if the event was dispatched to some handler, and False if it found no handler to which to dispatch the event. records the last timestamp in any event that contains a timestamp (see XtLastTimestampProcessed ), regardless of whether it was filtered or dispatched. If a modal cascade is active with spring_loaded True, and if the event is a remap event as defined by , may dispatch the event a second time. If it does so, will call XFilterEvent again with the window of the spring-loaded widget prior to the second dispatch, and if XFilterEvent returns True, the second dispatch will not be performed. The Application Input Loop To process all input from a given application in a continuous loop, use the convenience procedure . void XtAppMainLoop XtAppContext app_context app_context Specifies the application context that identifies the application. The function first reads the next incoming X event by calling and then dispatches the event to the appropriate registered procedure by calling . This constitutes the main loop of X Toolkit applications. There is nothing special about ; it simply calls and then in a conditional loop. At the bottom of the loop, it checks to see if the specified application context's destroy flag is set. If the flag is set, the loop breaks. The whole loop is enclosed between a matching and . Applications can provide their own version of this loop, which tests some global termination flag or tests that the number of top-level widgets is larger than zero before circling back to the call to . Setting and Checking the Sensitivity State of a Widget Many widgets have a mode in which they assume a different appearance (for example, are grayed out or stippled), do not respond to user events, and become dormant. When dormant, a widget is considered to be insensitive. If a widget is insensitive, the event manager does not dispatch any events to the widget with an event type of KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify, EnterNotify, LeaveNotify, FocusIn, or FocusOut. A widget can be insensitive because its sensitive field is False or because one of its ancestors is insensitive and thus the widget's ancestor_sensitive field also is False. A widget can but does not need to distinguish these two cases visually. Pop-up shells will have ancestor_sensitive False if the parent was insensitive when the shell was created. Since on the parent will not modify the resource of the pop-up child, clients are advised to include a resource specification of the form ``*TransientShell.ancestorSensitive: True'' in the application defaults resource file or to otherwise ensure that the parent is sensitive when creating pop-up shells. To set the sensitivity state of a widget, use . void XtSetSensitive Widget w Boolean sensitive w Specifies the widget. Must be of class RectObj or any subclass thereof. sensitive Specifies whether the widget should receive keyboard, pointer, and focus events. The function first calls on the current widget with an argument list specifying the XtNsensitive resource and the new value. If sensitive is False and the widget's class is a subclass of Composite, recursively propagates the new value down the child tree by calling on each child to set ancestor_sensitive to False. If sensitive is True and the widget's class is a subclass of Composite and the widget's ancestor_sensitive field is True, sets the ancestor_sensitive of each child to True and then recursively calls on each normal descendant that is now sensitive to set ancestor_sensitive to True. calls to change the sensitive and ancestor_sensitive fields of each affected widget. Therefore, when one of these changes, the widget's set_values procedure should take whatever display actions are needed (for example, graying out or stippling the widget). maintains the invariant that, if the parent has either sensitive or ancestor_sensitive False, then all children have ancestor_sensitive False. To check the current sensitivity state of a widget, use . Boolean XtIsSensitive Widget w w Specifies the object. Must be of class Object or any subclass thereof. The function returns True or False to indicate whether user input events are being dispatched. If object's class is a subclass of RectObj and both sensitive and ancestor_sensitive are True, returns True; otherwise, it returns False. Adding Background Work Procedures The Intrinsics have some limited support for background processing. Because most applications spend most of their time waiting for input, you can register an idle-time work procedure that is called when the toolkit would otherwise block in or . Work procedure pointers are of type . typedef Boolean (*XtWorkProc) XtPointer client_data client_data Passes the client data specified when the work procedure was registered. This procedure should return True when it is done to indicate that it should be removed. If the procedure returns False, it will remain registered and called again when the application is next idle. Work procedures should be very judicious about how much they do. If they run for more than a small part of a second, interactive feel is likely to suffer. To register a work procedure for a given application, use . XtWorkProcId XtAppAddWorkProc XtAppContext app_context XtWorkProc proc XtPointer client_data app_context Specifies the application context that identifies the application. proc Specifies the procedure to be called when the application is idle. client_data Specifies the argument passed to the specified procedure when it is called. The function adds the specified work procedure for the application identified by app_context and returns an opaque unique identifier for this work procedure. Multiple work procedures can be registered, and the most recently added one is always the one that is called. However, if a work procedure adds another work procedure, the newly added one has lower priority than the current one. To remove a work procedure, either return True from the procedure when it is called or use outside of the procedure. void XtRemoveWorkProc XtWorkProcId id id Specifies which work procedure to remove. The function explicitly removes the specified background work procedure. X Event Filters The event manager provides filters that can be applied to specific X events. The filters, which screen out events that are redundant or are temporarily unwanted, handle pointer motion compression, enter/leave compression, and exposure compression. Pointer Motion Compression Widgets can have a hard time keeping up with a rapid stream of pointer motion events. Furthermore, they usually do not care about every motion event. To throw out redundant motion events, the widget class field compress_motion should be True. When a request for an event would return a motion event, the Intrinsics check if there are any other motion events for the same widget immediately following the current one and, if so, skip all but the last of them. Enter/Leave Compression To throw out pairs of enter and leave events that have no intervening events, as can happen when the user moves the pointer across a widget without stopping in it, the widget class field compress_enterleave should be True. These enter and leave events are not delivered to the client if they are found together in the input queue. Exposure Compression Many widgets prefer to process a series of exposure events as a single expose region rather than as individual rectangles. Widgets with complex displays might use the expose region as a clip list in a graphics context, and widgets with simple displays might ignore the region entirely and redisplay their whole window or might get the bounding box from the region and redisplay only that rectangle. In either case, these widgets do not care about getting partial exposure events. The compress_exposure field in the widget class structure specifies the type and number of exposure events that are dispatched to the widget's expose procedure. This field must be initialized to one of the following values: #define XtExposeNoCompress ((XtEnum)False) #define XtExposeCompressSeries ((XtEnum)True) #define XtExposeCompressMultiple <implementation-defined> #define XtExposeCompressMaximal <implementation-defined> optionally ORed with any combination of the following flags (all with implementation-defined values): XtExposeGraphicsExpose, XtExposeGraphicsExposeMerged, XtExposeNoExpose, and XtExposeNoRegion. If the compress_exposure field in the widget class structure does not specify XtExposeNoCompress, the event manager calls the widget's expose procedure only once for a series of exposure events. In this case, all Expose or GraphicsExpose events are accumulated into a region. When the final event is received, the event manager replaces the rectangle in the event with the bounding box for the region and calls the widget's expose procedure, passing the modified exposure event and (unless XtExposeNoRegion is specified) the region. For more information on regions, see Section 16.5 in Xlib — C Language X Interface..) The values have the following interpretation: XtExposeNoCompress No exposure compression is performed; every selected event is individually dispatched to the expose procedure with a region argument of NULL. XtExposeCompressSeries Each series of exposure events is coalesced into a single event, which is dispatched when an exposure event with count equal to zero is reached. XtExposeCompressMultiple Consecutive series of exposure events are coalesced into a single event, which is dispatched when an exposure event with count equal to zero is reached and either the event queue is empty or the next event is not an exposure event for the same widget. XtExposeCompressMaximal All expose series currently in the queue for the widget are coalesced into a single event without regard to intervening nonexposure events. If a partial series is in the end of the queue, the Intrinsics will block until the end of the series is received. The additional flags have the following meaning: XtExposeGraphicsExpose Specifies that GraphicsExpose events are also to be dispatched to the expose procedure. GraphicsExpose events are compressed, if specified, in the same manner as Expose events. XtExposeGraphicsExposeMerged Specifies in the case of XtExposeCompressMultiple and XtExposeCompressMaximal that series of GraphicsExpose and Expose events are to be compressed together, with the final event type determining the type of the event passed to the expose procedure. If this flag is not set, then only series of the same event type as the event at the head of the queue are coalesced. This flag also implies XtExposeGraphicsExpose. XtExposeNoExpose Specifies that NoExpose events are also to be dispatched to the expose procedure. NoExpose events are never coalesced with other exposure events or with each other. XtExposeNoRegion Specifies that the final region argument passed to the expose procedure is NULL. The rectangle in the event will still contain bounding box information for the entire series of compressed exposure events. This option saves processing time when the region is not needed by the widget. Widget Exposure and Visibility Every primitive widget and some composite widgets display data on the screen by means of direct Xlib calls. Widgets cannot simply write to the screen and forget what they have done. They must keep enough state to redisplay the window or parts of it if a portion is obscured and then reexposed. Redisplay of a Widget: The expose Procedure The expose procedure pointer in a widget class is of type . typedef void (*XtExposeProc) Widget w XEvent *event Region region w Specifies the widget instance requiring redisplay. event Specifies the exposure event giving the rectangle requiring redisplay. region Specifies the union of all rectangles in this exposure sequence. The redisplay of a widget upon exposure is the responsibility of the expose procedure in the widget's class record. If a widget has no display semantics, it can specify NULL for the expose field. Many composite widgets serve only as containers for their children and have no expose procedure. If the expose procedure is NULL, fills in a default bit gravity of NorthWestGravity before it calls the widget's realize procedure. If the widget's compress_exposure class field specifies XtExposeNoCompress or XtExposeNoRegion, or if the event type is NoExpose (see ), region is NULL. If XtExposeNoCompress is not specified and the event type is not NoExpose, the event is the final event in the compressed series but x, y, width, and height contain the bounding box for all the compressed events. The region is created and destroyed by the Intrinsics, but the widget is permitted to modify the region contents. A small simple widget (for example, Label) can ignore the bounding box information in the event and redisplay the entire window. A more complicated widget (for example, Text) can use the bounding box information to minimize the amount of calculation and redisplay it does. A very complex widget uses the region as a clip list in a GC and ignores the event information. The expose procedure is not chained and is therefore responsible for exposure of all superclass data as well as its own. However, it often is possible to anticipate the display needs of several levels of subclassing. For example, rather than implement separate display procedures for the widgets Label, Pushbutton, and Toggle, you could write a single display routine in Label that uses display state fields like Boolean invert; Boolean highlight; Dimension highlight_width; Label would have invert and highlight always False and highlight_width zero. Pushbutton would dynamically set highlight and highlight_width, but it would leave invert always False. Finally, Toggle would dynamically set all three. In this case, the expose procedures for Pushbutton and Toggle inherit their superclass's expose procedure; see . Widget Visibility Some widgets may use substantial computing resources to produce the data they will display. However, this effort is wasted if the widget is not actually visible on the screen, that is, if the widget is obscured by another application or is iconified. The visible field in the core widget structure provides a hint to the widget that it need not compute display data. This field is guaranteed to be True by the time an exposure event is processed if any part of the widget is visible, but is False if the widget is fully obscured. Widgets can use or ignore the visible hint. If they ignore it, they should have visible_interest in their widget class record set False. In such cases, the visible field is initialized True and never changes. If visible_interest is True, the event manager asks for VisibilityNotify events for the widget and sets visible to True on VisibilityUnobscured or VisibilityPartiallyObscured events and False on VisibilityFullyObscured events. X Event Handlers Event handlers are procedures called when specified events occur in a widget. Most widgets need not use event handlers explicitly. Instead, they use the Intrinsics translation manager. Event handler procedure pointers are of the type . typedef void (*XtEventHandler) Widget w XtPointer client_data XEvent *event Boolean *continue_to_dispatch w Specifies the widget for which the event arrived. client_data Specifies any client-specific information registered with the event handler. event Specifies the triggering event. continue_to_dispatch Specifies whether the remaining event handlers registered for the current event should be called. After receiving an event and before calling any event handlers, the Boolean pointed to by continue_to_dispatch is initialized to True. When an event handler is called, it may decide that further processing of the event is not desirable and may store False in this Boolean, in which case any handlers remaining to be called for the event are ignored. The circumstances under which the Intrinsics may add event handlers to a widget are currently implementation-dependent. Clients must therefore be aware that storing False into the continue_to_dispatch argument can lead to portability problems. Event Handlers That Select Events To register an event handler procedure with the dispatch mechanism, use . void XtAddEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data w Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to call this procedure. nonmaskable Specifies whether this procedure should be called on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be called. client_data Specifies additional data to be passed to the event handler. The function registers a procedure with the dispatch mechanism that is to be called when an event that matches the mask occurs on the specified widget. Each widget has a single registered event handler list, which will contain any procedure/client_data pair exactly once regardless of the manner in which it is registered. If the procedure is already registered with the same client_data value, the specified mask augments the existing mask. If the widget is realized, calls XSelectInput, if necessary. The order in which this procedure is called relative to other handlers registered for the same event is not defined. To remove a previously registered event handler, use . void XtRemoveEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data w Specifies the widget for which this procedure is registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to unregister this procedure. nonmaskable Specifies whether this procedure should be removed on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be removed. client_data Specifies the registered client data. The function unregisters an event handler registered with or for the specified events. The request is ignored if client_data does not match the value given when the handler was registered. If the widget is realized and no other event handler requires the event, calls XSelectInput. If the specified procedure has not been registered or if it has been registered with a different value of client_data, returns without reporting an error. To stop a procedure registered with or from receiving all selected events, call with an event_mask of XtAllEvents and nonmaskable True. The procedure will continue to receive any events that have been specified in calls to or . To register an event handler procedure that receives events before or after all previously registered event handlers, use . typedef enum {XtListHead, XtListTail} XtListPosition; void XtInsertEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data XtListPosition position w Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to call this procedure. nonmaskable Specifies whether this procedure should be called on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be called. client_data Specifies additional data to be passed to the client's event handler. position Specifies when the event handler is to be called relative to other previously registered handlers. is identical to with the additional position argument. If position is XtListHead, the event handler is registered so that it is called before any event handlers that were previously registered for the same widget. If position is XtListTail, the event handler is registered to be called after any previously registered event handlers. If the procedure is already registered with the same client_data value, the specified mask augments the existing mask and the procedure is repositioned in the list. Event Handlers That Do Not Select Events On occasion, clients need to register an event handler procedure with the dispatch mechanism without explicitly causing the X server to select for that event. To do this, use . void XtAddRawEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data w Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to call this procedure. nonmaskable Specifies whether this procedure should be called on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be called. client_data Specifies additional data to be passed to the client's event handler. The function is similar to except that it does not affect the widget's event mask and never causes an XSelectInput for its events. Note that the widget might already have those mask bits set because of other nonraw event handlers registered on it. If the procedure is already registered with the same client_data, the specified mask augments the existing mask. The order in which this procedure is called relative to other handlers registered for the same event is not defined. To remove a previously registered raw event handler, use . void XtRemoveRawEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data w Specifies the widget for which this procedure is registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to unregister this procedure. nonmaskable Specifies whether this procedure should be removed on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be registered. client_data Specifies the registered client data. The function unregisters an event handler registered with or for the specified events without changing the window event mask. The request is ignored if client_data does not match the value given when the handler was registered. If the specified procedure has not been registered or if it has been registered with a different value of client_data, returns without reporting an error. To stop a procedure registered with or from receiving all nonselected events, call with an event_mask of XtAllEvents and nonmaskable True. The procedure will continue to receive any events that have been specified in calls to or . To register an event handler procedure that receives events before or after all previously registered event handlers without selecting for the events, use . void XtInsertRawEventHandler Widget w EventMask event_mask Boolean nonmaskable XtEventHandler proc XtPointer client_data XtListPosition position w Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof. event_mask Specifies the event mask for which to call this procedure. nonmaskable Specifies whether this procedure should be called on the nonmaskable events ( GraphicsExpose, NoExpose, SelectionClear, SelectionRequest, SelectionNotify, ClientMessage, and MappingNotify ). proc Specifies the procedure to be registered. client_data Specifies additional data to be passed to the client's event handler. position Specifies when the event handler is to be called relative to other previously registered handlers. The function is similar to except that it does not modify the widget's event mask and never causes an XSelectInput for the specified events. If the procedure is already registered with the same client_data value, the specified mask augments the existing mask and the procedure is repositioned in the list. Current Event Mask To retrieve the event mask for a given widget, use . EventMask XtBuildEventMask Widget w w Specifies the widget. Must be of class Core or any subclass thereof. The function returns the event mask representing the logical OR of all event masks for event handlers registered on the widget with and and all event translations, including accelerators, installed on the widget. This is the same event mask stored into the XSetWindowAttributes structure by and sent to the server when event handlers and translations are installed or removed on the realized widget. Event Handlers for X11 Protocol Extensions To register an event handler procedure with the Intrinsics dispatch mechanism according to an event type, use . void XtInsertEventTypeHandler Widget widget int event_type XtPointer select_data XtEventHandler proc XtPointer client_data XtListPosition position widget Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof. event_type Specifies the event type for which to call this event handler. select_data Specifies data used to request events of the specified type from the server, or NULL. proc Specifies the event handler to be called. client_data Specifies additional data to be passed to the event handler. position Specifies when the event handler is to be called relative to other previously registered handlers. registers a procedure with the dispatch mechanism that is to be called when an event that matches the specified event_type is dispatched to the specified widget. If event_type specifies one of the core X protocol events, then select_data must be a pointer to a value of type EventMask, indicating the event mask to be used to select for the desired event. This event mask is included in the value returned by . If the widget is realized, calls XSelectInput if necessary. Specifying NULL for select_data is equivalent to specifying a pointer to an event mask containing 0. This is similar to the function. If event_type specifies an extension event type, then the semantics of the data pointed to by select_data are defined by the extension selector registered for the specified event type. In either case the Intrinsics are not required to copy the data pointed to by select_data, so the caller must ensure that it remains valid as long as the event handler remains registered with this value of select_data. The position argument allows the client to control the order of invocation of event handlers registered for the same event type. If the client does not care about the order, it should normally specify XtListTail, which registers this event handler after any previously registered handlers for this event type. Each widget has a single registered event handler list, which will contain any procedure/client_data pair exactly once if it is registered with , regardless of the manner in which it is registered and regardless of the value(s) of select_data. If the procedure is already registered with the same client_data value, the specified mask augments the existing mask and the procedure is repositioned in the list. To remove an event handler registered with , use . void XtRemoveEventTypeHandler Widget widget int event_type XtPointer select_data XtEventHandler proc XtPointer client_data widget Specifies the widget for which the event handler was registered. Must be of class Core or any subclass thereof. event_type Specifies the event type for which the handler was registered. select_data Specifies data used to deselect events of the specified type from the server, or NULL. proc Specifies the event handler to be removed. client_data Specifies the additional client data with which the procedure was registered. The function unregisters an event handler registered with for the specified event type. The request is ignored if client_data does not match the value given when the handler was registered. If event_type specifies one of the core X protocol events, select_data must be a pointer to a value of type EventMask, indicating the event mask to be used to deselect for the appropriate event. If the widget is realized, calls XSelectInput if necessary. Specifying NULL for select_data is equivalent to specifying a pointer to an event mask containing 0. This is similar to the function. If event_type specifies an extension event type, then the semantics of the data pointed to by select_data are defined by the extension selector registered for the specified event type. To register a procedure to select extension events for a widget, use . void XtRegisterExtensionSelector Display *display int min_event_type int max_event_type XtExtensionSelectProc proc XtPointer client_data display Specifies the display for which the extension selector is to be registered. min_event_type max_event_type Specifies the range of event types for the extension. proc Specifies the extension selector procedure. client_data Specifies additional data to be passed to the extension selector. The function registers a procedure to arrange for the delivery of extension events to widgets. If min_event_type and max_event_type match the parameters to a previous call to for the same display, then proc and client_data replace the previously registered values. If the range specified by min_event_type and max_event_type overlaps the range of the parameters to a previous call for the same display in any other way, an error results. When a widget is realized, after the core.realize method is called, the Intrinsics check to see if any event handler specifies an event type within the range of a registered extension selector. If so, the Intrinsics call each such selector. If an event type handler is added or removed, the Intrinsics check to see if the event type falls within the range of a registered extension selector, and if it does, calls the selector. In either case the Intrinsics pass a list of all the widget's event types that are within the selector's range. The corresponding select data are also passed. The selector is responsible for enabling the delivery of extension events required by the widget. An extension selector is of type . typedef void (*XtExtensionSelectProc) Widget widget int *event_types XtPointer *select_data int count XtPointer client_data widget Specifies the widget that is being realized or is having an event handler added or removed. event_types Specifies a list of event types that the widget has registered event handlers for. select_data Specifies a list of the select_data parameters specified in . count Specifies the number of entries in the event_types and select_data lists. client_data Specifies the additional client data with which the procedure was registered. The event_types and select_data lists will always have the same number of elements, specified by count. Each event type/select data pair represents one call to . To register a procedure to dispatch events of a specific type within , use . XtEventDispatchProc XtSetEventDispatcher Display *display int event_type XtEventDispatchProc proc display Specifies the display for which the event dispatcher is to be registered. event_type Specifies the event type for which the dispatcher should be invoked. proc Specifies the event dispatcher procedure. The function registers the event dispatcher procedure specified by proc for events with the type event_type. The previously registered dispatcher (or the default dispatcher if there was no previously registered dispatcher) is returned. If proc is NULL, the default procedure is restored for the specified type. In the future, when is called with an event type of event_type, the specified proc (or the default dispatcher) is invoked to determine a widget to which to dispatch the event. The default dispatcher handles the Intrinsics modal cascade and keyboard focus mechanisms, handles the semantics of compress_enterleave and compress_motion, and discards all extension events. An event dispatcher procedure pointer is of type . typedef Boolean (*XtEventDispatchProc) XEvent *event event Passes the event to be dispatched. The event dispatcher procedure should determine whether this event is of a type that should be dispatched to a widget. If the event should be dispatched to a widget, the event dispatcher procedure should determine the appropriate widget to receive the event, call XFilterEvent with the window of this widget, or None if the event is to be discarded, and if XFilterEvent returns False, dispatch the event to the widget using . The procedure should return True if either XFilterEvent or returned True and False otherwise. If the event should not be dispatched to a widget, the event dispatcher procedure should attempt to dispatch the event elsewhere as appropriate and return True if it successfully dispatched the event and False otherwise. Some dispatchers for extension events may wish to forward events according to the Intrinsics' keyboard focus mechanism. To determine which widget is the end result of keyboard event forwarding, use . Widget XtGetKeyboardFocusWidget Widget widget widget Specifies the widget to get forwarding information for. The function returns the widget that would be the end result of keyboard event forwarding for a keyboard event for the specified widget. To dispatch an event to a specified widget, use . Boolean XtDispatchEventToWidget Widget widget XEvent *event widget Specifies the widget to which to dispatch the event. event Specifies a pointer to the event to be dispatched. The function scans the list of registered event handlers for the specified widget and calls each handler that has been registered for the specified event type, subject to the continue_to_dispatch value returned by each handler. The Intrinsics behave as if event handlers were registered at the head of the list for Expose, NoExpose, GraphicsExpose, and VisibilityNotify events to invoke the widget's expose procedure according to the exposure compression rules and to update the widget's visible field if visible_interest is True. These internal event handlers never set continue_to_dispatch to False. returns True if any event handler was called and False otherwise. Using the Intrinsics in a Multi-Threaded Environment The Intrinsics may be used in environments that offer multiple threads of execution within the context of a single process. A multi-threaded application using the Intrinsics must explicitly initialize the toolkit for mutually exclusive access by calling . Initializing a Multi-Threaded Intrinsics Application To test and initialize Intrinsics support for mutually exclusive thread access, call . Boolean XtToolkitThreadInitialize returns True if the Intrinsics support mutually exclusive thread access, otherwise it returns False. must be called before , , , or XtSetLanguageProc is called. may be called more than once; however, the application writer must ensure that it is not called simultaneously by two or more threads. Locking X Toolkit Data Structures The Intrinsics employs two levels of locking: application context and process. Locking an application context ensures mutually exclusive access by a thread to the state associated with the application context, including all displays and widgets associated with it. Locking a process ensures mutually exclusive access by a thread to Intrinsics process global data. A client may acquire a lock multiple times and the effect is cumulative. The client must ensure that the lock is released an equal number of times in order for the lock to be acquired by another thread. Most application writers will have little need to use locking as the Intrinsics performs the necessary locking internally. Resource converters are an exception. They require the application context or process to be locked before the application can safely call them directly, for example: ... XtAppLock(app_context); XtCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret); XtAppUnlock(app_context); ... When the application relies upon or a converter to provide the storage for the results of a conversion, the application should acquire the process lock before calling out and hold the lock until the results have been copied. Application writers who write their own utility functions, such as one which retrieves the being_destroyed field from a widget instance, must lock the application context before accessing widget internal data. For example: #include <X11/CoreP.h> Boolean BeingDestroyed (widget) Widget widget; { Boolean ret; XtAppLock(XtWidgetToApplicationContext(widget)); ret = widget->core.being_destroyed; XtAppUnlock(XtWidgetToApplicationContext(widget)); return ret; } A client that wishes to atomically call two or more Intrinsics functions must lock the application context. For example: ... XtAppLock(XtWidgetToApplicationContext(widget)); XtUnmanageChild (widget1); XtManageChild (widget2); XtAppUnlock(XtWidgetToApplicationContext(widget)); ... Locking the Application Context To ensure mutual exclusion of application context, display, or widget internal state, use XtAppLock. void XtAppLock XtAppContext app_context app_context Specifies the application context to lock. blocks until it is able to acquire the lock. Locking the application context also ensures that only the thread holding the lock makes Xlib calls from within Xt. An application that makes its own direct Xlib calls must either lock the application context around every call or enable thread locking in Xlib. To unlock a locked application context, use XtAppUnlock. void XtAppUnlock XtAppContext app_context app_context Specifies the application context that was previously locked. Locking the Process To ensure mutual exclusion of X Toolkit process global data, a widget writer must use XtProcessLock. void XtProcessLock blocks until it is able to acquire the lock. Widget writers may use XtProcessLock to guarantee mutually exclusive access to widget static data. To unlock a locked process, use . void XtProcessUnlock To lock both an application context and the process at the same time, call first and then . To release both locks, call first and then . The order is important to avoid deadlock. Event Management in a Multi-Threaded Environment In a nonthreaded environment an application writer could reasonably assume that it is safe to exit the application from a quit callback. This assumption may no longer hold true in a multi-threaded environment; therefore it is desirable to provide a mechanism to terminate an event-processing loop without necessarily terminating its thread. To indicate that the event loop should terminate after the current event dispatch has completed, use . void XtAppSetExitFlag XtAppContext app_context app_context Specifies the application context. tests the value of the flag and will return if the flag is True. Application writers who implement their own main loop may test the value of the exit flag with . Boolean XtAppGetExitFlag XtAppContext app_context app_context Specifies the application context. will normally return False, indicating that event processing may continue. When returns True, the loop must terminate and return to the caller, which might then destroy the application context. Application writers should be aware that, if a thread is blocked in , , or and another thread in the same application context opens a new display, adds an alternate input, or a timeout, any new source(s) will not normally be "noticed" by the blocked thread. Any new sources are "noticed" the next time one of these functions is called. The Intrinsics manage access to events on a last-in, first-out basis. If multiple threads in the same application context block in , , or , the last thread to call one of these functions is the first thread to return. nsics in a Multi-Threaded Environment The Intrinsics may be used in environments that offer multiple threads of execution within the context of a single process. A multi-threaded application using the Intrinsics must explicitly initialize the toolkit for mutually exclusive acclibXt-1.1.5/specs/CH10.xml000064401431060000012000002040601252061032400153500ustar00alancstaff00002660200006 Translation Management Except under unusual circumstances, widgets do not hardwire the mapping of user events into widget behavior by using the event manager. Instead, they provide a default mapping of events into behavior that you can override. The translation manager provides an interface to specify and manage the mapping of X event sequences into widget-supplied functionality, for example, calling procedure Abc when the y key is pressed. The translation manager uses two kinds of tables to perform translations: The action tables, which are in the widget class structure, specify the mapping of externally available procedure name strings to the corresponding procedure implemented by the widget class. A translation table, which is in the widget class structure, specifies the mapping of event sequences to procedure name strings. You can override the translation table in the class structure for a specific widget instance by supplying a different translation table for the widget instance. The resources XtNtranslations and XtNbaseTranslations are used to modify the class default translation table; see . Action Tables All widget class records contain an action table, an array of XtActionsRec entries. In addition, an application can register its own action tables with the translation manager so that the translation tables it provides to widget instances can access application functionality directly. The translation action procedure pointer is of type . typedef void (*XtActionProc) Widget w XEvent *event String *params Cardinal *num_params w Specifies the widget that caused the action to be called. event Specifies the event that caused the action to be called. If the action is called after a sequence of events, then the last event in the sequence is used. params Specifies a pointer to the list of strings that were specified in the translation table as arguments to the action, or NULL. num_params Specifies the number of entries in params. typedef struct _XtActionsRec { String string; XtActionProc proc; } XtActionsRec, *XtActionList; The string field is the name used in translation tables to access the procedure. The proc field is a pointer to a procedure that implements the functionality. When the action list is specified as the CoreClassPart actions field, the string pointed to by string must be permanently allocated prior to or during the execution of the class initialization procedure and must not be subsequently deallocated. Action procedures should not assume that the widget in which they are invoked is realized; an accelerator specification can cause an action procedure to be called for a widget that does not yet have a window. Widget writers should also note which of a widget's callback lists are invoked from action procedures and warn clients not to assume the widget is realized in those callbacks. For example, a Pushbutton widget has procedures to take the following actions: Set the button to indicate it is activated. Unset the button back to its normal mode. Highlight the button borders. Unhighlight the button borders. Notify any callbacks that the button has been activated. The action table for the Pushbutton widget class makes these functions available to translation tables written for Pushbutton or any subclass. The string entry is the name used in translation tables. The procedure entry (usually spelled identically to the string) is the name of the C procedure that implements that function: XtActionsRec actionTable[] = { {"Set", Set}, {"Unset", Unset}, {"Highlight", Highlight}, {"Unhighlight", Unhighlight} {"Notify", Notify}, }; The Intrinsics reserve all action names and parameters starting with the characters ``Xt'' for future standard enhancements. Users, applications, and widgets should not declare action names or pass parameters starting with these characters except to invoke specified built-in Intrinsics functions. Action Table Registration The actions and num_actions fields of CoreClassPart specify the actions implemented by a widget class. These are automatically registered with the Intrinsics when the class is initialized and must be allocated in writable storage prior to Core class_part initialization, and never deallocated. To save memory and optimize access, the Intrinsics may overwrite the storage in order to compile the list into an internal representation. To declare an action table within an application and register it with the translation manager, use . void XtAppAddActions XtAppContext app_context XtActionList actions Cardinal num_actions app_context Specifies the application context. actions Specifies the action table to register. num_actions Specifies the number of entries in this action table. If more than one action is registered with the same name, the most recently registered action is used. If duplicate actions exist in an action table, the first is used. The Intrinsics register an action table containing and as part of . Action Names to Procedure Translations The translation manager uses a simple algorithm to resolve the name of a procedure specified in a translation table into the actual procedure specified in an action table. When the widget is realized, the translation manager performs a search for the name in the following tables, in order: The widget's class and all superclass action tables, in subclass-to-superclass order. The parent's class and all superclass action tables, in subclass-to-superclass order, then on up the ancestor tree. The action tables registered with and from the most recently added table to the oldest table. As soon as it finds a name, the translation manager stops the search. If it cannot find a name, the translation manager generates a warning message. Action Hook Registration An application can specify a procedure that will be called just before every action routine is dispatched by the translation manager. To do so, the application supplies a procedure pointer of type . typedef void (*XtActionHookProc) Widget w XtPointer client_data String action_name XEvent* event String* params Cardinal* num_params w Specifies the widget whose action is about to be dispatched. client_data Specifies the application-specific closure that was passed to XtAppAddActionHook. action_name Specifies the name of the action to be dispatched. event Specifies the event argument that will be passed to the action routine. params Specifies the action parameters that will be passed to the action routine. num_params Specifies the number of entries in params. Action hooks should not modify any of the data pointed to by the arguments other than the client_data argument. To add an action hook, use . XtActionHookId XtAppAddActionHook XtAppContext app XtActionHookProc proc XtPointer client_data app Specifies the application context. proc Specifies the action hook procedure. client_data Specifies application-specific data to be passed to the action hook. adds the specified procedure to the front of a list maintained in the application context. In the future, when an action routine is about to be invoked for any widget in this application context, either through the translation manager or via , the action hook procedures will be called in reverse order of registration just prior to invoking the action routine. Action hook procedures are removed automatically and the XtActionHookId is destroyed when the application context in which they were added is destroyed. To remove an action hook procedure without destroying the application context, use . void XtRemoveActionHook XtActionHookId id id Specifies the action hook id returned by . removes the specified action hook procedure from the list in which it was registered. Translation Tables All widget instance records contain a translation table, which is a resource with a default value specified elsewhere in the class record. A translation table specifies what action procedures are invoked for an event or a sequence of events. A translation table is a string containing a list of translations from an event sequence into one or more action procedure calls. The translations are separated from one another by newline characters (ASCII LF). The complete syntax of translation tables is specified in Appendix B. As an example, the default behavior of Pushbutton is Highlight on enter window. Unhighlight on exit window. Invert on left button down. Call callbacks and reinvert on left button up. The following illustrates Pushbutton's default translation table: static String defaultTranslations = "<EnterWindow>: Highlight()\\n\\ <LeaveWindow>: Unhighlight()\\n\\ <Btn1Down>: Set()\\n\\ <Btn1Up>: Notify() Unset()"; The tm_table field of the CoreClassPart should be filled in at class initialization time with the string containing the class's default translations. If a class wants to inherit its superclass's translations, it can store the special value XtInheritTranslations into tm_table. In Core's class part initialization procedure, the Intrinsics compile this translation table into an efficient internal form. Then, at widget creation time, this default translation table is combined with the XtNtranslations and XtNbaseTranslations resources; see . The resource conversion mechanism automatically compiles string translation tables that are specified in the resource database. If a client uses translation tables that are not retrieved via a resource conversion, it must compile them itself using . The Intrinsics use the compiled form of the translation table to register the necessary events with the event manager. Widgets need do nothing other than specify the action and translation tables for events to be processed by the translation manager. Event Sequences An event sequence is a comma-separated list of X event descriptions that describes a specific sequence of X events to map to a set of program actions. Each X event description consists of three parts: The X event type, a prefix consisting of the X modifier bits, and an event-specific suffix. Various abbreviations are supported to make translation tables easier to read. The events must match incoming events in left-to-right order to trigger the action sequence. Action Sequences Action sequences specify what program or widget actions to take in response to incoming X events. An action sequence consists of space-separated action procedure call specifications. Each action procedure call consists of the name of an action procedure and a parenthesized list of zero or more comma-separated string parameters to pass to that procedure. The actions are invoked in left-to-right order as specified in the action sequence. Multi-Click Time Translation table entries may specify actions that are taken when two or more identical events occur consecutively within a short time interval, called the multi-click time. The multi-click time value may be specified as an application resource with name ``multiClickTime'' and class ``MultiClickTime'' and may also be modified dynamically by the application. The multi-click time is unique for each Display value and is retrieved from the resource database by . If no value is specified, the initial value is 200 milliseconds. To set the multi-click time dynamically, use . void XtSetMultiClickTime Display *display int time display Specifies the display connection. time Specifies the multi-click time in milliseconds. sets the time interval used by the translation manager to determine when multiple events are interpreted as a repeated event. When a repeat count is specified in a translation entry, the interval between the timestamps in each pair of repeated events (e.g., between two ButtonPress events) must be less than the multi-click time in order for the translation actions to be taken. To read the multi-click time, use . int XtGetMultiClickTime Display *display display Specifies the display connection. returns the time in milliseconds that the translation manager uses to determine if multiple events are to be interpreted as a repeated event for purposes of matching a translation entry containing a repeat count. Translation Table Management Sometimes an application needs to merge its own translations with a widget's translations. For example, a window manager provides functions to move a window. The window manager wishes to bind this operation to a specific pointer button in the title bar without the possibility of user override and bind it to other buttons that may be overridden by the user. To accomplish this, the window manager should first create the title bar and then should merge the two translation tables into the title bar's translations. One translation table contains the translations that the window manager wants only if the user has not specified a translation for a particular event or event sequence (i.e., those that may be overridden). The other translation table contains the translations that the window manager wants regardless of what the user has specified. Three Intrinsics functions support this merging: XtParseTranslationTable Compiles a translation table. XtAugmentTranslations Merges a compiled translation table into a widget's compiled translation table, ignoring any new translations that conflict with existing translations. XtOverrideTranslations Merges a compiled translation table into a widget's compiled translation table, replacing any existing translations that conflict with new translations. To compile a translation table, use . XtTranslations XtParseTranslationTable String table table Specifies the translation table to compile. The function compiles the translation table, provided in the format given in Appendix B, into an opaque internal representation of type XtTranslations. Note that if an empty translation table is required for any purpose, one can be obtained by calling and passing an empty string. To merge additional translations into an existing translation table, use . void XtAugmentTranslations Widget w XtTranslations translations w Specifies the widget into which the new translations are to be merged. Must be of class Core or any subclass thereof. translations Specifies the compiled translation table to merge in. The function merges the new translations into the existing widget translations, ignoring any #replace, #augment, or #override directive that may have been specified in the translation string. The translation table specified by translations is not altered by this process. logically appends the string representation of the new translations to the string representation of the widget's current translations and reparses the result with no warning messages about duplicate left-hand sides, then stores the result back into the widget instance; i.e., if the new translations contain an event or event sequence that already exists in the widget's translations, the new translation is ignored. To overwrite existing translations with new translations, use . void XtOverrideTranslations Widget w XtTranslations translations w Specifies the widget into which the new translations are to be merged. Must be of class Core or any subclass thereof. translations Specifies the compiled translation table to merge in. The function merges the new translations into the existing widget translations, ignoring any #replace, #augment, or #override directive that may have been specified in the translation string. The translation table specified by translations is not altered by this process. logically appends the string representation of the widget's current translations to the string representation of the new translations and reparses the result with no warning messages about duplicate left-hand sides, then stores the result back into the widget instance; i.e., if the new translations contain an event or event sequence that already exists in the widget's translations, the new translation overrides the widget's translation. To replace a widget's translations completely, use on the XtNtranslations resource and specify a compiled translation table as the value. To make it possible for users to easily modify translation tables in their resource files, the string-to-translation-table resource type converter allows the string to specify whether the table should replace, augment, or override any existing translation table in the widget. To specify this, a pound sign (#) is given as the first character of the table followed by one of the keywords ``replace'', ``augment'', or ``override'' to indicate whether to replace, augment, or override the existing table. The replace or merge operation is performed during the Core instance initialization. Each merge operation produces a new translation resource value; if the original tables were shared by other widgets, they are unaffected. If no directive is specified, ``#replace'' is assumed. At instance initialization the XtNtranslations resource is first fetched. Then, if it was not specified or did not contain ``#replace'', the resource database is searched for the resource XtNbaseTranslations. If XtNbaseTranslations is found, it is merged into the widget class translation table. Then the widget translations field is merged into the result or into the class translation table if XtNbaseTranslations was not found. This final table is then stored into the widget translations field. If the XtNtranslations resource specified ``#replace'', no merge is done. If neither XtNbaseTranslations or XtNtranslations are specified, the class translation table is copied into the widget instance. To completely remove existing translations, use . void XtUninstallTranslations Widget w w Specifies the widget from which the translations are to be removed. Must be of class Core or any subclass thereof. The function causes the entire translation table for the widget to be removed. Using Accelerators It is often desirable to be able to bind events in one widget to actions in another. In particular, it is often useful to be able to invoke menu actions from the keyboard. The Intrinsics provide a facility, called accelerators, that lets you accomplish this. An accelerator table is a translation table that is bound with its actions in the context of a particular widget, the source widget. The accelerator table can then be installed on one or more destination widgets. When an event sequence in the destination widget would cause an accelerator action to be taken, and if the source widget is sensitive, the actions are executed as though triggered by the same event sequence in the accelerator source widget. The event is passed to the action procedure without modification. The action procedures used within accelerators must not assume that the source widget is realized nor that any fields of the event are in reference to the source widget's window if the widget is realized. Each widget instance contains that widget's exported accelerator table as a resource. Each class of widget exports a method that takes a displayable string representation of the accelerators so that widgets can display their current accelerators. The representation is the accelerator table in canonical translation table form (see Appendix B). The display_accelerator procedure pointer is of type . typedef void (*XtStringProc) Widget w String string w Specifies the source widget that supplied the accelerators. string Specifies the string representation of the accelerators for this widget. Accelerators can be specified in resource files, and the string representation is the same as for a translation table. However, the interpretation of the #augment and #override directives applies to what will happen when the accelerator is installed; that is, whether or not the accelerator translations will override the translations in the destination widget. The default is #augment, which means that the accelerator translations have lower priority than the destination translations. The #replace directive is ignored for accelerator tables. To parse an accelerator table, use . XtAccelerators XtParseAcceleratorTable String source source Specifies the accelerator table to compile. The function compiles the accelerator table into an opaque internal representation. The client should set the XtNaccelerators resource of each widget that is to be activated by these translations to the returned value. To install accelerators from a widget on another widget, use . void XtInstallAccelerators Widget destination Widget source destination Specifies the widget on which the accelerators are to be installed. Must be of class Core or any subclass thereof. source Specifies the widget from which the accelerators are to come. Must be of class Core or any subclass thereof. The function installs the accelerators resource value from source onto destination by merging the source accelerators into the destination translations. If the source display_accelerator field is non-NULL, calls it with the source widget and a string representation of the accelerator table, which indicates that its accelerators have been installed and that it should display them appropriately. The string representation of the accelerator table is its canonical translation table representation. As a convenience for installing all accelerators from a widget and all its descendants onto one destination, use . void XtInstallAllAccelerators Widget destination Widget source destination Specifies the widget on which the accelerators are to be installed. Must be of class Core or any subclass thereof. source Specifies the root widget of the widget tree from which the accelerators are to come. Must be of class Core or any subclass thereof. The function recursively descends the widget tree rooted at source and installs the accelerators resource value of each widget encountered onto destination. A common use is to call and pass the application main window as the source. KeyCode-to-KeySym Conversions The translation manager provides support for automatically translating KeyCodes in incoming key events into KeySyms. KeyCode-to-KeySym translator procedure pointers are of type . typedef void (*XtKeyProc) Display *display KeyCode keycode Modifiers modifiers Modifiers *modifiers_return KeySym *keysym_return display Specifies the display that the KeyCode is from. keycode Specifies the KeyCode to translate. modifiers Specifies the modifiers to the KeyCode. modifiers_return Specifies a location in which to store a mask that indicates the subset of all modifiers that are examined by the key translator for the specified keycode. keysym_return Specifies a location in which to store the resulting KeySym. This procedure takes a KeyCode and modifiers and produces a KeySym. For any given key translator function and keyboard encoding, modifiers_return will be a constant per KeyCode that indicates the subset of all modifiers that are examined by the key translator for that KeyCode. The KeyCode-to-KeySym translator procedure must be implemented such that multiple calls with the same display, keycode, and modifiers return the same result until either a new case converter, an , is installed or a MappingNotify event is received. The Intrinsics maintain tables internally to map KeyCodes to KeySyms for each open display. Translator procedures and other clients may share a single copy of this table to perform the same mapping. To return a pointer to the KeySym-to-KeyCode mapping table for a particular display, use . KeySym *XtGetKeysymTable Display *display KeyCode *min_keycode_return int *keysyms_per_keycode_return display Specifies the display whose table is required. min_keycode_return Returns the minimum KeyCode valid for the display. keysyms_per_keycode_return Returns the number of KeySyms stored for each KeyCode. returns a pointer to the Intrinsics' copy of the server's KeyCode-to-KeySym table. This table must not be modified. There are keysyms_per_keycode_return KeySyms associated with each KeyCode, located in the table with indices starting at index (test_keycode - min_keycode_return) * keysyms_per_keycode_return for KeyCode test_keycode. Any entries that have no KeySyms associated with them contain the value NoSymbol. Clients should not cache the KeySym table but should call each time the value is needed, as the table may change prior to dispatching each event. For more information on this table, see Section 12.7 in Xlib — C Language X Interface.. To register a key translator, use . void XtSetKeyTranslator Display *display XtKeyProc proc display Specifies the display from which to translate the events. proc Specifies the procedure to perform key translations. The function sets the specified procedure as the current key translator. The default translator is XtTranslateKey, an that uses the Shift, Lock, numlock, and group modifiers with the interpretations defined in X Window System Protocol, Section 5. It is provided so that new translators can call it to get default KeyCode-to-KeySym translations and so that the default translator can be reinstalled. To invoke the currently registered KeyCode-to-KeySym translator, use . void XtTranslateKeycode Display *display KeyCode keycode Modifiers modifiers Modifiers *modifiers_return KeySym *keysym_return display Specifies the display that the KeyCode is from. keycode Specifies the KeyCode to translate. modifiers Specifies the modifiers to the KeyCode. modifiers_return Returns a mask that indicates the modifiers actually used to generate the KeySym. keysym_return Returns the resulting KeySym. The function passes the specified arguments directly to the currently registered KeyCode-to-KeySym translator. To handle capitalization of nonstandard KeySyms, the Intrinsics allow clients to register case conversion routines. Case converter procedure pointers are of type . typedef void (*XtCaseProc) Display *display KeySym keysym KeySym *lower_return KeySym *upper_return display Specifies the display connection for which the conversion is required. keysym Specifies the KeySym to convert. lower_return Specifies a location into which to store the lowercase equivalent for the KeySym. upper_return Specifies a location into which to store the uppercase equivalent for the KeySym. If there is no case distinction, this procedure should store the KeySym into both return values. To register a case converter, use . void XtRegisterCaseConverter Display *display XtCaseProc proc KeySym start KeySym stop display Specifies the display from which the key events are to come. proc Specifies the to do the conversions. start Specifies the first KeySym for which this converter is valid. stop Specifies the last KeySym for which this converter is valid. The registers the specified case converter. The start and stop arguments provide the inclusive range of KeySyms for which this converter is to be called. The new converter overrides any previous converters for KeySyms in that range. No interface exists to remove converters; you need to register an identity converter. When a new converter is registered, the Intrinsics refresh the keyboard state if necessary. The default converter understands case conversion for all Latin KeySyms defined in X Window System Protocol, Appendix A. To determine uppercase and lowercase equivalents for a KeySym, use . void XtConvertCase Display *display KeySym keysym KeySym *lower_return KeySym *upper_return display Specifies the display that the KeySym came from. keysym Specifies the KeySym to convert. lower_return Returns the lowercase equivalent of the KeySym. upper_return Returns the uppercase equivalent of the KeySym. The function calls the appropriate converter and returns the results. A user-supplied may need to use this function. Obtaining a KeySym in an Action Procedure When an action procedure is invoked on a KeyPress or KeyRelease event, it often has a need to retrieve the KeySym and modifiers corresponding to the event that caused it to be invoked. In order to avoid repeating the processing that was just performed by the Intrinsics to match the translation entry, the KeySym and modifiers are stored for the duration of the action procedure and are made available to the client. To retrieve the KeySym and modifiers that matched the final event specification in the translation table entry, use . KeySym XtGetActionKeysym XEvent *event Modifiers *modifiers_return event Specifies the event pointer passed to the action procedure by the Intrinsics. modifiers_return Returns the modifiers that caused the match, if non-NULL. If is called after an action procedure has been invoked by the Intrinsics and before that action procedure returns, and if the event pointer has the same value as the event pointer passed to that action routine, and if the event is a KeyPress or KeyRelease event, then returns the KeySym that matched the final event specification in the translation table and, if modifiers_return is non-NULL, the modifier state actually used to generate this KeySym; otherwise, if the event is a KeyPress or KeyRelease event, then calls and returns the results; else it returns NoSymbol and does not examine modifiers_return. Note that if an action procedure invoked by the Intrinsics invokes a subsequent action procedure (and so on) via , the nested action procedure may also call to retrieve the Intrinsics' KeySym and modifiers. KeySym-to-KeyCode Conversions To return the list of KeyCodes that map to a particular KeySym in the keyboard mapping table maintained by the Intrinsics, use . void XtKeysymToKeycodeList Display *display KeySym keysym KeyCode **keycodes_return Cardinal *keycount_return display Specifies the display whose table is required. keysym Specifies the KeySym for which to search. keycodes_return Returns a list of KeyCodes that have keysym associated with them, or NULL if keycount_return is 0. keycount_return Returns the number of KeyCodes in the keycode list. The procedure returns all the KeyCodes that have keysym in their entry for the keyboard mapping table associated with display. For each entry in the table, the first four KeySyms (groups 1 and 2) are interpreted as specified by X Window System Protocol, Section 5. If no KeyCodes map to the specified KeySym, keycount_return is zero and *keycodes_return is NULL. The caller should free the storage pointed to by keycodes_return using when it is no longer useful. If the caller needs to examine the KeyCode-to-KeySym table for a particular KeyCode, it should call . Registering Button and Key Grabs for Actions To register button and key grabs for a widget's window according to the event bindings in the widget's translation table, use . void XtRegisterGrabAction XtActionProc action_proc Boolean owner_events unsigned int event_mask int pointer_mode action_proc Specifies the action procedure to search for in translation tables. owner_events event_mask pointer_mode keyboard_mode Specify arguments to or . adds the specified action_proc to a list known to the translation manager. When a widget is realized, or when the translations of a realized widget or the accelerators installed on a realized widget are modified, its translation table and any installed accelerators are scanned for action procedures on this list. If any are invoked on ButtonPress or KeyPress events as the only or final event in a sequence, the Intrinsics will call or for the widget with every button or KeyCode which maps to the event detail field, passing the specified owner_events, event_mask, pointer_mode, and keyboard_mode. For ButtonPress events, the modifiers specified in the grab are determined directly from the translation specification and confine_to and cursor are specified as None. For KeyPress events, if the translation table entry specifies colon (:) in the modifier list, the modifiers are determined by calling the key translator procedure registered for the display and calling for every combination of standard modifiers which map the KeyCode to the specified event detail KeySym, and ORing any modifiers specified in the translation table entry, and event_mask is ignored. If the translation table entry does not specify colon in the modifier list, the modifiers specified in the grab are those specified in the translation table entry only. For both ButtonPress and KeyPress events, don't-care modifiers are ignored unless the translation entry explicitly specifies ``Any'' in the modifiers field. If the specified action_proc is already registered for the calling process, the new values will replace the previously specified values for any widgets that become realized following the call, but existing grabs are not altered on currently realized widgets. When translations or installed accelerators are modified for a realized widget, any previous key or button grabs registered as a result of the old bindings are released if they do not appear in the new bindings and are not explicitly grabbed by the client with or . Invoking Actions Directly Normally action procedures are invoked by the Intrinsics when an event or event sequence arrives for a widget. To invoke an action procedure directly, without generating (or synthesizing) events, use . void XtCallActionProc Widget widget String action XEvent *event String *params Cardinal num_params widget Specifies the widget in which the action is to be invoked. Must be of class Core or any subclass thereof. action Specifies the name of the action routine. event Specifies the contents of the event passed to the action routine. params Specifies the contents of the params passed to the action routine. num_params Specifies the number of entries in params. searches for the named action routine in the same manner and order as translation tables are bound, as described in Section 10.1.2, except that application action tables are searched, if necessary, as of the time of the call to . If found, the action routine is invoked with the specified widget, event pointer, and parameters. It is the responsibility of the caller to ensure that the contents of the event, params, and num_params arguments are appropriate for the specified action routine and, if necessary, that the specified widget is realized or sensitive. If the named action routine cannot be found, generates a warning message and returns. Obtaining a Widget's Action List Occasionally a subclass will require the pointers to one or more of its superclass's action procedures. This would be needed, for example, in order to envelop the superclass's action. To retrieve the list of action procedures registered in the superclass's actions field, use . void XtGetActionList WidgetClass widget_class XtActionList *actions_return Cardinal *num_actions_return widget_class Specifies the widget class whose actions are to be returned. actions_return Returns the action list. num_actions_return Returns the number of action procedures declared by the class. returns the action table defined by the specified widget class. This table does not include actions defined by the superclasses. If widget_class is not initialized, or is not coreWidgetClass or a subclass thereof, or if the class does not define any actions, *actions_return will be NULL and *num_actions_return will be zero. If *actions_return is non-NULL the client is responsible for freeing the table using when it is no longer needed. using when it is no longer useful. If the caller needs to examine the KeyCode-to-KeySym table for a particular KeyCode, it should call . Registering Button and Key Grabs for Actions To register button and key grabs for a widget's window according to thelibXt-1.1.5/specs/CH01.xml000064401431060000012000002561421252061032400153600ustar00alancstaff00002660200006 Intrinsics and Widgets The Intrinsics are a programming library tailored to the special requirements of user interface construction within a network window system, specifically the X Window System. The Intrinsics and a widget set make up an X Toolkit. Intrinsics The Intrinsics provide the base mechanism necessary to build a wide variety of interoperating widget sets and application environments. The Intrinsics are a layer on top of Xlib, the C Library X Interface. They extend the fundamental abstractions provided by the X Window System while still remaining independent of any particular user interface policy or style. The Intrinsics use object-oriented programming techniques to supply a consistent architecture for constructing and composing user interface components, known as widgets. This allows programmers to extend a widget set in new ways, either by deriving new widgets from existing ones (subclassing) or by writing entirely new widgets following the established conventions. When the Intrinsics were first conceived, the root of the object hierarchy was a widget class named Core. In Release 4 of the Intrinsics, three nonwidget superclasses were added above Core. These superclasses are described in . The name of the class now at the root of the Intrinsics class hierarchy is Object. The remainder of this specification refers uniformly to widgets and Core as if they were the base class for all Intrinsics operations. The argument descriptions for each Intrinsics procedure and describe which operations are defined for the nonwidget superclasses of Core. The reader may determine by context whether a specific reference to widget actually means ``widget'' or ``object.'' Languages The Intrinsics are intended to be used for two programming purposes. Programmers writing widgets will be using most of the facilities provided by the Intrinsics to construct user interface components from the simple, such as buttons and scrollbars, to the complex, such as control panels and property sheets. Application programmers will use a much smaller subset of the Intrinsics procedures in combination with one or more sets of widgets to construct and present complete user interfaces on an X display. The Intrinsics programming interfaces primarily intended for application use are designed to be callable from most procedural programming languages. Therefore, most arguments are passed by reference rather than by value. The interfaces primarily intended for widget programmers are expected to be used principally from the C language. In these cases, the usual C programming conventions apply. In this specification, the term client refers to any module, widget, or application that calls an Intrinsics procedure. Applications that use the Intrinsics mechanisms must include the header files <X11/Intrinsic.h> and <X11/StringDefs.h>, or their equivalent, and they may also include <X11/Xatoms.h> and <X11/Shell.h>. In addition, widget implementations should include <X11/IntrinsicP.h> instead of <X11/Intrinsic.h>. The applications must also include the additional header files for each widget class that they are to use (for example, <X11/Xaw/Label.h> or <X11/Xaw/Scrollbar.h>). On a POSIX-based system, the Intrinsics object library file is named libXt.a and is usually referenced as \-lXt when linking the application. Procedures and Macros All functions defined in this specification except those specified below may be implemented as C macros with arguments. C applications may use ``#undef'' to remove a macro definition and ensure that the actual function is referenced. Any such macro will expand to a single expression that has the same precedence as a function call and that evaluates each of its arguments exactly once, fully protected by parentheses, so that arbitrary expressions may be used as arguments. The following symbols are macros that do not have function equivalents and that may expand their arguments in a manner other than that described above: , , , , , and . Widgets The fundamental abstraction and data type of the X Toolkit is the widget, which is a combination of an X window and its associated input and display semantics and which is dynamically allocated and contains state information. Some widgets display information (for example, text or graphics), and others are merely containers for other widgets (for example, a menu box). Some widgets are output-only and do not react to pointer or keyboard input, and others change their display in response to input and can invoke functions that an application has attached to them. Every widget belongs to exactly one widget class, which is statically allocated and initialized and which contains the operations allowable on widgets of that class. Logically, a widget class is the procedures and data associated with all widgets belonging to that class. These procedures and data can be inherited by subclasses. Physically, a widget class is a pointer to a structure. The contents of this structure are constant for all widgets of the widget class but will vary from class to class. (Here, ``constant'' means the class structure is initialized at compile time and never changed, except for a one-time class initialization and in-place compilation of resource lists, which takes place when the first widget of the class or subclass is created.) For further information, see The distribution of the declarations and code for a new widget class among a public .h file for application programmer use, a private .h file for widget programmer use, and the implementation .c file is described in The predefined widget classes adhere to these conventions. A widget instance is composed of two parts: A data structure which contains instance-specific values. A class structure which contains information that is applicable to all widgets of that class. Much of the input/output of a widget (for example, fonts, colors, sizes, or border widths) is customizable by users. This chapter discusses the base widget classes, Core, Composite, and Constraint, and ends with a discussion of widget classing. Core Widgets The Core widget class contains the definitions of fields common to all widgets. All widgets classes are subclasses of the Core class, which is defined by the CoreClassPart and CorePart structures. CoreClassPart Structure All widget classes contain the fields defined in the CoreClassPart structure. typedef struct { WidgetClass superclass; See String class_name; See Cardinal widget_size; See XtProc class_initialize; See XtWidgetClassProc class_part_initialize; See XtEnum class_inited; See XtInitProc initialize; See XtArgsProc initialize_hook; See XtRealizeProc realize; See XtActionList actions; See Cardinal num_actions; See XtResourceList resources; See Cardinal num_resources; See XrmClass xrm_class; Private to resource manager Boolean compress_motion; See XtEnum compress_exposure; See Boolean compress_enterleave; See Boolean visible_interest; See XtWidgetProc destroy; See XtWidgetProc resize; See XtExposeProc expose; See XtSetValuesFunc set_values; See XtArgsFunc set_values_hook; See XtAlmostProc set_values_almost; See XtArgsProc get_values_hook; See XtAcceptFocusProc accept_focus; See XtVersionType version; See XtPointer callback_private; Private to callbacks String tm_table; See XtGeometryHandler query_geometry; See XtStringProc display_accelerator; See XtPointer extension; See } CoreClassPart; All widget classes have the Core class fields as their first component. The prototypical WidgetClass and CoreWidgetClass are defined with only this set of fields. typedef struct { CoreClassPart core_class; } WidgetClassRec, *WidgetClass, CoreClassRec, *CoreWidgetClass; Various routines can cast widget class pointers, as needed, to specific widget class types. The single occurrences of the class record and pointer for creating instances of Core are In IntrinsicP.h: extern WidgetClassRec widgetClassRec; #define coreClassRec widgetClassRec In Intrinsic.h: extern WidgetClass widgetClass, coreWidgetClass; The opaque types Widget and WidgetClass and the opaque variable widgetClass are defined for generic actions on widgets. In order to make these types opaque and ensure that the compiler does not allow applications to access private data, the Intrinsics use incomplete structure definitions in Intrinsic.h: typedef struct _WidgetClassRec *WidgetClass, *CoreWidgetClass; CorePart Structure All widget instances contain the fields defined in the CorePart structure. typedef struct _CorePart { Widget self; Described below WidgetClass widget_class; See Widget parent; See Boolean being_destroyed; See XtCallbackList destroy_callbacks; XtPointer constraints; See Position x; See Position y; See Dimension width; See Dimension height; See Dimension border_width; See Boolean managed; See Boolean sensitive; See Boolean ancestor_sensitive; See XtTranslations accelerators; See Pixel border_pixel; See Pixmap border_pixmap; See WidgetList popup_list; See Cardinal num_popups; See String name; See Screen *screen; See Colormap colormap; See Window window; See Cardinal depth; See Pixel background_pixel; See Pixmap background_pixmap; See Boolean visible; See Boolean mapped_when_managed; See } CorePart; All widget instances have the Core fields as their first component. The prototypical type Widget is defined with only this set of fields. typedef struct { CorePart core; } WidgetRec, *Widget, CoreRec, *CoreWidget; Various routines can cast widget pointers, as needed, to specific widget types. In order to make these types opaque and ensure that the compiler does not allow applications to access private data, the Intrinsics use incomplete structure definitions in Intrinsic.h. typedef struct _WidgetRec *Widget, *CoreWidget; Core Resources The resource names, classes, and representation types specified in the coreClassRec resource list are Name Class Representation XtNaccelerators XtCAccelerators XtRAcceleratorTable XtNbackground XtCBackground XtRPixel XtNbackgroundPixmap XtCPixmap XtRPixmap XtNborderColor XtCBorderColor XtRPixel XtNborderPixmap XtCPixmap XtRPixmap XtNcolormap XtCColormap XtRColormap XtNdepth XtCDepth XtRInt XtNmappedWhenManaged XtCMappedWhenManaged XtRBoolean XtNscreen XtCScreen XtRScreen XtNtranslations XtCTranslations XtRTranslationTable Additional resources are defined for all widgets via the objectClassRec and rectObjClassRec resource lists; see and for details. CorePart Default Values The default values for the Core fields, which are filled in by the Intrinsics, from the resource lists, and by the initialize procedures, are Field Default Value self Address of the widget structure (may not be changed). widget_class widget_class argument to (may not be changed). parent parent argument to (may not be changed). being_destroyed Parent's being_destroyed value. destroy_callbacks NULL constraints NULL x 0 y 0 width 0 height 0 border_width 1 managed False sensitive True ancestor_sensitive logical AND of parent's sensitive and ancestor_sensitive values. accelerators NULL border_pixel XtDefaultForeground border_pixmap XtUnspecifiedPixmap popup_list NULL num_popups 0 name name argument to (may not be changed). screen Parent's screen; top-level widget gets screen from display specifier (may not be changed). colormap Parent's colormap value. window NULL depth Parent's depth; top-level widget gets root window depth. background_pixel XtDefaultBackground background_pixmap XtUnspecifiedPixmap visible True mapped_when_managed True XtUnspecifiedPixmap is a symbolic constant guaranteed to be unequal to any valid Pixmap id, None, and ParentRelative. Composite Widgets The Composite widget class is a subclass of the Core widget class (see ). Composite widgets are intended to be containers for other widgets. The additional data used by composite widgets are defined by the CompositeClassPart and CompositePart structures. CompositeClassPart Structure In addition to the Core class fields, widgets of the Composite class have the following class fields. typedef struct { XtGeometryHandler geometry_manager; See XtWidgetProc change_managed; See XtWidgetProc insert_child; See XtWidgetProc delete_child; See XtPointer extension; See } CompositeClassPart; The extension record defined for CompositeClassPart with record_type equal to NULLQUARK is CompositeClassExtensionRec. typedef struct { XtPointer next_extension; See XrmQuark record_type; See long version; See Cardinal record_size; See Boolean accepts_objects; See Boolean allows_change_managed_set; See } CompositeClassExtensionRec, *CompositeClassExtension; Composite classes have the Composite class fields immediately following the Core class fields. typedef struct { CoreClassPart core_class; CompositeClassPart composite_class; } CompositeClassRec, *CompositeWidgetClass; The single occurrences of the class record and pointer for creating instances of Composite are In IntrinsicP.h: extern CompositeClassRec compositeClassRec; In Intrinsic.h: extern WidgetClass compositeWidgetClass; The opaque types CompositeWidget and CompositeWidgetClass and the opaque variable compositeWidgetClass are defined for generic operations on widgets whose class is Composite or a subclass of Composite. The symbolic constant for the CompositeClassExtension version identifier is XtCompositeExtensionVersion (see ). Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data. typedef struct _CompositeClassRec *CompositeWidgetClass; CompositePart Structure In addition to the Core instance fields, widgets of the Composite class have the following instance fields defined in the CompositePart structure. typedef struct { WidgetList children; See Cardinal num_children; See Cardinal num_slots; See XtOrderProc insert_position; See } CompositePart; Composite widgets have the Composite instance fields immediately following the Core instance fields. typedef struct { CorePart core; CompositePart composite; } CompositeRec, *CompositeWidget; Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data. typedef struct _CompositeRec *CompositeWidget; Composite Resources The resource names, classes, and representation types that are specified in the compositeClassRec resource list are Name Class Representation XtNchildren XtCReadOnly XtRWidgetList XtNinsertPosition XtCInsertPosition XtRFunction XtNnumChildren XtCReadOnly XtRCardinal CompositePart Default Values The default values for the Composite fields, which are filled in from the Composite resource list and by the Composite initialize procedure, are Field Default Value childrenNULL num_children0 num_slots0 insert_positionInternal function to insert at end The children, num_children, and insert_position fields are declared as resources; XtNinsertPosition is a settable resource, XtNchildren and XtNnumChildren may be read by any client but should only be modified by the composite widget class procedures. Constraint Widgets The Constraint widget class is a subclass of the Composite widget class (see ). Constraint widgets maintain additional state data for each child; for example, client-defined constraints on the child's geometry. The additional data used by constraint widgets are defined by the ConstraintClassPart and ConstraintPart structures. ConstraintClassPart Structure In addition to the Core and Composite class fields, widgets of the Constraint class have the following class fields. typedef struct { XtResourceList resources; See Cardinal num_resources; See Cardinal constraint_size; See XtInitProc initialize; See XtWidgetProc destroy; See XtSetValuesFunc set_values; See XtPointer extension; See } ConstraintClassPart; The extension record defined for ConstraintClassPart with record_type equal to NULLQUARK is ConstraintClassExtensionRec. typedef struct { XtPointer next_extension; See XrmQuark record_type; See long version; See Cardinal record_size; See XtArgsProc get_values_hook; See } ConstraintClassExtensionRec, *ConstraintClassExtension; Constraint classes have the Constraint class fields immediately following the Composite class fields. typedef struct _ConstraintClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ConstraintClassPart constraint_class; } ConstraintClassRec, *ConstraintWidgetClass; The single occurrences of the class record and pointer for creating instances of Constraint are In IntrinsicP.h: extern ConstraintClassRec constraintClassRec; In Intrinsic.h: extern WidgetClass constraintWidgetClass; The opaque types ConstraintWidget and ConstraintWidgetClass and the opaque variable constraintWidgetClass are defined for generic operations on widgets whose class is Constraint or a subclass of Constraint. The symbolic constant for the ConstraintClassExtension version identifier is XtConstraintExtensionVersion (see ). Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data. typedef struct _ConstraintClassRec *ConstraintWidgetClass; ConstraintPart Structure In addition to the Core and Composite instance fields, widgets of the Constraint class have the following unused instance fields defined in the ConstraintPart structure typedef struct { int empty; } ConstraintPart; Constraint widgets have the Constraint instance fields immediately following the Composite instance fields. typedef struct { CorePart core; CompositePart composite; ConstraintPart constraint; } ConstraintRec, *ConstraintWidget; Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data. typedef struct _ConstraintRec *ConstraintWidget; Constraint Resources The constraintClassRec core_class and constraint_class resources fields are NULL, and the num_resources fields are zero; no additional resources beyond those declared by the superclasses are defined for Constraint. Implementation-Specific Types To increase the portability of widget and application source code between different system environments, the Intrinsics define several types whose precise representation is explicitly dependent upon, and chosen by, each individual implementation of the Intrinsics. These implementation-defined types are Boolean A datum that contains a zero or nonzero value. Unless explicitly stated, clients should not assume that the nonzero value is equal to the symbolic value True. Cardinal An unsigned integer datum with a minimum range of [0..2^16-1]. Dimension An unsigned integer datum with a minimum range of [0..2^16-1]. Position A signed integer datum with a minimum range of [-2^15..2^15-1]. XtPointer A datum large enough to contain the largest of a char*, int*, function pointer, structure pointer, or long value. A pointer to any type or function, or a long value may be converted to an XtPointer and back again and the result will compare equal to the original value. In ANSI C environments it is expected that XtPointer will be defined as void*. XtArgVal A datum large enough to contain an XtPointer, Cardinal, Dimension, or Position value. XtEnum An integer datum large enough to encode at least 128 distinct values, two of which are the symbolic values True and False. The symbolic values TRUE and FALSE are also defined to be equal to True and False, respectively. In addition to these specific types, the precise order of the fields within the structure declarations for any of the instance part records ObjectPart, RectObjPart, CorePart, CompositePart, ShellPart, WMShellPart, TopLevelShellPart, and ApplicationShellPart is implementation-defined. These structures may also have additional private fields internal to the implementation. The ObjectPart, RectObjPart, and CorePart structures must be defined so that any member with the same name appears at the same offset in ObjectRec, RectObjRec, and CoreRec ( WidgetRec ). No other relations between the offsets of any two fields may be assumed. Widget Classing The widget_class field of a widget points to its widget class structure, which contains information that is constant across all widgets of that class. As a consequence, widgets usually do not implement directly callable procedures; rather, they implement procedures, called methods, that are available through their widget class structure. These methods are invoked by generic procedures that envelop common actions around the methods implemented by the widget class. Such procedures are applicable to all widgets of that class and also to widgets whose classes are subclasses of that class. All widget classes are a subclass of Core and can be subclassed further. Subclassing reduces the amount of code and declarations necessary to make a new widget class that is similar to an existing class. For example, you do not have to describe every resource your widget uses in an XtResourceList. Instead, you describe only the resources your widget has that its superclass does not. Subclasses usually inherit many of their superclasses' procedures (for example, the expose procedure or geometry handler). Subclassing, however, can be taken too far. If you create a subclass that inherits none of the procedures of its superclass, you should consider whether you have chosen the most appropriate superclass. To make good use of subclassing, widget declarations and naming conventions are highly stylized. A widget consists of three files: A public .h file, used by client widgets or applications. A private .h file, used by widgets whose classes are subclasses of the widget class. A .c file, which implements the widget. Widget Naming Conventions The Intrinsics provide a vehicle by which programmers can create new widgets and organize a collection of widgets into an application. To ensure that applications need not deal with as many styles of capitalization and spelling as the number of widget classes it uses, the following guidelines should be followed when writing new widgets: Use the X library naming conventions that are applicable. For example, a record component name is all lowercase and uses underscores (_) for compound words (for example, background_pixmap). Type and procedure names start with uppercase and use capitalization for compound words (for example, ArgList or XtSetValues ). A resource name is spelled identically to the field name except that compound names use capitalization rather than underscore. To let the compiler catch spelling errors, each resource name should have a symbolic identifier prefixed with ``XtN''. For example, the background_pixmap field has the corresponding identifier XtNbackgroundPixmap, which is defined as the string ``backgroundPixmap''. Many predefined names are listed in <X11/StringDefs.h>. Before you invent a new name, you should make sure there is not already a name that you can use. A resource class string starts with a capital letter and uses capitalization for compound names (for example,``BorderWidth''). Each resource class string should have a symbolic identifier prefixed with ``XtC'' (for example, XtCBorderWidth). Many predefined classes are listed in <X11/StringDefs.h>. A resource representation string is spelled identically to the type name (for example, ``TranslationTable''). Each representation string should have a symbolic identifier prefixed with ``XtR'' (for example, XtRTranslationTable). Many predefined representation types are listed in <X11/StringDefs.h>. New widget classes start with a capital and use uppercase for compound words. Given a new class name AbcXyz, you should derive several names: Additional widget instance structure part name AbcXyzPart. Complete widget instance structure names AbcXyzRec and _AbcXyzRec. Widget instance structure pointer type name AbcXyzWidget. Additional class structure part name AbcXyzClassPart. Complete class structure names AbcXyzClassRec and _AbcXyzClassRec. Class structure pointer type name AbcXyzWidgetClass. Class structure variable abcXyzClassRec. Class structure pointer variable abcXyzWidgetClass. Action procedures available to translation specifications should follow the same naming conventions as procedures. That is, they start with a capital letter, and compound names use uppercase (for example, ``Highlight'' and ``NotifyClient''). The symbolic identifiers XtN..., XtC..., and XtR... may be implemented as macros, as global symbols, or as a mixture of the two. The (implicit) type of the identifier is String. The pointer value itself is not significant; clients must not assume that inequality of two identifiers implies inequality of the resource name, class, or representation string. Clients should also note that although global symbols permit savings in literal storage in some environments, they also introduce the possibility of multiple definition conflicts when applications attempt to use independently developed widgets simultaneously. Widget Subclassing in Public .h Files The public .h file for a widget class is imported by clients and contains A reference to the public .h file for the superclass. Symbolic identifiers for the names and classes of the new resources that this widget adds to its superclass. The definitions should have a single space between the definition name and the value and no trailing space or comment in order to reduce the possibility of compiler warnings from similar declarations in multiple classes. Type declarations for any new resource data types defined by the class. The class record pointer variable used to create widget instances. The C type that corresponds to widget instances of this class. Entry points for new class methods. For example, the following is the public .h file for a possible implementation of a Label widget: #ifndef LABEL_H #define LABEL_H /* New resources */ #define XtNjustify "justify" #define XtNforeground "foreground" #define XtNlabel "label" #define XtNfont "font" #define XtNinternalWidth "internalWidth" #define XtNinternalHeight "internalHeight" /* Class record pointer */ extern WidgetClass labelWidgetClass; /* C Widget type definition */ typedef struct _LabelRec *LabelWidget; /* New class method entry points */ extern void LabelSetText(); /* Widget w */ /* String text */ extern String LabelGetText(); /* Widget w */ #endif LABEL_H The conditional inclusion of the text allows the application to include header files for different widgets without being concerned that they already may be included as a superclass of another widget. To accommodate operating systems with file name length restrictions, the name of the public .h file is the first ten characters of the widget class. For example, the public .h file for the Constraint widget class is Constraint.h. Widget Subclassing in Private .h Files The private .h file for a widget is imported by widget classes that are subclasses of the widget and contains A reference to the public .h file for the class. A reference to the private .h file for the superclass. Symbolic identifiers for any new resource representation types defined by the class. The definitions should have a single space between the definition name and the value and no trailing space or comment. A structure part definition for the new fields that the widget instance adds to its superclass's widget structure. The complete widget instance structure definition for this widget. A structure part definition for the new fields that this widget class adds to its superclass's constraint structure if the widget class is a subclass of Constraint. The complete constraint structure definition if the widget class is a subclass of Constraint. Type definitions for any new procedure types used by class methods declared in the widget class part. A structure part definition for the new fields that this widget class adds to its superclass's widget class structure. The complete widget class structure definition for this widget. The complete widget class extension structure definition for this widget, if any. The symbolic constant identifying the class extension version, if any. The name of the global class structure variable containing the generic class structure for this class. An inherit constant for each new procedure in the widget class part structure. For example, the following is the private .h file for a possible Label widget: #ifndef LABELP_H #define LABELP_H #include <X11/Label.h> /* New representation types used by the Label widget */ #define XtRJustify "Justify" /* New fields for the Label widget record */ typedef struct { /* Settable resources */ Pixel foreground; XFontStruct *font; String label; /* text to display */ XtJustify justify; Dimension internal_width; /* # pixels horizontal border */ Dimension internal_height; /* # pixels vertical border */ /* Data derived from resources */ GC normal_GC; GC gray_GC; Pixmap gray_pixmap; Position label_x; Position label_y; Dimension label_width; Dimension label_height; Cardinal label_len; Boolean display_sensitive; } LabelPart; /* Full instance record declaration */ typedef struct _LabelRec { CorePart core; LabelPart label; } LabelRec; /* Types for Label class methods */ typedef void (*LabelSetTextProc)(); /* Widget w */ /* String text */ typedef String (*LabelGetTextProc)(); /* Widget w */ /* New fields for the Label widget class record */ typedef struct { LabelSetTextProc set_text; LabelGetTextProc get_text; XtPointer extension; } LabelClassPart; /* Full class record declaration */ typedef struct _LabelClassRec { CoreClassPart core_class; LabelClassPart label_class; } LabelClassRec; /* Class record variable */ extern LabelClassRec labelClassRec; #define LabelInheritSetText((LabelSetTextProc)_XtInherit) #define LabelInheritGetText((LabelGetTextProc)_XtInherit) #endif LABELP_H To accommodate operating systems with file name length restrictions, the name of the private .h file is the first nine characters of the widget class followed by a capital P. For example, the private .h file for the Constraint widget class is ConstrainP.h. Widget Subclassing in .c Files The .c file for a widget contains the structure initializer for the class record variable, which contains the following parts: Class information (for example, superclass, class_name, widget_size, class_initialize, and class_inited). Data constants (for example, resources and num_resources, actions and num_actions, visible_interest, compress_motion, compress_exposure, and version). Widget operations (for example, initialize, realize, destroy, resize, expose, set_values, accept_focus, and any new operations specific to the widget). The superclass field points to the superclass global class record, declared in the superclass private .h file. For direct subclasses of the generic core widget, superclass should be initialized to the address of the widgetClassRec structure. The superclass is used for class chaining operations and for inheriting or enveloping a superclass's operations (see , , and . The class_name field contains the text name for this class, which is used by the resource manager. For example, the Label widget has the string ``Label''. More than one widget class can share the same text class name. This string must be permanently allocated prior to or during the execution of the class initialization procedure and must not be subsequently deallocated. The widget_size field is the size of the corresponding widget instance structure (not the size of the class structure). The version field indicates the toolkit implementation version number and is used for runtime consistency checking of the X Toolkit and widgets in an application. Widget writers must set it to the implementation-defined symbolic value XtVersion in the widget class structure initialization. Those widget writers who believe that their widget binaries are compatible with other implementations of the Intrinsics can put the special value XtVersionDontCheck in the version field to disable version checking for those widgets. If a widget needs to compile alternative code for different revisions of the Intrinsics interface definition, it may use the symbol XtSpecificationRelease, as described in . Use of XtVersion allows the Intrinsics implementation to recognize widget binaries that were compiled with older implementations. The extension field is for future upward compatibility. If the widget programmer adds fields to class parts, all subclass structure layouts change, requiring complete recompilation. To allow clients to avoid recompilation, an extension field at the end of each class part can point to a record that contains any additional class information required. All other fields are described in their respective sections. The .c file also contains the declaration of the global class structure pointer variable used to create instances of the class. The following is an abbreviated version of the .c file for a Label widget. The resources table is described in . /* Resources specific to Label */ static XtResource resources[] = { {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), XtOffset(LabelWidget, label.foreground), XtRString, XtDefaultForeground}, {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), XtOffset(LabelWidget, label.font),XtRString, XtDefaultFont}, {XtNlabel, XtCLabel, XtRString, sizeof(String), XtOffset(LabelWidget, label.label), XtRString, NULL}, . . . } /* Forward declarations of procedures */ static void ClassInitialize(); static void Initialize(); static void Realize(); static void SetText(); static void GetText(); . . . /* Class record constant */ LabelClassRec labelClassRec = { { /* core_class fields */ /* superclass */ (WidgetClass)&coreClassRec, /* class_name */ "Label", /* widget_size */ sizeof(LabelRec), /* class_initialize */ ClassInitialize, /* class_part_initialize */ NULL, /* class_inited */ False, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ Realize, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ True, /* compress_exposure */ True, /* compress_enterleave */ True, /* visible_interest */ False, /* destroy */ NULL, /* resize */ Resize, /* expose */ Redisplay, /* set_values */ SetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ XtInheritQueryGeometry, /* display_accelerator */ NULL, /* extension */ NULL }, { /* Label_class fields */ /* get_text */ GetText, /* set_text */ SetText, /* extension */ NULL } }; /* Class record pointer */ WidgetClass labelWidgetClass = (WidgetClass) &labelClassRec; /* New method access routines */ void LabelSetText(w, text) Widget w; String text; { LabelWidgetClass lwc = (Label WidgetClass)XtClass(w); XtCheckSubclass(w, labelWidgetClass, NULL); *(lwc->label_class.set_text)(w, text) } /* Private procedures */ . . . Widget Class and Superclass Look Up To obtain the class of a widget, use . WidgetClass XtClass Widget w w Specifies the widget. Must be of class Object or any subclass thereof. The function returns a pointer to the widget's class structure. To obtain the superclass of a widget, use XtSuperclass. WidgetClass XtSuperClass Widget w w Specifies the widget. Must be of class Object or any subclass thereof. The XtSuperclass function returns a pointer to the widget's superclass class structure. Widget Subclass Verification To check the subclass to which a widget belongs, use . Boolean XtIsSubclass Widget w WidgetClass widget_class w Specifies the widget or object instance whose class is to be checked. Must be of class Object or any subclass thereof. widget_class Specifies the widget class for which to test. Must be objectClass or any subclass thereof. The function returns True if the class of the specified widget is equal to or is a subclass of the specified class. The widget's class can be any number of subclasses down the chain and need not be an immediate subclass of the specified class. Composite widgets that need to restrict the class of the items they contain can use to find out if a widget belongs to the desired class of objects. To test if a given widget belongs to a subclass of an Intrinsics-defined class, the Intrinsics define macros or functions equivalent to for each of the built-in classes. These procedures are XtIsObject, XtIsRectObj, XtIsWidget, XtIsComposite, XtIsConstraint, XtIsShell, XtIsOverrideShell, XtIsWMShell, XtIsVendorShell, XtIsTransientShell, XtIsTopLevelShell, XtIsApplicationShell, and XtIsSessionShell. All these macros and functions have the same argument description. Boolean XtIs Widget w w Specifies the widget or object instance whose class is to be checked. Must be of class Object or any subclass thereof. These procedures may be faster than calling directly for the built-in classes. To check a widget's class and to generate a debugging error message, use , defined in <X11/IntrinsicP.h>: void XtCheckSubclass Widget w WidgetClass widget_class String message w Specifies the widget or object whose class is to be checked. Must be of class Object or any subclass thereof. widget_class Specifies the widget class for which to test. Must be objectClass or any subclass thereof. message Specifies the message to be used. The macro determines if the class of the specified widget is equal to or is a subclass of the specified class. The widget's class can be any number of subclasses down the chain and need not be an immediate subclass of the specified class. If the specified widget's class is not a subclass, constructs an error message from the supplied message, the widget's actual class, and the expected class and calls . should be used at the entry point of exported routines to ensure that the client has passed in a valid widget class for the exported operation. is only executed when the module has been compiled with the compiler symbol DEBUG defined; otherwise, it is defined as the empty string and generates no code. Superclass Chaining While most fields in a widget class structure are self-contained, some fields are linked to their corresponding fields in their superclass structures. With a linked field, the Intrinsics access the field's value only after accessing its corresponding superclass value (called downward superclass chaining) or before accessing its corresponding superclass value (called upward superclass chaining). The self-contained fields are In all widget classes: class_name class_initialize widget_size realize visible_interest resize expose accept_focus compress_motion compress_exposure compress_enterleave set_values_almost tm_table version allocate deallocate In Composite widget classes: geometry_manager change_managed insert_child delete_child accepts_objects allows_change_managed_set In Constraint widget classes: constraint_size In Shell widget classes: root_geometry_manager With downward superclass chaining, the invocation of an operation first accesses the field from the Object, RectObj, and Core class structures, then from the subclass structure, and so on down the class chain to that widget's class structure. These superclass-to-subclass fields are class_part_initialize get_values_hook initialize initialize_hook set_values set_values_hook resources In addition, for subclasses of Constraint, the following fields of the ConstraintClassPart and ConstraintClassExtensionRec structures are chained from the Constraint class down to the subclass: resources initialize set_values get_values_hook With upward superclass chaining, the invocation of an operation first accesses the field from the widget class structure, then from the superclass structure, and so on up the class chain to the Core, RectObj, and Object class structures. The subclass-to-superclass fields are destroy actions For subclasses of Constraint, the following field of ConstraintClassPart is chained from the subclass up to the Constraint class: destroy Class Initialization: class_initialize and class_part_initialize Procedures Many class records can be initialized completely at compile or link time. In some cases, however, a class may need to register type converters or perform other sorts of once-only runtime initialization. Because the C language does not have initialization procedures that are invoked automatically when a program starts up, a widget class can declare a class_initialize procedure that will be automatically called exactly once by the Intrinsics. A class initialization procedure pointer is of type XtProc: typedef void (*XtProc)(void); A widget class indicates that it has no class initialization procedure by specifying NULL in the class_initialize field. In addition to the class initialization that is done exactly once, some classes perform initialization for fields in their parts of the class record. These are performed not just for the particular class, but for subclasses as well, and are done in the class's class part initialization procedure, a pointer to which is stored in the class_part_initialize field. The class_part_initialize procedure pointer is of type XtWidgetClassProc. void (*XtWidgetClassProc)(WidgetClass) WidgetClass widget_class widget_class Points to the class structure for the class being initialized. During class initialization, the class part initialization procedures for the class and all its superclasses are called in superclass-to-subclass order on the class record. These procedures have the responsibility of doing any dynamic initializations necessary to their class's part of the record. The most common is the resolution of any inherited methods defined in the class. For example, if a widget class C has superclasses Core, Composite, A, and B, the class record for C first is passed to Core 's class_part_initialize procedure. This resolves any inherited Core methods and compiles the textual representations of the resource list and action table that are defined in the class record. Next, Composite's class_part_initialize procedure is called to initialize the composite part of C's class record. Finally, the class_part_initialize procedures for A, B, and C, in that order, are called. For further information, see Classes that do not define any new class fields or that need no extra processing for them can specify NULL in the class_part_initialize field. All widget classes, whether they have a class initialization procedure or not, must start with their class_inited field False. The first time a widget of a class is created, ensures that the widget class and all superclasses are initialized, in superclass-to-subclass order, by checking each class_inited field and, if it is False, by calling the class_initialize and the class_part_initialize procedures for the class and all its superclasses. The Intrinsics then set the class_inited field to a nonzero value. After the one-time initialization, a class structure is constant. The following example provides the class initialization procedure for a Label class. static void ClassInitialize() { XtSetTypeConverter(XtRString, XtRJustify, CvtStringToJustify, NULL, 0, XtCacheNone, NULL); } Initializing a Widget Class A class is initialized when the first widget of that class or any subclass is created. To initialize a widget class without creating any widgets, use . void XtInitializeWidgetClass WidgetClass object_class object_class Specifies the object class to initialize. May be objectClass or any subclass thereof. If the specified widget class is already initialized, returns immediately. If the class initialization procedure registers type converters, these type converters are not available until the first object of the class or subclass is created or is called (see ). Inheritance of Superclass Operations A widget class is free to use any of its superclass's self-contained operations rather than implementing its own code. The most frequently inherited operations are expose realize insert_child delete_child geometry_manager set_values_almost To inherit an operation xyz, specify the constant XtInherit Xyz in your class record. Every class that declares a new procedure in its widget class part must provide for inheriting the procedure in its class_part_initialize procedure. The chained operations declared in Core and Constraint records are never inherited. Widget classes that do nothing beyond what their superclass does specify NULL for chained procedures in their class records. Inheriting works by comparing the value of the field with a known, special value and by copying in the superclass's value for that field if a match occurs. This special value, called the inheritance constant, is usually the Intrinsics internal value _XtInherit cast to the appropriate type. _XtInherit is a procedure that issues an error message if it is actually called. For example, CompositeP.h contains these definitions: #define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit) #define XtInheritChangeManaged ((XtWidgetProc) _XtInherit) #define XtInheritInsertChild ((XtArgsProc) _XtInherit) #define XtInheritDeleteChild ((XtWidgetProc) _XtInherit) Composite's class_part_initialize procedure begins as follows: static void CompositeClassPartInitialize(widgetClass) WidgetClass widgetClass; { CompositeWidgetClass wc = (CompositeWidgetClass)widgetClass; CompositeWidgetClass super = (CompositeWidgetClass)wc->core_class.superclass; if (wc->composite_class.geometry_manager == XtInheritGeometryManager) { wc->composite_class.geometry_manager = super->composite_class.geometry_manager; } if (wc->composite_class.change_managed == XtInheritChangeManaged) { wc->composite_class.change_managed = super->composite_class.change_managed; } . . . Nonprocedure fields may be inherited in the same manner as procedure fields. The class may declare any reserved value it wishes for the inheritance constant for its new fields. The following inheritance constants are defined: For Object: XtInheritAllocate XtInheritDeallocate For Core: XtInheritRealize XtInheritResize XtInheritExpose XtInheritSetValuesAlmost XtInheritAcceptFocus XtInheritQueryGeometry XtInheritTranslations XtInheritDisplayAccelerator For Composite: XtInheritGeometryManager XtInheritChangeManaged XtInheritInsertChild XtInheritDeleteChild For Shell: XtInheritRootGeometryManager Invocation of Superclass Operations A widget sometimes needs to call a superclass operation that is not chained. For example, a widget's expose procedure might call its superclass's expose and then perform a little more work on its own. For example, a Composite class with predefined managed children can implement insert_child by first calling its superclass's insert_child and then calling to add the child to the managed set. A class method should not use XtSuperclass but should instead call the class method of its own specific superclass directly through the superclass record. That is, it should use its own class pointers only, not the widget's class pointers, as the widget's class may be a subclass of the class whose implementation is being referenced. This technique is referred to as enveloping the superclass's operation. Class Extension Records It may be necessary at times to add new fields to already existing widget class structures. To permit this to be done without requiring recompilation of all subclasses, the last field in a class part structure should be an extension pointer. If no extension fields for a class have yet been defined, subclasses should initialize the value of the extension pointer to NULL. If extension fields exist, as is the case with the Composite, Constraint, and Shell classes, subclasses can provide values for these fields by setting the extension pointer for the appropriate part in their class structure to point to a statically declared extension record containing the additional fields. Setting the extension field is never mandatory; code that uses fields in the extension record must always check the extension field and take some appropriate default action if it is NULL. In order to permit multiple subclasses and libraries to chain extension records from a single extension field, extension records should be declared as a linked list, and each extension record definition should contain the following four fields at the beginning of the structure declaration: struct { XtPointer next_extension; XrmQuark record_type; long version; Cardinal record_size; }; next_extension Specifies the next record in the list, or NULL. record_type Specifies the particular structure declaration to which each extension record instance conforms. version Specifies a version id symbolic constant supplied by the definer of the structure. record_size Specifies the total number of bytes allocated for the extension record. The record_type field identifies the contents of the extension record and is used by the definer of the record to locate its particular extension record in the list. The record_type field is normally assigned the result of XrmStringToQuark for a registered string constant. The Intrinsics reserve all record type strings beginning with the two characters ``XT'' for future standard uses. The value NULLQUARK may also be used by the class part owner in extension records attached to its own class part extension field to identify the extension record unique to that particular class. The version field is an owner-defined constant that may be used to identify binary files that have been compiled with alternate definitions of the remainder of the extension record data structure. The private header file for a widget class should provide a symbolic constant for subclasses to use to initialize this field. The record_size field value includes the four common header fields and should normally be initialized with sizeof (). Any value stored in the class part extension fields of CompositeClassPart, ConstraintClassPart, or ShellClassPart must point to an extension record conforming to this definition. The Intrinsics provide a utility function for widget writers to locate a particular class extension record in a linked list, given a widget class and the offset of the extension field in the class record. To locate a class extension record, use . XtPointer XtGetClassExtension WidgetClass object_class Cardinal byte_offset XrmQuark type long version Cardinal record_size object_class Specifies the object class containing the extension list to be searched. byte_offset Specifies the offset in bytes from the base of the class record of the extension field to be searched. type Specifies the record_type of the class extension to be located. version Specifies the minimum acceptable version of the class extension required for a match. record_size Specifies the minimum acceptable length of the class extension record required for a match, or 0. The list of extension records at the specified offset in the specified object class will be searched for a match on the specified type, a version greater than or equal to the specified version, and a record size greater than or equal the specified record_size if it is nonzero. returns a pointer to a matching extension record or NULL if no match is found. The returned extension record must not be modified or freed by the caller if the caller is not the extension owner. mposite_class.geometry_manager == XtInheritGeometryManager) { wc->composite_class.geometry_manager = super->composite_class.geometry_manager; } if (wc->composite_class.change_managed == XtInheritChangeManaged) { wc->composite_class.change_managed = super->composite_class.change_managed; } . . . Nonprocedure fields may be inhelibXt-1.1.5/specs/CH06.xml000064401431060000012000001247721252061032400153700ustar00alancstaff00002660200006 Geometry Management A widget does not directly control its size and location; rather, its parent is responsible for controlling them. Although the position of children is usually left up to their parent, the widgets themselves often have the best idea of their optimal sizes and, possibly, preferred locations. To resolve physical layout conflicts between sibling widgets and between a widget and its parent, the Intrinsics provide the geometry management mechanism. Almost all composite widgets have a geometry manager specified in the geometry_manager field in the widget class record that is responsible for the size, position, and stacking order of the widget's children. The only exception is fixed boxes, which create their children themselves and can ensure that their children will never make a geometry request. Initiating Geometry Changes Parents, children, and clients each initiate geometry changes differently. Because a parent has absolute control of its children's geometry, it changes the geometry directly by calling XtMove\%Widget, , or . A child must ask its parent for a geometry change by calling or . An application or other client code initiates a geometry change by calling on the appropriate geometry fields, thereby giving the widget the opportunity to modify or reject the client request before it gets propagated to the parent and the opportunity to respond appropriately to the parent's reply. When a widget that needs to change its size, position, border width, or stacking depth asks its parent's geometry manager to make the desired changes, the geometry manager can allow the request, disallow the request, or suggest a compromise. When the geometry manager is asked to change the geometry of a child, the geometry manager may also rearrange and resize any or all of the other children that it controls. The geometry manager can move children around freely using . When it resizes a child (that is, changes the width, height, or border width) other than the one making the request, it should do so by calling . The requesting child may be given special treatment; see . It can simultaneously move and resize a child with a single call to . Often, geometry managers find that they can satisfy a request only if they can reconfigure a widget that they are not in control of; in particular, the composite widget may want to change its own size. In this case, the geometry manager makes a request to its parent's geometry manager. Geometry requests can cascade this way to arbitrary depth. Because such cascaded arbitration of widget geometry can involve extended negotiation, windows are not actually allocated to widgets at application startup until all widgets are satisfied with their geometry; see and . The Intrinsics treatment of stacking requests is deficient in several areas. Stacking requests for unrealized widgets are granted but will have no effect. In addition, there is no way to do an that will generate a stacking geometry request. After a successful geometry request (one that returned XtGeometryYes), a widget does not know whether its resize procedure has been called. Widgets should have resize procedures that can be called more than once without ill effects. General Geometry Manager Requests When making a geometry request, the child specifies an XtWidgetGeometry structure. typedef unsigned long XtGeometryMask; typedef struct { XtGeometryMask request_mode; Position x, y; Dimension width, height; Dimension border_width; Widget sibling; int stack_mode; } XtWidgetGeometry; To make a general geometry manager request from a widget, use . XtGeometryResult XtMakeGeometryRequest Widget w XtWidgetGeometry *request XtWidgetGeometry *reply_return w Specifies the widget making the request. Must be of class RectObj or any subclass thereof. request Specifies the desired widget geometry (size, position, border width, and stacking order). reply_return Returns the allowed widget size, or may be NULL if the requesting widget is not interested in handling XtGeometryAlmost. Depending on the condition, performs the following: If the widget is unmanaged or the widget's parent is not realized, it makes the changes and returns XtGeometryYes. If the parent's class is not a subclass of compositeWidgetClass or the parent's geometry_manager field is NULL, it issues an error. If the widget's being_destroyed field is True, it returns XtGeometryNo. If the widget x, y, width, height, and border_width fields are all equal to the requested values, it returns XtGeometryYes; otherwise, it calls the parent's geometry_manager procedure with the given parameters. If the parent's geometry manager returns XtGeometryYes and if XtCWQueryOnly is not set in request->request_mode and if the widget is realized, calls the XConfigureWindow Xlib function to reconfigure the widget's window (set its size, location, and stacking order as appropriate). If the geometry manager returns XtGeometryDone, the change has been approved and actually has been done. In this case, does no configuring and returns XtGeometryYes. never returns XtGeometryDone. Otherwise, just returns the resulting value from the parent's geometry manager. Children of primitive widgets are always unmanaged; therefore, always returns XtGeometryYes when called by a child of a primitive widget. The return codes from geometry managers are typedef enum { XtGeometryYes, XtGeometryNo, XtGeometryAlmost, XtGeometryDone } XtGeometryResult; The request_mode definitions are from <X11/X.h>. #define CWX (1<<0) #define CWY (1<<1) #define CWWidth (1<<2) #define CWHeight (1<<3) #define CWBorderWidth (1<<4) #define CWSibling (1<<5) #define CWStackMode (1<<6) The Intrinsics also support the following value. #define XtCWQueryOnly (1<<7) XtCWQueryOnly indicates that the corresponding geometry request is only a query as to what would happen if this geometry request were made and that no widgets should actually be changed. , like the XConfigureWindow Xlib function, uses request_mode to determine which fields in the XtWidgetGeometry structure the caller wants to specify. The stack_mode definitions are from <X11/X.h>: #define Above 0 #define Below 1 #define TopIf 2 #define BottomIf 3 #define Opposite 4 The Intrinsics also support the following value. #define XtSMDontChange 5 For definition and behavior of Above, Below, TopIf, BottomIf, and Opposite, BLAH in Xlib — C Language X Interface.. XtSMDontChange indicates that the widget wants its current stacking order preserved. Resize Requests To make a simple resize request from a widget, you can use as an alternative to . typedef XtGeometryResult XtMakeResizeRequest Widget w Dimension width Dimension *width_return w Specifies the widget making the request. Must be of class RectObj or any subclass thereof. width Specify the desired widget width and height. height width_return Return the allowed widget width and height. height_return The function, a simple interface to , creates an XtWidgetGeometry structure and specifies that width and height should change by setting request_mode to CWWidth | CWHeight. The geometry manager is free to modify any of the other window attributes (position or stacking order) to satisfy the resize request. If the return value is XtGeometryAlmost, width_return and height_return contain a compromise width and height. If these are acceptable, the widget should immediately call again and request that the compromise width and height be applied. If the widget is not interested in XtGeometryAlmost replies, it can pass NULL for width_return and height_return. Potential Geometry Changes Sometimes a geometry manager cannot respond to a geometry request from a child without first making a geometry request to the widget's own parent (the original requestor's grandparent). If the request to the grandparent would allow the parent to satisfy the original request, the geometry manager can make the intermediate geometry request as if it were the originator. On the other hand, if the geometry manager already has determined that the original request cannot be completely satisfied (for example, if it always denies position changes), it needs to tell the grandparent to respond to the intermediate request without actually changing the geometry because it does not know if the child will accept the compromise. To accomplish this, the geometry manager uses XtCWQueryOnly in the intermediate request. When XtCWQueryOnly is used, the geometry manager needs to cache enough information to exactly reconstruct the intermediate request. If the grandparent's response to the intermediate query was XtGeometryAlmost, the geometry manager needs to cache the entire reply geometry in the event the child accepts the parent's compromise. If the grandparent's response was XtGeometryAlmost, it may also be necessary to cache the entire reply geometry from the grandparent when XtCWQueryOnly is not used. If the geometry manager is still able to satisfy the original request, it may immediately accept the grandparent's compromise and then act on the child's request. If the grandparent's compromise geometry is insufficient to allow the child's request and if the geometry manager is willing to offer a different compromise to the child, the grandparent's compromise should not be accepted until the child has accepted the new compromise. Note that a compromise geometry returned with XtGeometryAlmost is guaranteed only for the next call to the same widget; therefore, a cache of size 1 is sufficient. Child Geometry Management: The geometry_manager Procedure The geometry_manager procedure pointer in a composite widget class is of type . XtGeometryResult *XtGeometryHandler Widget w XtWidgetGeometry *request XtWidgetGeometry *geometry_return w Passes the widget making the request. request Passes the new geometry the child desires. geometry_return Passes a geometry structure in which the geometry manager may store a compromise. A class can inherit its superclass's geometry manager during class initialization. A bit set to zero in the request's request_mode field means that the child widget does not care about the value of the corresponding field, so the geometry manager can change this field as it wishes. A bit set to 1 means that the child wants that geometry element set to the value in the corresponding field. If the geometry manager can satisfy all changes requested and if XtCWQueryOnly is not specified, it updates the widget's x, y, width, height, and border_width fields appropriately. Then, it returns XtGeometryYes, and the values pointed to by the geometry_return argument are undefined. The widget's window is moved and resized automatically by . Homogeneous composite widgets often find it convenient to treat the widget making the request the same as any other widget, including reconfiguring it using or as part of its layout process, unless XtCWQueryOnly is specified. If it does this, it should return XtGeometryDone to inform that it does not need to do the configuration itself. To remain compatible with layout techniques used in older widgets (before XtGeometryDone was added to the Intrinsics), a geometry manager should avoid using or on the child making the request because the layout process of the child may be in an intermediate state in which it is not prepared to handle a call to its resize procedure. A self-contained widget set may choose this alternative geometry management scheme, however, provided that it clearly warns widget developers of the compatibility consequences. Although resizes the widget's window (if the geometry manager returns XtGeometryYes ), it does not call the widget class's resize procedure. The requesting widget must perform whatever resizing calculations are needed explicitly. If the geometry manager disallows the request, the widget cannot change its geometry. The values pointed to by geometry_return are undefined, and the geometry manager returns XtGeometryNo. Sometimes the geometry manager cannot satisfy the request exactly but may be able to satisfy a similar request. That is, it could satisfy only a subset of the requests (for example, size but not position) or a lesser request (for example, it cannot make the child as big as the request but it can make the child bigger than its current size). In such cases, the geometry manager fills in the structure pointed to by geometry_return with the actual changes it is willing to make, including an appropriate request_mode mask, and returns XtGeometryAlmost. If a bit in geometry_return->request_mode is zero, the geometry manager agrees not to change the corresponding value if geometry_return is used immediately in a new request. If a bit is 1, the geometry manager does change that element to the corresponding value in geometry_return. More bits may be set in geometry_return->request_mode than in the original request if the geometry manager intends to change other fields should the child accept the compromise. When XtGeometryAlmost is returned, the widget must decide if the compromise suggested in geometry_return is acceptable. If it is, the widget must not change its geometry directly; rather, it must make another call to . If the next geometry request from this child uses the geometry_return values filled in by the geometry manager with an XtGeometryAlmost return and if there have been no intervening geometry requests on either its parent or any of its other children, the geometry manager must grant the request, if possible. That is, if the child asks immediately with the returned geometry, it should get an answer of XtGeometryYes. However, dynamic behavior in the user's window manager may affect the final outcome. To return XtGeometryYes, the geometry manager frequently rearranges the position of other managed children by calling . However, a few geometry managers may sometimes change the size of other managed children by calling or . If XtCWQueryOnly is specified, the geometry manager must return data describing how it would react to this geometry request without actually moving or resizing any widgets. Geometry managers must not assume that the request and geometry_return arguments point to independent storage. The caller is permitted to use the same field for both, and the geometry manager must allocate its own temporary storage, if necessary. Widget Placement and Sizing To move a sibling widget of the child making the geometry request, the parent uses . void XtMoveWidget Widget w Position x Position y w Specifies the widget. Must be of class RectObj or any subclass thereof. x y Specify the new widget x and y coordinates. The function returns immediately if the specified geometry fields are the same as the old values. Otherwise, writes the new x and y values into the object and, if the object is a widget and is realized, issues an Xlib XMoveWindow call on the widget's window. To resize a sibling widget of the child making the geometry request, the parent uses . void XtResizeWidget Widget w Dimension width Dimension height Dimension border_width w Specifies the widget. Must be of class RectObj or any subclass thereof. width height border_width Specify the new widget size. The function returns immediately if the specified geometry fields are the same as the old values. Otherwise, writes the new width, height, and border_width values into the object and, if the object is a widget and is realized, issues an XConfigureWindow call on the widget's window. If the new width or height is different from the old values, calls the object's resize procedure to notify it of the size change. To move and resize the sibling widget of the child making the geometry request, the parent uses . void XtConfigureWidget Widget w Position x Position y Dimension width Dimension height Dimension border_width w Specifies the widget. Must be of class RectObj or any subclass thereof. x y Specify the new widget x and y coordinates. width height border_width Specify the new widget size. The function returns immediately if the specified new geometry fields are all equal to the current values. Otherwise, writes the new x, y, width, height, and border_width values into the object and, if the object is a widget and is realized, makes an Xlib XConfigureWindow call on the widget's window. If the new width or height is different from its old value, calls the object's resize procedure to notify it of the size change; otherwise, it simply returns. To resize a child widget that already has the new values of its width, height, and border width, the parent uses . void XtResizeWindow Widget w w Specifies the widget. Must be of class Core or any subclass thereof. The function calls the XConfigureWindow Xlib function to make the window of the specified widget match its width, height, and border width. This request is done unconditionally because there is no inexpensive way to tell if these values match the current values. Note that the widget's resize procedure is not called. There are very few times to use ; instead, the parent should use . Preferred Geometry Some parents may be willing to adjust their layouts to accommodate the preferred geometries of their children. They can use to obtain the preferred geometry and, as they see fit, can use or ignore any portion of the response. To query a child widget's preferred geometry, use . XtGeometryResult XtQueryGeometry Widget w XtWidgetGeometry *intended XtWidgetGeometry *preferred_return w Specifies the widget. Must be of class RectObj or any subclass thereof. intended Specifies the new geometry the parent plans to give to the child, or NULL. preferred_return Returns the child widget's preferred geometry. To discover a child's preferred geometry, the child's parent stores the new geometry in the corresponding fields of the intended structure, sets the corresponding bits in intended.request_mode, and calls . The parent should set only those fields that are important to it so that the child can determine whether it may be able to attempt changes to other fields. clears all bits in the preferred_return->request_mode field and checks the query_geometry field of the specified widget's class record. If query_geometry is not NULL, calls the query_geometry procedure and passes as arguments the specified widget, intended, and preferred_return structures. If the intended argument is NULL, replaces it with a pointer to an XtWidgetGeometry structure with request_mode equal to zero before calling the query_geometry procedure. If is called from within a geometry_manager procedure for the widget that issued or , the results are not guaranteed to be consistent with the requested changes. The change request passed to the geometry manager takes precedence over the preferred geometry. The query_geometry procedure pointer is of type . typedef XtGeometryResult (*XtGeometryHandler) Widget w XtWidgetGeometry *request XtWidgetGeometry *preferred_return w Passes the child widget whose preferred geometry is required. request Passes the geometry changes that the parent plans to make. preferred_return Passes a structure in which the child returns its preferred geometry. The query_geometry procedure is expected to examine the bits set in request->request_mode, evaluate the preferred geometry of the widget, and store the result in preferred_return (setting the bits in preferred_return->request_mode corresponding to those geometry fields that it cares about). If the proposed geometry change is acceptable without modification, the query_geometry procedure should return XtGeometryYes. If at least one field in preferred_return with a bit set in preferred_return->request_mode is different from the corresponding field in request or if a bit was set in preferred_return->request_mode that was not set in the request, the query_geometry procedure should return XtGeometryAlmost. If the preferred geometry is identical to the current geometry, the query_geometry procedure should return XtGeometryNo. The query_geometry procedure may assume that no or is in progress for the specified widget; that is, it is not required to construct a reply consistent with the requested geometry if such a request were actually outstanding. After calling the query_geometry procedure or if the query_geometry field is NULL, examines all the unset bits in preferred_return->request_mode and sets the corresponding fields in preferred_return to the current values from the widget instance. If CWStackMode is not set, the stack_mode field is set to XtSMDontChange. returns the value returned by the query_geometry procedure or XtGeometryYes if the query_geometry field is NULL. Therefore, the caller can interpret a return of XtGeometryYes as not needing to evaluate the contents of the reply and, more important, not needing to modify its layout plans. A return of XtGeometryAlmost means either that both the parent and the child expressed interest in at least one common field and the child's preference does not match the parent's intentions or that the child expressed interest in a field that the parent might need to consider. A return value of XtGeometryNo means that both the parent and the child expressed interest in a field and that the child suggests that the field's current value in the widget instance is its preferred value. In addition, whether or not the caller ignores the return value or the reply mask, it is guaranteed that the preferred_return structure contains complete geometry information for the child. Parents are expected to call in their layout routine and wherever else the information is significant after change_managed has been called. The first time it is invoked, the changed_managed procedure may assume that the child's current geometry is its preferred geometry. Thus, the child is still responsible for storing values into its own geometry during its initialize procedure. Size Change Management: The resize Procedure A child can be resized by its parent at any time. Widgets usually need to know when they have changed size so that they can lay out their displayed data again to match the new size. When a parent resizes a child, it calls , which updates the geometry fields in the widget, configures the window if the widget is realized, and calls the child's resize procedure to notify the child. The resize procedure pointer is of type . If a class need not recalculate anything when a widget is resized, it can specify NULL for the resize field in its class record. This is an unusual case and should occur only for widgets with very trivial display semantics. The resize procedure takes a widget as its only argument. The x, y, width, height, and border_width fields of the widget contain the new values. The resize procedure should recalculate the layout of internal data as needed. (For example, a centered Label in a window that changes size should recalculate the starting position of the text.) The widget must obey resize as a command and must not treat it as a request. A widget must not issue an or call from its resize procedure. e='sellibXt-1.1.5/specs/CH08.xml000064401431060000012000000422711252061032400153630ustar00alancstaff00002660200006 Callbacks Applications and other widgets often need to register a procedure with a widget that gets called under certain prespecified conditions. For example, when a widget is destroyed, every procedure on the widget's destroy_callbacks list is called to notify clients of the widget's impending doom. Every widget has an XtNdestroyCallbacks callback list resource. Widgets can define additional callback lists as they see fit. For example, the Pushbutton widget has a callback list to notify clients when the button has been activated. Except where otherwise noted, it is the intent that all Intrinsics functions may be called at any time, including from within callback procedures, action routines, and event handlers. Using Callback Procedure and Callback List Definitions Callback procedure pointers for use in callback lists are of type . typedef void (*XtCallbackProc) Widget w XtPointer client_data XtPointer call_data w Specifies the widget owning the list in which the callback is registered. client_data Specifies additional data supplied by the client when the procedure was registered. call_data Specifies any callback-specific data the widget wants to pass to the client. For example, when Scrollbar executes its XtNthumbChanged callback list, it passes the new position of the thumb. The client_data argument provides a way for the client registering the callback procedure also to register client-specific data, for example, a pointer to additional information about the widget, a reason for invoking the callback, and so on. The client_data value may be NULL if all necessary information is in the widget. The call_data argument is a convenience to avoid having simple cases where the client could otherwise always call or a widget-specific function to retrieve data from the widget. Widgets should generally avoid putting complex state information in call_data. The client can use the more general data retrieval methods, if necessary. Whenever a client wants to pass a callback list as an argument in an , , or call, it should specify the address of a NULL-terminated array of type XtCallbackList. typedef struct { XtCallbackProc callback; XtPointer closure; } XtCallbackRec, *XtCallbackList; For example, the callback list for procedures A and B with client data clientDataA and clientDataB, respectively, is static XtCallbackRec callbacks[] = { {A, (XtPointer) clientDataA}, {B, (XtPointer) clientDataB}, {(XtCallbackProc) NULL, (XtPointer) NULL} }; Although callback lists are passed by address in arglists and varargs lists, the Intrinsics recognize callback lists through the widget resource list and will copy the contents when necessary. Widget initialize and set_values procedures should not allocate memory for the callback list contents. The Intrinsics automatically do this, potentially using a different structure for their internal representation. Identifying Callback Lists Whenever a widget contains a callback list for use by clients, it also exports in its public .h file the resource name of the callback list. Applications and client widgets never access callback list fields directly. Instead, they always identify the desired callback list by using the exported resource name. All the callback manipulation functions described in this chapter except check to see that the requested callback list is indeed implemented by the widget. For the Intrinsics to find and correctly handle callback lists, they must be declared with a resource type of XtRCallback. The internal representation of a callback list is implementation-dependent; widgets may make no assumptions about the value stored in this resource if it is non-NULL. Except to compare the value to NULL (which is equivalent to XtCallbackStatus XtCallbackHasNone ), access to callback list resources must be made through other Intrinsics procedures. Adding Callback Procedures To add a callback procedure to a widget's callback list, use . void XtAddCallback Widget w String callback_name XtCallbackProc callback XtPointer client_data w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list to which the procedure is to be appended. callback Specifies the callback procedure. client_data Specifies additional data to be passed to the specified procedure when it is invoked, or NULL. A callback will be invoked as many times as it occurs in the callback list. To add a list of callback procedures to a given widget's callback list, use . void XtAddCallbacks Widget w String callback_name XtCallbackList callbacks w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list to which the procedures are to be appended. callbacks Specifies the null-terminated list of callback procedures and corresponding client data. Removing Callback Procedures To delete a callback procedure from a widget's callback list, use . void XtRemoveCallback Widget w String callback_name XtCallbackProc callback XtPointer client_data w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list from which the procedure is to be deleted. callback Specifies the callback procedure. client_data Specifies the client data to match with the registered callback entry. The function removes a callback only if both the procedure and the client data match. To delete a list of callback procedures from a given widget's callback list, use . void XtRemoveCallbacks Widget w String callback_name XtCallbackList callbacks w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list from which the procedures are to be deleted. callbacks Specifies the null-terminated list of callback procedures and corresponding client data. To delete all callback procedures from a given widget's callback list and free all storage associated with the callback list, use . void XtRemoveAllCallbacks Widget w String callback_name w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list to be cleared. Executing Callback Procedures To execute the procedures in a given widget's callback list, specifying the callback list by resource name, use . void XtCallCallbacks Widget w String callback_name XtPointer call_data w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list to be executed. call_data Specifies a callback-list-specific data value to pass to each of the callback procedure in the list, or NULL. calls each of the callback procedures in the list named by callback_name in the specified widget, passing the client data registered with the procedure and call-data. To execute the procedures in a callback list, specifying the callback list by address, use . void XtCallCallbackList Widget widget XtCallbackList callbacks XtPointer call_data widget Specifies the widget instance that contains the callback list. Must be of class Object or any subclass thereof. callbacks Specifies the callback list to be executed. call_data Specifies a callback-list-specific data value to pass to each of the callback procedures in the list, or NULL. The callbacks parameter must specify the contents of a widget or object resource declared with representation type XtRCallback. If callbacks is NULL, returns immediately; otherwise it calls each of the callback procedures in the list, passing the client data and call_data. Checking the Status of a Callback List To find out the status of a given widget's callback list, use . typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} XtCallbackStatus; XtCallbackStatus XtHasCallbacks Widget w String callback_name w Specifies the widget. Must be of class Object or any subclass thereof. callback_name Specifies the callback list to be checked. The function first checks to see if the widget has a callback list identified by callback_name. If the callback list does not exist, returns XtCallbackNoList. If the callback list exists but is empty, it returns XtCallbackHasNone. If the callback list exists and has at least one callback registered, it returns XtCallbackHasSome. use . void XtAddCallbacks Widget w String callback_name XtCallibXt-1.1.5/specs/appE.xml000064401431060000012000001134521252061032400156060ustar00alancstaff00002660200006 Defined Strings The StringDefs.h header file contains definitions for the following resource name, class, and representation type symbolic constants. Resource names: Symbol Definition XtNaccelerators "accelerators" XtNallowHoriz "allowHoriz" XtNallowVert "allowVert" XtNancestorSensitive "ancestorSensitive" XtNbackground "background" XtNbackgroundPixmap "backgroundPixmap" XtNbitmap "bitmap" XtNborder "borderColor" XtNborderColor "borderColor" XtNborderPixmap "borderPixmap" XtNborderWidth "borderWidth" XtNcallback "callback" XtNchangeHook "changeHook" XtNchildren "children" XtNcolormap "colormap" XtNconfigureHook "configureHook" XtNcreateHook "createHook" XtNdepth "depth" XtNdestroyCallback "destroyCallback" XtNdestroyHook "destroyHook" XtNeditType "editType" XtNfile "file" XtNfont "font" XtNfontSet "fontSet" XtNforceBars "forceBars" XtNforeground "foreground" XtNfunction "function" XtNgeometryHook "geometryHook" XtNheight "height" XtNhighlight "highlight" XtNhSpace "hSpace" XtNindex "index" XtNinitialResourcesPersistent "initialResourcesPersistent" XtNinnerHeight "innerHeight" XtNinnerWidth "innerWidth" XtNinnerWindow "innerWindow" XtNinsertPosition "insertPosition" XtNinternalHeight "internalHeight" XtNinternalWidth "internalWidth" XtNjumpProc "jumpProc" XtNjustify "justify" XtNknobHeight "knobHeight" XtNknobIndent "knobIndent" XtNknobPixel "knobPixel" XtNknobWidth "knobWidth" XtNlabel "label" XtNlength "length" XtNlowerRight "lowerRight" XtNmappedWhenManaged "mappedWhenManaged" XtNmenuEntry "menuEntry" XtNname "name" XtNnotify "notify" XtNnumChildren "numChildren" XtNnumShells "numShells" XtNorientation "orientation" XtNparameter "parameter" XtNpixmap "pixmap" XtNpopupCallback "popupCallback" XtNpopdownCallback "popdownCallback" XtNresize "resize" XtNreverseVideo "reverseVideo" XtNscreen "screen" XtNscrollProc "scrollProc" XtNscrollDCursor "scrollDCursor" XtNscrollHCursor "scrollHCursor" XtNscrollLCursor "scrollLCursor" XtNscrollRCursor "scrollRCursor" XtNscrollUCursor "scrollUCursor" XtNscrollVCursor "scrollVCursor" XtNselection "selection" XtNselectionArray "selectionArray" XtNsensitive "sensitive" XtNsession "session" XtNshells "shells" XtNshown "shown" XtNspace "space" XtNstring "string" XtNtextOptions "textOptions" XtNtextSink "textSink" XtNtextSource "textSource" XtNthickness "thickness" XtNthumb "thumb" XtNthumbProc "thumbProc" XtNtop "top" XtNtranslations "translations" XtNunrealizeCallback "unrealizeCallback" XtNupdate "update" XtNuseBottom "useBottom" XtNuseRight "useRight" XtNvalue "value" XtNvSpace "vSpace" XtNwidth "width" XtNwindow "window" XtNx "x" XtNy "y" Resource classes: Symbol Definition XtCAccelerators "Accelerators" XtCBackground "Background" XtCBitmap "Bitmap" XtCBoolean "Boolean" XtCBorderColor "BorderColor" XtCBorderWidth "BorderWidth" XtCCallback "Callback" XtCColormap "Colormap" XtCColor "Color" XtCCursor "Cursor" XtCDepth "Depth" XtCEditType "EditType" XtCEventBindings "EventBindings" XtCFile "File" XtCFont "Font" XtCFontSet "FontSet" XtCForeground "Foreground" XtCFraction "Fraction" XtCFunction "Function" XtCHeight "Height" XtCHSpace "HSpace" XtCIndex "Index" XtCInitialResourcesPersistent "InitialResourcesPersistent" XtCInsertPosition "InsertPosition" XtCInterval "Interval" XtCJustify "Justify" XtCKnobIndent "KnobIndent" XtCKnobPixel "KnobPixel" XtCLabel "Label" XtCLength "Length" XtCMappedWhenManaged "MappedWhenManaged" XtCMargin "Margin" XtCMenuEntry "MenuEntry" XtCNotify "Notify" XtCOrientation "Orientation" XtCParameter "Parameter" XtCPixmap "Pixmap" XtCPosition "Position" XtCReadOnly "ReadOnly" XtCResize "Resize" XtCReverseVideo "ReverseVideo" XtCScreen "Screen" XtCScrollProc "ScrollProc" XtCScrollDCursor "ScrollDCursor" XtCScrollHCursor "ScrollHCursor" XtCScrollLCursor "ScrollLCursor" XtCScrollRCursor "ScrollRCursor" XtCScrollUCursor "ScrollUCursor" XtCScrollVCursor "ScrollVCursor" XtCSelection "Selection" XtCSelectionArray "SelectionArray" XtCSensitive "Sensitive" XtCSession "Session" XtCSpace "Space" XtCString "String" XtCTextOptions "TextOptions" XtCTextPosition "TextPosition" XtCTextSink "TextSink" XtCTextSource "TextSource" XtCThickness "Thickness" XtCThumb "Thumb" XtCTranslations "Translations" XtCValue "Value" XtCVSpace "VSpace" XtCWidth "Width" XtCWindow "Window" XtCX "X" XtCY "Y" Resource representation types: Symbol Definition XtRAcceleratorTable "AcceleratorTable" XtRAtom "Atom" XtRBitmap "Bitmap" XtRBool "Bool" XtRBoolean "Boolean" XtRCallback "Callback" XtRCallProc "CallProc" XtRCardinal "Cardinal" XtRColor "Color" XtRColormap "Colormap" XtRCommandArgArray "CommandArgArray" XtRCursor "Cursor" XtRDimension "Dimension" XtRDirectoryString "DirectoryString" XtRDisplay "Display" XtREditMode "EditMode" XtREnum "Enum" XtREnvironmentArray "EnvironmentArray" XtRFile "File" XtRFloat "Float" XtRFont "Font" XtRFontSet "FontSet" XtRFontStruct "FontStruct" XtRFunction "Function" XtRGeometry "Geometry" XtRGravity "Gravity" XtRImmediate "Immediate" XtRInitialState "InitialState" XtRInt "Int" XtRJustify "Justify" XtRLongBoolean XtRBool XtRObject "Object" XtROrientation "Orientation" XtRPixel "Pixel" XtRPixmap "Pixmap" XtRPointer "Pointer" XtRPosition "Position" XtRRestartStyle "RestartStyle" XtRScreen "Screen" XtRShort "Short" XtRSmcConn "SmcConn" XtRString "String" XtRStringArray "StringArray" XtRStringTable "StringTable" XtRUnsignedChar "UnsignedChar" XtRTranslationTable "TranslationTable" XtRVisual "Visual" XtRWidget "Widget" XtRWidgetClass "WidgetClass" XtRWidgetList "WidgetList" XtRWindow "Window" Boolean enumeration constants: Symbol Definition XtEoff "off" XtEfalse "false" XtEno "no" XtEon "on" XtEtrue "true" XtEyes "yes" Orientation enumeration constants: Symbol Definition XtEvertical "vertical" XtEhorizontal "horizontal" Text edit enumeration constants: Symbol Definition XtEtextRead "read" XtEtextAppend "append" XtEtextEdit "edit" Color enumeration constants: Symbol Definition XtExtdefaultbackground "xtdefaultbackground" XtExtdefaultforeground "xtdefaultforeground" Font constant: Symbol Definition XtExtdefaultfont "xtdefaultfont" Hooks for External Agents constants: Symbol Definition XtHcreate "Xtcreate" XtHsetValues "Xtsetvalues" XtHmanageChildren "XtmanageChildren" XtHunmanageChildren "XtunmanageChildren" XtHmanageSet "XtmanageSet" XtHunmanageSet "XtunmanageSet" XtHrealizeWidget "XtrealizeWidget" XtHunrealizeWidget "XtunrealizeWidget" XtHaddCallback "XtaddCallback" XtHaddCallbacks "XtaddCallbacks" XtHremoveCallback "XtremoveCallback" XtHremoveCallbacks "XtremoveCallbacks" XtHremoveAllCallbacks "XtremoveAllCallbacks" XtHaugmentTranslations "XtaugmentTranslations" XtHoverrideTranslations "XtoverrideTranslations" XtHuninstallTranslations "XtuninstallTranslations" XtHsetKeyboardFocus "XtsetKeyboardFocus" XtHsetWMColormapWindows "XtsetWMColormapWindows" XtHmapWidget "XtmapWidget" XtHunmapWidget "XtunmapWidget" XtHpopup "Xtpopup" XtHpopupSpringLoaded "XtpopupSpringLoaded" XtHpopdown "Xtpopdown" XtHconfigure "Xtconfigure" XtHpreGeometry "XtpreGeometry" XtHpostGeometry "XtpostGeometry" XtHdestroy "Xtdestroy" The Shell.h header file contains definitions for the following resource name, class, and representation type symbolic constants. Resource names: Symbol Definition XtNallowShellResize "allowShellResize" XtNargc "argc" XtNargv "argv" XtNbaseHeight "baseHeight" XtNbaseWidth "baseWidth" XtNcancelCallback "cancelCallback" XtNclientLeader "clientLeader" XtNcloneCommand "cloneCommand" XtNconnection "connection" XtNcreatePopupChildProc "createPopupChildProc" XtNcurrentDirectory "currentDirectory" XtNdieCallback "dieCallback" XtNdiscardCommand "discardCommand" XtNenvironment "environment" XtNerrorCallback "errorCallback" XtNgeometry "geometry" XtNheightInc "heightInc" XtNiconMask "iconMask" XtNiconName "iconName" XtNiconNameEncoding "iconNameEncoding" XtNiconPixmap "iconPixmap" XtNiconWindow "iconWindow" XtNiconX "iconX" XtNiconY "iconY" XtNiconic "iconic" XtNinitialState "initialState" XtNinput "input" XtNinteractCallback "interactCallback" XtNjoinSession "joinSession" XtNmaxAspectX "maxAspectX" XtNmaxAspectY "maxAspectY" XtNmaxHeight "maxHeight" XtNmaxWidth "maxWidth" XtNminAspectX "minAspectX" XtNminAspectY "minAspectY" XtNminHeight "minHeight" XtNminWidth "minWidth" XtNoverrideRedirect "overrideRedirect" XtNprogramPath "programPath" XtNresignCommand "resignCommand" XtNrestartCommand "restartCommand" XtNrestartStyle "restartStyle" XtNsaveCallback "saveCallback" XtNsaveCompleteCallback "saveCompleteCallback" XtNsaveUnder "saveUnder" XtNsessionID "sessionID" XtNshutdownCommand "shutdownCommand" XtNtitle "title" XtNtitleEncoding "titleEncoding" XtNtransient "transient" XtNtransientFor "transientFor" XtNurgency "urgency" XtNvisual "visual" XtNwaitForWm "waitforwm" XtNwaitforwm "waitforwm" XtNwidthInc "widthInc" XtNwindowGroup "windowGroup" XtNwindowRole "windowRole" XtNwinGravity "winGravity" XtNwmTimeout "wmTimeout" Resource classes: Symbol Definition XtCAllowShellResize "allowShellResize" XtCArgc "Argc" XtCArgv "Argv" XtCBaseHeight "BaseHeight" XtCBaseWidth "BaseWidth" XtCClientLeader "ClientLeader" XtCCloneCommand "CloneCommand" XtCConnection "Connection" XtCCreatePopupChildProc "CreatePopupChildProc" XtCCurrentDirectory "CurrentDirectory" XtCDiscardCommand "DiscardCommand" XtCEnvironment "Environment" XtCGeometry "Geometry" XtCHeightInc "HeightInc" XtCIconMask "IconMask" XtCIconName "IconName" XtCIconNameEncoding "IconNameEncoding" XtCIconPixmap "IconPixmap" XtCIconWindow "IconWindow" XtCIconX "IconX" XtCIconY "IconY" XtCIconic "Iconic" XtCInitialState "InitialState" XtCInput "Input" XtCJoinSession "JoinSession" XtCMaxAspectX "MaxAspectX" XtCMaxAspectY "MaxAspectY" XtCMaxHeight "MaxHeight" XtCMaxWidth "MaxWidth" XtCMinAspectX "MinAspectX" XtCMinAspectY "MinAspectY" XtCMinHeight "MinHeight" XtCMinWidth "MinWidth" XtCOverrideRedirect "OverrideRedirect" XtCProgramPath "ProgramPath" XtCResignCommand "ResignCommand" XtCRestartCommand "RestartCommand" XtCRestartStyle "RestartStyle" XtCSaveUnder "SaveUnder" XtCSessionID "SessionID" XtCShutdownCommand "ShutdownCommand" XtCTitle "Title" XtCTitleEncoding "TitleEncoding" XtCTransient "Transient" XtCTransientFor "TransientFor" XtCUrgency "Urgency" XtCVisual "Visual" XtCWaitForWm "Waitforwm" XtCWaitforwm "Waitforwm" XtCWidthInc "WidthInc" XtCWindowGroup "WindowGroup" XtCWindowRole "WindowRole" XtCWinGravity "WinGravity" XtCWmTimeout "WmTimeout" Resource representation types: Symbol Definition XtRAtom "Atom" ack" XtNdiscardCommand "discardCommand" XtNenvironment "environment" libXt-1.1.5/specs/appB.xml000064401431060000012000000773711252061032400156140ustar00alancstaff00002660200006 Translation Table Syntax Notation Syntax is specified in EBNF notation with the following conventions: [ a ] Means either nothing or "a" { a } Means zero or more occurrences of "a" ( a | b ) Means either "a" or "b" \\n Is the newline character All terminals are enclosed in double quotation marks (" "). Informal descriptions are enclosed in angle brackets (< >). Syntax The syntax of a translation table is translationTable = [ directive ] { production } directive = ( "#replace" | "#override" | "#augment" ) "\\\\n" production = lhs ":" rhs "\\\\n" lhs = ( event | keyseq ) { "," (event | keyseq) } keyseq = """ keychar {keychar} """ keychar = [ "^" | "$" | "\\\\" ] <ISO Latin 1 character> event = [modifier_list] "<"event_type">" [ "(" count["+"] ")" ] {detail} modifier_list = ( ["!"] [":"] {modifier} ) | "None" modifier = ["~"] modifier_name count = ("1" | "2" | "3" | "4" | ...) modifier_name = "@" <keysym> | <see ModifierNames table below> event_type = <see Event Types table below> detail = <event specific details> rhs = { name "(" [params] ")" } name = namechar { namechar } namechar = { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" } params = string {"," string} string = quoted_string | unquoted_string quoted_string = " {<Latin 1 character> | escape_char} ["\\\\" ] " escape_char = "\\"" unquoted_string = {<Latin 1 character except space, tab, ",", "\\n", ")">} The params field is parsed into a list of String values that will be passed to the named action procedure. A quoted string may contain an embedded quotation mark if the quotation mark is preceded by a single backslash (\). The three-character sequence "\\\"" is interpreted as "single backslash followed by end-of-string". Modifier Names The modifier field is used to specify standard X keyboard and button modifier mask bits. Modifiers are legal on event types KeyPress, KeyRelease, ButtonPress, ButtonRelease, MotionNotify, EnterNotify, LeaveNotify, and their abbreviations. An error is generated when a translation table that contains modifiers for any other events is parsed. If the modifier list has no entries and is not "None", it means "don't care" on all modifiers. If an exclamation point (!) is specified at the beginning of the modifier list, it means that the listed modifiers must be in the correct state and no other modifiers can be asserted. If any modifiers are specified and an exclamation point (!) is not specified, it means that the listed modifiers must be in the correct state and "don't care" about any other modifiers. If a modifier is preceded by a tilde (~), it means that that modifier must not be asserted. If "None" is specified, it means no modifiers can be asserted. If a colon (:) is specified at the beginning of the modifier list, it directs the Intrinsics to apply any standard modifiers in the event to map the event keycode into a KeySym. The default standard modifiers are Shift and Lock, with the interpretation as defined in X Window System Protocol, Section 5. The resulting KeySym must exactly match the specified KeySym, and the nonstandard modifiers in the event must match the modifier list. For example, ":<Key>a" is distinct from ":<Key>A", and ":Shift<Key>A" is distinct from ":<Key>A". If both an exclamation point (!) and a colon (:) are specified at the beginning of the modifier list, it means that the listed modifiers must be in the correct state and that no other modifiers except the standard modifiers can be asserted. Any standard modifiers in the event are applied as for colon (:) above. If a colon (:) is not specified, no standard modifiers are applied. Then, for example, "<Key>A" and "<Key>a" are equivalent. In key sequences, a circumflex (^) is an abbreviation for the Control modifier, a dollar sign ($) is an abbreviation for Meta, and a backslash (\) can be used to quote any character, in particular a double quote ("), a circumflex (^), a dollar sign ($), and another backslash (\). Briefly: No modifiers: None <event> detail Any modifiers: <event> detail Only these modifiers: ! mod1 mod2 <event> detail These modifiers and any others: mod1 mod2 <event> detail The use of "None" for a modifier list is identical to the use of an exclamation point with no modifers. Modifier Abbreviation Meaning Ctrl c Control modifier bit Shift s Shift modifier bit Lock l Lock modifier bit Meta m Meta key modifier Hyper h Hyper key modifier Super su Super key modifier Alt a Alt key modifier Mod1 Mod1 modifier bit Mod2 Mod2 modifier bit Mod3 Mod3 modifier bit Mod4 Mod4 modifier bit Mod5 Mod5 modifier bit Button1 Button1 modifier bit Button2 Button2 modifier bit Button3 Button3 modifier bit Button4 Button4 modifier bit Button5 Button5 modifier bit None No modifiers Any Any modifier combination A key modifier is any modifier bit one of whose corresponding KeyCodes contains the corresponding left or right KeySym. For example, "m" or "Meta" means any modifier bit mapping to a KeyCode whose KeySym list contains XK_Meta_L or XK_Meta_R. Note that this interpretation is for each display, not global or even for each application context. The Control, Shift, and Lock modifier names refer explicitly to the corresponding modifier bits; there is no additional interpretation of KeySyms for these modifiers. Because it is possible to associate arbitrary KeySyms with modifiers, the set of key modifiers is extensible. The "@" <keysym> syntax means any modifier bit whose corresponding KeyCode contains the specified KeySym name. A modifier_list/KeySym combination in a translation matches a modifiers/KeyCode combination in an event in the following ways: If a colon (:) is used, the Intrinsics call the display's with the KeyCode and modifiers. To match, (modifiers & ~modifiers_return) must equal modifier_list, and keysym_return must equal the given KeySym. If (:) is not used, the Intrinsics mask off all don't-care bits from the modifiers. This value must be equal to modifier_list. Then, for each possible combination of don't-care modifiers in the modifier list, the Intrinsics call the display's with the KeyCode and that combination ORed with the cared-about modifier bits from the event. Keysym_return must match the KeySym in the translation. Event Types The event-type field describes XEvent types. In addition to the standard Xlib symbolic event type names, the following event type synonyms are defined: Type Meaning Key KeyPress KeyDown KeyPress KeyUp KeyRelease BtnDown ButtonPress BtnUp ButtonRelease Motion MotionNotify PtrMoved MotionNotify MouseMoved MotionNotify Enter EnterNotify EnterWindow EnterNotify Leave LeaveNotify LeaveWindow LeaveNotify FocusIn FocusIn FocusOut FocusOut Keymap KeymapNotify Expose Expose GrExp GraphicsExpose NoExp NoExpose Visible VisibilityNotify Create CreateNotify Destroy DestroyNotify Unmap UnmapNotify Map MapNotify MapReq MapRequest Reparent ReparentNotify Configure ConfigureNotify ConfigureReq ConfigureRequest Grav GravityNotify ResReq ResizeRequest Circ CirculateNotify CircReq CirculateRequest Prop PropertyNotify SelClr SelectionClear SelReq SelectionRequest Select SelectionNotify Clrmap ColormapNotify Message ClientMessage Mapping MappingNotify The supported abbreviations are: Abbreviation Event Type Including Ctrl KeyPress with Control modifier Meta KeyPress with Meta modifier Shift KeyPress with Shift modifier Btn1Down ButtonPress with Button1 detail Btn1Up ButtonRelease with Button1 detail Btn2Down ButtonPress with Button2 detail Btn2Up ButtonRelease with Button2 detail Btn3Down ButtonPress with Button3 detail Btn3Up ButtonRelease with Button3 detail Btn4Down ButtonPress with Button4 detail Btn4Up ButtonRelease with Button4 detail Btn5Down ButtonPress with Button5 detail Btn5Up ButtonRelease with Button5 detail BtnMotion MotionNotify with any button modifier Btn1Motion MotionNotify with Button1 modifier Btn2Motion MotionNotify with Button2 modifier Btn3Motion MotionNotify with Button3 modifier Btn4Motion MotionNotify with Button4 modifier Btn5Motion MotionNotify with Button5 modifier The detail field is event-specific and normally corresponds to the detail field of the corresponding event as described by X Window System Protocol, Section 11. The detail field is supported for the following event types: KeyPress KeySym from event detail (keycode) KeyRelease KeySym from event detail (keycode) ButtonPress button from event detail ButtonRelease button from event detail MotionNotify event detail EnterNotify event mode LeaveNotify event mode FocusIn event mode FocusOut event mode PropertyNotify atom SelectionClear selection SelectionRequest selection SelectionNotify selection ClientMessage type MappingNotify request If the event type is KeyPress or KeyRelease, the detail field specifies a KeySym name in standard format which is matched against the event as described above, for example, <Key>A. For the PropertyNotify, SelectionClear, SelectionRequest, SelectionNotify, and ClientMessage events the detail field is specified as an atom name; for example, <Message>WM_PROTOCOLS. For the MotionNotify, EnterNotify, LeaveNotify, FocusIn, FocusOut, and MappingNotify events, either the symbolic constants as defined by X Window System Protocol, Section 11, or the numeric values may be specified. If no detail field is specified, then any value in the event detail is accepted as a match. A KeySym can be specified as any of the standard KeySym names, a hexadecimal number prefixed with "0x" or "0X", an octal number prefixed with "0", or a decimal number. A KeySym expressed as a single digit is interpreted as the corresponding Latin 1 KeySym, for example, "0" is the KeySym XK_0. Other single character KeySyms are treated as literal constants from Latin 1, for example, "!" is treated as 0x21. Standard KeySym names are as defined in <X11/keysymdef.h> with the "XK_" prefix removed. Canonical Representation Every translation table has a unique, canonical text representation. This representation is passed to a widget's display_accelerator procedure to describe the accelerators installed on that widget. The canonical representation of a translation table is (see also "Syntax") translationTable = { production } production = lhs ":" rhs "\\n" lhs =event { "," event } event =[modifier_list] "<"event_type">" [ "(" count["+"] ")" ] {detail} modifier_list = ["!"] [":"] {modifier} modifier = ["˜"] modifier_name count =("1" | "2" | "3" | "4" | ...) modifier_name = "@" <keysym> | <see canonical modifier names below> event_type = <see canonical event types below> detail =<event-specific details> rhs ={ name "(" [params] ")" } name =namechar { namechar } namechar = { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" } params =string {"," string} string =quoted_string quoted_string = " {<Latin 1 character> | escape_char} ["\\\\" ] " escape_char = "\\"" The canonical modifier names are Ctrl Mod1 Button1 Shift Mod2 Button2 Lock Mod3 Button3 Mod4 Button4 Mod5 Button5 The canonical event types are KeyPress KeyRelease ButtonPress ButtonRelease MotionNotify EnterNotify LeaveNotify FocusIn FocusOut KeymapNotify Expose GraphicsExpose, NoExpose VisibilityNotify CreateNotify DestroyNotify UnmapNotify MapNotify MapRequest ReparentNotify ConfigureNotify ConfigureRequest GravityNotify ResizeRequest CirculateNotify CirculateRequest PropertyNotify SelectionClear SelectionRequest SelectionNotify ColormapNotify ClientMessage Examples Always put more specific events in the table before more general ones: Shift <Btn1Down> : twas()\n\ <Btn1Down> : brillig() For double-click on Button1 Up with Shift, use this specification: Shift<Btn1Up>(2) : and() This is equivalent to the following line with appropriate timers set between events: Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down>,Shift<Btn1Up> : and() For double-click on Button1 Down with Shift, use this specification: Shift<Btn1Down>(2) : the() This is equivalent to the following line with appropriate timers set between events: Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down> : the() Mouse motion is always discarded when it occurs between events in a table where no motion event is specified: <Btn1Down>,<Btn1Up> : slithy() This is taken, even if the pointer moves a bit between the down and up events. Similarly, any motion event specified in a translation matches any number of motion events. If the motion event causes an action procedure to be invoked, the procedure is invoked after each motion event. If an event sequence consists of a sequence of events that is also a noninitial subsequence of another translation, it is not taken if it occurs in the context of the longer sequence. This occurs mostly in sequences like the following: <Btn1Down>,<Btn1Up> : toves()\n\ <Btn1Up> : did() The second translation is taken only if the button release is not preceded by a button press or if there are intervening events between the press and the release. Be particularly aware of this when using the repeat notation, above, with buttons and keys, because their expansion includes additional events; and when specifying motion events, because they are implicitly included between any two other events. In particular, pointer motion and double-click translations cannot coexist in the same translation table. For single click on Button1 Up with Shift and Meta, use this specification: Shift Meta <Btn1Down>, Shift Meta<Btn1Up>: gyre() For multiple clicks greater or equal to a minimum number, a plus sign (+) may be appended to the final (rightmost) count in an event sequence. The actions will be invoked on the count-th click and each subsequent one arriving within the multi-click time interval. For example: Shift <Btn1Up>(2+) : and() To indicate EnterNotify with any modifiers, use this specification: <Enter> : gimble() To indicate EnterNotify with no modifiers, use this specification: None <Enter> : in() To indicate EnterNotify with Button1 Down and Button2 Up and "don't care" about the other modifiers, use this specification: Button1 ~Button2 <Enter> : the() To indicate EnterNotify with Button1 down and Button2 down exclusively, use this specification: ! Button1 Button2 <Enter> : wabe() You do not need to use a tilde (~) with an exclamation point (!). function>PropertyNotify, SelectionClear, SelectionRequest, SelectionNotify, and ClientMessage events the detail field is specified as an atom name; for example, <MeslibXt-1.1.5/specs/Makefile.am000064401431060000012000000011631252061032400162260ustar00alancstaff00002660200006 if ENABLE_SPECS # Main DocBook/XML files (DOCTYPE book) docbook = intrinsics.xml # Included chapters, appendix, images chapters = \ acknowledgement.xml \ preface.xml \ CH01.xml \ CH02.xml \ CH03.xml \ CH04.xml \ CH05.xml \ CH06.xml \ CH07.xml \ CH08.xml \ CH09.xml \ CH10.xml \ CH11.xml \ CH12.xml \ CH13.xml \ appA.xml \ appB.xml \ appC.xml \ appD.xml \ appE.xml \ appF.xml # The location where the DocBook/XML files and their generated formats are installed shelfdir = $(docdir) # Generate DocBook/XML output formats with or without stylesheets include $(top_srcdir)/docbook.am endif ENABLE_SPECS libXt-1.1.5/specs/CH05.xml000064401431060000012000000744151252061032400153650ustar00alancstaff00002660200006 Pop-Up Widgets Pop-up widgets are used to create windows outside of the window hierarchy defined by the widget tree. Each pop-up child has a window that is a descendant of the root window, so that the pop-up window is not clipped by the pop-up widget's parent window. Therefore, pop-ups are created and attached differently to their widget parent than normal widget children. A parent of a pop-up widget does not actively manage its pop-up children; in fact, it usually does not operate upon them in any way. The popup_list field in the CorePart structure contains the list of its pop-up children. This pop-up list exists mainly to provide the proper place in the widget hierarchy for the pop-up to get resources and to provide a place for to look for all extant children. A composite widget can have both normal and pop-up children. A pop-up can be popped up from almost anywhere, not just by its parent. The term child always refers to a normal, geometry-managed widget on the composite widget's list of children, and the term pop-up child always refers to a widget on the pop-up list. Pop-Up Widget Types There are three kinds of pop-up widgets: Modeless pop-ups A modeless pop-up (for example, a dialog box that does not prevent continued interaction with the rest of the application) can usually be manipulated by the window manager and looks like any other application window from the user's point of view. The application main window itself is a special case of a modeless pop-up. Modal pop-ups A modal pop-up (for example, a dialog box that requires user input to continue) can sometimes be manipulated by the window manager, and except for events that occur in the dialog box, it disables user-event distribution to the rest of the application. Spring-loaded pop-ups A spring-loaded pop-up (for example, a menu) can seldom be manipulated by the window manager, and except for events that occur in the pop-up or its descendants, it disables user-event distribution to all other applications. Modal pop-ups and spring-loaded pop-ups are very similar and should be coded as if they were the same. In fact, the same widget (for example, a ButtonBox or Menu widget) can be used both as a modal pop-up and as a spring-loaded pop-up within the same application. The main difference is that spring-loaded pop-ups are brought up with the pointer and, because of the grab that the pointer button causes, require different processing by the Intrinsics. Furthermore, all user input remap events occurring outside the spring-loaded pop-up (e.g., in a descendant) are also delivered to the spring-loaded pop-up after they have been dispatched to the appropriate descendant, so that, for example, button-up can take down a spring-loaded pop-up no matter where the button-up occurs. Any kind of pop-up, in turn, can pop up other widgets. Modal and spring-loaded pop-ups can constrain user events to the most recent such pop-up or allow user events to be dispatched to any of the modal or spring-loaded pop-ups currently mapped. Regardless of their type, all pop-up widget classes are responsible for communicating with the X window manager and therefore are subclasses of one of the Shell widget classes. Creating a Pop-Up Shell For a widget to be popped up, it must be the child of a pop-up shell widget. None of the Intrinsics-supplied shells will simultaneously manage more than one child. Both the shell and child taken together are referred to as the pop-up. When you need to use a pop-up, you always refer to the pop-up by the pop-up shell, not the child. To create a pop-up shell, use . Widget XtCreatePopupShell String name WidgetClass widget_class Widget parent ArgList args Cardinal num_args name Specifies the instance name for the created shell widget. widget_class Specifies the widget class pointer for the created shell widget. parent Specifies the parent widget. Must be of class Core or any subclass thereof. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function ensures that the specified class is a subclass of Shell and, rather than using insert_child to attach the widget to the parent's children list, attaches the shell to the parent's popup_list directly. The screen resource for this widget is determined by first scanning args for the XtNscreen argument. If no XtNscreen argument is found, the resource database associated with the parent's screen is queried for the resource name.screen, class Class.Screen where Class is the class_name field from the CoreClassPart of the specified widget_class. If this query fails, the parent's screen is used. Once the screen is determined, the resource database associated with that screen is used to retrieve all remaining resources for the widget not specified in args. A spring-loaded pop-up invoked from a translation table via must already exist at the time that the translation is invoked, so the translation manager can find the shell by name. Pop-ups invoked in other ways can be created when the pop-up actually is needed. This delayed creation of the shell is particularly useful when you pop up an unspecified number of pop-ups. You can look to see if an appropriate unused shell (that is, not currently popped up) exists and create a new shell if needed. To create a pop-up shell using varargs lists, use . Widget XtVaCreatePopupShell String name WidgetClass widget_class Widget parent ... name Specifies the instance name for the created shell widget. widget_class Specifies the widget class pointer for the created shell widget. parent Specifies the parent widget. Must be of class Core or any subclass thereof. ... Specifies the variable argument list to override any other resource specifications. is identical in function to with the args and num_args parameters replaced by a varargs list as described in Section 2.5.1. Creating Pop-Up Children Once a pop-up shell is created, the single child of the pop-up shell can be created either statically or dynamically. At startup, an application can create the child of the pop-up shell, which is appropriate for pop-up children composed of a fixed set of widgets. The application can change the state of the subparts of the pop-up child as the application state changes. For example, if an application creates a static menu, it can call (or, in general, ) on any of the buttons that make up the menu. Creating the pop-up child early means that pop-up time is minimized, especially if the application calls on the pop-up shell at startup. When the menu is needed, all the widgets that make up the menu already exist and need only be mapped. The menu should pop up as quickly as the X server can respond. Alternatively, an application can postpone the creation of the child until it is needed, which minimizes application startup time and allows the pop-up child to reconfigure itself each time it is popped up. In this case, the pop-up child creation routine might poll the application to find out if it should change the sensitivity of any of its subparts. Pop-up child creation does not map the pop-up, even if you create the child and call on the pop-up shell. All shells have pop-up and pop-down callbacks, which provide the opportunity either to make last-minute changes to a pop-up child before it is popped up or to change it after it is popped down. Note that excessive use of pop-up callbacks can make popping up occur more slowly. Mapping a Pop-Up Widget Pop-ups can be popped up through several mechanisms: A call to or . One of the supplied callback procedures , , or . The standard translation action . Some of these routines take an argument of type XtGrabKind, which is defined as typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind; The create_popup_child_proc procedure pointer in the shell widget instance record is of type . void *XtCreatePopupChildProc Widget w w Specifies the shell widget being popped up. To map a pop-up from within an application, use . void XtPopup Widget popup_shell XtGrabKind grab_kind popup_shell Specifies the shell widget. grab_kind Specifies the way in which user events should be constrained. The function performs the following: Calls to ensure popup_shell's class is a subclass of shellWidgetClass. Raises the window and returns if the shell's popped_up field is already True. Calls the callback procedures on the shell's popup_callback list, specifying a pointer to the value of grab_kind as the call_data argument. Sets the shell popped_up field to True, the shell spring_loaded field to False, and the shell grab_kind field from grab_kind. If the shell's create_popup_child_proc field is non-NULL, calls it with popup_shell as the parameter. If grab_kind is either XtGrabNonexclusive or XtGrabExclusive, it calls XtAddGrab(popup_shell, (grab_kind == XtGrabExclusive), False) Calls with popup_shell specified. Calls XMapRaised with the window of popup_shell. To map a spring-loaded pop-up from within an application, use . void XtPopupSpringLoaded Widget popup_shell popup_shell Specifies the shell widget to be popped up. The function performs exactly as except that it sets the shell spring_loaded field to True and always calls with exclusive True and spring-loaded True. To map a pop-up from a given widget's callback list, you also can register one of the , , or convenience routines as callbacks, using the pop-up shell widget as the client data. void XtCallbackNone Widget w XtPointer client_data XtPointer call_data w Specifies the widget. client_data Specifies the pop-up shell. call_data Specifies the callback data argument, which is not used by this procedure. void XtCallbackNonexclusive Widget w XtPointer client_data XtPointer call_data w Specifies the widget. client_data Specifies the pop-up shell. call_data Specifies the callback data argument, which is not used by this procedure. void XtCallbackExclusive Widget w XtPointer client_data XtPointer call_data w Specifies the widget. client_data Specifies the pop-up shell. call_data Specifies the callback data argument, which is not used by this procedure. The , , and functions call with the shell specified by the client_data argument and grab_kind set as the name specifies. , , and specify XtGrabNone, XtGrabNonexclusive, and XtGrabExclusive, respectively. Each function then sets the widget that executed the callback list to be insensitive by calling . Using these functions in callbacks is not required. In particular, an application must provide customized code for callbacks that create pop-up shells dynamically or that must do more than desensitizing the button. Within a translation table, to pop up a menu when a key or pointer button is pressed or when the pointer is moved into a widget, use , or its synonym, MenuPopup. From a translation writer's point of view, the definition for this translation action is void XtMenuPopup String shell_name shell_name Specifies the name of the shell widget to pop up. is known to the translation manager, which registers the corresponding built-in action procedure XtMenuPopupAction using specifying owner_events True, event_mask ButtonPressMask | ButtonReleaseMask, and pointer_mode and keyboard_mode GrabModeAsync. If is invoked on ButtonPress, it calls on the specified shell widget. If is invoked on KeyPress or EnterWindow, it calls on the specified shell widget with grab_kind set to XtGrabNonexclusive. Otherwise, the translation manager generates a warning message and ignores the action. tries to find the shell by searching the widget tree starting at the widget in which it is invoked. If it finds a shell with the specified name in the pop-up children of that widget, it pops up the shell with the appropriate parameters. Otherwise, it moves up the parent chain to find a pop-up child with the specified name. If gets to the application top-level shell widget and has not found a matching shell, it generates a warning and returns immediately. Unmapping a Pop-Up Widget Pop-ups can be popped down through several mechanisms: A call to The supplied callback procedure The standard translation action To unmap a pop-up from within an application, use . void XtPopdown Widget popup_shell popup_shell Specifies the shell widget to pop down. The function performs the following: Calls to ensure popup_shell's class is a subclass of shellWidgetClass. Checks that the popped_up field of popup_shell is True; otherwise, it returns immediately. Unmaps popup_shell's window and, if override_redirect is False, sends a synthetic UnmapNotify event as specified by the Inter-Client Communication Conventions Manual. If popup_shell's grab_kind is either XtGrabNonexclusive or XtGrabExclusive, it calls . Sets popup_shell's popped_up field to False. Calls the callback procedures on the shell's popdown_callback list, specifying a pointer to the value of the shell's grab_kind field as the call_data argument. To pop down a pop-up from a callback list, you may use the callback . void XtCallbackPopdown Widget w XtPointer client_data XtPointer call_data w Specifies the widget. client_data Specifies a pointer to the XtPopdownID structure. call_data Specifies the callback data argument, which is not used by this procedure. The function casts the client_data parameter to a pointer of type XtPopdownID. typedef struct { Widget shell_widget; Widget enable_widget; } XtPopdownIDRec, *XtPopdownID; The shell_widget is the pop-up shell to pop down, and the enable_widget is usually the widget that was used to pop it up in one of the pop-up callback convenience procedures. calls with the specified shell_widget and then calls to resensitize enable_widget. Within a translation table, to pop down a spring-loaded menu when a key or pointer button is released or when the pointer is moved into a widget, use or its synonym, MenuPopdown. From a translation writer's point of view, the definition for this translation action is void XtMenuPopdown String shell_name shell_name Specifies the name of the shell widget to pop down. If a shell name is not given, calls with the widget for which the translation is specified. If shell_name is specified in the translation table, tries to find the shell by looking up the widget tree starting at the widget in which it is invoked. If it finds a shell with the specified name in the pop-up children of that widget, it pops down the shell; otherwise, it moves up the parent chain to find a pop-up child with the specified name. If gets to the application top-level shell widget and cannot find a matching shell, it generates a warning and returns immediately. d='XtPopup' xrefstyle='select: title'/> with the shell specified by the client_data argument and grab_kind set as the name specifies. Widget Instantiation A hierarchy of widget instances constitutes a widget tree. The shell widget returned by is the root of the widget tree instance. The widgets with one or more children are the intermediate nodes of that tree, and the widgets with no children of any kind are the leaves of the widget tree. With the exception of pop-up children (see ), this widget tree instance defines the associated X Window tree. Widgets can be either composite or primitive. Both kinds of widgets can contain children, but the Intrinsics provide a set of management mechanisms for constructing and interfacing between composite widgets, their children, and other clients. Composite widgets, that is, members of the class compositeWidgetClass, are containers for an arbitrary, but widget implementation-defined, collection of children, which may be instantiated by the composite widget itself, by other clients, or by a combination of the two. Composite widgets also contain methods for managing the geometry (layout) of any child widget. Under unusual circumstances, a composite widget may have zero children, but it usually has at least one. By contrast, primitive widgets that contain children typically instantiate specific children of known classes themselves and do not expect external clients to do so. Primitive widgets also do not have general geometry management methods. In addition, the Intrinsics recursively perform many operations (for example, realization and destruction) on composite widgets and all their children. Primitive widgets that have children must be prepared to perform the recursive operations themselves on behalf of their children. A widget tree is manipulated by several Intrinsics functions. For example, traverses the tree downward and recursively realizes all pop-up widgets and children of composite widgets. traverses the tree downward and destroys all pop-up widgets and children of composite widgets. The functions that fetch and modify resources traverse the tree upward and determine the inheritance of resources from a widget's ancestors. traverses the tree up one level and calls the geometry manager that is responsible for a widget child's geometry. To facilitate upward traversal of the widget tree, each widget has a pointer to its parent widget. The Shell widget that returns has a parent pointer of NULL. To facilitate downward traversal of the widget tree, the children field of each composite widget is a pointer to an array of child widgets, which includes all normal children created, not just the subset of children that are managed by the composite widget's geometry manager. Primitive widgets that instantiate children are entirely responsible for all operations that require downward traversal below themselves. In addition, every widget has a pointer to an array of pop-up children. Initializing the X Toolkit Before an application can call any Intrinsics function other than XtSetLanguageProc and , it must initialize the Intrinsics by using , which initializes the Intrinsics internals , which initializes the per-application state or , which initializes the per-display state , which creates the root of a widget tree Or an application can call the convenience procedure , which combines the functions of the preceding procedures. An application wishing to use the ANSI C locale mechanism should call XtSetLanguageProc prior to calling , , , or . Multiple instances of X Toolkit applications may be implemented in a single address space. Each instance needs to be able to read input and dispatch events independently of any other instance. Further, an application instance may need multiple display connections to have widgets on multiple displays. From the application's point of view, multiple display connections usually are treated together as a single unit for purposes of event dispatching. To accommodate both requirements, the Intrinsics define application contexts, each of which provides the information needed to distinguish one application instance from another. The major component of an application context is a list of one or more X Display pointers for that application. The Intrinsics handle all display connections within a single application context simultaneously, handling input in a round-robin fashion. The application context type XtAppContext is opaque to clients. To initialize the Intrinsics internals, use . void XtToolkitInitialize If was previously called, it returns immediately. When is called before , the latter is protected against simultaneous activation by multiple threads. To create an application context, use . XtAppContext XtCreateApplicationContext The function returns an application context, which is an opaque type. Every application must have at least one application context. To destroy an application context and close any remaining display connections in it, use . void XtDestroyApplicationContext XtAppContext app_context app_context Specifies the application context. The function destroys the specified application context. If called from within an event dispatch (for example, in a callback procedure), does not destroy the application context until the dispatch is complete. To get the application context in which a given widget was created, use . XtAppContext XtWidgetToApplicationContext Widget w w Specifies the widget for which you want the application context. Must be of class Object or any subclass thereof. The function returns the application context for the specified widget. To initialize a display and add it to an application context, use . void XtDisplayInitialize XtAppContext app_context Display * display String application_name String application_class XrmOptionDescRec * options Cardinal num_options int * argc String * argv app_context Specifies the application context. display Specifies a previously opened display connection. Note that a single display connection can be in at most one application context. application_name Specifies the name of the application instance. application_class Specifies the class name of this application, which is usually the generic name for all instances of this application. options Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to XrmParseCommand. For further information, see Parsing Command Line Options in Xlib — C Language X Interface and of this specification. num_options Specifies the number of entries in the options list. argc Specifies a pointer to the number of command line parameters. argv Specifies the list of command line parameters. The function retrieves the language string to be used for the specified display (see ), calls the language procedure (if set) with that language string, builds the resource database for the default screen, calls the Xlib XrmParseCommand function to parse the command line, and performs other per-display initialization. After XrmParseCommand has been called, argc and argv contain only those parameters that were not in the standard option table or in the table specified by the options argument. If the modified argc is not zero, most applications simply print out the modified argv along with a message listing the allowable options. On POSIX-based systems, the application name is usually the final component of argv[0]. If the synchronous resource is True, calls the Xlib XSynchronize function to put Xlib into synchronous mode for this display connection and any others currently open in the application context. See and for details on the application_name, application_class, options, and num_options arguments. calls XrmSetDatabase to associate the resource database of the default screen with the display before returning. To open a display, initialize it, and then add it to an application context, use . Display *XtOpenDisplay XtAppContext app_context String display_string String application_name String application_class XrmOptionDescRec * options Cardinal num_options int * argc String * argv app_context Specifies the application context. display_string Specifies the display string, or NULL. application_name Specifies the name of the application instance, or NULL. application_class Specifies the class name of this application, which is usually the generic name for all instances of this application. options Specifies how to parse the command line for any application-specific resources. The options argument is passed as a parameter to XrmParseCommand. num_options Specifies the number of entries in the options list. argc Specifies a pointer to the number of command line parameters. argv Specifies the list of command line parameters. The function calls XOpenDisplay with the specified display_string. If display_string is NULL, uses the current value of the \-display option specified in argv. If no display is specified in argv, the user's default display is retrieved from the environment. On POSIX-based systems, this is the value of the DISPLAY environment variable. If this succeeds, then calls and passes it the opened display and the value of the \-name option specified in argv as the application name. If no \-name option is specified and application_name is non-NULL, application_name is passed to . If application_name is NULL and if the environment variable RESOURCE_NAME is set, the value of RESOURCE_NAME is used. Otherwise, the application name is the name used to invoke the program. On implementations that conform to ANSI C Hosted Environment support, the application name will be argv[0] less any directory and file type components, that is, the final component of argv[0], if specified. If argv[0] does not exist or is the empty string, the application name is ``main''. returns the newly opened display or NULL if it failed. See for information regarding the use of in multiple threads. To close a display and remove it from an application context, use . void XtCloseDisplay Display * display display Specifies the display. The function calls XCloseDisplay with the specified display as soon as it is safe to do so. If called from within an event dispatch (for example, a callback procedure), does not close the display until the dispatch is complete. Note that applications need only call if they are to continue executing after closing the display; otherwise, they should call . See for information regarding the use of in multiple threads. Establishing the Locale Resource databases are specified to be created in the current process locale. During display initialization prior to creating the per-screen resource database, the Intrinsics will call out to a specified application procedure to set the locale according to options found on the command line or in the per-display resource specifications. The callout procedure provided by the application is of type XtLanguageProc. typedef String (*XtLanguageProc) Display display String language XtPointer client_data display Passes the display. language Passes the initial language value obtained from the command line or server per-display resource specifications. client_data Passes the additional client data specified in the call to XtSetLanguageProc. The language procedure allows an application to set the locale to the value of the language resource determined by . The function returns a new language string that will be subsequently used by to establish the path for loading resource files. The returned string will be copied by the Intrinsics into new memory. Initially, no language procedure is set by the Intrinsics. To set the language procedure for use by , use XtSetLanguageProc. XtLanguageProc XtSetLanguageProc XtAppContext app_context XtLanguageProc proc XtPointer client_data app_context Specifies the application context in which the language procedure is to be used, or NULL. proc Specifies the language procedure. client_data Specifies additional client data to be passed to the language procedure when it is called. XtSetLanguageProc sets the language procedure that will be called from for all subsequent Displays initialized in the specified application context. If app_context is NULL, the specified language procedure is registered in all application contexts created by the calling process, including any future application contexts that may be created. If proc is NULL, a default language procedure is registered. XtSetLanguageProc returns the previously registered language procedure. If a language procedure has not yet been registered, the return value is unspecified, but if this return value is used in a subsequent call to XtSetLanguageProc, it will cause the default language procedure to be registered. The default language procedure does the following: Sets the locale according to the environment. On ANSI C-based systems this is done by calling setlocale( LC_ALL, language ). If an error is encountered, a warning message is issued with . Calls XSupportsLocale to verify that the current locale is supported. If the locale is not supported, a warning message is issued with and the locale is set to ``C''. Calls XSetLocaleModifiers specifying the empty string. Returns the value of the current locale. On ANSI C-based systems this is the return value from a final call to setlocale( LC_ALL, NULL ). A client wishing to use this mechanism to establish locale can do so by calling XtSetLanguageProc prior to , as in the following example. Widget top; XtSetLanguageProc(NULL, NULL, NULL); top = XtOpenApplication(...); ... Loading the Resource Database The function first determines the language string to be used for the specified display. It then creates a resource database for the default screen of the display by combining the following sources in order, with the entries in the first named source having highest precedence: Application command line (argc, argv). Per-host user environment resource file on the local host. Per-screen resource specifications from the server. Per-display resource specifications from the server or from the user preference file on the local host. Application-specific user resource file on the local host. Application-specific class resource file on the local host. When the resource database for a particular screen on the display is needed (either internally, or when is called), it is created in the following manner using the sources listed above in the same order: A temporary database, the ``server resource database'', is created from the string returned by XResourceManagerString or, if XResourceManagerString returns NULL, the contents of a resource file in the user's home directory. On POSIX-based systems, the usual name for this user preference resource file is $HOME/.Xdefaults. If a language procedure has been set, first searches the command line for the option ``-xnlLanguage'', or for a -xrm option that specifies the xnlLanguage/XnlLanguage resource, as specified by Section 2.4. If such a resource is found, the value is assumed to be entirely in XPCS, the X Portable Character Set. If neither option is specified on the command line, queries the server resource database (which is assumed to be entirely in XPCS) for the resource name.xnlLanguage, class Class.XnlLanguage where name and Class are the application_name and application_class specified to . The language procedure is then invoked with the resource value if found, else the empty string. The string returned from the language procedure is saved for all future references in the Intrinsics that require the per-display language string. The screen resource database is initialized by parsing the command line in the manner specified by Section 2.4. If a language procedure has not been set, the initial database is then queried for the resource name.xnlLanguage, class Class.XnlLanguage as specified above. If this database query fails, the server resource database is queried; if this query also fails, the language is determined from the environment; on POSIX-based systems, this is done by retrieving the value of the LANG environment variable. If no language string is found, the empty string is used. This language string is saved for all future references in the Intrinsics that require the per-display language string. After determining the language string, the user's environment resource file is then merged into the initial resource database if the file exists. This file is user-, host-, and process-specific and is expected to contain user preferences that are to override those specifications in the per-display and per-screen resources. On POSIX-based systems, the user's environment resource file name is specified by the value of the XENVIRONMENT environment variable. If this environment variable does not exist, the user's home directory is searched for a file named .Xdefaults-host, where host is the host name of the machine on which the application is running. The per-screen resource specifications are then merged into the screen resource database, if they exist. These specifications are the string returned by XScreenResourceString for the respective screen and are owned entirely by the user. Next, the server resource database created earlier is merged into the screen resource database. The server property, and corresponding user preference file, are owned and constructed entirely by the user. The application-specific user resource file from the local host is then merged into the screen resource database. This file contains user customizations and is stored in a directory owned by the user. Either the user or the application or both can store resource specifications in the file. Each should be prepared to find and respect entries made by the other. The file name is found by calling XrmSetDatabase with the current screen resource database, after preserving the original display-associated database, then calling with the parameters (display, NULL, NULL, NULL, path, NULL, 0, NULL), where path is defined in an operating-system-specific way. On POSIX-based systems, path is defined to be the value of the environment variable XUSERFILESEARCHPATH if this is defined. If XUSERFILESEARCHPATH is not defined, an implementation-dependent default value is used. This default value is constrained in the following manner: If the environment variable XAPPLRESDIR is not defined, the default XUSERFILESEARCHPATH must contain at least six entries. These entries must contain $HOME as the directory prefix, plus the following substitutions: 1. %C, %N, %L or %C, %N, %l, %t, %c 2. %C, %N, %l 3. %C, %N 4. %N, %L or %N, %l, %t, %c 5. %N, %l 6. %N The order of these six entries within the path must be as given above. The order and use of substitutions within a given entry are implementation-dependent. If XAPPLRESDIR is defined, the default XUSERFILESEARCHPATH must contain at least seven entries. These entries must contain the following directory prefixes and substitutions: 1. $XAPPLRESDIR with %C, %N, %L or %C, %N, %l, %t, %c 2. $XAPPLRESDIR with %C, %N, %l 3. $XAPPLRESDIR with %C, %N 4. $XAPPLRESDIR with %N, %L or %N, %l, %t, %c 5. $XAPPLRESDIR with %N, %l 6. $XAPPLRESDIR with %N 7. $HOME with %N The order of these seven entries within the path must be as given above. The order and use of substitutions within a given entry are implementation-dependent. Last, the application-specific class resource file from the local host is merged into the screen resource database. This file is owned by the application and is usually installed in a system directory when the application is installed. It may contain sitewide customizations specified by the system manager. The name of the application class resource file is found by calling with the parameters (display, ``app-defaults'', NULL, NULL, NULL, NULL, 0, NULL). This file is expected to be provided by the developer of the application and may be required for the application to function properly. A simple application that wants to be assured of having a minimal set of resources in the absence of its class resource file can declare fallback resource specifications with . Note that the customization substitution string is retrieved dynamically by so that the resolved file name of the application class resource file can be affected by any of the earlier sources for the screen resource database, even though the contents of the class resource file have lowest precedence. After calling , the original display-associated database is restored. To obtain the resource database for a particular screen, use . XrmDatabase XtScreenDatabase Screen * screen screen Specifies the screen whose resource database is to be returned. The function returns the fully merged resource database as specified above, associated with the specified screen. If the specified screen does not belong to a Display initialized by , the results are undefined. To obtain the default resource database associated with a particular display, use . XrmDatabase XtDatabase Display * display display Specifies the display. The function is equivalent to XrmGetDatabase. It returns the database associated with the specified display, or NULL if a database has not been set. To specify a default set of resource values that will be used to initialize the resource database if no application-specific class resource file is found (the last of the six sources listed above), use . void XtAppSetFallbackResources XtAppContext * app_context String * specification_list app_context Specifies the application context in which the fallback specifications will be used. specification_list Specifies a NULL-terminated list of resource specifications to preload the database, or NULL. Each entry in specification_list points to a string in the format of XrmPutLineResource. Following a call to , when a resource database is being created for a particular screen and the Intrinsics are not able to find or read an application-specific class resource file according to the rules given above and if specification_list is not NULL, the resource specifications in specification_list will be merged into the screen resource database in place of the application-specific class resource file. is not required to copy specification_list; the caller must ensure that the contents of the list and of the strings addressed by the list remain valid until all displays are initialized or until is called again. The value NULL for specification_list removes any previous fallback resource specification for the application context. The intended use for fallback resources is to provide a minimal number of resources that will make the application usable (or at least terminate with helpful diagnostic messages) when some problem exists in finding and loading the application defaults file. Parsing the Command Line The function first parses the command line for the following options: -display Specifies the display name for XOpenDisplay. -name Sets the resource name prefix, which overrides the application name passed to . -xnllanguage Specifies the initial language string for establishing locale and for finding application class resource files. has a table of standard command line options that are passed to XrmParseCommand for adding resources to the resource database, and it takes as a parameter additional application-specific resource abbreviations. The format of this table is described in Section 15.9 in Xlib — C Language X Interface. typedef enum { XrmoptionNoArg, /* Value is specified in OptionDescRec.value */ XrmoptionIsArg, /* Value is the option string itself */ XrmoptionStickyArg, /* Value is characters immediately following option */ XrmoptionSepArg, /* Value is next argument in argv */ XrmoptionResArg, /* Use the next argument as input to XrmPutLineResource*/ XrmoptionSkipArg, /* Ignore this option and the next argument in argv */ XrmoptionSkipNArgs, /* Ignore this option and the next */ /* OptionDescRec.value arguments in argv */ XrmoptionSkipLine /* Ignore this option and the rest of argv */ } XrmOptionKind; typedef struct { char *option; /* Option name in argv */ char *specifier; /* Resource name (without application name) */ XrmOptionKind argKind; /* Location of the resource value */ XPointer value; /* Value to provide if XrmoptionNoArg */ } XrmOptionDescRec, *XrmOptionDescList; The standard table contains the following entries: Option String Resource Name Argument Kind Resource Value −background *background SepArg next argument −bd *borderColor SepArg next argument −bg *background SepArg next argument −borderwidth .borderWidth SepArg next argument −bordercolor *borderColor SepArg next argument −bw .borderWidth SepArg next argument −display .display SepArg next argument −fg *foreground SepArg next argument −fn *font SepArg next argument −font *font SepArg next argument −foreground *foreground SepArg next argument −geometry .geometry SepArg next argument −iconic .iconic NoArg "true" −name .name SepArg next argument −reverse .reverseVideo NoArg "on" −rv .reverseVideo NoArg "on" +rv .reverseVideo NoArg "off" −selectionTimeout .selectionTimeout SepArg next argument −synchronous .synchronous NoArg "on" +synchronous .synchronous NoArg "off" −title .title SepArg next argument −xnllanguage .xnlLanguage SepArg next argument −xrm next argument ResArg next argument −xtsessionID .sessionID SepArg next argument Note that any unique abbreviation for an option name in the standard table or in the application table is accepted. If reverseVideo is True, the values of XtDefaultForeground and XtDefaultBackground are exchanged for all screens on the Display. The value of the synchronous resource specifies whether or not Xlib is put into synchronous mode. If a value is found in the resource database during display initialization, makes a call to XSynchronize for all display connections currently open in the application context. Therefore, when multiple displays are initialized in the same application context, the most recent value specified for the synchronous resource is used for all displays in the application context. The value of the selectionTimeout resource applies to all displays opened in the same application context. When multiple displays are initialized in the same application context, the most recent value specified is used for all displays in the application context. The -xrm option provides a method of setting any resource in an application. The next argument should be a quoted string identical in format to a line in the user resource file. For example, to give a red background to all command buttons in an application named xmh, you can start it up as xmh -xrm 'xmh*Command.background: red' When it parses the command line, merges the application option table with the standard option table before calling the Xlib XrmParseCommand function. An entry in the application table with the same name as an entry in the standard table overrides the standard table entry. If an option name is a prefix of another option name, both names are kept in the merged table. The Intrinsics reserve all option names beginning with the characters ``-xt'' for future standard uses. Creating Widgets The creation of widget instances is a three-phase process: The widgets are allocated and initialized with resources and are optionally added to the managed subset of their parent. All composite widgets are notified of their managed children in a bottom-up traversal of the widget tree. The widgets create X windows, which then are mapped. To start the first phase, the application calls for all its widgets and adds some (usually, most or all) of its widgets to their respective parents' managed set by calling . To avoid an O(n2) creation process where each composite widget lays itself out each time a widget is created and managed, parent widgets are not notified of changes in their managed set during this phase. After all widgets have been created, the application calls with the top-level widget to execute the second and third phases. first recursively traverses the widget tree in a postorder (bottom-up) traversal and then notifies each composite widget with one or more managed children by means of its change_managed procedure. Notifying a parent about its managed set involves geometry layout and possibly geometry negotiation. A parent deals with constraints on its size imposed from above (for example, when a user specifies the application window size) and suggestions made from below (for example, when a primitive child computes its preferred size). One difference between the two can cause geometry changes to ripple in both directions through the widget tree. The parent may force some of its children to change size and position and may issue geometry requests to its own parent in order to better accommodate all its children. You cannot predict where anything will go on the screen until this process finishes. Consequently, in the first and second phases, no X windows are actually created, because it is likely that they will get moved around after creation. This avoids unnecessary requests to the X server. Finally, starts the third phase by making a preorder (top-down) traversal of the widget tree, allocates an X window to each widget by means of its realize procedure, and finally maps the widgets that are managed. Creating and Merging Argument Lists Many Intrinsics functions may be passed pairs of resource names and values. These are passed as an arglist, a pointer to an array of Arg structures, which contains typedef struct { String name; XtArgVal value; } Arg, *ArgList; where XtArgVal is as defined in Section 1.5. If the size of the resource is less than or equal to the size of an XtArgVal, the resource value is stored directly in value; otherwise, a pointer to it is stored in value. To set values in an ArgList, use . void XtSetArg Arg arg String name XtArgVal value arg Specifies the name/value pair to set. name Specifies the name of the resource. value Specifies the value of the resource if it will fit in an XtArgVal, else the address. The function is usually used in a highly stylized manner to minimize the probability of making a mistake; for example: Arg args[20]; int n; n = 0; XtSetArg(args[n], XtNheight, 100); n++; XtSetArg(args[n], XtNwidth, 200); n++; XtSetValues(widget, args, n); Alternatively, an application can statically declare the argument list and use : static Args args[] = { {XtNheight, (XtArgVal) 100}, {XtNwidth, (XtArgVal) 200}, }; XtSetValues(Widget, args, XtNumber(args)); Note that you should not use expressions with side effects such as auto-increment or auto-decrement within the first argument to . can be implemented as a macro that evaluates the first argument twice. To merge two arglist arrays, use . ArgList XtMergeArgLists ArgList args1 Cardinal num_args1 ArgList args2 Cardinal num_args2 args1 Specifies the first argument list. num_args1 Specifies the number of entries in the first argument list. args2 Specifies the second argument list. num_args2 Specifies the number of entries in the second argument list. The function allocates enough storage to hold the combined arglist arrays and copies them into it. Note that it does not check for duplicate entries. The length of the returned list is the sum of the lengths of the specified lists. When it is no longer needed, free the returned storage by using . All Intrinsics interfaces that require ArgList arguments have analogs conforming to the ANSI C variable argument list (traditionally called ``varargs'') calling convention. The name of the analog is formed by prefixing ``Va'' to the name of the corresponding ArgList procedure; e.g., . Each procedure named XtVasomething takes as its last arguments, in place of the corresponding ArgList/ Cardinal parameters, a variable parameter list of resource name and value pairs where each name is of type String and each value is of type XtArgVal. The end of the list is identified by a name entry containing NULL. Developers writing in the C language wishing to pass resource name and value pairs to any of these interfaces may use the ArgList and varargs forms interchangeably. Two special names are defined for use only in varargs lists: XtVaTypedArg and XtVaNestedList. #define XtVaTypedArg "XtVaTypedArg" If the name XtVaTypedArg is specified in place of a resource name, then the following four arguments are interpreted as a name/type/value/size tuple where name is of type String, type is of type String, value is of type XtArgVal, and size is of type int. When a varargs list containing XtVaTypedArg is processed, a resource type conversion (see ) is performed if necessary to convert the value into the format required by the associated resource. If type is XtRString, then value contains a pointer to the string and size contains the number of bytes allocated, including the trailing null byte. If type is not XtRString, then if size is less than or equal to sizeof(XtArgVal), the value should be the data cast to the type XtArgVal, otherwise value is a pointer to the data. If the type conversion fails for any reason, a warning message is issued and the list entry is skipped. #define XtVaNestedList "XtVaNestedList" If the name XtVaNestedList is specified in place of a resource name, then the following argument is interpreted as an XtVarArgsList value, which specifies another varargs list that is logically inserted into the original list at the point of declaration. The end of the nested list is identified with a name entry containing NULL. Varargs lists may nest to any depth. To dynamically allocate a varargs list for use with XtVaNestedList in multiple calls, use . typedef XtPointer XtVarArgsList; XtVarArgsList XtVaCreateArgsList XtPointer unused ... unused This argument is not currently used and must be specified as NULL. ... Specifies a variable parameter list of resource name and value pairs. The function allocates memory and copies its arguments into a single list pointer, which may be used with XtVaNestedList. The end of both lists is identified by a name entry containing NULL. Any entries of type XtVaTypedArg are copied as specified without applying conversions. Data passed by reference (including Strings) are not copied, only the pointers themselves; the caller must ensure that the data remain valid for the lifetime of the created varargs list. The list should be freed using when no longer needed. Use of resource files and of the resource database is generally encouraged over lengthy arglist or varargs lists whenever possible in order to permit modification without recompilation. Creating a Widget Instance To create an instance of a widget, use . Widget XtCreateWidget String name WidgetClass object_class Widget parent ArgList args Cardinal num_args name Specifies the resource instance name for the created widget, which is used for retrieving resources and, for that reason, should not be the same as any other widget that is a child of the same parent. object_class Specifies the widget class pointer for the created object. Must be objectClass or any subclass thereof. parent Specifies the parent widget. Must be of class Object or any subclass thereof. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function performs all the boilerplate operations of widget creation, doing the following in order: Checks to see if the class_initialize procedure has been called for this class and for all superclasses and, if not, calls those necessary in a superclass-to-subclass order. If the specified class is not coreWidgetClass or a subclass thereof, and the parent's class is a subclass of compositeWidgetClass and either no extension record in the parent's composite class part extension field exists with the record_type NULLQUARK or the accepts_objects field in the extension record is False, issues a fatal error; see and . If the specified class contains an extension record in the object class part extension field with record_type NULLQUARK and the allocate field is not NULL, the procedure is invoked to allocate memory for the widget instance. If the parent is a member of the class constraintWidgetClass, the procedure also allocates memory for the parent's constraints and stores the address of this memory into the constraints field. If no allocate procedure is found, the Intrinsics allocate memory for the widget and, when applicable, the constraints, and initializes the constraints field. Initializes the Core nonresource data fields self, parent, widget_class, being_destroyed, name, managed, window, visible, popup_list, and num_popups. Initializes the resource fields (for example, background_pixel) by using the CoreClassPart resource lists specified for this class and all superclasses. If the parent is a member of the class constraintWidgetClass, initializes the resource fields of the constraints record by using the ConstraintClassPart resource lists specified for the parent's class and all superclasses up to constraintWidgetClass. Calls the initialize procedures for the widget starting at the Object initialize procedure on down to the widget's initialize procedure. If the parent is a member of the class constraintWidgetClass, calls the ConstraintClassPart initialize procedures, starting at constraintWidgetClass on down to the parent's ConstraintClassPart initialize procedure. If the parent is a member of the class compositeWidgetClass, puts the widget into its parent's children list by calling its parent's insert_child procedure. For further information, see . To create an instance of a widget using varargs lists, use . Widget XtVaCreateWidget String name WidgetClass object_class Widget parent ... name Specifies the resource name for the created widget. object_class Specifies the widget class pointer for the created object. Must be objectClass or any subclass thereof. parent Specifies the parent widget. Must be of class Object or any subclass thereof. ... Specifies the variable argument list to override any other resource specifications. The procedure is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Creating an Application Shell Instance An application can have multiple top-level widgets, each of which specifies a unique widget tree that can potentially be on different screens or displays. An application uses to create independent widget trees. Widget XtAppCreateShell String name String application_class WidgetClass widget_class Display * display ArgList args Cardinal num_args name Specifies the instance name of the shell widget. If name is NULL, the application name passed to is used. application_class Specifies the resource class string to be used in place of the widget class_name string when widget_class is applicationShellWidgetClass or a subclass thereof. widget_class Specifies the widget class for the top-level widget (e.g., applicationShellWidgetClass ). display Specifies the display for the default screen and for the resource database used to retrieve the shell widget resources. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function creates a new shell widget instance as the root of a widget tree. The screen resource for this widget is determined by first scanning args for the XtNscreen argument. If no XtNscreen argument is found, the resource database associated with the default screen of the specified display is queried for the resource name.screen, class Class.Screen where Class is the specified application_class if widget_class is applicationShellWidgetClass or a subclass thereof. If widget_class is not application\%Shell\%Widget\%Class or a subclass, Class is the class_name field from the CoreClassPart of the specified widget_class. If this query fails, the default screen of the specified display is used. Once the screen is determined, the resource database associated with that screen is used to retrieve all remaining resources for the shell widget not specified in args. The widget name and Class as determined above are used as the leftmost (i.e., root) components in all fully qualified resource names for objects within this widget tree. If the specified widget class is a subclass of WMShell, the name and Class as determined above will be stored into the WM_CLASS property on the widget's window when it becomes realized. If the specified widget_class is applicationShellWidgetClass or a subclass thereof, the WM_COMMAND property will also be set from the values of the XtNargv and XtNargc resources. To create multiple top-level shells within a single (logical) application, you can use one of two methods: Designate one shell as the real top-level shell and create the others as pop-up children of it by using . Have all shells as pop-up children of an unrealized top-level shell. The first method, which is best used when there is a clear choice for what is the main window, leads to resource specifications like the following: xmail.geometry:... (the main window) xmail.read.geometry:... (the read window) xmail.compose.geometry:... (the compose window) The second method, which is best if there is no main window, leads to resource specifications like the following: xmail.headers.geometry:... (the headers window) xmail.read.geometry:... (the read window) xmail.compose.geometry:... (the compose window) To create a top-level widget that is the root of a widget tree using varargs lists, use . Widget XtVaAppCreateShell String name String application_class WidgetClass widget_class Display * display name Specifies the instance name of the shell widget. If name is NULL, the application name passed to is used. application_class Specifies the resource class string to be used in place of the widget class_name string when widget_class is applicationShellWidgetClass or a subclass thereof. widget_class Specifies the widget class for the top-level widget. display Specifies the display for the default screen and for the resource database used to retrieve the shell widget resources. ... Specifies the variable argument list to override any other resource specifications. The procedure is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Convenience Procedure to Initialize an Application To initialize the Intrinsics internals, create an application context, open and initialize a display, and create the initial root shell instance, an application may use or . Widget XtOpenApplication XtAppContext * app_context_return String application_class XrmOptionDescList options Cardinal num_options int * argc_in_out String * argv_in_out String * fallback_resources WidgetClass widget_class ArgList args Cardinal num_args app_context_return Returns the application context, if non-NULL. application_class Specifies the class name of the application. options Specifies the command line options table. num_options Specifies the number of entries in options. argc_in_out Specifies a pointer to the number of command line arguments. argv_in_out Specifies a pointer to the command line arguments. fallback_resources Specifies resource values to be used if the application class resource file cannot be opened or read, or NULL. widget_class Specifies the class of the widget to be created. Must be shellWidgetClass or a subclass. args Specifies the argument list to override any other resource specifications for the created shell widget. num_args Specifies the number of entries in the argument list. The function calls followed by , then calls with display_string NULL and application_name NULL, and finally calls with name NULL, the specified widget_class, an argument list and count, and returns the created shell. The recommended widget_class is sessionShellWidgetClass. The argument list and count are created by merging the specified args and num_args with a list containing the specified argc and argv. The modified argc and argv returned by are returned in argc_in_out and argv_in_out. If app_context_return is not NULL, the created application context is also returned. If the display specified by the command line cannot be opened, an error message is issued and terminates the application. If fallback_resources is non-NULL, is called with the value prior to calling . Widget XtVaOpenApplication XtAppContext * app_context_return String application_class XrmOptionDescList options Cardinal num_options int * argc_in_out String * argv_in_out String * fallback_resources WidgetClass widget_class app_context_return Returns the application context, if non-NULL. application_class Specifies the class name of the application. options Specifies the command line options table. num_options Specifies the number of entries in options. argc_in_out Specifies a pointer to the number of command line arguments. argv_in_out Specifies the command line arguments array. fallback_resources Specifies resource values to be used if the application class resource file cannot be opened, or NULL. widget_class Specifies the class of the widget to be created. Must be shellWidgetClass or a subclass. ... Specifies the variable argument list to override any other resource specifications for the created shell. The procedure is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Widget Instance Allocation: The allocate Procedure A widget class may optionally provide an instance allocation procedure in the ObjectClassExtension record. When the call to create a widget includes a varargs list containing XtVaTypedArg, these arguments will be passed to the allocation procedure in an XtTypedArgList. typedef struct { String name; String type; XtArgVal value; int size; } XtTypedArg, *XtTypedArgList; The allocate procedure pointer in the ObjectClassExtension record is of type . typedef void (*AllocateProc) WidgetClass widget_class Cardinal* constraint_size Cardinal* more_bytes ArgList args Cardinal* num_args XtTypedArgList typed_args Cardinal* num_typed_args Widget* new_return XtPointer* more_bytes_return widget_class Specifies the widget class of the instance to allocate. constraint_size Specifies the size of the constraint record to allocate, or 0. more_bytes Specifies the number of auxiliary bytes of memory to allocate. args Specifies the argument list as given in the call to create the widget. num_args Specifies the number of arguments. typed_args Specifies the list of typed arguments given in the call to create the widget. num_typed_args Specifies the number of typed arguments. new_return Returns a pointer to the newly allocated instance, or NULL in case of error. more_bytes_return Returns the auxiliary memory if it was requested, or NULL if requested and an error occurred; otherwise, unchanged. At widget allocation time, if an extension record with record_type equal to NULLQUARK is located through the object class part extension field and the allocate field is not NULL, the will be invoked to allocate memory for the widget. If no ObjectClassPart extension record is declared with record_type equal to NULLQUARK, then XtInheritAllocate and XtInheritDeallocate are assumed. If no is found, the Intrinsics will allocate memory for the widget. An must perform the following: Allocate memory for the widget instance and return it in new_return. The memory must be at least wc->core_class.widget_size bytes in length, double-word aligned. Initialize the core.constraints field in the instance record to NULL or to point to a constraint record. If constraint_size is not 0, the procedure must allocate memory for the constraint record. The memory must be double-word aligned. If more_bytes is not 0, then the address of a block of memory at least more_bytes in size, double-word aligned, must be returned in the more_bytes_return parameter, or NULL to indicate an error. A class allocation procedure that envelops the allocation procedure of a superclass must rely on the enveloped procedure to perform the instance and constraint allocation. Allocation procedures should refrain from initializing fields in the widget record except to store pointers to newly allocated additional memory. Under no circumstances should an allocation procedure that envelopes its superclass allocation procedure modify fields in the instance part of any superclass. Widget Instance Initialization: The initialize Procedure The initialize procedure pointer in a widget class is of type . typedef void (*XtInitProc) Widget request Widget new ArgList args Cardinal * num_args request Specifies a copy of the widget with resource values as requested by the argument list, the resource database, and the widget defaults. new Specifies the widget with the new values, both resource and nonresource, that are actually allowed. args Specifies the argument list passed by the client, for computing derived resource values. If the client created the widget using a varargs form, any resources specified via XtVaTypedArg are converted to the widget representation and the list is transformed into the ArgList format. num_args Specifies the number of entries in the argument list. An initialization procedure performs the following: Allocates space for and copies any resources referenced by address that the client is allowed to free or modify after the widget has been created. For example, if a widget has a field that is a String, it may choose not to depend on the characters at that address remaining constant but dynamically allocate space for the string and copy it to the new space. Widgets that do not copy one or more resources referenced by address should clearly so state in their user documentation. It is not necessary to allocate space for or to copy callback lists. Computes values for unspecified resource fields. For example, if width and height are zero, the widget should compute an appropriate width and height based on its other resources. A widget may directly assign only its own width and height within the initialize, initialize_hook, set_values, and set_values_hook procedures; see . Computes values for uninitialized nonresource fields that are derived from resource fields. For example, graphics contexts (GCs) that the widget uses are derived from resources like background, foreground, and font. An initialization procedure also can check certain fields for internal consistency. For example, it makes no sense to specify a colormap for a depth that does not support that colormap. Initialization procedures are called in superclass-to-subclass order after all fields specified in the resource lists have been initialized. The initialize procedure does not need to examine args and num_args if all public resources are declared in the resource list. Most of the initialization code for a specific widget class deals with fields defined in that class and not with fields defined in its superclasses. If a subclass does not need an initialization procedure because it does not need to perform any of the above operations, it can specify NULL for the initialize field in the class record. Sometimes a subclass may want to overwrite values filled in by its superclass. In particular, size calculations of a superclass often are incorrect for a subclass, and in this case, the subclass must modify or recalculate fields declared and computed by its superclass. As an example, a subclass can visually surround its superclass display. In this case, the width and height calculated by the superclass initialize procedure are too small and need to be incremented by the size of the surround. The subclass needs to know if its superclass's size was calculated by the superclass or was specified explicitly. All widgets must place themselves into whatever size is explicitly given, but they should compute a reasonable size if no size is requested. The request and new arguments provide the necessary information for a subclass to determine the difference between an explicitly specified field and a field computed by a superclass. The request widget is a copy of the widget as initialized by the arglist and resource database. The new widget starts with the values in the request, but it has been updated by all superclass initialization procedures called so far. A subclass initialize procedure can compare these two to resolve any potential conflicts. In the above example, the subclass with the visual surround can see if the width and height in the request widget are zero. If so, it adds its surround size to the width and height fields in the new widget. If not, it must make do with the size originally specified. The new widget will become the actual widget instance record. Therefore, the initialization procedure should do all its work on the new widget; the request widget should never be modified. If the initialize procedure needs to call any routines that operate on a widget, it should specify new as the widget instance. Constraint Instance Initialization: The ConstraintClassPart initialize Procedure The constraint initialization procedure pointer, found in the ConstraintClassPart initialize field of the widget class record, is of type . The values passed to the parent constraint initialization procedures are the same as those passed to the child's class widget initialization procedures. The constraints field of the request widget points to a copy of the constraints record as initialized by the arglist and resource database. The constraint initialization procedure should compute any constraint fields derived from constraint resources. It can make further changes to the new widget to make the widget and any other constraint fields conform to the specified constraints, for example, changing the widget's size or position. If a constraint class does not need a constraint initialization procedure, it can specify NULL for the initialize field of the ConstraintClassPart in the class record. Nonwidget Data Initialization: The initialize_hook Procedure The initialize_hook procedure is obsolete, as the same information is now available to the initialize procedure. The procedure has been retained for those widgets that used it in previous releases. The initialize_hook procedure pointer is of type : typedef void(*XtArgsProc) Widget w ArgList args Cardinal * num_args w Specifies the widget. args Specifies the argument list passed by the client. If the client created the widget using a varargs form, any resources specified via XtVaTypedArg are converted to the widget representation and the list is transformed into the ArgList format. num_args Specifies the number of entries in the argument list. If this procedure is not NULL, it is called immediately after the corresponding initialize procedure or in its place if the initialize field is NULL. The initialize_hook procedure allows a widget instance to initialize nonresource data using information from the specified argument list as if it were a resource. Realizing Widgets To realize a widget instance, use . void XtRealizeWidget Widget w w Specifies the widget. Must be of class Core or any subclass thereof. If the widget is already realized, simply returns. Otherwise it performs the following: Binds all action names in the widget's translation table to procedures (see ). Makes a postorder traversal of the widget tree rooted at the specified widget and calls each non-NULL change_managed procedure of all composite widgets that have one or more managed children. Constructs an XSetWindowAttributes structure filled in with information derived from the Core widget fields and calls the realize procedure for the widget, which adds any widget-specific attributes and creates the X window. If the widget is not a subclass of compositeWidgetClass, returns; otherwise it continues and performs the following: Descends recursively to each of the widget's managed children and calls the realize procedures. Primitive widgets that instantiate children are responsible for realizing those children themselves. Maps all of the managed children windows that have mapped_when_managed True. If a widget is managed but mapped_when_managed is False, the widget is allocated visual space but is not displayed. If the widget is a top-level shell widget (that is, it has no parent), and mapped_when_managed is True, maps the widget window. , , , , XtUnmanage\%Children, , , and XtDestroy\%Widget maintain the following invariants: If a composite widget is realized, then all its managed children are realized. If a composite widget is realized, then all its managed children that have mapped_when_managed True are mapped. All Intrinsics functions and all widget routines should accept either realized or unrealized widgets. When calling the realize or change_managed procedures for children of a composite widget, calls the procedures in reverse order of appearance in the CompositePart children list. By default, this ordering of the realize procedures will result in the stacking order of any newly created subwindows being top-to-bottom in the order of appearance on the list, and the most recently created child will be at the bottom. To check whether or not a widget has been realized, use . Boolean XtIsRealized Widget w w Specifies the widget. Must be of class Object or any subclass thereof. The function returns True if the widget has been realized, that is, if the widget has a nonzero window ID. If the specified object is not a widget, the state of the nearest widget ancestor is returned. Some widget procedures (for example, set_values) might wish to operate differently after the widget has been realized. Widget Instance Window Creation: The realize Procedure The realize procedure pointer in a widget class is of type . typedef void (*XtRealizeProc) Widget w XtValueMask value_mask XSetWindowAttributes attributes w Specifies the widget. value_mask Specifies which fields in the attributes structure are used. attributes Specifies the window attributes to use in the XCreateWindow call. The realize procedure must create the widget's window. Before calling the class realize procedure, the generic function fills in a mask and a corresponding XSetWindowAttributes structure. It sets the following fields in attributes and corresponding bits in value_mask based on information in the widget core structure: The background_pixmap (or background_pixel if background_pixmap is XtUnspecifiedPixmap) is filled in from the corresponding field. The border_pixmap (or border_pixel if border_pixmap is XtUnspecifiedPixmap) is filled in from the corresponding field. The colormap is filled in from the corresponding field. The event_mask is filled in based on the event handlers registered, the event translations specified, whether the expose field is non-NULL, and whether visible_interest is True. The bit_gravity is set to NorthWestGravity if the expose field is NULL. These or any other fields in attributes and the corresponding bits in value_mask can be set by the realize procedure. Note that because realize is not a chained operation, the widget class realize procedure must update the XSetWindowAttributes structure with all the appropriate fields from non-Core superclasses. A widget class can inherit its realize procedure from its superclass during class initialization. The realize procedure defined for coreWidgetClass calls with the passed value_mask and attributes and with window_class and visual set to CopyFromParent. Both compositeWidgetClass and constraintWidgetClass inherit this realize procedure, and most new widget subclasses can do the same (see ). The most common noninherited realize procedures set bit_gravity in the mask and attributes to the appropriate value and then create the window. For example, depending on its justification, Label might set bit_gravity to WestGravity, CenterGravity, or EastGravity. Consequently, shrinking it would just move the bits appropriately, and no exposure event is needed for repainting. If a composite widget's children should be realized in an order other than that specified (to control the stacking order, for example), it should call on its children itself in the appropriate order from within its own realize procedure. Widgets that have children and whose class is not a subclass of compositeWidgetClass are responsible for calling on their children, usually from within the realize procedure. Realize procedures cannot manage or unmanage their descendants. Window Creation Convenience Routine Rather than call the Xlib XCreateWindow function explicitly, a realize procedure should normally call the Intrinsics analog , which simplifies the creation of windows for widgets. void XtCreateWindow Widget w unsigned int window_class Visual * visual XtValueMask value_mask XSetWindowAttributes attributes w Specifies the widget that defines the additional window attributed. Must be of class Core or any subclass thereof. window_class Specifies the Xlib window class (for example, InputOutput, InputOnly, or CopyFromParent ). visual Specifies the visual type (usually CopyFromParent ). value_mask Specifies which fields in the attributes structure are used. attributes Specifies the window attributes to use in the XCreateWindow call. The function calls the Xlib XCreateWindow function with values from the widget structure and the passed parameters. Then, it assigns the created window to the widget's window field. evaluates the following fields of the widget core structure: depth, screen, parent->core.window, x, y, width, height, and border_width. Obtaining Window Information from a Widget The Core widget class definition contains the screen and window ids. The window field may be NULL for a while (see and ). The display pointer, the parent widget, screen pointer, and window of a widget are available to the widget writer by means of macros and to the application writer by means of functions. Display XtDisplay Widget w w Specifies the widget. Must be of class Core or any subclass thereof. XtDisplay returns the display pointer for the specified widget. Widget XtParent Widget w w Specifies the widget. Must be of class Object or any subclass thereof. XtParent returns the parent object for the specified widget. The returned object will be of class Object or a subclass. Screen *XtScreen Widget w w Specifies the widget. Must be of class Core or any subclass thereof. returns the screen pointer for the specified widget. Window XtWindow Widget w w Specifies the widget. Must be of class Core or any subclass thereof. returns the window of the specified widget. The display pointer, screen pointer, and window of a widget or of the closest widget ancestor of a nonwidget object are available by means of , , and . Display *XtDisplayOfObject Widget w object Specifies the object. Must be of class Object or any subclass thereof. is identical in function to XtDisplay if the object is a widget; otherwise returns the display pointer for the nearest ancestor of object that is of class Widget or a subclass thereof. Screen *XtScreenOfObject Widget object object Specifies the object. Must be of class Object or any subclass thereof. is identical in function to if the object is a widget; otherwise returns the screen pointer for the nearest ancestor of object that is of class Widget or a subclass thereof. Window XtWindowOfObject Widget object object Specifies the object. Must be of class Object or any subclass thereof. is identical in function to if the object is a widget; otherwise returns the window for the nearest ancestor of object that is of class Widget or a subclass thereof. To retrieve the instance name of an object, use . String XtName Widget object object Specifies the object whose name is desired. Must be of class Object or any subclass thereof. returns a pointer to the instance name of the specified object. The storage is owned by the Intrinsics and must not be modified. The name is not qualified by the names of any of the object's ancestors. Several window attributes are locally cached in the widget instance. Thus, they can be set by the resource manager and as well as used by routines that derive structures from these values (for example, depth for deriving pixmaps, background_pixel for deriving GCs, and so on) or in the call. The x, y, width, height, and border_width window attributes are available to geometry managers. These fields are maintained synchronously inside the Intrinsics. When an XConfigureWindow is issued by the Intrinsics on the widget's window (on request of its parent), these values are updated immediately rather than some time later when the server generates a ConfigureNotify event. (In fact, most widgets do not select SubstructureNotify events.) This ensures that all geometry calculations are based on the internally consistent toolkit world rather than on either an inconsistent world updated by asynchronous ConfigureNotify events or a consistent, but slow, world in which geometry managers ask the server for window sizes whenever they need to lay out their managed children (see ). Unrealizing Widgets To destroy the windows associated with a widget and its non-pop-up descendants, use . void XtUnrealizeWidget Widget w w Specifies the widget. Must be of class Core or any subclass thereof. If the widget is currently unrealized, simply returns. Otherwise it performs the following: Unmanages the widget if the widget is managed. Makes a postorder (child-to-parent) traversal of the widget tree rooted at the specified widget and, for each widget that has declared a callback list resource named ``unrealizeCallback'', executes the procedures on the XtNunrealizeCallback list. Destroys the widget's window and any subwindows by calling XDestroyWindow with the specified widget's window field. Any events in the queue or which arrive following a call to will be dispatched as if the window(s) of the unrealized widget(s) had never existed. Destroying Widgets The Intrinsics provide support To destroy all the pop-up children of the widget being destroyed and destroy all children of composite widgets. To remove (and unmap) the widget from its parent. To call the callback procedures that have been registered to trigger when the widget is destroyed. To minimize the number of things a widget has to deallocate when destroyed. To minimize the number of XDestroyWindow calls when destroying a widget tree. To destroy a widget instance, use . void XtDestroyWidget Widget w w Specifies the widget. Must be of class Object or any subclass thereof. The function provides the only method of destroying a widget, including widgets that need to destroy themselves. It can be called at any time, including from an application callback routine of the widget being destroyed. This requires a two-phase destroy process in order to avoid dangling references to destroyed widgets. In phase 1, performs the following: If the being_destroyed field of the widget is True, it returns immediately. Recursively descends the widget tree and sets the being_destroyed field to True for the widget and all normal and pop-up children. Adds the widget to a list of widgets (the destroy list) that should be destroyed when it is safe to do so. Entries on the destroy list satisfy the invariant that if w2 occurs after w1 on the destroy list, then w2 is not a descendent, either normal or pop-up, of w1. Phase 2 occurs when all procedures that should execute as a result of the current event have been called, including all procedures registered with the event and translation managers, that is, when the current invocation of is about to return, or immediately if not in . In phase 2, performs the following on each entry in the destroy list in the order specified: If the widget is not a pop-up child and the widget's parent is a subclass of composite\%WidgetClass, and if the parent is not being destroyed, it calls on the widget and then calls the widget's parent's delete_child procedure (see ). Calls the destroy callback procedures registered on the widget and all normal and pop-up descendants in postorder (it calls child callbacks before parent callbacks). The function then makes second traversal of the widget and all normal and pop-up descendants to perform the following three items on each widget in postorder: If the widget is not a pop-up child and the widget's parent is a subclass of constraint\%WidgetClass, it calls the ConstraintClassPart destroy procedure for the parent, then for the parent's superclass, until finally it calls the ConstraintClassPart destroy procedure for constraintWidgetClass. Calls the CoreClassPart destroy procedure declared in the widget class, then the destroy procedure declared in its superclass, until finally it calls the destroy procedure declared in the Object class record. Callback lists are deallocated. If the widget class object class part contains an ObjectClassExtension record with the record_type NULLQUARK and the deallocate field is not NULL, calls the deallocate procedure to deallocate the instance and if one exists, the constraint record. Otherwise, the Intrinsics will deallocate the widget instance record and if one exists, the constraint record. Calls XDestroyWindow if the specified widget is realized (that is, has an X window). The server recursively destroys all normal descendant windows. (Windows of realized pop-up Shell children, and their descendants, are destroyed by a shell class destroy procedure.) Adding and Removing Destroy Callbacks When an application needs to perform additional processing during the destruction of a widget, it should register a destroy callback procedure for the widget. The destroy callback procedures use the mechanism described in . The destroy callback list is identified by the resource name XtNdestroyCallback. For example, the following adds an application-supplied destroy callback procedure ClientDestroy with client data to a widget by calling . XtAddCallback(w, XtNdestroyCallback, ClientDestroy, client_data) Similarly, the following removes the application-supplied destroy callback procedure ClientDestroy by calling . XtRemoveCallback(w, XtNdestroyCallback, ClientDestroy, client_data) The ClientDestroy argument is of type ; see . Dynamic Data Deallocation: The destroy Procedure The destroy procedure pointers in the ObjectClassPart, RectObjClassPart, and CoreClassPart structures are of type . typedef void XtWidgetProc Widget w w Specifies the widget being destroyed. The destroy procedures are called in subclass-to-superclass order. Therefore, a widget's destroy procedure should deallocate only storage that is specific to the subclass and should ignore the storage allocated by any of its superclasses. The destroy procedure should deallocate only resources that have been explicitly created by the subclass. Any resource that was obtained from the resource database or passed in an argument list was not created by the widget and therefore should not be destroyed by it. If a widget does not need to deallocate any storage, the destroy procedure entry in its class record can be NULL. Deallocating storage includes, but is not limited to, the following steps: Calling on dynamic storage allocated with , , and so on. Calling XFreePixmap on pixmaps created with direct X calls. Calling on GCs allocated with . Calling XFreeGC on GCs allocated with direct X calls. Calling on event handlers added to other widgets. Calling on timers created with . Calling for each child if the widget has children and is not a subclass of compositeWidgetClass. During destroy phase 2 for each widget, the Intrinsics remove the widget from the modal cascade, unregister all event handlers, remove all key, keyboard, button, and pointer grabs and remove all callback procedures registered on the widget. Any outstanding selection transfers will time out. Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure The constraint destroy procedure identified in the ConstraintClassPart constraintWidgetClass. This constraint destroy procedure pointer is of type . The constraint destroy procedures are called in subclass-to-superclass order, starting at the class of the widget's parent and ending at constraint\%WidgetClass. Therefore, a parent's constraint destroy procedure should deallocate only storage that is specific to the constraint subclass and not storage allocated by any of its superclasses. If a parent does not need to deallocate any constraint storage, the constraint destroy procedure entry in its class record can be NULL. Widget Instance Deallocation: The deallocate Procedure The deallocate procedure pointer in the ObjectClassExtension record is of type XtDeallocateProc. typedef void (*XtDeallocateProc) Widget widget XtPointer more_bytes widget Specifies the widget being destroyed. more_bytes Specifies the auxiliary memory received from the corresponding allocator along with the widget, or NULL. When a widget is destroyed, if an ObjectClassExtension record exists in the object class part extension field with record_type NULLQUARK and the deallocate field is not NULL, the XtDeallocateProc will be called. If no ObjectClassPart extension record is declared with record_type equal to NULLQUARK, then XtInheritAllocate and XtInheritDeallocate are assumed. The responsibilities of the deallocate procedure are to deallocate the memory specified by more_bytes if it is not NULL, to deallocate the constraints record as specified by the widget's core.constraints field if it is not NULL, and to deallocate the widget instance itself. If no XtDeallocateProc is found, it is assumed that the Intrinsics originally allocated the memory and is responsible for freeing it. Exiting from an Application All X Toolkit applications should terminate by calling and then exiting using the standard method for their operating system (typically, by calling exit for POSIX-based systems). The quickest way to make the windows disappear while exiting is to call on each top-level shell widget. The Intrinsics have no resources beyond those in the program image, and the X server will free its resources when its connection to the application is broken. Depending upon the widget set in use, it may be necessary to explicitly destroy individual widgets or widget trees with before calling in order to ensure that any required widget cleanup is properly executed. The application developer must refer to the widget documentation to learn if a widget needs to perform cleanup beyond that performed automatically by the operating system. If the client is a session participant (see ), then the client may wish to resign from the session before exiting. See for details. > If the widget class object class part contains an ObjectClassExtension record with the record_type NULLQUARK and the deallocate field is not NULL, calls the deallocate procedure to deallocate the instance and if one exists, the constraint record. OtlibXt-1.1.5/specs/appA.xml000064401431060000012000000070741252061032400156040ustar00alancstaff00002660200006 Resource File Format A resource file contains text representing the default resource values for an application or set of applications. The format of resource files is defined by Xlib — C Language X Interface. and is reproduced here for convenience only. The format of a resource specification is ResourceLine = Comment | IncludeFile | ResourceSpec | <empty line> Comment ="!" {<any character except null or newline>} IncludeFile = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace FileName = <valid filename for operating system> ResourceSpec = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value ResourceName = [Binding] {Component Binding} ComponentName Binding ="." | "*" WhiteSpace = {<space> | <horizontal tab>} Component = "?" | ComponentName ComponentName = NameChar {NameChar} NameChar = "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" Value ={<any character except null or unescaped newline>} Elements separated by vertical bar (|) are alternatives. Curly braces ({...}) indicate zero or more repetitions of the enclosed elements. Square brackets ([...]) indicate that the enclosed element is optional. Quotes ("...") are used around literal characters. If the last character on a line is a backslash (\), that line is assumed to continue on the next line. To allow a Value to begin with whitespace, the two-character sequence "\space" (backslash followed by space) is recognized and replaced by a space character, and the two-character sequence "\tab" (backslash followed by horizontal tab) is recognized and replaced by a horizontal tab character. To allow a Value to contain embedded newline characters, the two-character sequence "\n" is recognized and replaced by a newline character. To allow a Value to be broken across multiple lines in a text file, the two-character sequence "\newline" (backslash followed by newline) is recognized and removed from the value. To allow a Value to contain arbitrary character codes, the four-character sequence "\nnn", where each n is a digit character in the range of "0"-"7", is recognized and replaced with a single byte that contains the octal value specified by the sequence. Finally, the two-character sequence "\\" is recognized and replaced with a single backslash. libXt-1.1.5/specs/appF.xml000064401431060000012000000074651252061032400156150ustar00alancstaff00002660200006 Resource Configuration Management Setting and changing resources in X applications can be difficult for both the application programmer and the end user. Resource Configuration Management (RCM) addresses this problem by changing the X Intrinsics to immediately modify a resource for a specified widget and each child widget in the hierarchy. In this context, immediate means: no sourcing of a resource file is required; the application does not need to be restarted for the new resource values to take effect; and the change occurs immediately. The main difference between RCM and the Editres protocol is that the RCM customizing hooks reside in the Intrinsics and thus are linked with other toolkits such as Motif and the Athena widgets. However, the EditRes protocol requires the application to link with the EditRes routines in the Xmu library and Xmu is not used by all applications that use Motif. Also, the EditRes protocol uses ClientMessage, whereas the RCM Intrinsics hooks use PropertyNotify events. X Properties and the PropertyNotify events are used to implement RCM and allow on-the-fly resource customization. When the X Toolkit is initialized, two atoms are interned with the strings Custom Init and Custom Data. Both _XtCreatePopupShell and _XtAppCreateShell register a PropertyNotify event handler to handle these properties. A customization tool uses the Custom Init property to ping an application to get the application's toplevel window. When the application's property notify event handler is invoked, the handler deletes the property. No data is transferred in this property. A customization tool uses the Custom Data property to tell an application that it should change a resource's value. The data in the property contains the length of the resource name (the number of bytes in the resource name), the resource name and the new value for the resource. This property's type is XA_STRING and the format of the string is: The length of the resource name (the number of bytes in the resource name) One space character The resource name One space character The resource value When setting the application's resource, the event handler calls functions to walk the application's widget tree, determining which widgets are affected by the resource string, and then applying the value with . As the widget tree is recursively descended, at each level in the widget tree a resource part is tested for a match. When the entire resource string has been matched, the value is applied to the widget or widgets. Before a value is set on a widget, it is first determined if the last part of the resource is a valid resource for that widget. It must also add the resource to the application's resource database and then query it using specific resource strings that is builds from the widget information. libXt-1.1.5/specs/preface.xml000064401431060000012000000052551252061032400163270ustar00alancstaff00002660200006 About This Manual X Toolkit Intrinsics — C Language Interface is intended to be read by both application programmers who will use one or more of the many widget sets built with the Intrinsics and by widget programmers who will use the Intrinsics to build widgets for one of the widget sets. Not all the information in this manual, however, applies to both audiences. That is, because the application programmer is likely to use only a number of the Intrinsics functions in writing an application and because the widget programmer is likely to use many more, if not all, of the Intrinsics functions in building a widget, an attempt has been made to highlight those areas of information that are deemed to be of special interest for the application programmer. (It is assumed the widget programmer will have to be familiar with all the information.) Therefore, all entries in the table of contents that are printed in bold indicate the information that should be of special interest to an application programmer. It is also assumed that, as application programmers become more familiar with the concepts discussed in this manual, they will find it more convenient to implement portions of their applications as special-purpose or custom widgets. It is possible, nonetheless, to use widgets without knowing how to build them. Conventions Used in this Manual This document uses the following conventions: Global symbols are printed in this special font. These can be either function names, symbols defined in include files, data types, or structure names. Arguments to functions, procedures, or macros are printed in italics. Each function is introduced by a general discussion that distinguishes it from other functions. The function declaration itself follows, and each argument is specifically explained. General discussion of the function, if any is required, follows the arguments. To eliminate any ambiguity between those arguments that you pass and those that a function returns to you, the explanations for all arguments that you pass start with the word specifies or, in the case of multiple arguments, the word specify. The explanations for all arguments that are returned to you start with the word returns or, in the case of multiple arguments, the word return. s who will use one or more of the many widget sets built with the Intrinsics and by widget programmers who will use the Intrinsics to build widgets for one of the widget sets. Not all the information in this manual, however, applies to both audiences. That is, because the application programmer is likely to use only a number of the IntrilibXt-1.1.5/specs/intrinsics.xml000064401431060000012000000122731252061032400171050ustar00alancstaff00002660200006 %defs; ]> X Toolkit Intrinsics - C Language Interface X Window System X Version 11, Release &fullrelvers; First Revision - April, 1994 JoelMcCormack Digital Equipment Corporation Western Software Laboratory PaulAsente Digital Equipment Corporation Western Software Laboratory RalphR. Swick Digital Equipment Corporation External Research Group version 6 edited by Donna Converse X Consortium, Inc. XWindow System is a trademark of X Consortium, Inc. Copyright © 1985, 1986, 1987, 1988, 1991, 1994 X Consortium Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. Copyright © 1985, 1986, 1987, 1988, 1991, 1994 Digital Equipment Corporation, Maynard, Massachusetts. Permission to use, copy, modify and distribute this documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Digital makes no representations about the suitability of the software described herein for any purpose. It is provided "as is" without express or implied warranty. libXt-1.1.5/specs/CH13.xml000064401431060000012000000737251252061032400153670ustar00alancstaff00002660200006 Evolution of the Intrinsics The interfaces described by this specification have undergone several sets of revisions in the course of adoption as an X Consortium standard specification. Having now been adopted by the Consortium as a standard part of the X Window System, it is expected that this and future revisions will retain backward compatibility in the sense that fully conforming implementations of these specifications may be produced that provide source compatibility with widgets and applications written to previous Consortium standard revisions. The Intrinsics do not place any special requirement on widget programmers to retain source or binary compatibility for their widgets as they evolve, but several conventions have been established to assist those developers who want to provide such compatibility. In particular, widget programmers may wish to conform to the convention described in when defining class extension records. Determining Specification Revision Level Widget and application developers who wish to maintain a common source pool that will build properly with implementations of the Intrinsics at different revision levels of these specifications but that take advantage of newer features added in later revisions may use the symbolic macro XtSpecificationRelease. #define XtSpecificationRelease 6 As the symbol XtSpecificationRelease was new to Release 4, widgets and applications desiring to build against earlier implementations should test for the presence of this symbol and assume only Release 3 interfaces if the definition is not present. Release 3 to Release 4 Compatibility At the data structure level, Release 4 retains binary compatibility with Release 3 (the first X Consortium standard release) for all data structures except WMShellPart, TopLevelShellPart, and TransientShellPart. Release 4 changed the argument type to most procedures that now take arguments of type XtPointer and structure members that are now of type XtPointer in order to avoid potential ANSI C conformance problems. It is expected that most implementations will be binary compatible with the previous definition. Two fields in CoreClassPart were changed from Boolean to XtEnum to allow implementations additional freedom in specifying the representations of each. This change should require no source modification. Additional Arguments Arguments were added to the procedure definitions for , , and to provide more information and to allow event handlers to abort further dispatching of the current event (caution is advised!). The added arguments to and make the initialize_hook and set_values_hook methods obsolete, but the hooks have been retained for those widgets that used them in Release 3. set_values_almost Procedures The use of the arguments by a set_values_almost procedure was poorly described in Release 3 and was inconsistent with other conventions. The current specification for the manner in which a set_values_almost procedure returns information to the Intrinsics is not compatible with the Release 3 specification, and all widget implementations should verify that any set_values_almost procedures conform to the current interface. No known implementation of the Intrinsics correctly implemented the Release 3 interface, so it is expected that the impact of this specification change is small. Query Geometry A composite widget layout routine that calls is now expected to store the complete new geometry in the intended structure; previously the specification said ``store the changes it intends to make''. Only by storing the complete geometry does the child have any way to know what other parts of the geometry may still be flexible. Existing widgets should not be affected by this, except to take advantage of the new information. unrealizeCallback Callback List In order to provide a mechanism for widgets to be notified when they become unrealized through a call to , the callback list name ``unrealizeCallback'' has been defined by the Intrinsics. A widget class that requires notification on unrealize may declare a callback list resource by this name. No class is required to declare this resource, but any class that did so in a prior revision may find it necessary to modify the resource name if it does not wish to use the new semantics. Subclasses of WMShell The formal adoption of the Inter-Client Communication Conventions Manual. as an X Consortium standard has meant the addition of four fields to WMShellPart and one field to TopLevelShellPart. In deference to some widget libraries that had developed their own additional conventions to provide binary compatibility, these five new fields were added at the end of the respective data structures. To provide more convenience for TransientShells, a field was added to the previously empty TransientShellPart. On some architectures the size of the part structure will not have changed as a result of this. Any widget implementation whose class is a subclass of TopLevelShell or TransientShell must at minimum be recompiled with the new data structure declarations. Because WMShellPart no longer contains a contiguous XSizeHints data structure, a subclass that expected to do a single structure assignment of an XSizeHints structure to the size_hints field of WMShellPart must be revised, though the old fields remain at the same positions within WMShellPart. Resource Type Converters A new interface declaration for resource type converters was defined to provide more information to converters, to support conversion cache cleanup with resource reference counting, and to allow additional procedures to be declared to free resources. The old interfaces remain (in the compatibility section), and a new set of procedures was defined that work only with the new type converter interface. In the now obsolete old type converter interface, converters are reminded that they must return the size of the converted value as well as its address. The example indicated this, but the description of was incomplete. KeySym Case Conversion Procedure The specification for the function type has been changed to match the Release 3 implementation, which included necessary additional information required by the function (a pointer to the display connection), and corrects the argument type of the source KeySym parameter. No known implementation of the Intrinsics implemented the previously documented interface. Nonwidget Objects Formal support for nonwidget objects is new to Release 4. A prototype implementation was latent in at least one Release 3 implementation of the Intrinsics, but the specification has changed somewhat. The most significant change is the requirement for a composite widget to declare the CompositeClassExtension record with the accepts_objects field set to True in order to permit a client to create a nonwidget child. The addition of this extension field ensures that composite widgets written under Release 3 will not encounter unexpected errors if an application attempts to create a nonwidget child. In Release 4 there is no requirement that all composite widgets implement the extra functionality required to manage windowless children, so the accepts_objects field allows a composite widget to declare that it is not prepared to do so. Release 4 to Release 5 Compatibility At the data structure level, Release 5 retains complete binary compatibility with Release 4. The specification of the ObjectPart, RectObjPart, CorePart, CompositePart, ShellPart, WMShellPart, TopLevelShellPart, and ApplicationShellPart instance records was made less strict to permit implementations to add internal fields to these structures. Any implementation that chooses to do so would, of course, force a recompilation. The Xlib specification for XrmValue and XrmOptionDescRec was updated to use a new type, XPointer, for the addr and value fields, respectively, to avoid ANSI C conformance problems. The definition of XPointer is binary compatible with the previous implementation. baseTranslations Resource A new pseudo-resource, XtNbaseTranslations, was defined to permit application developers to specify translation tables in application defaults files while still giving end users the ability to augment or override individual event sequences. This change will affect only those applications that wish to take advantage of the new functionality or those widgets that may have previously defined a resource named ``baseTranslations''. Applications wishing to take advantage of the new functionality would change their application defaults file, e.g., from app.widget.translations: value to app.widget.baseTranslations: value If it is important to the application to preserve complete compatibility of the defaults file between different versions of the application running under Release 4 and Release 5, the full translations can be replicated in both the ``translations'' and the ``baseTranslations'' resource. Resource File Search Path The current specification allows implementations greater flexibility in defining the directory structure used to hold the application class and per-user application defaults files. Previous specifications required the substitution strings to appear in the default path in a certain order, preventing sites from collecting all the files for a specific application together in one directory. The Release 5 specification allows the default path to specify the substitution strings in any order within a single path entry. Users will need to pay close attention to the documentation for the specific implementation to know where to find these files and how to specify their own XFILESEARCHPATH and XUSERFILESEARCHPATH values when overriding the system defaults. Customization Resource supports a new substitution string, %C, for specifying separate application class resource files according to arbitrary user-specified categories. The primary motivation for this addition was separate monochrome and color application class defaults files. The substitution value is obtained by querying the current resource database for the application resource name ``customization'', class ``Customization''. Any application that previously used this resource name and class will need to be aware of the possibly conflicting semantics. Per-Screen Resource Database To allow a user to specify separate preferences for each screen of a display, a per-screen resource specification string has been added and multiple resource databases are created; one for each screen. This will affect any application that modified the (formerly unique) resource database associated with the display subsequent to the Intrinsics database initialization. Such applications will need to be aware of the particular screen on which each shell widget is to be created. Although the wording of the specification changed substantially in the description of the process by which the resource database(s) is initialized, the net effect is the same as in prior releases with the exception of the added per-screen resource specification and the new customization substitution string in . Internationalization of Applications Internationalization as defined by ANSI is a technology that allows support of an application in a single locale. In adding support for internationalization to the Intrinsics the restrictions of this model have been followed. In particular, the new Intrinsics interfaces are designed not to preclude an application from using other alternatives. For this reason, no Intrinsics routine makes a call to establish the locale. However, a convenience routine to establish the locale at initialize time has been provided, in the form of a default procedure that must be explicitly installed if the application desires ANSI C locale behavior. As many objects in X, particularly resource databases, now inherit the global locale when they are created, applications wishing to use the ANSI C locale model should use the new function XtSetLanguageProc to do so. The internationalization additions also define event filters as a part of the Xlib Input Method specifications. The Intrinsics enable the use of event filters through additions to . Applications that may not be dispatching all events through should be reviewed in the context of this new input method mechanism. In order to permit internationalization of error messages, the name and path of the error database file are now allowed to be implementation-dependent. No adequate standard mechanism has yet been suggested to allow the Intrinsics to locate the database from localization information supplied by the client. The previous specification for the syntax of the language string specified by xnlLanguage has been dropped to avoid potential conflicts with other standards. The language string syntax is now implementation-defined. The example syntax cited is consistent with the previous specification. Permanently Allocated Strings In order to permit additional memory savings, an Xlib interface was added to allow the resource manager to avoid copying certain string constants. The Intrinsics specification was updated to explicitly require the Object class_name, resource_name, resource_class, resource_type, default_type in resource tables, Core actions string field, and Constraint resource_name, resource_class, resource_type, and default_type resource fields to be permanently allocated. This explicit requirement is expected to affect only applications that may create and destroy classes on the fly. Arguments to Existing Functions The args argument to , , , , and were changed from Cardinal* to int* to conform to pre-existing convention and avoid otherwise annoying typecasting in ANSI C environments. Release 5 to Release 6 Compatibility At the data structure level, Release 6 retains binary compatibility with Release 5 for all data structures except WMShellPart. Three resources were added to the specification. The known implementations had unused space in the data structure, therefore on some architectures and implementations, the size of the part structure will not have changed as a result of this. Widget Internals Two new widget methods for instance allocation and deallocation were added to the Object class. These new methods allow widgets to be treated as C++ objects in the C++ environment when an appropriate allocation method is specified or inherited by the widget class. The textual descriptions of the processes of widget creation and widget destruction have been edited to provide clarification to widget writers. Widgets writers may have reason to rely on the specific order of the stages of widget creation and destruction; with that motivation, the specification now more exactly describes the process. As a convenience, an interface to locate a widget class extension record on a linked list, , has been added. A new option to allow bundled changes to the managed set of a Composite widget is introduced in the Composite class extension record. Widgets that define a change_managed procedure that can accommodate additions and deletions to the managed set of children in a single invocation should set allows_change_managed_set to True in the extension record. The wording of the process followed by has changed slightly to better handle changes to the managed set during phase 2 destroy processing. A new exposure event compression flag, XtExposeNoRegion, was added. Many widgets specify exposure compression, but either ignore the actual damage region passed to the core expose procedure or use only the cumulative bounding box data available in the event. Widgets with expose procedures that do not make use of exact exposure region information can indicate that the Intrinsics need not compute the region. General Application Development is a new convenience procedure to initialize the toolkit, create an application context, open an X display connection, and create the root of the widget instance tree. It is identical to the interface it replaces, , in all respects except that it takes an additional argument specifying the widget class of the root shell to create. This interface is now the recommended one so that clients may easily become session participants. The old convenience procedures appear in the compatibility section. The toolkit initialization function may be called multiple times without penalty. In order to optimize changes in geometry to a set of geometry-managed children, a new interface, , has been added. Communication with Window and Session Managers The revision of the Inter-Client Communication Conventions Manual. as an X Consortium standard has resulted in the addition of three fields to the specification of WMShellPart. These are urgency, client_leader, and window_role. The adoption of the X Session Management Protocol as an X Consortium standard has resulted in the addition of a new shell widget, SessionShell, and an accompanying subclass verification interface, XtIsSessionShell. This widget provides support for communication between an application and a session manager, as well as a window manager. In order to preserve compatibility with existing subclasses of ApplicationShell, the ApplicationShell was subclassed to create the new widget class. The session protocol requires a modal response to certain checkpointing operations by participating applications. The SessionShell structures the application's notification of and responses to messages from the session manager by use of various callback lists and by use of the new interfaces and . There is also a new command line argument, -xtsessionID, which facilitates the session manager in restarting applications based on the Intrinsics. The resource name and class strings defined by the Intrinsics shell widgets in <X11/Shell.h> are now listed in Appendix E. The addition of a new symbol for the WMShell wait_for_wm resource was made to bring the external symbol and the string it represents into agreement. The actual resource name string in WMShell has not changed. The resource representation type of the XtNwinGravity resource of the WMShell was changed to XtRGravity in order to register a type converter so that window gravity resource values could be specified by name. Geometry Management A clarification to the specification was made to indicate that geometry requests may include current values along with the requested changes. Event Management In Release 6, support is provided for registering selectors and event handlers for events generated by X protocol extensions and for dispatching those events to the appropriate widget. The new event handler registration interfaces are and . Since the mechanism to indicate selection of extension events is specific to the extension being used, the Intrinsics introduces , which allows the application to select for the events of interest. In order to change the dispatching algorithm to accommodate extension events as well as core X protocol events, the Intrinsics event dispatcher may now be replaced or enveloped by the application with . The dispatcher may wish to call to determine the widget with the current Intrinsics keyboard focus. A dispatcher, after determining the destination widget, may use to cause the event to be dispatched to the event handlers registered by a specific widget. To permit the dispatching of events for nonwidget drawables, such as pixmaps that are not associated with a widget's window, and have been added to the library. A related update was made to the description of . The library is now thread-safe, allowing one thread at a time to enter the library and protecting global data as necessary from concurrent use. Threaded toolkit applications are supported by the new interfaces , , , , and . Widget writers may also use and . Safe handling of POSIX signals and other asynchronous notifications is now provided by use of , , and . The application can receive notification of an impending block in the Intrinsics event manager by registering interest through and . returns the most recent event passed to for a specified display. Resource Management Resource converters are registered by the Intrinsics for window gravity and for three new resource types associated with session participation: RestartStyle, CommandArgArray and DirectoryString. The file search path syntax has been extended to make it easier to include the default search path, which controls resource database construction, by using the new substitution string, %D. Translation Management The default key translator now recognizes the NumLock modifier. If NumLock is on and the second keysym is a keypad keysym (a standard keysym named with a ``KP'' prefix or a vendor-specific keysym in the hexadecimal range 0x11000000 to 0x1100FFFF), then the default key translator will use the first keysym if Shift and/or ShiftLock is on and will use the second keysym if neither is on. Otherwise, it will ignore NumLock and apply the normal protocol semantics. Selections The targets of selection requests may be parameterized, as described by the revised Inter-Client Communication Conventions Manual.. When such requests are made, is used by the requestor to specify the target parameters and is used by the selection owner to retrieve the parameters. When a parameterized target is specified in the context of a bundled request for multiple targets, , , and are used to envelop the assembly of the request. When the parameters themselves are the names of properties, the Intrinsics provides support for the economical use of property atom names; see and . External Agent Hooks External agent hooks were added for the benefit of applications that instrument other applications for purposes of accessibility, testing, and customization. The external agent and the application communicate by a shared protocol which is transparent to the application. The hook callbacks permit the external agent to register interest in groups or classes of toolkit activity and to be notified of the type and details of the activity as it occurs. The new interfaces related to this effort are , which returns the hook registration widget, and , which returns a list of the X displays associated with an application context. ures that do not make use of exact exposurelibXt-1.1.5/specs/acknowledgement.xml000064401431060000012000000210471252061032400200660ustar00alancstaff00002660200006 Acknowledgments The design of the X11 Intrinsics was done primarily by Joel McCormack of Digital WSL. Major contributions to the design and implementation also were done by Charles Haynes, Mike Chow, and Paul Asente of Digital WSL. Additional contributors to the design and/or implementation were: Loretta Guarino-Reid (Digital WSL) Rich Hyde (Digital WSL) Susan Angebranndt (Digital WSL) Terry Weissman (Digital WSL) Mary Larson (Digital UEG) Mark Manasse (Digital SRC) Jim Gettys (Digital SRC) Leo Treggiari (Digital SDT) Ralph Swick (Project Athena and Digital ERP) Mark Ackerman (Project Athena) Ron Newman (Project Athena) Bob Scheifler (MIT LCS) The contributors to the X10 toolkit also deserve mention. Although the X11 Intrinsics present an entirely different programming style, they borrow heavily from the implicit and explicit concepts in the X10 toolkit. The design and implementation of the X10 Intrinsics were done by: Terry Weissman (Digital WSL) Smokey Wallace (Digital WSL) Phil Karlton (Digital WSL) Charles Haynes (Digital WSL) Frank Hall (HP) The design and implementation of the X10 toolkit’s sample widgets were by the above, as well as by: Ram Rao (Digital UEG) Mary Larson (Digital UEG) Mike Gancarz (Digital UEG) Kathleen Langone (Digital UEG) These widgets provided a checklist of requirements that we had to address in the X11 Intrinsics. Thanks go to Al Mento of Digital’s UEG Documentation Group for formatting and generally improving this document and to John Ousterhout of Berkeley for extensively reviewing early drafts of it. Finally, a special thanks to Mike Chow, whose extensive performance analysis of the X10 toolkit provided the justification to redesign it entirely for X11. Joel McCormack Western Software Laboratory Digital Equipment Corporation March 1988 The current design of the Intrinsics has benefited greatly from the input of several dedicated reviewers in the membership of the X Consortium. In addition to those already mentioned, the following individuals have dedicated significant time to suggesting improvements to the Intrinsics: Steve Pitschke (Stellar) C.Doug Blewett (AT&T) Bob Miller (HP) David Schiferl (Tektronix) Fred Taft (HP) Michael Squires (Sequent) Marcel Meth (AT&T) JimFulton (MIT) Mike Collins (Digital) Kerry Kimbrough (Texas Instruments) Scott McGregor (Digital) Phil Karlton (Digital) Julian Payne (ESS) Jacques Davy (Bull) Gabriel Beged-Dov (HP) GlennWidener (Tektronix) Thanks go to each of them for the countless hours spent reviewing drafts and code. Ralph R. Swick External Research Group Digital Equipment Corporation MIT Project Athena June 1988 From Release 3 to Release 4, several new members joined the design team. We greatly appreciate the thoughtful comments, suggestions, lengthy discussions, and in some cases implementation code contributed by each of the following: Don Alecci (AT&T) EllisCohen (OSF) Donna Converse (MIT) Clive Feather (IXI) Nayeem Islam (Sun) Dana Laursen (HP) Keith Packard (MIT) Chris Peterson (MIT) Richard Probst (Sun) Larry Cable (Sun) In Release 5, the effort to define the internationalization additions was headed by Bill McMahon of Hewlett Packard and Frank Rojas of IBM. This has been an educational process for many of us, and Bill and Frank’s tutelage has carried us through. Vania Joloboff of the OSF also contributed to the internationalization additions. The implementation efforts of Bill, Gabe Beged-Dov, and especially Donna Converse for this release are also gratefully acknowledged. Ralph R. Swick December 1989 and July 1991 The Release 6 Intrinsics is a result of the collaborative efforts of participants in the X Consortium’s intrinsics working group. A few individuals contributed substantial design proposals, participated in lengthy discussions, reviewed final specifications, and in most cases, were also responsible for sections of the implementation. They deserve recognition and thanks for their major contributions: Paul Asente (Adobe) Larry Cable (SunSoft) Ellis Cohen (OSF) Daniel Dardailler (OSF) Vania Joloboff (OSF) KalebKeithley (X Consortium) Courtney Loomis (HP) Douglas Rand (OSF) Bob Scheifler (X Consortium) Ajay Vohra (SunSoft) Many others analyzed designs, offered useful comments and suggestions, and participated in a significant subset of the process. The following people deserve thanks for their contributions: Andy Bovingdon, Sam Chang, Chris Craig, George Erwin-Grotsky, Keith Edwards, Clive Feather, Stephen Gildea, Dan Heller, Steve Humphrey, David Kaelbling, Jaime Lau, Rob Lembree, Stuart Marks, Beth Mynatt, Tom Paquin, Chris Peterson, Kamesh Ramakrishna, Tom Rodriguez, Jim VanGilder, Will Walker, and Mike Wexler. I am especially grateful to two of my colleagues: Ralph Swick for expert editorial guidance, and Kaleb Keithley for leadership in the implementation and the specification work. Donna Converse X Consortium April 1994 libXt-1.1.5/specs/CH03.xml000064401431060000012000001255221252061032400153570ustar00alancstaff00002660200006 Composite Widgets and Their Children Composite widgets (widgets whose class is a subclass of compositeWidgetClass) can have an arbitrary number of children. Consequently, they are responsible for much more than primitive widgets. Their responsibilities (either implemented directly by the widget class or indirectly by Intrinsics functions) include: Overall management of children from creation to destruction. Destruction of descendants when the composite widget is destroyed. Physical arrangement (geometry management) of a displayable subset of children (that is, the managed children). Mapping and unmapping of a subset of the managed children. Overall management is handled by the generic procedures and . adds children to their parent by calling the parent's insert_child procedure. removes children from their parent by calling the parent's delete_child procedure and ensures that all children of a destroyed composite widget also get destroyed. Only a subset of the total number of children is actually managed by the geometry manager and hence possibly visible. For example, a composite editor widget supporting multiple editing buffers might allocate one child widget for each file buffer, but it might display only a small number of the existing buffers. Widgets that are in this displayable subset are called managed widgets and enter into geometry manager calculations. The other children are called unmanaged widgets and, by definition, are not mapped by the Intrinsics. Children are added to and removed from their parent's managed set by using , , , , and , which notify the parent to recalculate the physical layout of its children by calling the parent's change_managed procedure. The convenience function calls and on the result. Most managed children are mapped, but some widgets can be in a state where they take up physical space but do not show anything. Managed widgets are not mapped automatically if their map_when_managed field is False. The default is True and is changed by using . Each composite widget class declares a geometry manager, which is responsible for figuring out where the managed children should appear within the composite widget's window. Geometry management techniques fall into four classes: Fixed boxes Fixed boxes have a fixed number of children created by the parent. All these children are managed, and none ever makes geometry manager requests. Homogeneous boxes Homogeneous boxes treat all children equally and apply the same geometry constraints to each child. Many clients insert and delete widgets freely. Heterogeneous boxes Heterogeneous boxes have a specific location where each child is placed. This location usually is not specified in pixels, because the window may be resized, but is expressed rather in terms of the relationship between a child and the parent or between the child and other specific children. The class of heterogeneous boxes is usually a subclass of Constraint. Shell boxes Shell boxes typically have only one child, and the child's size is usually exactly the size of the shell. The geometry manager must communicate with the window manager, if it exists, and the box must also accept ConfigureNotify events when the window size is changed by the window manager. Addition of Children to a Composite Widget: The insert_child Procedure To add a child to the parent's list of children, the function calls the parent's class routine insert_child. The insert_child procedure pointer in a composite widget is of type . typedef void (*XtWidgetProc) Widget w w Passes the newly created child. Most composite widgets inherit their superclass's operation. The insert_child routine in CompositeWidgetClass calls the insert_position procedure and inserts the child at the specified position in the children list, expanding it if necessary. Some composite widgets define their own insert_child routine so that they can order their children in some convenient way, create companion controller widgets for a new widget, or limit the number or class of their child widgets. A composite widget class that wishes to allow nonwidget children (see ) must specify a CompositeClassExtension extension record as described in and set the accepts_objects field in this record to True. If the CompositeClassExtension record is not specified or the accepts_objects field is False, the composite widget can assume that all its children are of a subclass of Core without an explicit subclass test in the insert_child procedure. If there is not enough room to insert a new child in the children array (that is, num_children is equal to num_slots), the insert_child procedure must first reallocate the array and update num_slots. The insert_child procedure then places the child at the appropriate position in the array and increments the num_children field. Insertion Order of Children: The insert_position Procedure Instances of composite widgets sometimes need to specify more about the order in which their children are kept. For example, an application may want a set of command buttons in some logical order grouped by function, and it may want buttons that represent file names to be kept in alphabetical order without constraining the order in which the buttons are created. An application controls the presentation order of a set of children by supplying an XtNinsertPosition resource. The insert_position procedure pointer in a composite widget instance is of type . typedef Cardinal (*XtOrderProc) Widget w w Passes the newly created widget. Composite widgets that allow clients to order their children (usually homogeneous boxes) can call their widget instance's insert_position procedure from the class's insert_child procedure to determine where a new child should go in its children array. Thus, a client using a composite class can apply different sorting criteria to widget instances of the class, passing in a different insert_position procedure resource when it creates each composite widget instance. The return value of the insert_position procedure indicates how many children should go before the widget. Returning zero indicates that the widget should go before all other children, and returning num_children indicates that it should go after all other children. The default insert_position function returns num_children and can be overridden by a specific composite widget's resource list or by the argument list provided when the composite widget is created. Deletion of Children: The delete_child Procedure To remove the child from the parent's children list, the function eventually causes a call to the Composite parent's class delete_child procedure. The delete_child procedure pointer is of type . typedef void (*XtWidgetProc) Widget w w Passes the child being deleted. Most widgets inherit the delete_child procedure from their superclass. Composite widgets that create companion widgets define their own delete_child procedure to remove these companion widgets. Adding and Removing Children from the Managed Set The Intrinsics provide a set of generic routines to permit the addition of widgets to or the removal of widgets from a composite widget's managed set. These generic routines eventually call the composite widget's change_managed procedure if the procedure pointer is non-NULL. The change_managed procedure pointer is of type . The widget argument specifies the composite widget whose managed child set has been modified. Managing Children To add a list of widgets to the geometry-managed (and hence displayable) subset of their Composite parent, use . typedef Widget *WidgetList; void XtManageChildren WidgetList children Cardinal num_children children Specifies a list of child widgets. Each child must be of class RectObj or any subclass thereof. num_children Specifies the number of children in the list. The function performs the following: Issues an error if the children do not all have the same parent or if the parent's class is not a subclass of compositeWidgetClass. Returns immediately if the common parent is being destroyed; otherwise, for each unique child on the list, ignores the child if it already is managed or is being destroyed, and marks it if not. If the parent is realized and after all children have been marked, it makes some of the newly managed children viewable: Calls the change_managed routine of the widgets' parent. Calls on each previously unmanaged child that is unrealized. Maps each previously unmanaged child that has map_when_managed True. Managing children is independent of the ordering of children and independent of creating and deleting children. The layout routine of the parent should consider children whose managed field is True and should ignore all other children. Note that some composite widgets, especially fixed boxes, call from their insert_child procedure. If the parent widget is realized, its change_managed procedure is called to notify it that its set of managed children has changed. The parent can reposition and resize any of its children. It moves each child as needed by calling , which first updates the x and y fields and which then calls XMoveWindow. If the composite widget wishes to change the size or border width of any of its children, it calls , which first updates the width, height, and border_width fields and then calls XConfigureWindow. Simultaneous repositioning and resizing may be done with ; see . To add a single child to its parent widget's set of managed children, use . void XtManageChild Widget child child Specifies the child. Must be of class RectObj or any subclass thereof. The function constructs a WidgetList of length 1 and calls . To create and manage a child widget in a single procedure, use or . Widget XtCreateManagedWidget String name WidgetClass widget_class Widget parent ArgList args Cardinal num_args name Specifies the resource instance name for the created widget. widget_class Specifies the widget class pointer for the created widget. (rC parent Specifies the parent widget. Must be of class Composite or any subclass thereof. args Specifies the argument list to override any other resource specifications. num_args Specifies the number of entries in the argument list. The function is a convenience routine that calls and . Widget XtVaCreateManagedWidget String name WidgetClass widget_class Widget parent name Specifies the resource instance name for the created widget. widget_class Specifies the widget class pointer for the created widget. (rC parent Specifies the parent widget. Must be of class Composite or any subclass thereof. ... Specifies the variable argument list to override any other resource specifications. is identical in function to with the args and num_args parameters replaced by a varargs list, as described in Section 2.5.1. Unmanaging Children To remove a list of children from a parent widget's managed list, use . void XtUnmanageChildren WidgetList children Cardinal num_children children Specifies a list of child widgets. Each child must be of class RectObj or any subclass thereof. num_children Specifies the number of children. The function performs the following: Returns immediately if the common parent is being destroyed. Issues an error if the children do not all have the same parent or if the parent is not a subclass of compositeWidgetClass. For each unique child on the list, ignores the child if it is unmanaged; otherwise it performs the following: Marks the child as unmanaged. If the child is realized and the map_when_managed field is True, it is unmapped. If the parent is realized and if any children have become unmanaged, calls the change_managed routine of the widgets' parent. does not destroy the child widgets. Removing widgets from a parent's managed set is often a temporary banishment, and some time later the client may manage the children again. To destroy widgets entirely, should be called instead; see . To remove a single child from its parent widget's managed set, use . void XtUnmanageChild Widget child child Specifies the child. Must be of class RectObj or any subclass thereof. The function constructs a widget list of length 1 and calls . These functions are low-level routines that are used by generic composite widget building routines. In addition, composite widgets can provide widget-specific, high-level convenience procedures. Bundling Changes to the Managed Set A client may simultaneously unmanage and manage children with a single call to the Intrinsics. In this same call the client may provide a callback procedure that can modify the geometries of one or more children. The composite widget class defines whether this single client call results in separate invocations of the change_managed method, one to unmanage and the other to manage, or in just a single invocation. To simultaneously remove from and add to the geometry-managed set of children of a composite parent, use . void XtChangeManagedSet WidgetList unmanage_children Cardinal num_unmanage_children XtDoChangeProc do_change_proc XtPointer client_data WidgetList manage_children Cardinal num_manage_children unmanage_children Specifies the list of widget children to initially remove from the managed set. num_unmanage_children Specifies the number of entries in the unmanage_children list. do_change_proc Specifies a procedure to invoke between unmanaging and managing the children, or NULL. client_data Specifies client data to be passed to the do_change_proc. manage_children Specifies the list of widget children to finally add to the managed set. num_manage_children Specifies the number of entries in the manage_children list. The function performs the following: Returns immediately if num_unmanage_children and num_manage_children are both 0. Issues a warning and returns if the widgets specified in the manage_children and the unmanage_children lists do not all have the same parent or if that parent is not a subclass of compositeWidgetClass. Returns immediately if the common parent is being destroyed. If do_change_proc is not NULL and the parent's CompositeClassExtension allows_change_managed_set field is False, then performs the following: Calls (unmanage_children, num_unmanage_children). Calls the do_change_proc. Calls (manage_children, num_manage_children). Otherwise, the following is performed: For each child on the unmanage_children list; if the child is already unmanaged it is ignored, otherwise it is marked as unmanaged, and if it is realized and its map_when_managed field is True, it is unmapped. If do_change_proc is non-NULL, the procedure is invoked. For each child on the manage_children list; if the child is already managed or is being destroyed, it is ignored; otherwise it is marked as managed. If the parent is realized and after all children have been marked, the change_managed method of the parent is invoked, and subsequently some of the newly managed children are made viewable by calling on each previously unmanaged child that is unrealized and mapping each previously unmanaged child that has map_when_managed True. If no CompositeClassExtension record is found in the parent's composite class part extension field with record type NULLQUARK and version greater than 1, and if XtInheritChangeManaged was specified in the parent's class record during class initialization, the value of the allows_change_managed_set field is inherited from the superclass. The value inherited from compositeWidgetClass for the allows_change_managed_set field is False. It is not an error to include a child in both the unmanage_children and the manage_children lists. The effect of such a call is that the child remains managed following the call, but the do_change_proc is able to affect the child while it is in an unmanaged state. The do_change_proc is of type . typedef void *XtDoChangeProc Widget composite_parent WidgetList unmange_children Cardinal *num_unmanage_children WidgetList manage_children Cardinal *num_manage_children XtPointer client_data composite_parent Passes the composite parent whose managed set is being altered. unmanage_children Passes the list of children just removed from the managed set. num_unmanage_children Passes the number of entries in the unmanage_children list. manage_children Passes the list of children about to be added to the managed set. num_manage_children Passes the number of entries in the manage_children list. client_data Passes the client data passed to . The do_change_proc procedure is used by the caller of to make changes to one or more children at the point when the managed set contains the fewest entries. These changes may involve geometry requests, and in this case the caller of may take advantage of the fact that the Intrinsics internally grant geometry requests made by unmanaged children without invoking the parent's geometry manager. To achieve this advantage, if the do_change_proc procedure changes the geometry of a child or of a descendant of a child, then that child should be included in the unmanage_children and manage_children lists. Determining if a Widget Is Managed To determine the managed state of a given child widget, use . Boolean XtIsManaged Widget w w Specifies the widget. Must be of class Object or any subclass thereof. The function returns True if the specified widget is of class RectObj or any subclass thereof and is managed, or False otherwise. Controlling When Widgets Get Mapped A widget is normally mapped if it is managed. However, this behavior can be overridden by setting the XtNmappedWhenManaged resource for the widget when it is created or by setting the map_when_managed field to False. To change the value of a given widget's map_when_managed field, use . void XtSetMappedWhenManaged Widget w Boolean map_when_managed w Specifies the widget. Must be of class Core or any subclass thereof. map_when_managed Specifies a Boolean value that indicates the new value that is stored into the widget's map_when_managed field. If the widget is realized and managed, and if map_when_managed is True, maps the window. If the widget is realized and managed, and if map_when_managed is False, it unmaps the window. is a convenience function that is equivalent to (but slightly faster than) calling and setting the new value for the XtNmappedWhenManaged resource then mapping the widget as appropriate. As an alternative to using to control mapping, a client may set mapped_when_managed to False and use and explicitly. To map a widget explicitly, use . XtMapWidget Widget w w Specifies the widget. Must be of class Core or any subclass thereof. To unmap a widget explicitly, use . XtUnmapWidget Widget w w Specifies the widget. Must be of class Core or any subclass thereof. Constrained Composite Widgets The Constraint widget class is a subclass of compositeWidgetClass. The name is derived from the fact that constraint widgets may manage the geometry of their children based on constraints associated with each child. These constraints can be as simple as the maximum width and height the parent will allow the child to occupy or can be as complicated as how other children should change if this child is moved or resized. Constraint widgets let a parent define constraints as resources that are supplied for their children. For example, if the Constraint parent defines the maximum sizes for its children, these new size resources are retrieved for each child as if they were resources that were defined by the child widget's class. Accordingly, constraint resources may be included in the argument list or resource file just like any other resource for the child. Constraint widgets have all the responsibilities of normal composite widgets and, in addition, must process and act upon the constraint information associated with each of their children. To make it easy for widgets and the Intrinsics to keep track of the constraints associated with a child, every widget has a constraints field, which is the address of a parent-specific structure that contains constraint information about the child. If a child's parent does not belong to a subclass of constraintWidgetClass, then the child's constraints field is NULL. Subclasses of Constraint can add constraint data to the constraint record defined by their superclass. To allow this, widget writers should define the constraint records in their private .h file by using the same conventions as used for widget records. For example, a widget class that needs to maintain a maximum width and height for each child might define its constraint record as follows: typedef struct { Dimension max_width, max_height; } MaxConstraintPart; typedef struct { MaxConstraintPart max; } MaxConstraintRecord, *MaxConstraint; A subclass of this widget class that also needs to maintain a minimum size would define its constraint record as follows: typedef struct { Dimension min_width, min_height; } MinConstraintPart; typedef struct { MaxConstraintPart max; MinConstraintPart min; } MaxMinConstraintRecord, *MaxMinConstraint; Constraints are allocated, initialized, deallocated, and otherwise maintained insofar as possible by the Intrinsics. The Constraint class record part has several entries that facilitate this. All entries in ConstraintClassPart are fields and procedures that are defined and implemented by the parent, but they are called whenever actions are performed on the parent's children. The function uses the constraint_size field in the parent's class record to allocate a constraint record when a child is created. also uses the constraint resources to fill in resource fields in the constraint record associated with a child. It then calls the constraint initialize procedure so that the parent can compute constraint fields that are derived from constraint resources and can possibly move or resize the child to conform to the given constraints. When the and functions are executed on a child, they use the constraint resources to get the values or set the values of constraints associated with that child. then calls the constraint set_values procedures so that the parent can recompute derived constraint fields and move or resize the child as appropriate. If a Constraint widget class or any of its superclasses have declared a ConstraintClassExtension record in the ConstraintClassPart extension fields with a record type of NULLQUARK and the get_values_hook field in the extension record is non-NULL, calls the get_values_hook procedure(s) to allow the parent to return derived constraint fields. The function calls the constraint destroy procedure to deallocate any dynamic storage associated with a constraint record. The constraint record itself must not be deallocated by the constraint destroy procedure; does this automatically. s the fewest entries. These changes may involve geometry requests, and in this case the caller of may take advlibXt-1.1.5/specs/CH04.xml000064401431060000012000002303651252061032400153620ustar00alancstaff00002660200006 Shell Widgets Shell widgets hold an application's top-level widgets to allow them to communicate with the window manager and session manager. Shells have been designed to be as nearly invisible as possible. Clients have to create them, but they should never have to worry about their sizes. If a shell widget is resized from the outside (typically by a window manager), the shell widget also resizes its managed child widget automatically. Similarly, if the shell's child widget needs to change size, it can make a geometry request to the shell, and the shell negotiates the size change with the outer environment. Clients should never attempt to change the size of their shells directly. The five types of public shells are: OverrideShell Used for shell windows that completely bypass the window manager (for example, pop-up menu shells). TransientShell Used for shell windows that have the WM_TRANSIENT_FOR property set. The effect of this property is dependent upon the window manager being used. TopLevelShell Used for normal top-level windows (for example, any additional top-level widgets an application needs). ApplicationShell Formerly used for the single main top-level window that the window manager identifies as an application instance and made obsolete by SessionShell. SessionShell Used for the single main top-level window that the window manager identifies as an application instance and that interacts with the session manager. Shell Widget Definitions Widgets negotiate their size and position with their parent widget, that is, the widget that directly contains them. Widgets at the top of the hierarchy do not have parent widgets. Instead, they must deal with the outside world. To provide for this, each top-level widget is encapsulated in a special widget, called a shell widget. Shell widgets, whose class is a subclass of the Composite class, encapsulate other widgets and can allow a widget to avoid the geometry clipping imposed by the parent-child window relationship. They also can provide a layer of communication with the window manager. The eight different types of shells are: Shell The base class for shell widgets; provides the fields needed for all types of shells. Shell is a direct subclass of compositeWidgetClass. OverrideShell A subclass of Shell; used for shell windows that completely bypass the window manager. WMShell A subclass of Shell; contains fields needed by the common window manager protocol. VendorShell A subclass of WMShell; contains fields used by vendor-specific window managers. TransientShell A subclass of VendorShell; used for shell windows that desire the WM_TRANSIENT_FOR property. TopLevelShell A subclass of VendorShell; used for normal top-level windows. ApplicationShell A subclass of TopLevelShell; may be used for an application's additional root windows. SessionShell A subclass of ApplicationShell; used for an application's main root window. Note that the classes Shell, WMShell, and VendorShell are internal and should not be instantiated or subclassed. Only OverrrideShell, TransientShell, TopLevelShell, ApplicationShell, and SessionShell are intended for public use. ShellClassPart Definitions Only the Shell class has additional class fields, which are all contained in the ShellClassExtensionRec. None of the other Shell classes have any additional class fields: typedef struct { XtPointer extension; } ShellClassPart, OverrideShellClassPart, WMShellClassPart, VendorShellClassPart, TransientShellClassPart, TopLevelShellClassPart, ApplicationShellClassPart, SessionShellClassPart; The full Shell class record definitions are: typedef struct _ShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; } ShellClassRec; typedef struct { XtPointer next_extension; See XrmQuark record_type; See long version; See Cardinal record_size; See XtGeometryHandler root_geometry_manager; See below } ShellClassExtensionRec, *ShellClassExtension; typedef struct _OverrideShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; OverrideShellClassPart override_shell_class; } OverrideShellClassRec; typedef struct _WMShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; } WMShellClassRec; typedef struct _VendorShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; } VendorShellClassRec; typedef struct _TransientShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TransientShellClassPart transient_shell_class; } TransientShellClassRec; typedef struct _TopLevelShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; } TopLevelShellClassRec; typedef struct _ApplicationShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; ApplicationShellClassPart application_shell_class; } ApplicationShellClassRec; typedef struct _SessionShellClassRec { CoreClassPart core_class; CompositeClassPart composite_class; ShellClassPart shell_class; WMShellClassPart wm_shell_class; VendorShellClassPart vendor_shell_class; TopLevelShellClassPart top_level_shell_class; ApplicationShellClassPart application_shell_class; SessionShellClassPart session_shell_class; } SessionShellClassRec; The single occurrences of the class records and pointers for creating instances of shells are: extern ShellClassRec shellClassRec; extern OverrideShellClassRec overrideShellClassRec; extern WMShellClassRec wmShellClassRec; extern VendorShellClassRec vendorShellClassRec; extern TransientShellClassRec transientShellClassRec; extern TopLevelShellClassRec topLevelShellClassRec; extern ApplicationShellClassRec applicationShellClassRec; extern SessionShellClassRec sessionShellClassRec; extern WidgetClass shellWidgetClass; extern WidgetClass overrideShellWidgetClass; extern WidgetClass wmShellWidgetClass; extern WidgetClass vendorShellWidgetClass; extern WidgetClass transientShellWidgetClass; extern WidgetClass topLevelShellWidgetClass; extern WidgetClass applicationShellWidgetClass; extern WidgetClass sessionShellWidgetClass; The following opaque types and opaque variables are defined for generic operations on widgets whose class is a subclass of Shell. Types Variables ShellWidget shellWidgetClass OverrideShellWidget overrideShellWidgetClass WMShellWidget wmShellWidgetClass VendorShellWidget vendorShellWidgetClass TransientShellWidget transientShellWidgetClass TopLevelShellWidget topLevelShellWidgetClass ApplicationShellWidget applicationShellWidgetClass SessionShellWidget sessionShellWidgetClass ShellWidgetClass OverrideShellWidgetClass WMShellWidgetClass VendorShellWidgetClass TransientShellWidgetClass TopLevelShellWidgetClass ApplicationShellWidgetClass SessionShellWidgetClass The declarations for all Intrinsics-defined shells except VendorShell appear in Shell.h and ShellP.h. VendorShell has separate public and private .h files which are included by Shell.h and ShellP.h. Shell.h uses incomplete structure definitions to ensure that the compiler catches attempts to access private data in any of the Shell instance or class data structures. The symbolic constant for the ShellClassExtension version identifier is XtShellExtensionVersion (see ). The root_geometry_manager procedure acts as the parent geometry manager for geometry requests made by shell widgets. When a shell widget calls either or , the root_geometry_manager procedure is invoked to negotiate the new geometry with the window manager. If the window manager permits the new geometry, the root_geometry_manager procedure should return XtGeometryYes; if the window manager denies the geometry request or does not change the window geometry within some timeout interval (equal to wm_timeout in the case of WMShells), the root_geometry_manager procedure should return XtGeometryNo. If the window manager makes some alternative geometry change, the root_geometry_manager procedure may return either XtGeometryNo and handle the new geometry as a resize or XtGeometryAlmost in anticipation that the shell will accept the compromise. If the compromise is not accepted, the new size must then be handled as a resize. Subclasses of Shell that wish to provide their own root_geometry_manager procedures are strongly encouraged to use enveloping to invoke their superclass's root_geometry_manager procedure under most situations, as the window manager interaction may be very complex. If no ShellClassPart extension record is declared with record_type equal to NULLQUARK, then XtInheritRootGeometryManager is assumed. ShellPart Definition The various shell widgets have the following additional instance fields defined in their widget records: typedef struct { String geometry; XtCreatePopupChildProc create_popup_child_proc; XtGrabKind grab_kind; Boolean spring_loaded; Boolean popped_up; Boolean allow_shell_resize; Boolean client_specified; Boolean save_under; Boolean override_redirect; XtCallbackList popup_callback; XtCallbackList popdown_callback; Visual * visual; } ShellPart; typedef struct { int empty; } OverrideShellPart; typedef struct { String title; int wm_timeout; Boolean wait_for_wm; Boolean transient; Boolean urgency; Widget client_leader; String window_role; struct _OldXSizeHints { long flags; int x, y; int width, height; int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; int y; } min_aspect, max_aspect; } size_hints; XWMHints wm_hints; int base_width, base_height, win_gravity; Atom title_encoding; } WMShellPart; typedef struct { int vendor_specific; } VendorShellPart; typedef struct { Widget transient_for; } TransientShellPart; typedef struct { String icon_name; Boolean iconic; Atom icon_name_encoding; } TopLevelShellPart; typedef struct { char * class; XrmClass xrm_class; int argc; char ** argv; } ApplicationShellPart; typedef struct { SmcConn connection; String session_id; String * restart_command; String * clone_command; String * discard_command; String * resign_command; String * shutdown_command; String * environment; String current_dir; String program_path; unsigned char restart_style; Boolean join_session; XtCallbackList save_callbacks; XtCallbackList interact_callbacks; XtCallbackList cancel_callbacks; XtCallbackList save_complete_callbacks; XtCallbackList die_callbacks; XtCallbackList error_callbacks; } SessionShellPart; The full shell widget instance record definitions are: typedef struct { CorePart core; CompositePart composite; ShellPart shell; } ShellRec, *ShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; OverrideShellPart override; } OverrideShellRec, *OverrideShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; } WMShellRec, *WMShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; } VendorShellRec, *VendorShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TransientShellPart transient; } TransientShellRec, *TransientShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; } TopLevelShellRec, *TopLevelShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; ApplicationShellPart application; } ApplicationShellRec, *ApplicationShellWidget; typedef struct { CorePart core; CompositePart composite; ShellPart shell; WMShellPart wm; VendorShellPart vendor; TopLevelShellPart topLevel; ApplicationShellPart application; SessionShellPart session; } SessionShellRec, *SessionShellWidget; Shell Resources The resource names, classes, and representation types specified in the shellClassRec resource list are: Name Class Representation XtNallowShellResize XtCAllowShellResize XtRBoolean XtNcreatePopupChildProc XtCCreatePopupChildProc XtRFunction XtNgeometry XtCGeometry XtRString XtNoverrideRedirect XtCOverrideRedirect XtRBoolean XtNpopdownCallback XtCCallback XtRCallback XtNpopupCallback XtCCallback XtRCallback XtNsaveUnder XtCSaveUnder XtRBoolean XtNvisual XtCVisual XtRVisual OverrideShell declares no additional resources beyond those defined by Shell. The resource names, classes, and representation types specified in the wmShellClassRec resource list are: Name Class Representation XtNbaseHeight XtCBaseHeight XtRInt XtNbaseWidth XtCBaseWidth XtRInt XtNclientLeader XtCClientLeader XtRWidget XtNheightInc XtCHeightInc XtRInt XtNiconMask XtCIconMask XtRBitmap XtNiconPixmap XtCIconPixmap XtRBitmap XtNiconWindow XtCIconWindow XtRWindow XtNiconX XtCIconX XtRInt XtNiconY XtCIconY XtRInt XtNinitialState XtCInitialState XtRInitialState XtNinput XtCInput XtRBool XtNmaxAspectX XtCMaxAspectX XtRInt XtNmaxAspectY XtCMaxAspectY XtRInt XtNmaxHeight XtCMaxHeight XtRInt XtNmaxWidth XtCMaxWidth XtRInt XtNminAspectX XtCMinAspectX XtRInt XtNminAspectY XtCMinAspectY XtRInt XtNminHeight XtCMinHeight XtRInt XtNminWidth XtCMinWidth XtRInt XtNtitle XtCTitle XtRString XtNtitleEncoding XtCTitleEncoding XtRAtom XtNtransient XtCTransient XtRBoolean XtNwaitforwm, XtNwaitForWm XtCWaitforwm, XtCWaitForWm XtRBoolean XtNwidthInc XtCWidthInc XtRInt XtNwindowRole XtCWindowRole XtRString XtNwinGravity XtCWinGravity XtRGravity XtNwindowGroup XtCWindowGroup XtRWindow XtNwmTimeout XtCWmTimeout XtRInt XtNurgency XtCUrgency XtRBoolean _ The class resource list for VendorShell is implementation-defined. The resource names, classes, and representation types that are specified in the transient\%ShellClassRec resource list are: Name Class Representation XtNtransientFor XtCTransientFor XtRWidget The resource names, classes, and representation types that are specified in the topLevelShellClassRec resource list are: Name Class Representation XtNiconName XtCIconName XtRString XtNiconNameEncoding XtCIconNameEncoding XtRAtom XtNiconic XtCIconic XtRBoolean The resource names, classes, and representation types that are specified in the application\%ShellClassRec resource list are: Name Class Representation XtNargc XtCArgc XtRInt XtNargv XtCArgv XtRStringArray The resource names, classes, and representation types that are specified in the sessionShellClassRec resource list are: Name Class Representation XtNcancelCallback XtCCallback XtRCallback XtNcloneCommand XtCCloneCommand XtRCommandArgArray XtNconnection XtCConnection XtRSmcConn XtNcurrentDirectory XtCCurrentDirectory XtRDirectoryString XtNdieCallback XtCCallback XtRCallback XtNdiscardCommand XtCDiscardCommand XtRCommandArgArray XtNenvironment XtCEnvironment XtREnvironmentArray XtNerrorCallback XtCCallback XtRCallback XtNinteractCallback XtCCallback XtRCallback XtNjoinSession XtCJoinSession XtRBoolean XtNprogramPath XtCProgramPath XtRString XtNresignCommand XtCResignCommand XtRCommandArgArray XtNrestartCommand XtCRestartCommand XtRCommandArgArray XtNrestartStyle XtCRestartStyle XtRRestartStyle XtNsaveCallback XtCCallback XtRCallback XtNsaveCompleteCallback XtCCallback XtRCallback XtNsessionID XtCSessionID XtRString XtNshutdownCommand XtCShutdownCommand XtRCommandArgArray ShellPart Default Values The default values for fields common to all classes of public shells (filled in by the Shell resource lists and the Shell initialize procedures) are: Field Default Value geometry NULL create_popup_child_proc NULL grab_kind (none) spring_loaded (none) popped_up False allow_shell_resize False client_specified (internal) save_under True for OverrideShell and TransientShell, False otherwise override_redirect True for OverrideShell, False otherwise popup_callback NULL popdown_callback NULL visual CopyFromParent The geometry field specifies the size and position and is usually given only on a command line or in a defaults file. If the geometry field is non-NULL when a widget of class WMShell is realized, the geometry specification is parsed using XWMGeometry with a default geometry string constructed from the values of x, y, width, height, width_inc, and height_inc and the size and position flags in the window manager size hints are set. If the geometry specifies an x or y position, then USPosition is set. If the geometry specifies a width or height, then USSize is set. Any fields in the geometry specification override the corresponding values in the Core x, y, width, and height fields. If geometry is NULL or contains only a partial specification, then the Core x, y, width, and height fields are used and PPosition and PSize are set as appropriate. The geometry string is not copied by any of the Intrinsics Shell classes; a client specifying the string in an arglist or varargs list must ensure that the value remains valid until the shell widget is realized. For further information on the geometry string, see in Xlib — C Language X Interface. The create_popup_child_proc procedure is called by the procedure and may remain NULL. The grab_kind, spring_loaded, and popped_up fields maintain widget state information as described under , , , and . The allow_shell_resize field controls whether the widget contained by the shell is allowed to try to resize itself. If allow_shell_resize is False, any geometry requests made by the child will always return XtGeometryNo without interacting with the window manager. Setting save_under True instructs the server to attempt to save the contents of windows obscured by the shell when it is mapped and to restore those contents automatically when the shell is unmapped. It is useful for pop-up menus. Setting override_redirect True determines whether the window manager can intercede when the shell window is mapped. For further information on override_redirect, see in Xlib — C Language X Interface and and in the Inter-Client Communication Conventions Manual. The pop-up and pop-down callbacks are called during and . The default value of the visual resource is the symbolic value CopyFromParent. The Intrinsics do not need to query the parent's visual type when the default value is used; if a client using to examine the visual type receives the value CopyFromParent, it must then use XGetWindowAttributes if it needs the actual visual type. The default values for Shell fields in WMShell and its subclasses are: Field Default Value title Icon name, if specified, otherwise the application's name wm_timeout Five seconds, in units of milliseconds wait_for_wm True transient True for TransientShell, False otherwise urgency False client_leader NULL window_role NULL min_width XtUnspecifiedShellInt min_height XtUnspecifiedShellInt max_width XtUnspecifiedShellInt max_height XtUnspecifiedShellInt width_inc XtUnspecifiedShellInt height_inc XtUnspecifiedShellInt min_aspect_x XtUnspecifiedShellInt min_aspect_y XtUnspecifiedShellInt max_aspect_x XtUnspecifiedShellInt max_aspect_y XtUnspecifiedShellInt input False initial_state Normal icon_pixmap None icon_window None icon_x XtUnspecifiedShellInt icon_y XtUnspecifiedShellInt icon_mask None window_group XtUnspecifiedWindow base_width XtUnspecifiedShellInt base_height XtUnspecifiedShellInt win_gravity XtUnspecifiedShellInt title_encoding See text The title and title_encoding fields are stored in the WM_NAME property on the shell's window by the WMShell realize procedure. If the title_encoding field is None, the title string is assumed to be in the encoding of the current locale and the encoding of the WM_NAME property is set to XStdICCTextStyle. If a language procedure has not been set the default value of title_encoding is XA_STRING, otherwise the default value is None. The wm_timeout field specifies, in milliseconds, the amount of time a shell is to wait for confirmation of a geometry request to the window manager. If none comes back within that time, the shell assumes the window manager is not functioning properly and sets wait_for_wm to False (later events may reset this value). When wait_for_wm is False, the shell does not wait for a response, but relies on asynchronous notification. If transient is True, the WM_TRANSIENT_FOR property will be stored on the shell window with a value as specified below. The interpretation of this property is specific to the window manager under which the application is run; see the Inter-Client Communication Conventions Manual for more details. The realize and set_values procedures of WMShell store the WM_CLIENT_LEADER property on the shell window. When client_leader is not NULL and the client leader widget is realized, the property will be created with the value of the window of the client leader widget. When client_leader is NULL and the shell widget has a NULL parent, the widget's window is used as the value of the property. When client_leader is NULL and the shell widget has a non-NULL parent, a search is made for the closest shell ancestor with a non-NULL client_leader, and if none is found the shell ancestor with a NULL parent is the result. If the resulting widget is realized, the property is created with the value of the widget's window. When the value of window_role is not NULL, the realize and set_values procedures store the WM_WINDOW_ROLE property on the shell's window with the value of the resource. All other resources specify fields in the window manager hints and the window manager size hints. The realize and set_values procedures of WMShell set the corresponding flag bits in the hints if any of the fields contain nondefault values. In addition, if a flag bit is set that refers to a field with the value XtUnspecifiedShellInt, the value of the field is modified as follows: Field Replacement base_width, base_height 0 width_inc, height_inc 1 max_width, max_height 32767 min_width, min_height 1 min_aspect_x, min_aspect_y -1 max_aspect_x, max_aspect_y -1 icon_x, icon_y -1 win_gravity Value returned by XWMGeometry if called, else NorthWestGravity If the shell widget has a non-NULL parent, then the realize and set_values procedures replace the value XtUnspecifiedWindow in the window_group field with the window id of the root widget of the widget tree if the root widget is realized. The symbolic constant XtUnspecifiedWindowGroup may be used to indicate that the window_group hint flag bit is not to be set. If transient is True, the shell's class is not a subclass of TransientShell, and window_group is not XtUnspecifiedWindowGroup, the WMShell realize and set_values procedures then store the WM_TRANSIENT_FOR property with the value of window_group. Transient shells have the following additional resource: Field Replacement transient_for NULL The realize and set_values procedures of TransientShell store the WM_TRANSIENT_FOR property on the shell window if transient is True. If transient_for is non-NULL and the widget specified by transient_for is realized, then its window is used as the value of the WM_TRANSIENT_FOR property; otherwise, the value of window_group is used. TopLevel shells have the the following additional resources: Field Default Value icon_name Shell widget's name iconic False icon_name_encoding See text The icon_name and icon_name_encoding fields are stored in the WM_ICON_NAME property on the shell's window by the TopLevelShell realize procedure. If the icon_name_encoding field is None, the icon_name string is assumed to be in the encoding of the current locale and the encoding of the WM_ICON_NAME property is set to XStdICCTextStyle. If a language procedure has not been set, the default value of icon_name_encoding is XA_STRING, otherwise the default value is None. The iconic field may be used by a client to request that the window manager iconify or deiconify the shell; the TopLevelShell set_values procedure will send the appropriate WM_CHANGE_STATE message (as specified by the Inter-Client Communication Conventions Manual) if this resource is changed from False to True and will call specifying grab_kind as XtGrabNone if iconic is changed from True to False. The XtNiconic resource is also an alternative way to set the XtNinitialState resource to indicate that a shell should be initially displayed as an icon; the TopLevelShell initialize procedure will set initial_state to IconicState if iconic is True. Application shells have the following additional resources: Field Default Value argc 0 argv NULL The argc and argv fields are used to initialize the standard property WM_COMMAND. See the Inter-Client Communication Conventions Manual for more information. The default values for the SessionShell instance fields, which are filled in from the resource lists and by the initialize procedure, are Field Default Value cancel_callbacks NULL clone_command See text connection NULL current_dir NULL die_callbacks NULL discard_command NULL environment NULL error_callbacks NULL interact_callbacks NULL join_session True program_path NULL resign_command NULL restart_command See text restart_style SmRestartIfRunning save_callbacks NULL save_complete_callbacks NULL session_id NULL shutdown_command NULL The connection field contains the session connection object or NULL if a session connection is not being managed by this widget. The session_id is an identification assigned to the session participant by the session manager. The session_id will be passed to the session manager as the client identifier of the previous session. When a connection is established with the session manager, the client id assigned by the session manager is stored in the session_id field. When not NULL, the session_id of the Session shell widget that is at the root of the widget tree of the client leader widget will be used to create the SM_CLIENT_ID property on the client leader's window. If join_session is False, the widget will not attempt to establish a connection to the session manager at shell creation time. See and for more information on the functionality of this resource. The restart_command, clone_command, discard_command, resign_command, shutdown_command, environment, current_dir, program_path, and restart_style fields contain standard session properties. When a session connection is established or newly managed by the shell, the shell initialize and set_values methods check the values of the restart_command, clone_command, and program_path resources. At that time, if restart_command is NULL, the value of the argv resource will be copied to restart_command. Whether or not restart_command was NULL, if "-xtsessionID" "<session id>" does not already appear in the restart_command, it will be added by the initialize and set_values methods at the beginning of the command arguments; if the "-xtsessionID" argument already appears with an incorrect session id in the following argument, that argument will be replaced with the current session id. After this, the shell initialize and set_values procedures check the clone_command. If clone_command is NULL, restart_command will be copied to clone_command, except the "-xtsessionID" and following argument will not be copied. Finally, the shell initialize and set_values procedures check the program_path. If program_path is NULL, the first element of restart_command is copied to program_path. The possible values of restart_style are SmRestartIfRunning, SmRestartAnyway, SmRestartImmediately, and SmRestartNever. A resource converter is registered for this resource; for the strings that it recognizes, see . The resource type EnvironmentArray is a NULL-terminated array of pointers to strings; each string has the format "name=value". The `=' character may not appear in the name, and the string is terminated by a null character. Session Participation Applications can participate in a user's session, exchanging messages with the session manager as described in the X Session Management Protocol and the X Session Management Library. When a widget of sessionShellWidgetClass or a subclass is created, the widget provides support for the application as a session participant and continues to provide support until the widget is destroyed. Joining a Session When a Session shell is created, if connection is NULL, and if join_session is True, and if argv or restart_command is not NULL, and if in POSIX environments the SESSION_MANAGER environment variable is defined, the shell will attempt to establish a new connection with the session manager. To transfer management of an existing session connection from an application to the shell at widget creation time, pass the existing session connection ID as the connection resource value when creating the Session shell, and if the other creation-time conditions on session participation are met, the widget will maintain the connection with the session manager. The application must ensure that only one Session shell manages the connection. In the Session shell set_values procedure, if join_session changes from False to True and connection is NULL and when in POSIX environments the SESSION_MANAGER environment variable is defined, the shell will attempt to open a connection to the session manager. If connection changes from NULL to non-NULL, the Session shell will take over management of that session connection and will set join_session to True. If join_session changes from False to True and connection is not NULL, the Session shell will take over management of the session connection. When a successful connection has been established, connection contains the session connection ID for the session participant. When the shell begins to manage the connection, it will call to register the handler which watches for protocol messages from the session manager. When the attempt to connect fails, a warning message is issued and connection is set to NULL. While the connection is being managed, if a SaveYourself, SaveYourselfPhase2, Interact, ShutdownCancelled, SaveComplete, or Die message is received from the session manager, the Session shell will call out to application callback procedures registered on the respective callback list of the Session shell and will send SaveYourselfPhase2Request, InteractRequest, InteractDone, SaveYourselfDone, and ConnectionClosed messages as appropriate. Initially, all of the client's session properties are undefined. When any of the session property resource values are defined or change, the Session shell initialize and set_values procedures will update the client's session property value by a SetProperties or a DeleteProperties message, as appropriate. The session ProcessID and UserID properties are always set by the shell when it is possible to determine the value of these properties. Saving Application State The session manager instigates an application checkpoint by sending a SaveYourself request. Applications are responsible for saving their state in response to the request. When the SaveYourself request arrives, the procedures registered on the Session shell's save callback list are called. If the application does not register any save callback procedures on the save callback list, the shell will report to the session manager that the application failed to save its state. Each procedure on the save callback list receives a token in the call_data parameter. The checkpoint token in the call_data parameter is of type XtCheckpointToken. typedef struct { int save_type; int interact_style; Boolean shutdown; Boolean fast; Boolean cancel_shutdown int phase; int interact_dialog_type; /* return */ Boolean request_cancel; /* return */ Boolean request_next_phase; /* return */ Boolean save_success; /* return */ } XtCheckpointTokenRec, *XtCheckpointToken; The save_type, interact_style, shutdown, and fast fields of the token contain the parameters of the SaveYourself message. The possible values of save_type are SmSaveLocal, SmSaveGlobal, and SmSaveBoth; these indicate the type of information to be saved. The possible values of interact_style are SmInteractStyleNone, SmInteractStyleErrors, and SmInteractStyleAny; these indicate whether user interaction would be permitted and, if so, what kind of interaction. If shutdown is True, the checkpoint is being performed in preparation for the end of the session. If fast is True, the client should perform the checkpoint as quickly as possible. If cancel_shutdown is True, a ShutdownCancelled message has been received for the current save operation. (See .) The phase is used by manager clients, such as a window manager, to distinguish between the first and second phase of a save operation. The phase will be either 1 or 2. The remaining fields in the checkpoint token structure are provided for the application to communicate with the shell. Upon entry to the first application save callback procedure, the return fields in the token have the following initial values: interact_dialog_type is SmDialogNormal; request_cancel is False; request_next_phase is False; and save_success is True. When a token is returned with any of the four return fields containing a noninitial value, and when the field is applicable, subsequent tokens passed to the application during the current save operation will always contain the noninitial value. The purpose of the token's save_success field is to indicate the outcome of the entire operation to the session manager and ultimately, to the user. Returning False indicates some portion of the application state could not be successfully saved. If any token is returned to the shell with save_success False, tokens subsequently received by the application for the current save operation will show save_success as False. When the shell sends the final status of the checkpoint to the session manager, it will indicate failure to save application state if any token was returned with save_success False. Session participants that manage and save the state of other clients should structure their save or interact callbacks to set request_next_phase to True when phase is 1, which will cause the shell to send the SaveYourselfPhase2Request when the first phase is complete. When the SaveYourselfPhase2 message is received, the shell will invoke the save callbacks a second time with phase equal to 2. Manager clients should save the state of other clients when the callbacks are invoked the second time and phase equal to 2. The application may request additional tokens while a checkpoint is under way, and these additional tokens must be returned by an explicit call. To request an additional token for a save callback response that has a deferred outcome, use . XtCheckpointToken XtSessionGetToken Widget widget widget Specifies the Session shell widget which manages session participation. The function will return NULL if no checkpoint operation is currently under way. To indicate the completion of checkpoint processing including user interaction, the application must signal the Session shell by returning all tokens. (See and ). To return a token, use . void XtSessionReturnToken XtCheckpointToken token token Specifies a token that was received as the call_data by a procedure on the interact callback list or a token that was received by a call to . Tokens passed as call_data to save callbacks are implicitly returned when the save callback procedure returns. A save callback procedure should not call on the token passed in its call_data. Requesting Interaction When the token interact_style allows user interaction, the application may interact with the user during the checkpoint, but must wait for permission to interact. Applications request permission to interact with the user during the checkpointing operation by registering a procedure on the Session shell's interact callback list. When all save callback procedures have returned, and each time a token that was granted by a call to is returned, the Session shell examines the interact callback list. If interaction is permitted and the interact callback list is not empty, the shell will send an InteractRequest to the session manager when an interact request is not already outstanding for the application. The type of interaction dialog that will be requested is specified by the interact_dialog_type field in the checkpoint token. The possible values for interact_dialog_type are SmDialogError and SmDialogNormal. If a token is returned with interact_dialog_type containing SmDialogError, the interact request and any subsequent interact requests will be for an error dialog; otherwise, the request will be for a normal dialog with the user. When a token is returned with save_success False or interact_dialog_type SmDialogError, tokens subsequently passed to callbacks during the same active SaveYourself response will reflect these changed values, indicating that an error condition has occurred during the checkpoint. The request_cancel field is a return value for interact callbacks only. Upon return from a procedure on the save callback list, the value of the token's request_cancel field is not examined by the shell. This is also true of tokens received through a call to . Interacting with the User during a Checkpoint When the session manager grants the application's request for user interaction, the Session shell receives an Interact message. The procedures registered on the interact callback list are executed, but not as if executing a typical callback list. These procedures are individually executed in sequence, with a checkpoint token functioning as the sequencing mechanism. Each step in the sequence begins by removing a procedure from the interact callback list and executing it with a token passed in the call_data. The interact callback will typically pop up a dialog box and return. When the user interaction and associated application checkpointing has completed, the application must return the token by calling . Returning the token completes the current step and triggers the next step in the sequence. During interaction the client may request cancellation of a shutdown. When a token passed as call_data to an interact procedure is returned, if shutdown is True and cancel_shutdown is False, request_cancel indicates whether the application requests that the pending shutdown be cancelled. If request_cancel is True, the field will also be True in any tokens subsequently granted during the checkpoint operation. When a token is returned requesting cancellation of the session shutdown, pending interact procedures will still be called by the Session shell. When all interact procedures have been removed from the interact callback list, executed, and the final interact token returned to the shell, an InteractDone message is sent to the session manager, indicating whether a pending session shutdown is requested to be cancelled. Responding to a Shutdown Cancellation Callbacks registered on the cancel callback list are invoked when the Session shell processes a ShutdownCancelled message from the session manager. This may occur during the processing of save callbacks, while waiting for interact permission, during user interaction, or after the save operation is complete and the application is expecting a SaveComplete or a Die message. The call_data for these callbacks is NULL. When the shell notices that a pending shutdown has been cancelled, the token cancel_shutdown field will be True in tokens subsequently given to the application. Receiving notice of a shutdown cancellation does not cancel the pending execution of save callbacks or interact callbacks. After the cancel callbacks execute, if interact_style is not SmInteractStyleNone and the interact list is not empty, the procedures on the interact callback list will be executed and passed a token with interact_style SmInteractStyleNone. The application should not interact with the user, and the Session shell will not send an InteractDone message. Completing a Save When there is no user interaction, the shell regards the application as having finished saving state when all callback procedures on the save callback list have returned, and any additional tokens passed out by have been returned by corresponding calls to . If the save operation involved user interaction, the above completion conditions apply, and in addition, all requests for interaction have been granted or cancelled, and all tokens passed to interact callbacks have been returned through calls to . If the save operation involved a manager client that requested the second phase, the above conditions apply to both the first and second phase of the save operation. When the application has finished saving state, the Session shell will report the result to the session manager by sending the SaveYourselfDone message. If the session is continuing, the shell will receive the SaveComplete message when all applications have completed saving state. This message indicates that applications may again allow changes to their state. The shell will execute the save_complete callbacks. The call_data for these callbacks is NULL. Responding to a Shutdown Callbacks registered on the die callback list are invoked when the session manager sends a Die message. The callbacks on this list should do whatever is appropriate to quit the application. Before executing procedures on the die callback list, the Session shell will close the connection to the session manager and will remove the handler that watches for protocol messages. The call_data for these callbacks is NULL. Resigning from a Session When the Session shell widget is destroyed, the destroy method will close the connection to the session manager by sending a ConnectionClosed protocol message and will remove the input callback that was watching for session protocol messages. When is used to set join_session to False, the set_values method of the Session shell will close the connection to the session manager if one exists by sending a ConnectionClosed message, and connection will be set to NULL. Applications that exit in response to user actions and that do not wait for phase 2 destroy to complete on the Session shell should set join_session to False before exiting. When is used to set connection to NULL, the Session shell will stop managing the connection, if one exists. However, that session connection will not be closed. Applications that wish to ensure continuation of a session connection beyond the destruction of the shell should first retrieve the connection resource value, then set the connection resource to NULL, and then they may safely destroy the widget without losing control of the session connection. The error callback list will be called if an unrecoverable communications error occurs while the shell is managing the connection. The shell will close the connection, set connection to NULL, remove the input callback, and call the procedures registered on the error callback list. The call_data for these callbacks is NULL. e'/> on the token passed in its call_data. Requesting Interaction When the token interact_style allows user interaction, the application mlibXt-1.1.5/specs/CH12.xml000064401431060000012000001021071252061032400153510ustar00alancstaff00002660200006 Nonwidget Objects Although widget writers are free to treat Core as the base class of the widget hierarchy, there are actually three classes above it. These classes are Object, RectObj (Rectangle Object), and (unnamed), and members of these classes are referred to generically as objects. By convention, the term widget refers only to objects that are a subclass of Core, and the term nonwidget refers to objects that are not a subclass of Core. In the preceding portion of this specification, the interface descriptions indicate explicitly whether the generic widget argument is restricted to particular subclasses of Object. Sections 12.2.5, 12.3.5, and 12.5 summarize the permissible classes of the arguments to, and return values from, each of the Intrinsics routines. Data Structures In order not to conflict with previous widget code, the data structures used by nonwidget objects do not follow all the same conventions as those for widgets. In particular, the class records are not composed of parts but instead are complete data structures with filler for the widget fields they do not use. This allows the static class initializers for existing widgets to remain unchanged. Object Objects The Object object contains the definitions of fields common to all objects. It encapsulates the mechanisms for resource management. All objects and widgets are members of subclasses of Object, which is defined by the ObjectClassPart and ObjectPart structures. ObjectClassPart Structure The common fields for all object classes are defined in the ObjectClassPart structure. All fields have the same purpose, function, and restrictions as the corresponding fields in CoreClassPart; fields whose names are objn for some integer n are not used for Object, but exist to pad the data structure so that it matches Core's class record. The class record initialization must fill all objn fields with NULL or zero as appropriate to the type. typedef struct _ObjectClassPart { WidgetClass superclass; String class_name; Cardinal widget_size; XtProc class_initialize; XtWidgetClassProc class_part_initialize; XtEnum class_inited; XtInitProc initialize; XtArgsProc initialize_hook; XtProc obj1; XtPointer obj2; Cardinal obj3; XtResourceList resources; Cardinal num_resources; XrmClass xrm_class; Boolean obj4; XtEnum obj5; Boolean obj6; Boolean obj7; XtWidgetProc destroy; XtProc obj8; XtProc obj9; XtSetValuesFunc set_values; XtArgsFunc set_values_hook; XtProc obj10; XtArgsProc get_values_hook; XtProc obj11; XtVersionType version; XtPointer callback_private; String obj12; XtProc obj13; XtProc obj14; XtPointer extension; } ObjectClassPart; The extension record defined for ObjectClassPart with a record_type equal to NULLQUARK is ObjectClassExtensionRec. typedef struct { XtPointer next_extension; See XrmQuark record_type; See long version; See Cardinal record_size; See XtAllocateProc allocate; See . XtDeallocateProc deallocate; See . } ObjectClassExtensionRec, *ObjectClassExtension; The prototypical ObjectClass consists of just the ObjectClassPart. typedef struct _ObjectClassRec { ObjectClassPart object_class; } ObjectClassRec, *ObjectClass; The predefined class record and pointer for ObjectClassRec are In IntrinsicP.h: extern ObjectClassRec objectClassRec; In Intrinsic.h: extern WidgetClass objectClass; The opaque types Object and ObjectClass and the opaque variable objectClass are defined for generic actions on objects. The symbolic constant for the ObjectClassExtension version identifier is XtObjectExtensionVersion (see ). Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data: typedef struct _ObjectClassRec* ObjectClass; ObjectPart Structure The common fields for all object instances are defined in the ObjectPart structure. All fields have the same meaning as the corresponding fields in CorePart. typedef struct _ObjectPart { Widget self; WidgetClass widget_class; Widget parent; Boolean being_destroyed; XtCallbackList destroy_callbacks; XtPointer constraints; } ObjectPart; All object instances have the Object fields as their first component. The prototypical type Object is defined with only this set of fields. Various routines can cast object pointers, as needed, to specific object types. In IntrinsicP.h: typedef struct _ObjectRec { ObjectPart object; } ObjectRec, *Object; In Intrinsic.h: typedef struct _ObjectRec *Object; Object Resources The resource names, classes, and representation types specified in the objectClassRec resource list are: Name Class Representation XtNdestroyCallback XtCCallback XtRCallback ObjectPart Default Values All fields in ObjectPart have the same default values as the corresponding fields in CorePart. Object Arguments to Intrinsics Routines The WidgetClass arguments to the following procedures may be objectClass or any subclass: XtInitializeWidgetClass, XtCreateWidget, XtVaCreateWidget XtIsSubclass, XtCheckSubclass XtGetResourceList, XtGetConstraintResourceList The Widget arguments to the following procedures may be of class Object or any subclass: , , , , , , , , , XtSuperclass, , , XtIsObject, XtIsRectObj, XtIsWidget, XtIsComposite, XtIsConstraint, XtIsShell, XtIsOverrideShell, XtIsWMShell, XtIsVendorShell, XtIsTransientShell, XtIsToplevelShell, XtIsApplicationShell, XtIsSessionShell , (both will return False if argument is not a subclass of RectObj) (returns the state of the nearest windowed ancestor if class of argument is not a subclass of Core) XtParent, , , (descendant) , , , , , , , , The return value of the following procedures will be of class Object or a subclass: , XtParent The return value of the following procedures will be objectClass or a subclass: , XtSuperclass Use of Objects The Object class exists to enable programmers to use the Intrinsics' classing and resource-handling mechanisms for things smaller and simpler than widgets. Objects make obsolete many common uses of subresources as described in Sections 9.4, 9.7.2.4, and 9.7.2.5. Composite widget classes that wish to accept nonwidget children must set the accepts_objects field in the CompositeClassExtension structure to True. will otherwise generate an error message on an attempt to create a nonwidget child. Of the classes defined by the Intrinsics, ApplicationShell and SessionShell accept nonwidget children, and the class of any nonwidget child must not be rectObjClass or any subclass. The intent of allowing Object children of ApplicationShell and SessionShell is to provide clients a simple mechanism for establishing the resource-naming root of an object hierarchy. Rectangle Objects The class of rectangle objects is a subclass of Object that represents rectangular areas. It encapsulates the mechanisms for geometry management and is called RectObj to avoid conflict with the Xlib Rectangle data type. RectObjClassPart Structure As with the ObjectClassPart structure, all fields in the RectObjClassPart structure have the same purpose and function as the corresponding fields in CoreClassPart; fields whose names are rectn for some integer n are not used for RectObj, but exist to pad the data structure so that it matches Core's class record. The class record initialization must fill all rectn fields with NULL or zero as appropriate to the type. typedef struct _RectObjClassPart { WidgetClass superclass; String class_name; Cardinal widget_size; XtProc class_initialize; XtWidgetClassProc class_part_initialize; XtEnum class_inited; XtInitProc initialize; XtArgsProc initialize_hook; XtProc rect1; XtPointer rect2; Cardinal rect3; XtResourceList resources; Cardinal num_resources; XrmClass xrm_class; Boolean rect4; XtEnum rect5; Boolean rect6; Boolean rect7; XtWidgetProc destroy; XtWidgetProc resize; XtExposeProc expose; XtSetValuesFunc set_values; XtArgsFunc set_values_hook; XtAlmostProc set_values_almost; XtArgsProc get_values_hook; XtProc rect9; XtVersionType version; XtPointer callback_private; String rect10; XtGeometryHandler query_geometry; XtProc rect11; XtPointer extension ; } RectObjClassPart; The RectObj class record consists of just the RectObjClassPart. typedef struct _RectObjClassRec { RectObjClassPart rect_class; } RectObjClassRec, *RectObjClass; The predefined class record and pointer for RectObjClassRec are In Intrinsic.h: extern RectObjClassRec rectObjClassRec; In Intrinsic.h: extern WidgetClass rectObjClass; The opaque types RectObj and RectObjClass and the opaque variable rectObjClass are defined for generic actions on objects whose class is RectObj or a subclass of RectObj. Intrinsic.h uses an incomplete structure definition to ensure that the compiler catches attempts to access private data: typedef struct _RectObjClassRec* RectObjClass; RectObjPart Structure In addition to the ObjectPart fields, RectObj objects have the following fields defined in the RectObjPart structure. All fields have the same meaning as the corresponding field in CorePart. typedef struct _RectObjPart { Position x, y; Dimension width, height; Dimension border_width; Boolean managed; Boolean sensitive; Boolean ancestor_sensitive; } RectObjPart; RectObj objects have the RectObj fields immediately following the Object fields. typedef struct _RectObjRec { ObjectPart object; RectObjPart rectangle; } RectObjRec, *RectObj; In Intrinsic.h: typedef struct _RectObjRec* RectObj; RectObj Resources The resource names, classes, and representation types that are specified in the rectObjClassRec resource list are: Name Class Representation XtNancestorSensitive XtCSensitive XtRBoolean XtNborderWidth XtCBorderWidth XtRDimension XtNheight XtCHeight XtRDimension XtNsensitive XtCSensitive XtRBoolean XtNwidth XtCWidth XtRDimension XtNx XtCPosition XtRPosition XtNy XtCPosition XtRPosition RectObjPart Default Values All fields in RectObjPart have the same default values as the corresponding fields in CorePart. Widget Arguments to Intrinsics Routines The WidgetClass arguments to the following procedures may be rectObjClass or any subclass: , The Widget arguments to the following procedures may be of class RectObj or any subclass: , , , , , , , The return value of the following procedures will be of class RectObj or a subclass: , Use of Rectangle Objects RectObj can be subclassed to provide widgetlike objects (sometimes called gadgets) that do not use windows and do not have those features that are seldom used in simple widgets. This can save memory resources both in the server and in applications but requires additional support code in the parent. In the following discussion, rectobj refers only to objects whose class is RectObj or a subclass of RectObj, but not Core or a subclass of Core. Composite widget classes that wish to accept rectobj children must set the accepts_objects field in the CompositeClassExtension extension structure to True. or will otherwise generate an error if called to create a nonwidget child. If the composite widget supports only children of class RectObj or a subclass (i.e., not of the general Object class), it must declare an insert_child procedure and check the subclass of each new child in that procedure. None of the classes defined by the Intrinsics accept rectobj children. If gadgets are defined in an object set, the parent is responsible for much more than the parent of a widget. The parent must request and handle input events that occur for the gadget and is responsible for making sure that when it receives an exposure event the gadget children get drawn correctly. Rectobj children may have expose procedures specified in their class records, but the parent is free to ignore them, instead drawing the contents of the child itself. This can potentially save graphics context switching. The precise contents of the exposure event and region arguments to the RectObj expose procedure are not specified by the Intrinsics; a particular rectangle object is free to define the coordinate system origin (self-relative or parent-relative) and whether or not the rectangle or region is assumed to have been intersected with the visible region of the object. In general, it is expected that a composite widget that accepts nonwidget children will document those children it is able to handle, since a gadget cannot be viewed as a completely self-contained entity, as can a widget. Since a particular composite widget class is usually designed to handle nonwidget children of only a limited set of classes, it should check the classes of newly added children in its insert_child procedure to make sure that it can deal with them. The Intrinsics will clear areas of a parent window obscured by rectobj children, causing exposure events, under the following circumstances: A rectobj child is managed or unmanaged. In a call to on a rectobj child, one or more of the set_values procedures returns True. In a call to on a rectobj child, areas will be cleared corresponding to both the old and the new child geometries, including the border, if the geometry changes. In a call to on a rectobj child, areas will be cleared corresponding to both the old and the new child geometries, including the border, if the geometry changes. In a call to on a rectobj child, a single rectangle will be cleared corresponding to the larger of the old and the new child geometries if they are different. In a call to (or ) on a rectobj child with XtQueryOnly not set, if the manager returns XtGeometryYes, two rectangles will be cleared corresponding to both the old and the new child geometries. Stacking order is not supported for rectobj children. Composite widgets with rectobj children are free to define any semantics desired if the child geometries overlap, including making this an error. When a rectobj is playing the role of a widget, developers must be reminded to avoid making assumptions about the object passed in the Widget argument to a callback procedure. Undeclared Class The Intrinsics define an unnamed class between RectObj and Core for possible future use by the X Consortium. The only assumptions that may be made about the unnamed class are The core_class.superclass field of coreWidgetClassRec contains a pointer to the unnamed class record. A pointer to the unnamed class record when dereferenced as an ObjectClass will contain a pointer to rectObjClassRec in its object_class.superclass field. Except for the above, the contents of the class record for this class and the result of an attempt to subclass or to create a widget of this unnamed class are undefined. Widget Arguments to Intrinsics Routines The WidgetClass arguments to the following procedures must be of class Shell or a subclass: , , , , , The Widget arguments to the following procedures must be of class Core or any subclass: , , , , , , , , , , , , , , , , , , XtDisplay, , , , , , , , , , (both destination and source) , , , , , , (subtree) The Widget arguments to the following procedures must be of class Composite or any subclass: , The Widget arguments to the following procedures must be of a subclass of Shell: , , , , , , The return value of the following procedure will be of class Core or a subclass: The return value of the following procedures will be of a subclass of Shell: , , , , , will document those children it is able to handle, since a gadget cannot be viewed as a completely self-contained entity, as can a widget. Since a particular composite widget class is usually designed to handle nonwidget children of only a limited set of classes, it should check the classes of newly added children in its insert_child procedure to make sure that it can deal with them. The Intrinsics will clear areas of a libXt-1.1.5/util/StrDefs.ht000064401431060000012000000047471252061032400157540ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtStringDefs_h_ #define _XtStringDefs_h_ #ifndef XTSTRINGDEFINES #define _XtStringDefs_h_Const const #endif <<>> #ifndef XTSTRINGDEFINES #undef _XtStringDefs_h_Const #endif #endif /* _XtStringDefs_h_ */ libXt-1.1.5/util/makestrs.man000064401431060000012000000143201252061032400163570ustar00alancstaff00002660200006.\" Copyright (c) 1993, 1994, 1998 The Open Group .\" .\" 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. .\" .\" The above copyright notice and this permission notice shall be included in .\" all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR .\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this notice, the name of The Open Group shall not .\" be used in advertising or otherwise to promote the sale, use or other .\" dealing in this Software without prior written authorization from The .\" Open Group. .\" .TH MAKESTRS 1 __xorgversion__ .SH NAME makestrs \- makes string table C source and header(s) .SH SYNOPSIS .B makestrs [-f source] [-i includedir] [-abioptions ...] .SH DESCRIPTION The .I makestrs command creates string table C source files and headers. If .I -f .I source is not specified .I makestrs will read from .IR stdin . The C source file is always written to .IR stdout . .I makestrs creates one or more C header files as specified in the source file. The following options may be specified: .IR -sparcabi , .IR -intelabi , .IR -functionabi , .IR -arrayperabi , and .I -defaultabi. .LP .I -sparcabi is used on SPARC platforms conforming to the SPARC Compliance Definition, i.e. SVR4/Solaris. .LP .I -intelabi is used on Intel platforms conforming to the System V Application Binary Interface, i.e. SVR4. .LP .I -earlyR6abi may be used in addition to .I -intelabi for situations where the vendor wishes to maintain binary compatibility between X11R6 public-patch 11 (and earlier) and X11R6 public-patch 12 (and later). .LP .I -functionabi generates a functional abi to the string table. This mechanism imposes a severe performance penalty and it's recommended that you not use it. .LP .I -arrayperabi results in a separate array for each string. This is the default behavior if makestrs was compiled with -DARRAYPERSTR (it almost never is). .LP .I -defaultabi forces the generation of the "normal" string table even if makestrs was compiled with -DARRAYPERSTR. Since makestrs is almost never compiled with -DARRAYPERSTR this is the default behavior if no abioptions are specified. .LP .I -i includedir forces the reading of templates from the includedir instead of the local directory. This is useful to have separate source and build directories. .SH SYNTAX The syntax for string-list file is (items in square brackets are optional): .RS 4 \&#prefix .RE .RS 4 \&#feature .RE .RS 4 \&#externref .RE .RS 4 \&#externdef [] .RE .RS 4 [#ctempl ] .RE .LP .RS 4 \&#file .RE .RS 4 \&#table .RE .RS 4 [#htempl] .RE .RS 4 .RE .RS 4 \&... .RE .RS 4 .RE .RS 4 [#table .RE .RS 4 .RE .RS 4 \&... .RE .RS 4 .RE .RS 4 \& ... .RE .RS 4 \&#table .RE .RS 4 \& ...] .RE .RS 4 [#file .RE .RS 4 \& ...] .RE .LP In words you may have one or more #file directives. Each #file may have one or more #table directives. .LP The #prefix directive determines the string that makestr will prefix to each definition. .LP The #feature directive determines the string that makestr will use for the feature-test macro, e.g. X[TM]STRINGDEFINES. .LP The #externref directive determines the string that makestr will use for the extern clause, typically this will be "extern" but Motif wants it to be "externalref" .LP The #externdef directive determines the string that makestr will use for the declaration, typically this will be the null string (note that makestrs requires a trailing space in this case, i.e. "#externdef "), and Motif will use "externaldef(_xmstrings). .LP The #ctmpl directive determines the name of the file used as a template for the C source file that is generated .LP Each #file directive will result in a corresponding header file by that name containing the appropriate definitions as specified by command line options. A single C source file containing the declarations for the definitions in all the headers will be printed to stdout. .LP The #htmpl directive determines the name of the file used as a template for the C header file that is generated. .LP Each #table directive will be processed in accordance with the ABI. On most platforms all tables will be catenated into a single table with the name of the first table for that file. To conform to the Intel ABI separate tables will be generated with the names indicated. .LP The template files specified by the #ctmpl and #htmpl directives are processed by copying line for line from the template file to the appropriate output file. The line containing the string .I <<>> is not copied to the output file. The appropriate data is then copied to the output file and then the remainder of the template file is copied to the output file. .SH BUGS makestrs is not very forgiving of syntax errors. Sometimes you need a trailing space after # directives, other times they will mess you up. No warning messages are emitted. .SH SEE ALSO SPARC Compliance Definition 2.2., SPARC International Inc., 535 Middlefield Road, Suite 210, Menlo Park, CA 94025 .LP System V Application Binary Interface, Third Edition, ISBN 0-13-100439-5 UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632 .LP System V Application Binary Interface, Third Edition, Intel386 Architecture Processor Supplement ISBN 0-13-104670-5 UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632 .LP System V Application Binary Interface, Third Edition, SPARC Architecture Processor Supplement ISBN 0-13-104696-9 UNIX Press, PTR Prentice Hall, 113 Sylvan Avenue, Englewood Cliffs, NJ 07632 NGEMENT. IN NO EVENT SHALL .\" THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, .\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF .\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE .\" SOFTWARE. .\" .\" Except as contained in this nlibXt-1.1.5/util/string.list000064401431060000012000000112431252061032400162350ustar00alancstaff00002660200006! NOTE: To maintain binary compatibility, you can only APPEND items within ! a given list!!!! ! ! See the makestrs(1) manual. ! #prefix Xt #feature XTSTRINGDEFINES #externref extern #externdef ! note that the trailing space is required in the #externdef line. #ctmpl util/StrDefs.ct #file StringDefs.h #table XtStrings #htmpl util/StrDefs.ht Naccelerators NallowHoriz NallowVert NancestorSensitive Nbackground NbackgroundPixmap Nbitmap NborderColor Nborder borderColor NborderPixmap NborderWidth Ncallback Nchildren Ncolormap Ndepth NdestroyCallback NeditType Nfile Nfont NforceBars Nforeground Nfunction Nheight Nhighlight NhSpace Nindex NinitialResourcesPersistent NinnerHeight NinnerWidth NinnerWindow NinsertPosition NinternalHeight NinternalWidth NjumpProc Njustify NknobHeight NknobIndent NknobPixel NknobWidth Nlabel Nlength NlowerRight NmappedWhenManaged NmenuEntry Nname Nnotify NnumChildren Norientation Nparameter Npixmap NpopupCallback NpopdownCallback Nresize NreverseVideo Nscreen NscrollProc NscrollDCursor NscrollHCursor NscrollLCursor NscrollRCursor NscrollUCursor NscrollVCursor Nselection NselectionArray Nsensitive Nshown Nspace Nstring NtextOptions NtextSink NtextSource Nthickness Nthumb NthumbProc Ntop Ntranslations NunrealizeCallback Nupdate NuseBottom NuseRight Nvalue NvSpace Nwidth Nwindow Nx Ny CAccelerators CBackground CBitmap CBoolean CBorderColor CBorderWidth CCallback CColormap CColor CCursor CDepth CEditType CEventBindings CFile CFont CForeground CFraction CFunction CHeight CHSpace CIndex CInitialResourcesPersistent CInsertPosition CInterval CJustify CKnobIndent CKnobPixel CLabel CLength CMappedWhenManaged CMargin CMenuEntry CNotify COrientation CParameter CPixmap CPosition CReadOnly CResize CReverseVideo CScreen CScrollProc CScrollDCursor CScrollHCursor CScrollLCursor CScrollRCursor CScrollUCursor CScrollVCursor CSelection CSensitive CSelectionArray CSpace CString CTextOptions CTextPosition CTextSink CTextSource CThickness CThumb CTranslations CValue CVSpace CWidth CWindow CX CY RAcceleratorTable RAtom RBitmap RBool RBoolean RCallback RCallProc RCardinal RColor RColormap RCursor RDimension RDisplay REditMode REnum RFile RFloat RFont RFontStruct RFunction RGeometry RImmediate RInitialState RInt RJustify RLongBoolean Bool RObject ROrientation RPixel RPixmap RPointer RPosition RScreen RShort RString RStringArray RStringTable RUnsignedChar RTranslationTable RVisual RWidget RWidgetClass RWidgetList RWindow Eoff Efalse Eno Eon Etrue Eyes Evertical Ehorizontal EtextRead read EtextAppend append EtextEdit edit Extdefaultbackground Extdefaultforeground Extdefaultfont NfontSet RFontSet CFontSet #table XtStringsR6 RGravity NcreateHook NchangeHook NconfigureHook NgeometryHook NdestroyHook Nshells NnumShells RCommandArgArray RDirectoryString REnvironmentArray RRestartStyle RSmcConn Hcreate HsetValues HmanageChildren HunmanageChildren HmanageSet HunmanageSet HrealizeWidget HunrealizeWidget HaddCallback HaddCallbacks HremoveCallback HremoveCallbacks HremoveAllCallbacks HaugmentTranslations HoverrideTranslations HuninstallTranslations HsetKeyboardFocus HsetWMColormapWindows HsetMappedWhenManaged HmapWidget HunmapWidget Hpopup HpopupSpringLoaded Hpopdown Hconfigure HpreGeometry HpostGeometry Hdestroy #file Shell.h #table XtShellStrings #htmpl util/Shell.ht NiconName CIconName NiconPixmap CIconPixmap NiconWindow CIconWindow NiconMask CIconMask NwindowGroup CWindowGroup Nvisual CVisual NtitleEncoding CTitleEncoding NsaveUnder CSaveUnder Ntransient CTransient NoverrideRedirect COverrideRedirect NtransientFor CTransientFor NiconNameEncoding CIconNameEncoding NallowShellResize CAllowShellResize NcreatePopupChildProc CCreatePopupChildProc Ntitle CTitle RAtom Nargc CArgc Nargv CArgv NiconX CIconX NiconY CIconY Ninput CInput Niconic CIconic NinitialState CInitialState Ngeometry CGeometry NbaseWidth CBaseWidth NbaseHeight CBaseHeight NwinGravity CWinGravity NminWidth CMinWidth NminHeight CMinHeight NmaxWidth CMaxWidth NmaxHeight CMaxHeight NwidthInc CWidthInc NheightInc CHeightInc NminAspectY CMinAspectY NmaxAspectY CMaxAspectY NminAspectX CMinAspectX NmaxAspectX CMaxAspectX NwmTimeout CWmTimeout NwaitForWm waitforwm CWaitForWm Waitforwm #table XtShellStringsR6 Nwaitforwm CWaitforwm NclientLeader CClientLeader NwindowRole CWindowRole Nurgency CUrgency NcancelCallback NcloneCommand CCloneCommand Nconnection CConnection NcurrentDirectory CCurrentDirectory NdieCallback NdiscardCommand CDiscardCommand Nenvironment CEnvironment NinteractCallback NjoinSession CJoinSession NprogramPath CProgramPath NresignCommand CResignCommand NrestartCommand CRestartCommand NrestartStyle CRestartStyle NsaveCallback NsaveCompleteCallback NsessionID CSessionID NshutdownCommand CShutdownCommand NerrorCallback libXt-1.1.5/util/Shell.ht000064401431060000012000000071321252061032400154400ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XtShell_h #define _XtShell_h #include #include /*********************************************************************** * * Shell Widget * ***********************************************************************/ /* * Shell-specific resources names, classes, and a representation type. */ #ifndef XTSTRINGDEFINES #define _XtShell_h_Const const #endif <<>> #ifndef XTSTRINGDEFINES #undef _XtShell_h_Const #endif /* Class record constants */ typedef struct _ShellClassRec *ShellWidgetClass; typedef struct _OverrideShellClassRec *OverrideShellWidgetClass; typedef struct _WMShellClassRec *WMShellWidgetClass; typedef struct _TransientShellClassRec *TransientShellWidgetClass; typedef struct _TopLevelShellClassRec *TopLevelShellWidgetClass; typedef struct _ApplicationShellClassRec *ApplicationShellWidgetClass; typedef struct _SessionShellClassRec *SessionShellWidgetClass; #ifndef SHELL externalref WidgetClass shellWidgetClass; externalref WidgetClass overrideShellWidgetClass; externalref WidgetClass wmShellWidgetClass; externalref WidgetClass transientShellWidgetClass; externalref WidgetClass topLevelShellWidgetClass; externalref WidgetClass applicationShellWidgetClass; externalref WidgetClass sessionShellWidgetClass; #endif #endif /* _XtShell_h */ /* DON'T ADD STUFF AFTER THIS #endif */ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the libXt-1.1.5/util/makestrs.c000064401431060000012000000457741252061032400160470ustar00alancstaff00002660200006/* Copyright (c) 1991, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* Constructs string definitions */ #include #include #include #include typedef struct _TableEnt { struct _TableEnt* next; char* left; char* right; int offset; } TableEnt; typedef struct _Table { struct _Table* next; TableEnt* tableent; TableEnt* tableentcurrent; TableEnt** tableenttail; char* name; int offset; } Table; typedef struct _File { struct _File* next; FILE* tmpl; char* name; Table* table; Table* tablecurrent; Table** tabletail; } File; static File* file = NULL; static File* filecurrent = NULL; static File** filetail = &file; static char* conststr; static char* prefixstr = NULL; static char* featurestr = NULL; static char* ctmplstr = NULL; static char* fileprotstr; static char* externrefstr; static char* externdefstr; #ifndef FALSE # define FALSE 0 # define TRUE !(FALSE) #endif static int solaris_abi_names = FALSE; #define X_DEFAULT_ABI 0 #define X_ARRAYPER_ABI 1 #define X_INTEL_ABI 2 #define X_INTEL_ABI_BC 3 #define X_SPARC_ABI 4 #define X_FUNCTION_ABI 5 #define X_MAGIC_STRING "<<>>" /* Wrapper for fopen() * Prepend filename with an includedir which can be specified on the * commandline. Needed to separate source and build directories. */ static char* includedir = NULL; static FILE *ifopen(const char *file, const char *mode) { #ifndef HAVE_ASPRINTF size_t len; #endif char *buffer; FILE *ret; if (includedir == NULL) return fopen(file, mode); #ifdef HAVE_ASPRINTF if (asprintf(&buffer, "%s/%s", includedir, file) == -1) return NULL; #else len = strlen(file) + strlen(includedir) + 1; buffer = (char*)malloc(len + 1); if (buffer == NULL) return NULL; snprintf(buffer, len + 1, "%s/%s", includedir, file); #endif ret = fopen(buffer, mode); free(buffer); return ret; } static void WriteHeaderProlog (FILE *f, File *phile) { Table* t; TableEnt* te; (void) fprintf (f, "#ifdef %s\n", featurestr); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) { if (strcmp (te->left, "RAtom") == 0) { (void) fprintf (f, "#ifndef %s%s\n#define %s%s \"%s\"\n#endif\n", prefixstr, te->left, prefixstr, te->left, te->right); } else { (void) fprintf (f, "#define %s%s \"%s\"\n", prefixstr, te->left, te->right); } } (void) fprintf (f, "%s", "#else\n"); } static void IntelABIWriteHeader (FILE *f, File *phile) { Table* t; TableEnt* te; WriteHeaderProlog (f, phile); for (t = phile->table; t; t = t->next) { (void) fprintf (f, "%s %sConst char %s[];\n", externrefstr, conststr ? conststr : fileprotstr, t->name); for (te = t->tableent; te; te = te->next) (void) fprintf (f, "#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n", prefixstr, te->left, prefixstr, te->left, t->name, te->offset); } (void) fprintf (f, "#endif /* %s */\n", featurestr); } static void SPARCABIWriteHeader (FILE *f, File *phile) { Table* t; TableEnt* te; for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) (void) fprintf (f, "#define %s%s \"%s\"\n", prefixstr, te->left, te->right); } static void FunctionWriteHeader (FILE *f, File *phile) { Table* t; TableEnt* te; WriteHeaderProlog (f, phile); (void) fprintf (f, "%s %sConst char* %s();\n", externrefstr, conststr ? conststr : fileprotstr, phile->table->name); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) (void) fprintf (f, "#ifndef %s%s\n#define %s%s (%s(%d))\n#endif\n", prefixstr, te->left, prefixstr, te->left, phile->table->name, te->offset); (void) fprintf (f, "#endif /* %s */\n", featurestr); } static void ArrayperWriteHeader (FILE *f, File *phile) { Table* t; TableEnt* te; WriteHeaderProlog (f, phile); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) (void) fprintf (f, "#ifndef %s%s\n%s %sConst char %s%s[];\n#endif\n", prefixstr, te->left, externrefstr, conststr ? conststr : fileprotstr, prefixstr, te->left); (void) fprintf (f, "#endif /* %s */\n", featurestr); } static void DefaultWriteHeader (FILE *f, File *phile) { Table* t; TableEnt* te; WriteHeaderProlog (f, phile); (void) fprintf (f, "%s %sConst char %s[];\n", externrefstr, conststr ? conststr : fileprotstr, phile->table->name); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) (void) fprintf (f, "#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n", prefixstr, te->left, prefixstr, te->left, phile->table->name, te->offset); (void) fprintf (f, "#endif /* %s */\n", featurestr); } static void CopyTmplProlog (FILE *tmpl, FILE *f) { char buf[1024]; static const char* magic_string = X_MAGIC_STRING; int magic_string_len = strlen (magic_string); while (fgets (buf, sizeof buf, tmpl)) { if (strncmp (buf, magic_string, magic_string_len) == 0) { return; } (void) fputs (buf, f); } } static void CopyTmplEpilog (FILE *tmpl, FILE *f) { char buf[1024]; while (fgets (buf, sizeof buf, tmpl)) (void) fputs (buf, f); } static const char* abistring[] = { "Default", "Array per string", "Intel", "Intel BC", "SPARC", "Function" }; static void WriteHeader (char *tagline, File *phile, int abi) { FILE* f; char* tmp; static void (*headerproc[])(FILE *f, File *phile) = { DefaultWriteHeader, ArrayperWriteHeader, IntelABIWriteHeader, IntelABIWriteHeader, SPARCABIWriteHeader, FunctionWriteHeader }; if ((f = fopen (phile->name, "w+")) == NULL) exit (1); if (phile->tmpl) CopyTmplProlog (phile->tmpl, f); (void) fprintf (f, "%s\n%s\n/* %s ABI version -- Do not edit */\n", "/* $Xorg: makestrs.c,v 1.6 2001/02/09 02:03:17 xorgcvs Exp $ */", "/* This file is automatically generated. */", abistring[abi]); if (tagline) (void) fprintf (f, "/* %s */\n\n", tagline); /* do the right thing for Motif, i.e. avoid _XmXmStrDefs_h_ */ if (strcmp (prefixstr, "Xm") == 0) { #ifdef HAVE_ASPRINTF if (asprintf (&fileprotstr, "_%s_", phile->name) == -1) exit (1); #else if ((fileprotstr = malloc (strlen (phile->name) + 3)) == NULL) exit (1); (void) sprintf (fileprotstr, "_%s_", phile->name); #endif } else { #ifdef HAVE_ASPRINTF if (asprintf (&fileprotstr, "_%s%s_", prefixstr, phile->name) == -1) exit (1); #else if ((fileprotstr = malloc (strlen (phile->name) + strlen (prefixstr) + 3)) == NULL) exit (1); (void) sprintf (fileprotstr, "_%s%s_", prefixstr, phile->name); #endif } for (tmp = fileprotstr; *tmp; tmp++) if (*tmp == '.') *tmp = '_'; (*headerproc[abi])(f, phile); if (phile->tmpl) CopyTmplEpilog (phile->tmpl, f); (void) free (fileprotstr); (void) fclose (phile->tmpl); (void) fclose (f); } static void WriteSourceLine (TableEnt *te, int abi, int fudge) { char* c; for (c = te->right; *c; c++) (void) printf ("'%c',", *c); (void) printf ("%c", '0'); if (te->next || fudge) (void) printf ("%c", ','); (void) printf ("%s", "\n"); } static const char* const_string = "%s %sConst char %s[] = {\n"; static void IntelABIWriteSource (int abi) { File* phile; for (phile = file; phile; phile = phile->next) { Table* t; TableEnt* te; for (t = phile->table; t; t = t->next) { (void) printf (const_string, externdefstr, conststr ? conststr : "", t->name); for (te = t->tableent; te; te = te->next) WriteSourceLine (te, abi, 0); (void) printf ("%s\n\n", "};"); } } } static void IntelABIBCWriteSource (int abi) { File* phile; for (phile = file; phile; phile = phile->next) { Table* t; TableEnt* te; (void) printf (const_string, externdefstr, conststr ? conststr : "", phile->table->name); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) WriteSourceLine (te, abi, t->next ? 1 : 0); (void) printf ("%s\n\n", "};"); if (phile->table->next) { (void) printf (const_string, externdefstr, conststr ? conststr : "", phile->table->next->name); for (t = phile->table->next; t; t = t->next) for (te = t->tableent; te; te = te->next) WriteSourceLine (te, abi, 0); (void) printf ("%s\n\n", "};"); } } } static void FunctionWriteSource (int abi) { File* phile; for (phile = file; phile; phile = phile->next) { Table* t; TableEnt* te; (void) printf ("static %sConst char _%s[] = {\n", conststr ? conststr : "", phile->table->name); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) WriteSourceLine (te, abi, t->next ? 1 : 0); (void) printf ("%s\n\n", "};"); (void) printf ("%sConst char* %s(index)\n int index;\n{\n return &_%s[index];\n}\n\n", conststr ? conststr : "", phile->table->name, phile->table->name); } } static void ArrayperWriteSource (int abi) { File* phile; static int done_atom; for (phile = file; phile; phile = phile->next) { Table* t; TableEnt* te; for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) { if (strcmp (te->left, "RAtom") == 0) { if (done_atom) return; done_atom = 1; } (void) printf ("%s %sConst char %s%s[] = \"%s\";\n", externdefstr, conststr ? conststr : "", prefixstr, te->left, te->right); } } } static void DefaultWriteSource (int abi) { File* phile; for (phile = file; phile; phile = phile->next) { Table* t; TableEnt* te; (void) printf (const_string, externdefstr, conststr ? conststr : "", phile->table->name); for (t = phile->table; t; t = t->next) for (te = t->tableent; te; te = te->next) WriteSourceLine (te, abi, t->next ? 1 : 0); (void) printf ("%s\n\n", "};"); } } static void WriteSource(char *tagline, int abi) { static void (*sourceproc[])(int) = { DefaultWriteSource, ArrayperWriteSource, IntelABIWriteSource, IntelABIBCWriteSource, DefaultWriteSource, FunctionWriteSource }; FILE* tmpl; if (ctmplstr) { tmpl = ifopen (ctmplstr, "r"); if (tmpl) CopyTmplProlog (tmpl, stdout); else { (void) fprintf (stderr, "Expected template %s, not found\n", ctmplstr); exit (1); } } else tmpl = NULL; (void) printf ("%s\n%s\n/* %s ABI version -- Do not edit */\n", "/* $Xorg: makestrs.c,v 1.6 2001/02/09 02:03:17 xorgcvs Exp $ */", "/* This file is automatically generated. */", abistring[abi]); if (tagline) (void) printf ("/* %s */\n\n", tagline); (*sourceproc[abi])(abi); if (tmpl) CopyTmplEpilog (tmpl, stdout); } static void DoLine(char *buf) { #define X_NO_TOKEN 0 #define X_FILE_TOKEN 1 #define X_TABLE_TOKEN 2 #define X_PREFIX_TOKEN 3 #define X_FEATURE_TOKEN 4 #define X_EXTERNREF_TOKEN 5 #define X_EXTERNDEF_TOKEN 6 #define X_CTMPL_TOKEN 7 #define X_HTMPL_TOKEN 8 #define X_CONST_TOKEN 9 int token; char lbuf[1024]; static const char* file_str = "#file"; static const char* table_str = "#table"; static const char* prefix_str = "#prefix"; static const char* feature_str = "#feature"; static const char* externref_str = "#externref"; static const char* externdef_str = "#externdef"; static const char* ctmpl_str = "#ctmpl"; static const char* htmpl_str = "#htmpl"; static const char* const_str = "#const"; if (strncmp (buf, file_str, strlen (file_str)) == 0) token = X_FILE_TOKEN; else if (strncmp (buf, table_str, strlen (table_str)) == 0) token = X_TABLE_TOKEN; else if (strncmp (buf, prefix_str, strlen (prefix_str)) == 0) token = X_PREFIX_TOKEN; else if (strncmp (buf, feature_str, strlen (feature_str)) == 0) token = X_FEATURE_TOKEN; else if (strncmp (buf, externref_str, strlen (externref_str)) == 0) token = X_EXTERNREF_TOKEN; else if (strncmp (buf, externdef_str, strlen (externdef_str)) == 0) token = X_EXTERNDEF_TOKEN; else if (strncmp (buf, ctmpl_str, strlen (ctmpl_str)) == 0) token = X_CTMPL_TOKEN; else if (strncmp (buf, htmpl_str, strlen (htmpl_str)) == 0) token = X_HTMPL_TOKEN; else if (strncmp (buf, const_str, strlen (const_str)) == 0) token = X_CONST_TOKEN; else token = X_NO_TOKEN; switch (token) { case X_FILE_TOKEN: { File* phile; if ((phile = (File*) malloc (sizeof(File))) == NULL) exit(1); if ((phile->name = strdup (buf + strlen (file_str) + 1)) == NULL) exit(1); phile->table = NULL; phile->tablecurrent = NULL; phile->tabletail = &phile->table; phile->next = NULL; phile->tmpl = NULL; *filetail = phile; filetail = &phile->next; filecurrent = phile; } break; case X_TABLE_TOKEN: { Table* table; if ((table = (Table*) malloc (sizeof(Table))) == NULL) exit(1); if ((table->name = strdup (buf + strlen (table_str) + 1)) == NULL) exit(1); if (solaris_abi_names) { if (strcmp(table->name, "XtStringsR6") == 0) { strcpy(table->name, "XtR6Strings"); } else if (strcmp(table->name, "XtShellStringsR6") == 0) { strcpy(table->name, "XtR6ShellStrings"); } } table->tableent = NULL; table->tableentcurrent = NULL; table->tableenttail = &table->tableent; table->next = NULL; table->offset = 0; *filecurrent->tabletail = table; filecurrent->tabletail = &table->next; filecurrent->tablecurrent = table; } break; case X_PREFIX_TOKEN: if ((prefixstr = strdup (buf + strlen (prefix_str) + 1)) == NULL) exit(1); break; case X_FEATURE_TOKEN: if ((featurestr = strdup (buf + strlen (feature_str) + 1)) == NULL) exit(1); break; case X_EXTERNREF_TOKEN: if ((externrefstr = strdup (buf + strlen (externref_str) + 1)) == NULL) exit(1); break; case X_EXTERNDEF_TOKEN: if ((externdefstr = strdup (buf + strlen (externdef_str) + 1)) == NULL) exit(1); break; case X_CTMPL_TOKEN: if ((ctmplstr = strdup (buf + strlen (ctmpl_str) + 1)) == NULL) exit(1); break; case X_HTMPL_TOKEN: if ((filecurrent->tmpl = ifopen (buf + strlen (htmpl_str) + 1, "r")) == NULL) { (void) fprintf (stderr, "Expected template %s, not found\n", htmpl_str); exit (1); } break; case X_CONST_TOKEN: if ((conststr = strdup (buf + strlen (const_str) + 1)) == NULL) exit(1); break; default: { char* right; TableEnt* tableent; int llen; int rlen; int len; if ((right = strchr(buf, ' '))) *right++ = 0; else right = buf + 1; if (buf[0] == 'H') { snprintf (lbuf, sizeof(lbuf), "%s%s", prefixstr, right); right = lbuf; } llen = len = strlen(buf) + 1; rlen = strlen(right) + 1; if (right != buf + 1) len += rlen; if ((tableent = (TableEnt*)malloc(sizeof(TableEnt) + len)) == NULL) exit(1); tableent->left = (char *)(tableent + 1); strcpy(tableent->left, buf); if (llen != len) { tableent->right = tableent->left + llen; strcpy(tableent->right, right); } else { tableent->right = tableent->left + 1; } tableent->next = NULL; *filecurrent->tablecurrent->tableenttail = tableent; filecurrent->tablecurrent->tableenttail = &tableent->next; filecurrent->tablecurrent->tableentcurrent = tableent; } break; } } static void IntelABIIndexEntries (File *file) { Table* t; TableEnt* te; for (t = file->table; t; t = t->next) for (te = t->tableent; te; te = te->next) { te->offset = t->offset; t->offset += strlen (te->right); t->offset++; } } static void DefaultIndexEntries (File *file) { Table* t; TableEnt* te; int offset = 0; for (t = file->table; t; t = t->next) for (te = t->tableent; te; te = te->next) { te->offset = offset; offset += strlen (te->right); offset++; } } static void IndexEntries (File *file, int abi) { switch (abi) { case X_SPARC_ABI: break; case X_INTEL_ABI: case X_INTEL_ABI_BC: IntelABIIndexEntries (file); break; default: DefaultIndexEntries (file); break; } } static char* DoComment (char *line) { char* tag; char* eol; char* ret; int len; /* assume that the first line with two '$' in it is the RCS tag line */ if ((tag = strchr (line, '$')) == NULL) return NULL; if ((eol = strchr (tag + 1, '$')) == NULL) return NULL; len = eol - tag; if ((ret = malloc (len)) == NULL) exit (1); (void) strncpy (ret, tag + 1, len - 1); ret[len - 2] = 0; return ret; } int main(int argc, char *argv[]) { int len, i; char* tagline = NULL; File* phile; FILE *f; char buf[1024]; int abi = #ifndef ARRAYPERSTR X_DEFAULT_ABI; #else X_ARRAYPER_ABI; #endif f = stdin; if (argc > 1) { for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-f") == 0) { if (++i < argc) f = fopen (argv[i], "r"); else return 1; } if (strcmp (argv[i], "-i") == 0) { if (++i < argc) includedir = argv[i]; else return 1; } if (strcmp (argv[i], "-sparcabi") == 0) abi = X_SPARC_ABI; if (strcmp (argv[i], "-intelabi") == 0) abi = X_INTEL_ABI; if (strcmp (argv[i], "-functionabi") == 0) abi = X_FUNCTION_ABI; if (strcmp (argv[i], "-earlyR6bc") == 0 && abi == X_INTEL_ABI) abi = X_INTEL_ABI_BC; if (strcmp (argv[i], "-arrayperabi") == 0) abi = X_ARRAYPER_ABI; #ifdef ARRAYPERSTR if (strcmp (argv[i], "-defaultabi") == 0) abi = X_DEFAULT_ABI; #endif if (strcmp (argv[i], "-solarisabinames") == 0) solaris_abi_names = TRUE; } } if (f == NULL) return 1; while (fgets(buf, sizeof buf, f)) { if (!buf[0] || buf[0] == '\n') continue; if (buf[0] == '!') { if (tagline) continue; tagline = DoComment (buf); continue; } if (buf[(len = strlen (buf) - 1)] == '\n') buf[len] = '\0'; DoLine(buf); } for (phile = file; phile; phile = phile->next) { if (abi != X_ARRAYPER_ABI) IndexEntries (phile, abi); WriteHeader (tagline, phile, abi); } WriteSource(tagline, abi); return 0; } e = libXt-1.1.5/util/Makefile.in000064401431060000012000000454251252061035100161100ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 = makestrs$(EXEEXT) subdir = util ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_makestrs_OBJECTS = makestrs.$(OBJEXT) makestrs_OBJECTS = $(am_makestrs_OBJECTS) makestrs_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(makestrs_SOURCES) DIST_SOURCES = $(makestrs_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(noinst_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC_FOR_BUILD@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS_FOR_BUILD@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS_FOR_BUILD@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS_FOR_BUILD@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ EXTRA_DIST = Shell.ht StrDefs.ct StrDefs.ht string.list $(appman_PRE) AM_CFLAGS = $(XT_CFLAGS) makestrs_SOURCES = makestrs.c # Man page appmandir = $(APP_MAN_DIR) appman_PRE = makestrs.man noinst_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) CLEANFILES = $(noinst_DATA) SUFFIXES = .$(APP_MAN_SUFFIX) .man all: all-am .SUFFIXES: .SUFFIXES: .$(APP_MAN_SUFFIX) .man .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --foreign util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign util/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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 makestrs$(EXEEXT): $(makestrs_OBJECTS) $(makestrs_DEPENDENCIES) $(EXTRA_makestrs_DEPENDENCIES) @rm -f makestrs$(EXEEXT) $(AM_V_CCLD)$(LINK) $(makestrs_OBJECTS) $(makestrs_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makestrs.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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) $(DATA) 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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 TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am 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 tags-am uninstall uninstall-am .PRECIOUS: Makefile # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(APP_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # 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: libXt-1.1.5/util/Makefile.am000064401431060000012000000011541252061032400160660ustar00alancstaff00002660200006noinst_PROGRAMS = makestrs CC = @CC_FOR_BUILD@ CPPFLAGS = @CPPFLAGS_FOR_BUILD@ CFLAGS = @CFLAGS_FOR_BUILD@ LDFLAGS = @LDFLAGS_FOR_BUILD@ EXTRA_DIST = \ Shell.ht \ StrDefs.ct \ StrDefs.ht \ string.list AM_CFLAGS = $(XT_CFLAGS) makestrs_SOURCES = makestrs.c # Man page appmandir = $(APP_MAN_DIR) appman_PRE = makestrs.man noinst_DATA = $(appman_PRE:man=@APP_MAN_SUFFIX@) EXTRA_DIST += $(appman_PRE) CLEANFILES = $(noinst_DATA) SUFFIXES = .$(APP_MAN_SUFFIX) .man # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(APP_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ libXt-1.1.5/util/StrDefs.ct000064401431060000012000000044521252061032400157400ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #define Const const <<>> libXt-1.1.5/src/ArgList.c000064401431060000012000000055031252061032400153570ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include /* * This routine merges two arglists. It does NOT check for duplicate entries. */ ArgList XtMergeArgLists( ArgList args1, Cardinal num_args1, ArgList args2, Cardinal num_args2) { ArgList result, args; result = (ArgList) __XtCalloc((unsigned) num_args1 + num_args2, (unsigned) sizeof(Arg)); for (args = result; num_args1 != 0; num_args1--) *args++ = *args1++; for ( ; num_args2 != 0; num_args2--) *args++ = *args2++; return result; } libXt-1.1.5/src/TMstate.c000064401431060000012000002006661252061032400154020ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* TMstate.c -- maintains the state table of actions for the translation * manager. */ /*LINTLIBRARY*/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #ifndef TM_NO_MATCH #define TM_NO_MATCH (-2) #endif /* TM_NO_MATCH */ /* forward definitions */ static StatePtr NewState(TMParseStateTree, TMShortCard, TMShortCard); static String XtNtranslationError = "translationError"; #ifndef __EMX__ TMGlobalRec _XtGlobalTM; /* initialized to zero K&R */ #else TMGlobalRec _XtGlobalTM = {0}; #endif #define MatchIncomingEvent(tmEvent, typeMatch, modMatch) \ (typeMatch->eventType == tmEvent->event.eventType && \ (typeMatch->matchEvent != NULL) && \ (*typeMatch->matchEvent)(typeMatch, modMatch, tmEvent)) #define NumStateTrees(xlations) \ ((translateData->isSimple) ? 1 : (TMComplexXlations(xlations))->numTrees) static TMShortCard GetBranchHead( TMParseStateTree parseTree, TMShortCard typeIndex, TMShortCard modIndex, Boolean isDummy) { #define TM_BRANCH_HEAD_TBL_ALLOC 8 #define TM_BRANCH_HEAD_TBL_REALLOC 8 TMBranchHead branchHead = parseTree->branchHeadTbl; TMShortCard newSize, i; /* * dummy is used as a place holder for later matching in old-style * matching behavior. If there's already an entry we don't need * another dummy. */ if (isDummy) { for (i = 0; i < parseTree->numBranchHeads; i++, branchHead++) { if ((branchHead->typeIndex == typeIndex) && (branchHead->modIndex == modIndex)) return i; } } if (parseTree->numBranchHeads == parseTree->branchHeadTblSize) { if (parseTree->branchHeadTblSize == 0) parseTree->branchHeadTblSize += TM_BRANCH_HEAD_TBL_ALLOC; else parseTree->branchHeadTblSize += TM_BRANCH_HEAD_TBL_REALLOC; newSize = (parseTree->branchHeadTblSize * sizeof(TMBranchHeadRec)); if (parseTree->isStackBranchHeads) { TMBranchHead oldBranchHeadTbl = parseTree->branchHeadTbl; parseTree->branchHeadTbl = (TMBranchHead) __XtMalloc(newSize); XtMemmove(parseTree->branchHeadTbl, oldBranchHeadTbl, newSize); parseTree->isStackBranchHeads = False; } else { parseTree->branchHeadTbl = (TMBranchHead) XtRealloc((char *)parseTree->branchHeadTbl, (parseTree->branchHeadTblSize * sizeof(TMBranchHeadRec))); } } #ifdef TRACE_TM LOCK_PROCESS; _XtGlobalTM.numBranchHeads++; UNLOCK_PROCESS; #endif /* TRACE_TM */ branchHead = &parseTree->branchHeadTbl[parseTree->numBranchHeads++]; branchHead->typeIndex = typeIndex; branchHead->modIndex = modIndex; branchHead->more = 0; branchHead->isSimple = True; branchHead->hasActions = False; branchHead->hasCycles = False; return parseTree->numBranchHeads-1; } TMShortCard _XtGetQuarkIndex( TMParseStateTree parseTree, XrmQuark quark) { #define TM_QUARK_TBL_ALLOC 16 #define TM_QUARK_TBL_REALLOC 16 TMShortCard i = parseTree->numQuarks; for (i=0; i < parseTree->numQuarks; i++) if (parseTree->quarkTbl[i] == quark) break; if (i == parseTree->numQuarks) { if (parseTree->numQuarks == parseTree->quarkTblSize) { TMShortCard newSize; if (parseTree->quarkTblSize == 0) parseTree->quarkTblSize += TM_QUARK_TBL_ALLOC; else parseTree->quarkTblSize += TM_QUARK_TBL_REALLOC; newSize = (parseTree->quarkTblSize * sizeof(XrmQuark)); if (parseTree->isStackQuarks) { XrmQuark *oldquarkTbl = parseTree->quarkTbl; parseTree->quarkTbl = (XrmQuark *) __XtMalloc(newSize); XtMemmove(parseTree->quarkTbl, oldquarkTbl, newSize); parseTree->isStackQuarks = False; } else { parseTree->quarkTbl = (XrmQuark *) XtRealloc((char *)parseTree->quarkTbl, (parseTree->quarkTblSize * sizeof(XrmQuark))); } } parseTree->quarkTbl[parseTree->numQuarks++] = quark; } return i; } /* * Get an entry from the parseTrees complex branchHead tbl. If there's none * there then allocate one */ /*ARGSUSED*/ static TMShortCard GetComplexBranchIndex( TMParseStateTree parseTree, TMShortCard typeIndex, TMShortCard modIndex) { #define TM_COMPLEXBRANCH_HEAD_TBL_ALLOC 8 #define TM_COMPLEXBRANCH_HEAD_TBL_REALLOC 4 if (parseTree->numComplexBranchHeads == parseTree->complexBranchHeadTblSize) { TMShortCard newSize; if (parseTree->complexBranchHeadTblSize == 0) parseTree->complexBranchHeadTblSize += TM_COMPLEXBRANCH_HEAD_TBL_ALLOC; else parseTree->complexBranchHeadTblSize += TM_COMPLEXBRANCH_HEAD_TBL_REALLOC; newSize = (parseTree->complexBranchHeadTblSize * sizeof(StatePtr)); if (parseTree->isStackComplexBranchHeads) { StatePtr *oldcomplexBranchHeadTbl = parseTree->complexBranchHeadTbl; parseTree->complexBranchHeadTbl = (StatePtr *) __XtMalloc(newSize); XtMemmove(parseTree->complexBranchHeadTbl, oldcomplexBranchHeadTbl, newSize); parseTree->isStackComplexBranchHeads = False; } else { parseTree->complexBranchHeadTbl = (StatePtr *) XtRealloc((char *)parseTree->complexBranchHeadTbl, (parseTree->complexBranchHeadTblSize * sizeof(StatePtr))); } } parseTree->complexBranchHeadTbl[parseTree->numComplexBranchHeads++] = NULL; return parseTree->numComplexBranchHeads-1; } TMShortCard _XtGetTypeIndex( Event *event) { TMShortCard i, j = TM_TYPE_SEGMENT_SIZE; TMShortCard typeIndex = 0; TMTypeMatch typeMatch; TMTypeMatch segment = NULL; LOCK_PROCESS; for (i = 0; i < _XtGlobalTM.numTypeMatchSegments; i++) { segment = _XtGlobalTM.typeMatchSegmentTbl[i]; for (j = 0; typeIndex < _XtGlobalTM.numTypeMatches && j < TM_TYPE_SEGMENT_SIZE; j++, typeIndex++) { typeMatch = &(segment[j]); if (event->eventType == typeMatch->eventType && event->eventCode == typeMatch->eventCode && event->eventCodeMask == typeMatch->eventCodeMask && event->matchEvent == typeMatch->matchEvent) { UNLOCK_PROCESS; return typeIndex; } } } if (j == TM_TYPE_SEGMENT_SIZE) { if (_XtGlobalTM.numTypeMatchSegments == _XtGlobalTM.typeMatchSegmentTblSize) { _XtGlobalTM.typeMatchSegmentTblSize += 4; _XtGlobalTM.typeMatchSegmentTbl = (TMTypeMatch *) XtRealloc((char *)_XtGlobalTM.typeMatchSegmentTbl, (_XtGlobalTM.typeMatchSegmentTblSize * sizeof(TMTypeMatch))); } _XtGlobalTM.typeMatchSegmentTbl[_XtGlobalTM.numTypeMatchSegments++] = segment = (TMTypeMatch) __XtMalloc(TM_TYPE_SEGMENT_SIZE * sizeof(TMTypeMatchRec)); j = 0; } typeMatch = &segment[j]; typeMatch->eventType = event->eventType; typeMatch->eventCode = event->eventCode; typeMatch->eventCodeMask = event->eventCodeMask; typeMatch->matchEvent = event->matchEvent; _XtGlobalTM.numTypeMatches++; UNLOCK_PROCESS; return typeIndex; } static Boolean CompareLateModifiers( LateBindingsPtr lateBind1P, LateBindingsPtr lateBind2P) { LateBindingsPtr late1P = lateBind1P; LateBindingsPtr late2P = lateBind2P; if (late1P != NULL || late2P != NULL) { int i = 0; int j = 0; if (late1P != NULL) for (; late1P->keysym != NoSymbol; i++) late1P++; if (late2P != NULL) for (; late2P->keysym != NoSymbol; j++) late2P++; if (i != j) return FALSE; late1P--; while (late1P >= lateBind1P) { Boolean last = True; for (late2P = lateBind2P + i - 1; late2P >= lateBind2P; late2P--) { if (late1P->keysym == late2P->keysym && late1P->knot == late2P->knot) { j--; if (last) i--; break; } last = False; } late1P--; } if (j != 0) return FALSE; } return TRUE; } TMShortCard _XtGetModifierIndex( Event *event) { TMShortCard i, j = TM_MOD_SEGMENT_SIZE; TMShortCard modIndex = 0; TMModifierMatch modMatch; TMModifierMatch segment = NULL; LOCK_PROCESS; for (i = 0; i < _XtGlobalTM.numModMatchSegments; i++) { segment = _XtGlobalTM.modMatchSegmentTbl[i]; for (j = 0; modIndex < _XtGlobalTM.numModMatches && j < TM_MOD_SEGMENT_SIZE; j++, modIndex++) { modMatch = &(segment[j]); if (event->modifiers == modMatch->modifiers && event->modifierMask == modMatch->modifierMask && event->standard == modMatch->standard && ((!event->lateModifiers && !modMatch->lateModifiers) || CompareLateModifiers(event->lateModifiers, modMatch->lateModifiers))) { /* * if we found a match then we can free the parser's * late modifiers. If there isn't a match we use the * parser's copy */ if (event->lateModifiers && --event->lateModifiers->ref_count == 0) { XtFree((char *)event->lateModifiers); event->lateModifiers = NULL; } UNLOCK_PROCESS; return modIndex; } } } if (j == TM_MOD_SEGMENT_SIZE) { if (_XtGlobalTM.numModMatchSegments == _XtGlobalTM.modMatchSegmentTblSize) { _XtGlobalTM.modMatchSegmentTblSize += 4; _XtGlobalTM.modMatchSegmentTbl = (TMModifierMatch *) XtRealloc((char *)_XtGlobalTM.modMatchSegmentTbl, (_XtGlobalTM.modMatchSegmentTblSize * sizeof(TMModifierMatch))); } _XtGlobalTM.modMatchSegmentTbl[_XtGlobalTM.numModMatchSegments++] = segment = (TMModifierMatch) __XtMalloc(TM_MOD_SEGMENT_SIZE * sizeof(TMModifierMatchRec)); j = 0; } modMatch = &segment[j]; modMatch->modifiers = event->modifiers;; modMatch->modifierMask = event->modifierMask; modMatch->standard = event->standard; /* * We use the parser's copy of the late binding array */ #ifdef TRACE_TM if (event->lateModifiers) _XtGlobalTM.numLateBindings++; #endif /* TRACE_TM */ modMatch->lateModifiers = event->lateModifiers; _XtGlobalTM.numModMatches++; UNLOCK_PROCESS; return modIndex; } /* * This is called from the SimpleStateHandler to match a stateTree * entry to the event coming in */ static int MatchBranchHead( TMSimpleStateTree stateTree, int startIndex, TMEventPtr event) { TMBranchHead branchHead = &stateTree->branchHeadTbl[startIndex]; int i; LOCK_PROCESS; for (i = startIndex; i < (int)stateTree->numBranchHeads; i++, branchHead++) { TMTypeMatch typeMatch; TMModifierMatch modMatch; typeMatch = TMGetTypeMatch(branchHead->typeIndex); modMatch = TMGetModifierMatch(branchHead->modIndex); if (MatchIncomingEvent(event, typeMatch, modMatch)) { UNLOCK_PROCESS; return i; } } UNLOCK_PROCESS; return (TM_NO_MATCH); } Boolean _XtRegularMatch( TMTypeMatch typeMatch, TMModifierMatch modMatch, TMEventPtr eventSeq) { Modifiers computed =0; Modifiers computedMask =0; Boolean resolved = TRUE; if (typeMatch->eventCode != (eventSeq->event.eventCode & typeMatch->eventCodeMask)) return FALSE; if (modMatch->lateModifiers != NULL) resolved = _XtComputeLateBindings(eventSeq->xev->xany.display, modMatch->lateModifiers, &computed, &computedMask); if (!resolved) return FALSE; computed |= modMatch->modifiers; computedMask |= modMatch->modifierMask; return ( (computed & computedMask) == (eventSeq->event.modifiers & computedMask)); } /*ARGSUSED*/ Boolean _XtMatchAtom( TMTypeMatch typeMatch, TMModifierMatch modMatch, TMEventPtr eventSeq) { Atom atom; atom = XInternAtom(eventSeq->xev->xany.display, XrmQuarkToString(typeMatch->eventCode), False); return (atom == eventSeq->event.eventCode); } #define IsOn(vec,idx) ((vec)[(idx)>>3] & (1 << ((idx) & 7))) /* * there are certain cases where you want to ignore the event and stay * in the same state. */ static Boolean Ignore( TMEventPtr event) { Display *dpy; XtPerDisplay pd; if (event->event.eventType == MotionNotify) return TRUE; if (!(event->event.eventType == KeyPress || event->event.eventType == KeyRelease)) return FALSE; dpy = event->xev->xany.display; pd = _XtGetPerDisplay(dpy); _InitializeKeysymTables(dpy, pd); return IsOn(pd->isModifier, event->event.eventCode) ? TRUE : FALSE; } static void XEventToTMEvent( XEvent *event, TMEventPtr tmEvent) { tmEvent->xev = event; tmEvent->event.eventCodeMask = 0; tmEvent->event.modifierMask = 0; tmEvent->event.eventType = event->type; tmEvent->event.lateModifiers = NULL; tmEvent->event.matchEvent = NULL; tmEvent->event.standard = FALSE; switch (event->type) { case KeyPress: case KeyRelease: tmEvent->event.eventCode = event->xkey.keycode; tmEvent->event.modifiers = event->xkey.state; break; case ButtonPress: case ButtonRelease: tmEvent->event.eventCode = event->xbutton.button; tmEvent->event.modifiers = event->xbutton.state; break; case MotionNotify: tmEvent->event.eventCode = event->xmotion.is_hint; tmEvent->event.modifiers = event->xmotion.state; break; case EnterNotify: case LeaveNotify: tmEvent->event.eventCode = event->xcrossing.mode; tmEvent->event.modifiers = event->xcrossing.state; break; case PropertyNotify: tmEvent->event.eventCode = event->xproperty.atom; tmEvent->event.modifiers = 0; break; case SelectionClear: tmEvent->event.eventCode = event->xselectionclear.selection; tmEvent->event.modifiers = 0; break; case SelectionRequest: tmEvent->event.eventCode = event->xselectionrequest.selection; tmEvent->event.modifiers = 0; break; case SelectionNotify: tmEvent->event.eventCode = event->xselection.selection; tmEvent->event.modifiers = 0; break; case ClientMessage: tmEvent->event.eventCode = event->xclient.message_type; tmEvent->event.modifiers = 0; break; case MappingNotify: tmEvent->event.eventCode = event->xmapping.request; tmEvent->event.modifiers = 0; break; case FocusIn: case FocusOut: tmEvent->event.eventCode = event->xfocus.mode; tmEvent->event.modifiers = 0; break; default: tmEvent->event.eventCode = 0; tmEvent->event.modifiers = 0; break; } } static unsigned long GetTime( XtTM tm, XEvent *event) { switch (event->type) { case KeyPress: case KeyRelease: return event->xkey.time; case ButtonPress: case ButtonRelease: return event->xbutton.time; default: return tm->lastEventTime; } } static void HandleActions( Widget w, XEvent *event, TMSimpleStateTree stateTree, Widget accelWidget, XtActionProc *procs, ActionRec *actions) { ActionHook actionHookList; Widget bindWidget; bindWidget = accelWidget ? accelWidget : w; if (accelWidget && !XtIsSensitive(accelWidget) && (event->type == KeyPress || event->type == KeyRelease || event->type == ButtonPress || event->type == ButtonRelease || event->type == MotionNotify || event->type == EnterNotify || event->type == LeaveNotify || event->type == FocusIn || event->type == FocusOut)) return; actionHookList = XtWidgetToApplicationContext(w)->action_hook_list; while (actions != NULL) { /* perform any actions */ if (procs[actions->idx] != NULL) { if (actionHookList) { ActionHook hook; ActionHook next_hook; String procName = XrmQuarkToString(stateTree->quarkTbl[actions->idx] ); for (hook = actionHookList; hook != NULL; ) { /* * Need to cache hook->next because the following action * proc may free hook via XtRemoveActionHook making * hook->next invalid upon return from the action proc. */ next_hook = hook->next; (*hook->proc)(bindWidget, hook->closure, procName, event, actions->params, &actions->num_params ); hook = next_hook; } } (*(procs[actions->idx])) (bindWidget, event, actions->params, &actions->num_params ); } actions = actions->next; } } typedef struct { unsigned int isCycleStart:1; unsigned int isCycleEnd:1; TMShortCard typeIndex; TMShortCard modIndex; }MatchPairRec, *MatchPair; typedef struct TMContextRec{ TMShortCard numMatches; TMShortCard maxMatches; MatchPair matches; }TMContextRec, *TMContext; static TMContextRec contextCache[2]; #define GetContextPtr(tm) ((TMContext *)&(tm->current_state)) #define TM_CONTEXT_MATCHES_ALLOC 4 #define TM_CONTEXT_MATCHES_REALLOC 2 static void PushContext( TMContext *contextPtr, StatePtr newState) { TMContext context = *contextPtr; LOCK_PROCESS; if (context == NULL) { if (contextCache[0].numMatches == 0) context = &contextCache[0]; else if (contextCache[1].numMatches == 0) context = &contextCache[1]; if (!context) { context = XtNew(TMContextRec); context->matches = NULL; context->numMatches = context->maxMatches = 0; } } if (context->numMatches && context->matches[context->numMatches-1].isCycleEnd) { TMShortCard i; for (i = 0; i < context->numMatches && !(context->matches[i].isCycleStart); i++){}; if (i < context->numMatches) context->numMatches = i+1; #ifdef DEBUG else XtWarning("pushing cycle end with no cycle start"); #endif /* DEBUG */ } else { if (context->numMatches == context->maxMatches) { if (context->maxMatches == 0) context->maxMatches += TM_CONTEXT_MATCHES_ALLOC; else context->maxMatches += TM_CONTEXT_MATCHES_REALLOC; context->matches = (MatchPairRec *) XtRealloc((char *)context->matches, context->maxMatches * sizeof(MatchPairRec)); } context->matches[context->numMatches].isCycleStart = newState->isCycleStart; context->matches[context->numMatches].isCycleEnd = newState->isCycleEnd; context->matches[context->numMatches].typeIndex = newState->typeIndex; context->matches[context->numMatches++].modIndex = newState->modIndex; *contextPtr = context; } UNLOCK_PROCESS; } static void FreeContext( TMContext *contextPtr) { TMContext context = NULL; LOCK_PROCESS; if (&contextCache[0] == *contextPtr) context = &contextCache[0]; else if (&contextCache[1] == *contextPtr) context = &contextCache[1]; if (context) context->numMatches = 0; else if (*contextPtr) { if ((*contextPtr)->matches) XtFree ((char *) ((*contextPtr)->matches)); XtFree((char *)*contextPtr); } *contextPtr = NULL; UNLOCK_PROCESS; } static int MatchExact( TMSimpleStateTree stateTree, int startIndex, TMShortCard typeIndex, TMShortCard modIndex) { TMBranchHead branchHead = &(stateTree->branchHeadTbl[startIndex]); int i; for (i = startIndex; i < (int)stateTree->numBranchHeads; i++, branchHead++) { if ((branchHead->typeIndex == typeIndex) && (branchHead->modIndex == modIndex)) return i; } return (TM_NO_MATCH); } static void HandleSimpleState( Widget w, XtTM tmRecPtr, TMEventRec *curEventPtr) { XtTranslations xlations = tmRecPtr->translations; TMSimpleStateTree stateTree; TMContext *contextPtr = GetContextPtr(tmRecPtr); TMShortCard i; ActionRec *actions = NULL; Boolean matchExact = False; Boolean match = False; StatePtr complexMatchState = NULL; int currIndex; TMShortCard typeIndex = 0, modIndex = 0; int matchTreeIndex = TM_NO_MATCH; LOCK_PROCESS; stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[0]; for (i = 0; ((!match || !complexMatchState) && (i < xlations->numStateTrees)); i++){ stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[i]; currIndex = -1; /* * don't process this tree if we're only looking for a * complexMatchState and there are no complex states */ while (!(match && stateTree->isSimple) && ((!match || !complexMatchState) && (currIndex != TM_NO_MATCH))) { currIndex++; if (matchExact) currIndex = MatchExact(stateTree,currIndex,typeIndex,modIndex); else currIndex = MatchBranchHead(stateTree,currIndex,curEventPtr); if (currIndex != TM_NO_MATCH) { TMBranchHead branchHead; StatePtr currState; branchHead = &stateTree->branchHeadTbl[currIndex]; if (branchHead->isSimple) currState = NULL; else currState = ((TMComplexStateTree)stateTree) ->complexBranchHeadTbl[TMBranchMore(branchHead)]; /* * first check for a complete match */ if (!match) { if (branchHead->hasActions) { if (branchHead->isSimple) { static ActionRec dummyAction; dummyAction.idx = TMBranchMore(branchHead); actions = &dummyAction; } else actions = currState->actions; tmRecPtr->lastEventTime = GetTime(tmRecPtr, curEventPtr->xev); FreeContext((TMContext *)&tmRecPtr->current_state); match = True; matchTreeIndex = i; } /* * if it doesn't have actions and * it's bc mode then it's a potential match node that is * used to match later sequences. */ if (!TMNewMatchSemantics() && !matchExact) { matchExact = True; typeIndex = branchHead->typeIndex; modIndex = branchHead->modIndex; } } /* * check for it being an event sequence which can be * a future match */ if (!branchHead->isSimple && !branchHead->hasActions && !complexMatchState) complexMatchState = currState; } } } if (match) { TMBindData bindData = (TMBindData) tmRecPtr->proc_table; XtActionProc *procs; Widget accelWidget; if (bindData->simple.isComplex) { TMComplexBindProcs bindProcs = TMGetComplexBindEntry(bindData, matchTreeIndex); procs = bindProcs->procs; accelWidget = bindProcs->widget; } else { TMSimpleBindProcs bindProcs = TMGetSimpleBindEntry(bindData, matchTreeIndex); procs = bindProcs->procs; accelWidget = NULL; } HandleActions (w, curEventPtr->xev, (TMSimpleStateTree)xlations->stateTreeTbl[matchTreeIndex], accelWidget, procs, actions); } if (complexMatchState) PushContext(contextPtr, complexMatchState); UNLOCK_PROCESS; } static int MatchComplexBranch( TMComplexStateTree stateTree, int startIndex, TMContext context, StatePtr *leafStateRtn) { TMShortCard i; LOCK_PROCESS; for (i = startIndex; i < stateTree->numComplexBranchHeads; i++) { StatePtr candState; TMShortCard numMatches = context->numMatches; MatchPair statMatch = context->matches; for (candState = stateTree->complexBranchHeadTbl[i]; numMatches && candState; numMatches--, statMatch++, candState = candState->nextLevel) { if ((statMatch->typeIndex != candState->typeIndex) || (statMatch->modIndex != candState->modIndex)) break; } if (numMatches == 0) { *leafStateRtn = candState; UNLOCK_PROCESS; return i; } } *leafStateRtn = NULL; UNLOCK_PROCESS; return (TM_NO_MATCH); } static StatePtr TryCurrentTree( TMComplexStateTree *stateTreePtr, XtTM tmRecPtr, TMEventRec *curEventPtr) { StatePtr candState = NULL, matchState = NULL; TMContext *contextPtr = GetContextPtr(tmRecPtr); TMTypeMatch typeMatch; TMModifierMatch modMatch; int currIndex = -1; /* * we want the first sequence that both matches and has actions. * we keep on looking till we find both */ LOCK_PROCESS; while ((currIndex = MatchComplexBranch(*stateTreePtr, ++currIndex, (*contextPtr), &candState)) != TM_NO_MATCH) { if (candState != NULL) { typeMatch = TMGetTypeMatch(candState->typeIndex); modMatch = TMGetModifierMatch(candState->modIndex); /* does this state's index match? --> done */ if (MatchIncomingEvent(curEventPtr, typeMatch, modMatch)) { if (candState->actions) { UNLOCK_PROCESS; return candState; } else matchState = candState; } /* is this an event timer? */ if (typeMatch->eventType == _XtEventTimerEventType) { StatePtr nextState = candState->nextLevel; /* does the succeeding state match? */ if (nextState != NULL) { TMTypeMatch nextTypeMatch; TMModifierMatch nextModMatch; nextTypeMatch = TMGetTypeMatch(nextState->typeIndex); nextModMatch = TMGetModifierMatch(nextState->modIndex); /* is it within the timeout? */ if (MatchIncomingEvent(curEventPtr, nextTypeMatch, nextModMatch)) { XEvent *xev = curEventPtr->xev; unsigned long time = GetTime(tmRecPtr, xev); XtPerDisplay pd = _XtGetPerDisplay(xev->xany.display); unsigned long delta = pd->multi_click_time; if ((tmRecPtr->lastEventTime + delta) >= time) { if (nextState->actions) { UNLOCK_PROCESS; return candState; } else matchState = candState; } } } } } } UNLOCK_PROCESS; return matchState; } static void HandleComplexState( Widget w, XtTM tmRecPtr, TMEventRec *curEventPtr) { XtTranslations xlations = tmRecPtr->translations; TMContext *contextPtr = GetContextPtr(tmRecPtr); TMShortCard i, matchTreeIndex = 0; StatePtr matchState = NULL, candState; TMComplexStateTree *stateTreePtr = (TMComplexStateTree *)&xlations->stateTreeTbl[0]; LOCK_PROCESS; for (i = 0; i < xlations->numStateTrees; i++, stateTreePtr++) { /* * some compilers sign extend Boolean bit fields so test for * false ||| */ if (((*stateTreePtr)->isSimple == False) && (candState = TryCurrentTree(stateTreePtr, tmRecPtr, curEventPtr))) { if (!matchState || candState->actions) { matchTreeIndex = i; matchState = candState; if (candState->actions) break; } } } if (matchState == NULL){ /* couldn't find it... */ if (!Ignore(curEventPtr)) { FreeContext(contextPtr); HandleSimpleState(w, tmRecPtr, curEventPtr); } } else { TMBindData bindData = (TMBindData) tmRecPtr->proc_table; XtActionProc *procs; Widget accelWidget; TMTypeMatch typeMatch; typeMatch = TMGetTypeMatch(matchState->typeIndex); PushContext(contextPtr, matchState); if (typeMatch->eventType == _XtEventTimerEventType) { matchState = matchState->nextLevel; PushContext(contextPtr, matchState); } tmRecPtr->lastEventTime = GetTime (tmRecPtr, curEventPtr->xev); if (bindData->simple.isComplex) { TMComplexBindProcs bindProcs = TMGetComplexBindEntry(bindData, matchTreeIndex); procs = bindProcs->procs; accelWidget = bindProcs->widget; } else { TMSimpleBindProcs bindProcs = TMGetSimpleBindEntry(bindData, matchTreeIndex); procs = bindProcs->procs; accelWidget = NULL; } HandleActions(w, curEventPtr->xev, (TMSimpleStateTree) xlations->stateTreeTbl[matchTreeIndex], accelWidget, procs, matchState->actions); } UNLOCK_PROCESS; } void _XtTranslateEvent ( Widget w, XEvent * event) { XtTM tmRecPtr = &w->core.tm; TMEventRec curEvent; StatePtr current_state = tmRecPtr->current_state; XEventToTMEvent (event, &curEvent); if (! tmRecPtr->translations) { XtAppWarningMsg(XtWidgetToApplicationContext(w), XtNtranslationError,"nullTable",XtCXtToolkitError, "Can't translate event through NULL table", (String *)NULL, (Cardinal *)NULL); return ; } if (current_state == NULL) HandleSimpleState(w, tmRecPtr, &curEvent); else HandleComplexState(w, tmRecPtr, &curEvent); } /*ARGSUSED*/ static StatePtr NewState( TMParseStateTree stateTree, TMShortCard typeIndex, TMShortCard modIndex) { StatePtr state = XtNew(StateRec); #ifdef TRACE_TM LOCK_PROCESS; _XtGlobalTM.numComplexStates++; UNLOCK_PROCESS; #endif /* TRACE_TM */ state->typeIndex = typeIndex; state->modIndex = modIndex; state->nextLevel = NULL; state->actions = NULL; state->isCycleStart = state->isCycleEnd = False; return state; } /* * This routine is an iterator for state trees. If the func returns * true then iteration is over. */ void _XtTraverseStateTree( TMStateTree tree, _XtTraversalProc func, XtPointer data) { TMComplexStateTree stateTree = (TMComplexStateTree)tree; TMBranchHead currBH; TMShortCard i; StateRec dummyStateRec, *dummyState = &dummyStateRec; ActionRec dummyActionRec, *dummyAction = &dummyActionRec; Boolean firstSimple = True; StatePtr currState; /* first traverse the complex states */ if (stateTree->isSimple == False) for (i = 0; i < stateTree->numComplexBranchHeads; i++) { currState = stateTree->complexBranchHeadTbl[i]; for (; currState; currState = currState->nextLevel) { if (func(currState, data)) return; if (currState->isCycleEnd) break; } } /* now traverse the simple ones */ for (i = 0, currBH = stateTree->branchHeadTbl; i < stateTree->numBranchHeads; i++, currBH++) { if (currBH->isSimple && currBH->hasActions) { if (firstSimple) { XtBZero((char *) dummyState, sizeof(StateRec)); XtBZero((char *) dummyAction, sizeof(ActionRec)); dummyState->actions = dummyAction; firstSimple = False; } dummyState->typeIndex = currBH->typeIndex; dummyState->modIndex = currBH->modIndex; dummyAction->idx = currBH->more; if (func(dummyState, data)) return; } } } static EventMask EventToMask( TMTypeMatch typeMatch, TMModifierMatch modMatch) { EventMask returnMask; unsigned long eventType = typeMatch->eventType; if (eventType == MotionNotify) { Modifiers modifierMask = modMatch->modifierMask; Modifiers tempMask; returnMask = 0; if (modifierMask == 0) { if (modMatch->modifiers == AnyButtonMask) return ButtonMotionMask; else return PointerMotionMask; } tempMask = modifierMask & (Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask); if (tempMask == 0) return PointerMotionMask; if (tempMask & Button1Mask) returnMask |= Button1MotionMask; if (tempMask & Button2Mask) returnMask |= Button2MotionMask; if (tempMask & Button3Mask) returnMask |= Button3MotionMask; if (tempMask & Button4Mask) returnMask |= Button4MotionMask; if (tempMask & Button5Mask) returnMask |= Button5MotionMask; return returnMask; } returnMask = _XtConvertTypeToMask(eventType); if (returnMask == (StructureNotifyMask|SubstructureNotifyMask)) returnMask = StructureNotifyMask; return returnMask; } /*ARGSUSED*/ static void DispatchMappingNotify( Widget widget, /* will be NULL from _RefreshMapping */ XtPointer closure, /* real Widget */ XtPointer call_data) /* XEvent* */ { _XtTranslateEvent( (Widget)closure, (XEvent*)call_data); } /*ARGSUSED*/ static void RemoveFromMappingCallbacks( Widget widget, XtPointer closure, /* target widget */ XtPointer call_data) { _XtRemoveCallback( &_XtGetPerDisplay(XtDisplay(widget))->mapping_callbacks, DispatchMappingNotify, closure ); } static Boolean AggregateEventMask( StatePtr state, XtPointer data) { LOCK_PROCESS; *((EventMask *)data) |= EventToMask(TMGetTypeMatch(state->typeIndex), TMGetModifierMatch(state->modIndex)); UNLOCK_PROCESS; return False; } void _XtInstallTranslations( Widget widget) { XtTranslations xlations; Cardinal i; TMStateTree stateTree; Boolean mappingNotifyInterest = False; xlations = widget->core.tm.translations; if (xlations == NULL) return; /* * check for somebody stuffing the translations directly into the * instance structure. We will end up being called again out of * ComposeTranslations but we *should* have bindings by then */ if (widget->core.tm.proc_table == NULL) { _XtMergeTranslations(widget, NULL, XtTableReplace); /* * if we're realized then we'll be called out of * ComposeTranslations */ if (XtIsRealized(widget)) return; } xlations->eventMask = 0; for (i = 0; i < xlations->numStateTrees; i++) { stateTree = xlations->stateTreeTbl[i]; _XtTraverseStateTree(stateTree, AggregateEventMask, (XtPointer)&xlations->eventMask); mappingNotifyInterest |= stateTree->simple.mappingNotifyInterest; } /* double click needs to make sure that you have selected on both button down and up. */ if (xlations->eventMask & ButtonPressMask) xlations->eventMask |= ButtonReleaseMask; if (xlations->eventMask & ButtonReleaseMask) xlations->eventMask |= ButtonPressMask; if (mappingNotifyInterest) { XtPerDisplay pd = _XtGetPerDisplay(XtDisplay(widget)); if (pd->mapping_callbacks) _XtAddCallbackOnce(&(pd->mapping_callbacks), DispatchMappingNotify, (XtPointer)widget); else _XtAddCallback(&(pd->mapping_callbacks), DispatchMappingNotify, (XtPointer)widget); if (widget->core.destroy_callbacks != NULL) _XtAddCallbackOnce( (InternalCallbackList *) &widget->core.destroy_callbacks, RemoveFromMappingCallbacks, (XtPointer)widget ); else _XtAddCallback((InternalCallbackList *) &widget->core.destroy_callbacks, RemoveFromMappingCallbacks, (XtPointer)widget ); } _XtBindActions(widget, (XtTM)&widget->core.tm); _XtRegisterGrabs(widget); } void _XtRemoveTranslations( Widget widget) { Cardinal i; TMSimpleStateTree stateTree; Boolean mappingNotifyInterest = False; XtTranslations xlations = widget->core.tm.translations; if (xlations == NULL) return; for (i = 0; i < xlations->numStateTrees; i++) { stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[i]; mappingNotifyInterest |= stateTree->mappingNotifyInterest; } if (mappingNotifyInterest) RemoveFromMappingCallbacks(widget, (XtPointer)widget, NULL); } static void _XtUninstallTranslations( Widget widget) { XtTranslations xlations = widget->core.tm.translations; _XtUnbindActions(widget, xlations, (TMBindData)widget->core.tm.proc_table); _XtRemoveTranslations(widget); widget->core.tm.translations = NULL; FreeContext((TMContext *)&widget->core.tm.current_state); } void _XtDestroyTMData( Widget widget) { TMComplexBindData cBindData; _XtUninstallTranslations(widget); if ((cBindData = (TMComplexBindData)widget->core.tm.proc_table)) { if (cBindData->isComplex) { ATranslations aXlations, nXlations; nXlations = (ATranslations) cBindData->accel_context; while (nXlations){ aXlations = nXlations; nXlations = nXlations->next; XtFree((char *)aXlations); } } XtFree((char *)cBindData); } } /*** Public procedures ***/ void XtUninstallTranslations( Widget widget) { EventMask oldMask; Widget hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (! widget->core.tm.translations) { UNLOCK_APP(app); return; } oldMask = widget->core.tm.translations->eventMask; _XtUninstallTranslations(widget); if (XtIsRealized(widget) && oldMask) XSelectInput(XtDisplay(widget), XtWindow(widget), XtBuildEventMask(widget)); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHuninstallTranslations; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } XtTranslations _XtCreateXlations( TMStateTree *stateTrees, TMShortCard numStateTrees, XtTranslations first, XtTranslations second) { XtTranslations xlations; TMShortCard i; xlations = (XtTranslations) __XtMalloc(sizeof(TranslationData) + (numStateTrees-1) * sizeof(TMStateTree)); #ifdef TRACE_TM LOCK_PROCESS; if (_XtGlobalTM.numTms == _XtGlobalTM.tmTblSize) { _XtGlobalTM.tmTblSize += 16; _XtGlobalTM.tmTbl = (XtTranslations *) XtRealloc((char *)_XtGlobalTM.tmTbl, _XtGlobalTM.tmTblSize * sizeof(XtTranslations)); } _XtGlobalTM.tmTbl[_XtGlobalTM.numTms++] = xlations; UNLOCK_PROCESS; #endif /* TRACE_TM */ xlations->composers[0] = first; xlations->composers[1] = second; xlations->hasBindings = False; xlations->operation = XtTableReplace; for (i = 0;i < numStateTrees; i++) { xlations->stateTreeTbl[i] = (TMStateTree) stateTrees[i]; stateTrees[i]->simple.refCount++; } xlations->numStateTrees = numStateTrees; xlations->eventMask = 0; return xlations; } TMStateTree _XtParseTreeToStateTree( TMParseStateTree parseTree) { TMSimpleStateTree simpleTree; unsigned int tableSize; if (parseTree->numComplexBranchHeads) { TMComplexStateTree complexTree; complexTree = XtNew(TMComplexStateTreeRec); complexTree->isSimple = False; tableSize = parseTree->numComplexBranchHeads * sizeof(StatePtr); complexTree->complexBranchHeadTbl = (StatePtr *) __XtMalloc(tableSize); XtMemmove(complexTree->complexBranchHeadTbl, parseTree->complexBranchHeadTbl, tableSize); complexTree->numComplexBranchHeads = parseTree->numComplexBranchHeads; simpleTree = (TMSimpleStateTree)complexTree; } else { simpleTree = XtNew(TMSimpleStateTreeRec); simpleTree->isSimple = True; } simpleTree->isAccelerator = parseTree->isAccelerator; simpleTree->refCount = 0; simpleTree->mappingNotifyInterest = parseTree->mappingNotifyInterest; tableSize = parseTree->numBranchHeads * sizeof(TMBranchHeadRec); simpleTree->branchHeadTbl = (TMBranchHead) __XtMalloc(tableSize); XtMemmove(simpleTree->branchHeadTbl, parseTree->branchHeadTbl, tableSize); simpleTree->numBranchHeads = parseTree->numBranchHeads; tableSize = parseTree->numQuarks * sizeof(XrmQuark); simpleTree->quarkTbl = (XrmQuark *) __XtMalloc(tableSize); XtMemmove(simpleTree->quarkTbl, parseTree->quarkTbl, tableSize); simpleTree->numQuarks = parseTree->numQuarks; return (TMStateTree)simpleTree; } static void FreeActions( ActionPtr actions) { ActionPtr action; TMShortCard i; for (action = actions; action;) { ActionPtr nextAction = action->next; for (i = action->num_params; i;) { XtFree( action->params[--i] ); } XtFree( (char*)action->params ); XtFree((char*) action); action = nextAction; } } /*ARGSUSED*/ static void AmbigActions( EventSeqPtr initialEvent, StatePtr *state, TMParseStateTree stateTree) { String params[3]; Cardinal numParams = 0; params[numParams++] = _XtPrintEventSeq(initialEvent, NULL); params[numParams++] = _XtPrintActions((*state)->actions, stateTree->quarkTbl); XtWarningMsg (XtNtranslationError,"oldActions",XtCXtToolkitError, "Previous entry was: %s %s", params, &numParams); XtFree((char *)params[0]); XtFree((char *)params[1]); numParams = 0; params[numParams++] = _XtPrintActions(initialEvent->actions, stateTree->quarkTbl); XtWarningMsg (XtNtranslationError,"newActions",XtCXtToolkitError, "New actions are:%s", params, &numParams); XtFree((char *)params[0]); XtWarningMsg (XtNtranslationError,"ambiguousActions", XtCXtToolkitError, "Overriding earlier translation manager actions.", (String *)NULL, (Cardinal *)NULL); FreeActions((*state)->actions); (*state)->actions = NULL; } void _XtAddEventSeqToStateTree( EventSeqPtr eventSeq, TMParseStateTree stateTree) { StatePtr *state; EventSeqPtr initialEvent = eventSeq; TMBranchHead branchHead; TMShortCard idx, modIndex, typeIndex; if (eventSeq == NULL) return; /* note that all states in the event seq passed in start out null */ /* we fill them in with the matching state as we traverse the list */ /* * We need to free the parser data structures !!! */ typeIndex = _XtGetTypeIndex(&eventSeq->event); modIndex = _XtGetModifierIndex(&eventSeq->event); idx = GetBranchHead(stateTree, typeIndex, modIndex, False); branchHead = &stateTree->branchHeadTbl[idx]; /* * Need to check for pre-existing actions with same lhs ||| */ /* * Check for optimized case. Don't assume that the eventSeq has actions. */ if (!eventSeq->next && eventSeq->actions && !eventSeq->actions->next && !eventSeq->actions->num_params) { if (eventSeq->event.eventType == MappingNotify) stateTree->mappingNotifyInterest = True; branchHead->hasActions = True; branchHead->more = eventSeq->actions->idx; FreeActions(eventSeq->actions); eventSeq->actions = NULL; return; } branchHead->isSimple = False; if (!eventSeq->next) branchHead->hasActions = True; branchHead->more = GetComplexBranchIndex(stateTree, typeIndex, modIndex); state = &stateTree->complexBranchHeadTbl[TMBranchMore(branchHead)]; for (;;) { *state = NewState(stateTree, typeIndex, modIndex); if (eventSeq->event.eventType == MappingNotify) stateTree->mappingNotifyInterest = True; /* *state now points at state record matching event */ eventSeq->state = *state; if (eventSeq->actions != NULL) { if ((*state)->actions != NULL) AmbigActions(initialEvent, state, stateTree); (*state)->actions = eventSeq->actions; #ifdef TRACE_TM LOCK_PROCESS _XtGlobalTM.numComplexActions++; UNLOCK_PROCESS; #endif /* TRACE_TM */ } if (((eventSeq = eventSeq->next) == NULL) || (eventSeq->state)) break; state = &(*state)->nextLevel; typeIndex = _XtGetTypeIndex(&eventSeq->event); modIndex = _XtGetModifierIndex(&eventSeq->event); LOCK_PROCESS; if (!TMNewMatchSemantics()) { /* * force a potential empty entry into the branch head * table in order to emulate old matching behavior */ (void) GetBranchHead(stateTree, typeIndex, modIndex, True); } UNLOCK_PROCESS; } if (eventSeq && eventSeq->state) { /* we've been here before... must be a cycle in the event seq. */ branchHead->hasCycles = True; (*state)->nextLevel = eventSeq->state; eventSeq->state->isCycleStart = True; (*state)->isCycleEnd = TRUE; } } /* * Internal Converter for merging. Old and New must both be valid xlations */ /*ARGSUSED*/ Boolean _XtCvtMergeTranslations( Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr from, XrmValuePtr to, XtPointer *closure_ret) { XtTranslations first, second, xlations; TMStateTree *stateTrees, stackStateTrees[16]; TMShortCard numStateTrees, i; if (*num_args != 0) XtWarningMsg("invalidParameters","mergeTranslations",XtCXtToolkitError, "MergeTM to TranslationTable needs no extra arguments", (String *)NULL, (Cardinal *)NULL); if (to->addr != NULL && to->size < sizeof(XtTranslations)) { to->size = sizeof(XtTranslations); return False; } first = ((TMConvertRec*)from->addr)->old; second = ((TMConvertRec*)from->addr)->new; numStateTrees = first->numStateTrees + second->numStateTrees; stateTrees = (TMStateTree *) XtStackAlloc(numStateTrees * sizeof(TMStateTree), stackStateTrees); for (i = 0; i < first->numStateTrees; i++) stateTrees[i] = first->stateTreeTbl[i]; for (i = 0; i < second->numStateTrees; i++) stateTrees[i + first->numStateTrees] = second->stateTreeTbl[i]; xlations = _XtCreateXlations(stateTrees, numStateTrees, first, second); if (to->addr != NULL) { *(XtTranslations*)to->addr = xlations; } else { static XtTranslations staticStateTable; staticStateTable = xlations; to->addr= (XPointer)&staticStateTable; to->size = sizeof(XtTranslations); } XtStackFree((XtPointer)stateTrees, (XtPointer)stackStateTrees); return True; } static XtTranslations MergeThem( Widget dest, XtTranslations first, XtTranslations second) { XtCacheRef cache_ref; static XrmQuark from_type = NULLQUARK, to_type; XrmValue from, to; TMConvertRec convert_rec; XtTranslations newTable; LOCK_PROCESS; if (from_type == NULLQUARK) { from_type = XrmPermStringToQuark(_XtRStateTablePair); to_type = XrmPermStringToQuark(XtRTranslationTable); } UNLOCK_PROCESS; from.addr = (XPointer)&convert_rec; from.size = sizeof(TMConvertRec); to.addr = (XPointer)&newTable; to.size = sizeof(XtTranslations); convert_rec.old = first; convert_rec.new = second; LOCK_PROCESS; if (! _XtConvert(dest, from_type, &from, to_type, &to, &cache_ref)) { UNLOCK_PROCESS; return NULL; } UNLOCK_PROCESS; #ifndef REFCNT_TRANSLATIONS if (cache_ref) XtAddCallback(dest, XtNdestroyCallback, XtCallbackReleaseCacheRef, (XtPointer)cache_ref); #endif return newTable; } /* * Unmerge will recursively traverse the xlation compose tree and * generate a new xlation that is the result of all instances of * xlations being removed. It currently doesn't differentiate between * the potential that an xlation will be both an accelerator and * normal. This is not supported by the spec anyway. */ static XtTranslations UnmergeTranslations( Widget widget, XtTranslations xlations, XtTranslations unmergeXlations, TMShortCard currIndex, TMComplexBindProcs oldBindings, TMShortCard numOldBindings, TMComplexBindProcs newBindings, TMShortCard *numNewBindingsRtn) { XtTranslations first, second, result; if (!xlations || (xlations == unmergeXlations)) return NULL; if (xlations->composers[0]) { first = UnmergeTranslations(widget, xlations->composers[0], unmergeXlations, currIndex, oldBindings, numOldBindings, newBindings, numNewBindingsRtn); } else first = NULL; if (xlations->composers[1]) { second = UnmergeTranslations(widget, xlations->composers[1], unmergeXlations, currIndex + xlations->composers[0]->numStateTrees, oldBindings, numOldBindings, newBindings, numNewBindingsRtn); } else second = NULL; if (first || second) { if (first && second) { if ((first != xlations->composers[0]) || (second != xlations->composers[1])) result = MergeThem(widget, first, second); else result = xlations; } else { if (first) result = first; else result = second; } } else { /* only update for leaf nodes */ if (numOldBindings) { Cardinal i; for (i = 0; i < xlations->numStateTrees; i++) { if (xlations->stateTreeTbl[i]->simple.isAccelerator) newBindings[*numNewBindingsRtn] = oldBindings[currIndex + i]; (*numNewBindingsRtn)++; } } result = xlations; } return result; } typedef struct { XtTranslations xlations; TMComplexBindProcs bindings; }MergeBindRec, *MergeBind; static XtTranslations MergeTranslations( Widget widget, XtTranslations oldXlations, XtTranslations newXlations, _XtTranslateOp operation, Widget source, TMComplexBindProcs oldBindings, TMComplexBindProcs newBindings, TMShortCard *numNewRtn) { XtTranslations newTable = NULL, xlations; TMComplexBindProcs bindings; TMShortCard i, j; TMStateTree *treePtr; TMShortCard numNew = *numNewRtn; MergeBindRec bindPair[2]; /* If the new translation has an accelerator context then pull it * off and pass it and the real xlations in to the caching merge * routine. */ if (newXlations->hasBindings) { xlations = ((ATranslations) newXlations)->xlations; bindings = (TMComplexBindProcs) &((ATranslations) newXlations)->bindTbl[0]; } else { xlations = newXlations; bindings = NULL; } switch(operation) { case XtTableReplace: newTable = bindPair[0].xlations = xlations; bindPair[0].bindings = bindings; bindPair[1].xlations = NULL; bindPair[1].bindings = NULL; break; case XtTableAugment: bindPair[0].xlations = oldXlations; bindPair[0].bindings = oldBindings; bindPair[1].xlations = xlations; bindPair[1].bindings = bindings; newTable = NULL; break; case XtTableOverride: bindPair[0].xlations = xlations; bindPair[0].bindings = bindings; bindPair[1].xlations = oldXlations; bindPair[1].bindings = oldBindings; newTable = NULL; break; } if (!newTable) newTable = MergeThem(widget, bindPair[0].xlations, bindPair[1].xlations); for (i = 0, numNew = 0; i < 2; i++) { if (bindPair[i].xlations) for (j = 0; j < bindPair[i].xlations->numStateTrees; j++, numNew++) { if (bindPair[i].xlations->stateTreeTbl[j]->simple.isAccelerator) { if (bindPair[i].bindings) newBindings[numNew] = bindPair[i].bindings[j]; else { newBindings[numNew].widget = source; newBindings[numNew].aXlations = bindPair[i].xlations; } } } } *numNewRtn = numNew; treePtr = &newTable->stateTreeTbl[0]; for (i = 0; i < newTable->numStateTrees; i++, treePtr++) (*treePtr)->simple.refCount++; return newTable; } static TMBindData MakeBindData( TMComplexBindProcs bindings, TMShortCard numBindings, TMBindData oldBindData) { TMLongCard bytes; TMShortCard i; Boolean isComplex; TMBindData bindData; if (numBindings == 0) return NULL; for (i = 0; i < numBindings; i++) if (bindings[i].widget) break; isComplex = (i < numBindings); if (isComplex) bytes = (sizeof(TMComplexBindDataRec) + ((numBindings - 1) * sizeof(TMComplexBindProcsRec))); else bytes = (sizeof(TMSimpleBindDataRec) + ((numBindings - 1) * sizeof(TMSimpleBindProcsRec))); bindData = (TMBindData) __XtCalloc(sizeof(char), bytes); bindData->simple.isComplex = isComplex; if (isComplex) { TMComplexBindData cBindData = (TMComplexBindData)bindData; /* * If there were any accelerator contexts in the old bindData * then propagate them to the new one. */ if (oldBindData && oldBindData->simple.isComplex) cBindData->accel_context = ((TMComplexBindData) oldBindData)->accel_context; XtMemmove((char *)&cBindData->bindTbl[0], (char *)bindings, numBindings * sizeof(TMComplexBindProcsRec)); } return bindData; } /* * This routine is the central clearinghouse for merging translations * into a widget. It takes care of preping the action bindings for * realize time and calling the converter or doing a straight merge if * the destination is empty. */ static Boolean ComposeTranslations( Widget dest, _XtTranslateOp operation, Widget source, XtTranslations newXlations) { XtTranslations newTable, oldXlations; XtTranslations accNewXlations; EventMask oldMask = 0; TMBindData bindData; TMComplexBindProcs oldBindings = NULL; TMShortCard numOldBindings = 0, numNewBindings = 0, numBytes; TMComplexBindProcsRec stackBindings[16], *newBindings; /* * how should we be handling the refcount decrement for the * replaced translation table ??? */ if (!newXlations) { XtAppWarningMsg(XtWidgetToApplicationContext(dest), XtNtranslationError,"nullTable",XtCXtToolkitError, "table to (un)merge must not be null", (String *)NULL, (Cardinal *)NULL); return False; } accNewXlations = newXlations; newXlations = ((newXlations->hasBindings) ? ((ATranslations)newXlations)->xlations : newXlations); if (!(oldXlations = dest->core.tm.translations)) operation = XtTableReplace; /* * try to avoid generation of duplicate state trees. If the source * isn't simple (1 state Tree) then it's too much hassle */ if (((operation == XtTableAugment) || (operation == XtTableOverride)) && (newXlations->numStateTrees == 1)) { Cardinal i; for (i = 0; i < oldXlations->numStateTrees; i++) if (oldXlations->stateTreeTbl[i] == newXlations->stateTreeTbl[0]) break; if (i < oldXlations->numStateTrees) { if (operation == XtTableAugment) { /* * we don't need to do anything since it's already * there */ return True; } else {/* operation == XtTableOverride */ /* * We'll get rid of the duplicate trees throughout the * and leave it with a pruned translation table. This * will only work if the same table has been merged * into this table (or one of it's composers */ _XtUnmergeTranslations(dest, newXlations); /* * reset oldXlations so we're back in sync */ if (!(oldXlations = dest->core.tm.translations)) operation = XtTableReplace; } } } bindData = (TMBindData) dest->core.tm.proc_table; if (bindData) { numOldBindings = (oldXlations ? oldXlations->numStateTrees : 0); if (bindData->simple.isComplex) oldBindings = &((TMComplexBindData)bindData)->bindTbl[0]; else oldBindings = (TMComplexBindProcs) (&((TMSimpleBindData)bindData)->bindTbl[0]); } numBytes =(((oldXlations ? oldXlations->numStateTrees : 0) + newXlations->numStateTrees) * sizeof(TMComplexBindProcsRec)); newBindings = (TMComplexBindProcs) XtStackAlloc(numBytes, stackBindings); XtBZero((char *)newBindings, numBytes); if (operation == XtTableUnmerge) { newTable = UnmergeTranslations(dest, oldXlations, newXlations, 0, oldBindings, numOldBindings, newBindings, &numNewBindings); #ifdef DEBUG /* check for no match for unmerge */ if (newTable == oldXlations) { XtWarning("attempt to unmerge invalid table"); XtStackFree((char *)newBindings, (char *)stackBindings); return(newTable != NULL); } #endif /* DEBUG */ } else { newTable = MergeTranslations(dest, oldXlations, accNewXlations, operation, source, oldBindings, newBindings, &numNewBindings); } if (XtIsRealized(dest)) { oldMask = 0; if (oldXlations) oldMask = oldXlations->eventMask; _XtUninstallTranslations(dest); } dest->core.tm.proc_table = (XtActionProc *) MakeBindData(newBindings, numNewBindings, bindData); if (bindData) XtFree((char *)bindData); dest->core.tm.translations = newTable; if (XtIsRealized(dest)) { EventMask mask = 0; _XtInstallTranslations(dest); if (newTable) mask = newTable->eventMask; if (mask != oldMask) XSelectInput(XtDisplay(dest), XtWindow(dest), XtBuildEventMask(dest)); } XtStackFree((XtPointer)newBindings, (XtPointer)stackBindings); return(newTable != NULL); } /* * If a GetValues is done on a translation resource that contains * accelerators we need to return the accelerator context in addition * to the pure translations. Since this means returning memory that * the client controlls but we still own, we will track the "headers" * that we return (via a linked list pointed to from the bindData) and * free it at destroy time. */ XtTranslations _XtGetTranslationValue( Widget w) { XtTM tmRecPtr = (XtTM) &w->core.tm; ATranslations *aXlationsPtr; TMComplexBindData cBindData = (TMComplexBindData) tmRecPtr->proc_table; XtTranslations xlations = tmRecPtr->translations; if (!xlations || !cBindData || !cBindData->isComplex) return xlations; /* Walk the list looking to see if we already have generated a * header for the currently installed translations. If we have, * just return that header. Otherwise create a new header. */ for (aXlationsPtr = (ATranslations *) &cBindData->accel_context; *aXlationsPtr && (*aXlationsPtr)->xlations != xlations; aXlationsPtr = &(*aXlationsPtr)->next) ; if (*aXlationsPtr) return (XtTranslations) *aXlationsPtr; else { /* create a new aXlations context */ ATranslations aXlations; Cardinal numBindings = xlations->numStateTrees; (*aXlationsPtr) = aXlations = (ATranslations) __XtMalloc(sizeof(ATranslationData) + (numBindings - 1) * sizeof(TMComplexBindProcsRec)); aXlations->hasBindings = True; aXlations->xlations = xlations; aXlations->next = NULL; XtMemmove((char *) &aXlations->bindTbl[0], (char *) &cBindData->bindTbl[0], numBindings * sizeof(TMComplexBindProcsRec)); return (XtTranslations) aXlations; } } /*ARGSUSED*/ static void RemoveStateTree( TMStateTree tree) { #ifdef REFCNT_TRANSLATIONS TMComplexStateTree stateTree = (TMComplexStateTree)tree; if (--stateTree->refCount == 0) { /* * should we free/refcount the match recs ? */ if (!stateTree->isSimple) { StatePtr currState, nextState; TMShortCard i; for (i = 0; i < stateTree->numComplexBranchHeads; i++) { currState = nextState = stateTree->complexBranchHeadTbl[i]; for (; nextState;){ FreeActions(currState->actions); currState->actions = NULL; if (!currState->isCycleEnd) nextState = currState->nextLevel; else nextState = NULL; XtFree( (char*)currState ); } } XtFree((char*)stateTree->complexBranchHeadTbl); } XtFree((char*)stateTree->branchHeadTbl); XtFree((char*)stateTree); } #endif /* REFCNT_TRANSLATIONS */ } void _XtRemoveStateTreeByIndex( XtTranslations xlations, TMShortCard i) { TMStateTree *stateTrees = xlations->stateTreeTbl; RemoveStateTree(stateTrees[i]); xlations->numStateTrees--; for (; i < xlations->numStateTrees; i++) { stateTrees[i] = stateTrees[i+1]; } } /* ARGSUSED */ void _XtFreeTranslations( XtAppContext app, XrmValuePtr toVal, XtPointer closure, XrmValuePtr args, Cardinal *num_args) { XtTranslations xlations; int i; if (*num_args != 0) XtAppWarningMsg(app, "invalidParameters","freeTranslations",XtCXtToolkitError, "Freeing XtTranslations requires no extra arguments", (String *)NULL, (Cardinal *)NULL); xlations = *(XtTranslations*)toVal->addr; for (i = 0; i < (int)xlations->numStateTrees; i++) RemoveStateTree(xlations->stateTreeTbl[i]); XtFree((char *)xlations); } /* The spec is not clear on when actions specified in accelerators are bound; * Bind them at Realize the same as translations */ void XtInstallAccelerators( Widget destination, Widget source) { XtTranslations aXlations; _XtTranslateOp op; String buf; WIDGET_TO_APPCON(destination); /* * test that it was parsed as an accelarator table. Even though * there doesn't need to be a distinction it makes life easier if * we honor the spec implication that aXlations is an accelerator */ LOCK_APP(app); LOCK_PROCESS; if ((!XtIsWidget(source)) || ((aXlations = source->core.accelerators) == NULL) || (aXlations->stateTreeTbl[0]->simple.isAccelerator == False)) { UNLOCK_PROCESS; UNLOCK_APP(app); return; } aXlations = source->core.accelerators; op = aXlations->operation; if (ComposeTranslations(destination, op, source, aXlations) && (XtClass(source)->core_class.display_accelerator != NULL)) { buf = _XtPrintXlations(destination, aXlations, source, False); (*(XtClass(source)->core_class.display_accelerator))(source,buf); XtFree(buf); } UNLOCK_PROCESS; UNLOCK_APP(app); } void XtInstallAllAccelerators( Widget destination, Widget source) { Cardinal i; CompositeWidget cw; WIDGET_TO_APPCON(destination); /* Recurse down normal children */ LOCK_APP(app); LOCK_PROCESS; if (XtIsComposite(source)) { cw = (CompositeWidget) source; for (i = 0; i < cw->composite.num_children; i++) { XtInstallAllAccelerators(destination,cw->composite.children[i]); } } /* Recurse down popup children */ if (XtIsWidget(source)) { for (i = 0; i < source->core.num_popups; i++) { XtInstallAllAccelerators(destination,source->core.popup_list[i]); } } /* Finally, apply procedure to this widget */ XtInstallAccelerators(destination,source); UNLOCK_PROCESS; UNLOCK_APP(app); } #if 0 /* dead code */ static _XtTranslateOp _XtGetTMOperation( XtTranslations xlations) { return ((xlations->hasBindings) ? ((ATranslations)xlations)->xlations->operation : xlations->operation); } #endif void XtAugmentTranslations( Widget widget, XtTranslations new) { Widget hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; (void)ComposeTranslations(widget, XtTableAugment, (Widget)NULL, new); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHaugmentTranslations; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_PROCESS; UNLOCK_APP(app); } void XtOverrideTranslations( Widget widget, XtTranslations new) { Widget hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; (void) ComposeTranslations(widget, XtTableOverride, (Widget)NULL, new); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHoverrideTranslations; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_PROCESS; UNLOCK_APP(app); } void _XtMergeTranslations( Widget widget, XtTranslations newXlations, _XtTranslateOp op) { if (!newXlations){ if (!widget->core.tm.translations) return; else { newXlations = widget->core.tm.translations; widget->core.tm.translations = NULL; } } (void) ComposeTranslations(widget, op, (Widget)NULL, newXlations); } void _XtUnmergeTranslations( Widget widget, XtTranslations xlations) { ComposeTranslations(widget, XtTableUnmerge, (Widget)NULL, xlations); } 1)) { Cardinal i; for (i = 0; i < oldXlations->numStateTrees; i++) iflibXt-1.1.5/src/SetValues.c000064401431060000012000000372531252061032400157340ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" /* * XtSetValues(), XtSetSubvalues() */ static void SetValues( char* base, /* Base address to write values to */ XrmResourceList* res, /* The current resource values. */ register Cardinal num_resources, /* number of items in resources */ ArgList args, /* The resource values to set */ Cardinal num_args) /* number of items in arg list */ { register ArgList arg; register Cardinal i; register XrmName argName; register XrmResourceList* xrmres; /* Resource lists are assumed to be in compiled form already via the initial XtGetResources, XtGetSubresources calls */ for (arg = args ; num_args != 0; num_args--, arg++) { argName = StringToName(arg->name); for (xrmres = res, i = 0; i < num_resources; i++, xrmres++) { if (argName == (*xrmres)->xrm_name) { _XtCopyFromArg(arg->value, base - (*xrmres)->xrm_offset - 1, (*xrmres)->xrm_size); break; } } } } /* SetValues */ static Boolean CallSetValues ( WidgetClass class, Widget current, Widget request, Widget new, ArgList args, Cardinal num_args) { Boolean redisplay = FALSE; WidgetClass superclass; XtArgsFunc set_values_hook; XtSetValuesFunc set_values; LOCK_PROCESS; superclass = class->core_class.superclass; UNLOCK_PROCESS; if (superclass) redisplay = CallSetValues(superclass, current, request, new, args, num_args); LOCK_PROCESS; set_values = class->core_class.set_values; UNLOCK_PROCESS; if (set_values) redisplay |= (*set_values) (current, request, new, args, &num_args); LOCK_PROCESS; set_values_hook = class->core_class.set_values_hook; UNLOCK_PROCESS; if (set_values_hook) redisplay |= (*set_values_hook) (new, args, &num_args); return (redisplay); } static Boolean CallConstraintSetValues ( ConstraintWidgetClass class, Widget current, Widget request, Widget new, ArgList args, Cardinal num_args) { Boolean redisplay = FALSE; XtSetValuesFunc set_values; ConstraintWidgetClass superclass; if ((WidgetClass)class != constraintWidgetClass) { if (class == NULL) XtAppErrorMsg(XtWidgetToApplicationContext(current), "invalidClass","constraintSetValue",XtCXtToolkitError, "Subclass of Constraint required in CallConstraintSetValues", (String *)NULL, (Cardinal *)NULL); LOCK_PROCESS; superclass = (ConstraintWidgetClass) class->core_class.superclass; UNLOCK_PROCESS; redisplay = CallConstraintSetValues(superclass, current, request, new, args, num_args); } LOCK_PROCESS; set_values = class->constraint_class.set_values; UNLOCK_PROCESS; if (set_values) redisplay |= (*set_values) (current, request, new, args, &num_args); return (redisplay); } void XtSetSubvalues( XtPointer base, /* Base address to write values to */ register XtResourceList resources, /* The current resource values. */ register Cardinal num_resources, /* number of items in resources */ ArgList args, /* The resource values to set */ Cardinal num_args) /* number of items in arg list */ { register XrmResourceList* xrmres; xrmres = _XtCreateIndirectionTable (resources, num_resources); SetValues((char*)base,xrmres,num_resources, args, num_args); XtFree((char *)xrmres); } void XtSetValues( register Widget w, ArgList args, Cardinal num_args) { register Widget oldw, reqw; /* need to use strictest alignment rules possible in next two decls. */ double oldwCache[100], reqwCache[100]; double oldcCache[20], reqcCache[20]; Cardinal widgetSize, constraintSize; Boolean redisplay, cleared_rect_obj = False; XtGeometryResult result; XtWidgetGeometry geoReq, geoReply; WidgetClass wc; ConstraintWidgetClass cwc = NULL; Boolean hasConstraints; XtAlmostProc set_values_almost; XtAppContext app = XtWidgetToApplicationContext(w); Widget hookobj = XtHooksOfDisplay(XtDisplayOfObject(w)); LOCK_APP(app); wc = XtClass(w); if ((args == NULL) && (num_args != 0)) { XtAppErrorMsg(app, "invalidArgCount","xtSetValues",XtCXtToolkitError, "Argument count > 0 on NULL argument list in XtSetValues", (String *)NULL, (Cardinal *)NULL); } /* Allocate and copy current widget into old widget */ LOCK_PROCESS; widgetSize = wc->core_class.widget_size; UNLOCK_PROCESS; oldw = (Widget) XtStackAlloc(widgetSize, oldwCache); reqw = (Widget) XtStackAlloc (widgetSize, reqwCache); (void) memmove((char *) oldw, (char *) w, (int) widgetSize); /* Set resource values */ LOCK_PROCESS; SetValues((char*)w, (XrmResourceList *) wc->core_class.resources, wc->core_class.num_resources, args, num_args); UNLOCK_PROCESS; (void) memmove ((char *) reqw, (char *) w, (int) widgetSize); hasConstraints = (XtParent(w) != NULL && !XtIsShell(w) && XtIsConstraint(XtParent(w))); /* Some widget sets apparently do ugly things by freeing the * constraints on some children, thus the extra test here */ if (hasConstraints) { cwc = (ConstraintWidgetClass) XtClass(w->core.parent); if (w->core.constraints) { LOCK_PROCESS; constraintSize = cwc->constraint_class.constraint_size; UNLOCK_PROCESS; } else constraintSize = 0; } else constraintSize = 0; if (constraintSize) { /* Allocate and copy current constraints into oldw */ oldw->core.constraints = XtStackAlloc(constraintSize, oldcCache); reqw->core.constraints = XtStackAlloc(constraintSize, reqcCache); (void) memmove((char *) oldw->core.constraints, (char *) w->core.constraints, (int) constraintSize); /* Set constraint values */ LOCK_PROCESS; SetValues((char*)w->core.constraints, (XrmResourceList *)(cwc->constraint_class.resources), cwc->constraint_class.num_resources, args, num_args); UNLOCK_PROCESS; (void) memmove((char *) reqw->core.constraints, (char *) w->core.constraints, (int) constraintSize); } /* Inform widget of changes, then inform parent of changes */ redisplay = CallSetValues (wc, oldw, reqw, w, args, num_args); if (hasConstraints) { redisplay |= CallConstraintSetValues(cwc, oldw, reqw, w, args, num_args); } if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; XtChangeHookSetValuesDataRec set_val; set_val.old = oldw; set_val.req = reqw; set_val.args = args; set_val.num_args = num_args; call_data.type = XtHsetValues; call_data.widget = w; call_data.event_data = (XtPointer) &set_val; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } if (XtIsRectObj(w)) { /* Now perform geometry request if needed */ geoReq.request_mode = 0; if (oldw->core.x != w->core.x) { geoReq.x = w->core.x; w->core.x = oldw->core.x; geoReq.request_mode |= CWX; } if (oldw->core.y != w->core.y) { geoReq.y = w->core.y; w->core.y = oldw->core.y; geoReq.request_mode |= CWY; } if (oldw->core.width != w->core.width) { geoReq.width = w->core.width; w->core.width = oldw->core.width; geoReq.request_mode |= CWWidth; } if (oldw->core.height != w->core.height) { geoReq.height = w->core.height; w->core.height = oldw->core.height; geoReq.request_mode |= CWHeight; } if (oldw->core.border_width != w->core.border_width) { geoReq.border_width = w->core.border_width; w->core.border_width = oldw->core.border_width; geoReq.request_mode |= CWBorderWidth; } if (geoReq.request_mode != 0) { /* Pass on any requests for unchanged geometry values */ if (geoReq.request_mode != (CWX | CWY | CWWidth | CWHeight | CWBorderWidth)) { for ( ; num_args != 0; num_args--, args++) { if (! (geoReq.request_mode & CWX) && strcmp(XtNx, args->name) == 0) { geoReq.x = w->core.x; geoReq.request_mode |= CWX; } else if (! (geoReq.request_mode & CWY) && strcmp(XtNy, args->name) == 0) { geoReq.y = w->core.y; geoReq.request_mode |= CWY; } else if (! (geoReq.request_mode & CWWidth) && strcmp(XtNwidth, args->name) == 0) { geoReq.width = w->core.width; geoReq.request_mode |= CWWidth; } else if (! (geoReq.request_mode & CWHeight) && strcmp(XtNheight, args->name) == 0) { geoReq.height = w->core.height; geoReq.request_mode |= CWHeight; } else if (! (geoReq.request_mode & CWBorderWidth) && strcmp(XtNborderWidth, args->name) == 0) { geoReq.border_width = w->core.border_width; geoReq.request_mode |= CWBorderWidth; } } } CALLGEOTAT(_XtGeoTrace(w, "\nXtSetValues sees some geometry changes for \"%s\".\n", XtName(w))); CALLGEOTAT(_XtGeoTab(1)); do { XtGeometryHookDataRec call_data; if (XtHasCallbacks(hookobj, XtNgeometryHook) == XtCallbackHasSome) { call_data.type = XtHpreGeometry; call_data.widget = w; call_data.request = &geoReq; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); call_data.result = result = _XtMakeGeometryRequest(w, &geoReq, &geoReply, &cleared_rect_obj); call_data.type = XtHpostGeometry; call_data.reply = &geoReply; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); } else { result = _XtMakeGeometryRequest(w, &geoReq, &geoReply, &cleared_rect_obj); } if (result == XtGeometryYes || result == XtGeometryDone) break; /* An Almost or No reply. Call widget and let it munge request, reply */ LOCK_PROCESS; set_values_almost = wc->core_class.set_values_almost; UNLOCK_PROCESS; if (set_values_almost == NULL) { XtAppWarningMsg(app, "invalidProcedure","set_values_almost", XtCXtToolkitError, "set_values_almost procedure shouldn't be NULL", (String *)NULL, (Cardinal *)NULL); break; } if (result == XtGeometryNo) geoReply.request_mode = 0; CALLGEOTAT(_XtGeoTrace(w,"calling SetValuesAlmost.\n")); (*set_values_almost) (oldw, w, &geoReq, &geoReply); } while (geoReq.request_mode != 0); /* call resize proc if we changed size and parent * didn't already invoke resize */ { XtWidgetProc resize; LOCK_PROCESS; resize = wc->core_class.resize; UNLOCK_PROCESS; if ((w->core.width != oldw->core.width || w->core.height != oldw->core.height) && result != XtGeometryDone && resize != (XtWidgetProc) NULL) { CALLGEOTAT(_XtGeoTrace(w, "XtSetValues calls \"%s\"'s resize proc.\n", XtName(w))); (*resize)(w); } } CALLGEOTAT(_XtGeoTab(-1)); } /* Redisplay if needed. No point in clearing if the window is * about to disappear, as the Expose event will just go straight * to the bit bucket. */ if (XtIsWidget(w)) { /* widgets can distinguish between redisplay and resize, since the server will cause an expose on resize */ if (redisplay && XtIsRealized(w) && !w->core.being_destroyed) { CALLGEOTAT(_XtGeoTrace(w, "XtSetValues calls ClearArea on \"%s\".\n", XtName(w))); XClearArea (XtDisplay(w), XtWindow(w), 0, 0, 0, 0, TRUE); } } else { /*non-window object */ if (redisplay && ! cleared_rect_obj ) { Widget pw = _XtWindowedAncestor(w); if (XtIsRealized(pw) && !pw->core.being_destroyed) { RectObj r = (RectObj)w; int bw2 = r->rectangle.border_width << 1; CALLGEOTAT(_XtGeoTrace(w, "XtSetValues calls ClearArea on \"%s\"'s parent \"%s\".\n", XtName(w),XtName(pw))); XClearArea (XtDisplay (pw), XtWindow (pw), r->rectangle.x, r->rectangle.y, r->rectangle.width + bw2, r->rectangle.height + bw2,TRUE); } } } } /* Free dynamic storage */ if (constraintSize) { XtStackFree(oldw->core.constraints, oldcCache); XtStackFree(reqw->core.constraints, reqcCache); } XtStackFree((XtPointer)oldw, oldwCache); XtStackFree((XtPointer)reqw, reqwCache); UNLOCK_APP(app); } /* XtSetValues */ libXt-1.1.5/src/TMkey.c000064401431060000012000000604001252061032400150400ustar00alancstaff00002660200006/*LINTLIBRARY*/ /*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #define XK_MISCELLANY #define XK_LATIN1 #define XK_LATIN2 #define XK_LATIN3 #define XK_LATIN4 #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include #ifdef XKB #include #endif #define FLUSHKEYCACHE(ctx) \ bzero((char *)&ctx->keycache, sizeof(TMKeyCache)) /* * The following array reorders the modifier bits so that the most common ones * (used by a translator) are in the top-most bits with respect to the size of * the keycache. The array currently just reverses the bits as a good guess. * This might be more trouble than it is worth, but it seems to help. */ #define FM(i) i >> (8 - TMKEYCACHELOG2) static const unsigned char modmix[256] = { FM(0x0f), FM(0x8f), FM(0x4f), FM(0xcf), FM(0x2f), FM(0xaf), FM(0x6f), FM(0xef), FM(0x1f), FM(0x9f), FM(0x5f), FM(0xdf), FM(0x3f), FM(0xbf), FM(0x7f), FM(0xff), FM(0x07), FM(0x87), FM(0x47), FM(0xc7), FM(0x27), FM(0xa7), FM(0x67), FM(0xe7), FM(0x17), FM(0x97), FM(0x57), FM(0xd7), FM(0x37), FM(0xb7), FM(0x77), FM(0xf7), FM(0x0b), FM(0x8b), FM(0x4b), FM(0xcb), FM(0x2b), FM(0xab), FM(0x6b), FM(0xeb), FM(0x1b), FM(0x9b), FM(0x5b), FM(0xdb), FM(0x3b), FM(0xbb), FM(0x7b), FM(0xfb), FM(0x03), FM(0x83), FM(0x43), FM(0xc3), FM(0x23), FM(0xa3), FM(0x63), FM(0xe3), FM(0x13), FM(0x93), FM(0x53), FM(0xd3), FM(0x33), FM(0xb3), FM(0x73), FM(0xf3), FM(0x0d), FM(0x8d), FM(0x4d), FM(0xcd), FM(0x2d), FM(0xad), FM(0x6d), FM(0xed), FM(0x1d), FM(0x9d), FM(0x5d), FM(0xdd), FM(0x3d), FM(0xbd), FM(0x7d), FM(0xfd), FM(0x05), FM(0x85), FM(0x45), FM(0xc5), FM(0x25), FM(0xa5), FM(0x65), FM(0xe5), FM(0x15), FM(0x95), FM(0x55), FM(0xd5), FM(0x35), FM(0xb5), FM(0x75), FM(0xf5), FM(0x09), FM(0x89), FM(0x49), FM(0xc9), FM(0x29), FM(0xa9), FM(0x69), FM(0xe9), FM(0x19), FM(0x99), FM(0x59), FM(0xd9), FM(0x39), FM(0xb9), FM(0x79), FM(0xf9), FM(0x01), FM(0x81), FM(0x41), FM(0xc1), FM(0x21), FM(0xa1), FM(0x61), FM(0xe1), FM(0x11), FM(0x91), FM(0x51), FM(0xd1), FM(0x31), FM(0xb1), FM(0x71), FM(0xf1), FM(0x00), FM(0x8e), FM(0x4e), FM(0xce), FM(0x2e), FM(0xae), FM(0x6e), FM(0xee), FM(0x1e), FM(0x9e), FM(0x5e), FM(0xde), FM(0x3e), FM(0xbe), FM(0x7e), FM(0xfe), FM(0x08), FM(0x88), FM(0x48), FM(0xc8), FM(0x28), FM(0xa8), FM(0x68), FM(0xe8), FM(0x18), FM(0x98), FM(0x58), FM(0xd8), FM(0x38), FM(0xb8), FM(0x78), FM(0xf8), FM(0x04), FM(0x84), FM(0x44), FM(0xc4), FM(0x24), FM(0xa4), FM(0x64), FM(0xe4), FM(0x14), FM(0x94), FM(0x54), FM(0xd4), FM(0x34), FM(0xb4), FM(0x74), FM(0xf4), FM(0x0c), FM(0x8c), FM(0x4c), FM(0xcc), FM(0x2c), FM(0xac), FM(0x6c), FM(0xec), FM(0x1c), FM(0x9c), FM(0x5c), FM(0xdc), FM(0x3c), FM(0xbc), FM(0x7c), FM(0xfc), FM(0x02), FM(0x82), FM(0x42), FM(0xc2), FM(0x22), FM(0xa2), FM(0x62), FM(0xe2), FM(0x12), FM(0x92), FM(0x52), FM(0xd2), FM(0x32), FM(0xb2), FM(0x72), FM(0xf2), FM(0x0a), FM(0x8a), FM(0x4a), FM(0xca), FM(0x2a), FM(0xaa), FM(0x6a), FM(0xea), FM(0x1a), FM(0x9a), FM(0x5a), FM(0xda), FM(0x3a), FM(0xba), FM(0x7a), FM(0xfa), FM(0x06), FM(0x86), FM(0x46), FM(0xc6), FM(0x26), FM(0xa6), FM(0x66), FM(0xe6), FM(0x16), FM(0x96), FM(0x56), FM(0xd6), FM(0x36), FM(0xb6), FM(0x76), FM(0xf6), FM(0x0e), FM(0x8e), FM(0x4e), FM(0xce), FM(0x2e), FM(0xae), FM(0x6e), FM(0xee), FM(0x1e), FM(0x9e), FM(0x5e), FM(0xde), FM(0x3e), FM(0xbe), FM(0x7e), FM(0xfe) }; #undef FM #define MOD_RETURN(ctx, key) (ctx)->keycache.modifiers_return[key] #define TRANSLATE(ctx,pd,dpy,key,mod,mod_ret,sym_ret) \ { \ int _i_ = (((key) - (pd)->min_keycode + modmix[(mod) & 0xff]) & \ (TMKEYCACHESIZE-1)); \ if ((key) == 0) { /* Xlib XIM composed input */ \ mod_ret = 0; \ sym_ret = 0; \ } else if ( /* not Xlib XIM composed input */ \ (ctx)->keycache.keycode[_i_] == (key) && \ (ctx)->keycache.modifiers[_i_] == (mod)) { \ mod_ret = MOD_RETURN(ctx, key); \ sym_ret = (ctx)->keycache.keysym[_i_]; \ } else { \ XtTranslateKeycode(dpy, key, mod, &mod_ret, &sym_ret); \ (ctx)->keycache.keycode[_i_] = key; \ (ctx)->keycache.modifiers[_i_] = (unsigned char)(mod); \ (ctx)->keycache.keysym[_i_] = sym_ret; \ MOD_RETURN(ctx, key) = (unsigned char)mod_ret; \ } \ } #define UPDATE_CACHE(ctx, pd, key, mod, mod_ret, sym_ret) \ { \ int _i_ = (((key) - (pd)->min_keycode + modmix[(mod) & 0xff]) & \ (TMKEYCACHESIZE-1)); \ (ctx)->keycache.keycode[_i_] = key; \ (ctx)->keycache.modifiers[_i_] = (unsigned char)(mod); \ (ctx)->keycache.keysym[_i_] = sym_ret; \ MOD_RETURN(ctx, key) = (unsigned char)mod_ret; \ } /* usual number of expected keycodes in XtKeysymToKeycodeList */ #define KEYCODE_ARRAY_SIZE 10 Boolean _XtComputeLateBindings( Display *dpy, LateBindingsPtr lateModifiers, Modifiers *computed, Modifiers *computedMask) { int i,j,ref; ModToKeysymTable* temp; XtPerDisplay perDisplay; Boolean found; KeySym tempKeysym = NoSymbol; perDisplay = _XtGetPerDisplay(dpy); if (perDisplay == NULL) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "displayError","invalidDisplay",XtCXtToolkitError, "Can't find display structure", (String *)NULL, (Cardinal *)NULL); return FALSE; } _InitializeKeysymTables(dpy, perDisplay); for (ref=0; lateModifiers[ref].keysym; ref++) { found = FALSE; for (i=0;i<8;i++) { temp = &(perDisplay->modsToKeysyms[i]); for (j=0;jcount;j++){ if (perDisplay->modKeysyms[temp->idx+j] == lateModifiers[ref].keysym) { *computedMask = *computedMask | temp->mask; if (!lateModifiers[ref].knot) *computed |= temp->mask; tempKeysym = lateModifiers[ref].keysym; found = TRUE; break; } } if (found) break; } if (!found && !lateModifiers[ref].knot) if (!lateModifiers[ref].pair && (tempKeysym == NoSymbol)) return FALSE; /* if you didn't find the modifier and the modifier must be asserted then return FALSE. If you didn't find the modifier and the modifier must be off, then it is OK . Don't return FALSE if this is the first member of a pair or if it is the second member of a pair when the first member was bound to a modifier */ if (!lateModifiers[ref].pair) tempKeysym = NoSymbol; } return TRUE; } void _XtAllocTMContext( XtPerDisplay pd) { TMKeyContext ctx; ctx = (TMKeyContext)_XtHeapAlloc(&pd->heap, sizeof(TMKeyContextRec)); ctx->event = NULL; ctx->serial = 0; ctx->keysym = NoSymbol; ctx->modifiers = 0; FLUSHKEYCACHE(ctx); pd->tm_context = ctx; } static unsigned int num_bits(unsigned long mask) { register unsigned long y; y = (mask >> 1) &033333333333; y = mask - y - ((y >>1) & 033333333333); return ((unsigned int) (((y + (y >> 3)) & 030707070707) % 077)); } Boolean _XtMatchUsingDontCareMods( TMTypeMatch typeMatch, TMModifierMatch modMatch, TMEventPtr eventSeq) { Modifiers modifiers_return; KeySym keysym_return; Modifiers useful_mods; int i, num_modbits; Modifiers computed = 0; Modifiers computedMask = 0; Boolean resolved = TRUE; Display *dpy = eventSeq->xev->xany.display; XtPerDisplay pd; TMKeyContext tm_context; if (modMatch->lateModifiers != NULL) resolved = _XtComputeLateBindings(dpy, modMatch->lateModifiers, &computed, &computedMask); if (!resolved) return FALSE; computed |= modMatch->modifiers; computedMask |= modMatch->modifierMask; /* gives do-care mask */ if ( (computed & computedMask) == (eventSeq->event.modifiers & computedMask) ) { pd = _XtGetPerDisplay(dpy); tm_context = pd->tm_context; TRANSLATE(tm_context, pd, dpy, (KeyCode)eventSeq->event.eventCode, (unsigned)0, modifiers_return, keysym_return); if ((keysym_return & typeMatch->eventCodeMask) == typeMatch->eventCode ) { tm_context->event = eventSeq->xev; tm_context->serial = eventSeq->xev->xany.serial; tm_context->keysym = keysym_return; tm_context->modifiers = (Modifiers)0; return TRUE; } useful_mods = ~computedMask & modifiers_return; if (useful_mods == 0) return FALSE; switch (num_modbits = num_bits(useful_mods)) { case 1: case 8: /* * one modbit should never happen, in fact the implementation * of XtTranslateKey and XmTranslateKey guarantee that it * won't, so don't care if the loop is set up for the case * when one modbit is set. * The performance implications of all eight modbits being * set is horrendous. This isn't a problem with Xt/Xaw based * applications. We can only hope that Motif's virtual * modifiers won't result in all eight modbits being set. */ for (i = useful_mods; i > 0; i--) { TRANSLATE(tm_context, pd, dpy, eventSeq->event.eventCode, (Modifiers)i, modifiers_return, keysym_return); if (keysym_return == (typeMatch->eventCode & typeMatch->eventCodeMask)) { tm_context->event = eventSeq->xev; tm_context->serial = eventSeq->xev->xany.serial; tm_context->keysym = keysym_return; tm_context->modifiers = (Modifiers)i; return TRUE; } } break; default: /* (2..7) */ { /* * Only translate using combinations of the useful modifiers. * to minimize the chance of invalidating the cache. */ static char pows[] = { 0, 1, 3, 7, 15, 31, 63, 127 }; Modifiers tmod, mod_masks[8]; int j; for (tmod = 1, i = 0; tmod <= (Mod5Mask<<1); tmod <<= 1) if (tmod & useful_mods) mod_masks[i++] = tmod; for (j = (int) pows[num_modbits]; j > 0; j--) { tmod = 0; for (i = 0; i < num_modbits; i++) if (j & (1<event.eventCode, tmod, modifiers_return, keysym_return); if (keysym_return == (typeMatch->eventCode & typeMatch->eventCodeMask)) { tm_context->event = eventSeq->xev; tm_context->serial = eventSeq->xev->xany.serial; tm_context->keysym = keysym_return; tm_context->modifiers = (Modifiers)i; return TRUE; } } } break; } /* switch (num_modbits) */ } return FALSE; } void XtConvertCase( Display *dpy, KeySym keysym, KeySym *lower_return, KeySym *upper_return) { XtPerDisplay pd; CaseConverterPtr ptr; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); *lower_return = *upper_return = keysym; for (ptr=pd->case_cvt; ptr; ptr = ptr->next) if (ptr->start <= keysym && keysym <= ptr->stop) { (*ptr->proc)(dpy, keysym, lower_return, upper_return); return; } XConvertCase(keysym, lower_return, upper_return); UNLOCK_APP(app); } Boolean _XtMatchUsingStandardMods ( TMTypeMatch typeMatch, TMModifierMatch modMatch, TMEventPtr eventSeq) { Modifiers modifiers_return; KeySym keysym_return; Modifiers computed= 0; Modifiers computedMask = 0; Boolean resolved = TRUE; Display *dpy = eventSeq->xev->xany.display; XtPerDisplay pd = _XtGetPerDisplay(dpy); TMKeyContext tm_context = pd->tm_context; Modifiers translateModifiers; /* To maximize cache utilization, we mask off nonstandard modifiers before cache lookup. For a given key translator, standard modifiers are constant per KeyCode. If a key translator uses no standard modifiers this implementation will never reference the cache. */ modifiers_return = MOD_RETURN(tm_context, eventSeq->event.eventCode); if (!modifiers_return) { XtTranslateKeycode(dpy, (KeyCode)eventSeq->event.eventCode, eventSeq->event.modifiers, &modifiers_return, &keysym_return); translateModifiers = eventSeq->event.modifiers & modifiers_return; UPDATE_CACHE(tm_context, pd, eventSeq->event.eventCode, translateModifiers, modifiers_return, keysym_return); } else { translateModifiers = eventSeq->event.modifiers & modifiers_return; TRANSLATE(tm_context, pd, dpy, (KeyCode)eventSeq->event.eventCode, translateModifiers, modifiers_return, keysym_return); } if ((typeMatch->eventCode & typeMatch->eventCodeMask) == (keysym_return & typeMatch->eventCodeMask)) { if (modMatch->lateModifiers != NULL) resolved = _XtComputeLateBindings(dpy, modMatch->lateModifiers, &computed, &computedMask); if (!resolved) return FALSE; computed |= modMatch->modifiers; computedMask |= modMatch->modifierMask; if ((computed & computedMask) == (eventSeq->event.modifiers & ~modifiers_return & computedMask)) { tm_context->event = eventSeq->xev; tm_context->serial = eventSeq->xev->xany.serial; tm_context->keysym = keysym_return; tm_context->modifiers = translateModifiers; return TRUE; } } return FALSE; } void _XtBuildKeysymTables( Display *dpy, register XtPerDisplay pd) { ModToKeysymTable *table; int maxCount,i,j,k,tempCount,idx; KeySym keysym,tempKeysym; XModifierKeymap* modKeymap; KeyCode keycode; #define KeysymTableSize 16 FLUSHKEYCACHE(pd->tm_context); if (pd->keysyms) XFree( (char *)pd->keysyms ); pd->keysyms_serial = NextRequest(dpy); pd->keysyms = XGetKeyboardMapping(dpy, pd->min_keycode, pd->max_keycode-pd->min_keycode+1, &pd->keysyms_per_keycode); if (pd->modKeysyms) XtFree((char *)pd->modKeysyms); if (pd->modsToKeysyms) XtFree((char *)pd->modsToKeysyms); pd->modKeysyms = (KeySym*)__XtMalloc((Cardinal)KeysymTableSize*sizeof(KeySym)); maxCount = KeysymTableSize; tempCount = 0; table = (ModToKeysymTable*)__XtMalloc((Cardinal)8*sizeof(ModToKeysymTable)); pd->modsToKeysyms = table; table[0].mask = ShiftMask; table[1].mask = LockMask; table[2].mask = ControlMask; table[3].mask = Mod1Mask; table[4].mask = Mod2Mask; table[5].mask = Mod3Mask; table[6].mask = Mod4Mask; table[7].mask = Mod5Mask; tempKeysym = 0; modKeymap = XGetModifierMapping(dpy); for (i=0;i<32;i++) pd->isModifier[i] = 0; pd->mode_switch = 0; pd->num_lock = 0; for (i=0;i<8;i++) { table[i].idx = tempCount; table[i].count = 0; for (j=0;jmax_keypermod;j++) { keycode = modKeymap->modifiermap[i*modKeymap->max_keypermod+j]; if (keycode != 0) { pd->isModifier[keycode>>3] |= 1 << (keycode & 7); for (k=0; kkeysyms_per_keycode;k++) { idx = ((keycode-pd->min_keycode)* pd->keysyms_per_keycode)+k; keysym = pd->keysyms[idx]; if ((keysym == XK_Mode_switch) && (i > 2)) pd->mode_switch |= 1 << i; if ((keysym == XK_Num_Lock) && (i > 2)) pd->num_lock |= 1 << i; if (keysym != 0 && keysym != tempKeysym ){ if (tempCount==maxCount) { maxCount += KeysymTableSize; pd->modKeysyms = (KeySym*)XtRealloc( (char*)pd->modKeysyms, (unsigned) (maxCount*sizeof(KeySym)) ); } pd->modKeysyms[tempCount++] = keysym; table[i].count++; tempKeysym = keysym; } } } } } pd->lock_meaning = NoSymbol; for (i = 0; i < table[1].count; i++) { keysym = pd->modKeysyms[table[1].idx + i]; if (keysym == XK_Caps_Lock) { pd->lock_meaning = XK_Caps_Lock; break; } else if (keysym == XK_Shift_Lock) { pd->lock_meaning = XK_Shift_Lock; } } XFreeModifiermap(modKeymap); } void XtTranslateKeycode ( Display *dpy, _XtKeyCode keycode, Modifiers modifiers, Modifiers *modifiers_return, KeySym *keysym_return) { XtPerDisplay pd; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); _InitializeKeysymTables(dpy, pd); (*pd->defaultKeycodeTranslator)( dpy,keycode,modifiers,modifiers_return,keysym_return); UNLOCK_APP(app); } /* This code should match XTranslateKey (internal, sigh) in Xlib */ void XtTranslateKey( register Display *dpy, _XtKeyCode keycode, Modifiers modifiers, Modifiers *modifiers_return, KeySym *keysym_return) { #ifndef XKB XtPerDisplay pd; int per; register KeySym *syms; KeySym sym, lsym, usym; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); *modifiers_return = (ShiftMask|LockMask) | pd->mode_switch | pd->num_lock; if (((int)keycode < pd->min_keycode) || ((int)keycode > pd->max_keycode)) { *keysym_return = NoSymbol; UNLOCK_APP(app); return; } per = pd->keysyms_per_keycode; syms = &pd->keysyms[(keycode - pd->min_keycode) * per]; while ((per > 2) && (syms[per - 1] == NoSymbol)) per--; if ((per > 2) && (modifiers & pd->mode_switch)) { syms += 2; per -= 2; } if ((modifiers & pd->num_lock) && (per > 1 && (IsKeypadKey(syms[1]) || IsPrivateKeypadKey(syms[1])))) { if ((modifiers & ShiftMask) || ((modifiers & LockMask) && (pd->lock_meaning == XK_Shift_Lock))) *keysym_return = syms[0]; else *keysym_return = syms[1]; } else if (!(modifiers & ShiftMask) && (!(modifiers & LockMask) || (pd->lock_meaning == NoSymbol))) { if ((per == 1) || (syms[1] == NoSymbol)) XtConvertCase(dpy, syms[0], keysym_return, &usym); else *keysym_return = syms[0]; } else if (!(modifiers & LockMask) || (pd->lock_meaning != XK_Caps_Lock)) { if ((per == 1) || ((usym = syms[1]) == NoSymbol)) XtConvertCase(dpy, syms[0], &lsym, &usym); *keysym_return = usym; } else { if ((per == 1) || ((sym = syms[1]) == NoSymbol)) sym = syms[0]; XtConvertCase(dpy, sym, &lsym, &usym); if (!(modifiers & ShiftMask) && (sym != syms[0]) && ((sym != usym) || (lsym == usym))) XtConvertCase(dpy, syms[0], &lsym, &usym); *keysym_return = usym; } if (*keysym_return == XK_VoidSymbol) *keysym_return = NoSymbol; UNLOCK_APP(app); #else XkbLookupKeySym(dpy, keycode, modifiers, modifiers_return, keysym_return); #endif } void XtSetKeyTranslator( Display *dpy, XtKeyProc translator) { XtPerDisplay pd; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); pd->defaultKeycodeTranslator = translator; FLUSHKEYCACHE(pd->tm_context); /* XXX should now redo grabs */ UNLOCK_APP(app); } void XtRegisterCaseConverter( Display *dpy, XtCaseProc proc, KeySym start, KeySym stop) { XtPerDisplay pd; CaseConverterPtr ptr, prev; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); ptr = (CaseConverterPtr) __XtMalloc(sizeof(CaseConverterRec)); ptr->start = start; ptr->stop = stop; ptr->proc = proc; ptr->next = pd->case_cvt; pd->case_cvt = ptr; /* Remove obsolete case converters from the list */ prev = ptr; for (ptr=ptr->next; ptr; ptr=prev->next) { if (start <= ptr->start && stop >= ptr->stop) { prev->next = ptr->next; XtFree((char *)ptr); } else prev = ptr; } FLUSHKEYCACHE(pd->tm_context); /* XXX should now redo grabs */ UNLOCK_APP(app); } KeySym *XtGetKeysymTable( Display *dpy, KeyCode *min_keycode_return, int *keysyms_per_keycode_return) { XtPerDisplay pd; KeySym* retval; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); _InitializeKeysymTables(dpy, pd); *min_keycode_return = pd->min_keycode; /* %%% */ *keysyms_per_keycode_return = pd->keysyms_per_keycode; retval = pd->keysyms; UNLOCK_APP(app); return retval; } void XtKeysymToKeycodeList( Display *dpy, KeySym keysym, KeyCode **keycodes_return, Cardinal *keycount_return) { XtPerDisplay pd; unsigned keycode; int per, match; register KeySym *syms; register int i, j; KeySym lsym, usym; unsigned maxcodes = 0; unsigned ncodes = 0; KeyCode *keycodes, *codeP = NULL; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); _InitializeKeysymTables(dpy, pd); keycodes = NULL; per = pd->keysyms_per_keycode; for (syms = pd->keysyms, keycode = (unsigned) pd->min_keycode; (int)keycode <= pd->max_keycode; syms += per, keycode++) { match = 0; for (j = 0; j < per; j++) { if (syms[j] == keysym) { match = 1; break; } } if (!match) for (i = 1; i < 5; i += 2) { if ((per == i) || ((per > i) && (syms[i] == NoSymbol))) { XtConvertCase(dpy, syms[i-1], &lsym, &usym); if ((lsym == keysym) || (usym == keysym)) { match = 1; break; } } } if (match) { if (ncodes == maxcodes) { KeyCode *old = keycodes; maxcodes += KEYCODE_ARRAY_SIZE; keycodes = (KeyCode*)__XtMalloc(maxcodes*sizeof(KeyCode)); if (ncodes) { (void) memmove((char *)keycodes, (char *)old, ncodes*sizeof(KeyCode) ); XtFree((char *)old); } codeP = &keycodes[ncodes]; } *codeP++ = (KeyCode) keycode; ncodes++; } } *keycodes_return = keycodes; *keycount_return = ncodes; UNLOCK_APP(app); } >xany.display; XtPerDisplay pd = _XtGetPerDisplay(dpy); TMKeyContext tm_context = pd->tm_context; Modifiers translateModifiers; /* To maximize cache utilization, we mask off nonstandard modifiers before cache lookup. For a given kelibXt-1.1.5/src/Selection.c000064401431060000012000002020351252061032400157360ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "SelectionI.h" #include #include void _XtSetDefaultSelectionTimeout( unsigned long *timeout) { *timeout = 5000; /* default to 5 seconds */ } void XtSetSelectionTimeout( unsigned long timeout) { XtAppSetSelectionTimeout(_XtDefaultAppContext(), timeout); } void XtAppSetSelectionTimeout( XtAppContext app, unsigned long timeout) { LOCK_APP(app); app->selectionTimeout = timeout; UNLOCK_APP(app); } unsigned long XtGetSelectionTimeout(void) { return XtAppGetSelectionTimeout(_XtDefaultAppContext()); } unsigned long XtAppGetSelectionTimeout( XtAppContext app) { unsigned long retval; LOCK_APP(app); retval = app->selectionTimeout; UNLOCK_APP(app); return retval; } /* General utilities */ static void HandleSelectionReplies(Widget, XtPointer, XEvent *, Boolean *); static void ReqTimedOut(XtPointer, XtIntervalId *); static void HandlePropertyGone(Widget, XtPointer, XEvent *, Boolean *); static void HandleGetIncrement(Widget, XtPointer, XEvent *, Boolean *); static void HandleIncremental(Display *, Widget, Atom, CallBackInfo, unsigned long); static XContext selectPropertyContext = 0; static XContext paramPropertyContext = 0; static XContext multipleContext = 0; /* Multiple utilities */ static void AddSelectionRequests(Widget, Atom, int, Atom *, XtSelectionCallbackProc *, int, XtPointer *, Boolean *, Atom *); static Boolean IsGatheringRequest(Widget, Atom); #define PREALLOCED 32 /* Parameter utilities */ static void AddParamInfo(Widget, Atom, Atom); static void RemoveParamInfo(Widget, Atom); static Atom GetParamInfo(Widget, Atom); static int StorageSize[3] = {1, sizeof(short), sizeof(long)}; #define BYTELENGTH(length, format) ((length) * StorageSize[(format)>>4]) #define NUMELEM(bytelength, format) ((bytelength) / StorageSize[(format)>>4]) /* Xlib and Xt are permitted to have different memory allocators, and in the * XtSelectionCallbackProc the client is instructed to free the selection * value with XtFree, so the selection value received from XGetWindowProperty * should be copied to memory allocated through Xt. But copying is * undesirable since the selection value may be large, and, under normal * library configuration copying is unnecessary. */ #ifdef XTTRACEMEMORY #define XT_COPY_SELECTION 1 #endif /*ARGSUSED*/ static void FreePropList( Widget w, /* unused */ XtPointer closure, XtPointer callData) /* unused */ { PropList sarray = (PropList)closure; LOCK_PROCESS; XDeleteContext(sarray->dpy, DefaultRootWindow(sarray->dpy), selectPropertyContext); UNLOCK_PROCESS; XtFree((char*)sarray->list); XtFree((char*)closure); } static PropList GetPropList( Display *dpy) { PropList sarray; Atom atoms[4]; static char* names[] = { "INCR", "MULTIPLE", "TIMESTAMP", "_XT_SELECTION_0" }; LOCK_PROCESS; if (selectPropertyContext == 0) selectPropertyContext = XUniqueContext(); if (XFindContext(dpy, DefaultRootWindow(dpy), selectPropertyContext, (XPointer *)&sarray)) { XtPerDisplay pd = _XtGetPerDisplay(dpy); sarray = (PropList) __XtMalloc((unsigned) sizeof(PropListRec)); sarray->dpy = dpy; XInternAtoms(dpy, names, 4, FALSE, atoms); sarray->incr_atom = atoms[0]; sarray->indirect_atom = atoms[1]; sarray->timestamp_atom = atoms[2]; sarray->propCount = 1; sarray->list = (SelectionProp)__XtMalloc((unsigned) sizeof(SelectionPropRec)); sarray->list[0].prop = atoms[3]; sarray->list[0].avail = TRUE; (void) XSaveContext(dpy, DefaultRootWindow(dpy), selectPropertyContext, (char *) sarray); _XtAddCallback( &pd->destroy_callbacks, FreePropList, (XtPointer)sarray ); } UNLOCK_PROCESS; return sarray; } static Atom GetSelectionProperty( Display *dpy) { SelectionProp p; int propCount; char propname[80]; PropList sarray = GetPropList(dpy); for (p = sarray->list, propCount=sarray->propCount; propCount; p++, propCount--) { if (p->avail) { p->avail = FALSE; return(p->prop); } } propCount = sarray->propCount++; sarray->list = (SelectionProp) XtRealloc((XtPointer)sarray->list, (unsigned)(sarray->propCount*sizeof(SelectionPropRec))); (void) snprintf(propname, sizeof(propname), "_XT_SELECTION_%d", propCount); sarray->list[propCount].prop = XInternAtom(dpy, propname, FALSE); sarray->list[propCount].avail = FALSE; return(sarray->list[propCount].prop); } static void FreeSelectionProperty( Display *dpy, Atom prop) { SelectionProp p; int propCount; PropList sarray; if (prop == None) return; LOCK_PROCESS; if (XFindContext(dpy, DefaultRootWindow(dpy), selectPropertyContext, (XPointer *)&sarray)) XtAppErrorMsg(XtDisplayToApplicationContext(dpy), "noSelectionProperties", "freeSelectionProperty", XtCXtToolkitError, "internal error: no selection property context for display", (String *)NULL, (Cardinal *)NULL ); UNLOCK_PROCESS; for (p = sarray->list, propCount=sarray->propCount; propCount; p++, propCount--) if (p->prop == prop) { p->avail = TRUE; return; } } static void FreeInfo( CallBackInfo info) { XtFree((char*)info->incremental); XtFree((char*)info->callbacks); XtFree((char*)info->req_closure); XtFree((char*)info->target); XtFree((char*)info); } static CallBackInfo MakeInfo( Select ctx, XtSelectionCallbackProc *callbacks, XtPointer *closures, int count, Widget widget, Time time, Boolean *incremental, Atom *properties) { CallBackInfo info = XtNew(CallBackInfoRec); info->ctx = ctx; info->callbacks = (XtSelectionCallbackProc *) __XtMalloc((unsigned) (count * sizeof(XtSelectionCallbackProc))); (void) memmove((char*)info->callbacks, (char*)callbacks, count * sizeof(XtSelectionCallbackProc)); info->req_closure = (XtPointer*)__XtMalloc((unsigned) (count * sizeof(XtPointer))); (void) memmove((char*)info->req_closure, (char*)closures, count * sizeof(XtPointer)); if (count == 1 && properties != NULL && properties[0] != None) info->property = properties[0]; else { info->property = GetSelectionProperty(XtDisplay(widget)); XDeleteProperty(XtDisplay(widget), XtWindow(widget), info->property); } info->proc = HandleSelectionReplies; info->widget = widget; info->time = time; info->incremental = (Boolean*) __XtMalloc(count * sizeof(Boolean)); (void) memmove((char*)info->incremental, (char*) incremental, count * sizeof(Boolean)); info->current = 0; info->value = NULL; return (info); } static void RequestSelectionValue( CallBackInfo info, Atom selection, Atom target) { #ifndef DEBUG_WO_TIMERS XtAppContext app = XtWidgetToApplicationContext(info->widget); info->timeout = XtAppAddTimeOut(app, app->selectionTimeout, ReqTimedOut, (XtPointer)info); #endif XtAddEventHandler(info->widget, (EventMask)0, TRUE, HandleSelectionReplies, (XtPointer)info); XConvertSelection(info->ctx->dpy, selection, target, info->property, XtWindow(info->widget), info->time); } static XContext selectContext = 0; static Select NewContext( Display *dpy, Atom selection) { /* assert(selectContext != 0) */ Select ctx = XtNew(SelectRec); ctx->dpy = dpy; ctx->selection = selection; ctx->widget = NULL; ctx->prop_list = GetPropList(dpy); ctx->ref_count = 0; ctx->free_when_done = FALSE; ctx->was_disowned = FALSE; LOCK_PROCESS; (void)XSaveContext(dpy, (Window)selection, selectContext, (char *)ctx); UNLOCK_PROCESS; return ctx; } static Select FindCtx( Display *dpy, Atom selection) { Select ctx; LOCK_PROCESS; if (selectContext == 0) selectContext = XUniqueContext(); if (XFindContext(dpy, (Window)selection, selectContext, (XPointer *)&ctx)) ctx = NewContext(dpy, selection); UNLOCK_PROCESS; return ctx; } /*ARGSUSED*/ static void WidgetDestroyed( Widget widget, XtPointer closure, XtPointer data) { Select ctx = (Select) closure; if (ctx->widget == widget) { if (ctx->free_when_done) XtFree((char*)ctx); else ctx->widget = NULL; } } /* Selection Owner code */ static void HandleSelectionEvents(Widget, XtPointer, XEvent *, Boolean *); static Boolean LoseSelection( Select ctx, Widget widget, Atom selection, Time time) { if ((ctx->widget == widget) && (ctx->selection == selection) && /* paranoia */ !ctx->was_disowned && ((time == CurrentTime) || (time >= ctx->time))) { XtRemoveEventHandler(widget, (EventMask)0, TRUE, HandleSelectionEvents, (XtPointer)ctx); XtRemoveCallback(widget, XtNdestroyCallback, WidgetDestroyed, (XtPointer)ctx); ctx->was_disowned = TRUE; /* widget officially loses ownership */ /* now inform widget */ if (ctx->loses) { if (ctx->incremental) (*(XtLoseSelectionIncrProc)ctx->loses) (widget, &ctx->selection, ctx->owner_closure); else (*ctx->loses)(widget, &ctx->selection); } return(TRUE); } else return(FALSE); } static XContext selectWindowContext = 0; /* %%% Xlib.h should make this public! */ typedef int (*xErrorHandler)(Display*, XErrorEvent*); static xErrorHandler oldErrorHandler = NULL; static unsigned long firstProtectRequest; static Window errorWindow; static int LocalErrorHandler ( Display *dpy, XErrorEvent *error) { int retval; /* If BadWindow error on selection requestor, nothing to do but let * the transfer timeout. Otherwise, invoke saved error handler. */ LOCK_PROCESS; if (error->error_code == BadWindow && error->resourceid == errorWindow && error->serial >= firstProtectRequest) { UNLOCK_PROCESS; return 0; } if (oldErrorHandler == NULL) { UNLOCK_PROCESS; return 0; /* should never happen */ } retval = (*oldErrorHandler)(dpy, error); UNLOCK_PROCESS; return retval; } static void StartProtectedSection( Display *dpy, Window window) { /* protect ourselves against request window being destroyed * before completion of transfer */ LOCK_PROCESS; oldErrorHandler = XSetErrorHandler(LocalErrorHandler); firstProtectRequest = NextRequest(dpy); errorWindow = window; UNLOCK_PROCESS; } static void EndProtectedSection( Display *dpy) { /* flush any generated errors on requestor and * restore original error handler */ XSync(dpy, False); LOCK_PROCESS; XSetErrorHandler(oldErrorHandler); oldErrorHandler = NULL; UNLOCK_PROCESS; } static void AddHandler( Request req, EventMask mask, XtEventHandler proc, XtPointer closure) { Display *dpy = req->ctx->dpy; Window window = req->requestor; Widget widget = XtWindowToWidget(dpy, window); if (widget != NULL) req->widget = widget; else widget = req->widget; if (XtWindow(widget) == window) XtAddEventHandler(widget, mask, False, proc, closure); else { RequestWindowRec *requestWindowRec; LOCK_PROCESS; if (selectWindowContext == 0) selectWindowContext = XUniqueContext(); if (XFindContext(dpy, window, selectWindowContext, (XPointer *)&requestWindowRec)) { requestWindowRec = XtNew(RequestWindowRec); requestWindowRec->active_transfer_count = 0; (void)XSaveContext(dpy, window, selectWindowContext, (char *)requestWindowRec); } UNLOCK_PROCESS; if (requestWindowRec->active_transfer_count++ == 0) { XtRegisterDrawable(dpy, window, widget); XSelectInput(dpy, window, mask); } XtAddRawEventHandler(widget, mask, FALSE, proc, closure); } } static void RemoveHandler( Request req, EventMask mask, XtEventHandler proc, XtPointer closure) { Display *dpy = req->ctx->dpy; Window window = req->requestor; Widget widget = req->widget; if ((XtWindowToWidget(dpy, window) == widget) && (XtWindow(widget) != window)) { /* we had to hang this window onto our widget; take it off */ RequestWindowRec* requestWindowRec; XtRemoveRawEventHandler(widget, mask, TRUE, proc, closure); LOCK_PROCESS; (void)XFindContext(dpy, window, selectWindowContext, (XPointer *)&requestWindowRec); UNLOCK_PROCESS; if (--requestWindowRec->active_transfer_count == 0) { XtUnregisterDrawable(dpy, window); StartProtectedSection(dpy, window); XSelectInput(dpy, window, 0L); EndProtectedSection(dpy); LOCK_PROCESS; (void)XDeleteContext(dpy, window, selectWindowContext); UNLOCK_PROCESS; XtFree((char*)requestWindowRec); } } else { XtRemoveEventHandler(widget, mask, TRUE, proc, closure); } } /* ARGSUSED */ static void OwnerTimedOut( XtPointer closure, XtIntervalId *id) { Request req = (Request)closure; Select ctx = req->ctx; if (ctx->incremental && (ctx->owner_cancel != NULL)) { (*ctx->owner_cancel)(ctx->widget, &ctx->selection, &req->target, (XtRequestId*)&req, ctx->owner_closure); } else { if (ctx->notify == NULL) XtFree((char*)req->value); else { /* the requestor hasn't deleted the property, but * the owner needs to free the value. */ if (ctx->incremental) (*(XtSelectionDoneIncrProc)ctx->notify) (ctx->widget, &ctx->selection, &req->target, (XtRequestId*)&req, ctx->owner_closure); else (*ctx->notify)(ctx->widget, &ctx->selection, &req->target); } } RemoveHandler(req, (EventMask)PropertyChangeMask, HandlePropertyGone, closure); XtFree((char*)req); if (--ctx->ref_count == 0 && ctx->free_when_done) XtFree((char*)ctx); } static void SendIncrement( Request incr) { Display *dpy = incr->ctx->dpy; unsigned long incrSize = MAX_SELECTION_INCR(dpy); if (incrSize > incr->bytelength - incr->offset) incrSize = incr->bytelength - incr->offset; StartProtectedSection(dpy, incr->requestor); XChangeProperty(dpy, incr->requestor, incr->property, incr->type, incr->format, PropModeReplace, (unsigned char *)incr->value + incr->offset, NUMELEM((int)incrSize, incr->format)); EndProtectedSection(dpy); incr->offset += incrSize; } static void AllSent( Request req) { Select ctx = req->ctx; StartProtectedSection(ctx->dpy, req->requestor); XChangeProperty(ctx->dpy, req->requestor, req->property, req->type, req->format, PropModeReplace, (unsigned char *) NULL, 0); EndProtectedSection(ctx->dpy); req->allSent = TRUE; if (ctx->notify == NULL) XtFree((char*)req->value); } /*ARGSUSED*/ static void HandlePropertyGone( Widget widget, XtPointer closure, XEvent *ev, Boolean *cont) { XPropertyEvent *event = (XPropertyEvent *) ev; Request req = (Request)closure; Select ctx = req->ctx; if ((event->type != PropertyNotify) || (event->state != PropertyDelete) || (event->atom != req->property) || (event->window != req->requestor)) return; #ifndef DEBUG_WO_TIMERS XtRemoveTimeOut(req->timeout); #endif if (req->allSent) { if (ctx->notify) { if (ctx->incremental) { (*(XtSelectionDoneIncrProc)ctx->notify) (ctx->widget, &ctx->selection, &req->target, (XtRequestId*)&req, ctx->owner_closure); } else (*ctx->notify)(ctx->widget, &ctx->selection, &req->target); } RemoveHandler(req, (EventMask)PropertyChangeMask, HandlePropertyGone, closure); XtFree((char*)req); if (--ctx->ref_count == 0 && ctx->free_when_done) XtFree((char*)ctx); } else { /* is this part of an incremental transfer? */ if (ctx->incremental) { if (req->bytelength == 0) AllSent(req); else { unsigned long size = MAX_SELECTION_INCR(ctx->dpy); SendIncrement(req); (*(XtConvertSelectionIncrProc)ctx->convert) (ctx->widget, &ctx->selection, &req->target, &req->type, &req->value, &req->bytelength, &req->format, &size, ctx->owner_closure, (XtPointer*)&req); if (req->bytelength) req->bytelength = BYTELENGTH(req->bytelength, req->format); req->offset = 0; } } else { if (req->offset < req->bytelength) SendIncrement(req); else AllSent(req); } #ifndef DEBUG_WO_TIMERS { XtAppContext app = XtWidgetToApplicationContext(req->widget); req->timeout = XtAppAddTimeOut(app, app->selectionTimeout, OwnerTimedOut, (XtPointer)req); } #endif } } static void PrepareIncremental( Request req, Widget widget, Window window, Atom property, Atom target, Atom targetType, XtPointer value, unsigned long length, int format) { req->type = targetType; req->value = value; req->bytelength = BYTELENGTH(length,format); req->format = format; req->offset = 0; req->target = target; req->widget = widget; req->allSent = FALSE; #ifndef DEBUG_WO_TIMERS { XtAppContext app = XtWidgetToApplicationContext(widget); req->timeout = XtAppAddTimeOut(app, app->selectionTimeout, OwnerTimedOut, (XtPointer)req); } #endif AddHandler(req, (EventMask)PropertyChangeMask, HandlePropertyGone, (XtPointer)req); /* now send client INCR property */ XChangeProperty(req->ctx->dpy, window, req->property, req->ctx->prop_list->incr_atom, 32, PropModeReplace, (unsigned char *)&req->bytelength, 1); } static Boolean GetConversion( Select ctx, /* logical owner */ XSelectionRequestEvent* event, Atom target, Atom property, /* requestor's property */ Widget widget) /* physical owner (receives events) */ { XtPointer value = NULL; unsigned long length; int format; Atom targetType; Request req = XtNew(RequestRec); Boolean timestamp_target = (target == ctx->prop_list->timestamp_atom); req->ctx = ctx; req->event = *event; req->property = property; req->requestor = event->requestor; if (timestamp_target) { value = __XtMalloc(sizeof(long)); *(long*)value = ctx->time; targetType = XA_INTEGER; length = 1; format = 32; } else { ctx->ref_count++; if (ctx->incremental == TRUE) { unsigned long size = MAX_SELECTION_INCR(ctx->dpy); if ((*(XtConvertSelectionIncrProc)ctx->convert) (ctx->widget, &event->selection, &target, &targetType, &value, &length, &format, &size, ctx->owner_closure, (XtRequestId*)&req) == FALSE) { XtFree((char*)req); ctx->ref_count--; return(FALSE); } StartProtectedSection(ctx->dpy, event->requestor); PrepareIncremental(req, widget, event->requestor, property, target, targetType, value, length, format); return(TRUE); } ctx->req = req; if ((*ctx->convert)(ctx->widget, &event->selection, &target, &targetType, &value, &length, &format) == FALSE) { XtFree((char*)req); ctx->req = NULL; ctx->ref_count--; return(FALSE); } ctx->req = NULL; } StartProtectedSection(ctx->dpy, event->requestor); if (BYTELENGTH(length,format) <= (unsigned long) MAX_SELECTION_INCR(ctx->dpy)) { if (! timestamp_target) { if (ctx->notify != NULL) { req->target = target; req->widget = widget; req->allSent = TRUE; #ifndef DEBUG_WO_TIMERS { XtAppContext app = XtWidgetToApplicationContext(req->widget); req->timeout = XtAppAddTimeOut(app, app->selectionTimeout, OwnerTimedOut, (XtPointer)req); } #endif AddHandler(req, (EventMask)PropertyChangeMask, HandlePropertyGone, (XtPointer)req); } else ctx->ref_count--; } XChangeProperty(ctx->dpy, event->requestor, property, targetType, format, PropModeReplace, (unsigned char *)value, (int)length); /* free storage for client if no notify proc */ if (timestamp_target || ctx->notify == NULL) { XtFree((char*)value); XtFree((char*)req); } } else { PrepareIncremental(req, widget, event->requestor, property, target, targetType, value, length, format); } return(TRUE); } /*ARGSUSED*/ static void HandleSelectionEvents( Widget widget, XtPointer closure, XEvent *event, Boolean *cont) { Select ctx; XSelectionEvent ev; Atom target; int count; Boolean writeback = FALSE; ctx = (Select) closure; switch (event->type) { case SelectionClear: /* if this event is not for the selection we registered for, * don't do anything */ if (ctx->selection != event->xselectionclear.selection || ctx->serial > event->xselectionclear.serial) break; (void) LoseSelection(ctx, widget, event->xselectionclear.selection, event->xselectionclear.time); break; case SelectionRequest: /* if this event is not for the selection we registered for, * don't do anything */ if (ctx->selection != event->xselectionrequest.selection) break; ev.type = SelectionNotify; ev.display = event->xselectionrequest.display; ev.requestor = event->xselectionrequest.requestor; ev.selection = event->xselectionrequest.selection; ev.time = event->xselectionrequest.time; ev.target = event->xselectionrequest.target; if (event->xselectionrequest.property == None) /* obsolete requestor */ event->xselectionrequest.property = event->xselectionrequest.target; if (ctx->widget != widget || ctx->was_disowned || ((event->xselectionrequest.time != CurrentTime) && (event->xselectionrequest.time < ctx->time))) { ev.property = None; StartProtectedSection(ev.display, ev.requestor); } else { if (ev.target == ctx->prop_list->indirect_atom) { IndirectPair *p; int format; unsigned long bytesafter, length; unsigned char *value = NULL; ev.property = event->xselectionrequest.property; StartProtectedSection(ev.display, ev.requestor); if (XGetWindowProperty(ev.display, ev.requestor, event->xselectionrequest.property, 0L, 1000000, False,(Atom)AnyPropertyType, &target, &format, &length, &bytesafter, &value) == Success) count = BYTELENGTH(length, format) / sizeof(IndirectPair); else count = 0; for (p = (IndirectPair *)value; count; p++, count--) { EndProtectedSection(ctx->dpy); if (!GetConversion(ctx, (XSelectionRequestEvent*)event, p->target, p->property, widget)) { p->target = None; writeback = TRUE; StartProtectedSection(ctx->dpy, ev.requestor); } } if (writeback) XChangeProperty(ev.display, ev.requestor, event->xselectionrequest.property, target, format, PropModeReplace, value, (int)length); XFree((char *)value); } else /* not multiple */ { if (GetConversion(ctx, (XSelectionRequestEvent*)event, event->xselectionrequest.target, event->xselectionrequest.property, widget)) ev.property = event->xselectionrequest.property; else { ev.property = None; StartProtectedSection(ctx->dpy, ev.requestor); } } } (void) XSendEvent(ctx->dpy, ev.requestor, False, (unsigned long)NULL, (XEvent *) &ev); EndProtectedSection(ctx->dpy); break; } } static Boolean OwnSelection( Widget widget, Atom selection, Time time, XtConvertSelectionProc convert, XtLoseSelectionProc lose, XtSelectionDoneProc notify, XtCancelConvertSelectionProc cancel, XtPointer closure, Boolean incremental) { Select ctx; Select oldctx = NULL; if (!XtIsRealized(widget)) return False; ctx = FindCtx(XtDisplay(widget), selection); if (ctx->widget != widget || ctx->time != time || ctx->ref_count || ctx->was_disowned) { Boolean replacement = FALSE; Window window = XtWindow(widget); unsigned long serial = XNextRequest(ctx->dpy); XSetSelectionOwner(ctx->dpy, selection, window, time); if (XGetSelectionOwner(ctx->dpy, selection) != window) return FALSE; if (ctx->ref_count) { /* exchange is in-progress */ #ifdef DEBUG_ACTIVE printf( "Active exchange for widget \"%s\"; selection=0x%lx, ref_count=%d\n", XtName(widget), (long)selection, ctx->ref_count ); #endif if (ctx->widget != widget || ctx->convert != convert || ctx->loses != lose || ctx->notify != notify || ctx->owner_cancel != cancel || ctx->incremental != incremental || ctx->owner_closure != closure) { if (ctx->widget == widget) { XtRemoveEventHandler(widget, (EventMask)0, TRUE, HandleSelectionEvents, (XtPointer)ctx); XtRemoveCallback(widget, XtNdestroyCallback, WidgetDestroyed, (XtPointer)ctx); replacement = TRUE; } else if (!ctx->was_disowned) { oldctx = ctx; } ctx->free_when_done = TRUE; ctx = NewContext(XtDisplay(widget), selection); } else if (!ctx->was_disowned) { /* current owner is new owner */ ctx->time = time; return TRUE; } } if (ctx->widget != widget || ctx->was_disowned || replacement) { if (ctx->widget && !ctx->was_disowned && !replacement) { oldctx = ctx; oldctx->free_when_done = TRUE; ctx = NewContext(XtDisplay(widget), selection); } XtAddEventHandler(widget, (EventMask)0, TRUE, HandleSelectionEvents, (XtPointer)ctx); XtAddCallback(widget, XtNdestroyCallback, WidgetDestroyed, (XtPointer)ctx); } ctx->widget = widget; /* Selection offically changes hands. */ ctx->time = time; ctx->serial = serial; } ctx->convert = convert; ctx->loses = lose; ctx->notify = notify; ctx->owner_cancel = cancel; ctx->incremental = incremental; ctx->owner_closure = closure; ctx->was_disowned = FALSE; /* Defer calling the previous selection owner's lose selection procedure * until the new selection is established, to allow the previous * selection owner to ask for the new selection to be converted in * the lose selection procedure. The context pointer is the closure * of the event handler and the destroy callback, so the old context * pointer and the record contents must be preserved for LoseSelection. */ if (oldctx) { (void) LoseSelection(oldctx, oldctx->widget, selection, oldctx->time); if (!oldctx->ref_count && oldctx->free_when_done) XtFree((char*)oldctx); } return TRUE; } Boolean XtOwnSelection( Widget widget, Atom selection, Time time, XtConvertSelectionProc convert, XtLoseSelectionProc lose, XtSelectionDoneProc notify) { Boolean retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); retval = OwnSelection(widget, selection, time, convert, lose, notify, (XtCancelConvertSelectionProc)NULL, (XtPointer)NULL, FALSE); UNLOCK_APP(app); return retval; } Boolean XtOwnSelectionIncremental( Widget widget, Atom selection, Time time, XtConvertSelectionIncrProc convert, XtLoseSelectionIncrProc lose, XtSelectionDoneIncrProc notify, XtCancelConvertSelectionProc cancel, XtPointer closure) { Boolean retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); retval = OwnSelection(widget, selection, time, (XtConvertSelectionProc)convert, (XtLoseSelectionProc)lose, (XtSelectionDoneProc)notify, cancel, closure, TRUE); UNLOCK_APP(app); return retval; } void XtDisownSelection( Widget widget, Atom selection, Time time) { Select ctx; WIDGET_TO_APPCON(widget); LOCK_APP(app); ctx = FindCtx(XtDisplay(widget), selection); if (LoseSelection(ctx, widget, selection, time)) XSetSelectionOwner(XtDisplay(widget), selection, None, time); UNLOCK_APP(app); } /* Selection Requestor code */ static Boolean IsINCRtype( CallBackInfo info, Window window, Atom prop) { unsigned long bytesafter; unsigned long length; int format; Atom type; unsigned char *value; if (prop == None) return False; if (XGetWindowProperty(XtDisplay(info->widget), window, prop, 0L, 0L, False, info->ctx->prop_list->incr_atom, &type, &format, &length, &bytesafter, &value) != Success) return False; return (type == info->ctx->prop_list->incr_atom); } /*ARGSUSED*/ static void ReqCleanup( Widget widget, XtPointer closure, XEvent *ev, Boolean *cont) { CallBackInfo info = (CallBackInfo)closure; unsigned long bytesafter, length; int format; Atom target; if (ev->type == SelectionNotify) { XSelectionEvent *event = (XSelectionEvent *) ev; if (!MATCH_SELECT(event, info)) return; /* not really for us */ XtRemoveEventHandler(widget, (EventMask)0, TRUE, ReqCleanup, (XtPointer) info ); if (IsINCRtype(info, XtWindow(widget), event->property)) { info->proc = HandleGetIncrement; XtAddEventHandler(info->widget, (EventMask) PropertyChangeMask, FALSE, ReqCleanup, (XtPointer) info); } else { if (event->property != None) XDeleteProperty(event->display, XtWindow(widget), event->property); FreeSelectionProperty(XtDisplay(widget), info->property); FreeInfo(info); } } else if ((ev->type == PropertyNotify) && (ev->xproperty.state == PropertyNewValue) && (ev->xproperty.atom == info->property)) { XPropertyEvent *event = (XPropertyEvent *) ev; char *value = NULL; if (XGetWindowProperty(event->display, XtWindow(widget), event->atom, 0L, 1000000, True, AnyPropertyType, &target, &format, &length, &bytesafter, (unsigned char **) &value) == Success) { XFree(value); if (length == 0) { XtRemoveEventHandler(widget, (EventMask) PropertyChangeMask, FALSE, ReqCleanup, (XtPointer) info ); FreeSelectionProperty(XtDisplay(widget), info->property); XtFree(info->value); /* requestor never got this, so free now */ FreeInfo(info); } } } } /* ARGSUSED */ static void ReqTimedOut( XtPointer closure, XtIntervalId *id) { XtPointer value = NULL; unsigned long length = 0; int format = 8; Atom resulttype = XT_CONVERT_FAIL; CallBackInfo info = (CallBackInfo)closure; unsigned long bytesafter; unsigned long proplength; Atom type; XtPointer *c; int i; if (*info->target == info->ctx->prop_list->indirect_atom) { IndirectPair *pairs = NULL; if (XGetWindowProperty(XtDisplay(info->widget), XtWindow(info->widget), info->property, 0L, 10000000, True, AnyPropertyType, &type, &format, &proplength, &bytesafter, (unsigned char **) &pairs) == Success) { XFree(pairs); for (proplength = proplength / IndirectPairWordSize, i = 0, c = info->req_closure; proplength; proplength--, c++, i++) (*info->callbacks[i])(info->widget, *c, &info->ctx->selection, &resulttype, value, &length, &format); } } else { (*info->callbacks[0])(info->widget, *info->req_closure, &info->ctx->selection, &resulttype, value, &length, &format); } /* change event handlers for straggler events */ if (info->proc == (XtEventHandler)HandleSelectionReplies) { XtRemoveEventHandler(info->widget, (EventMask)0, TRUE, info->proc, (XtPointer) info); XtAddEventHandler(info->widget, (EventMask)0, TRUE, ReqCleanup, (XtPointer) info); } else { XtRemoveEventHandler(info->widget,(EventMask) PropertyChangeMask, FALSE, info->proc, (XtPointer) info); XtAddEventHandler(info->widget, (EventMask) PropertyChangeMask, FALSE, ReqCleanup, (XtPointer) info); } } /*ARGSUSED*/ static void HandleGetIncrement( Widget widget, XtPointer closure, XEvent *ev, Boolean *cont) { XPropertyEvent *event = (XPropertyEvent *) ev; CallBackInfo info = (CallBackInfo) closure; Select ctx = info->ctx; char *value; unsigned long bytesafter; unsigned long length; int bad; int n = info->current; if ((event->state != PropertyNewValue) || (event->atom != info->property)) return; bad = XGetWindowProperty(event->display, XtWindow(widget), event->atom, 0L, 10000000, True, AnyPropertyType, &info->type, &info->format, &length, &bytesafter, (unsigned char **) &value); if (bad) return; #ifndef DEBUG_WO_TIMERS XtRemoveTimeOut(info->timeout); #endif if (length == 0) { unsigned long u_offset = NUMELEM(info->offset, info->format); (*info->callbacks[n])(widget, *info->req_closure, &ctx->selection, &info->type, (info->offset == 0 ? value : info->value), &u_offset, &info->format); /* assert ((info->offset != 0) == (info->incremental[n]) */ if (info->offset != 0) XFree(value); XtRemoveEventHandler(widget, (EventMask) PropertyChangeMask, FALSE, HandleGetIncrement, (XtPointer) info); FreeSelectionProperty(event->display, info->property); FreeInfo(info); } else { /* add increment to collection */ if (info->incremental[n]) { #ifdef XT_COPY_SELECTION int size = BYTELENGTH(length, info->format) + 1; char *tmp = __XtMalloc((Cardinal) size); (void) memmove(tmp, value, size); XFree(value); value = tmp; #endif (*info->callbacks[n])(widget, *info->req_closure, &ctx->selection, &info->type, value, &length, &info->format); } else { int size = BYTELENGTH(length, info->format); if (info->offset + size > info->bytelength) { /* allocate enough for this and the next increment */ info->bytelength = info->offset + size * 2; info->value = XtRealloc(info->value, (Cardinal) info->bytelength); } (void) memmove(&info->value[info->offset], value, size); info->offset += size; XFree(value); } /* reset timer */ #ifndef DEBUG_WO_TIMERS { XtAppContext app = XtWidgetToApplicationContext(info->widget); info->timeout = XtAppAddTimeOut(app, app->selectionTimeout, ReqTimedOut, (XtPointer) info); } #endif } } static void HandleNone( Widget widget, XtSelectionCallbackProc callback, XtPointer closure, Atom selection) { unsigned long length = 0; int format = 8; Atom type = None; (*callback)(widget, closure, &selection, &type, NULL, &length, &format); } static long IncrPropSize( Widget widget, unsigned char* value, int format, unsigned long length) { unsigned long size; if (format == 32) { size = ((long*)value)[length-1]; /* %%% what order for longs? */ return size; } else { XtAppWarningMsg( XtWidgetToApplicationContext(widget), "badFormat","xtGetSelectionValue",XtCXtToolkitError, "Selection owner returned type INCR property with format != 32", (String*)NULL, (Cardinal*)NULL ); return 0; } } static Boolean HandleNormal( Display *dpy, Widget widget, Atom property, CallBackInfo info, XtPointer closure, Atom selection) { unsigned long bytesafter; unsigned long length; int format; Atom type; unsigned char *value = NULL; int number = info->current; if (XGetWindowProperty(dpy, XtWindow(widget), property, 0L, 10000000, False, AnyPropertyType, &type, &format, &length, &bytesafter, &value) != Success) return FALSE; if (type == info->ctx->prop_list->incr_atom) { unsigned long size = IncrPropSize(widget, value, format, length); XFree((char *)value); if (info->property != property) { /* within MULTIPLE */ CallBackInfo ninfo; ninfo = MakeInfo(info->ctx, &info->callbacks[number], &info->req_closure[number], 1, widget, info->time, &info->incremental[number], &property); ninfo->target = (Atom *) __XtMalloc((unsigned) sizeof(Atom)); *ninfo->target = info->target[number + 1]; info = ninfo; } HandleIncremental(dpy, widget, property, info, size); return FALSE; } XDeleteProperty(dpy, XtWindow(widget), property); #ifdef XT_COPY_SELECTION if (value) { /* it could have been deleted after the SelectionNotify */ int size = BYTELENGTH(length, info->format) + 1; char *tmp = __XtMalloc((Cardinal) size); (void) memmove(tmp, value, size); XFree(value); value = (unsigned char *) tmp; } #endif (*info->callbacks[number])(widget, closure, &selection, &type, (XtPointer)value, &length, &format); if (info->incremental[number]) { /* let requestor know the whole thing has been received */ value = (unsigned char*)__XtMalloc((unsigned)1); length = 0; (*info->callbacks[number])(widget, closure, &selection, &type, (XtPointer)value, &length, &format); } return TRUE; } static void HandleIncremental( Display *dpy, Widget widget, Atom property, CallBackInfo info, unsigned long size) { XtAddEventHandler(widget, (EventMask) PropertyChangeMask, FALSE, HandleGetIncrement, (XtPointer) info); /* now start the transfer */ XDeleteProperty(dpy, XtWindow(widget), property); XFlush(dpy); info->bytelength = size; if (info->incremental[info->current]) /* requestor wants incremental too */ info->value = NULL; /* so no need for buffer to assemble value */ else info->value = (char *) __XtMalloc((unsigned) info->bytelength); info->offset = 0; /* reset the timer */ info->proc = HandleGetIncrement; #ifndef DEBUG_WO_TIMERS { XtAppContext app = XtWidgetToApplicationContext(info->widget); info->timeout = XtAppAddTimeOut(app, app->selectionTimeout, ReqTimedOut, (XtPointer) info); } #endif } /*ARGSUSED*/ static void HandleSelectionReplies( Widget widget, XtPointer closure, XEvent *ev, Boolean *cont) { XSelectionEvent *event = (XSelectionEvent *) ev; Display *dpy = event->display; CallBackInfo info = (CallBackInfo) closure; Select ctx = info->ctx; unsigned long bytesafter; unsigned long length; int format; Atom type; XtPointer *c; if (event->type != SelectionNotify) return; if (!MATCH_SELECT(event, info)) return; /* not really for us */ #ifndef DEBUG_WO_TIMERS XtRemoveTimeOut(info->timeout); #endif XtRemoveEventHandler(widget, (EventMask)0, TRUE, HandleSelectionReplies, (XtPointer) info ); if (event->target == ctx->prop_list->indirect_atom) { IndirectPair *pairs = NULL, *p; if (XGetWindowProperty(dpy, XtWindow(widget), info->property, 0L, 10000000, True, AnyPropertyType, &type, &format, &length, &bytesafter, (unsigned char **) &pairs) != Success) length = 0; for (length = length / IndirectPairWordSize, p = pairs, c = info->req_closure; length; length--, p++, c++, info->current++) { if (event->property == None || format != 32 || p->target == None || /* bug compatibility */ p->property == None) { HandleNone(widget, info->callbacks[info->current], *c, event->selection); if (p->property != None) FreeSelectionProperty(XtDisplay(widget), p->property); } else { if (HandleNormal(dpy, widget, p->property, info, *c, event->selection)) { FreeSelectionProperty(XtDisplay(widget), p->property); } } } XFree((char*)pairs); FreeSelectionProperty(dpy, info->property); FreeInfo(info); } else if (event->property == None) { HandleNone(widget, info->callbacks[0], *info->req_closure, event->selection); FreeSelectionProperty(XtDisplay(widget), info->property); FreeInfo(info); } else { if (HandleNormal(dpy, widget, event->property, info, *info->req_closure, event->selection)) { FreeSelectionProperty(XtDisplay(widget), info->property); FreeInfo(info); } } } static void DoLocalTransfer( Request req, Atom selection, Atom target, Widget widget, /* The widget requesting the value. */ XtSelectionCallbackProc callback, XtPointer closure, /* the closure for the callback, not the conversion */ Boolean incremental, Atom property) { Select ctx = req->ctx; XtPointer value = NULL, temp, total = NULL; unsigned long length; int format; Atom resulttype; unsigned long totallength = 0; req->event.type = 0; req->event.target = target; req->event.property = req->property = property; req->event.requestor = req->requestor = XtWindow(widget); if (ctx->incremental) { unsigned long size = MAX_SELECTION_INCR(ctx->dpy); if (!(*(XtConvertSelectionIncrProc)ctx->convert) (ctx->widget, &selection, &target, &resulttype, &value, &length, &format, &size, ctx->owner_closure, (XtRequestId*)&req)) { HandleNone(widget, callback, closure, selection); } else { if (incremental) { Boolean allSent = FALSE; while (!allSent) { if (ctx->notify && (value != NULL)) { int bytelength = BYTELENGTH(length,format); /* both sides think they own this storage */ temp = __XtMalloc((unsigned)bytelength); (void) memmove(temp, value, bytelength); value = temp; } /* use care; older clients were never warned that * they must return a value even if length==0 */ if (value == NULL) value = __XtMalloc((unsigned)1); (*callback)(widget, closure, &selection, &resulttype, value, &length, &format); if (length) { /* should owner be notified on end-of-piece? * Spec is unclear, but non-local transfers don't. */ (*(XtConvertSelectionIncrProc)ctx->convert) (ctx->widget, &selection, &target, &resulttype, &value, &length, &format, &size, ctx->owner_closure, (XtRequestId*)&req); } else allSent = TRUE; } } else { while (length) { int bytelength = BYTELENGTH(length, format); total = XtRealloc(total, (unsigned) (totallength += bytelength)); (void) memmove((char*)total + totallength - bytelength, value, bytelength); (*(XtConvertSelectionIncrProc)ctx->convert) (ctx->widget, &selection, &target, &resulttype, &value, &length, &format, &size, ctx->owner_closure, (XtRequestId*)&req); } if (total == NULL) total = __XtMalloc(1); totallength = NUMELEM(totallength, format); (*callback)(widget, closure, &selection, &resulttype, total, &totallength, &format); } if (ctx->notify) (*(XtSelectionDoneIncrProc)ctx->notify) (ctx->widget, &selection, &target, (XtRequestId*)&req, ctx->owner_closure); else XtFree((char*)value); } } else { /* not incremental owner */ if (!(*ctx->convert)(ctx->widget, &selection, &target, &resulttype, &value, &length, &format)) { HandleNone(widget, callback, closure, selection); } else { if (ctx->notify && (value != NULL)) { int bytelength = BYTELENGTH(length,format); /* both sides think they own this storage; better copy */ temp = __XtMalloc((unsigned)bytelength); (void) memmove(temp, value, bytelength); value = temp; } if (value == NULL) value = __XtMalloc((unsigned)1); (*callback)(widget, closure, &selection, &resulttype, value, &length, &format); if (ctx->notify) (*ctx->notify)(ctx->widget, &selection, &target); } } } static void GetSelectionValue( Widget widget, Atom selection, Atom target, XtSelectionCallbackProc callback, XtPointer closure, Time time, Boolean incremental, Atom property) { Select ctx; CallBackInfo info; Atom properties[1]; properties[0] = property; ctx = FindCtx(XtDisplay(widget), selection); if (ctx->widget && !ctx->was_disowned) { RequestRec req; ctx->req = &req; req.ctx = ctx; req.event.time = time; ctx->ref_count++; DoLocalTransfer(&req, selection, target, widget, callback, closure, incremental, property); if (--ctx->ref_count == 0 && ctx->free_when_done) XtFree((char*)ctx); else ctx->req = NULL; } else { info = MakeInfo(ctx, &callback, &closure, 1, widget, time, &incremental, properties); info->target = (Atom *)__XtMalloc((unsigned) sizeof(Atom)); *(info->target) = target; RequestSelectionValue(info, selection, target); } } void XtGetSelectionValue( Widget widget, Atom selection, Atom target, XtSelectionCallbackProc callback, XtPointer closure, Time time) { Atom property; Boolean incr = False; WIDGET_TO_APPCON(widget); LOCK_APP(app); property = GetParamInfo(widget, selection); RemoveParamInfo(widget, selection); if (IsGatheringRequest(widget, selection)) { AddSelectionRequests(widget, selection, 1, &target, &callback, 1, &closure, &incr, &property); } else { GetSelectionValue(widget, selection, target, callback, closure, time, FALSE, property); } UNLOCK_APP(app); } void XtGetSelectionValueIncremental( Widget widget, Atom selection, Atom target, XtSelectionCallbackProc callback, XtPointer closure, Time time) { Atom property; Boolean incr = TRUE; WIDGET_TO_APPCON(widget); LOCK_APP(app); property = GetParamInfo(widget, selection); RemoveParamInfo(widget, selection); if (IsGatheringRequest(widget, selection)) { AddSelectionRequests(widget, selection, 1, &target, &callback, 1, &closure, &incr, &property); } else { GetSelectionValue(widget, selection, target, callback, closure, time, TRUE, property); } UNLOCK_APP(app); } static void GetSelectionValues( Widget widget, Atom selection, Atom *targets, int count, XtSelectionCallbackProc *callbacks, int num_callbacks, XtPointer *closures, Time time, Boolean *incremental, Atom *properties) { Select ctx; CallBackInfo info; IndirectPair *pairs, *p; Atom *t; if (count == 0) return; ctx = FindCtx(XtDisplay(widget), selection); if (ctx->widget && !ctx->was_disowned) { int j, i; RequestRec req; ctx->req = &req; req.ctx = ctx; req.event.time = time; ctx->ref_count++; for (i = 0, j = 0; count; count--, i++, j++ ) { if (j >= num_callbacks) j = 0; DoLocalTransfer(&req, selection, targets[i], widget, callbacks[j], closures[i], incremental[i], properties ? properties[i] : None); } if (--ctx->ref_count == 0 && ctx->free_when_done) XtFree((char*)ctx); else ctx->req = NULL; } else { XtSelectionCallbackProc *passed_callbacks; XtSelectionCallbackProc stack_cbs[32]; int i = 0, j = 0; passed_callbacks = (XtSelectionCallbackProc *) XtStackAlloc(sizeof(XtSelectionCallbackProc) * count, stack_cbs); /* To deal with the old calls from XtGetSelectionValues* we will repeat however many callbacks have been passed into the array */ for(i = 0; i < count; i++) { if (j >= num_callbacks) j = 0; passed_callbacks[i] = callbacks[j]; j++; } info = MakeInfo(ctx, passed_callbacks, closures, count, widget, time, incremental, properties); XtStackFree((XtPointer) passed_callbacks, stack_cbs); info->target = (Atom *)__XtMalloc((unsigned) ((count+1) * sizeof(Atom))); (*info->target) = ctx->prop_list->indirect_atom; (void) memmove((char *) info->target+sizeof(Atom), (char *) targets, count * sizeof(Atom)); pairs = (IndirectPair*)__XtMalloc((unsigned)(count*sizeof(IndirectPair))); for (p = &pairs[count-1], t = &targets[count-1], i = count - 1; p >= pairs; p--, t--, i--) { p->target = *t; if (properties == NULL || properties[i] == None) { p->property = GetSelectionProperty(XtDisplay(widget)); XDeleteProperty(XtDisplay(widget), XtWindow(widget), p->property); } else { p->property = properties[i]; } } XChangeProperty(XtDisplay(widget), XtWindow(widget), info->property, info->property, 32, PropModeReplace, (unsigned char *) pairs, count * IndirectPairWordSize); XtFree((char*)pairs); RequestSelectionValue(info, selection, ctx->prop_list->indirect_atom); } } void XtGetSelectionValues( Widget widget, Atom selection, Atom *targets, int count, XtSelectionCallbackProc callback, XtPointer *closures, Time time) { Boolean incremental_values[32]; Boolean *incremental; int i; WIDGET_TO_APPCON(widget); LOCK_APP(app); incremental = XtStackAlloc(count * sizeof(Boolean), incremental_values); for(i = 0; i < count; i++) incremental[i] = FALSE; if (IsGatheringRequest(widget, selection)) { AddSelectionRequests(widget, selection, count, targets, &callback, 1, closures, incremental, NULL); } else { GetSelectionValues(widget, selection, targets, count, &callback, 1, closures, time, incremental, NULL); } XtStackFree((XtPointer) incremental, incremental_values); UNLOCK_APP(app); } void XtGetSelectionValuesIncremental( Widget widget, Atom selection, Atom *targets, int count, XtSelectionCallbackProc callback, XtPointer *closures, Time time) { Boolean incremental_values[32]; Boolean *incremental; int i; WIDGET_TO_APPCON(widget); LOCK_APP(app); incremental = XtStackAlloc(count * sizeof(Boolean), incremental_values); for(i = 0; i < count; i++) incremental[i] = TRUE; if (IsGatheringRequest(widget, selection)) { AddSelectionRequests(widget, selection, count, targets, &callback, 1, closures, incremental, NULL); } else { GetSelectionValues(widget, selection, targets, count, &callback, 1, closures, time, incremental, NULL); } XtStackFree((XtPointer) incremental, incremental_values); UNLOCK_APP(app); } static Request GetRequestRecord( Widget widget, Atom selection, XtRequestId id) { Request req = (Request)id; Select ctx = NULL; if ( (req == NULL && ((ctx = FindCtx( XtDisplay(widget), selection )) == NULL || ctx->req == NULL || ctx->selection != selection || ctx->widget == NULL)) || (req != NULL && (req->ctx == NULL || req->ctx->selection != selection || req->ctx->widget != widget))) { String params = XtName(widget); Cardinal num_params = 1; XtAppWarningMsg(XtWidgetToApplicationContext(widget), "notInConvertSelection", "xtGetSelectionRequest", XtCXtToolkitError, "XtGetSelectionRequest or XtGetSelectionParameters called for widget \"%s\" outside of ConvertSelection proc", ¶ms, &num_params ); return NULL; } if (req == NULL) { /* non-incremental owner; only one request can be * outstanding at a time, so it's safe to keep ptr in ctx */ req = ctx->req; } return req; } XSelectionRequestEvent *XtGetSelectionRequest( Widget widget, Atom selection, XtRequestId id) { Request req = (Request)id; WIDGET_TO_APPCON(widget); LOCK_APP(app); req = GetRequestRecord(widget, selection, id); if (! req) { UNLOCK_APP(app); return (XSelectionRequestEvent*) NULL; } if (req->event.type == 0) { /* owner is local; construct the remainder of the event */ req->event.type = SelectionRequest; req->event.serial = LastKnownRequestProcessed(XtDisplay(widget)); req->event.send_event = True; req->event.display = XtDisplay(widget); req->event.owner = XtWindow(req->ctx->widget); req->event.selection = selection; } UNLOCK_APP(app); return &req->event; } /* Property atom access */ Atom XtReservePropertyAtom( Widget w) { return(GetSelectionProperty(XtDisplay(w))); } void XtReleasePropertyAtom( Widget w, Atom atom) { FreeSelectionProperty(XtDisplay(w), atom); } /* Multiple utilities */ /* All requests are put in a single list per widget. It is very unlikely anyone will be gathering multiple MULTIPLE requests at the same time, so the loss in efficiency for this case is acceptable */ /* Queue one or more requests to the one we're gathering */ static void AddSelectionRequests( Widget wid, Atom sel, int count, Atom *targets, XtSelectionCallbackProc *callbacks, int num_cb, XtPointer *closures, Boolean *incrementals, Atom *properties) { QueuedRequestInfo qi; Window window = XtWindow(wid); Display *dpy = XtDisplay(wid); LOCK_PROCESS; if (multipleContext == 0) multipleContext = XUniqueContext(); qi = NULL; (void) XFindContext(dpy, window, multipleContext, (XPointer*) &qi); if (qi != NULL) { QueuedRequest *req = qi->requests; int start = qi->count; int i = 0; int j = 0; qi->count += count; req = (QueuedRequest*) XtRealloc((char*) req, (start + count) * sizeof(QueuedRequest)); while(i < count) { QueuedRequest newreq = (QueuedRequest) __XtMalloc(sizeof(QueuedRequestRec)); newreq->selection = sel; newreq->target = targets[i]; if (properties != NULL) newreq->param = properties[i]; else { newreq->param = GetSelectionProperty(dpy); XDeleteProperty(dpy, window, newreq->param); } newreq->callback = callbacks[j]; newreq->closure = closures[i]; newreq->incremental = incrementals[i]; req[start] = newreq; start++; i++; j++; if (j > num_cb) j = 0; } qi->requests = req; } else { /* Impossible */ } UNLOCK_PROCESS; } /* Only call IsGatheringRequest when we have a lock already */ static Boolean IsGatheringRequest( Widget wid, Atom sel) { QueuedRequestInfo qi; Window window = XtWindow(wid); Display *dpy = XtDisplay(wid); Boolean found = False; int i; if (multipleContext == 0) multipleContext = XUniqueContext(); qi = NULL; (void) XFindContext(dpy, window, multipleContext, (XPointer*) &qi); if (qi != NULL) { i = 0; while(qi->selections[i] != None) { if (qi->selections[i] == sel) { found = True; break; } i++; } } return(found); } /* Cleanup request scans the request queue and releases any properties queued, and removes any requests queued */ static void CleanupRequest( Display *dpy, QueuedRequestInfo qi, Atom sel) { int i, j, n; i = 0; /* Remove this selection from the list */ n = 0; while(qi->selections[n] != sel && qi->selections[n] != None) n++; if (qi->selections[n] == sel) { while(qi->selections[n] != None) { qi->selections[n] = qi->selections[n + 1]; n++; } } while(i < qi->count) { QueuedRequest req = qi->requests[i]; if (req->selection == sel) { /* Match */ if (req->param != None) FreeSelectionProperty(dpy, req->param); qi->count--; for(j = i; j < qi->count; j++) qi->requests[j] = qi->requests[j + 1]; XtFree((char*) req); } else { i++; } } } void XtCreateSelectionRequest( Widget widget, Atom selection) { QueuedRequestInfo queueInfo; Window window = XtWindow(widget); Display *dpy = XtDisplay(widget); int n; LOCK_PROCESS; if (multipleContext == 0) multipleContext = XUniqueContext(); queueInfo = NULL; (void) XFindContext(dpy, window, multipleContext, (XPointer*) &queueInfo); /* If there is one, then cancel it */ if (queueInfo != NULL) CleanupRequest(dpy, queueInfo, selection); else { /* Create it */ queueInfo = (QueuedRequestInfo) __XtMalloc(sizeof(QueuedRequestInfoRec)); queueInfo->count = 0; queueInfo->selections = (Atom*) __XtMalloc(sizeof(Atom) * 2); queueInfo->selections[0] = None; queueInfo->requests = (QueuedRequest *) __XtMalloc(sizeof(QueuedRequest)); } /* Append this selection to list */ n = 0; while(queueInfo->selections[n] != None) n++; queueInfo->selections = (Atom*) XtRealloc((char*) queueInfo->selections, (n + 2) * sizeof(Atom)); queueInfo->selections[n] = selection; queueInfo->selections[n + 1] = None; (void) XSaveContext(dpy, window, multipleContext, (char*) queueInfo); UNLOCK_PROCESS; } void XtSendSelectionRequest( Widget widget, Atom selection, Time time) { QueuedRequestInfo queueInfo; Window window = XtWindow(widget); Display *dpy = XtDisplay(widget); LOCK_PROCESS; if (multipleContext == 0) multipleContext = XUniqueContext(); queueInfo = NULL; (void) XFindContext(dpy, window, multipleContext, (XPointer*) &queueInfo); if (queueInfo != NULL) { int count = 0; int i; QueuedRequest *req = queueInfo->requests; /* Construct the requests and send it using GetSelectionValues */ for(i = 0; i < queueInfo->count; i++) if (req[i]->selection == selection) count++; if (count > 0) { if (count == 1) { for(i = 0; i < queueInfo->count; i++) if (req[i]->selection == selection) break; /* special case a multiple which isn't needed */ GetSelectionValue(widget, selection, req[i]->target, req[i]->callback, req[i]->closure, time, req[i]->incremental, req[i]->param); } else { Atom *targets; Atom t[PREALLOCED]; XtSelectionCallbackProc *cbs; XtSelectionCallbackProc c[PREALLOCED]; XtPointer *closures; XtPointer cs[PREALLOCED]; Boolean *incrs; Boolean ins[PREALLOCED]; Atom *props; Atom p[PREALLOCED]; int i = 0; int j = 0; /* Allocate */ targets = (Atom *) XtStackAlloc(count * sizeof(Atom), t); cbs = (XtSelectionCallbackProc *) XtStackAlloc(count * sizeof(XtSelectionCallbackProc), c); closures = (XtPointer *) XtStackAlloc(count * sizeof(XtPointer), cs); incrs = (Boolean *) XtStackAlloc(count * sizeof(Boolean), ins); props = (Atom *) XtStackAlloc(count * sizeof(Atom), p); /* Copy */ for(i = 0; i < queueInfo->count; i++) { if (req[i]->selection == selection) { targets[j] = req[i]->target; cbs[j] = req[i]->callback; closures[j] = req[i]->closure; incrs[j] = req[i]->incremental; props[j] = req[i]->param; j++; } } /* Make the request */ GetSelectionValues(widget, selection, targets, count, cbs, count, closures, time, incrs, props); /* Free */ XtStackFree((XtPointer) targets, t); XtStackFree((XtPointer) cbs, c); XtStackFree((XtPointer) closures, cs); XtStackFree((XtPointer) incrs, ins); XtStackFree((XtPointer) props, p); } } } CleanupRequest(dpy, queueInfo, selection); UNLOCK_PROCESS; } void XtCancelSelectionRequest( Widget widget, Atom selection) { QueuedRequestInfo queueInfo; Window window = XtWindow(widget); Display *dpy = XtDisplay(widget); LOCK_PROCESS; if (multipleContext == 0) multipleContext = XUniqueContext(); queueInfo = NULL; (void) XFindContext(dpy, window, multipleContext, (XPointer*) &queueInfo); /* If there is one, then cancel it */ if (queueInfo != NULL) CleanupRequest(dpy, queueInfo, selection); UNLOCK_PROCESS; } /* Parameter utilities */ /* Parameters on a selection request */ /* Places data on allocated parameter atom, then records the parameter atom data for use in the next call to one of the XtGetSelectionValue functions. */ void XtSetSelectionParameters( Widget requestor, Atom selection, Atom type, XtPointer value, unsigned long length, int format) { Display *dpy = XtDisplay(requestor); Window window = XtWindow(requestor); Atom property = GetParamInfo(requestor, selection); if (property == None) { property = GetSelectionProperty(dpy); AddParamInfo(requestor, selection, property); } XChangeProperty(dpy, window, property, type, format, PropModeReplace, (unsigned char *) value, length); } /* Retrieves data passed in a parameter. Data for this is stored on the originator's window */ void XtGetSelectionParameters( Widget owner, Atom selection, XtRequestId request_id, Atom* type_return, XtPointer* value_return, unsigned long* length_return, int* format_return) { Request req; Display *dpy = XtDisplay(owner); WIDGET_TO_APPCON(owner); *value_return = NULL; *length_return = *format_return = 0; *type_return = None; LOCK_APP(app); req = GetRequestRecord(owner, selection, request_id); if (req && req->property) { unsigned long bytes_after; /* unused */ StartProtectedSection(dpy, req->requestor); XGetWindowProperty(dpy, req->requestor, req->property, 0L, 10000000, False, AnyPropertyType, type_return, format_return, length_return, &bytes_after, (unsigned char**) value_return); EndProtectedSection(dpy); #ifdef XT_COPY_SELECTION if (*value_return) { int size = BYTELENGTH(*length_return, *format_return) + 1; char *tmp = __XtMalloc((Cardinal) size); (void) memmove(tmp, *value_return, size); XFree(*value_return); *value_return = tmp; } #endif } UNLOCK_APP(app); } /* Parameters are temporarily stashed in an XContext. A list is used because * there may be more than one selection request in progress. The context * data is deleted when the list is empty. In the future, the parameter * context could be merged with other contexts used during selections. */ static void AddParamInfo( Widget w, Atom selection, Atom param_atom) { int n; Param p; ParamInfo pinfo; LOCK_PROCESS; if (paramPropertyContext == 0) paramPropertyContext = XUniqueContext(); if (XFindContext(XtDisplay(w), XtWindow(w), paramPropertyContext, (XPointer *) &pinfo)) { pinfo = (ParamInfo) __XtMalloc(sizeof(ParamInfoRec)); pinfo->count = 1; pinfo->paramlist = XtNew(ParamRec); p = pinfo->paramlist; (void) XSaveContext(XtDisplay(w), XtWindow(w), paramPropertyContext, (char *)pinfo); } else { for (n = pinfo->count, p = pinfo->paramlist; n; n--, p++) { if (p->selection == None || p->selection == selection) break; } if (n == 0) { pinfo->count++; pinfo->paramlist = (Param) XtRealloc((char*) pinfo->paramlist, pinfo->count * sizeof(ParamRec)); p = &pinfo->paramlist[pinfo->count - 1]; (void) XSaveContext(XtDisplay(w), XtWindow(w), paramPropertyContext, (char *)pinfo); } } p->selection = selection; p->param = param_atom; UNLOCK_PROCESS; } static void RemoveParamInfo( Widget w, Atom selection) { int n; Param p; ParamInfo pinfo; Boolean retain = False; LOCK_PROCESS; if (paramPropertyContext && (XFindContext(XtDisplay(w), XtWindow(w), paramPropertyContext, (XPointer *) &pinfo) == 0)) { /* Find and invalidate the parameter data. */ for (n = pinfo->count, p = pinfo->paramlist; n; n--, p++) { if (p->selection != None) { if (p->selection == selection) p->selection = None; else retain = True; } } /* If there's no valid data remaining, release the context entry. */ if (! retain) { XtFree((char*) pinfo->paramlist); XtFree((char*) pinfo); XDeleteContext(XtDisplay(w), XtWindow(w), paramPropertyContext); } } UNLOCK_PROCESS; } static Atom GetParamInfo( Widget w, Atom selection) { int n; Param p; ParamInfo pinfo; Atom atom = None; LOCK_PROCESS; if (paramPropertyContext && (XFindContext(XtDisplay(w), XtWindow(w), paramPropertyContext, (XPointer *) &pinfo) == 0)) { for (n = pinfo->count, p = pinfo->paramlist; n; n--, p++) if (p->selection == selection) { atom = p->param; break; } } UNLOCK_PROCESS; return atom; } osure = closures[i]; newreq->incremental = incrementals[i]; req[start] = newreq; start++; i++; j++; if (j > num_cb) j = 0; } qi->requests = req; } else { /* Impossible */ } UNLOCK_PROCESS; } /* Only call IsGatheringRequest when we have a lock already */ static Boolean IsGatheringRequest( Widget wid, Atom sel) { QueuedRequestInfo qi; Window window = XtWindow(wid); Display *dpy = XtDisplay(wid); Boolean flibXt-1.1.5/src/Display.c000064401431060000012000000512241252061032400154200ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT #include "ResConfigP.h" #endif #include #ifdef XTHREADS void (*_XtProcessLock)(void) = NULL; void (*_XtProcessUnlock)(void) = NULL; void (*_XtInitAppLock)(XtAppContext) = NULL; #endif static String XtNnoPerDisplay = "noPerDisplay"; ProcessContext _XtGetProcessContext(void) { static ProcessContextRec processContextRec = { (XtAppContext)NULL, (XtAppContext)NULL, (ConverterTable)NULL, {(XtLanguageProc)NULL, (XtPointer)NULL} }; return &processContextRec; } XtAppContext _XtDefaultAppContext(void) { ProcessContext process = _XtGetProcessContext(); XtAppContext app; LOCK_PROCESS; if (process->defaultAppContext == NULL) { process->defaultAppContext = XtCreateApplicationContext(); } app = process->defaultAppContext; UNLOCK_PROCESS; return app; } static void AddToAppContext( Display *d, XtAppContext app) { #define DISPLAYS_TO_ADD 4 if (app->count >= app->max) { app->max += DISPLAYS_TO_ADD; app->list = (Display **) XtRealloc((char *)app->list, (unsigned) app->max * sizeof(Display *)); } app->list[app->count++] = d; app->rebuild_fdlist = TRUE; #ifndef USE_POLL if (ConnectionNumber(d) + 1 > app->fds.nfds) { app->fds.nfds = ConnectionNumber(d) + 1; } #else app->fds.nfds++; #endif #undef DISPLAYS_TO_ADD } static void XtDeleteFromAppContext( Display *d, register XtAppContext app) { register int i; for (i = 0; i < app->count; i++) if (app->list[i] == d) break; if (i < app->count) { if (i <= app->last && app->last > 0) app->last--; for (i++; i < app->count; i++) app->list[i-1] = app->list[i]; app->count--; } app->rebuild_fdlist = TRUE; #ifndef USE_POLL if ((ConnectionNumber(d) + 1) == app->fds.nfds) app->fds.nfds--; else /* Unnecessary, just to be fool-proof */ FD_CLR(ConnectionNumber(d), &app->fds.rmask); #else app->fds.nfds--; #endif } static XtPerDisplay NewPerDisplay( Display *dpy) { PerDisplayTablePtr pd; pd = XtNew(PerDisplayTable); LOCK_PROCESS; pd->dpy = dpy; pd->next = _XtperDisplayList; _XtperDisplayList = pd; UNLOCK_PROCESS; return &(pd->perDpy); } static XtPerDisplay InitPerDisplay( Display *dpy, XtAppContext app, _Xconst char * name, _Xconst char * classname) { XtPerDisplay pd; AddToAppContext(dpy, app); pd = NewPerDisplay(dpy); _XtHeapInit(&pd->heap); pd->destroy_callbacks = NULL; pd->region = XCreateRegion(); pd->case_cvt = NULL; pd->defaultKeycodeTranslator = XtTranslateKey; pd->keysyms_serial = 0; pd->keysyms = NULL; XDisplayKeycodes(dpy, &pd->min_keycode, &pd->max_keycode); pd->modKeysyms = NULL; pd->modsToKeysyms = NULL; pd->appContext = app; pd->name = XrmStringToName(name); pd->class = XrmStringToClass(classname); pd->being_destroyed = False; pd->GClist = NULL; pd->pixmap_tab = NULL; pd->language = NULL; pd->rv = False; pd->last_event.xany.serial = 0; pd->last_timestamp = 0; _XtAllocTMContext(pd); pd->mapping_callbacks = NULL; pd->pdi.grabList = NULL; pd->pdi.trace = NULL; pd->pdi.traceDepth = 0; pd->pdi.traceMax = 0; pd->pdi.focusWidget = NULL; pd->pdi.activatingKey = 0; pd->pdi.keyboard.grabType = XtNoServerGrab; pd->pdi.pointer.grabType = XtNoServerGrab; _XtAllocWWTable(pd); pd->per_screen_db = (XrmDatabase *)__XtCalloc(ScreenCount(dpy), sizeof(XrmDatabase)); pd->cmd_db = (XrmDatabase)NULL; pd->server_db = (XrmDatabase)NULL; pd->dispatcher_list = NULL; pd->ext_select_list = NULL; pd->ext_select_count = 0; pd->hook_object = NULL; #if 0 pd->hook_object = _XtCreate("hooks", "Hooks", hookObjectClass, (Widget)NULL, (Screen*)DefaultScreenOfDisplay(dpy), (ArgList)NULL, 0, (XtTypedArgList)NULL, 0, (ConstraintWidgetClass)NULL); #endif #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT pd->rcm_init = XInternAtom (dpy, RCM_INIT, 0); pd->rcm_data = XInternAtom (dpy, RCM_DATA, 0); #endif return pd; } Display *XtOpenDisplay( XtAppContext app, _Xconst char* displayName, _Xconst char* applName, _Xconst char* className, XrmOptionDescRec *urlist, Cardinal num_urs, int *argc, String *argv) { Display *d; XrmDatabase db = NULL; XtPerDisplay pd; String language = NULL; LOCK_APP(app); LOCK_PROCESS; /* parse the command line for name, display, and/or language */ db = _XtPreparseCommandLine(urlist, num_urs, *argc, argv, (String *)&applName, (String *)(displayName ? NULL : &displayName), (app->process->globalLangProcRec.proc ? &language : NULL)); UNLOCK_PROCESS; d = XOpenDisplay(displayName); if (! applName && !(applName = getenv("RESOURCE_NAME"))) { if (*argc > 0 && argv[0] && *argv[0]) { #ifdef WIN32 char *ptr = strrchr(argv[0], '\\'); #else char *ptr = strrchr(argv[0], '/'); #endif if (ptr) applName = ++ptr; else applName = argv[0]; } else applName = "main"; } if (d) { pd = InitPerDisplay(d, app, applName, className); pd->language = language; _XtDisplayInitialize(d, pd, applName, urlist, num_urs, argc, argv); } else { int len; displayName = XDisplayName(displayName); len = strlen (displayName); app->display_name_tried = (String) __XtMalloc (len + 1); strncpy ((char*) app->display_name_tried, displayName, len + 1); app->display_name_tried[len] = '\0'; } if (db) XrmDestroyDatabase(db); UNLOCK_APP(app); return d; } Display * _XtAppInit( XtAppContext * app_context_return, String application_class, XrmOptionDescRec *options, Cardinal num_options, int *argc_in_out, String **argv_in_out, String * fallback_resources) { String *saved_argv; int i; Display *dpy; /* * Save away argv and argc so we can set the properties later */ saved_argv = (String *) __XtMalloc( (Cardinal)((*argc_in_out + 1) * sizeof(String)) ); for (i = 0 ; i < *argc_in_out ; i++) saved_argv[i] = (*argv_in_out)[i]; saved_argv[i] = NULL; /* NULL terminate that sucker. */ *app_context_return = XtCreateApplicationContext(); LOCK_APP((*app_context_return)); if (fallback_resources) /* save a procedure call */ XtAppSetFallbackResources(*app_context_return, fallback_resources); dpy = XtOpenDisplay(*app_context_return, (String) NULL, NULL, application_class, options, num_options, argc_in_out, *argv_in_out); if (!dpy) { String param = (*app_context_return)->display_name_tried; Cardinal param_count = 1; XtErrorMsg("invalidDisplay","xtInitialize",XtCXtToolkitError, "Can't open display: %s", ¶m, ¶m_count); XtFree((char *) (*app_context_return)->display_name_tried); } *argv_in_out = saved_argv; UNLOCK_APP((*app_context_return)); return dpy; } void XtDisplayInitialize( XtAppContext app, Display *dpy, _Xconst char* name, _Xconst char* classname, XrmOptionDescRec *urlist, Cardinal num_urs, int *argc, String *argv ) { XtPerDisplay pd; XrmDatabase db = NULL; LOCK_APP(app); pd = InitPerDisplay(dpy, app, name, classname); LOCK_PROCESS; if (app->process->globalLangProcRec.proc) /* pre-parse the command line for the language resource */ db = _XtPreparseCommandLine(urlist, num_urs, *argc, argv, NULL, NULL, &pd->language); UNLOCK_PROCESS; _XtDisplayInitialize(dpy, pd, name, urlist, num_urs, argc, argv); if (db) XrmDestroyDatabase(db); UNLOCK_APP(app); } XtAppContext XtCreateApplicationContext(void) { XtAppContext app = XtNew(XtAppStruct); #ifdef XTHREADS app->lock_info = NULL; app->lock = NULL; app->unlock = NULL; app->yield_lock = NULL; app->restore_lock = NULL; app->free_lock = NULL; #endif INIT_APP_LOCK(app); LOCK_APP(app); LOCK_PROCESS; app->process = _XtGetProcessContext(); app->next = app->process->appContextList; app->process->appContextList = app; app->langProcRec.proc = app->process->globalLangProcRec.proc; app->langProcRec.closure = app->process->globalLangProcRec.closure; app->destroy_callbacks = NULL; app->list = NULL; app->count = app->max = app->last = 0; app->timerQueue = NULL; app->workQueue = NULL; app->signalQueue = NULL; app->input_list = NULL; app->outstandingQueue = NULL; app->errorDB = NULL; _XtSetDefaultErrorHandlers(&app->errorMsgHandler, &app->warningMsgHandler, &app->errorHandler, &app->warningHandler); app->action_table = NULL; _XtSetDefaultSelectionTimeout(&app->selectionTimeout); _XtSetDefaultConverterTable(&app->converterTable); app->sync = app->being_destroyed = app->error_inited = FALSE; app->in_phase2_destroy = NULL; #ifndef USE_POLL FD_ZERO(&app->fds.rmask); FD_ZERO(&app->fds.wmask); FD_ZERO(&app->fds.emask); #endif app->fds.nfds = 0; app->input_count = app->input_max = 0; _XtHeapInit(&app->heap); app->fallback_resources = NULL; _XtPopupInitialize(app); app->action_hook_list = NULL; app->block_hook_list = NULL; app->destroy_list_size = app->destroy_count = app->dispatch_level = 0; app->destroy_list = NULL; #ifndef NO_IDENTIFY_WINDOWS app->identify_windows = False; #endif app->free_bindings = NULL; app->display_name_tried = NULL; app->dpy_destroy_count = 0; app->dpy_destroy_list = NULL; app->exit_flag = FALSE; app->rebuild_fdlist = TRUE; UNLOCK_PROCESS; UNLOCK_APP(app); return app; } void XtAppSetExitFlag ( XtAppContext app) { LOCK_APP(app); app->exit_flag = TRUE; UNLOCK_APP(app); } Boolean XtAppGetExitFlag ( XtAppContext app) { Boolean retval; LOCK_APP(app); retval = app->exit_flag; UNLOCK_APP(app); return retval; } static void DestroyAppContext(XtAppContext app) { XtAppContext* prev_app; prev_app = &app->process->appContextList; while (app->count-- > 0) XtCloseDisplay(app->list[app->count]); if (app->list != NULL) XtFree((char *)app->list); _XtFreeConverterTable(app->converterTable); _XtCacheFlushTag(app, (XtPointer)&app->heap); _XtFreeActions(app->action_table); if (app->destroy_callbacks != NULL) { XtCallCallbackList((Widget) NULL, (XtCallbackList)app->destroy_callbacks, (XtPointer)app); _XtRemoveAllCallbacks(&app->destroy_callbacks); } while (app->timerQueue) XtRemoveTimeOut((XtIntervalId)app->timerQueue); while (app->workQueue) XtRemoveWorkProc((XtWorkProcId)app->workQueue); while (app->signalQueue) XtRemoveSignal((XtSignalId)app->signalQueue); if (app->input_list) _XtRemoveAllInputs(app); XtFree((char*)app->destroy_list); _XtHeapFree(&app->heap); while (*prev_app != app) prev_app = &(*prev_app)->next; *prev_app = app->next; if (app->process->defaultAppContext == app) app->process->defaultAppContext = NULL; if (app->free_bindings) _XtDoFreeBindings (app); FREE_APP_LOCK(app); XtFree((char *)app); } static XtAppContext* appDestroyList = NULL; int _XtAppDestroyCount = 0; void XtDestroyApplicationContext(XtAppContext app) { LOCK_APP(app); if (app->being_destroyed) { UNLOCK_APP(app); return; } if (_XtSafeToDestroy(app)) { LOCK_PROCESS; DestroyAppContext(app); UNLOCK_PROCESS; } else { app->being_destroyed = TRUE; LOCK_PROCESS; _XtAppDestroyCount++; appDestroyList = (XtAppContext *) XtRealloc((char *) appDestroyList, (unsigned) (_XtAppDestroyCount * sizeof(XtAppContext))); appDestroyList[_XtAppDestroyCount-1] = app; UNLOCK_PROCESS; UNLOCK_APP(app); } } void _XtDestroyAppContexts(void) { int i,ii; XtAppContext apps[8]; XtAppContext* pApps; pApps = XtStackAlloc (sizeof (XtAppContext) * _XtAppDestroyCount, apps); for (i = ii = 0; i < _XtAppDestroyCount; i++) { if (_XtSafeToDestroy(appDestroyList[i])) DestroyAppContext(appDestroyList[i]); else pApps[ii++] = appDestroyList[i]; } _XtAppDestroyCount = ii; if (_XtAppDestroyCount == 0) { XtFree((char *) appDestroyList); appDestroyList = NULL; } else { for (i = 0; i < ii; i++) appDestroyList[i] = pApps[i]; } XtStackFree ((XtPointer) pApps, apps); } XrmDatabase XtDatabase(Display *dpy) { XrmDatabase retval; DPY_TO_APPCON(dpy); LOCK_APP(app); retval = XrmGetDatabase(dpy); UNLOCK_APP(app); return retval; } PerDisplayTablePtr _XtperDisplayList = NULL; XtPerDisplay _XtSortPerDisplayList(Display *dpy) { register PerDisplayTablePtr pd, opd = NULL; LOCK_PROCESS; for (pd = _XtperDisplayList; pd != NULL && pd->dpy != dpy; pd = pd->next) { opd = pd; } if (pd == NULL) { XtErrorMsg(XtNnoPerDisplay, "getPerDisplay", XtCXtToolkitError, "Couldn't find per display information", (String *) NULL, (Cardinal *)NULL); } if (pd != _XtperDisplayList) { /* move it to the front */ /* opd points to the previous one... */ opd->next = pd->next; pd->next = _XtperDisplayList; _XtperDisplayList = pd; } UNLOCK_PROCESS; return &(pd->perDpy); } XtAppContext XtDisplayToApplicationContext(Display *dpy) { XtAppContext retval; retval = _XtGetPerDisplay(dpy)->appContext; return retval; } static void CloseDisplay(Display *dpy) { register XtPerDisplay xtpd; register PerDisplayTablePtr pd, opd = NULL; XrmDatabase db; int i; XtDestroyWidget(XtHooksOfDisplay(dpy)); LOCK_PROCESS; for (pd = _XtperDisplayList; pd != NULL && pd->dpy != dpy; pd = pd->next){ opd = pd; } if (pd == NULL) { XtErrorMsg(XtNnoPerDisplay, "closeDisplay", XtCXtToolkitError, "Couldn't find per display information", (String *) NULL, (Cardinal *)NULL); } if (pd == _XtperDisplayList) _XtperDisplayList = pd->next; else opd->next = pd->next; xtpd = &(pd->perDpy); if (xtpd != NULL) { if (xtpd->destroy_callbacks != NULL) { XtCallCallbackList((Widget) NULL, (XtCallbackList)xtpd->destroy_callbacks, (XtPointer)xtpd); _XtRemoveAllCallbacks(&xtpd->destroy_callbacks); } if (xtpd->mapping_callbacks != NULL) _XtRemoveAllCallbacks(&xtpd->mapping_callbacks); XtDeleteFromAppContext(dpy, xtpd->appContext); if (xtpd->keysyms) XFree((char *) xtpd->keysyms); XtFree((char *) xtpd->modKeysyms); XtFree((char *) xtpd->modsToKeysyms); xtpd->keysyms_per_keycode = 0; xtpd->being_destroyed = FALSE; xtpd->keysyms = NULL; xtpd->modKeysyms = NULL; xtpd->modsToKeysyms = NULL; XDestroyRegion(xtpd->region); _XtCacheFlushTag(xtpd->appContext, (XtPointer)&xtpd->heap); _XtGClistFree(dpy, xtpd); XtFree((char*)xtpd->pdi.trace); _XtHeapFree(&xtpd->heap); _XtFreeWWTable(xtpd); xtpd->per_screen_db[DefaultScreen(dpy)] = (XrmDatabase)NULL; for (i = ScreenCount(dpy); --i >= 0; ) { db = xtpd->per_screen_db[i]; if (db) XrmDestroyDatabase(db); } XtFree((char *)xtpd->per_screen_db); if ((db = XrmGetDatabase(dpy))) XrmDestroyDatabase(db); if (xtpd->cmd_db) XrmDestroyDatabase(xtpd->cmd_db); if (xtpd->server_db) XrmDestroyDatabase(xtpd->server_db); XtFree(xtpd->language); if (xtpd->dispatcher_list != NULL) XtFree((char *) xtpd->dispatcher_list); if (xtpd->ext_select_list != NULL) XtFree((char *) xtpd->ext_select_list); } XtFree((char*)pd); XrmSetDatabase(dpy, (XrmDatabase)NULL); XCloseDisplay(dpy); UNLOCK_PROCESS; } void XtCloseDisplay(Display *dpy) { XtPerDisplay pd; XtAppContext app = XtDisplayToApplicationContext(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); if (pd->being_destroyed) { UNLOCK_APP(app); return; } if (_XtSafeToDestroy(app)) CloseDisplay(dpy); else { pd->being_destroyed = TRUE; app->dpy_destroy_count++; app->dpy_destroy_list = (Display **) XtRealloc((char *) app->dpy_destroy_list, (unsigned) (app->dpy_destroy_count * sizeof(Display *))); app->dpy_destroy_list[app->dpy_destroy_count-1] = dpy; } UNLOCK_APP(app); } void _XtCloseDisplays(XtAppContext app) { int i; LOCK_APP(app); for (i = 0; i < app->dpy_destroy_count; i++) { CloseDisplay(app->dpy_destroy_list[i]); } app->dpy_destroy_count = 0; XtFree((char *) app->dpy_destroy_list); app->dpy_destroy_list = NULL; UNLOCK_APP(app); } XtAppContext XtWidgetToApplicationContext(Widget w) { XtAppContext retval; retval = _XtGetPerDisplay(XtDisplayOfObject(w))->appContext; return retval; } void XtGetApplicationNameAndClass( Display *dpy, String *name_return, String *class_return) { XtPerDisplay pd; pd = _XtGetPerDisplay(dpy); *name_return = XrmQuarkToString(pd->name); *class_return = XrmQuarkToString(pd->class); } XtPerDisplay _XtGetPerDisplay (Display* display) { XtPerDisplay retval; LOCK_PROCESS; retval = ((_XtperDisplayList != NULL && _XtperDisplayList->dpy == display) ? &_XtperDisplayList->perDpy : _XtSortPerDisplayList(display)); UNLOCK_PROCESS; return retval; } XtPerDisplayInputRec* _XtGetPerDisplayInput(Display* display) { XtPerDisplayInputRec* retval; LOCK_PROCESS; retval = ((_XtperDisplayList != NULL && _XtperDisplayList->dpy == display) ? &_XtperDisplayList->perDpy.pdi : &_XtSortPerDisplayList(display)->pdi); UNLOCK_PROCESS; return retval; } void XtGetDisplays( XtAppContext app_context, Display*** dpy_return, Cardinal* num_dpy_return) { int ii; LOCK_APP(app_context); *num_dpy_return = app_context->count; *dpy_return = (Display**)__XtMalloc(app_context->count * sizeof(Display*)); for (ii = 0; ii < app_context->count; ii++) (*dpy_return)[ii] = app_context->list[ii]; UNLOCK_APP(app_context); } e, urlist, num_urs, argc, argv); if (db) XrmDestroyDatabase(db); UNLOCK_APP(app); } XtAppContext XtCreateApplicationContext(void) { XtAppContext app = XtNew(XtAppStruct); #ifdef XTHREADS app->lock_info = NULL; app->lock = NULL; app->unlock = NULL; app->yield_lock = NULL; app->restore_lock = NULL; app->free_lock = NULL; #endif INIT_APP_LOCK(app);libXt-1.1.5/src/TMaction.c000064401431060000012000000705041252061032400155330ustar00alancstaff00002660200006/*LINTLIBRARY*/ /*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* TMaction.c -- maintains the state table of actions for the translation * manager. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #if defined(__STDC__) && !defined(NORCONST) #define RConst const #else #define RConst /**/ #endif static String XtNtranslationError = "translationError"; typedef struct _CompiledAction{ XrmQuark signature; XtActionProc proc; }CompiledAction, *CompiledActionTable; #define GetClassActions(wc) \ ((wc->core_class.actions) \ ? (((TMClassCache)wc->core_class.actions)->actions) \ : NULL) static CompiledActionTable CompileActionTable( register RConst struct _XtActionsRec *actions, register Cardinal count, /* may be 0 */ Boolean stat, /* if False, copy before compiling in place */ Boolean perm) /* if False, use XrmStringToQuark */ { register CompiledActionTable cActions; register int i; CompiledAction hold; CompiledActionTable cTableHold; XrmQuark (*func)(_Xconst char*); if (!count) return (CompiledActionTable) NULL; func = (perm ? XrmPermStringToQuark : XrmStringToQuark); if (! stat) { cTableHold = cActions = (CompiledActionTable) __XtMalloc(count * sizeof(CompiledAction)); for (i=count; --i >= 0; cActions++, actions++) { cActions->proc = actions->proc; cActions->signature = (*func)(actions->string); } } else { cTableHold = (CompiledActionTable) actions; for (i=count; --i >= 0; actions++) ((CompiledActionTable) actions)->signature = (*func)(actions->string); } cActions = cTableHold; /* Insertion sort. Whatever sort is used, it must be stable. */ for (i=1; (Cardinal) i <= count - 1; i++) { register Cardinal j; hold = cActions[i]; j = i; while (j && cActions[j-1].signature > hold.signature) { cActions[j] = cActions[j-1]; j--; } cActions[j] = hold; } return cActions; } typedef struct _ActionListRec *ActionList; typedef struct _ActionListRec { ActionList next; CompiledActionTable table; TMShortCard count; } ActionListRec; static void ReportUnboundActions( XtTranslations xlations, TMBindData bindData) { TMSimpleStateTree stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[0]; Cardinal num_unbound = 0; Cardinal num_params = 1; char* message; char messagebuf[1000]; String params[1]; register Cardinal num_chars = 0; register Cardinal i, j; XtActionProc *procs; for (i=0; i < xlations->numStateTrees; i++) { if (bindData->simple.isComplex) procs = TMGetComplexBindEntry(bindData, i)->procs; else procs = TMGetSimpleBindEntry(bindData, i)->procs; stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[i]; for (j=0; j < stateTree->numQuarks; j++) { if (procs[j] == NULL) { String s = XrmQuarkToString(stateTree->quarkTbl[j]); if (num_unbound != 0) num_chars += 2; num_chars += strlen(s); num_unbound++; } } } if (num_unbound == 0) return; message = XtStackAlloc (num_chars + 1, messagebuf); if (message != NULL) { *message = '\0'; num_unbound = 0; stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[0]; for (i=0; i < xlations->numStateTrees; i++) { if (bindData->simple.isComplex) procs = TMGetComplexBindEntry(bindData, i)->procs; else procs = TMGetSimpleBindEntry(bindData, i)->procs; stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[i]; for (j=0; j < stateTree->numQuarks; j++) { if (procs[j] == NULL) { String s = XrmQuarkToString(stateTree->quarkTbl[j]); if (num_unbound != 0) (void) strcat(message, ", "); (void) strcat(message, s); num_unbound++; } } } message[num_chars] = '\0'; params[0] = message; XtWarningMsg(XtNtranslationError,"unboundActions",XtCXtToolkitError, "Actions not found: %s", params, &num_params); XtStackFree (message, messagebuf); } } static CompiledAction *SearchActionTable( XrmQuark signature, CompiledActionTable actionTable, Cardinal numActions) { register int i, left, right; left = 0; right = numActions - 1; while (left <= right) { i = (left + right) >> 1; if (signature < actionTable[i].signature) right = i - 1; else if (signature > actionTable[i].signature) left = i + 1; else { while (i && actionTable[i - 1].signature == signature) i--; return &actionTable[i]; } } return (CompiledAction *) NULL; } static int BindActions( TMSimpleStateTree stateTree, XtActionProc *procs, CompiledActionTable compiledActionTable, TMShortCard numActions, Cardinal *ndxP) { register int unbound = stateTree->numQuarks - *ndxP; CompiledAction* action; register Cardinal ndx; register Boolean savedNdx = False; for (ndx = *ndxP; ndx < stateTree->numQuarks; ndx++) { if (procs[ndx] == NULL) { /* attempt to bind it */ XrmQuark q = stateTree->quarkTbl[ndx]; action = SearchActionTable(q, compiledActionTable, numActions); if (action) { procs[ndx] = action->proc; unbound--; } else if (!savedNdx) { *ndxP= ndx; savedNdx = True; } } else { /* already bound, leave it alone */ unbound--; } } return unbound; } typedef struct _TMBindCacheStatusRec{ unsigned int boundInClass:1; unsigned int boundInHierarchy:1; unsigned int boundInContext:1; unsigned int notFullyBound:1; unsigned int refCount:28; }TMBindCacheStatusRec, *TMBindCacheStatus; typedef struct _TMBindCacheRec{ struct _TMBindCacheRec *next; TMBindCacheStatusRec status; TMStateTree stateTree; #ifdef TRACE_TM WidgetClass widgetClass; #endif /* TRACE_TM */ XtActionProc procs[1]; /* variable length */ }TMBindCacheRec, *TMBindCache; typedef struct _TMClassCacheRec { CompiledActionTable actions; TMBindCacheRec *bindCache; }TMClassCacheRec, *TMClassCache; #define IsPureClassBind(bc) \ (bc->status.boundInClass && \ !(bc->status.boundInHierarchy || \ bc->status.boundInContext || \ bc->status.notFullyBound)) #define GetClassCache(w) \ ((TMClassCache)w->core.widget_class->core_class.actions) static int BindProcs( Widget widget, TMSimpleStateTree stateTree, XtActionProc *procs, TMBindCacheStatus bindStatus) { register WidgetClass class; register ActionList actionList; int unbound = -1, newUnbound = -1; Cardinal ndx = 0; Widget w = widget; LOCK_PROCESS; do { class = w->core.widget_class; do { if (class->core_class.actions != NULL) unbound = BindActions(stateTree, procs, GetClassActions(class), class->core_class.num_actions, &ndx); class = class->core_class.superclass; } while (unbound != 0 && class != NULL); if (unbound < (int)stateTree->numQuarks) bindStatus->boundInClass = True; else bindStatus->boundInClass = False; if (newUnbound == -1) newUnbound = unbound; w = XtParent(w); } while (unbound != 0 && w != NULL); if (newUnbound > unbound) bindStatus->boundInHierarchy = True; else bindStatus->boundInHierarchy = False; if (unbound) { XtAppContext app = XtWidgetToApplicationContext(widget); newUnbound = unbound; for (actionList = app->action_table; unbound != 0 && actionList != NULL; actionList = actionList->next) { unbound = BindActions(stateTree, procs, actionList->table, actionList->count, &ndx); } if (newUnbound > unbound) bindStatus->boundInContext = True; else bindStatus->boundInContext = False; } else { bindStatus->boundInContext = False; } UNLOCK_PROCESS; return unbound; } static XtActionProc *TryBindCache( Widget widget, TMStateTree stateTree) { TMClassCache classCache; LOCK_PROCESS; classCache = GetClassCache(widget); if (classCache == NULL) { WidgetClass wc = XtClass(widget); wc->core_class.actions = (XtActionList) _XtInitializeActionData(NULL, 0, True); } else { TMBindCache bindCache = (TMBindCache)(classCache->bindCache); for (; bindCache; bindCache = bindCache->next) { if (IsPureClassBind(bindCache) && (stateTree == bindCache->stateTree)) { bindCache->status.refCount++; UNLOCK_PROCESS; return &bindCache->procs[0]; } } } UNLOCK_PROCESS; return NULL; } /* * The class record actions field will point to the bind cache header * after this call is made out of coreClassPartInit. */ XtPointer _XtInitializeActionData( register struct _XtActionsRec *actions, register Cardinal count, _XtBoolean inPlace) { TMClassCache classCache; classCache = XtNew(TMClassCacheRec); classCache->actions = CompileActionTable(actions, count, inPlace, True); classCache->bindCache = NULL; return (XtPointer)classCache; } #define TM_BIND_CACHE_REALLOC 2 static XtActionProc *EnterBindCache( Widget w, TMSimpleStateTree stateTree, XtActionProc *procs, TMBindCacheStatus bindStatus) { TMClassCache classCache; TMBindCache* bindCachePtr; TMShortCard procsSize; TMBindCache bindCache; LOCK_PROCESS; classCache = GetClassCache(w); bindCachePtr = &classCache->bindCache; procsSize = stateTree->numQuarks * sizeof(XtActionProc); for (bindCache = *bindCachePtr; (*bindCachePtr); bindCachePtr = &(*bindCachePtr)->next, bindCache = *bindCachePtr) { TMBindCacheStatus cacheStatus = &bindCache->status; if ((bindStatus->boundInClass == cacheStatus->boundInClass) && (bindStatus->boundInHierarchy == cacheStatus->boundInHierarchy) && (bindStatus->boundInContext == cacheStatus->boundInContext) && (bindCache->stateTree == (TMStateTree)stateTree) && !XtMemcmp(&bindCache->procs[0], procs, procsSize)) { bindCache->status.refCount++; break; } } if (*bindCachePtr == NULL) { *bindCachePtr = bindCache = (TMBindCache) __XtMalloc(sizeof(TMBindCacheRec) + (procsSize - sizeof(XtActionProc))); bindCache->next = NULL; bindCache->status = *bindStatus; bindCache->status.refCount = 1; bindCache->stateTree = (TMStateTree)stateTree; #ifdef TRACE_TM bindCache->widgetClass = XtClass(w); if (_XtGlobalTM.numBindCache == _XtGlobalTM.bindCacheTblSize) { _XtGlobalTM.bindCacheTblSize += 16; _XtGlobalTM.bindCacheTbl = (TMBindCache *) XtRealloc((char *)_XtGlobalTM.bindCacheTbl, ((_XtGlobalTM.bindCacheTblSize) * sizeof(TMBindCache))); } _XtGlobalTM.bindCacheTbl[_XtGlobalTM.numBindCache++] = bindCache; #endif /* TRACE_TM */ XtMemmove((XtPointer)&bindCache->procs[0], (XtPointer)procs, procsSize); } UNLOCK_PROCESS; return &bindCache->procs[0]; } static void RemoveFromBindCache( Widget w, XtActionProc *procs) { TMClassCache classCache; TMBindCache* bindCachePtr; TMBindCache bindCache; XtAppContext app = XtWidgetToApplicationContext (w); LOCK_PROCESS; classCache = GetClassCache(w); bindCachePtr = (TMBindCache *)&classCache->bindCache; for (bindCache = *bindCachePtr; *bindCachePtr; bindCachePtr = &(*bindCachePtr)->next, bindCache = *bindCachePtr) { if (&bindCache->procs[0] == procs) { if (--bindCache->status.refCount == 0) { #ifdef TRACE_TM TMShortCard j; Boolean found = False; TMBindCache *tbl = _XtGlobalTM.bindCacheTbl; for (j = 0; j < _XtGlobalTM.numBindCache; j++) { if (found) tbl[j-1] = tbl[j]; if (tbl[j] == bindCache) found = True; } if (!found) XtWarning("where's the action ??? "); else _XtGlobalTM.numBindCache--; #endif /* TRACE_TM */ *bindCachePtr = bindCache->next; bindCache->next = app->free_bindings; app->free_bindings = bindCache; } break; } } UNLOCK_PROCESS; } /* ARGSUSED */ static void RemoveAccelerators( Widget widget, XtPointer closure, XtPointer data) { Widget destination = (Widget)closure; TMComplexBindProcs bindProcs; XtTranslations stackXlations[16]; XtTranslations *xlationsList, destXlations; TMShortCard i, numXlations = 0; if ((destXlations = destination->core.tm.translations) == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), XtNtranslationError,"nullTable",XtCXtToolkitError, "Can't remove accelerators from NULL table", (String *)NULL, (Cardinal *)NULL); return; } xlationsList = (XtTranslations *) XtStackAlloc((destXlations->numStateTrees * sizeof(XtTranslations)), stackXlations); for (i = 0, bindProcs = TMGetComplexBindEntry(destination->core.tm.proc_table, i); i < destXlations->numStateTrees; i++, bindProcs++) { if (bindProcs->widget == widget) { /* * if it's being destroyed don't do all the work */ if (destination->core.being_destroyed) { bindProcs->procs = NULL; } else xlationsList[numXlations] = bindProcs->aXlations; numXlations++; } } if (numXlations == 0) XtAppWarningMsg(XtWidgetToApplicationContext(widget), XtNtranslationError,"nullTable",XtCXtToolkitError, "Tried to remove nonexistent accelerators", (String *)NULL, (Cardinal *)NULL); else { if (!destination->core.being_destroyed) for (i = 0; i < numXlations; i++) _XtUnmergeTranslations(destination, xlationsList[i]); } XtStackFree((char *)xlationsList, stackXlations); } void _XtBindActions( Widget widget, XtTM tm) { XtTranslations xlations = tm->translations; TMSimpleStateTree stateTree; int globalUnbound = 0; Cardinal i; TMBindData bindData = (TMBindData)tm->proc_table; TMSimpleBindProcs simpleBindProcs = NULL; TMComplexBindProcs complexBindProcs = NULL; XtActionProc *newProcs; Widget bindWidget; if ((xlations == NULL) || widget->core.being_destroyed) return; stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[0]; for (i = 0; i < xlations->numStateTrees; i++) { stateTree = (TMSimpleStateTree)xlations->stateTreeTbl[i]; if (bindData->simple.isComplex) { complexBindProcs = TMGetComplexBindEntry(bindData, i); if (complexBindProcs->widget) { bindWidget = complexBindProcs->widget; if (bindWidget->core.destroy_callbacks != NULL) _XtAddCallbackOnce((InternalCallbackList *) &bindWidget->core.destroy_callbacks, RemoveAccelerators, (XtPointer)widget); else _XtAddCallback((InternalCallbackList *) &bindWidget->core.destroy_callbacks, RemoveAccelerators, (XtPointer)widget); } else bindWidget = widget; } else { simpleBindProcs = TMGetSimpleBindEntry(bindData, i); bindWidget = widget; } if ((newProcs = TryBindCache(bindWidget,(TMStateTree)stateTree)) == NULL) { XtActionProc *procs, stackProcs[256]; int localUnbound; TMBindCacheStatusRec bcStatusRec; procs = (XtActionProc *) XtStackAlloc(stateTree->numQuarks * sizeof(XtActionProc), stackProcs); XtBZero((XtPointer)procs, stateTree->numQuarks * sizeof(XtActionProc)); localUnbound = BindProcs(bindWidget, stateTree, procs, &bcStatusRec); if (localUnbound) bcStatusRec.notFullyBound = True; else bcStatusRec.notFullyBound = False; newProcs = EnterBindCache(bindWidget, stateTree, procs, &bcStatusRec); XtStackFree((XtPointer)procs, (XtPointer)stackProcs); globalUnbound += localUnbound; } if (bindData->simple.isComplex) complexBindProcs->procs = newProcs; else simpleBindProcs->procs = newProcs; } if (globalUnbound) ReportUnboundActions(xlations, (TMBindData)tm->proc_table); } void _XtUnbindActions( Widget widget, XtTranslations xlations, TMBindData bindData) { Cardinal i; Widget bindWidget; XtActionProc *procs; if ((xlations == NULL) || !XtIsRealized(widget)) return; for (i = 0; i < xlations->numStateTrees; i++) { if (bindData->simple.isComplex) { TMComplexBindProcs complexBindProcs; complexBindProcs = TMGetComplexBindEntry(bindData, i); if (complexBindProcs->widget) { /* * check for this being an accelerator binding whose * source is gone ( set by RemoveAccelerators) */ if (complexBindProcs->procs == NULL) continue; XtRemoveCallback(complexBindProcs->widget, XtNdestroyCallback, RemoveAccelerators, (XtPointer)widget); bindWidget = complexBindProcs->widget; } else bindWidget = widget; procs = complexBindProcs->procs; complexBindProcs->procs = NULL; } else { TMSimpleBindProcs simpleBindProcs; simpleBindProcs = TMGetSimpleBindEntry(bindData,i); procs = simpleBindProcs->procs; simpleBindProcs->procs = NULL; bindWidget = widget; } RemoveFromBindCache(bindWidget, procs); } } #ifdef notdef void _XtRemoveBindProcsByIndex( Widget w, TMBindData bindData, TMShortCard ndx) { TMShortCard i = ndx; TMBindProcs bindProcs = (TMBindProcs)&bindData->bindTbl[0]; RemoveFromBindCache(bindProcs->widget ? bindProcs->widget : w, bindProcs[i].procs); for (; i < bindData->bindTblSize; i++) bindProcs[i] = bindProcs[i+1]; } #endif /* notdef */ /* * used to free all copied action tables, called from DestroyAppContext */ void _XtFreeActions( ActionList actions) { ActionList curr, next; for (curr = actions; curr;) { next = curr->next; XtFree((char *)curr->table); XtFree((char *)curr); curr = next; } } void XtAddActions( XtActionList actions, Cardinal num_actions) { XtAppAddActions(_XtDefaultAppContext(), actions, num_actions); } void XtAppAddActions( XtAppContext app, XtActionList actions, Cardinal num_actions) { register ActionList rec; LOCK_APP(app); rec = XtNew(ActionListRec); rec->next = app->action_table; app->action_table = rec; rec->table = CompileActionTable(actions, num_actions, False, False); rec->count = num_actions; UNLOCK_APP(app); } void XtGetActionList( WidgetClass widget_class, XtActionList* actions_return, Cardinal* num_actions_return) { XtActionList list; CompiledActionTable table; int i; *actions_return = NULL; *num_actions_return = 0; LOCK_PROCESS; if (! widget_class->core_class.class_inited) { UNLOCK_PROCESS; return; } if (! (widget_class->core_class.class_inited & WidgetClassFlag)) { UNLOCK_PROCESS; return; } *num_actions_return = widget_class->core_class.num_actions; if (*num_actions_return) { list = *actions_return = (XtActionList) __XtMalloc(*num_actions_return * sizeof(XtActionsRec)); table = GetClassActions(widget_class); if (table != NULL) { for (i= (*num_actions_return); --i >= 0; list++, table++) { list->string = XrmQuarkToString(table->signature); list->proc = table->proc; } } } UNLOCK_PROCESS; } /*********************************************************************** * * Pop-up and Grab stuff * ***********************************************************************/ static Widget _XtFindPopup( Widget widget, String name) { register Cardinal i; register XrmQuark q; register Widget w; q = XrmStringToQuark(name); for (w=widget; w != NULL; w=w->core.parent) for (i=0; icore.num_popups; i++) if (w->core.popup_list[i]->core.xrm_name == q) return w->core.popup_list[i]; return NULL; } void XtMenuPopupAction( Widget widget, XEvent *event, String *params, Cardinal *num_params) { Boolean spring_loaded; register Widget popup_shell; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); if (*num_params != 1) { XtAppWarningMsg(app, "invalidParameters","xtMenuPopupAction",XtCXtToolkitError, "MenuPopup wants exactly one argument", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } if (event->type == ButtonPress) spring_loaded = True; else if (event->type == KeyPress || event->type == EnterNotify) spring_loaded = False; else { XtAppWarningMsg(app, "invalidPopup","unsupportedOperation",XtCXtToolkitError, "Pop-up menu creation is only supported on ButtonPress, KeyPress or EnterNotify events.", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } popup_shell = _XtFindPopup(widget, params[0]); if (popup_shell == NULL) { XtAppWarningMsg(app, "invalidPopup","xtMenuPopup",XtCXtToolkitError, "Can't find popup widget \"%s\" in XtMenuPopup", params, num_params); UNLOCK_APP(app); return; } if (spring_loaded) _XtPopup(popup_shell, XtGrabExclusive, TRUE); else _XtPopup(popup_shell, XtGrabNonexclusive, FALSE); UNLOCK_APP(app); } /*ARGSUSED*/ static void _XtMenuPopdownAction( Widget widget, XEvent *event, String *params, Cardinal *num_params) { Widget popup_shell; if (*num_params == 0) { XtPopdown(widget); } else if (*num_params == 1) { popup_shell = _XtFindPopup(widget, params[0]); if (popup_shell == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidPopup","xtMenuPopdown",XtCXtToolkitError, "Can't find popup widget \"%s\" in XtMenuPopdown", params, num_params); return; } XtPopdown(popup_shell); } else { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidParameters","xtMenuPopdown",XtCXtToolkitError, "XtMenuPopdown called with num_params != 0 or 1", (String *)NULL, (Cardinal *)NULL); } } static XtActionsRec RConst tmActions[] = { {"XtMenuPopup", XtMenuPopupAction}, {"XtMenuPopdown", _XtMenuPopdownAction}, {"MenuPopup", XtMenuPopupAction}, /* old & obsolete */ {"MenuPopdown", _XtMenuPopdownAction}, /* ditto */ #ifndef NO_MIT_HACKS {"XtDisplayTranslations", _XtDisplayTranslations}, {"XtDisplayAccelerators", _XtDisplayAccelerators}, {"XtDisplayInstalledAccelerators", _XtDisplayInstalledAccelerators}, #endif }; void _XtPopupInitialize( XtAppContext app) { register ActionList rec; /* * The _XtGlobalTM.newMatchSemantics flag determines whether * we support old or new matching * behavior. This is mainly an issue of whether subsequent lhs will * get pushed up in the match table if a lhs containing thier initial * sequence has already been encountered. Currently inited to False; */ #ifdef NEW_TM _XtGlobalTM.newMatchSemantics = True; #else _XtGlobalTM.newMatchSemantics = False; #endif rec = XtNew(ActionListRec); rec->next = app->action_table; app->action_table = rec; LOCK_PROCESS; rec->table = CompileActionTable(tmActions, XtNumber(tmActions), False, True); rec->count = XtNumber(tmActions); UNLOCK_PROCESS; _XtGrabInitialize(app); } void XtCallActionProc( Widget widget, _Xconst char* action, XEvent *event, String *params, Cardinal num_params) { CompiledAction* actionP; XrmQuark q = XrmStringToQuark(action); Widget w = widget; XtAppContext app = XtWidgetToApplicationContext(widget); ActionList actionList; Cardinal i; LOCK_APP(app); XtCheckSubclass(widget, coreWidgetClass, "XtCallActionProc first argument is not a subclass of Core"); LOCK_PROCESS; do { WidgetClass class = XtClass(w); do { if ((actionP = GetClassActions(class)) != NULL) for (i = 0; i < class->core_class.num_actions; i++, actionP++) { if (actionP->signature == q) { ActionHook hook = app->action_hook_list; while (hook != NULL) { (*hook->proc)( widget, hook->closure, (String)action, event, params, &num_params ); hook= hook->next; } (*(actionP->proc)) (widget, event, params, &num_params); UNLOCK_PROCESS; UNLOCK_APP(app); return; } } class = class->core_class.superclass; } while (class != NULL); w = XtParent(w); } while (w != NULL); UNLOCK_PROCESS; for (actionList = app->action_table; actionList != NULL; actionList = actionList->next) { for (i = 0, actionP = actionList->table; i < actionList->count; i++, actionP++) { if (actionP->signature == q) { ActionHook hook = app->action_hook_list; while (hook != NULL) { (*hook->proc)( widget, hook->closure, (String)action, event, params, &num_params ); hook= hook->next; } (*(actionP->proc)) (widget, event, params, &num_params); UNLOCK_APP(app); return; } } } { String params[2]; Cardinal num_params = 2; params[0] = (String)action; params[1] = XtName(widget); XtAppWarningMsg(app, "noActionProc", "xtCallActionProc", XtCXtToolkitError, "No action proc named \"%s\" is registered for widget \"%s\"", params, &num_params ); } UNLOCK_APP(app); } void _XtDoFreeBindings( XtAppContext app) { TMBindCache bcp; while (app->free_bindings) { bcp = app->free_bindings->next; XtFree ((char *) app->free_bindings); app->free_bindings = bcp; } } arks * sizeof(XtActionProc), stackProcs); XtBZero((XtPointer)procs, stateTree->numQuarks * sizeof(XtActionProc)); localUnbound = BindProcs(bindWidget, stateTree, libXt-1.1.5/src/RectObj.c000064401431060000012000000151641252061032400153460ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "CreateI.h" /****************************************************************** * * Rectangle Object Resources * ******************************************************************/ static void XtCopyAncestorSensitive(Widget, int, XrmValue *); static XtResource resources[] = { {XtNancestorSensitive, XtCSensitive, XtRBoolean, sizeof(Boolean), XtOffsetOf(RectObjRec,rectangle.ancestor_sensitive),XtRCallProc, (XtPointer)XtCopyAncestorSensitive}, {XtNx, XtCPosition, XtRPosition, sizeof(Position), XtOffsetOf(RectObjRec,rectangle.x), XtRImmediate, (XtPointer)0}, {XtNy, XtCPosition, XtRPosition, sizeof(Position), XtOffsetOf(RectObjRec,rectangle.y), XtRImmediate, (XtPointer)0}, {XtNwidth, XtCWidth, XtRDimension, sizeof(Dimension), XtOffsetOf(RectObjRec,rectangle.width), XtRImmediate, (XtPointer)0}, {XtNheight, XtCHeight, XtRDimension, sizeof(Dimension), XtOffsetOf(RectObjRec,rectangle.height), XtRImmediate, (XtPointer)0}, {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension), XtOffsetOf(RectObjRec,rectangle.border_width), XtRImmediate, (XtPointer)1}, {XtNsensitive, XtCSensitive, XtRBoolean, sizeof(Boolean), XtOffsetOf(RectObjRec,rectangle.sensitive), XtRImmediate, (XtPointer)True} }; static void RectClassPartInitialize(WidgetClass); static void RectSetValuesAlmost(Widget, Widget, XtWidgetGeometry *, XtWidgetGeometry *); externaldef(rectobjclassrec) RectObjClassRec rectObjClassRec = { { /* superclass */ (WidgetClass)&objectClassRec, /* class_name */ "Rect", /* widget_size */ sizeof(RectObjRec), /* class_initialize */ NULL, /* class_part_initialize*/ RectClassPartInitialize, /* class_inited */ FALSE, /* initialize */ NULL, /* initialize_hook */ NULL, /* realize */ NULL, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ RectSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL } }; externaldef(rectObjClass) WidgetClass rectObjClass = (WidgetClass)&rectObjClassRec; /*ARGSUSED*/ static void XtCopyAncestorSensitive( Widget widget, int offset, XrmValue *value) { static Boolean sensitive; Widget parent = widget->core.parent; sensitive = (parent->core.ancestor_sensitive & parent->core.sensitive); value->addr = (XPointer)(&sensitive); } /* * Start of rectangle object methods */ static void RectClassPartInitialize( register WidgetClass wc) { register RectObjClass roc = (RectObjClass)wc; register RectObjClass super = ((RectObjClass)roc->rect_class.superclass); /* We don't need to check for null super since we'll get to object eventually, and it had better define them! */ if (roc->rect_class.resize == XtInheritResize) { roc->rect_class.resize = super->rect_class.resize; } if (roc->rect_class.expose == XtInheritExpose) { roc->rect_class.expose = super->rect_class.expose; } if (roc->rect_class.set_values_almost == XtInheritSetValuesAlmost) { roc->rect_class.set_values_almost = super->rect_class.set_values_almost; } if (roc->rect_class.query_geometry == XtInheritQueryGeometry) { roc->rect_class.query_geometry = super->rect_class.query_geometry; } } /* * Why there isn't an Initialize Method: * * Initialization of the RectObj non-Resource field is done by the * intrinsics in _XtCreateWidget in order that the field is initialized * for use by converters during instance resource resolution. */ /*ARGSUSED*/ static void RectSetValuesAlmost( Widget old, Widget new, XtWidgetGeometry *request, XtWidgetGeometry *reply) { *request = *reply; } libXt-1.1.5/src/Functions.c000064401431060000012000000131111252061032400157540ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Copyright 1985, 1986, 1987, 1988, 1989, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include #include /* * This file defines functional equivalents to all macros defined * in Intrinsic.h * */ #undef XtIsRectObj Boolean XtIsRectObj(Widget object) { return _XtCheckSubclassFlag(object, 0x02); } #undef XtIsWidget Boolean XtIsWidget(Widget object) { return _XtCheckSubclassFlag(object, 0x04); } #undef XtIsComposite Boolean XtIsComposite(Widget object) { return _XtCheckSubclassFlag(object, 0x08); } #undef XtIsConstraint Boolean XtIsConstraint(Widget object) { return _XtCheckSubclassFlag(object, 0x10); } #undef XtIsShell Boolean XtIsShell(Widget object) { return _XtCheckSubclassFlag(object, 0x20); } #undef XtIsOverrideShell Boolean XtIsOverrideShell(Widget object) { return _XtIsSubclassOf(object, (WidgetClass)overrideShellWidgetClass, (WidgetClass)shellWidgetClass, 0x20); } #undef XtIsWMShell Boolean XtIsWMShell(Widget object) { return _XtCheckSubclassFlag(object, 0x40); } #undef XtIsVendorShell Boolean XtIsVendorShell(Widget object) { Boolean retval; LOCK_PROCESS; retval = _XtIsSubclassOf(object, #ifdef notdef /* * We don't refer to vendorShell directly, because some shared libraries * bind local references tightly. */ (WidgetClass)vendorShellWidgetClass, #endif transientShellWidgetClass->core_class.superclass, (WidgetClass)wmShellWidgetClass, 0x40); UNLOCK_PROCESS; return retval; } #undef XtIsTransientShell Boolean XtIsTransientShell(Widget object) { return _XtIsSubclassOf(object, (WidgetClass)transientShellWidgetClass, (WidgetClass)wmShellWidgetClass, 0x40); } #undef XtIsTopLevelShell Boolean XtIsTopLevelShell(Widget object) { return _XtCheckSubclassFlag(object, 0x80); } #undef XtIsApplicationShell Boolean XtIsApplicationShell(Widget object) { return _XtIsSubclassOf(object, (WidgetClass)applicationShellWidgetClass, (WidgetClass)topLevelShellWidgetClass, 0x80); } #undef XtIsSessionShell Boolean XtIsSessionShell(Widget object) { return _XtIsSubclassOf(object, (WidgetClass)sessionShellWidgetClass, (WidgetClass)topLevelShellWidgetClass, 0x80); } #undef XtMapWidget void XtMapWidget(Widget w) { Widget hookobj; WIDGET_TO_APPCON(w); LOCK_APP(app); XMapWindow(XtDisplay(w), XtWindow(w)); hookobj = XtHooksOfDisplay(XtDisplay(w)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHmapWidget; call_data.widget = w; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } #undef XtUnmapWidget void XtUnmapWidget(Widget w) { Widget hookobj; WIDGET_TO_APPCON(w); LOCK_APP(app); XUnmapWindow(XtDisplay(w), XtWindow(w)); hookobj = XtHooksOfDisplay(XtDisplay(w)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHunmapWidget; call_data.widget = w; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } #undef XtNewString String XtNewString(String str) { if (str == NULL) return NULL; else return strcpy(__XtMalloc((unsigned)strlen(str) + 1), str); } libXt-1.1.5/src/Vendor.c000064401431060000012000000120161252061032400152440ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Make sure all wm properties can make it out of the resource manager */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "Shell.h" #include "ShellP.h" #include "Vendor.h" #include "VendorP.h" #include /*************************************************************************** * * Vendor shell class record * ***************************************************************************/ #if defined(__CYGWIN__) || defined(__MINGW32__) /* to fix the EditRes problem because of wrong linker semantics */ extern WidgetClass vendorShellWidgetClass; int __stdcall DllMain(unsigned long mod_handle, unsigned long flag, void *routine) { switch (flag) { case 1: /* DLL_PROCESS_ATTACH - process attach */ vendorShellWidgetClass = (WidgetClass)(&vendorShellClassRec); break; case 0: /* DLL_PROCESS_DETACH - process detach */ break; } return 1; } #endif externaldef(vendorshellclassrec) VendorShellClassRec vendorShellClassRec = { { /* superclass */ (WidgetClass) &wmShellClassRec, /* class_name */ "VendorShell", /* size */ sizeof(VendorShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ NULL, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ NULL, /* resource_count */ 0, /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; #if !defined(AIXSHLIB) || !defined(SHAREDCODE) externaldef(vendorshellwidgetclass) WidgetClass vendorShellWidgetClass = (WidgetClass) (&vendorShellClassRec); #endif ware. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name olibXt-1.1.5/src/PassivGrab.c000064401431060000012000000700371252061032400160570ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /******************************************************** Copyright 1988 by Hewlett-Packard Company Copyright 1987, 1988, 1989,1990 by Digital Equipment Corporation, Maynard, Massachusetts Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 names of Hewlett-Packard or Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ /* Copyright 1987, 1988, 1989, 1990, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "PassivGraI.h" /* typedef unsigned long Mask; */ #define BITMASK(i) (((Mask)1) << ((i) & 31)) #define MASKIDX(i) ((i) >> 5) #define MASKWORD(buf, i) buf[MASKIDX(i)] #define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i) #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) #define MasksPerDetailMask 8 #define pDisplay(grabPtr) (((grabPtr)->widget)->core.screen->display) #define pWindow(grabPtr) (((grabPtr)->widget)->core.window) /***************************************************************************/ /*********************** Internal Support Routines *************************/ /***************************************************************************/ /* * Turn off (clear) the bit in the specified detail mask which is associated * with the detail. */ static void DeleteDetailFromMask( Mask **ppDetailMask, unsigned short detail) { Mask *pDetailMask = *ppDetailMask; if (!pDetailMask) { int i; pDetailMask = (Mask *)__XtMalloc(sizeof(Mask) * MasksPerDetailMask); for (i = MasksPerDetailMask; --i >= 0; ) pDetailMask[i] = ~0; *ppDetailMask = pDetailMask; } BITCLEAR((pDetailMask), detail); } /* * Make an exact copy of the specified detail mask. */ static Mask *CopyDetailMask( Mask *pOriginalDetailMask) { Mask *pTempMask; int i; if (!pOriginalDetailMask) return NULL; pTempMask = (Mask *)__XtMalloc(sizeof(Mask) * MasksPerDetailMask); for ( i = 0; i < MasksPerDetailMask; i++) pTempMask[i]= pOriginalDetailMask[i]; return pTempMask; } /* * Allocate a new grab entry, and fill in all of the fields using the * specified parameters. */ static XtServerGrabPtr CreateGrab( Widget widget, Boolean ownerEvents, Modifiers modifiers, KeyCode keybut, int pointer_mode, int keyboard_mode, Mask event_mask, Window confine_to, Cursor cursor, Boolean need_ext) { XtServerGrabPtr grab; if (confine_to || cursor) need_ext = True; grab = (XtServerGrabPtr)__XtMalloc(sizeof(XtServerGrabRec) + (need_ext ? sizeof(XtServerGrabExtRec) : 0)); grab->next = NULL; grab->widget = widget; grab->ownerEvents = ownerEvents; grab->pointerMode = pointer_mode; grab->keyboardMode = keyboard_mode; grab->eventMask = event_mask; grab->hasExt = need_ext; grab->confineToIsWidgetWin = (XtWindow (widget) == confine_to); grab->modifiers = modifiers; grab->keybut = keybut; if (need_ext) { XtServerGrabExtPtr ext = GRABEXT(grab); ext->pModifiersMask = NULL; ext->pKeyButMask = NULL; ext->confineTo = confine_to; ext->cursor = cursor; } return grab; } /* * Free up the space occupied by a grab entry. */ static void FreeGrab( XtServerGrabPtr pGrab) { if (pGrab->hasExt) { XtServerGrabExtPtr ext = GRABEXT(pGrab); if (ext->pModifiersMask) XtFree((char *)ext->pModifiersMask); if (ext->pKeyButMask) XtFree((char *)ext->pKeyButMask); } XtFree((char *)pGrab); } typedef struct _DetailRec { unsigned short exact; Mask *pMask; } DetailRec, *DetailPtr; /* * If the first detail is set to 'exception' and the second detail * is contained in the mask of the first, then TRUE is returned. */ static Bool IsInGrabMask( register DetailPtr firstDetail, register DetailPtr secondDetail, unsigned short exception) { if (firstDetail->exact == exception) { if (!firstDetail->pMask) return TRUE; /* (at present) never called with two non-null pMasks */ if (secondDetail->exact == exception) return FALSE; if (GETBIT(firstDetail->pMask, secondDetail->exact)) return TRUE; } return FALSE; } /* * If neither of the details is set to 'exception', and they match * exactly, then TRUE is returned. */ static Bool IdenticalExactDetails( unsigned short firstExact, unsigned short secondExact, unsigned short exception) { if ((firstExact == exception) || (secondExact == exception)) return FALSE; if (firstExact == secondExact) return TRUE; return FALSE; } /* * If the first detail is set to 'exception', and its mask has the bit * enabled which corresponds to the second detail, OR if neither of the * details is set to 'exception' and the details match exactly, then * TRUE is returned. */ static Bool DetailSupersedesSecond( register DetailPtr firstDetail, register DetailPtr secondDetail, unsigned short exception) { if (IsInGrabMask(firstDetail, secondDetail, exception)) return TRUE; if (IdenticalExactDetails(firstDetail->exact, secondDetail->exact, exception)) return TRUE; return FALSE; } /* * If the two grab events match exactly, or if the first grab entry * 'encompasses' the second grab entry, then TRUE is returned. */ static Bool GrabSupersedesSecond( register XtServerGrabPtr pFirstGrab, register XtServerGrabPtr pSecondGrab) { DetailRec first, second; first.exact = pFirstGrab->modifiers; if (pFirstGrab->hasExt) first.pMask = GRABEXT(pFirstGrab)->pModifiersMask; else first.pMask = NULL; second.exact = pSecondGrab->modifiers; if (pSecondGrab->hasExt) second.pMask = GRABEXT(pSecondGrab)->pModifiersMask; else second.pMask = NULL; if (!DetailSupersedesSecond(&first, &second, (unsigned short)AnyModifier)) return FALSE; first.exact = pFirstGrab->keybut; if (pFirstGrab->hasExt) first.pMask = GRABEXT(pFirstGrab)->pKeyButMask; else first.pMask = NULL; second.exact = pSecondGrab->keybut; if (pSecondGrab->hasExt) second.pMask = GRABEXT(pSecondGrab)->pKeyButMask; else second.pMask = NULL; if (DetailSupersedesSecond(&first, &second, (unsigned short)AnyKey)) return TRUE; return FALSE; } /* * Two grabs are considered to be matching if either of the following are true: * * 1) The two grab entries match exactly, or the first grab entry * encompasses the second grab entry. * 2) The second grab entry encompasses the first grab entry. * 3) The keycodes match exactly, and one entry's modifiers encompasses * the others. * 4) The keycode for one entry encompasses the other, and the detail * for the other entry encompasses the first. */ static Bool GrabMatchesSecond( register XtServerGrabPtr pFirstGrab, register XtServerGrabPtr pSecondGrab) { DetailRec firstD, firstM, secondD, secondM; if (pDisplay(pFirstGrab) != pDisplay(pSecondGrab)) return FALSE; if (GrabSupersedesSecond(pFirstGrab, pSecondGrab)) return TRUE; if (GrabSupersedesSecond(pSecondGrab, pFirstGrab)) return TRUE; firstD.exact = pFirstGrab->keybut; firstM.exact = pFirstGrab->modifiers; if (pFirstGrab->hasExt) { firstD.pMask = GRABEXT(pFirstGrab)->pKeyButMask; firstM.pMask = GRABEXT(pFirstGrab)->pModifiersMask; } else { firstD.pMask = NULL; firstM.pMask = NULL; } secondD.exact = pSecondGrab->keybut; secondM.exact = pSecondGrab->modifiers; if (pSecondGrab->hasExt) { secondD.pMask = GRABEXT(pSecondGrab)->pKeyButMask; secondM.pMask = GRABEXT(pSecondGrab)->pModifiersMask; } else { secondD.pMask = NULL; secondM.pMask = NULL; } if (DetailSupersedesSecond(&secondD, &firstD, (unsigned short)AnyKey) && DetailSupersedesSecond(&firstM, &secondM, (unsigned short)AnyModifier)) return TRUE; if (DetailSupersedesSecond(&firstD, &secondD, (unsigned short)AnyKey) && DetailSupersedesSecond(&secondM, &firstM, (unsigned short)AnyModifier)) return TRUE; return FALSE; } /* * Delete a grab combination from the passive grab list. Each entry will * be checked to see if it is affected by the grab being deleted. This * may result in multiple entries being modified/deleted. */ static void DeleteServerGrabFromList( XtServerGrabPtr *passiveListPtr, XtServerGrabPtr pMinuendGrab) { register XtServerGrabPtr *next; register XtServerGrabPtr grab; register XtServerGrabExtPtr ext; for (next = passiveListPtr; (grab = *next); ) { if (GrabMatchesSecond(grab, pMinuendGrab) && (pDisplay(grab) == pDisplay(pMinuendGrab))) { if (GrabSupersedesSecond(pMinuendGrab, grab)) { /* * The entry being deleted encompasses the list entry, * so delete the list entry. */ *next = grab->next; FreeGrab(grab); continue; } if (!grab->hasExt) { grab = (XtServerGrabPtr) XtRealloc((char *)grab, (sizeof(XtServerGrabRec) + sizeof(XtServerGrabExtRec))); *next = grab; grab->hasExt = True; ext = GRABEXT(grab); ext->pKeyButMask = NULL; ext->pModifiersMask = NULL; ext->confineTo = None; ext->cursor = None; } else ext = GRABEXT(grab); if ((grab->keybut == AnyKey) && (grab->modifiers != AnyModifier)) { /* * If the list entry has the key detail of AnyKey, and * a modifier detail not set to AnyModifier, then we * simply need to turn off the key detail bit in the * list entry's key detail mask. */ DeleteDetailFromMask(&ext->pKeyButMask, pMinuendGrab->keybut); } else if ((grab->modifiers == AnyModifier) && (grab->keybut != AnyKey)) { /* * The list entry has a specific key detail, but its * modifier detail is set to AnyModifier; so, we only * need to turn off the specified modifier combination * in the list entry's modifier mask. */ DeleteDetailFromMask(&ext->pModifiersMask, pMinuendGrab->modifiers); } else if ((pMinuendGrab->keybut != AnyKey) && (pMinuendGrab->modifiers != AnyModifier)) { /* * The list entry has a key detail of AnyKey and a * modifier detail of AnyModifier; the entry being * deleted has a specific key and a specific modifier * combination. Therefore, we need to mask off the * keycode from the list entry, and also create a * new entry for this keycode, which has a modifier * mask set to AnyModifier & ~(deleted modifiers). */ XtServerGrabPtr pNewGrab; DeleteDetailFromMask(&ext->pKeyButMask, pMinuendGrab->keybut); pNewGrab = CreateGrab(grab->widget, (Boolean)grab->ownerEvents, (Modifiers)AnyModifier, pMinuendGrab->keybut, (int)grab->pointerMode, (int)grab->keyboardMode, (Mask)0, (Window)0, (Cursor)0, True); GRABEXT(pNewGrab)->pModifiersMask = CopyDetailMask(ext->pModifiersMask); DeleteDetailFromMask(&GRABEXT(pNewGrab)->pModifiersMask, pMinuendGrab->modifiers); pNewGrab->next = *passiveListPtr; *passiveListPtr = pNewGrab; } else if (pMinuendGrab->keybut == AnyKey) { /* * The list entry has keycode AnyKey and modifier * AnyModifier; the entry being deleted has * keycode AnyKey and specific modifiers. So we * simply need to mask off the specified modifier * combination. */ DeleteDetailFromMask(&ext->pModifiersMask, pMinuendGrab->modifiers); } else { /* * The list entry has keycode AnyKey and modifier * AnyModifier; the entry being deleted has a * specific keycode and modifier AnyModifier. So * we simply need to mask off the specified * keycode. */ DeleteDetailFromMask(&ext->pKeyButMask, pMinuendGrab->keybut); } } next = &(*next)->next; } } static void DestroyPassiveList( XtServerGrabPtr *passiveListPtr) { XtServerGrabPtr next, grab; for (next = *passiveListPtr; next; ) { grab = next; next = grab->next; /* not necessary to explicitly ungrab key or button; * window is being destroyed so server will take care of it. */ FreeGrab(grab); } } /* * This function is called at widget destroy time to clean up */ /*ARGSUSED*/ void _XtDestroyServerGrabs( Widget w, XtPointer closure, XtPointer call_data) /* unused */ { XtPerWidgetInput pwi = (XtPerWidgetInput)closure; XtPerDisplayInput pdi; LOCK_PROCESS; pdi = _XtGetPerDisplayInput(XtDisplay(w)); _XtClearAncestorCache(w); UNLOCK_PROCESS; /* Remove the active grab, if necessary */ if ((pdi->keyboard.grabType != XtNoServerGrab) && (pdi->keyboard.grab.widget == w)) { pdi->keyboard.grabType = XtNoServerGrab; pdi->activatingKey = (KeyCode)0; } if ((pdi->pointer.grabType != XtNoServerGrab) && (pdi->pointer.grab.widget == w)) pdi->pointer.grabType = XtNoServerGrab; DestroyPassiveList(&pwi->keyList); DestroyPassiveList(&pwi->ptrList); _XtFreePerWidgetInput(w, pwi); } /* * If the incoming event is on the passive grab list, then activate * the grab. The grab will remain in effect until the key is released. */ XtServerGrabPtr _XtCheckServerGrabsOnWidget ( XEvent *event, Widget widget, _XtBoolean isKeyboard) { register XtServerGrabPtr grab; XtServerGrabRec tempGrab; XtServerGrabPtr *passiveListPtr; XtPerWidgetInput pwi; LOCK_PROCESS; pwi = _XtGetPerWidgetInput(widget, FALSE); UNLOCK_PROCESS; if (!pwi) return (XtServerGrabPtr)NULL; if (isKeyboard) passiveListPtr = &pwi->keyList; else passiveListPtr = &pwi->ptrList; /* * if either there is no entry in the context manager or the entry * is empty, or the keyboard is grabed, then no work to be done */ if (!*passiveListPtr) return (XtServerGrabPtr)NULL; /* Take only the lower thirteen bits as modifier state. The X Keyboard * Extension may be representing keyboard group state in two upper bits. */ tempGrab.widget = widget; tempGrab.keybut = event->xkey.keycode; /* also xbutton.button */ tempGrab.modifiers = event->xkey.state & 0x1FFF; /*also xbutton.state*/ tempGrab.hasExt = False; for (grab = *passiveListPtr; grab; grab = grab->next) { if (GrabMatchesSecond(&tempGrab, grab)) return (grab); } return (XtServerGrabPtr)NULL; } /* * This handler is needed to guarantee that we see releases on passive * button grabs for widgets that haven't selected for button release. */ /*ARGSUSED*/ static void ActiveHandler ( Widget widget, XtPointer pdi, XEvent *event, Boolean *cont) { /* nothing */ } /* * MakeGrab */ static void MakeGrab( XtServerGrabPtr grab, XtServerGrabPtr *passiveListPtr, Boolean isKeyboard, XtPerDisplayInput pdi, XtPerWidgetInput pwi) { if (!isKeyboard && !pwi->active_handler_added) { XtAddEventHandler(grab->widget, ButtonReleaseMask, FALSE, ActiveHandler, (XtPointer)pdi); pwi->active_handler_added = TRUE; } if (isKeyboard) { XGrabKey(pDisplay(grab), grab->keybut, grab->modifiers, pWindow(grab), grab->ownerEvents, grab->pointerMode, grab->keyboardMode); } else { Window confineTo = None; Cursor cursor = None; if (grab->hasExt) { if (grab->confineToIsWidgetWin) confineTo = XtWindow (grab->widget); else confineTo = GRABEXT(grab)->confineTo; cursor = GRABEXT(grab)->cursor; } XGrabButton(pDisplay(grab), grab->keybut, grab->modifiers, pWindow(grab), grab->ownerEvents, grab->eventMask, grab->pointerMode, grab->keyboardMode, confineTo, cursor); } /* Add the new grab entry to the passive key grab list */ grab->next = *passiveListPtr; *passiveListPtr = grab; } static void MakeGrabs( XtServerGrabPtr *passiveListPtr, Boolean isKeyboard, XtPerDisplayInput pdi) { XtServerGrabPtr next = *passiveListPtr; XtServerGrabPtr grab; XtPerWidgetInput pwi; /* * make MakeGrab build a new list that has had the merge * processing done on it. Start with an empty list * (passiveListPtr). */ LOCK_PROCESS; *passiveListPtr = NULL; while (next) { grab = next; next = grab->next; pwi = _XtGetPerWidgetInput(grab->widget, FALSE); MakeGrab(grab, passiveListPtr, isKeyboard, pdi, pwi); } UNLOCK_PROCESS; } /* * This function is the event handler attached to the associated widget * when grabs need to be added, but the widget is not yet realized. When * it is first mapped, this handler will be invoked, and it will add all * needed grabs. */ /*ARGSUSED*/ static void RealizeHandler ( Widget widget, XtPointer closure, XEvent *event, /* unused */ Boolean *cont) /* unused */ { XtPerWidgetInput pwi = (XtPerWidgetInput)closure; XtPerDisplayInput pdi; LOCK_PROCESS; pdi = _XtGetPerDisplayInput(XtDisplay(widget)); UNLOCK_PROCESS; MakeGrabs(&pwi->keyList, KEYBOARD, pdi); MakeGrabs(&pwi->ptrList, POINTER, pdi); XtRemoveEventHandler(widget, XtAllEvents, True, RealizeHandler, (XtPointer)pwi); pwi->realize_handler_added = FALSE; } /***************************************************************************/ /**************************** Global Routines ******************************/ /***************************************************************************/ /* * Routine used by an application to set up a passive grab for a key/modifier * combination. */ static void GrabKeyOrButton ( Widget widget, KeyCode keyOrButton, Modifiers modifiers, Boolean owner_events, int pointer_mode, int keyboard_mode, Mask event_mask, Window confine_to, Cursor cursor, Boolean isKeyboard) { XtServerGrabPtr *passiveListPtr; XtServerGrabPtr newGrab; XtPerWidgetInput pwi; XtPerDisplayInput pdi; XtCheckSubclass(widget, coreWidgetClass, "in XtGrabKey or XtGrabButton"); LOCK_PROCESS; pwi = _XtGetPerWidgetInput(widget, TRUE); if (isKeyboard) passiveListPtr = &pwi->keyList; else passiveListPtr = &pwi->ptrList; pdi = _XtGetPerDisplayInput(XtDisplay(widget)); UNLOCK_PROCESS; newGrab = CreateGrab(widget, owner_events, modifiers, keyOrButton, pointer_mode, keyboard_mode, event_mask, confine_to, cursor, False); /* * if the widget is realized then process the entry into the grab * list. else if the list is empty (i.e. first time) then add the * event handler. then add the raw entry to the list for processing * in the handler at realize time. */ if (XtIsRealized(widget)) MakeGrab(newGrab, passiveListPtr, isKeyboard, pdi, pwi); else { if (!pwi->realize_handler_added) { XtAddEventHandler(widget, StructureNotifyMask, FALSE, RealizeHandler, (XtPointer)pwi); pwi->realize_handler_added = TRUE; } while (*passiveListPtr) passiveListPtr = &(*passiveListPtr)->next; *passiveListPtr = newGrab; } } static void UngrabKeyOrButton ( Widget widget, int keyOrButton, Modifiers modifiers, Boolean isKeyboard) { XtServerGrabRec tempGrab; XtPerWidgetInput pwi; XtCheckSubclass(widget, coreWidgetClass, "in XtUngrabKey or XtUngrabButton"); /* Build a temporary grab list entry */ tempGrab.widget = widget; tempGrab.modifiers = modifiers; tempGrab.keybut = keyOrButton; tempGrab.hasExt = False; LOCK_PROCESS; pwi = _XtGetPerWidgetInput(widget, FALSE); UNLOCK_PROCESS; /* * if there is no entry in the context manager then somethings wrong */ if (!pwi) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidGrab", "ungrabKeyOrButton", XtCXtToolkitError, "Attempt to remove nonexistent passive grab", (String *)NULL, (Cardinal *)NULL); return; } if (XtIsRealized(widget)) { if (isKeyboard) XUngrabKey(widget->core.screen->display, keyOrButton, (unsigned int)modifiers, widget->core.window); else XUngrabButton(widget->core.screen->display, keyOrButton, (unsigned int)modifiers, widget->core.window); } /* Delete all entries which are encompassed by the specified grab. */ DeleteServerGrabFromList(isKeyboard ? &pwi->keyList : &pwi->ptrList, &tempGrab); } void XtGrabKey ( Widget widget, _XtKeyCode keycode, Modifiers modifiers, _XtBoolean owner_events, int pointer_mode, int keyboard_mode) { WIDGET_TO_APPCON(widget); LOCK_APP(app); GrabKeyOrButton(widget, (KeyCode)keycode, modifiers, owner_events, pointer_mode, keyboard_mode, (Mask)0, (Window)None, (Cursor)None, KEYBOARD); UNLOCK_APP(app); } void XtGrabButton( Widget widget, int button, Modifiers modifiers, _XtBoolean owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode, Window confine_to, Cursor cursor) { WIDGET_TO_APPCON(widget); LOCK_APP(app); GrabKeyOrButton(widget, (KeyCode)button, modifiers, owner_events, pointer_mode, keyboard_mode, (Mask)event_mask, confine_to, cursor, POINTER); UNLOCK_APP(app); } /* * Routine used by an application to clear a passive grab for a key/modifier * combination. */ void XtUngrabKey ( Widget widget, _XtKeyCode keycode, Modifiers modifiers) { WIDGET_TO_APPCON(widget); LOCK_APP(app); UngrabKeyOrButton(widget, (int)keycode, modifiers, KEYBOARD); UNLOCK_APP(app); } void XtUngrabButton ( Widget widget, unsigned int button, Modifiers modifiers) { WIDGET_TO_APPCON(widget); LOCK_APP(app); UngrabKeyOrButton(widget, (KeyCode)button, modifiers, POINTER); UNLOCK_APP(app); } /* * Active grab of Device. clear any client side grabs so we dont lock */ static int GrabDevice ( Widget widget, Boolean owner_events, int pointer_mode, int keyboard_mode, Mask event_mask, Window confine_to, Cursor cursor, Time time, Boolean isKeyboard) { XtPerDisplayInput pdi; int returnVal; XtCheckSubclass(widget, coreWidgetClass, "in XtGrabKeyboard or XtGrabPointer"); if (!XtIsRealized(widget)) return GrabNotViewable; LOCK_PROCESS; pdi = _XtGetPerDisplayInput(XtDisplay(widget)); UNLOCK_PROCESS; if (!isKeyboard) returnVal = XGrabPointer(XtDisplay(widget), XtWindow(widget), owner_events, event_mask, pointer_mode, keyboard_mode, confine_to, cursor, time); else returnVal = XGrabKeyboard(XtDisplay(widget), XtWindow(widget), owner_events, pointer_mode, keyboard_mode, time); if (returnVal == GrabSuccess) { XtDevice device; device = isKeyboard ? &pdi->keyboard : &pdi->pointer; /* fill in the server grab rec */ device->grab.widget = widget; device->grab.modifiers = 0; device->grab.keybut = 0; device->grab.ownerEvents = owner_events; device->grab.pointerMode = pointer_mode; device->grab.keyboardMode = keyboard_mode; device->grab.hasExt = False; device->grabType = XtActiveServerGrab; pdi->activatingKey = (KeyCode)0; } return returnVal; } static void UngrabDevice( Widget widget, Time time, Boolean isKeyboard) { XtPerDisplayInput pdi; XtDevice device; LOCK_PROCESS; pdi = _XtGetPerDisplayInput(XtDisplay(widget)); UNLOCK_PROCESS; device = isKeyboard ? &pdi->keyboard : &pdi->pointer; XtCheckSubclass(widget, coreWidgetClass, "in XtUngrabKeyboard or XtUngrabPointer"); if (device->grabType != XtNoServerGrab) { if (device->grabType != XtPseudoPassiveServerGrab && XtIsRealized(widget)) { if (isKeyboard) XUngrabKeyboard(XtDisplay(widget), time); else XUngrabPointer(XtDisplay(widget), time); } device->grabType = XtNoServerGrab; pdi->activatingKey = (KeyCode)0; } } /* * Active grab of keyboard. clear any client side grabs so we dont lock */ int XtGrabKeyboard ( Widget widget, _XtBoolean owner_events, int pointer_mode, int keyboard_mode, Time time) { int retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); retval = GrabDevice (widget, owner_events, pointer_mode, keyboard_mode, (Mask)0, (Window)None, (Cursor)None, time, KEYBOARD); UNLOCK_APP(app); return retval; } /* * Ungrab the keyboard */ void XtUngrabKeyboard( Widget widget, Time time) { WIDGET_TO_APPCON(widget); LOCK_APP(app); UngrabDevice(widget, time, KEYBOARD); UNLOCK_APP(app); } /* * grab the pointer */ int XtGrabPointer ( Widget widget, _XtBoolean owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode, Window confine_to, Cursor cursor, Time time) { int retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); retval = GrabDevice (widget, owner_events, pointer_mode, keyboard_mode, (Mask)event_mask, confine_to, cursor, time, POINTER); UNLOCK_APP(app); return retval; } /* * Ungrab the pointer */ void XtUngrabPointer( Widget widget, Time time) { WIDGET_TO_APPCON(widget); LOCK_APP(app); UngrabDevice(widget, time, POINTER); UNLOCK_APP(app); } void _XtRegisterPassiveGrabs ( Widget widget) { XtPerWidgetInput pwi = _XtGetPerWidgetInput (widget, FALSE); if (pwi != NULL && !pwi->realize_handler_added) { XtAddEventHandler(widget, StructureNotifyMask, FALSE, RealizeHandler, (XtPointer)pwi); pwi->realize_handler_added = TRUE; } } b)->cursor; } XGrabButton(pDisplay(grab), grab->keybut, grab->modifiers, pWindow(grab), grab->ownerEvents, grab->eventMask, grab->pointerMode, grab->keyboardMode, confineTo, cursor); } /* Add the new grab entry to the passive key grab list */ grab->next = *passiveListPtr; *passiveListPtr = grab; } static void MakeGrabs( XtServerGrabPtr *passiveListPtr, Boolean isKeyboard, XtPerDisplayInput pdi) { XtServerGrabPtr nextlibXt-1.1.5/src/PopupCB.c000064401431060000012000000057511252061032400153270ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" /* ARGSUSED */ void XtCallbackNone( Widget widget, XtPointer closure, XtPointer call_data) { XtSetSensitive(widget, FALSE); _XtPopup((Widget) closure, XtGrabNone, FALSE); } /* XtCallbackNone */ /* ARGSUSED */ void XtCallbackNonexclusive( Widget widget, XtPointer closure, XtPointer call_data) { XtSetSensitive(widget, FALSE); _XtPopup((Widget) closure, XtGrabNonexclusive, FALSE); } /* XtCallbackNonexclusive */ /* ARGSUSED */ void XtCallbackExclusive( Widget widget, XtPointer closure, XtPointer call_data) { XtSetSensitive(widget, FALSE); _XtPopup((Widget) closure, XtGrabExclusive, FALSE); } /* XtCallbackExclusive */ libXt-1.1.5/src/Keyboard.c000064401431060000012000000550141252061032400155540ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /******************************************************** Copyright 1988 by Hewlett-Packard Company Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 names of Hewlett-Packard or Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "PassivGraI.h" #include "EventI.h" #define _GetWindowedAncestor(w) (XtIsWidget(w) ? w : _XtWindowedAncestor(w)) /* InActiveSubtree cache of the current focus source and its ancestors */ static Widget *pathTrace = NULL; static int pathTraceDepth = 0; static int pathTraceMax = 0; /* FindKeyDestination cache of focus destination and ancestors up to source */ static Widget *pseudoTrace = NULL; static int pseudoTraceDepth = 0; static int pseudoTraceMax = 0; void _XtClearAncestorCache(Widget widget) { /* the caller must lock the process lock */ if (pathTraceDepth && pathTrace[0] == widget) pathTraceDepth = 0; } static XtServerGrabPtr CheckServerGrabs( XEvent *event, Widget *trace, Cardinal traceDepth) { XtServerGrabPtr grab; Cardinal i; for (i = traceDepth; i > 0; i--) { if ((grab = _XtCheckServerGrabsOnWidget(event, trace[i-1], KEYBOARD))) return (grab); } return (XtServerGrabPtr)0; } static Boolean IsParent(Widget a, Widget b) { for (b = XtParent(b); b; b = XtParent(b)) { if (b == a) return TRUE; if (XtIsShell(b)) return FALSE; } return FALSE; } #define RelRtn(lca, type) {*relTypeRtn = type; return lca;} static Widget CommonAncestor( register Widget a, register Widget b, XtGeneology * relTypeRtn) { if (a == b) { RelRtn(a, XtMySelf) } else if (IsParent(a, b)) { RelRtn(a, XtMyAncestor) } else if (IsParent(b, a)) { RelRtn(b, XtMyDescendant) } else for (b = XtParent(b); b && !XtIsShell(b); b = XtParent(b)) if (IsParent(b, a)) { RelRtn(b, XtMyCousin) } RelRtn(NULL, XtUnrelated) } #undef RelRtn static Widget _FindFocusWidget( Widget widget, Widget *trace, int traceDepth, Boolean activeCheck, Boolean *isTarget) { int src; Widget dst; XtPerWidgetInput pwi = NULL; /* For each ancestor, starting at the top, see if it's forwarded */ /* first check the trace list till done or we go to branch */ for (src = traceDepth-1, dst = widget; src > 0;) { if ((pwi = _XtGetPerWidgetInput(trace[src], FALSE))) { if (pwi->focusKid) { dst = pwi->focusKid; for (src--; src > 0 && trace[src] != dst; src--) {} } else dst = trace[--src]; } else dst = trace[--src]; } if (isTarget) { if (pwi && pwi->focusKid == widget) *isTarget = TRUE; else *isTarget = FALSE; } if (!activeCheck) while (XtIsWidget(dst) && (pwi = _XtGetPerWidgetInput(dst, FALSE)) && pwi->focusKid) dst = pwi->focusKid; return dst; } static Widget FindFocusWidget( Widget widget, XtPerDisplayInput pdi) { if (pdi->focusWidget) return pdi->focusWidget; else return _FindFocusWidget(widget, pdi->trace, pdi->traceDepth, FALSE, NULL); } Widget XtGetKeyboardFocusWidget(Widget widget) { XtPerDisplayInput pdi; Widget retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); pdi = _XtGetPerDisplayInput(XtDisplay(widget)); retval = FindFocusWidget(widget, pdi); UNLOCK_APP(app); return retval; } static Boolean IsOutside( XKeyEvent *e, Widget w) { Position left, right, top, bottom; /* * if the pointer is outside the shell or inside * the window try to see if it would recieve the * focus */ XtTranslateCoords(w, 0, 0, &left, &top); /* We need to take borders into consideration */ left = left - w->core.border_width; top = top - w->core.border_width; right = left + w->core.width + w->core.border_width; bottom = top + w->core.height + w->core.border_width; if ( (e->x_root < left) || (e->y_root < top) || (e->x_root > right) || (e->y_root > bottom)) return TRUE; else return FALSE; } static Widget FindKeyDestination( Widget widget, XKeyEvent *event, XtServerGrabPtr prevGrab, XtServerGrabType prevGrabType, XtServerGrabPtr devGrab, XtServerGrabType devGrabType, XtPerDisplayInput pdi) { Widget dspWidget; Widget focusWidget; LOCK_PROCESS; dspWidget = focusWidget = pdi->focusWidget = _GetWindowedAncestor(FindFocusWidget(widget, pdi)); /* * If a grab is active from a previous activation then dispatch * based on owner_events ala protocol but with focus being * determined by XtSetKeyboardFocus. */ if (IsAnyGrab(prevGrabType)) { if (prevGrab->ownerEvents) dspWidget = focusWidget; else dspWidget = prevGrab->widget; } else { /* * If the focus widget is the event widget or a descendant * then we can avoid the rest of this. Else ugh... */ if (focusWidget != widget) { XtGeneology ewRelFw; /* relationship of event widget to focusWidget */ Widget lca; lca = CommonAncestor(widget, focusWidget, &ewRelFw); /* * if the event widget is an ancestor of focus due to the pointer * and/or the grab being in an ancestor and it's a passive grab * send to grab widget. * we are also dispatching to widget if ownerEvents and the event * is outside the client */ if ((ewRelFw == XtMyAncestor) && (devGrabType == XtPassiveServerGrab)) { if (IsOutside(event, widget) || event->type ==KeyPress ) dspWidget = devGrab->widget; } else { /* * if the grab widget is not an ancestor of the focus * release the grab in order to avoid locking. There * is a possible case in that ownerEvents true will fall * through and if synch is set and the event widget * could turn it off we'll lock. check for it ? why not */ if ((ewRelFw != XtMyAncestor) && (devGrabType == XtPassiveServerGrab) && (!IsAnyGrab(prevGrabType)) ) { XtUngrabKeyboard(devGrab->widget, event->time); devGrabType = XtNoServerGrab; } /* * if there isn't a grab with then check * for a logical grab that would have been activated * if the server was using Xt focus instead of server * focus */ if ( (event->type != KeyPress) || (event->keycode == 0) /* Xlib XIM composed input */ ) dspWidget = focusWidget; else { XtServerGrabPtr grab; if (!pseudoTraceDepth || !(focusWidget == pseudoTrace[0]) || !(lca == pseudoTrace[pseudoTraceDepth])) { /* * fill ancestor list from lca * (non-inclusive)to focusWidget by * passing in lca as breakWidget */ _XtFillAncestorList(&pseudoTrace, &pseudoTraceMax, &pseudoTraceDepth, focusWidget, lca); /* ignore lca */ pseudoTraceDepth--; } if ((grab = CheckServerGrabs((XEvent*)event, pseudoTrace, pseudoTraceDepth))) { XtDevice device = &pdi->keyboard; device->grabType = XtPseudoPassiveServerGrab; pdi->activatingKey = event->keycode; device->grab = *grab; if (grab ) dspWidget = grab->widget; else dspWidget = focusWidget; } } } } } UNLOCK_PROCESS; return dspWidget; } Widget _XtProcessKeyboardEvent( XKeyEvent *event, Widget widget, XtPerDisplayInput pdi) { XtDevice device = &pdi->keyboard; XtServerGrabPtr newGrab, devGrab = &device->grab; XtServerGrabRec prevGrabRec; XtServerGrabType prevGrabType = device->grabType; Widget dspWidget = NULL; Boolean deactivateGrab = FALSE; prevGrabRec = *devGrab; switch (event->type) { case KeyPress: { if (event->keycode != 0 && /* Xlib XIM composed input */ !IsServerGrab(device->grabType) && (newGrab = CheckServerGrabs((XEvent*)event, pdi->trace, pdi->traceDepth))) { /* * honor pseudo-grab from prior event by X * unlocking keyboard. Not Xt Unlock ! */ if (IsPseudoGrab(prevGrabType)) XUngrabKeyboard(XtDisplay(newGrab->widget), event->time); else { /* Activate the grab */ device->grab = *newGrab; pdi->activatingKey = event->keycode; device->grabType = XtPassiveServerGrab; } } } break; case KeyRelease: { if (IsEitherPassiveGrab(device->grabType) && (event->keycode == pdi->activatingKey)) deactivateGrab = TRUE; } break; } dspWidget = FindKeyDestination(widget, event, &prevGrabRec, prevGrabType, devGrab, device->grabType, pdi); if (deactivateGrab) { /* Deactivate the grab */ device->grabType = XtNoServerGrab; pdi->activatingKey = 0; } return dspWidget; } static Widget GetShell(Widget widget) { Widget shell; for (shell = widget; shell && !XtIsShell(shell); shell = XtParent(shell)){} return shell; } /* * Check that widget really has Xt focus due to it having recieved an * event */ typedef enum {NotActive = 0, IsActive, IsTarget} ActiveType; static ActiveType InActiveSubtree(Widget widget) { Boolean isTarget; ActiveType retval; LOCK_PROCESS; if (!pathTraceDepth || widget != pathTrace[0]) { _XtFillAncestorList(&pathTrace, &pathTraceMax, &pathTraceDepth, widget, NULL); } if (widget == _FindFocusWidget(widget, pathTrace, pathTraceDepth, TRUE, &isTarget)) retval = (isTarget ? IsTarget : IsActive); else retval = NotActive; UNLOCK_PROCESS; return retval; } /* ARGSUSED */ void _XtHandleFocus( Widget widget, XtPointer client_data, /* child who wants focus */ XEvent *event, Boolean *cont) /* unused */ { XtPerDisplayInput pdi = _XtGetPerDisplayInput(XtDisplay(widget)); XtPerWidgetInput pwi = (XtPerWidgetInput)client_data; XtGeneology oldFocalPoint = pwi->focalPoint; XtGeneology newFocalPoint = pwi->focalPoint; switch( event->type ) { case KeyPress: case KeyRelease: /* * We're getting the keyevents used to guarantee propagating * child interest ala ForwardEvent in R3 */ return; case EnterNotify: case LeaveNotify: /* * If operating in a focus driven model, then enter and * leave events do not affect the keyboard focus. */ if ((event->xcrossing.detail != NotifyInferior) && (event->xcrossing.focus)) { switch (oldFocalPoint) { case XtMyAncestor: if (event->type == LeaveNotify) newFocalPoint = XtUnrelated; break; case XtUnrelated: if (event->type == EnterNotify) newFocalPoint = XtMyAncestor; break; case XtMySelf: break; case XtMyDescendant: break; } } break; case FocusIn: switch (event->xfocus.detail) { case NotifyNonlinear: case NotifyAncestor: case NotifyInferior: newFocalPoint = XtMySelf; break; case NotifyNonlinearVirtual: case NotifyVirtual: newFocalPoint = XtMyDescendant; break; case NotifyPointer: newFocalPoint = XtMyAncestor; break; } break; case FocusOut: switch (event->xfocus.detail) { case NotifyPointer: case NotifyNonlinear: case NotifyAncestor: case NotifyNonlinearVirtual: case NotifyVirtual: newFocalPoint = XtUnrelated; break; case NotifyInferior: newFocalPoint = XtMyDescendant; return; break; } break; } if (newFocalPoint != oldFocalPoint) { Boolean add; Widget descendant = pwi->focusKid; pwi->focalPoint = newFocalPoint; if ((oldFocalPoint == XtUnrelated) && InActiveSubtree(widget) != NotActive) { pdi->focusWidget = NULL; /* invalidate the cache */ pwi->haveFocus = TRUE; add = TRUE; } else if (newFocalPoint == XtUnrelated) { pdi->focusWidget = NULL; /* invalidate the cache */ pwi->haveFocus = FALSE; add = FALSE; } else return; if (descendant) { if (add) { _XtSendFocusEvent(descendant, FocusIn); } else { _XtSendFocusEvent(descendant, FocusOut); } } } } static void AddFocusHandler( Widget widget, Widget descendant, XtPerWidgetInput pwi, XtPerWidgetInput psi, XtPerDisplayInput pdi, EventMask oldEventMask) { EventMask eventMask, targetEventMask; Widget target; /* * widget must now select for key events if the descendant is * interested in them. * * shell borders are not occluded by the child, they're occluded * by reparenting window managers. !!! */ target = descendant ? _GetWindowedAncestor(descendant) : NULL; targetEventMask = XtBuildEventMask(target); eventMask = targetEventMask & (KeyPressMask | KeyReleaseMask); eventMask |= FocusChangeMask | EnterWindowMask | LeaveWindowMask; if (oldEventMask) { oldEventMask &= KeyPressMask | KeyReleaseMask; oldEventMask |= FocusChangeMask | EnterWindowMask | LeaveWindowMask; if (oldEventMask != eventMask) XtRemoveEventHandler(widget, (oldEventMask & ~eventMask), False, _XtHandleFocus, (XtPointer)pwi); } if (oldEventMask != eventMask) XtAddEventHandler(widget, eventMask, False, _XtHandleFocus, (XtPointer)pwi); /* What follows is too much grief to go through if the * target doesn't actually care about focus change events, * so just invalidate the focus cache & refill it when * the next input event actually arrives. */ if (!(targetEventMask & FocusChangeMask)) { pdi->focusWidget = NULL; return; } if (XtIsRealized(widget) && !pwi->haveFocus) { if (psi->haveFocus) { Window root, child; int root_x, root_y, win_x, win_y; int left, right, top, bottom; unsigned int modMask; ActiveType act; /* * If the shell has the focus but the source widget * doesn't, it may only be because the source widget * wasn't previously tracking focus or crossing events. * If the target wants focus events, we have to * now determine whether the source has the focus. */ if ((act = InActiveSubtree(widget)) == IsTarget) pwi->haveFocus = TRUE; else if (act == IsActive) { /* * An ancestor contains the focus, so if source * contains the pointer, then source has the focus. */ if (XQueryPointer(XtDisplay(widget), XtWindow(widget), &root, &child, &root_x, &root_y, &win_x, &win_y, &modMask)) { /* We need to take borders into consideration */ left = top = -((int) widget->core.border_width); right = (int) (widget->core.width + (widget->core.border_width << 1)); bottom = (int) (widget->core.height + (widget->core.border_width << 1)); if (win_x >= left && win_x < right && win_y >= top && win_y < bottom) pwi->haveFocus = TRUE; } } } } if (pwi->haveFocus) { pdi->focusWidget = NULL; /* invalidate the cache */ _XtSendFocusEvent(target, FocusIn); } } /* ARGSUSED */ static void QueryEventMask( Widget widget, /* child who gets focus */ XtPointer client_data, /* ancestor giving it */ XEvent *event, Boolean *cont) /* unused */ { /* widget was once the target of an XtSetKeyboardFocus but * was unrealized at the time. Make sure ancestor still wants * focus set here then install the handler now that we know the * complete event mask. */ Widget ancestor = (Widget)client_data; XtPerWidgetInput pwi = _XtGetPerWidgetInput(ancestor, FALSE); if (pwi) { Widget target = pwi->queryEventDescendant; /* use of 'target' is non-standard hackery; allows focus to non-widget */ if ( pwi->focusKid == target ) { AddFocusHandler(ancestor, target, pwi, _XtGetPerWidgetInput(GetShell(ancestor), TRUE), _XtGetPerDisplayInput(XtDisplay(ancestor)), (EventMask)0); } XtRemoveEventHandler(widget, XtAllEvents, True, QueryEventMask, client_data); pwi->map_handler_added = FALSE; } } /* ARGSUSED */ static void FocusDestroyCallback( Widget widget, XtPointer closure, /* Widget */ XtPointer call_data) { XtSetKeyboardFocus((Widget)closure, NULL); } void XtSetKeyboardFocus( Widget widget, Widget descendant) { XtPerDisplayInput pdi; XtPerWidgetInput pwi; Widget oldDesc, oldTarget, target, hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; pdi = _XtGetPerDisplayInput(XtDisplay(widget)); pwi = _XtGetPerWidgetInput(widget, TRUE); oldDesc = pwi->focusKid; if (descendant == widget) descendant = (Widget)None; target = descendant ? _GetWindowedAncestor(descendant) : NULL; oldTarget = oldDesc ? _GetWindowedAncestor(oldDesc) : NULL; if (descendant != oldDesc) { /* update the forward path */ pwi->focusKid = descendant; /* all the rest handles focus ins and focus outs and misc gunk */ if (oldDesc) { /* invalidate FindKeyDestination's ancestor list */ if (pseudoTraceDepth && oldTarget == pseudoTrace[0]) pseudoTraceDepth = 0; XtRemoveCallback(oldDesc, XtNdestroyCallback, FocusDestroyCallback, (XtPointer)widget); if (!oldTarget->core.being_destroyed) { if (pwi->map_handler_added) { XtRemoveEventHandler(oldTarget, XtAllEvents, True, QueryEventMask, (XtPointer)widget); pwi->map_handler_added = FALSE; } if (pwi->haveFocus) { _XtSendFocusEvent( oldTarget, FocusOut); } } else if (pwi->map_handler_added) { pwi->map_handler_added = FALSE; } if (pwi->haveFocus) pdi->focusWidget = NULL; /* invalidate cache */ /* * If there was a forward path then remove the handler if * the path is being set to null and it isn't a shell. * shells always have a handler for tracking focus for the * hierarchy. * * Keep the pwi record on the assumption that the client * will continue to dynamically assign focus for this widget. */ if (!XtIsShell(widget) && !descendant) { XtRemoveEventHandler(widget, XtAllEvents, True, _XtHandleFocus, (XtPointer)pwi); pwi->haveFocus = FALSE; } } if (descendant) { Widget shell = GetShell(widget); XtPerWidgetInput psi = _XtGetPerWidgetInput(shell, TRUE); XtAddCallback (descendant, XtNdestroyCallback, FocusDestroyCallback, (XtPointer) widget); AddFocusHandler(widget, descendant, pwi, psi, pdi, oldTarget ? XtBuildEventMask(oldTarget) : 0); if (widget != shell) XtAddEventHandler( shell, FocusChangeMask | EnterWindowMask | LeaveWindowMask, False, _XtHandleFocus, (XtPointer)psi ); if (! XtIsRealized(target)) { XtAddEventHandler(target, (EventMask)StructureNotifyMask, False, QueryEventMask, (XtPointer)widget); pwi->map_handler_added = TRUE; pwi->queryEventDescendant = descendant; } } } hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHsetKeyboardFocus; call_data.widget = widget; call_data.event_data = (XtPointer) descendant; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_PROCESS; UNLOCK_APP(app); } if (!pathTraceDepth || widget != pathTrace[0]) { _XtFillAncestorList(&pathTrace, &pathTraceMax, &pathTraceDepth, widget, NULL); } if (widget == _FindFocusWidget(widget, pathTrace, pathTraceDepth, TRUE, &isTarget)) retval = (isTarget ? IsTarget : IsActive); else retval = NotActive; UNLOCK_PROCESS; return retval; } /* ARGSUSED */ void _XtHandleFocus( Widget widget, XtPointer client_data, /* child who wants libXt-1.1.5/src/Pointer.c000064401431060000012000000071201252061032400154270ustar00alancstaff00002660200006/******************************************************** Copyright 1988 by Hewlett-Packard Company Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 names of Hewlett-Packard or Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ /* Copyright 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "PassivGraI.h" #define AllButtonsMask (Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask) Widget _XtProcessPointerEvent( XButtonEvent *event, Widget widget, XtPerDisplayInput pdi) { XtDevice device = &pdi->pointer; XtServerGrabPtr newGrab = NULL, devGrab = &device->grab; Widget dspWidget = NULL; Boolean deactivateGrab = FALSE; switch (event->type) { case ButtonPress: { if (!IsServerGrab(device->grabType)) { Cardinal i; for (i = pdi->traceDepth; i > 0 && !newGrab; i--) newGrab = _XtCheckServerGrabsOnWidget((XEvent*)event, pdi->trace[i-1], POINTER); } if (newGrab) { /* Activate the grab */ device->grab = *newGrab; device->grabType = XtPassiveServerGrab; } } break; case ButtonRelease: { if ((device->grabType == XtPassiveServerGrab) && !(event->state & ~(Button1Mask << (event->button - 1)) & AllButtonsMask)) deactivateGrab = TRUE; } break; } if (IsServerGrab(device->grabType) && !(devGrab)->ownerEvents) dspWidget = (devGrab)->widget; else dspWidget = widget; if (deactivateGrab) device->grabType = XtNoServerGrab; return dspWidget; } ********************************/ /* Copyright 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permissilibXt-1.1.5/src/SetSens.c000064401431060000012000000122411252061032400153730ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" /* * XtSetSensitive() */ static void SetAncestorSensitive( register Widget widget, Boolean ancestor_sensitive) { Arg args[1]; register Cardinal i; register WidgetList children; if (widget->core.ancestor_sensitive == ancestor_sensitive) return; XtSetArg(args[0], XtNancestorSensitive, ancestor_sensitive); XtSetValues(widget, args, XtNumber(args)); /* If widget's sensitive is TRUE, propagate new ancestor_sensitive to children's ancestor_sensitive; else do nothing as children's ancestor_sensitive is already FALSE */ if (widget->core.sensitive && XtIsComposite(widget)) { children = ((CompositeWidget) widget)->composite.children; for (i=0; i < ((CompositeWidget)widget)->composite.num_children; i++) { SetAncestorSensitive (children[i], ancestor_sensitive); } } } /* SetAncestorSensitive */ void XtSetSensitive( register Widget widget, _XtBoolean sensitive) { Arg args[1]; register Cardinal i; register WidgetList children; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (widget->core.sensitive == sensitive) { UNLOCK_APP(app); return; } XtSetArg(args[0], XtNsensitive, sensitive); XtSetValues(widget, args, XtNumber(args)); /* If widget's ancestor_sensitive is TRUE, propagate new sensitive to children's ancestor_sensitive; else do nothing as children's ancestor_sensitive is already FALSE */ if (widget->core.ancestor_sensitive && XtIsComposite (widget)) { children = ((CompositeWidget) widget)->composite.children; for (i = 0; i < ((CompositeWidget)widget)->composite.num_children; i++){ SetAncestorSensitive (children[i], sensitive); } } UNLOCK_APP(app); } /* XtSetSensitive */ libXt-1.1.5/src/Object.c000064401431060000012000000243571252061032400152300ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" static XtResource resources[] = { {XtNdestroyCallback, XtCCallback, XtRCallback,sizeof(XtPointer), XtOffsetOf(ObjectRec,object.destroy_callbacks), XtRCallback, (XtPointer)NULL} }; static void ObjectClassPartInitialize(WidgetClass); static Boolean ObjectSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static void ObjectDestroy(Widget); externaldef(objectclassrec) ObjectClassRec objectClassRec = { { /* superclass */ NULL, /* class_name */ "Object", /* widget_size */ sizeof(ObjectRec), /* class_initialize */ NULL, /* class_part_initialize*/ ObjectClassPartInitialize, /* class_inited */ FALSE, /* initialize */ NULL, /* initialize_hook */ NULL, /* pad */ NULL, /* pad */ NULL, /* pad */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* pad */ FALSE, /* pad */ FALSE, /* pad */ FALSE, /* pad */ FALSE, /* destroy */ ObjectDestroy, /* pad */ NULL, /* pad */ NULL, /* set_values */ ObjectSetValues, /* set_values_hook */ NULL, /* pad */ NULL, /* get_values_hook */ NULL, /* pad */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* pad */ NULL, /* pad */ NULL, /* pad */ NULL, /* extension */ NULL } }; externaldef(objectClass) WidgetClass objectClass = (WidgetClass)&objectClassRec; /* * Start of object routines. */ static void ConstructCallbackOffsets( WidgetClass widgetClass) { static XrmQuark QCallback = NULLQUARK; register int i; register int tableSize; register CallbackTable newTable; register CallbackTable superTable; register XrmResourceList resourceList; ObjectClass objectClass = (ObjectClass)widgetClass; /* This function builds an array of pointers to the resource structures which describe the callbacks for this widget class. This array is special in that the 0th entry is the number of callback pointers. */ if (QCallback == NULLQUARK) QCallback = XrmPermStringToQuark(XtRCallback); if (objectClass->object_class.superclass != NULL) { superTable = (CallbackTable) ((ObjectClass) objectClass->object_class.superclass)-> object_class.callback_private; tableSize = (int)(long) superTable[0]; } else { superTable = (CallbackTable) NULL; tableSize = 0; } /* Count the number of callbacks */ resourceList = (XrmResourceList) objectClass->object_class.resources; for (i = objectClass->object_class.num_resources; --i >= 0; resourceList++) if (resourceList->xrm_type == QCallback) tableSize++; /* * Allocate and load the table. Make sure that the new callback * offsets occur in the table ahead of the superclass callback * offsets so that resource overrides work. */ newTable = (CallbackTable) __XtMalloc(sizeof(XrmResource *) * (tableSize + 1)); newTable[0] = (XrmResource *)(long) tableSize; if (superTable) tableSize -= (int)(long) superTable[0]; resourceList = (XrmResourceList) objectClass->object_class.resources; for (i=1; tableSize > 0; resourceList++) if (resourceList->xrm_type == QCallback) { newTable[i++] = resourceList; tableSize--; } if (superTable) for (tableSize = (int)(long) *superTable++; --tableSize >= 0; superTable++) newTable[i++] = *superTable; objectClass->object_class.callback_private = (XtPointer) newTable; } static void InheritObjectExtensionMethods( WidgetClass widget_class) { ObjectClass oc = (ObjectClass) widget_class; ObjectClassExtension ext, super_ext = NULL; ext = (ObjectClassExtension) XtGetClassExtension(widget_class, XtOffsetOf(ObjectClassRec, object_class.extension), NULLQUARK, XtObjectExtensionVersion, sizeof(ObjectClassExtensionRec)); if (oc->object_class.superclass) super_ext = (ObjectClassExtension) XtGetClassExtension(oc->object_class.superclass, XtOffsetOf(ObjectClassRec, object_class.extension), NULLQUARK, XtObjectExtensionVersion, sizeof(ObjectClassExtensionRec)); LOCK_PROCESS; if (ext) { if (ext->allocate == XtInheritAllocate) ext->allocate = (super_ext ? super_ext->allocate : NULL); if (ext->deallocate == XtInheritDeallocate) ext->deallocate = (super_ext ? super_ext->deallocate : NULL); } else if (super_ext) { /* Be careful to inherit only what is appropriate */ ext = (ObjectClassExtension) __XtCalloc(1, sizeof(ObjectClassExtensionRec)); ext->next_extension = oc->object_class.extension; ext->record_type = NULLQUARK; ext->version = XtObjectExtensionVersion; ext->record_size = sizeof(ObjectClassExtensionRec); ext->allocate = super_ext->allocate; ext->deallocate = super_ext->deallocate; oc->object_class.extension = (XtPointer) ext; } UNLOCK_PROCESS; } static void ObjectClassPartInitialize( register WidgetClass wc) { ObjectClass oc = (ObjectClass)wc; oc->object_class.xrm_class = XrmPermStringToQuark(oc->object_class.class_name); if (oc->object_class.resources) _XtCompileResourceList(oc->object_class.resources, oc->object_class.num_resources); ConstructCallbackOffsets(wc); _XtResourceDependencies(wc); InheritObjectExtensionMethods(wc); } /*ARGSUSED*/ static Boolean ObjectSetValues( Widget old, Widget request, Widget widget, ArgList args, Cardinal * num_args) { register CallbackTable offsets; register int i; register InternalCallbackList *ol, *nl; LOCK_PROCESS; /* Compile any callback lists into internal form */ offsets = (CallbackTable) XtClass(widget)->core_class.callback_private; for (i= (int)(long) *(offsets++); --i >= 0; offsets++) { ol = (InternalCallbackList *) ((char *) old - (*offsets)->xrm_offset - 1); nl = (InternalCallbackList *) ((char *) widget - (*offsets)->xrm_offset - 1); if (*ol != *nl) { if (*ol != NULL) XtFree((char *) *ol); if (*nl != NULL) *nl = _XtCompileCallbackList((XtCallbackList) *nl); } } UNLOCK_PROCESS; return False; } static void ObjectDestroy ( register Widget widget) { register CallbackTable offsets; register int i; register InternalCallbackList cl; /* Remove all callbacks associated with widget */ LOCK_PROCESS; offsets = (CallbackTable) widget->core.widget_class->core_class.callback_private; for (i = (int)(long) *(offsets++); --i >= 0; offsets++) { cl = *(InternalCallbackList *) ((char *) widget - (*offsets)->xrm_offset - 1); if (cl) XtFree((char *) cl); } UNLOCK_PROCESS; } /* ObjectDestroy */ libXt-1.1.5/src/Composite.c000064401431060000012000000243161252061032400157570ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" static XtResource resources[] = { {XtNchildren, XtCReadOnly, XtRWidgetList, sizeof(WidgetList), XtOffsetOf(CompositeRec, composite.children), XtRImmediate, NULL}, {XtNnumChildren, XtCReadOnly, XtRCardinal, sizeof(Cardinal), XtOffsetOf(CompositeRec, composite.num_children), XtRImmediate, NULL}, {XtNinsertPosition, XtCInsertPosition, XtRFunction, sizeof(XtOrderProc), XtOffsetOf(CompositeRec, composite.insert_position), XtRImmediate, NULL}, }; static void CompositeClassPartInitialize(WidgetClass); static void CompositeInitialize(Widget, Widget, ArgList, Cardinal *); static void CompositeInsertChild(Widget); static void CompositeDeleteChild(Widget); static void CompositeDestroy(Widget); externaldef(compositeclassrec) CompositeClassRec compositeClassRec = { { /******* CorePart *******/ /* superclass */ &widgetClassRec, /* class_name */ "Composite", /* widget_size */ sizeof(CompositeRec), /* class_initialize */ NULL, /* class_part_initialize*/ CompositeClassPartInitialize, /* class_inited */ FALSE, /* initialize */ CompositeInitialize, /* initialize_hook */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave */ FALSE, /* visible_interest */ FALSE, /* destroy */ CompositeDestroy, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL }, { /**** CompositePart *****/ /* geometry_handler */ NULL, /* change_managed */ NULL, /* insert_child */ CompositeInsertChild, /* delete_child */ CompositeDeleteChild, /* extension */ NULL } }; externaldef(compositewidgetclass) WidgetClass compositeWidgetClass = (WidgetClass) &compositeClassRec; static void InheritAllowsChangeManagedSet( WidgetClass widget_class) { CompositeWidgetClass cc = (CompositeWidgetClass) widget_class; CompositeClassExtension ext, super_ext, new_ext; ext = (CompositeClassExtension) XtGetClassExtension(widget_class, XtOffsetOf(CompositeClassRec, composite_class.extension), NULLQUARK, 1L, 0); if (ext && ext->version == XtCompositeExtensionVersion) return; super_ext = (CompositeClassExtension) XtGetClassExtension(cc->core_class.superclass, XtOffsetOf(CompositeClassRec, composite_class.extension), NULLQUARK, 1L, 0); LOCK_PROCESS; if (super_ext && super_ext->version == XtCompositeExtensionVersion && super_ext->record_size == sizeof(CompositeClassExtensionRec) && super_ext->allows_change_managed_set) { new_ext = (CompositeClassExtension) __XtCalloc(1, sizeof(CompositeClassExtensionRec)); /* Be careful to inherit only what is appropriate */ new_ext->next_extension = cc->composite_class.extension; new_ext->record_type = NULLQUARK; new_ext->version = XtCompositeExtensionVersion; new_ext->record_size = sizeof(CompositeClassExtensionRec); new_ext->accepts_objects = (ext ? ext->accepts_objects : False); new_ext->allows_change_managed_set = True; cc->composite_class.extension = (XtPointer) new_ext; } UNLOCK_PROCESS; } static void CompositeClassPartInitialize( WidgetClass widgetClass) { register CompositePartPtr wcPtr; register CompositePartPtr superPtr = NULL; wcPtr = (CompositePartPtr) &(((CompositeWidgetClass)widgetClass)->composite_class); if (widgetClass != compositeWidgetClass) /* don't compute possible bogus pointer */ superPtr = (CompositePartPtr)&(((CompositeWidgetClass)widgetClass ->core_class.superclass)->composite_class); /* We don't need to check for null super since we'll get to composite eventually, and it had better define them! */ LOCK_PROCESS; if (wcPtr->geometry_manager == XtInheritGeometryManager) { wcPtr->geometry_manager = superPtr->geometry_manager; } if (wcPtr->change_managed == XtInheritChangeManaged) { wcPtr->change_managed = superPtr->change_managed; InheritAllowsChangeManagedSet(widgetClass); } if (wcPtr->insert_child == XtInheritInsertChild) { wcPtr->insert_child = superPtr->insert_child; } if (wcPtr->delete_child == XtInheritDeleteChild) { wcPtr->delete_child = superPtr->delete_child; } UNLOCK_PROCESS; } static void CompositeDestroy( Widget w) { register CompositeWidget cw = (CompositeWidget) w; XtFree((char *) cw->composite.children); } static void CompositeInsertChild( Widget w) { register Cardinal position; register Cardinal i; register CompositeWidget cw; register WidgetList children; cw = (CompositeWidget) w->core.parent; children = cw->composite.children; if (cw->composite.insert_position != NULL) position = (*(cw->composite.insert_position))(w); else position = cw->composite.num_children; if (cw->composite.num_children == cw->composite.num_slots) { /* Allocate more space */ cw->composite.num_slots += (cw->composite.num_slots / 2) + 2; cw->composite.children = children = (WidgetList) XtRealloc((XtPointer) children, (unsigned) (cw->composite.num_slots) * sizeof(Widget)); } /* Ripple children up one space from "position" */ for (i = cw->composite.num_children; i > position; i--) { children[i] = children[i-1]; } children[position] = w; cw->composite.num_children++; } static void CompositeDeleteChild( Widget w) { register Cardinal position; register Cardinal i; register CompositeWidget cw; cw = (CompositeWidget) w->core.parent; for (position = 0; position < cw->composite.num_children; position++) { if (cw->composite.children[position] == w) { break; } } if (position == cw->composite.num_children) return; /* Ripple children down one space from "position" */ cw->composite.num_children--; for (i = position; i < cw->composite.num_children; i++) { cw->composite.children[i] = cw->composite.children[i+1]; } } /* ARGSUSED */ static void CompositeInitialize( Widget requested_widget, Widget new_widget, ArgList args, Cardinal *num_args) { register CompositeWidget cw; cw = (CompositeWidget) new_widget; cw->composite.num_children = 0; cw->composite.children = NULL; cw->composite.num_slots = 0; } libXt-1.1.5/src/NextEvent.c000064401431060000012000001175671252061032400157500ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998, 2001 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include #include static TimerEventRec* freeTimerRecs; static WorkProcRec* freeWorkRecs; static SignalEventRec* freeSignalRecs; /* Some systems running NTP daemons are known to return strange usec * values from gettimeofday. */ #ifndef NEEDS_NTPD_FIXUP # if defined(sun) || defined(MOTOROLA) || (defined(__osf__) && defined(__alpha)) # define NEEDS_NTPD_FIXUP 1 # else # define NEEDS_NTPD_FIXUP 0 # endif #endif #if NEEDS_NTPD_FIXUP #define FIXUP_TIMEVAL(t) { \ while ((t).tv_usec >= 1000000) { \ (t).tv_usec -= 1000000; \ (t).tv_sec++; \ } \ while ((t).tv_usec < 0) { \ if ((t).tv_sec > 0) { \ (t).tv_usec += 1000000; \ (t).tv_sec--; \ } else { \ (t).tv_usec = 0; \ break; \ } \ }} #else #define FIXUP_TIMEVAL(t) #endif /*NEEDS_NTPD_FIXUP*/ /* * Private routines */ #define ADD_TIME(dest, src1, src2) { \ if(((dest).tv_usec = (src1).tv_usec + (src2).tv_usec) >= 1000000) {\ (dest).tv_usec -= 1000000;\ (dest).tv_sec = (src1).tv_sec + (src2).tv_sec + 1 ; \ } else { (dest).tv_sec = (src1).tv_sec + (src2).tv_sec ; \ if(((dest).tv_sec >= 1) && (((dest).tv_usec <0))) { \ (dest).tv_sec --;(dest).tv_usec += 1000000; } } } #define TIMEDELTA(dest, src1, src2) { \ if(((dest).tv_usec = (src1).tv_usec - (src2).tv_usec) < 0) {\ (dest).tv_usec += 1000000;\ (dest).tv_sec = (src1).tv_sec - (src2).tv_sec - 1;\ } else (dest).tv_sec = (src1).tv_sec - (src2).tv_sec; } #define IS_AFTER(t1, t2) (((t2).tv_sec > (t1).tv_sec) \ || (((t2).tv_sec == (t1).tv_sec)&& ((t2).tv_usec > (t1).tv_usec))) #define IS_AT_OR_AFTER(t1, t2) (((t2).tv_sec > (t1).tv_sec) \ || (((t2).tv_sec == (t1).tv_sec)&& ((t2).tv_usec >= (t1).tv_usec))) #ifdef USE_POLL #ifndef XT_DEFAULT_FDLIST_SIZE #define XT_DEFAULT_FDLIST_SIZE 32 #endif #endif static void AdjustHowLong ( unsigned long *howlong, struct timeval *start_time) { struct timeval new_time, time_spent, lstart_time; lstart_time = *start_time; X_GETTIMEOFDAY (&new_time); FIXUP_TIMEVAL(new_time); TIMEDELTA(time_spent, new_time, lstart_time); if(*howlong <= (unsigned long)(time_spent.tv_sec*1000+time_spent.tv_usec/1000)) *howlong = (unsigned long)0; /* Timed out */ else *howlong -= (time_spent.tv_sec*1000+time_spent.tv_usec/1000); } typedef struct { struct timeval cur_time; struct timeval start_time; struct timeval wait_time; struct timeval new_time; struct timeval time_spent; struct timeval max_wait_time; #ifndef USE_POLL struct timeval *wait_time_ptr; #else int poll_wait; #endif } wait_times_t, *wait_times_ptr_t; static struct timeval zero_time = { 0 , 0}; #ifndef USE_POLL static fd_set zero_fd; #else #define X_BLOCK -1 #define X_DONT_BLOCK 0 #endif static void InitTimes ( Boolean block, unsigned long* howlong, wait_times_ptr_t wt) { if (block) { X_GETTIMEOFDAY (&wt->cur_time); FIXUP_TIMEVAL(wt->cur_time); wt->start_time = wt->cur_time; if(howlong == NULL) { /* special case for ever */ #ifndef USE_POLL wt->wait_time_ptr = NULL; #else wt->poll_wait = X_BLOCK; #endif } else { /* block until at most */ wt->max_wait_time.tv_sec = *howlong/1000; wt->max_wait_time.tv_usec = (*howlong %1000)*1000; #ifndef USE_POLL wt->wait_time_ptr = &wt->max_wait_time; #else wt->poll_wait = *howlong; #endif } } else { /* don't block */ wt->max_wait_time = zero_time; #ifndef USE_POLL wt->wait_time_ptr = &wt->max_wait_time; #else wt->poll_wait = X_DONT_BLOCK; #endif } } typedef struct { #ifndef USE_POLL fd_set rmask, wmask, emask; int nfds; #else struct pollfd* fdlist; struct pollfd* stack; int fdlistlen, num_dpys; #endif } wait_fds_t, *wait_fds_ptr_t; static void InitFds ( XtAppContext app, Boolean ignoreEvents, Boolean ignoreInputs, wait_fds_ptr_t wf) { int ii; app->rebuild_fdlist = FALSE; #ifndef USE_POLL wf->nfds = app->fds.nfds; if( !ignoreInputs ) { wf->rmask = app->fds.rmask; wf->wmask = app->fds.wmask; wf->emask = app->fds.emask; } else wf->rmask = wf->wmask = wf->emask = zero_fd; if (!ignoreEvents) for (ii = 0; ii < app->count; ii++) { FD_SET (ConnectionNumber(app->list[ii]), &wf->rmask); } #else #ifndef POLLRDNORM #define POLLRDNORM 0 #endif #ifndef POLLRDBAND #define POLLRDBAND 0 #endif #ifndef POLLWRNORM #define POLLWRNORM 0 #endif #ifndef POLLWRBAND #define POLLWRBAND 0 #endif #define XPOLL_READ (POLLIN|POLLRDNORM|POLLPRI|POLLRDBAND) #define XPOLL_WRITE (POLLOUT|POLLWRNORM|POLLWRBAND) #define XPOLL_EXCEPT 0 if (!ignoreEvents) wf->fdlistlen = wf->num_dpys = app->count; else wf->fdlistlen = wf->num_dpys = 0; if (!ignoreInputs && app->input_list != NULL) { int ii; for (ii = 0; ii < (int) app->input_max; ii++) if (app->input_list[ii] != NULL) wf->fdlistlen++; } if (!wf->fdlist || wf->fdlist == wf->stack) { wf->fdlist = (struct pollfd*) XtStackAlloc (sizeof (struct pollfd) * wf->fdlistlen, wf->stack); } else { wf->fdlist = (struct pollfd*) XtRealloc ((char*) wf->fdlist, sizeof (struct pollfd) * wf->fdlistlen); } if (wf->fdlistlen) { struct pollfd* fdlp = wf->fdlist; InputEvent* iep; if (!ignoreEvents) for (ii = 0 ; ii < wf->num_dpys; ii++, fdlp++) { fdlp->fd = ConnectionNumber (app->list[ii]); fdlp->events = POLLIN; } if (!ignoreInputs && app->input_list != NULL) for (ii = 0; ii < app->input_max; ii++) if (app->input_list[ii] != NULL) { iep = app->input_list[ii]; fdlp->fd = ii; fdlp->events = 0; for ( ; iep; iep = iep->ie_next) { if (iep->ie_condition & XtInputReadMask) fdlp->events |= XPOLL_READ; if (iep->ie_condition & XtInputWriteMask) fdlp->events |= XPOLL_WRITE; if (iep->ie_condition & XtInputExceptMask) fdlp->events |= XPOLL_EXCEPT; } fdlp++; } } #endif } static void AdjustTimes ( XtAppContext app, Boolean block, unsigned long* howlong, Boolean ignoreTimers, wait_times_ptr_t wt) { if (app->timerQueue != NULL && !ignoreTimers && block) { if (IS_AFTER (wt->cur_time, app->timerQueue->te_timer_value)) { TIMEDELTA (wt->wait_time, app->timerQueue->te_timer_value, wt->cur_time); if (howlong == NULL || IS_AFTER (wt->wait_time, wt->max_wait_time)) #ifndef USE_POLL wt->wait_time_ptr = &wt->wait_time; else wt->wait_time_ptr = &wt->max_wait_time; } else wt->wait_time_ptr = &zero_time; } #else wt->poll_wait = wt->wait_time.tv_sec * 1000 + wt->wait_time.tv_usec / 1000; else wt->poll_wait = wt->max_wait_time.tv_sec * 1000 + wt->max_wait_time.tv_usec / 1000; } else wt->poll_wait = X_DONT_BLOCK; } #endif } static int IoWait ( wait_times_ptr_t wt, wait_fds_ptr_t wf) { #ifndef USE_POLL return Select (wf->nfds, &wf->rmask, &wf->wmask, &wf->emask, wt->wait_time_ptr); #else return poll (wf->fdlist, wf->fdlistlen, wt->poll_wait); #endif } static void FindInputs ( XtAppContext app, wait_fds_ptr_t wf, int nfds, Boolean ignoreEvents, Boolean ignoreInputs, int* dpy_no, int* found_input) { XtInputMask condition; InputEvent *ep; int ii; #ifndef USE_POLL /* { check ready file descriptors block */ #ifdef XTHREADS fd_set rmask; #endif int dd; *dpy_no = -1; *found_input = False; #ifdef XTHREADS rmask = app->fds.rmask; for (dd = app->count; dd-- > 0; ) FD_SET (ConnectionNumber (app->list[dd]), &rmask); #endif for (ii = 0; ii < wf->nfds && nfds > 0; ii++) { condition = 0; if (FD_ISSET (ii, &wf->rmask) #ifdef XTHREADS && FD_ISSET (ii, &rmask) #endif ) { nfds--; if (!ignoreEvents) { for (dd = 0; dd < app->count; dd++) { if (ii == ConnectionNumber (app->list[dd])) { if (*dpy_no == -1) { if (XEventsQueued (app->list[dd], QueuedAfterReading )) *dpy_no = dd; /* * An error event could have arrived * without any real events, or events * could have been swallowed by Xlib, * or the connection may be broken. * We can't tell the difference, so * assume Xlib will eventually discover * a broken connection. */ } goto ENDILOOP; } } } condition = XtInputReadMask; } if (FD_ISSET (ii, &wf->wmask) #ifdef XTHREADS && FD_ISSET (ii, &app->fds.wmask) #endif ) { condition |= XtInputWriteMask; nfds--; } if (FD_ISSET (ii, &wf->emask) #ifdef XTHREADS && FD_ISSET (ii, &app->fds.emask) #endif ) { condition |= XtInputExceptMask; nfds--; } if (condition) { for (ep = app->input_list[ii]; ep; ep = ep->ie_next) if (condition & ep->ie_condition) { /* make sure this input isn't already marked outstanding */ InputEvent *oq; for (oq = app->outstandingQueue; oq; oq = oq->ie_oq) if (oq == ep) break; if (!oq) { ep->ie_oq = app->outstandingQueue; app->outstandingQueue = ep; } } *found_input = True; } ENDILOOP: ; } /* endfor */ #else /* }{ */ struct pollfd* fdlp; *dpy_no = -1; *found_input = False; if (!ignoreEvents) { fdlp = wf->fdlist; for (ii = 0; ii < wf->num_dpys; ii++, fdlp++) { if (*dpy_no == -1 && fdlp->revents & (POLLIN|POLLHUP|POLLERR) && #ifdef XTHREADS !(fdlp->revents & POLLNVAL) && #endif XEventsQueued (app->list[ii], QueuedAfterReading)) { *dpy_no = ii; break; } } } if (!ignoreInputs) { fdlp = &wf->fdlist[wf->num_dpys]; for (ii = wf->num_dpys; ii < wf->fdlistlen; ii++, fdlp++) { condition = 0; if (fdlp->revents) { if (fdlp->revents & (XPOLL_READ|POLLHUP|POLLERR) #ifdef XTHREADS && !(fdlp->revents & POLLNVAL) #endif ) condition = XtInputReadMask; if (fdlp->revents & XPOLL_WRITE) condition |= XtInputWriteMask; if (fdlp->revents & XPOLL_EXCEPT) condition |= XtInputExceptMask; } if (condition) { *found_input = True; for (ep = app->input_list[fdlp->fd]; ep; ep = ep->ie_next) if (condition & ep->ie_condition) { InputEvent *oq; /* make sure this input isn't already marked outstanding */ for (oq = app->outstandingQueue; oq; oq = oq->ie_oq) if (oq == ep) break; if (!oq) { ep->ie_oq = app->outstandingQueue; app->outstandingQueue = ep; } } } } } #endif /* } */ } /* * Routine to block in the toolkit. This should be the only call to select. * * This routine returns when there is something to be done. * * Before calling this with ignoreInputs==False, app->outstandingQueue should * be checked; this routine will not verify that an alternate input source * has not already been enqueued. * * * _XtWaitForSomething( appContext, * ignoreEvent, ignoreTimers, ignoreInputs, ignoreSignals, * block, drop_lock, howlong) * XtAppContext app; (Displays to check wait on) * * Boolean ignoreEvents; (Don't return if XEvents are available * Also implies forget XEvents exist) * * Boolean ignoreTimers; (Ditto for timers) * * Boolean ignoreInputs; (Ditto for input callbacks ) * * Boolean ignoreSignals; (Ditto for signals) * * Boolean block; (Okay to block) * * Boolean drop_lock (drop lock before going into select/poll) * * TimeVal howlong; (howlong to wait for if blocking and not * doing Timers... Null means forever. * Maybe should mean shortest of both) * Returns display for which input is available, if any * and if ignoreEvents==False, else returns -1 * * if ignoring everything && block=True && howlong=NULL, you'll have * lots of time for coffee; better not try it! In fact, it probably * makes little sense to do this regardless of the value of howlong * (bottom line is, we don't bother checking here). * * If drop_lock is FALSE, the app->lock->mutex is not unlocked before * entering select/poll. It is illegal for drop_lock to be FALSE if * ignoreTimers, ignoreInputs, or ignoreSignals is FALSE. */ int _XtWaitForSomething( XtAppContext app, _XtBoolean ignoreEvents, _XtBoolean ignoreTimers, _XtBoolean ignoreInputs, _XtBoolean ignoreSignals, _XtBoolean block, #ifdef XTHREADS _XtBoolean drop_lock, #endif unsigned long *howlong) { wait_times_t wt; wait_fds_t wf; int nfds, dpy_no, found_input, dd; #ifdef XTHREADS Boolean push_thread = TRUE; Boolean pushed_thread = FALSE; int level = 0; #endif #ifdef USE_POLL struct pollfd fdlist[XT_DEFAULT_FDLIST_SIZE]; #endif #ifdef XTHREADS /* assert ((ignoreTimers && ignoreInputs && ignoreSignals) || drop_lock); */ /* If not multi-threaded, never drop lock */ if (app->lock == (ThreadAppProc) NULL) drop_lock = FALSE; #endif InitTimes (block, howlong, &wt); #ifdef USE_POLL wf.fdlist = NULL; wf.stack = fdlist; wf.fdlistlen = wf.num_dpys = 0; #endif WaitLoop: app->rebuild_fdlist = TRUE; while (1) { AdjustTimes (app, block, howlong, ignoreTimers, &wt); if (block && app->block_hook_list) { BlockHook hook; for (hook = app->block_hook_list; hook != NULL; hook = hook->next) (*hook->proc) (hook->closure); if (!ignoreEvents) /* see if the hook(s) generated any protocol */ for (dd = 0; dd < app->count; dd++) if (XEventsQueued(app->list[dd], QueuedAlready)) { #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return dd; } } if (app->rebuild_fdlist) InitFds (app, ignoreEvents, ignoreInputs, &wf); #ifdef XTHREADS /* { */ if (drop_lock) { YIELD_APP_LOCK(app, &push_thread, &pushed_thread, &level); nfds = IoWait (&wt, &wf); RESTORE_APP_LOCK(app, level, &pushed_thread); } else #endif /* } */ nfds = IoWait (&wt, &wf); if (nfds == -1) { /* * interrupt occured recalculate time value and wait again. */ if (errno == EINTR || errno == EAGAIN) { if (errno == EAGAIN) { errno = 0; /* errno is not self reseting */ continue; } errno = 0; /* errno is not self reseting */ /* was it interrupted by a signal that we care about? */ if (!ignoreSignals && app->signalQueue != NULL) { SignalEventRec *se_ptr = app->signalQueue; while (se_ptr != NULL) { if (se_ptr->se_notice) { if (block && howlong != NULL) AdjustHowLong (howlong, &wt.start_time); #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return -1; } se_ptr = se_ptr->se_next; } } if (!ignoreEvents) /* get Xlib to detect a bad connection */ for (dd = 0; dd < app->count; dd++) if (XEventsQueued(app->list[dd], QueuedAfterReading)) { #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return dd; } if (block) { #ifndef USE_POLL if (wt.wait_time_ptr == NULL) #else if (wt.poll_wait == X_BLOCK) #endif continue; X_GETTIMEOFDAY (&wt.new_time); FIXUP_TIMEVAL (wt.new_time); TIMEDELTA (wt.time_spent, wt.new_time, wt.cur_time); wt.cur_time = wt.new_time; #ifndef USE_POLL if (IS_AFTER (wt.time_spent, *wt.wait_time_ptr)) { TIMEDELTA (wt.wait_time, *wt.wait_time_ptr, wt.time_spent); wt.wait_time_ptr = &wt.wait_time; continue; } else #else if ((wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000) < wt.poll_wait) { wt.poll_wait -= (wt.time_spent.tv_sec * 1000 + wt.time_spent.tv_usec / 1000); continue; } else #endif nfds = 0; } } else { char Errno[12]; String param = Errno; Cardinal param_count = 1; sprintf( Errno, "%d", errno); XtAppWarningMsg(app, "communicationError","select", XtCXtToolkitError,"Select failed; error code %s", ¶m, ¶m_count); continue; } } /* timed out or input available */ break; } if (nfds == 0) { /* Timed out */ if (howlong) *howlong = (unsigned long)0; #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return -1; } if (block && howlong != NULL) AdjustHowLong (howlong, &wt.start_time); if (ignoreInputs && ignoreEvents) { #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return -1; } else FindInputs (app, &wf, nfds, ignoreEvents, ignoreInputs, &dpy_no, &found_input); if (dpy_no >= 0 || found_input) { #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return dpy_no; } if (block) goto WaitLoop; else { #ifdef USE_POLL XtStackFree ((XtPointer) wf.fdlist, fdlist); #endif return -1; } } #define IeCallProc(ptr) \ (*ptr->ie_proc) (ptr->ie_closure, &ptr->ie_source, (XtInputId*)&ptr); #define TeCallProc(ptr) \ (*ptr->te_proc) (ptr->te_closure, (XtIntervalId*)&ptr); #define SeCallProc(ptr) \ (*ptr->se_proc) (ptr->se_closure, (XtSignalId*)&ptr); /* * Public Routines */ XtIntervalId XtAddTimeOut( unsigned long interval, XtTimerCallbackProc proc, XtPointer closure) { return XtAppAddTimeOut(_XtDefaultAppContext(), interval, proc, closure); } static void QueueTimerEvent( XtAppContext app, TimerEventRec *ptr) { TimerEventRec *t,**tt; tt = &app->timerQueue; t = *tt; while (t != NULL && IS_AFTER(t->te_timer_value, ptr->te_timer_value)) { tt = &t->te_next; t = *tt; } ptr->te_next = t; *tt = ptr; } XtIntervalId XtAppAddTimeOut( XtAppContext app, unsigned long interval, XtTimerCallbackProc proc, XtPointer closure) { TimerEventRec *tptr; struct timeval current_time; LOCK_APP(app); LOCK_PROCESS; if (freeTimerRecs) { tptr = freeTimerRecs; freeTimerRecs = tptr->te_next; } else tptr = XtNew(TimerEventRec); UNLOCK_PROCESS; tptr->te_next = NULL; tptr->te_closure = closure; tptr->te_proc = proc; tptr->app = app; tptr->te_timer_value.tv_sec = interval/1000; tptr->te_timer_value.tv_usec = (interval%1000)*1000; X_GETTIMEOFDAY (¤t_time); FIXUP_TIMEVAL(current_time); ADD_TIME(tptr->te_timer_value,tptr->te_timer_value,current_time); QueueTimerEvent(app, tptr); UNLOCK_APP(app); return( (XtIntervalId) tptr); } void XtRemoveTimeOut( XtIntervalId id) { TimerEventRec *t, *last, *tid = (TimerEventRec *) id; XtAppContext app = tid->app; /* find it */ LOCK_APP(app); for(t = app->timerQueue, last = NULL; t != NULL && t != tid; t = t->te_next) last = t; if (t == NULL) { UNLOCK_APP(app); return; /* couldn't find it */ } if(last == NULL) { /* first one on the list */ app->timerQueue = t->te_next; } else last->te_next = t->te_next; LOCK_PROCESS; t->te_next = freeTimerRecs; freeTimerRecs = t; UNLOCK_PROCESS; UNLOCK_APP(app); } XtWorkProcId XtAddWorkProc( XtWorkProc proc, XtPointer closure) { return XtAppAddWorkProc(_XtDefaultAppContext(), proc, closure); } XtWorkProcId XtAppAddWorkProc( XtAppContext app, XtWorkProc proc, XtPointer closure) { WorkProcRec *wptr; LOCK_APP(app); LOCK_PROCESS; if (freeWorkRecs) { wptr = freeWorkRecs; freeWorkRecs = wptr->next; } else wptr = XtNew(WorkProcRec); UNLOCK_PROCESS; wptr->next = app->workQueue; wptr->closure = closure; wptr->proc = proc; wptr->app = app; app->workQueue = wptr; UNLOCK_APP(app); return (XtWorkProcId) wptr; } void XtRemoveWorkProc( XtWorkProcId id) { WorkProcRec *wid= (WorkProcRec *) id, *w, *last; XtAppContext app = wid->app; LOCK_APP(app); /* find it */ for(w = app->workQueue, last = NULL; w != NULL && w != wid; w = w->next) last = w; if (w == NULL) { UNLOCK_APP(app); return; /* couldn't find it */ } if(last == NULL) app->workQueue = w->next; else last->next = w->next; LOCK_PROCESS; w->next = freeWorkRecs; freeWorkRecs = w; UNLOCK_PROCESS; UNLOCK_APP(app); } XtSignalId XtAddSignal( XtSignalCallbackProc proc, XtPointer closure) { return XtAppAddSignal(_XtDefaultAppContext(), proc, closure); } XtSignalId XtAppAddSignal( XtAppContext app, XtSignalCallbackProc proc, XtPointer closure) { SignalEventRec *sptr; LOCK_APP(app); LOCK_PROCESS; if (freeSignalRecs) { sptr = freeSignalRecs; freeSignalRecs = sptr->se_next; } else sptr = XtNew(SignalEventRec); UNLOCK_PROCESS; sptr->se_next = app->signalQueue; sptr->se_closure = closure; sptr->se_proc = proc; sptr->app = app; sptr->se_notice = FALSE; app->signalQueue = sptr; UNLOCK_APP(app); return (XtSignalId) sptr; } void XtRemoveSignal( XtSignalId id) { SignalEventRec *sid = (SignalEventRec*) id, *s, *last = NULL; XtAppContext app = sid->app; LOCK_APP(app); for (s = app->signalQueue; s != NULL && s != sid; s = s->se_next) last = s; if (s == NULL) { UNLOCK_APP(app); return; } if (last == NULL) app->signalQueue = s->se_next; else last->se_next = s->se_next; LOCK_PROCESS; s->se_next = freeSignalRecs; freeSignalRecs = s; UNLOCK_PROCESS; UNLOCK_APP(app); } void XtNoticeSignal( XtSignalId id) { /* * It would be overkill to lock the app to set this flag. * In the worst case, 2..n threads would be modifying this * flag. The last one wins. Since signals occur asynchronously * anyway, this can occur with or without threads. * * The other issue is that thread t1 sets the flag in a * signalrec that has been deleted in thread t2. We rely * on a detail of the implementation, i.e. free'd signalrecs * aren't really free'd, they're just moved to a list of * free recs, so deref'ing one won't hurt anything. * * Lastly, and perhaps most importantly, since POSIX threads * says that the handling of asynchronous signals in a synchronous * threads environment is undefined. Therefor it would be an * error for both signals and threads to be in use in the same * program. */ SignalEventRec *sid = (SignalEventRec*) id; sid->se_notice = TRUE; } XtInputId XtAddInput( int source, XtPointer Condition, XtInputCallbackProc proc, XtPointer closure) { return XtAppAddInput(_XtDefaultAppContext(), source, Condition, proc, closure); } XtInputId XtAppAddInput( XtAppContext app, int source, XtPointer Condition, XtInputCallbackProc proc, XtPointer closure) { InputEvent* sptr; XtInputMask condition = (XtInputMask) Condition; LOCK_APP(app); if (!condition || condition & ~(XtInputReadMask|XtInputWriteMask|XtInputExceptMask)) XtAppErrorMsg(app,"invalidParameter","xtAddInput",XtCXtToolkitError, "invalid condition passed to XtAppAddInput", (String *)NULL, (Cardinal *)NULL); if (app->input_max <= source) { Cardinal n = source + 1; int ii; app->input_list = (InputEvent**)XtRealloc((char*) app->input_list, n * sizeof(InputEvent*)); for (ii = app->input_max; ii < (int) n; ii++) app->input_list[ii] = (InputEvent*) NULL; app->input_max = n; } sptr = XtNew(InputEvent); sptr->ie_proc = proc; sptr->ie_closure = closure; sptr->app = app; sptr->ie_oq = NULL; sptr->ie_source = source; sptr->ie_condition = condition; sptr->ie_next = app->input_list[source]; app->input_list[source] = sptr; #ifndef USE_POLL if (condition & XtInputReadMask) FD_SET(source, &app->fds.rmask); if (condition & XtInputWriteMask) FD_SET(source, &app->fds.wmask); if (condition & XtInputExceptMask) FD_SET(source, &app->fds.emask); if (app->fds.nfds < (source+1)) app->fds.nfds = source+1; #else if (sptr->ie_next == NULL) app->fds.nfds++; #endif app->input_count++; app->rebuild_fdlist = TRUE; UNLOCK_APP(app); return((XtInputId)sptr); } void XtRemoveInput( register XtInputId id) { register InputEvent *sptr, *lptr; XtAppContext app = ((InputEvent *)id)->app; register int source = ((InputEvent *)id)->ie_source; Boolean found = False; LOCK_APP(app); sptr = app->outstandingQueue; lptr = NULL; for (; sptr != NULL; sptr = sptr->ie_oq) { if (sptr == (InputEvent *)id) { if (lptr == NULL) app->outstandingQueue = sptr->ie_oq; else lptr->ie_oq = sptr->ie_oq; } lptr = sptr; } if(app->input_list && (sptr = app->input_list[source]) != NULL) { for( lptr = NULL ; sptr; sptr = sptr->ie_next ){ if(sptr == (InputEvent *) id) { #ifndef USE_POLL XtInputMask condition = 0; #endif if(lptr == NULL) { app->input_list[source] = sptr->ie_next; } else { lptr->ie_next = sptr->ie_next; } #ifndef USE_POLL for (lptr = app->input_list[source]; lptr; lptr = lptr->ie_next) condition |= lptr->ie_condition; if ((sptr->ie_condition & XtInputReadMask) && !(condition & XtInputReadMask)) FD_CLR(source, &app->fds.rmask); if ((sptr->ie_condition & XtInputWriteMask) && !(condition & XtInputWriteMask)) FD_CLR(source, &app->fds.wmask); if ((sptr->ie_condition & XtInputExceptMask) && !(condition & XtInputExceptMask)) FD_CLR(source, &app->fds.emask); #endif XtFree((char *) sptr); found = True; break; } lptr = sptr; } } if (found) { app->input_count--; #ifdef USE_POLL if (app->input_list[source] == NULL) app->fds.nfds--; #endif app->rebuild_fdlist = TRUE; } else XtAppWarningMsg(app, "invalidProcedure","inputHandler", XtCXtToolkitError, "XtRemoveInput: Input handler not found", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); } void _XtRemoveAllInputs( XtAppContext app) { int i; for (i = 0; i < app->input_max; i++) { InputEvent* ep = app->input_list[i]; while (ep) { InputEvent *next = ep->ie_next; XtFree( (char*)ep ); ep = next; } } XtFree((char *) app->input_list); } /* Do alternate input and timer callbacks if there are any */ static void DoOtherSources( XtAppContext app) { TimerEventRec *te_ptr; InputEvent *ie_ptr; struct timeval cur_time; #define DrainQueue() \ for (ie_ptr = app->outstandingQueue; ie_ptr != NULL;) { \ app->outstandingQueue = ie_ptr->ie_oq; \ ie_ptr ->ie_oq = NULL; \ IeCallProc(ie_ptr); \ ie_ptr = app->outstandingQueue; \ } /*enddef*/ DrainQueue(); if (app->input_count > 0) { /* Call _XtWaitForSomething to get input queued up */ (void) _XtWaitForSomething (app, TRUE, TRUE, FALSE, TRUE, FALSE, #ifdef XTHREADS TRUE, #endif (unsigned long *)NULL); DrainQueue(); } if (app->timerQueue != NULL) { /* check timeout queue */ X_GETTIMEOFDAY (&cur_time); FIXUP_TIMEVAL(cur_time); while(IS_AT_OR_AFTER (app->timerQueue->te_timer_value, cur_time)) { te_ptr = app->timerQueue; app->timerQueue = te_ptr->te_next; te_ptr->te_next = NULL; if (te_ptr->te_proc != NULL) TeCallProc(te_ptr); LOCK_PROCESS; te_ptr->te_next = freeTimerRecs; freeTimerRecs = te_ptr; UNLOCK_PROCESS; if (app->timerQueue == NULL) break; } } if (app->signalQueue != NULL) { SignalEventRec *se_ptr = app->signalQueue; while (se_ptr != NULL) { if (se_ptr->se_notice) { se_ptr->se_notice = FALSE; if (se_ptr->se_proc != NULL) SeCallProc(se_ptr); } se_ptr = se_ptr->se_next; } } #undef DrainQueue } /* If there are any work procs, call them. Return whether we did so */ static Boolean CallWorkProc( XtAppContext app) { register WorkProcRec *w = app->workQueue; Boolean delete; if (w == NULL) return FALSE; app->workQueue = w->next; delete = (*(w->proc)) (w->closure); if (delete) { LOCK_PROCESS; w->next = freeWorkRecs; freeWorkRecs = w; UNLOCK_PROCESS; } else { w->next = app->workQueue; app->workQueue = w; } return TRUE; } /* * XtNextEvent() * return next event; */ void XtNextEvent( XEvent *event) { XtAppNextEvent(_XtDefaultAppContext(), event); } void _XtRefreshMapping( XEvent* event, _XtBoolean dispatch) { XtPerDisplay pd; LOCK_PROCESS; pd = _XtGetPerDisplay(event->xmapping.display); if (event->xmapping.request != MappingPointer && pd && pd->keysyms && (event->xmapping.serial >= pd->keysyms_serial)) _XtBuildKeysymTables( event->xmapping.display, pd ); XRefreshKeyboardMapping(&event->xmapping); if (dispatch && pd && pd->mapping_callbacks) XtCallCallbackList((Widget) NULL, (XtCallbackList)pd->mapping_callbacks, (XtPointer)event ); UNLOCK_PROCESS; } void XtAppNextEvent( XtAppContext app, XEvent *event) { int i, d; LOCK_APP(app); for (;;) { if (app->count == 0) DoOtherSources(app); else { for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (d == 0) DoOtherSources(app); if (XEventsQueued(app->list[d], QueuedAfterReading)) goto GotEvent; } for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (XEventsQueued(app->list[d], QueuedAfterFlush)) goto GotEvent; } } /* We're ready to wait...if there is a work proc, call it */ if (CallWorkProc(app)) continue; d = _XtWaitForSomething (app, FALSE, FALSE, FALSE, FALSE, TRUE, #ifdef XTHREADS TRUE, #endif (unsigned long *) NULL); if (d != -1) { GotEvent: XNextEvent (app->list[d], event); #ifdef XTHREADS /* assert(app->list[d] == event->xany.display); */ #endif app->last = d; if (event->xany.type == MappingNotify) _XtRefreshMapping(event, False); UNLOCK_APP(app); return; } } /* for */ } void XtProcessEvent( XtInputMask mask) { XtAppProcessEvent(_XtDefaultAppContext(), mask); } void XtAppProcessEvent( XtAppContext app, XtInputMask mask) { int i, d; XEvent event; struct timeval cur_time; LOCK_APP(app); if (mask == 0) { UNLOCK_APP(app); return; } for (;;) { if (mask & XtIMSignal && app->signalQueue != NULL) { SignalEventRec *se_ptr = app->signalQueue; while (se_ptr != NULL) { if (se_ptr->se_notice) { se_ptr->se_notice = FALSE; SeCallProc(se_ptr); UNLOCK_APP(app); return; } se_ptr = se_ptr->se_next; } } if (mask & XtIMTimer && app->timerQueue != NULL) { X_GETTIMEOFDAY (&cur_time); FIXUP_TIMEVAL(cur_time); if (IS_AT_OR_AFTER(app->timerQueue->te_timer_value, cur_time)){ TimerEventRec *te_ptr = app->timerQueue; app->timerQueue = app->timerQueue->te_next; te_ptr->te_next = NULL; if (te_ptr->te_proc != NULL) TeCallProc(te_ptr); LOCK_PROCESS; te_ptr->te_next = freeTimerRecs; freeTimerRecs = te_ptr; UNLOCK_PROCESS; UNLOCK_APP(app); return; } } if (mask & XtIMAlternateInput) { if (app->input_count > 0 && app->outstandingQueue == NULL) { /* Call _XtWaitForSomething to get input queued up */ (void) _XtWaitForSomething (app, TRUE, TRUE, FALSE, TRUE, FALSE, #ifdef XTHREADS TRUE, #endif (unsigned long *)NULL); } if (app->outstandingQueue != NULL) { InputEvent *ie_ptr = app->outstandingQueue; app->outstandingQueue = ie_ptr->ie_oq; ie_ptr->ie_oq = NULL; IeCallProc(ie_ptr); UNLOCK_APP(app); return; } } if (mask & XtIMXEvent) { for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (XEventsQueued(app->list[d], QueuedAfterReading)) goto GotEvent; } for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (XEventsQueued(app->list[d], QueuedAfterFlush)) goto GotEvent; } } /* Nothing to do...wait for something */ if (CallWorkProc(app)) continue; d = _XtWaitForSomething (app, (mask & XtIMXEvent ? FALSE : TRUE), (mask & XtIMTimer ? FALSE : TRUE), (mask & XtIMAlternateInput ? FALSE : TRUE), (mask & XtIMSignal ? FALSE : TRUE), TRUE, #ifdef XTHREADS TRUE, #endif (unsigned long *) NULL); if (mask & XtIMXEvent && d != -1) { GotEvent: XNextEvent(app->list[d], &event); #ifdef XTHREADS /* assert(app->list[d] == event.xany.display); */ #endif app->last = d; if (event.xany.type == MappingNotify) { _XtRefreshMapping(&event, False); } XtDispatchEvent(&event); UNLOCK_APP(app); return; } } } Boolean XtPending(void) { return (XtAppPending(_XtDefaultAppContext()) != 0); } XtInputMask XtAppPending( XtAppContext app) { struct timeval cur_time; int d; XtInputMask ret = 0; /* * Check for pending X events */ LOCK_APP(app); for (d = 0; d < app->count; d++) { if (XEventsQueued(app->list[d], QueuedAfterReading)) { ret = XtIMXEvent; break; } } if (ret == 0) { for (d = 0; d < app->count; d++) { if (XEventsQueued(app->list[d], QueuedAfterFlush)) { ret = XtIMXEvent; break; } } } if (app->signalQueue != NULL) { SignalEventRec *se_ptr = app->signalQueue; while (se_ptr != NULL) { if (se_ptr->se_notice) { ret |= XtIMSignal; break; } se_ptr = se_ptr->se_next; } } /* * Check for pending alternate input */ if (app->timerQueue != NULL) { /* check timeout queue */ X_GETTIMEOFDAY (&cur_time); FIXUP_TIMEVAL(cur_time); if ((IS_AT_OR_AFTER(app->timerQueue->te_timer_value, cur_time)) && (app->timerQueue->te_proc != NULL)) { ret |= XtIMTimer; } } if (app->outstandingQueue != NULL) ret |= XtIMAlternateInput; else { /* This won't cause a wait, but will enqueue any input */ if(_XtWaitForSomething (app, FALSE, TRUE, FALSE, TRUE, FALSE, #ifdef XTHREADS TRUE, #endif (unsigned long *) NULL) != -1) ret |= XtIMXEvent; if (app->outstandingQueue != NULL) ret |= XtIMAlternateInput; } UNLOCK_APP(app); return ret; } /* Peek at alternate input and timer callbacks if there are any */ static Boolean PeekOtherSources( XtAppContext app) { struct timeval cur_time; if (app->outstandingQueue != NULL) return TRUE; if (app->signalQueue != NULL) { SignalEventRec *se_ptr = app->signalQueue; while (se_ptr != NULL) { if (se_ptr->se_notice) return TRUE; se_ptr = se_ptr->se_next; } } if (app->input_count > 0) { /* Call _XtWaitForSomething to get input queued up */ (void) _XtWaitForSomething (app, TRUE, TRUE, FALSE, TRUE, FALSE, #ifdef XTHREADS TRUE, #endif (unsigned long *)NULL); if (app->outstandingQueue != NULL) return TRUE; } if (app->timerQueue != NULL) { /* check timeout queue */ X_GETTIMEOFDAY (&cur_time); FIXUP_TIMEVAL(cur_time); if (IS_AT_OR_AFTER (app->timerQueue->te_timer_value, cur_time)) return TRUE; } return FALSE; } Boolean XtPeekEvent( XEvent *event) { return XtAppPeekEvent(_XtDefaultAppContext(), event); } Boolean XtAppPeekEvent_SkipTimer; Boolean XtAppPeekEvent( XtAppContext app, XEvent *event) { int i, d; Boolean foundCall = FALSE; LOCK_APP(app); for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (d == 0) foundCall = PeekOtherSources(app); if (XEventsQueued(app->list[d], QueuedAfterReading)) goto GotEvent; } for (i = 1; i <= app->count; i++) { d = (i + app->last) % app->count; if (XEventsQueued(app->list[d], QueuedAfterFlush)) goto GotEvent; } if (foundCall) { event->xany.type = 0; event->xany.display = NULL; event->xany.window = 0; UNLOCK_APP(app); return FALSE; } while (1) { d = _XtWaitForSomething (app, FALSE, FALSE, FALSE, FALSE, TRUE, #ifdef XTHREADS TRUE, #endif (unsigned long *) NULL); if (d != -1) { /* event */ GotEvent: XPeekEvent(app->list[d], event); app->last = (d == 0 ? app->count : d) - 1; UNLOCK_APP(app); return TRUE; } else { /* input or timer or signal */ /* * Check to see why a -1 was returned, if a timer expired, * call it and block some more */ if ((app->timerQueue != NULL) && ! XtAppPeekEvent_SkipTimer) { /* timer */ struct timeval cur_time; Bool did_timer = False; X_GETTIMEOFDAY (&cur_time); FIXUP_TIMEVAL(cur_time); while (IS_AT_OR_AFTER(app->timerQueue->te_timer_value, cur_time)) { TimerEventRec *te_ptr = app->timerQueue; app->timerQueue = app->timerQueue->te_next; te_ptr->te_next = NULL; if (te_ptr->te_proc != NULL) { TeCallProc(te_ptr); did_timer = True; } LOCK_PROCESS; te_ptr->te_next = freeTimerRecs; freeTimerRecs = te_ptr; UNLOCK_PROCESS; if (app->timerQueue == NULL) break; } if (did_timer) { for (d = 0; d < app->count; d++) /* the timer's procedure may have caused an event */ if (XEventsQueued(app->list[d], QueuedAfterFlush)) { goto GotEvent; } continue; /* keep blocking */ } } /* * spec is vague here; we'll assume signals also return FALSE, * of course to determine whether a signal is pending requires * walking the signalQueue looking for se_notice flags which * this code doesn't do. */ #if 0 if (app->signalQueue != NULL) { /* signal */ event->xany.type = 0; event->xany.display = NULL; event->xany.window = 0; UNLOCK_APP(app); return FALSE; } else #endif { /* input */ event->xany.type = 0; event->xany.display = NULL; event->xany.window = 0; UNLOCK_APP(app); return FALSE; } } } /* end while */ } _ptr); } se_ptr = se_ptr->se_next; } } #undef DrainQueue } /* If there are any work procs, call them. Return whether we did slibXt-1.1.5/src/Threads.c000064401431060000012000000244531252061032400154110ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ********************************************************/ /* Copyright 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #ifdef XTHREADS #define xmalloc __XtMalloc #define xfree XtFree #include #ifndef NDEBUG #define NDEBUG #endif #include #include typedef struct _ThreadStack { unsigned int size; int sp; struct _Tstack { xthread_t t; xcondition_t c; } *st; } ThreadStack; typedef struct _LockRec { xmutex_t mutex; int level; ThreadStack stack; #ifndef _XMUTEX_NESTS xthread_t holder; xcondition_t cond; #endif } LockRec; #define STACK_INCR 16 static LockPtr process_lock = NULL; static void InitProcessLock(void) { if(!process_lock) { process_lock = XtNew(LockRec); process_lock->mutex = xmutex_malloc(); xmutex_init(process_lock->mutex); process_lock->level = 0; #ifndef _XMUTEX_NESTS process_lock->cond = xcondition_malloc(); xcondition_init(process_lock->cond); xthread_clear_id(process_lock->holder); #endif } } static void ProcessLock(void) { #ifdef _XMUTEX_NESTS xmutex_lock(process_lock->mutex); process_lock->level++; #else xthread_t this_thread = xthread_self(); xmutex_lock(process_lock->mutex); if (!xthread_have_id(process_lock->holder)) { process_lock->holder = this_thread; xmutex_unlock(process_lock->mutex); return; } if (xthread_equal(process_lock->holder,this_thread)) { process_lock->level++; xmutex_unlock(process_lock->mutex); return; } while(xthread_have_id(process_lock->holder)) xcondition_wait(process_lock->cond, process_lock->mutex); process_lock->holder = this_thread; assert(xthread_equal(process_lock->holder, this_thread)); xmutex_unlock(process_lock->mutex); #endif } static void ProcessUnlock(void) { #ifdef _XMUTEX_NESTS process_lock->level--; xmutex_unlock(process_lock->mutex); #else xmutex_lock(process_lock->mutex); assert(xthread_equal(process_lock->holder, xthread_self())); if (process_lock->level != 0) { process_lock->level--; xmutex_unlock(process_lock->mutex); return; } xthread_clear_id(process_lock->holder); xcondition_signal(process_lock->cond); xmutex_unlock(process_lock->mutex); #endif } static void AppLock(XtAppContext app) { LockPtr app_lock = app->lock_info; #ifdef _XMUTEX_NESTS xmutex_lock(app_lock->mutex); app_lock->level++; #else xthread_t self = xthread_self(); xmutex_lock(app_lock->mutex); if (!xthread_have_id(app_lock->holder)) { app_lock->holder = self; assert(xthread_equal(app_lock->holder, self)); xmutex_unlock(app_lock->mutex); return; } if (xthread_equal(app_lock->holder, self)) { app_lock->level++; xmutex_unlock(app_lock->mutex); return; } while(xthread_have_id(app_lock->holder)) { xcondition_wait(app_lock->cond, app_lock->mutex); } app_lock->holder = self; assert(xthread_equal(app_lock->holder, self)); xmutex_unlock(app_lock->mutex); #endif } static void AppUnlock(XtAppContext app) { LockPtr app_lock = app->lock_info; #ifdef _XMUTEX_NESTS app_lock->level--; xmutex_unlock(app_lock->mutex); #else xthread_t self; self = xthread_self(); xmutex_lock(app_lock->mutex); assert(xthread_equal(app_lock->holder, self)); if (app_lock->level != 0) { app_lock->level--; xmutex_unlock(app_lock->mutex); return; } xthread_clear_id(app_lock->holder); xcondition_signal(app_lock->cond); xmutex_unlock(app_lock->mutex); #endif } static void YieldAppLock( XtAppContext app, Boolean* push_thread, Boolean* pushed_thread, int* level) { LockPtr app_lock = app->lock_info; xthread_t self = xthread_self(); #ifndef _XMUTEX_NESTS xmutex_lock(app_lock->mutex); assert(xthread_equal(app_lock->holder, self)); #endif *level = app_lock->level; if (*push_thread) { *push_thread = FALSE; *pushed_thread = TRUE; if(app_lock->stack.sp == (int)app_lock->stack.size - 1) { unsigned ii; app_lock->stack.st = (struct _Tstack *) XtRealloc ((char *)app_lock->stack.st, (app_lock->stack.size + STACK_INCR) * sizeof (struct _Tstack)); ii = app_lock->stack.size; app_lock->stack.size += STACK_INCR; for ( ; ii < app_lock->stack.size; ii++) { app_lock->stack.st[ii].c = xcondition_malloc(); xcondition_init(app_lock->stack.st[ii].c); } } app_lock->stack.st[++(app_lock->stack.sp)].t = self; } #ifdef _XMUTEX_NESTS while (app_lock->level > 0) { app_lock->level--; xmutex_unlock(app_lock->mutex); } #else xcondition_signal(app_lock->cond); app_lock->level = 0; xthread_clear_id(app_lock->holder); xmutex_unlock(app_lock->mutex); #endif } static void RestoreAppLock( XtAppContext app, int level, Boolean* pushed_thread) { LockPtr app_lock = app->lock_info; xthread_t self = xthread_self(); xmutex_lock(app_lock->mutex); #ifdef _XMUTEX_NESTS app_lock->level++; #else while(xthread_have_id(app_lock->holder)) { xcondition_wait(app_lock->cond, app_lock->mutex); } #endif if (!xthread_equal(app_lock->stack.st[app_lock->stack.sp].t, self)) { int ii; for (ii = app_lock->stack.sp - 1; ii >= 0; ii--) { if (xthread_equal(app_lock->stack.st[ii].t, self)) { xcondition_wait(app_lock->stack.st[ii].c, app_lock->mutex); break; } } #ifndef _XMUTEX_NESTS while(xthread_have_id(app_lock->holder)) { xcondition_wait(app_lock->cond, app_lock->mutex); } #endif } #ifdef _XMUTEX_NESTS while (app_lock->level < level) { xmutex_lock(app_lock->mutex); app_lock->level++; } #else app_lock->holder = self; app_lock->level = level; assert(xthread_equal(app_lock->holder, self)); #endif if (*pushed_thread) { *pushed_thread = FALSE; (app_lock->stack.sp)--; if (app_lock->stack.sp >= 0) { xcondition_signal (app_lock->stack.st[app_lock->stack.sp].c); } } #ifndef _XMUTEX_NESTS xmutex_unlock(app_lock->mutex); #endif } static void FreeAppLock(XtAppContext app) { unsigned ii; LockPtr app_lock = app->lock_info; if(app_lock) { xmutex_clear(app_lock->mutex); xmutex_free(app_lock->mutex); #ifndef _XMUTEX_NESTS xcondition_clear(app_lock->cond); xcondition_free(app_lock->cond); #endif if(app_lock->stack.st != (struct _Tstack *)NULL) { for (ii = 0; ii < app_lock->stack.size; ii++) { xcondition_clear(app_lock->stack.st[ii].c); xcondition_free(app_lock->stack.st[ii].c); } XtFree((char *)app_lock->stack.st); } XtFree((char *)app_lock); app->lock_info = NULL; } } static void InitAppLock(XtAppContext app) { int ii; LockPtr app_lock; app->lock = AppLock; app->unlock = AppUnlock; app->yield_lock = YieldAppLock; app->restore_lock = RestoreAppLock; app->free_lock = FreeAppLock; app_lock = app->lock_info = XtNew(LockRec); app_lock->mutex = xmutex_malloc(); xmutex_init(app_lock->mutex); app_lock->level = 0; #ifndef _XMUTEX_NESTS app_lock->cond = xcondition_malloc(); xcondition_init(app_lock->cond); xthread_clear_id(app_lock->holder); #endif app_lock->stack.size = STACK_INCR; app_lock->stack.sp = -1; app_lock->stack.st = (struct _Tstack *)__XtMalloc(sizeof(struct _Tstack)*STACK_INCR); for (ii = 0; ii < STACK_INCR; ii++) { app_lock->stack.st[ii].c = xcondition_malloc(); xcondition_init(app_lock->stack.st[ii].c); } } #endif /* defined(XTHREADS) */ void XtAppLock(XtAppContext app) { #ifdef XTHREADS if(app->lock) (*app->lock)(app); #endif } void XtAppUnlock(XtAppContext app) { #ifdef XTHREADS if(app->unlock) (*app->unlock)(app); #endif } void XtProcessLock(void) { #ifdef XTHREADS if(_XtProcessLock) (*_XtProcessLock)(); #endif } void XtProcessUnlock(void) { #ifdef XTHREADS if(_XtProcessUnlock) (*_XtProcessUnlock)(); #endif } Boolean XtToolkitThreadInitialize(void) { #ifdef XTHREADS if (_XtProcessLock == NULL) { #ifdef xthread_init xthread_init(); #endif InitProcessLock(); _XtProcessLock = ProcessLock; _XtProcessUnlock = ProcessUnlock; _XtInitAppLock = InitAppLock; } return True; #else return False; #endif } INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LlibXt-1.1.5/src/TMparse.c000064401431060000012000001643431252061032400153750ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include #include #ifndef NOTASCII #define XK_LATIN1 #endif #define XK_MISCELLANY #include #ifdef CACHE_TRANSLATIONS # ifdef REFCNT_TRANSLATIONS # define CACHED XtCacheAll | XtCacheRefCount # else # define CACHED XtCacheAll # endif #else # define CACHED XtCacheNone #endif #ifndef MAX #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif static String XtNtranslationParseError = "translationParseError"; typedef int EventType; typedef String (*ParseProc)( String /* str; */, Opaque /* closure; */, EventPtr /* event; */, Boolean* /* error */); typedef TMShortCard Value; typedef void (*ModifierProc)(Value, LateBindingsPtr*, Boolean, Value*); typedef struct _ModifierRec { const char *name; XrmQuark signature; ModifierProc modifierParseProc; Value value; } ModifierRec, *ModifierKeys; typedef struct _EventKey { const char *event; XrmQuark signature; EventType eventType; ParseProc parseDetail; Opaque closure; }EventKey, *EventKeys; typedef struct { const char *name; XrmQuark signature; Value value; } NameValueRec, *NameValueTable; static void ParseModImmed(Value, LateBindingsPtr*, Boolean, Value*); static void ParseModSym(Value, LateBindingsPtr*, Boolean, Value*); static String PanicModeRecovery(String); static String CheckForPoundSign(String, _XtTranslateOp, _XtTranslateOp *); static KeySym StringToKeySym(String, Boolean *); static ModifierRec modifiers[] = { {"Shift", 0, ParseModImmed,ShiftMask}, {"Lock", 0, ParseModImmed,LockMask}, {"Ctrl", 0, ParseModImmed,ControlMask}, {"Mod1", 0, ParseModImmed,Mod1Mask}, {"Mod2", 0, ParseModImmed,Mod2Mask}, {"Mod3", 0, ParseModImmed,Mod3Mask}, {"Mod4", 0, ParseModImmed,Mod4Mask}, {"Mod5", 0, ParseModImmed,Mod5Mask}, {"Meta", 0, ParseModSym, XK_Meta_L}, {"m", 0, ParseModSym, XK_Meta_L}, {"h", 0, ParseModSym, XK_Hyper_L}, {"su", 0, ParseModSym, XK_Super_L}, {"a", 0, ParseModSym, XK_Alt_L}, {"Hyper", 0, ParseModSym, XK_Hyper_L}, {"Super", 0, ParseModSym, XK_Super_L}, {"Alt", 0, ParseModSym, XK_Alt_L}, {"Button1", 0, ParseModImmed,Button1Mask}, {"Button2", 0, ParseModImmed,Button2Mask}, {"Button3", 0, ParseModImmed,Button3Mask}, {"Button4", 0, ParseModImmed,Button4Mask}, {"Button5", 0, ParseModImmed,Button5Mask}, {"c", 0, ParseModImmed,ControlMask}, {"s", 0, ParseModImmed,ShiftMask}, {"l", 0, ParseModImmed,LockMask}, }; static NameValueRec buttonNames[] = { {"Button1", 0, Button1}, {"Button2", 0, Button2}, {"Button3", 0, Button3}, {"Button4", 0, Button4}, {"Button5", 0, Button5}, {NULL, NULLQUARK, 0}, }; static NameValueRec motionDetails[] = { {"Normal", 0, NotifyNormal}, {"Hint", 0, NotifyHint}, {NULL, NULLQUARK, 0}, }; static NameValueRec notifyModes[] = { {"Normal", 0, NotifyNormal}, {"Grab", 0, NotifyGrab}, {"Ungrab", 0, NotifyUngrab}, {"WhileGrabbed", 0, NotifyWhileGrabbed}, {NULL, NULLQUARK, 0}, }; #if 0 static NameValueRec notifyDetail[] = { {"Ancestor", 0, NotifyAncestor}, {"Virtual", 0, NotifyVirtual}, {"Inferior", 0, NotifyInferior}, {"Nonlinear", 0, NotifyNonlinear}, {"NonlinearVirtual", 0, NotifyNonlinearVirtual}, {"Pointer", 0, NotifyPointer}, {"PointerRoot", 0, NotifyPointerRoot}, {"DetailNone", 0, NotifyDetailNone}, {NULL, NULLQUARK, 0}, }; static NameValueRec visibilityNotify[] = { {"Unobscured", 0, VisibilityUnobscured}, {"PartiallyObscured", 0, VisibilityPartiallyObscured}, {"FullyObscured", 0, VisibilityFullyObscured}, {NULL, NULLQUARK, 0}, }; static NameValueRec circulation[] = { {"OnTop", 0, PlaceOnTop}, {"OnBottom", 0, PlaceOnBottom}, {NULL, NULLQUARK, 0}, }; static NameValueRec propertyChanged[] = { {"NewValue", 0, PropertyNewValue}, {"Delete", 0, PropertyDelete}, {NULL, NULLQUARK, 0}, }; #endif /*0*/ static NameValueRec mappingNotify[] = { {"Modifier", 0, MappingModifier}, {"Keyboard", 0, MappingKeyboard}, {"Pointer", 0, MappingPointer}, {NULL, NULLQUARK, 0}, }; static String ParseKeySym(String, Opaque, EventPtr, Boolean*); static String ParseKeyAndModifiers(String, Opaque, EventPtr, Boolean*); static String ParseTable(String, Opaque, EventPtr, Boolean*); static String ParseImmed(String, Opaque, EventPtr, Boolean*); static String ParseAddModifier(String, Opaque, EventPtr, Boolean*); static String ParseNone(String, Opaque, EventPtr, Boolean*); static String ParseAtom(String, Opaque, EventPtr, Boolean*); static EventKey events[] = { /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"KeyPress", NULLQUARK, KeyPress, ParseKeySym, NULL}, {"Key", NULLQUARK, KeyPress, ParseKeySym, NULL}, {"KeyDown", NULLQUARK, KeyPress, ParseKeySym, NULL}, {"Ctrl", NULLQUARK, KeyPress, ParseKeyAndModifiers,(Opaque)ControlMask}, {"Shift", NULLQUARK, KeyPress, ParseKeyAndModifiers,(Opaque)ShiftMask}, {"Meta", NULLQUARK, KeyPress, ParseKeyAndModifiers,(Opaque)NULL}, {"KeyUp", NULLQUARK, KeyRelease, ParseKeySym, NULL}, {"KeyRelease", NULLQUARK, KeyRelease, ParseKeySym, NULL}, {"ButtonPress", NULLQUARK, ButtonPress, ParseTable,(Opaque)buttonNames}, {"BtnDown", NULLQUARK, ButtonPress, ParseTable,(Opaque)buttonNames}, {"Btn1Down", NULLQUARK, ButtonPress, ParseImmed,(Opaque)Button1}, {"Btn2Down", NULLQUARK, ButtonPress, ParseImmed,(Opaque)Button2}, {"Btn3Down", NULLQUARK, ButtonPress, ParseImmed,(Opaque)Button3}, {"Btn4Down", NULLQUARK, ButtonPress, ParseImmed,(Opaque)Button4}, {"Btn5Down", NULLQUARK, ButtonPress, ParseImmed,(Opaque)Button5}, /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"ButtonRelease", NULLQUARK, ButtonRelease, ParseTable,(Opaque)buttonNames}, {"BtnUp", NULLQUARK, ButtonRelease, ParseTable,(Opaque)buttonNames}, {"Btn1Up", NULLQUARK, ButtonRelease, ParseImmed,(Opaque)Button1}, {"Btn2Up", NULLQUARK, ButtonRelease, ParseImmed,(Opaque)Button2}, {"Btn3Up", NULLQUARK, ButtonRelease, ParseImmed,(Opaque)Button3}, {"Btn4Up", NULLQUARK, ButtonRelease, ParseImmed,(Opaque)Button4}, {"Btn5Up", NULLQUARK, ButtonRelease, ParseImmed,(Opaque)Button5}, {"MotionNotify", NULLQUARK, MotionNotify, ParseTable, (Opaque)motionDetails}, {"PtrMoved", NULLQUARK, MotionNotify, ParseTable, (Opaque)motionDetails}, {"Motion", NULLQUARK, MotionNotify, ParseTable, (Opaque)motionDetails}, {"MouseMoved", NULLQUARK, MotionNotify, ParseTable, (Opaque)motionDetails}, {"BtnMotion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)AnyButtonMask}, {"Btn1Motion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)Button1Mask}, {"Btn2Motion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)Button2Mask}, {"Btn3Motion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)Button3Mask}, {"Btn4Motion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)Button4Mask}, {"Btn5Motion", NULLQUARK, MotionNotify, ParseAddModifier, (Opaque)Button5Mask}, {"EnterNotify", NULLQUARK, EnterNotify, ParseTable,(Opaque)notifyModes}, {"Enter", NULLQUARK, EnterNotify, ParseTable,(Opaque)notifyModes}, {"EnterWindow", NULLQUARK, EnterNotify, ParseTable,(Opaque)notifyModes}, {"LeaveNotify", NULLQUARK, LeaveNotify, ParseTable,(Opaque)notifyModes}, {"LeaveWindow", NULLQUARK, LeaveNotify, ParseTable,(Opaque)notifyModes}, {"Leave", NULLQUARK, LeaveNotify, ParseTable,(Opaque)notifyModes}, /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"FocusIn", NULLQUARK, FocusIn, ParseTable,(Opaque)notifyModes}, {"FocusOut", NULLQUARK, FocusOut, ParseTable,(Opaque)notifyModes}, {"KeymapNotify", NULLQUARK, KeymapNotify, ParseNone, NULL}, {"Keymap", NULLQUARK, KeymapNotify, ParseNone, NULL}, {"Expose", NULLQUARK, Expose, ParseNone, NULL}, {"GraphicsExpose", NULLQUARK, GraphicsExpose, ParseNone, NULL}, {"GrExp", NULLQUARK, GraphicsExpose, ParseNone, NULL}, {"NoExpose", NULLQUARK, NoExpose, ParseNone, NULL}, {"NoExp", NULLQUARK, NoExpose, ParseNone, NULL}, {"VisibilityNotify",NULLQUARK, VisibilityNotify,ParseNone, NULL}, {"Visible", NULLQUARK, VisibilityNotify,ParseNone, NULL}, {"CreateNotify", NULLQUARK, CreateNotify, ParseNone, NULL}, {"Create", NULLQUARK, CreateNotify, ParseNone, NULL}, /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"DestroyNotify", NULLQUARK, DestroyNotify, ParseNone, NULL}, {"Destroy", NULLQUARK, DestroyNotify, ParseNone, NULL}, {"UnmapNotify", NULLQUARK, UnmapNotify, ParseNone, NULL}, {"Unmap", NULLQUARK, UnmapNotify, ParseNone, NULL}, {"MapNotify", NULLQUARK, MapNotify, ParseNone, NULL}, {"Map", NULLQUARK, MapNotify, ParseNone, NULL}, {"MapRequest", NULLQUARK, MapRequest, ParseNone, NULL}, {"MapReq", NULLQUARK, MapRequest, ParseNone, NULL}, {"ReparentNotify", NULLQUARK, ReparentNotify, ParseNone, NULL}, {"Reparent", NULLQUARK, ReparentNotify, ParseNone, NULL}, {"ConfigureNotify", NULLQUARK, ConfigureNotify, ParseNone, NULL}, {"Configure", NULLQUARK, ConfigureNotify, ParseNone, NULL}, {"ConfigureRequest",NULLQUARK, ConfigureRequest,ParseNone, NULL}, {"ConfigureReq", NULLQUARK, ConfigureRequest,ParseNone, NULL}, /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"GravityNotify", NULLQUARK, GravityNotify, ParseNone, NULL}, {"Grav", NULLQUARK, GravityNotify, ParseNone, NULL}, {"ResizeRequest", NULLQUARK, ResizeRequest, ParseNone, NULL}, {"ResReq", NULLQUARK, ResizeRequest, ParseNone, NULL}, {"CirculateNotify", NULLQUARK, CirculateNotify, ParseNone, NULL}, {"Circ", NULLQUARK, CirculateNotify, ParseNone, NULL}, {"CirculateRequest",NULLQUARK, CirculateRequest,ParseNone, NULL}, {"CircReq", NULLQUARK, CirculateRequest,ParseNone, NULL}, {"PropertyNotify", NULLQUARK, PropertyNotify, ParseAtom, NULL}, {"Prop", NULLQUARK, PropertyNotify, ParseAtom, NULL}, {"SelectionClear", NULLQUARK, SelectionClear, ParseAtom, NULL}, {"SelClr", NULLQUARK, SelectionClear, ParseAtom, NULL}, {"SelectionRequest",NULLQUARK, SelectionRequest,ParseAtom, NULL}, {"SelReq", NULLQUARK, SelectionRequest,ParseAtom, NULL}, /* Event Name, Quark, Event Type, Detail Parser, Closure */ {"SelectionNotify", NULLQUARK, SelectionNotify, ParseAtom, NULL}, {"Select", NULLQUARK, SelectionNotify, ParseAtom, NULL}, {"ColormapNotify", NULLQUARK, ColormapNotify, ParseNone, NULL}, {"Clrmap", NULLQUARK, ColormapNotify, ParseNone, NULL}, {"ClientMessage", NULLQUARK, ClientMessage, ParseAtom, NULL}, {"Message", NULLQUARK, ClientMessage, ParseAtom, NULL}, {"MappingNotify", NULLQUARK, MappingNotify, ParseTable, (Opaque)mappingNotify}, {"Mapping", NULLQUARK, MappingNotify, ParseTable, (Opaque)mappingNotify}, #ifdef DEBUG # ifdef notdef {"Timer", NULLQUARK, _XtTimerEventType,ParseNone, NULL}, {"EventTimer", NULLQUARK, _XtEventTimerEventType,ParseNone,NULL}, # endif /* notdef */ #endif /* DEBUG */ /* Event Name, Quark, Event Type, Detail Parser, Closure */ }; #define IsNewline(str) ((str) == '\n') #define ScanFor(str, ch) \ while ((*(str) != (ch)) && (*(str) != '\0') && !IsNewline(*(str))) (str)++ #define ScanNumeric(str) while ('0' <= *(str) && *(str) <= '9') (str)++ #define ScanAlphanumeric(str) \ while (('A' <= *(str) && *(str) <= 'Z') || \ ('a' <= *(str) && *(str) <= 'z') || \ ('0' <= *(str) && *(str) <= '9')) (str)++ #define ScanWhitespace(str) \ while (*(str) == ' ' || *(str) == '\t') (str)++ static Boolean initialized = FALSE; static XrmQuark QMeta; static XrmQuark QCtrl; static XrmQuark QNone; static XrmQuark QAny; static void FreeEventSeq( EventSeqPtr eventSeq) { register EventSeqPtr evs = eventSeq; while (evs != NULL) { evs->state = (StatePtr) evs; if (evs->next != NULL && evs->next->state == (StatePtr) evs->next) evs->next = NULL; evs = evs->next; } evs = eventSeq; while (evs != NULL) { register EventPtr event = evs; evs = evs->next; if (evs == event) evs = NULL; XtFree((char *)event); } } static void CompileNameValueTable( NameValueTable table) { register int i; for (i=0; table[i].name; i++) table[i].signature = XrmPermStringToQuark(table[i].name); } static int OrderEvents(_Xconst void *a, _Xconst void *b) { return ((((_Xconst EventKey *)a)->signature < ((_Xconst EventKey *)b)->signature) ? -1 : 1); } static void Compile_XtEventTable( EventKeys table, Cardinal count) { register int i; register EventKeys entry = table; for (i=count; --i >= 0; entry++) entry->signature = XrmPermStringToQuark(entry->event); qsort(table, count, sizeof(EventKey), OrderEvents); } static int OrderModifiers(_Xconst void *a, _Xconst void *b) { return ((((_Xconst ModifierRec *)a)->signature < ((_Xconst ModifierRec *)b)->signature) ? -1 : 1); } static void Compile_XtModifierTable( ModifierKeys table, Cardinal count) { register int i; register ModifierKeys entry = table; for (i=count; --i >= 0; entry++) entry->signature = XrmPermStringToQuark(entry->name); qsort(table, count, sizeof(ModifierRec), OrderModifiers); } static String PanicModeRecovery( String str) { ScanFor(str,'\n'); if (*str == '\n') str++; return str; } static void Syntax( String str0,String str1) { Cardinal num_params = 2; String params[2]; params[0] = str0; params[1] = str1; XtWarningMsg(XtNtranslationParseError,"parseError",XtCXtToolkitError, "translation table syntax error: %s %s",params,&num_params); } static Cardinal LookupTMEventType( String eventStr, Boolean *error) { register int i = 0, left, right; register XrmQuark signature; static int previous = 0; LOCK_PROCESS; if ((signature = StringToQuark(eventStr)) == events[previous].signature) { UNLOCK_PROCESS; return (Cardinal) previous; } left = 0; right = XtNumber(events) - 1; while (left <= right) { i = (left + right) >> 1; if (signature < events[i].signature) right = i - 1; else if (signature > events[i].signature) left = i + 1; else { previous = i; UNLOCK_PROCESS; return (Cardinal) i; } } Syntax("Unknown event type : ",eventStr); *error = TRUE; UNLOCK_PROCESS; return (Cardinal) i; } static void StoreLateBindings( KeySym keysymL, Boolean notL, KeySym keysymR, Boolean notR, LateBindingsPtr* lateBindings) { LateBindingsPtr temp; Boolean pair = FALSE; unsigned long count,number; if (lateBindings != NULL){ temp = *lateBindings; if (temp != NULL) { for (count = 0; temp[count].keysym; count++){/*EMPTY*/} } else count = 0; if (! keysymR){ number = 1;pair = FALSE; } else{ number = 2;pair = TRUE; } temp = (LateBindingsPtr)XtRealloc((char *)temp, (unsigned)((count+number+1) * sizeof(LateBindings)) ); *lateBindings = temp; temp[count].knot = notL; temp[count].pair = pair; if (count == 0) temp[count].ref_count = 1; temp[count++].keysym = keysymL; if (keysymR){ temp[count].knot = notR; temp[count].pair = FALSE; temp[count].ref_count = 0; temp[count++].keysym = keysymR; } temp[count].knot = temp[count].pair = FALSE; temp[count].ref_count = 0; temp[count].keysym = 0; } } static void _XtParseKeysymMod( String name, LateBindingsPtr* lateBindings, Boolean notFlag, Value *valueP, Boolean *error) { KeySym keySym; keySym = StringToKeySym(name, error); *valueP = 0; if (keySym != NoSymbol) { StoreLateBindings(keySym,notFlag,(KeySym) NULL,FALSE,lateBindings); } } static Boolean _XtLookupModifier( XrmQuark signature, LateBindingsPtr* lateBindings, Boolean notFlag, Value *valueP, Bool constMask) { register int i, left, right; static int previous = 0; LOCK_PROCESS; if (signature == modifiers[previous].signature) { if (constMask) *valueP = modifiers[previous].value; else /* if (modifiers[previous].modifierParseProc) always true */ (*modifiers[previous].modifierParseProc) (modifiers[previous].value, lateBindings, notFlag, valueP); UNLOCK_PROCESS; return TRUE; } left = 0; right = XtNumber(modifiers) - 1; while (left <= right) { i = (left + right) >> 1; if (signature < modifiers[i].signature) right = i - 1; else if (signature > modifiers[i].signature) left = i + 1; else { previous = i; if (constMask) *valueP = modifiers[i].value; else /* if (modifiers[i].modifierParseProc) always true */ (*modifiers[i].modifierParseProc) (modifiers[i].value, lateBindings, notFlag, valueP); UNLOCK_PROCESS; return TRUE; } } UNLOCK_PROCESS; return FALSE; } static String ScanIdent( register String str) { ScanAlphanumeric(str); while ( ('A' <= *str && *str <= 'Z') || ('a' <= *str && *str <= 'z') || ('0' <= *str && *str <= '9') || (*str == '-') || (*str == '_') || (*str == '$') ) str++; return str; } static String FetchModifierToken( String str, XrmQuark *token_return) { String start = str; if (*str == '$') { *token_return = QMeta; str++; return str; } if (*str == '^') { *token_return = QCtrl; str++; return str; } str = ScanIdent(str); if (start != str) { char modStrbuf[100]; char* modStr; modStr = XtStackAlloc ((size_t)(str - start + 1), modStrbuf); if (modStr == NULL) _XtAllocError (NULL); (void) memmove(modStr, start, str-start); modStr[str-start] = '\0'; *token_return = XrmStringToQuark(modStr); XtStackFree (modStr, modStrbuf); return str; } return str; } static String ParseModifiers( register String str, EventPtr event, Boolean* error) { register String start; Boolean notFlag, exclusive, keysymAsMod; Value maskBit; XrmQuark Qmod; ScanWhitespace(str); start = str; str = FetchModifierToken(str, &Qmod); exclusive = FALSE; if (start != str) { if (Qmod == QNone) { event->event.modifierMask = ~0; event->event.modifiers = 0; ScanWhitespace(str); return str; } else if (Qmod == QAny) { /*backward compatability*/ event->event.modifierMask = 0; event->event.modifiers = AnyModifier; ScanWhitespace(str); return str; } str = start; /*if plain modifier, reset to beginning */ } else while (*str == '!' || *str == ':') { if (*str == '!') { exclusive = TRUE; str++; ScanWhitespace(str); } if (*str == ':') { event->event.standard = TRUE; str++; ScanWhitespace(str); } } while (*str != '<') { if (*str == '~') { notFlag = TRUE; str++; } else notFlag = FALSE; if (*str == '@') { keysymAsMod = TRUE; str++; } else keysymAsMod = FALSE; start = str; str = FetchModifierToken(str, &Qmod); if (start == str) { Syntax("Modifier or '<' expected",""); *error = TRUE; return PanicModeRecovery(str); } if (keysymAsMod) { _XtParseKeysymMod(XrmQuarkToString(Qmod), &event->event.lateModifiers, notFlag,&maskBit, error); if (*error) return PanicModeRecovery(str); } else if (!_XtLookupModifier(Qmod, &event->event.lateModifiers, notFlag, &maskBit, FALSE)) { Syntax("Unknown modifier name: ", XrmQuarkToString(Qmod)); *error = TRUE; return PanicModeRecovery(str); } event->event.modifierMask |= maskBit; if (notFlag) event->event.modifiers &= ~maskBit; else event->event.modifiers |= maskBit; ScanWhitespace(str); } if (exclusive) event->event.modifierMask = ~0; return str; } static String ParseXtEventType( register String str, EventPtr event, Cardinal *tmEventP, Boolean* error) { String start = str; char eventTypeStrbuf[100]; char* eventTypeStr; ScanAlphanumeric(str); eventTypeStr = XtStackAlloc ((size_t)(str - start + 1), eventTypeStrbuf); if (eventTypeStr == NULL) _XtAllocError (NULL); (void) memmove(eventTypeStr, start, str-start); eventTypeStr[str-start] = '\0'; *tmEventP = LookupTMEventType(eventTypeStr,error); XtStackFree (eventTypeStr, eventTypeStrbuf); if (*error) return PanicModeRecovery(str); event->event.eventType = events[*tmEventP].eventType; return str; } static unsigned long StrToHex( String str) { register char c; register unsigned long val = 0; while ((c = *str)) { if ('0' <= c && c <= '9') val = val*16+c-'0'; else if ('a' <= c && c <= 'z') val = val*16+c-'a'+10; else if ('A' <= c && c <= 'Z') val = val*16+c-'A'+10; else return 0; str++; } return val; } static unsigned long StrToOct( String str) { register char c; register unsigned long val = 0; while ((c = *str)) { if ('0' <= c && c <= '7') val = val*8+c-'0'; else return 0; str++; } return val; } static unsigned long StrToNum( String str) { register char c; register unsigned long val = 0; if (*str == '0') { str++; if (*str == 'x' || *str == 'X') return StrToHex(++str); else return StrToOct(str); } while ((c = *str)) { if ('0' <= c && c <= '9') val = val*10+c-'0'; else return 0; str++; } return val; } static KeySym StringToKeySym( String str, Boolean *error) { KeySym k; if (str == NULL || *str == '\0') return (KeySym) 0; #ifndef NOTASCII /* special case single character ASCII, for speed */ if (*(str+1) == '\0') { if (' ' <= *str && *str <= '~') return XK_space + (*str - ' '); } #endif if ('0' <= *str && *str <= '9') return (KeySym) StrToNum(str); k = XStringToKeysym(str); if (k != NoSymbol) return k; #ifdef NOTASCII /* fall-back case to preserve backwards compatibility; no-one * should be relying upon this! */ if (*(str+1) == '\0') return (KeySym) *str; #endif Syntax("Unknown keysym name: ", str); *error = TRUE; return NoSymbol; } /* ARGSUSED */ static void ParseModImmed( Value value, LateBindingsPtr* lateBindings, Boolean notFlag, Value* valueP) { *valueP = value; } /* is only valid with keysyms that have an _L and _R in their name; * and ignores keysym lookup errors (i.e. assumes only valid keysyms) */ static void ParseModSym( Value value, LateBindingsPtr* lateBindings, Boolean notFlag, Value* valueP) { register KeySym keysymL = (KeySym)value; register KeySym keysymR = keysymL + 1; /* valid for supported keysyms */ StoreLateBindings(keysymL,notFlag,keysymR,notFlag,lateBindings); *valueP = 0; } #ifdef sparc /* * The stupid optimizer in SunOS 4.0.3 and below generates bogus code that * causes the value of the most recently used variable to be returned instead * of the value passed in. */ static String stupid_optimizer_kludge; #define BROKEN_OPTIMIZER_HACK(val) stupid_optimizer_kludge = (val) #else #define BROKEN_OPTIMIZER_HACK(val) val #endif /* ARGSUSED */ static String ParseImmed( register String str, register Opaque closure, register EventPtr event, Boolean* error) { event->event.eventCode = (unsigned long)closure; event->event.eventCodeMask = ~0UL; return BROKEN_OPTIMIZER_HACK(str); } /* ARGSUSED */ static String ParseAddModifier( register String str, register Opaque closure, register EventPtr event, Boolean* error) { register unsigned long modval = (unsigned long)closure; event->event.modifiers |= modval; if (modval != AnyButtonMask) /* AnyButtonMask is don't-care mask */ event->event.modifierMask |= modval; return BROKEN_OPTIMIZER_HACK(str); } static String ParseKeyAndModifiers( String str, Opaque closure, EventPtr event, Boolean* error) { str = ParseKeySym(str, closure, event,error); if ((unsigned long) closure == 0) { Value metaMask; /* unused */ (void) _XtLookupModifier(QMeta, &event->event.lateModifiers, FALSE, &metaMask, FALSE); } else { event->event.modifiers |= (unsigned long) closure; event->event.modifierMask |= (unsigned long) closure; } return str; } /*ARGSUSED*/ static String ParseKeySym( register String str, Opaque closure, EventPtr event, Boolean* error) { char *start; char keySymNamebuf[100]; char* keySymName; ScanWhitespace(str); if (*str == '\\') { keySymName = keySymNamebuf; str++; keySymName[0] = *str; if (*str != '\0' && !IsNewline(*str)) str++; keySymName[1] = '\0'; event->event.eventCode = StringToKeySym(keySymName, error); event->event.eventCodeMask = ~0L; } else if (*str == ',' || *str == ':' || /* allow leftparen to be single char symbol, * for backwards compatibility */ (*str == '(' && *(str+1) >= '0' && *(str+1) <= '9')) { keySymName = keySymNamebuf; /* just so we can stackfree it later */ /* no detail */ event->event.eventCode = 0L; event->event.eventCodeMask = 0L; } else { start = str; while ( *str != ',' && *str != ':' && *str != ' ' && *str != '\t' && !IsNewline(*str) && (*str != '(' || *(str+1) <= '0' || *(str+1) >= '9') && *str != '\0') str++; keySymName = XtStackAlloc ((size_t)(str - start + 1), keySymNamebuf); (void) memmove(keySymName, start, str-start); keySymName[str-start] = '\0'; event->event.eventCode = StringToKeySym(keySymName, error); event->event.eventCodeMask = ~0L; } if (*error) { /* We never get here when keySymName hasn't been allocated */ if (keySymName[0] == '<') { /* special case for common error */ XtWarningMsg(XtNtranslationParseError, "missingComma", XtCXtToolkitError, "... possibly due to missing ',' in event sequence.", (String*)NULL, (Cardinal*)NULL); } XtStackFree (keySymName, keySymNamebuf); return PanicModeRecovery(str); } if (event->event.standard) event->event.matchEvent = _XtMatchUsingStandardMods; else event->event.matchEvent = _XtMatchUsingDontCareMods; XtStackFree (keySymName, keySymNamebuf); return str; } static String ParseTable( register String str, Opaque closure, EventPtr event, Boolean* error) { register String start = str; register XrmQuark signature; NameValueTable table = (NameValueTable) closure; char tableSymName[100]; event->event.eventCode = 0L; ScanAlphanumeric(str); if (str == start) {event->event.eventCodeMask = 0L; return str; } if (str-start >= 99) { Syntax("Invalid Detail Type (string is too long).", ""); *error = TRUE; return str; } (void) memmove(tableSymName, start, str-start); tableSymName[str-start] = '\0'; signature = StringToQuark(tableSymName); for (; table->signature != NULLQUARK; table++) if (table->signature == signature) { event->event.eventCode = table->value; event->event.eventCodeMask = ~0L; return str; } Syntax("Unknown Detail Type: ", tableSymName); *error = TRUE; return PanicModeRecovery(str); } /*ARGSUSED*/ static String ParseNone( String str, Opaque closure, EventPtr event, Boolean* error) { event->event.eventCode = 0; event->event.eventCodeMask = 0; return BROKEN_OPTIMIZER_HACK(str); } /*ARGSUSED*/ static String ParseAtom( String str, Opaque closure, EventPtr event, Boolean* error) { ScanWhitespace(str); if (*str == ',' || *str == ':') { /* no detail */ event->event.eventCode = 0L; event->event.eventCodeMask = 0L; } else { char *start, atomName[1000]; start = str; while ( *str != ',' && *str != ':' && *str != ' ' && *str != '\t' && !IsNewline(*str) && *str != '\0') str++; if (str-start >= 999) { Syntax( "Atom name must be less than 1000 characters long.", "" ); *error = TRUE; return str; } (void) memmove(atomName, start, str-start); atomName[str-start] = '\0'; event->event.eventCode = XrmStringToQuark(atomName); event->event.matchEvent = _XtMatchAtom; } return str; } static ModifierMask buttonModifierMasks[] = { 0, Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask }; static String ParseRepeat(String, int *, Boolean *, Boolean *); static String ParseEvent( register String str, EventPtr event, int* reps, Boolean* plus, Boolean* error) { Cardinal tmEvent; str = ParseModifiers(str, event,error); if (*error) return str; if (*str != '<') { Syntax("Missing '<' while parsing event type.",""); *error = TRUE; return PanicModeRecovery(str); } else str++; str = ParseXtEventType(str, event, &tmEvent,error); if (*error) return str; if (*str != '>'){ Syntax("Missing '>' while parsing event type",""); *error = TRUE; return PanicModeRecovery(str); } else str++; if (*str == '(') { str = ParseRepeat(str, reps, plus, error); if (*error) return str; } str = (*(events[tmEvent].parseDetail))( str, events[tmEvent].closure, event,error); if (*error) return str; /* gross hack! ||| this kludge is related to the X11 protocol deficiency w.r.t. * modifiers in grabs. */ if ((event->event.eventType == ButtonRelease) && (event->event.modifiers | event->event.modifierMask) /* any */ && (event->event.modifiers != AnyModifier)) { event->event.modifiers |= buttonModifierMasks[event->event.eventCode]; /* the button that is going up will always be in the modifiers... */ } return str; } static String ParseQuotedStringEvent( register String str, register EventPtr event, Boolean *error) { Value metaMask; char s[2]; if (*str=='^') { str++; event->event.modifiers = ControlMask; } else if (*str == '$') { str++; (void) _XtLookupModifier(QMeta, &event->event.lateModifiers, FALSE, &metaMask, FALSE); } if (*str == '\\') str++; s[0] = *str; s[1] = '\0'; if (*str != '\0' && !IsNewline(*str)) str++; event->event.eventType = KeyPress; event->event.eventCode = StringToKeySym(s, error); if (*error) return PanicModeRecovery(str); event->event.eventCodeMask = ~0L; event->event.matchEvent = _XtMatchUsingStandardMods; event->event.standard = TRUE; return str; } static EventSeqRec timerEventRec = { {0, 0, NULL, _XtEventTimerEventType, 0L, 0L, NULL, False}, /* (StatePtr) -1 */ NULL, NULL, NULL }; static void RepeatDown( EventPtr *eventP, int reps, ActionPtr **actionsP) { EventRec upEventRec; register EventPtr event, downEvent; EventPtr upEvent = &upEventRec; register int i; downEvent = event = *eventP; *upEvent = *downEvent; upEvent->event.eventType = ((event->event.eventType == ButtonPress) ? ButtonRelease : KeyRelease); if ((upEvent->event.eventType == ButtonRelease) && (upEvent->event.modifiers != AnyModifier) && (upEvent->event.modifiers | upEvent->event.modifierMask)) upEvent->event.modifiers |= buttonModifierMasks[event->event.eventCode]; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += (reps - 1) * 2; for (i=1; inext = XtNew(EventSeqRec); event = event->next; *event = *upEvent; /* timer */ event->next = XtNew(EventSeqRec); event = event->next; *event = timerEventRec; /* down */ event->next = XtNew(EventSeqRec); event = event->next; *event = *downEvent; } event->next = NULL; *eventP = event; *actionsP = &event->actions; } static void RepeatDownPlus( EventPtr *eventP, int reps, ActionPtr **actionsP) { EventRec upEventRec; register EventPtr event, downEvent, lastDownEvent = NULL; EventPtr upEvent = &upEventRec; register int i; downEvent = event = *eventP; *upEvent = *downEvent; upEvent->event.eventType = ((event->event.eventType == ButtonPress) ? ButtonRelease : KeyRelease); if ((upEvent->event.eventType == ButtonRelease) && (upEvent->event.modifiers != AnyModifier) && (upEvent->event.modifiers | upEvent->event.modifierMask)) upEvent->event.modifiers |= buttonModifierMasks[event->event.eventCode]; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += reps * 2 - 1; for (i=0; i 0) { /* down */ event->next = XtNew(EventSeqRec); event = event->next; *event = *downEvent; } lastDownEvent = event; /* up */ event->next = XtNew(EventSeqRec); event = event->next; *event = *upEvent; /* timer */ event->next = XtNew(EventSeqRec); event = event->next; *event = timerEventRec; } event->next = lastDownEvent; *eventP = event; *actionsP = &lastDownEvent->actions; } static void RepeatUp( EventPtr *eventP, int reps, ActionPtr **actionsP) { EventRec upEventRec; register EventPtr event, downEvent; EventPtr upEvent = &upEventRec; register int i; /* the event currently sitting in *eventP is an "up" event */ /* we want to make it a "down" event followed by an "up" event, */ /* so that sequence matching on the "state" side works correctly. */ downEvent = event = *eventP; *upEvent = *downEvent; downEvent->event.eventType = ((event->event.eventType == ButtonRelease) ? ButtonPress : KeyPress); if ((downEvent->event.eventType == ButtonPress) && (downEvent->event.modifiers != AnyModifier) && (downEvent->event.modifiers | downEvent->event.modifierMask)) downEvent->event.modifiers &= ~buttonModifierMasks[event->event.eventCode]; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += reps * 2 - 1; /* up */ event->next = XtNew(EventSeqRec); event = event->next; *event = *upEvent; for (i=1; inext = XtNew(EventSeqRec); event = event->next; *event = timerEventRec; /* down */ event->next = XtNew(EventSeqRec); event = event->next; *event = *downEvent; /* up */ event->next = XtNew(EventSeqRec); event = event->next; *event = *upEvent; } event->next = NULL; *eventP = event; *actionsP = &event->actions; } static void RepeatUpPlus( EventPtr *eventP, int reps, ActionPtr **actionsP) { EventRec upEventRec; register EventPtr event, downEvent, lastUpEvent = NULL; EventPtr upEvent = &upEventRec; register int i; /* the event currently sitting in *eventP is an "up" event */ /* we want to make it a "down" event followed by an "up" event, */ /* so that sequence matching on the "state" side works correctly. */ downEvent = event = *eventP; *upEvent = *downEvent; downEvent->event.eventType = ((event->event.eventType == ButtonRelease) ? ButtonPress : KeyPress); if ((downEvent->event.eventType == ButtonPress) && (downEvent->event.modifiers != AnyModifier) && (downEvent->event.modifiers | downEvent->event.modifierMask)) downEvent->event.modifiers &= ~buttonModifierMasks[event->event.eventCode]; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += reps * 2; for (i=0; inext = XtNew(EventSeqRec); lastUpEvent = event = event->next; *event = *upEvent; /* timer */ event->next = XtNew(EventSeqRec); event = event->next; *event = timerEventRec; /* down */ event->next = XtNew(EventSeqRec); event = event->next; *event = *downEvent; } event->next = lastUpEvent; *eventP = event; *actionsP = &lastUpEvent->actions; } static void RepeatOther( EventPtr *eventP, int reps, ActionPtr **actionsP) { register EventPtr event, tempEvent; register int i; tempEvent = event = *eventP; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += reps - 1; for (i=1; inext = XtNew(EventSeqRec); event = event->next; *event = *tempEvent; } *eventP = event; *actionsP = &event->actions; } static void RepeatOtherPlus( EventPtr *eventP, int reps, ActionPtr **actionsP) { register EventPtr event, tempEvent; register int i; tempEvent = event = *eventP; if (event->event.lateModifiers) event->event.lateModifiers->ref_count += reps - 1; for (i=1; inext = XtNew(EventSeqRec); event = event->next; *event = *tempEvent; } event->next = event; *eventP = event; *actionsP = &event->actions; } static void RepeatEvent( EventPtr *eventP, int reps, Boolean plus, ActionPtr **actionsP) { switch ((*eventP)->event.eventType) { case ButtonPress: case KeyPress: if (plus) RepeatDownPlus(eventP, reps, actionsP); else RepeatDown(eventP, reps, actionsP); break; case ButtonRelease: case KeyRelease: if (plus) RepeatUpPlus(eventP, reps, actionsP); else RepeatUp(eventP, reps, actionsP); break; default: if (plus) RepeatOtherPlus(eventP, reps, actionsP); else RepeatOther(eventP, reps, actionsP); } } static String ParseRepeat( register String str, int *reps, Boolean *plus, Boolean *error) { /*** Parse the repetitions, for double click etc... ***/ if (*str != '(' || !(isdigit((unsigned char)str[1]) || str[1] == '+' || str[1] == ')')) return str; str++; if (isdigit((unsigned char)*str)) { String start = str; char repStr[7]; size_t len; ScanNumeric(str); len = (str - start); if (len < sizeof repStr) { (void) memmove(repStr, start, len); repStr[len] = '\0'; *reps = StrToNum(repStr); } else { Syntax("Repeat count too large.", ""); *error = TRUE; return str; } } if (*reps == 0) { Syntax("Missing repeat count.",""); *error = True; return str; } if (*str == '+') { *plus = TRUE; str++; } if (*str == ')') str++; else { Syntax("Missing ')'.",""); *error = TRUE; } return str; } /*********************************************************************** * ParseEventSeq * Parses the left hand side of a translation table production * up to, and consuming the ":". * Takes a pointer to a char* (where to start parsing) and returns an * event seq (in a passed in variable), having updated the String **********************************************************************/ static String ParseEventSeq( register String str, EventSeqPtr *eventSeqP, ActionPtr **actionsP, Boolean *error) { EventSeqPtr *nextEvent = eventSeqP; *eventSeqP = NULL; while ( *str != '\0' && !IsNewline(*str)) { static Event nullEvent = {0, 0,NULL, 0, 0L, 0L,_XtRegularMatch,FALSE}; EventPtr event; ScanWhitespace(str); if (*str == '"') { str++; while (*str != '"' && *str != '\0' && !IsNewline(*str)) { event = XtNew(EventRec); event->event = nullEvent; event->state = /* (StatePtr) -1 */ NULL; event->next = NULL; event->actions = NULL; str = ParseQuotedStringEvent(str, event,error); if (*error) { XtWarningMsg(XtNtranslationParseError, "nonLatin1", XtCXtToolkitError, "... probably due to non-Latin1 character in quoted string", (String*)NULL, (Cardinal*)NULL); return PanicModeRecovery(str); } *nextEvent = event; *actionsP = &event->actions; nextEvent = &event->next; } if (*str != '"') { Syntax("Missing '\"'.",""); *error = TRUE; return PanicModeRecovery(str); } else str++; } else { int reps = 0; Boolean plus = FALSE; event = XtNew(EventRec); event->event = nullEvent; event->state = /* (StatePtr) -1 */ NULL; event->next = NULL; event->actions = NULL; str = ParseEvent(str, event, &reps, &plus, error); if (*error) return str; *nextEvent = event; *actionsP = &event->actions; if (reps > 1 || plus) RepeatEvent(&event, reps, plus, actionsP); nextEvent = &event->next; } ScanWhitespace(str); if (*str == ':') break; else { if (*str != ',') { Syntax("',' or ':' expected while parsing event sequence.",""); *error = TRUE; return PanicModeRecovery(str); } else str++; } } if (*str != ':') { Syntax("Missing ':'after event sequence.",""); *error = TRUE; return PanicModeRecovery(str); } else str++; return str; } static String ParseActionProc( register String str, XrmQuark *actionProcNameP, Boolean *error) { register String start = str; char procName[200]; str = ScanIdent(str); if (str-start >= 199) { Syntax("Action procedure name is longer than 199 chars",""); *error = TRUE; return str; } (void) memmove(procName, start, str-start); procName[str-start] = '\0'; *actionProcNameP = XrmStringToQuark( procName ); return str; } static String ParseString( register String str, String *strP) { register String start; if (*str == '"') { register unsigned prev_len, len; str++; start = str; *strP = NULL; prev_len = 0; while (*str != '"' && *str != '\0') { /* \" produces double quote embedded in a quoted parameter * \\" produces backslash as last character of a quoted parameter */ if (*str == '\\' && (*(str+1) == '"' || (*(str+1) == '\\' && *(str+2) == '"'))) { len = prev_len + (str-start+2); *strP = XtRealloc(*strP, len); (void) memmove(*strP + prev_len, start, str-start); prev_len = len-1; str++; (*strP)[prev_len-1] = *str; (*strP)[prev_len] = '\0'; start = str+1; } str++; } len = prev_len + (str-start+1); *strP = XtRealloc(*strP, len); (void) memmove( *strP + prev_len, start, str-start); (*strP)[len-1] = '\0'; if (*str == '"') str++; else XtWarningMsg(XtNtranslationParseError,"parseString", XtCXtToolkitError,"Missing '\"'.", (String *)NULL, (Cardinal *)NULL); } else { /* scan non-quoted string, stop on whitespace, ',' or ')' */ start = str; while (*str != ' ' && *str != '\t' && *str != ',' && *str != ')' && !IsNewline(*str) && *str != '\0') str++; *strP = __XtMalloc((unsigned)(str-start+1)); (void) memmove(*strP, start, str-start); (*strP)[str-start] = '\0'; } return str; } static String ParseParamSeq( register String str, String **paramSeqP, Cardinal *paramNumP) { typedef struct _ParamRec *ParamPtr; typedef struct _ParamRec { ParamPtr next; String param; } ParamRec; ParamPtr params = NULL; register Cardinal num_params = 0; register Cardinal i; ScanWhitespace(str); while (*str != ')' && *str != '\0' && !IsNewline(*str)) { String newStr; str = ParseString(str, &newStr); if (newStr != NULL) { ParamPtr temp = (ParamRec*) ALLOCATE_LOCAL( (unsigned)sizeof(ParamRec) ); if (temp == NULL) _XtAllocError (NULL); num_params++; temp->next = params; params = temp; temp->param = newStr; ScanWhitespace(str); if (*str == ',') { str++; ScanWhitespace(str); } } } if (num_params != 0) { String *paramP = (String *) __XtMalloc( (unsigned)(num_params+1) * sizeof(String) ); *paramSeqP = paramP; *paramNumP = num_params; paramP += num_params; /* list is LIFO right now */ *paramP-- = NULL; for (i=0; i < num_params; i++) { ParamPtr next = params->next; *paramP-- = params->param; DEALLOCATE_LOCAL( (char *)params ); params = next; } } else { *paramSeqP = NULL; *paramNumP = 0; } return str; } static String ParseAction( String str, ActionPtr actionP, XrmQuark* quarkP, Boolean* error) { str = ParseActionProc(str, quarkP, error); if (*error) return str; if (*str == '(') { str++; str = ParseParamSeq(str, &actionP->params, &actionP->num_params); } else { Syntax("Missing '(' while parsing action sequence",""); *error = TRUE; return str; } if (*str == ')') str++; else{ Syntax("Missing ')' while parsing action sequence",""); *error = TRUE; return str; } return str; } static String ParseActionSeq( TMParseStateTree parseTree, String str, ActionPtr *actionsP, Boolean *error) { ActionPtr *nextActionP = actionsP; *actionsP = NULL; while (*str != '\0' && !IsNewline(*str)) { register ActionPtr action; XrmQuark quark; action = XtNew(ActionRec); action->params = NULL; action->num_params = 0; action->next = NULL; str = ParseAction(str, action, &quark, error); if (*error) return PanicModeRecovery(str); action->idx = _XtGetQuarkIndex(parseTree, quark); ScanWhitespace(str); *nextActionP = action; nextActionP = &action->next; } if (IsNewline(*str)) str++; ScanWhitespace(str); return str; } static void ShowProduction( String currentProduction) { Cardinal num_params = 1; String params[1]; size_t len; char *eol, *production, productionbuf[500]; eol = strchr(currentProduction, '\n'); if (eol) len = eol - currentProduction; else len = strlen (currentProduction); production = XtStackAlloc (len + 1, productionbuf); if (production == NULL) _XtAllocError (NULL); (void) memmove(production, currentProduction, len); production[len] = '\0'; params[0] = production; XtWarningMsg(XtNtranslationParseError, "showLine", XtCXtToolkitError, "... found while parsing '%s'", params, &num_params); XtStackFree (production, productionbuf); } /*********************************************************************** * ParseTranslationTableProduction * Parses one line of event bindings. ***********************************************************************/ static String ParseTranslationTableProduction( TMParseStateTree parseTree, register String str, Boolean* error) { EventSeqPtr eventSeq = NULL; ActionPtr *actionsP; String production = str; actionsP = NULL; str = ParseEventSeq(str, &eventSeq, &actionsP,error); if (*error == TRUE) { ShowProduction(production); FreeEventSeq(eventSeq); return (str); } ScanWhitespace(str); str = ParseActionSeq(parseTree, str, actionsP, error); if (*error == TRUE) { ShowProduction(production); FreeEventSeq(eventSeq); return (str); } _XtAddEventSeqToStateTree(eventSeq, parseTree); FreeEventSeq(eventSeq); return (str); } static String CheckForPoundSign( String str, _XtTranslateOp defaultOp, _XtTranslateOp *actualOpRtn) { String start; char operation[20]; _XtTranslateOp opType; opType = defaultOp; ScanWhitespace(str); if (*str == '#') { int len; str++; start = str; str = ScanIdent(str); len = MIN(19, str-start); (void) memmove(operation, start, len); operation[len] = '\0'; if (!strcmp(operation,"replace")) opType = XtTableReplace; else if (!strcmp(operation,"augment")) opType = XtTableAugment; else if (!strcmp(operation,"override")) opType = XtTableOverride; ScanWhitespace(str); if (IsNewline(*str)) { str++; ScanWhitespace(str); } } *actualOpRtn = opType; return str; } static XtTranslations ParseTranslationTable( String source, Boolean isAccelerator, _XtTranslateOp defaultOp, Boolean* error) { XtTranslations xlations; TMStateTree stateTrees[8]; TMParseStateTreeRec parseTreeRec, *parseTree = &parseTreeRec; XrmQuark stackQuarks[200]; TMBranchHeadRec stackBranchHeads[200]; StatePtr stackComplexBranchHeads[200]; _XtTranslateOp actualOp; if (source == NULL) return (XtTranslations)NULL; source = CheckForPoundSign(source, defaultOp, &actualOp); if (isAccelerator && actualOp == XtTableReplace) actualOp = defaultOp; parseTree->isSimple = TRUE; parseTree->mappingNotifyInterest = FALSE; parseTree->isAccelerator = isAccelerator; parseTree->isStackBranchHeads = parseTree->isStackQuarks = parseTree->isStackComplexBranchHeads = TRUE; parseTree->numQuarks = parseTree->numBranchHeads = parseTree->numComplexBranchHeads = 0; parseTree->quarkTblSize = parseTree->branchHeadTblSize = parseTree->complexBranchHeadTblSize = 200; parseTree->quarkTbl = stackQuarks; parseTree->branchHeadTbl = stackBranchHeads; parseTree->complexBranchHeadTbl = stackComplexBranchHeads; while (source != NULL && *source != '\0') { source = ParseTranslationTableProduction(parseTree, source, error); if (*error == TRUE) break; } stateTrees[0] = _XtParseTreeToStateTree(parseTree); if (!parseTree->isStackQuarks) XtFree((char *)parseTree->quarkTbl); if (!parseTree->isStackBranchHeads) XtFree((char *)parseTree->branchHeadTbl); if (!parseTree->isStackComplexBranchHeads) XtFree((char *)parseTree->complexBranchHeadTbl); xlations = _XtCreateXlations(stateTrees, 1, NULL, NULL); xlations->operation = actualOp; #ifdef notdef XtFree(stateTrees); #endif /* notdef */ return xlations; } /*** public procedures ***/ /*ARGSUSED*/ Boolean XtCvtStringToAcceleratorTable( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr from, XrmValuePtr to, XtPointer *closure) { String str; Boolean error = FALSE; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "wrongParameters","cvtStringToAcceleratorTable",XtCXtToolkitError, "String to AcceleratorTable conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); str = (String)(from->addr); if (str == NULL) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "badParameters","cvtStringToAcceleratorTable",XtCXtToolkitError, "String to AcceleratorTable conversion needs string", (String *)NULL, (Cardinal *)NULL); return FALSE; } if (to->addr != NULL) { if (to->size < sizeof(XtAccelerators)) { to->size = sizeof(XtAccelerators); return FALSE; } *(XtAccelerators*)to->addr = (XtAccelerators) ParseTranslationTable(str, TRUE, XtTableAugment, &error); } else { static XtAccelerators staticStateTable; staticStateTable = (XtAccelerators) ParseTranslationTable(str, TRUE, XtTableAugment, &error); to->addr = (XPointer) &staticStateTable; to->size = sizeof(XtAccelerators); } if (error == TRUE) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "parseError","cvtStringToAcceleratorTable",XtCXtToolkitError, "String to AcceleratorTable conversion encountered errors", (String *)NULL, (Cardinal *)NULL); return (error != TRUE); } /*ARGSUSED*/ Boolean XtCvtStringToTranslationTable( Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr from, XrmValuePtr to, XtPointer *closure_ret) { String str; Boolean error = FALSE; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "wrongParameters","cvtStringToTranslationTable",XtCXtToolkitError, "String to TranslationTable conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); str = (String)(from->addr); if (str == NULL) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "badParameters","cvtStringToTranslation",XtCXtToolkitError, "String to TranslationTable conversion needs string", (String *)NULL, (Cardinal *)NULL); return FALSE; } if (to->addr != NULL) { if (to->size < sizeof(XtTranslations)) { to->size = sizeof(XtTranslations); return FALSE; } *(XtTranslations*)to->addr = ParseTranslationTable(str, FALSE, XtTableReplace, &error); } else { static XtTranslations staticStateTable; staticStateTable = ParseTranslationTable(str, FALSE, XtTableReplace, &error); to->addr = (XPointer) &staticStateTable; to->size = sizeof(XtTranslations); } if (error == TRUE) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "parseError","cvtStringToTranslationTable",XtCXtToolkitError, "String to TranslationTable conversion encountered errors", (String *)NULL, (Cardinal *)NULL); return (error != TRUE); } /* * Parses a user's or applications translation table */ XtAccelerators XtParseAcceleratorTable( _Xconst char* source) { Boolean error = FALSE; XtAccelerators ret = (XtAccelerators) ParseTranslationTable ((char *)source, TRUE, XtTableAugment, &error); if (error == TRUE) XtWarningMsg ("parseError", "cvtStringToAcceleratorTable", XtCXtToolkitError, "String to AcceleratorTable conversion encountered errors", (String *)NULL, (Cardinal *)NULL); return ret; } XtTranslations XtParseTranslationTable( _Xconst char* source) { Boolean error = FALSE; XtTranslations ret = ParseTranslationTable((char *)source, FALSE, XtTableReplace, &error); if (error == TRUE) XtWarningMsg ("parseError", "cvtStringToTranslationTable", XtCXtToolkitError, "String to TranslationTable conversion encountered errors", (String *)NULL, (Cardinal *)NULL); return ret; } void _XtTranslateInitialize(void) { LOCK_PROCESS; if (initialized) { XtWarningMsg("translationError","xtTranslateInitialize", XtCXtToolkitError,"Initializing Translation manager twice.", (String *)NULL, (Cardinal *)NULL); UNLOCK_PROCESS; return; } initialized = TRUE; UNLOCK_PROCESS; QMeta = XrmPermStringToQuark("Meta"); QCtrl = XrmPermStringToQuark("Ctrl"); QNone = XrmPermStringToQuark("None"); QAny = XrmPermStringToQuark("Any"); Compile_XtEventTable( events, XtNumber(events) ); Compile_XtModifierTable( modifiers, XtNumber(modifiers) ); CompileNameValueTable( buttonNames ); CompileNameValueTable( notifyModes ); CompileNameValueTable( motionDetails ); #if 0 CompileNameValueTable( notifyDetail ); CompileNameValueTable( visibilityNotify ); CompileNameValueTable( circulation ); CompileNameValueTable( propertyChanged ); #endif CompileNameValueTable( mappingNotify ); } void _XtAddTMConverters( ConverterTable table) { _XtTableAddConverter(table, _XtQString, XrmPermStringToQuark(XtRTranslationTable), XtCvtStringToTranslationTable, (XtConvertArgList) NULL, (Cardinal)0, True, CACHED, _XtFreeTranslations, True); _XtTableAddConverter(table, _XtQString, XrmPermStringToQuark(XtRAcceleratorTable), XtCvtStringToAcceleratorTable, (XtConvertArgList) NULL, (Cardinal)0, True, CACHED, _XtFreeTranslations, True); _XtTableAddConverter(table, XrmPermStringToQuark( _XtRStateTablePair ), XrmPermStringToQuark(XtRTranslationTable), _XtCvtMergeTranslations, (XtConvertArgList) NULL, (Cardinal)0, True, CACHED, _XtFreeTranslations, True); } pace(str); *nextActionP = action; nextActionP = &action->next; } if (IsNewline(*str)) str++; ScanWhitespace(str); return str; } static void ShowProduction( String currentProduction) { Cardinal num_params = 1; String params[1]; size_t len; char *eolibXt-1.1.5/src/Manage.c000064401431060000012000000404741252061032400152100ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" static String XtNinvalidChild = "invalidChild"; static String XtNxtUnmanageChildren = "xtUnmanageChildren"; static String XtNxtManageChildren = "xtManageChildren"; static String XtNxtChangeManagedSet = "xtChangeManagedSet"; static void UnmanageChildren( WidgetList children, Cardinal num_children, Widget parent, Cardinal* num_unique_children, Boolean call_change_managed, String caller_func) { Widget child; Cardinal i; XtWidgetProc change_managed = NULL; Bool parent_realized = False; *num_unique_children = 0; if (XtIsComposite((Widget) parent)) { LOCK_PROCESS; change_managed = ((CompositeWidgetClass) parent->core.widget_class) ->composite_class.change_managed; UNLOCK_PROCESS; parent_realized = XtIsRealized((Widget)parent); } else { XtAppErrorMsg(XtWidgetToApplicationContext((Widget)parent), "invalidParent",caller_func, XtCXtToolkitError, "Attempt to unmanage a child when parent is not Composite", (String *) NULL, (Cardinal *) NULL); } for (i = 0; i < num_children; i++) { child = children[i]; if (child == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(parent), XtNinvalidChild,caller_func,XtCXtToolkitError, "Null child passed to XtUnmanageChildren", (String *)NULL, (Cardinal *)NULL); return; } if (child->core.parent != parent) { XtAppWarningMsg(XtWidgetToApplicationContext(parent), "ambiguousParent",caller_func,XtCXtToolkitError, "Not all children have same parent in UnmanageChildren", (String *)NULL, (Cardinal *)NULL); } else if (child->core.managed) { (*num_unique_children)++; CALLGEOTAT(_XtGeoTrace(child,"Child \"%s\" is marked unmanaged\n", XtName(child))); child->core.managed = FALSE; if (XtIsWidget(child) && XtIsRealized(child) && child->core.mapped_when_managed) XtUnmapWidget(child); else { /* RectObj child */ Widget pw = child->core.parent; RectObj r = (RectObj) child; while ((pw!=NULL) && (!XtIsWidget(pw))) pw = pw->core.parent; if ((pw!=NULL) && XtIsRealized (pw)) XClearArea (XtDisplay (pw), XtWindow (pw), r->rectangle.x, r->rectangle.y, r->rectangle.width + (r->rectangle.border_width << 1), r->rectangle.height + (r->rectangle.border_width << 1), TRUE); } } } if (call_change_managed && *num_unique_children != 0 && change_managed != NULL && parent_realized) { CALLGEOTAT(_XtGeoTrace((Widget)parent, "Call parent: \"%s\"[%d,%d]'s changemanaged proc\n", XtName((Widget)parent), parent->core.width,parent->core.height)); (*change_managed) (parent); } } /* UnmanageChildren */ void XtUnmanageChildren ( WidgetList children, Cardinal num_children) { Widget parent, hookobj; Cardinal ii; #ifdef XTHREADS XtAppContext app; #endif if (num_children == 0) return; if (children[0] == NULL) { XtWarningMsg(XtNinvalidChild,XtNxtUnmanageChildren,XtCXtToolkitError, "Null child found in argument list to unmanage", (String *)NULL, (Cardinal *)NULL); return; } #ifdef XTHREADS app = XtWidgetToApplicationContext(children[0]); #endif LOCK_APP(app); parent = children[0]->core.parent; if (parent->core.being_destroyed) { UNLOCK_APP(app); return; } UnmanageChildren(children, num_children, parent, &ii, (Boolean)True, XtNxtUnmanageChildren); hookobj = XtHooksOfDisplay(XtDisplayOfObject(children[0])); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHunmanageChildren; call_data.widget = parent; call_data.event_data = (XtPointer) children; call_data.num_event_data = num_children; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtUnmanageChildren */ void XtUnmanageChild( Widget child) { XtUnmanageChildren(&child, (Cardinal)1); } /* XtUnmanageChild */ static void ManageChildren( WidgetList children, Cardinal num_children, Widget parent, Boolean call_change_managed, String caller_func) { #define MAXCHILDREN 100 Widget child; Cardinal num_unique_children, i; XtWidgetProc change_managed = NULL; WidgetList unique_children; Widget cache[MAXCHILDREN]; Bool parent_realized = False; if (XtIsComposite((Widget) parent)) { LOCK_PROCESS; change_managed = ((CompositeWidgetClass) parent->core.widget_class) ->composite_class.change_managed; UNLOCK_PROCESS; parent_realized = XtIsRealized((Widget)parent); } else { XtAppErrorMsg(XtWidgetToApplicationContext((Widget)parent), "invalidParent",caller_func, XtCXtToolkitError, "Attempt to manage a child when parent is not Composite", (String *) NULL, (Cardinal *) NULL); } /* Construct new list of children that really need to be operated upon. */ if (num_children <= MAXCHILDREN) { unique_children = cache; } else { unique_children = (WidgetList) __XtMalloc(num_children * sizeof(Widget)); } num_unique_children = 0; for (i = 0; i < num_children; i++) { child = children[i]; if (child == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext((Widget)parent), XtNinvalidChild,caller_func,XtCXtToolkitError, "null child passed to ManageChildren", (String *)NULL, (Cardinal *)NULL); if (unique_children != cache) XtFree((char *) unique_children); return; } #ifdef DEBUG if (!XtIsRectObj(child)) { String params[2]; Cardinal num_params = 2; params[0] = XtName(child); params[1] = child->core.widget_class->core_class.class_name; XtAppWarningMsg(XtWidgetToApplicationContext((Widget)parent), "notRectObj",caller_func,XtCXtToolkitError, "child \"%s\", class %s is not a RectObj", params, &num_params); continue; } #endif /*DEBUG*/ if (child->core.parent != parent) { XtAppWarningMsg(XtWidgetToApplicationContext((Widget)parent), "ambiguousParent",caller_func,XtCXtToolkitError, "Not all children have same parent in XtManageChildren", (String *)NULL, (Cardinal *)NULL); } else if (! child->core.managed && !child->core.being_destroyed) { unique_children[num_unique_children++] = child; CALLGEOTAT(_XtGeoTrace(child, "Child \"%s\"[%d,%d] is marked managed\n", XtName(child), child->core.width,child->core.height)); child->core.managed = TRUE; } } if ((call_change_managed || num_unique_children != 0) && parent_realized) { /* Compute geometry of new managed set of children. */ if (change_managed != NULL) { CALLGEOTAT(_XtGeoTrace((Widget)parent, "Call parent: \"%s\"[%d,%d]'s changemanaged\n", XtName((Widget)parent), parent->core.width,parent->core.height)); (*change_managed) ((Widget)parent); } /* Realize each child if necessary, then map if necessary */ for (i = 0; i < num_unique_children; i++) { child = unique_children[i]; if (XtIsWidget(child)) { if (! XtIsRealized(child)) XtRealizeWidget(child); if (child->core.mapped_when_managed) XtMapWidget(child); } else { /* RectObj child */ Widget pw = child->core.parent; RectObj r = (RectObj) child; while ((pw!=NULL) && (!XtIsWidget(pw))) pw = pw->core.parent; if (pw != NULL) XClearArea (XtDisplay (pw), XtWindow (pw), r->rectangle.x, r->rectangle.y, r->rectangle.width + (r->rectangle.border_width << 1), r->rectangle.height + (r->rectangle.border_width << 1), TRUE); } } } if (unique_children != cache) XtFree((char *) unique_children); } /* ManageChildren */ void XtManageChildren( WidgetList children, Cardinal num_children) { Widget parent, hookobj; #ifdef XTHREADS XtAppContext app; #endif if (num_children == 0) return; if (children[0] == NULL) { XtWarningMsg(XtNinvalidChild, XtNxtManageChildren, XtCXtToolkitError, "null child passed to XtManageChildren", (String*)NULL, (Cardinal*)NULL); return; } #ifdef XTHREADS app = XtWidgetToApplicationContext(children[0]); #endif LOCK_APP(app); parent = children[0]->core.parent; if (parent->core.being_destroyed) { UNLOCK_APP(app); return; } ManageChildren(children, num_children, parent, (Boolean)False, XtNxtManageChildren); hookobj = XtHooksOfDisplay(XtDisplayOfObject(children[0])); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHmanageChildren; call_data.widget = parent; call_data.event_data = (XtPointer) children; call_data.num_event_data = num_children; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtManageChildren */ void XtManageChild( Widget child) { XtManageChildren(&child, (Cardinal) 1); } /* XtManageChild */ void XtSetMappedWhenManaged( Widget widget, _XtBoolean mapped_when_managed) { Widget hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (widget->core.mapped_when_managed == mapped_when_managed) { UNLOCK_APP(app); return; } widget->core.mapped_when_managed = mapped_when_managed; hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHsetMappedWhenManaged; call_data.widget = widget; call_data.event_data = (XtPointer) (unsigned long) mapped_when_managed; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } if (! XtIsManaged(widget)) { UNLOCK_APP(app); return; } if (mapped_when_managed) { /* Didn't used to be mapped when managed. */ if (XtIsRealized(widget)) XtMapWidget(widget); } else { /* Used to be mapped when managed. */ if (XtIsRealized(widget)) XtUnmapWidget(widget); } UNLOCK_APP(app); } /* XtSetMappedWhenManaged */ void XtChangeManagedSet( WidgetList unmanage_children, Cardinal num_unmanage, XtDoChangeProc do_change_proc, XtPointer client_data, WidgetList manage_children, Cardinal num_manage) { WidgetList childp; Widget parent; int i; Cardinal some_unmanaged; Boolean call_out; CompositeClassExtension ext; XtAppContext app; Widget hookobj; XtChangeHookDataRec call_data; if (num_unmanage == 0 && num_manage == 0) return; /* specification doesn't state that library will check for NULL in list */ childp = num_unmanage ? unmanage_children : manage_children; app = XtWidgetToApplicationContext(*childp); LOCK_APP(app); parent = XtParent(*childp); childp = unmanage_children; for (i = num_unmanage; --i >= 0 && XtParent(*childp) == parent; childp++); call_out = (i >= 0); childp = manage_children; for (i = num_manage; --i >= 0 && XtParent(*childp) == parent; childp++); if (call_out || i >= 0) { XtAppWarningMsg(app, "ambiguousParent", XtNxtChangeManagedSet, XtCXtToolkitError, "Not all children have same parent", (String *)NULL, (Cardinal *)NULL); } if (! XtIsComposite(parent)) { UNLOCK_APP(app); XtAppErrorMsg(app, "invalidParent", XtNxtChangeManagedSet, XtCXtToolkitError, "Attempt to manage a child when parent is not Composite", (String *) NULL, (Cardinal *) NULL); } if (parent->core.being_destroyed) { UNLOCK_APP(app); return; } call_out = False; if (do_change_proc) { ext = (CompositeClassExtension) XtGetClassExtension(parent->core.widget_class, XtOffsetOf(CompositeClassRec, composite_class.extension), NULLQUARK, XtCompositeExtensionVersion, sizeof(CompositeClassExtensionRec)); if (!ext || !ext->allows_change_managed_set) call_out = True; } UnmanageChildren(unmanage_children, num_unmanage, parent, &some_unmanaged, call_out, XtNxtChangeManagedSet); hookobj = XtHooksOfDisplay(XtDisplay(parent)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { call_data.type = XtHunmanageSet; call_data.widget = parent; call_data.event_data = (XtPointer) unmanage_children; call_data.num_event_data = num_unmanage; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer) &call_data); } if (do_change_proc) (*do_change_proc)(parent, unmanage_children, &num_unmanage, manage_children, &num_manage, client_data); call_out = (some_unmanaged && !call_out); ManageChildren(manage_children, num_manage, parent, call_out, XtNxtChangeManagedSet); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { call_data.type = XtHmanageSet; call_data.event_data = (XtPointer) manage_children; call_data.num_event_data = num_manage; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer) &call_data); } UNLOCK_APP(app); } /* XtChangeManagedSet */ ii, (Boolean)True, XtNxtUnmanageChildren); hookobj = XtHooksOfDisplay(XtDisplayOfObject(children[0])); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHolibXt-1.1.5/src/GetResList.c000064401431060000012000000161551252061032400160440ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "Intrinsic.h" /* * XtGetResourceList(), XtGetConstraintResourceList() */ #define TOXRMQUARK(p) ((XrmQuark)(long)(p)) /* avoid LP64 warnings */ void XtGetResourceList( WidgetClass widget_class, XtResourceList *resources, Cardinal *num_resources) { int size; register Cardinal i, dest = 0; register XtResourceList *list, dlist; LOCK_PROCESS; size = widget_class->core_class.num_resources * sizeof(XtResource); *resources = (XtResourceList) __XtMalloc((unsigned) size); if (!widget_class->core_class.class_inited) { /* Easy case */ (void) memmove((char *) *resources, (char *)widget_class->core_class.resources, size); *num_resources = widget_class->core_class.num_resources; UNLOCK_PROCESS; return; } /* Nope, it's the hard case */ list = (XtResourceList *) widget_class->core_class.resources; dlist = *resources; for (i = 0; i < widget_class->core_class.num_resources; i++) { if (list[i] != NULL) { dlist[dest].resource_name = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_name)); dlist[dest].resource_class = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_class)); dlist[dest].resource_type = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_type)); dlist[dest].resource_size = list[i]->resource_size; /* trust that resource_offset isn't that big */ dlist[dest].resource_offset = (Cardinal) -((int)(list[i]->resource_offset + 1)); dlist[dest].default_type = (String) XrmQuarkToString(TOXRMQUARK(list[i]->default_type)); dlist[dest].default_addr = list[i]->default_addr; dest++; } } *num_resources = dest; UNLOCK_PROCESS; } static Boolean ClassIsSubclassOf(WidgetClass class, WidgetClass superclass) { for (; class != NULL; class = class->core_class.superclass) { if (class == superclass) return True; } return False; } void XtGetConstraintResourceList( WidgetClass widget_class, XtResourceList *resources, Cardinal *num_resources) { int size; register Cardinal i, dest = 0; register XtResourceList *list, dlist; ConstraintWidgetClass class = (ConstraintWidgetClass)widget_class; LOCK_PROCESS; if ( (class->core_class.class_inited && !(class->core_class.class_inited & ConstraintClassFlag)) || (!class->core_class.class_inited && !ClassIsSubclassOf(widget_class, constraintWidgetClass)) || class->constraint_class.num_resources == 0) { *resources = NULL; *num_resources = 0; UNLOCK_PROCESS; return; } size = class->constraint_class.num_resources * sizeof(XtResource); *resources = (XtResourceList) __XtMalloc((unsigned) size); if (!class->core_class.class_inited) { /* Easy case */ (void) memmove((char *) *resources, (char *)class->constraint_class.resources, size); *num_resources = class->constraint_class.num_resources; UNLOCK_PROCESS; return; } /* Nope, it's the hard case */ list = (XtResourceList *) class->constraint_class.resources; dlist = *resources; for (i = 0; i < class->constraint_class.num_resources; i++) { if (list[i] != NULL) { dlist[dest].resource_name = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_name)); dlist[dest].resource_class = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_class)); dlist[dest].resource_type = (String) XrmQuarkToString(TOXRMQUARK(list[i]->resource_type)); dlist[dest].resource_size = list[i]->resource_size; /* trust that resource_offset isn't that big */ dlist[dest].resource_offset = (Cardinal) -((int)(list[i]->resource_offset + 1)); dlist[dest].default_type = (String) XrmQuarkToString(TOXRMQUARK(list[i]->default_type)); dlist[dest].default_addr = list[i]->default_addr; dest++; } } *num_resources = dest; UNLOCK_PROCESS; } libXt-1.1.5/src/SetWMCW.c000064401431060000012000000124631252061032400152460ustar00alancstaff00002660200006/* * * Author: Chris D. Peterson, MIT X Consortium */ /************************************************************ Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ********************************************************/ /* Copyright 1989, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include /* Function Name: XtSetWMColormapWindows * * Description: Sets the value of the WM_COLORMAP_WINDOWS * property on a widget's window. * * Arguments: widget - specifies the widget on whose window the * - WM_COLORMAP_WINDOWS property will be stored. * * list - Specifies a list of widgets whose windows are to be * listed in the WM_COLORMAP_WINDOWS property. * count - Specifies the number of widgets in list. * * Returns: none. */ void XtSetWMColormapWindows( Widget widget, Widget *list, Cardinal count) { Window *data; Widget *checked, *top, *temp, hookobj; Cardinal i, j, checked_count; Boolean match; Atom xa_wm_colormap_windows; WIDGET_TO_APPCON(widget); LOCK_APP(app); if ( !XtIsRealized(widget) || (count == 0) ) { UNLOCK_APP(app); return; } top = checked = (Widget *) __XtMalloc( (Cardinal) sizeof(Widget) * count); /* * The specification calls for only adding the windows that have unique * colormaps to the property to this function, so we will make a pass through * the widget list removing all the widgets with non-unique colormaps. * * We will also remove any unrealized widgets from the list at this time. */ for (checked_count = 0, i = 0; i < count; i++) { if (!XtIsRealized(list[i])) continue; *checked = list[i]; match = FALSE; /* * Don't check first element for matching colormap since there is nothing * to check it against. */ if (checked != top) for (j = 0, temp = top; j < checked_count ; j++, temp++) if ( (*temp)->core.colormap == (*checked)->core.colormap) { match = TRUE; break; } /* * If no colormap was found to match then add this widget to the linked list. */ if (!match) { checked++; checked_count++; } } /* * Now that we have the list of widgets we need to convert it to a list of * windows and set the property. */ data = (Window *) __XtMalloc( (Cardinal) sizeof(Window) * checked_count); for ( i = 0 ; i < checked_count ; i++) data[i] = XtWindow(top[i]); xa_wm_colormap_windows = XInternAtom(XtDisplay(widget), "WM_COLORMAP_WINDOWS", FALSE); XChangeProperty(XtDisplay(widget), XtWindow(widget), xa_wm_colormap_windows, XA_WINDOW, 32, PropModeReplace, (unsigned char *) data, (int) i); hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHsetWMColormapWindows; call_data.widget = widget; call_data.event_data = (XtPointer) list; call_data.num_event_data = count; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } XtFree( (char *) data); XtFree( (char *) top); UNLOCK_APP(app); } , WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR ClibXt-1.1.5/src/Constraint.c000064401431060000012000000132401252061032400161330ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" static void ConstraintPartInitialize(WidgetClass wc); externaldef(constraintclassrec) ConstraintClassRec constraintClassRec = { { /******* CorePart *******/ /* superclass */ (WidgetClass) &compositeClassRec, /* class_name */ "Constraint", /* widget_size */ sizeof(ConstraintRec), /* class_initialize */ NULL, /* class_part_initialize*/ ConstraintPartInitialize, /* class_inited */ FALSE, /* initialize */ NULL, /* initialize_hook */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ NULL, /* num_resources */ 0, /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave */ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL },{ /**** CompositePart *****/ /* geometry_handler */ NULL, /* change_managed */ NULL, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /**** ConstraintPart ****/ /* resources */ NULL, /* num_resources */ 0, /* constraint_size */ 0, /* initialize */ NULL, /* destroy */ NULL, /* set_values */ NULL, /* extension */ NULL } }; externaldef(constraintwidgetclass) WidgetClass constraintWidgetClass = (WidgetClass) &constraintClassRec; static void ConstraintPartInitialize(WidgetClass wc) { ConstraintWidgetClass cwc = (ConstraintWidgetClass)wc; if (cwc->constraint_class.resources) _XtCompileResourceList(cwc->constraint_class.resources, cwc->constraint_class.num_resources); _XtConstraintResDependencies((ConstraintWidgetClass)wc); } libXt-1.1.5/src/Convert.c000064401431060000012000000730331252061032400154350ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "Intrinsic.h" /* Conversion procedure hash table */ #define CONVERTHASHSIZE ((unsigned)256) #define CONVERTHASHMASK 255 #define ProcHash(from_type, to_type) (2 * (from_type) + to_type) typedef struct _ConverterRec *ConverterPtr; typedef struct _ConverterRec { ConverterPtr next; XrmRepresentation from, to; XtTypeConverter converter; XtDestructor destructor; unsigned short num_args; unsigned int do_ref_count:1; unsigned int new_style:1; unsigned int global:1; char cache_type; } ConverterRec; #define ConvertArgs(p) ((XtConvertArgList)((p)+1)) /* used for old-style type converter cache only */ static Heap globalHeap = {NULL, NULL, 0}; void _XtSetDefaultConverterTable( ConverterTable *table) { register ConverterTable globalConverterTable; LOCK_PROCESS; globalConverterTable = _XtGetProcessContext()->globalConverterTable; *table = (ConverterTable) __XtCalloc(CONVERTHASHSIZE, (unsigned)sizeof(ConverterPtr)); _XtAddDefaultConverters(*table); if (globalConverterTable) { ConverterPtr rec; int i; XtCacheType cache_type; for (i = CONVERTHASHSIZE; --i >= 0; ) { for (rec = *globalConverterTable++; rec; rec = rec->next) { cache_type = rec->cache_type; if (rec->do_ref_count) cache_type |= XtCacheRefCount; _XtTableAddConverter(*table, rec->from, rec->to, rec->converter, ConvertArgs(rec), rec->num_args, rec->new_style, cache_type, rec->destructor, True); } } } UNLOCK_PROCESS; } void _XtFreeConverterTable( ConverterTable table) { register Cardinal i; register ConverterPtr p; for (i = 0; i < CONVERTHASHSIZE; i++) { for (p = table[i]; p; ) { register ConverterPtr next = p->next; XtFree((char*)p); p = next; } } XtFree((char*)table); } /* Data cache hash table */ typedef struct _CacheRec *CachePtr; typedef struct _CacheRec { CachePtr next; XtPointer tag; int hash; XtTypeConverter converter; unsigned short num_args; unsigned int conversion_succeeded:1; unsigned int has_ext:1; unsigned int is_refcounted:1; unsigned int must_be_freed:1; unsigned int from_is_value:1; unsigned int to_is_value:1; XrmValue from; XrmValue to; } CacheRec; typedef struct _CacheRecExt { CachePtr *prev; XtDestructor destructor; XtPointer closure; long ref_count; } CacheRecExt; #define CEXT(p) ((CacheRecExt *)((p)+1)) #define CARGS(p) ((p)->has_ext ? (XrmValue *)(CEXT(p)+1) : (XrmValue *)((p)+1)) #define CACHEHASHSIZE 256 #define CACHEHASHMASK 255 typedef CachePtr CacheHashTable[CACHEHASHSIZE]; static CacheHashTable cacheHashTable; void _XtTableAddConverter( ConverterTable table, XrmRepresentation from_type, XrmRepresentation to_type, XtTypeConverter converter, XtConvertArgList convert_args, Cardinal num_args, _XtBoolean new_style, XtCacheType cache_type, XtDestructor destructor, _XtBoolean global) { register ConverterPtr *pp; register ConverterPtr p; XtConvertArgList args; pp= &table[ProcHash(from_type, to_type) & CONVERTHASHMASK]; while ((p = *pp) && (p->from != from_type || p->to != to_type)) pp = &p->next; if (p) { *pp = p->next; XtFree((char *)p); } p = (ConverterPtr) __XtMalloc(sizeof(ConverterRec) + sizeof(XtConvertArgRec) * num_args); p->next = *pp; *pp = p; p->from = from_type; p->to = to_type; p->converter = converter; p->destructor = destructor; p->num_args = num_args; p->global = global; args = ConvertArgs(p); while (num_args--) *args++ = *convert_args++; p->new_style = new_style; p->do_ref_count = False; if (destructor || (cache_type & 0xff)) { p->cache_type = cache_type & 0xff; if (cache_type & XtCacheRefCount) p->do_ref_count = True; } else { p->cache_type = XtCacheNone; } } void XtSetTypeConverter( register _Xconst char* from_type, register _Xconst char* to_type, XtTypeConverter converter, XtConvertArgList convert_args, Cardinal num_args, XtCacheType cache_type, XtDestructor destructor ) { ProcessContext process; XtAppContext app; XrmRepresentation from; XrmRepresentation to; LOCK_PROCESS; process = _XtGetProcessContext(); app = process->appContextList; from = XrmStringToRepresentation(from_type); to = XrmStringToRepresentation(to_type); if (!process->globalConverterTable) { process->globalConverterTable = (ConverterTable) __XtCalloc(CONVERTHASHSIZE, (unsigned)sizeof(ConverterPtr)); } _XtTableAddConverter(process->globalConverterTable, from, to, converter, convert_args, num_args, True, cache_type, destructor, True); while (app) { _XtTableAddConverter(app->converterTable, from, to, converter, convert_args, num_args, True, cache_type, destructor, True); app = app->next; } UNLOCK_PROCESS; } void XtAppSetTypeConverter( XtAppContext app, register _Xconst char* from_type, register _Xconst char* to_type, XtTypeConverter converter, XtConvertArgList convert_args, Cardinal num_args, XtCacheType cache_type, XtDestructor destructor ) { LOCK_PROCESS; _XtTableAddConverter(app->converterTable, XrmStringToRepresentation(from_type), XrmStringToRepresentation(to_type), converter, convert_args, num_args, True, cache_type, destructor, False); UNLOCK_PROCESS; } /* old interface */ void XtAddConverter( register _Xconst char* from_type, register _Xconst char* to_type, XtConverter converter, XtConvertArgList convert_args, Cardinal num_args ) { ProcessContext process; XtAppContext app; XrmRepresentation from; XrmRepresentation to; LOCK_PROCESS; process = _XtGetProcessContext(); app = process->appContextList; from = XrmStringToRepresentation(from_type); to = XrmStringToRepresentation(to_type); if (!process->globalConverterTable) { process->globalConverterTable = (ConverterTable) __XtCalloc(CONVERTHASHSIZE, (unsigned)sizeof(ConverterPtr)); } _XtTableAddConverter(process->globalConverterTable, from, to, (XtTypeConverter)converter, convert_args, num_args, False, XtCacheAll, (XtDestructor)NULL, True); while (app) { _XtTableAddConverter(app->converterTable, from, to, (XtTypeConverter)converter, convert_args, num_args, False, XtCacheAll, (XtDestructor)NULL, True); app = app->next; } UNLOCK_PROCESS; } /* old interface */ void XtAppAddConverter( XtAppContext app, register _Xconst char* from_type, register _Xconst char* to_type, XtConverter converter, XtConvertArgList convert_args, Cardinal num_args ) { LOCK_PROCESS; _XtTableAddConverter(app->converterTable, XrmStringToRepresentation(from_type), XrmStringToRepresentation(to_type), (XtTypeConverter)converter, convert_args, num_args, False, XtCacheAll, (XtDestructor)NULL, False); UNLOCK_PROCESS; } static CachePtr CacheEnter( Heap* heap, register XtTypeConverter converter, register XrmValuePtr args, Cardinal num_args, XrmValuePtr from, XrmValuePtr to, Boolean succeeded, register int hash, Boolean do_ref, Boolean do_free, XtDestructor destructor, XtPointer closure) { register CachePtr *pHashEntry; register CachePtr p; register Cardinal i; LOCK_PROCESS; pHashEntry = &cacheHashTable[hash & CACHEHASHMASK]; if ((succeeded && destructor) || do_ref) { p = (CachePtr) _XtHeapAlloc(heap, (sizeof(CacheRec) + sizeof(CacheRecExt) + num_args * sizeof(XrmValue))); CEXT(p)->prev = pHashEntry; CEXT(p)->destructor = succeeded ? destructor : NULL; CEXT(p)->closure = closure; CEXT(p)->ref_count = 1; p->has_ext = True; } else { p = (CachePtr)_XtHeapAlloc(heap, (sizeof(CacheRec) + num_args * sizeof(XrmValue))); p->has_ext = False; } if (!to->addr) succeeded = False; p->conversion_succeeded = succeeded; p->is_refcounted = do_ref; p->must_be_freed = do_free; p->next = *pHashEntry; if (p->next && p->next->has_ext) CEXT(p->next)->prev = &p->next; *pHashEntry = p; p->tag = (XtPointer)heap; p->hash = hash; p->converter = converter; p->from.size = from->size; if (from->size <= sizeof(p->from.addr)) { p->from_is_value = True; XtMemmove(&p->from.addr, from->addr, from->size); } else { p->from_is_value = False; p->from.addr = (XPointer)_XtHeapAlloc(heap, from->size); (void) memmove((char *)p->from.addr, (char *)from->addr, from->size); } p->num_args = num_args; if (num_args) { XrmValue *pargs = CARGS(p); for (i = 0; i < num_args; i++) { pargs[i].size = args[i].size; pargs[i].addr = (XPointer)_XtHeapAlloc(heap, args[i].size); XtMemmove(pargs[i].addr, args[i].addr, args[i].size); } } p->to.size = to->size; if (!succeeded) { p->to_is_value = False; p->to.addr = NULL; } else if (to->size <= sizeof(p->to.addr)) { p->to_is_value = True; XtMemmove(&p->to.addr, to->addr, to->size); } else { p->to_is_value = False; p->to.addr = (XPointer)_XtHeapAlloc(heap, to->size); (void) memmove((char *)p->to.addr, (char *)to->addr, to->size); } UNLOCK_PROCESS; return p; } static void FreeCacheRec( XtAppContext app, CachePtr p, CachePtr *prev) { LOCK_PROCESS; if (p->has_ext) { if (CEXT(p)->destructor) { Cardinal num_args = p->num_args; XrmValue *args = NULL; XrmValue toc; if (num_args) args = CARGS(p); toc.size = p->to.size; if (p->to_is_value) toc.addr = (XPointer)&p->to.addr; else toc.addr = p->to.addr; (*CEXT(p)->destructor) (app, &toc, CEXT(p)->closure, args, &num_args); } *(CEXT(p)->prev) = p->next; if (p->next && p->next->has_ext) CEXT(p->next)->prev = CEXT(p)->prev; } else { *prev = p->next; if (p->next && p->next->has_ext) CEXT(p->next)->prev = prev; } if (p->must_be_freed) { register int i; if (!p->from_is_value) XtFree(p->from.addr); if ((i = p->num_args)) { XrmValue *pargs = CARGS(p); while (i--) XtFree(pargs[i].addr); } if (!p->to_is_value) XtFree(p->to.addr); XtFree((char*)p); } /* else on private heap; will free entire heap later */ UNLOCK_PROCESS; } void _XtCacheFlushTag( XtAppContext app, XtPointer tag) { int i; register CachePtr *prev; register CachePtr rec; LOCK_PROCESS; for (i = CACHEHASHSIZE; --i >= 0;) { prev = &cacheHashTable[i]; while ((rec = *prev)) { if (rec->tag == tag) FreeCacheRec(app, rec, prev); else prev = &rec->next; } } UNLOCK_PROCESS; } #ifdef DEBUG #include void _XtConverterCacheStats(void) { register Cardinal i; register CachePtr p; register Cardinal entries; LOCK_PROCESS; for (i = 0; i < CACHEHASHSIZE; i++) { p = cacheHashTable[i]; if (p) { for (entries = 0; p; p = p->next) { entries++; } (void) fprintf(stdout, "Index: %4d Entries: %d\n", i, entries); for (p = cacheHashTable[i]; p; p = p->next) { (void) fprintf(stdout, " Size: %3d Refs: %3d '", p->from.size, p->has_ext ? CEXT(p)->ref_count : 0); (void) fprintf(stdout, "'\n"); } (void) fprintf(stdout, "\n"); } } UNLOCK_PROCESS; } #endif /*DEBUG*/ static Boolean ResourceQuarkToOffset( WidgetClass widget_class, XrmName name, Cardinal *offset) { register WidgetClass wc; register Cardinal i; register XrmResourceList res, *resources; for (wc = widget_class; wc; wc = wc->core_class.superclass) { resources = (XrmResourceList*) wc->core_class.resources; for (i = 0; i < wc->core_class.num_resources; i++, resources++) { res = *resources; if (res->xrm_name == name) { *offset = -res->xrm_offset - 1; return True; } } /* for i in resources */ } /* for wc in widget classes */ (*offset) = 0; return False; } static void ComputeArgs( Widget widget, XtConvertArgList convert_args, Cardinal num_args, XrmValuePtr args) { register Cardinal i; Cardinal offset; String params[1]; Cardinal num_params = 1; Widget ancestor = NULL; for (i = 0; i < num_args; i++) { args[i].size = convert_args[i].size; switch (convert_args[i].address_mode) { case XtAddress: args[i].addr = convert_args[i].address_id; break; case XtBaseOffset: args[i].addr = (XPointer)((char *)widget + (long)convert_args[i].address_id); break; case XtWidgetBaseOffset: if (!ancestor) { if (XtIsWidget(widget)) ancestor = widget; else ancestor = _XtWindowedAncestor(widget); } args[i].addr = (XPointer)((char *)ancestor + (long)convert_args[i].address_id); break; case XtImmediate: args[i].addr = (XPointer) &(convert_args[i].address_id); break; case XtProcedureArg: (*(XtConvertArgProc)convert_args[i].address_id) (widget, &convert_args[i].size, &args[i]); break; case XtResourceString: /* Convert in place for next usage */ convert_args[i].address_mode = XtResourceQuark; convert_args[i].address_id = (XtPointer)(long)XrmStringToQuark((String)convert_args[i].address_id); /* Fall through */ case XtResourceQuark: if (! ResourceQuarkToOffset(widget->core.widget_class, (XrmQuark)(long) convert_args[i].address_id, &offset)) { params[0]= XrmQuarkToString((XrmQuark)(long) convert_args[i].address_id); XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidResourceName","computeArgs",XtCXtToolkitError, "Cannot find resource name %s as argument to conversion", params,&num_params); offset = 0; } args[i].addr = (XPointer)((char *)widget + offset); break; default: params[0] = XtName(widget); XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidAddressMode", "computeArgs", XtCXtToolkitError, "Conversion arguments for widget '%s' contain an unsupported address mode", params,&num_params); args[i].addr = NULL; args[i].size = 0; } /* switch */ } /* for */ } /* ComputeArgs */ void XtDirectConvert( XtConverter converter, XrmValuePtr args, Cardinal num_args, register XrmValuePtr from, XrmValuePtr to) { register CachePtr p; register int hash; register Cardinal i; LOCK_PROCESS; /* Try to find cache entry for conversion */ hash = ((long) converter >> 2) + from->size + *((char *) from->addr); if (from->size > 1) hash += ((char *) from->addr)[1]; for (p = cacheHashTable[hash & CACHEHASHMASK]; p; p = p->next) { if ((p->hash == hash) && (p->converter == (XtTypeConverter)converter) && (p->from.size == from->size) && !(p->from_is_value ? XtMemcmp(&p->from.addr, from->addr, from->size) : memcmp((char *)p->from.addr, (char *)from->addr, from->size)) && (p->num_args == num_args)) { if ((i = num_args)) { XrmValue *pargs = CARGS(p); /* Are all args the same data ? */ while (i) { i--; /* do not move to while test, broken compilers */ if (pargs[i].size != args[i].size || XtMemcmp(pargs[i].addr, args[i].addr, args[i].size)) { i++; break; } } } if (!i) { /* Perfect match */ to->size = p->to.size; if (p->to_is_value) to->addr = (XPointer)&p->to.addr; else to->addr = p->to.addr; UNLOCK_PROCESS; return; } } } /* Didn't find it, call converter procedure and entry result in cache */ (*to).size = 0; (*to).addr = NULL; (*converter)(args, &num_args, from, to); /* This memory can never be freed since we don't know the Display * or app context from which to compute the persistance */ { CacheEnter(&globalHeap, (XtTypeConverter)converter, args, num_args, from, to, (to->addr != NULL), hash, False, False, (XtDestructor)NULL, NULL); } UNLOCK_PROCESS; } static ConverterPtr GetConverterEntry( XtAppContext app, XtTypeConverter converter) { Cardinal entry; register ConverterPtr cP; ConverterTable converterTable; LOCK_PROCESS; converterTable = app->converterTable; cP = NULL; for (entry = 0; (entry < CONVERTHASHSIZE) && !cP; entry++) { cP = converterTable[entry]; while (cP && (cP->converter != converter)) cP = cP->next; } UNLOCK_PROCESS; return cP; } static Boolean CallConverter( Display* dpy, XtTypeConverter converter, XrmValuePtr args, Cardinal num_args, register XrmValuePtr from, XrmValuePtr to, XtCacheRef *cache_ref_return, register ConverterPtr cP) { CachePtr p; int hash; Cardinal i; Boolean retval; if (!cP || ((cP->cache_type == XtCacheNone) && !cP->destructor)) { XtPointer closure; if (cache_ref_return) *cache_ref_return = NULL; retval = (*(XtTypeConverter)converter) (dpy, args, &num_args, from, to, &closure); return retval; } LOCK_PROCESS; /* Try to find cache entry for conversion */ hash = ((long)(converter) >> 2) + from->size + *((char *) from->addr); if (from->size > 1) hash += ((char *) from->addr)[1]; if (cP->cache_type != XtCacheNone) { for (p = cacheHashTable[hash & CACHEHASHMASK]; p; p = p->next){ if ((p->hash == hash) && (p->converter == converter) && (p->from.size == from->size) && !(p->from_is_value ? XtMemcmp(&p->from.addr, from->addr, from->size) : memcmp((char *)p->from.addr, (char *)from->addr, from->size)) && (p->num_args == num_args)) { if ((i = num_args)) { XrmValue *pargs = CARGS(p); /* Are all args the same data ? */ while (i) { i--; /* do not move to while test, broken compilers */ if (pargs[i].size != args[i].size || XtMemcmp(pargs[i].addr, args[i].addr, args[i].size)){ i++; break; } } } if (!i) { /* Perfect match */ if (p->conversion_succeeded) { if (to->addr) { /* new-style call */ if (to->size < p->to.size) { to->size = p->to.size; UNLOCK_PROCESS; return False; } to->size = p->to.size; if (p->to_is_value) { XtMemmove(to->addr, &p->to.addr, to->size); } else { (void) memmove((char *)to->addr, (char *)p->to.addr, to->size); } } else { /* old-style call */ to->size = p->to.size; if (p->to_is_value) to->addr = (XPointer)&p->to.addr; else to->addr = p->to.addr; } } if (p->is_refcounted) { CEXT(p)->ref_count++; if (cache_ref_return) *cache_ref_return = (XtCacheRef)p; else p->is_refcounted = False; } else { if (cache_ref_return) *cache_ref_return = NULL; } retval = (p->conversion_succeeded); UNLOCK_PROCESS; return retval; } } } } /* No cache entry, call converter procedure and enter result in cache */ { Heap *heap; XtPointer closure = NULL; unsigned int supplied_size = to->size; Boolean do_ref = cP->do_ref_count && cache_ref_return; Boolean do_free = False; Boolean retval = (*(XtTypeConverter)converter)(dpy, args, &num_args, from, to, &closure); if (retval == False && supplied_size < to->size) { /* programmer error: caller must allocate sufficient storage */ if (cache_ref_return) *cache_ref_return = NULL; UNLOCK_PROCESS; return False; } if ((cP->cache_type == XtCacheNone) || do_ref) { heap = NULL; do_free = True; } else if (cP->cache_type == XtCacheByDisplay) heap = &_XtGetPerDisplay(dpy)->heap; else if (cP->global) heap = &globalHeap; else heap = &XtDisplayToApplicationContext(dpy)->heap; p = CacheEnter(heap, converter, args, num_args, from, to, retval, hash, do_ref, do_free, cP->destructor, closure); if (do_ref) *cache_ref_return = (XtCacheRef)p; else if (cache_ref_return) *cache_ref_return = NULL; UNLOCK_PROCESS; return retval; } } Boolean XtCallConverter( Display* dpy, XtTypeConverter converter, XrmValuePtr args, Cardinal num_args, register XrmValuePtr from, XrmValuePtr to, XtCacheRef *cache_ref_return) { ConverterPtr cP; Boolean retval; XtAppContext app = XtDisplayToApplicationContext(dpy); LOCK_APP(app); if ((cP = GetConverterEntry(app, converter)) == NULL) { XtAppSetTypeConverter(XtDisplayToApplicationContext(dpy), "_XtUnk1", "_XtUnk2", converter, NULL, 0, XtCacheAll, NULL); cP = GetConverterEntry(app, converter); } retval = CallConverter(dpy, converter, args, num_args, from, to, cache_ref_return, cP); UNLOCK_APP(app); return retval; } Boolean _XtConvert( Widget widget, register XrmRepresentation from_type, XrmValuePtr from, register XrmRepresentation to_type, register XrmValuePtr to, XtCacheRef *cache_ref_return) { XtAppContext app = XtWidgetToApplicationContext(widget); register ConverterPtr p; Cardinal num_args; XrmValue *args; /* Look for type converter */ LOCK_PROCESS; p = app->converterTable[ProcHash(from_type, to_type) & CONVERTHASHMASK]; for (; p; p = p->next) { if (from_type == p->from && to_type == p->to) { Boolean retval = False; /* Compute actual arguments from widget and arg descriptor */ num_args = p->num_args; if (num_args != 0) { args = (XrmValue*) ALLOCATE_LOCAL( num_args * sizeof (XrmValue) ); if (!args) _XtAllocError("alloca"); ComputeArgs(widget, ConvertArgs(p), num_args, args); } else args = NULL; if (p->new_style) { retval = CallConverter(XtDisplayOfObject(widget), p->converter, args, num_args, from, to, cache_ref_return, p); } else { /* is old-style (non-display) converter */ XrmValue tempTo; XtDirectConvert((XtConverter)p->converter, args, num_args, from, &tempTo); if (cache_ref_return) *cache_ref_return = NULL; if (tempTo.addr) { if (to->addr) { /* new-style caller */ if (to->size >= tempTo.size) { if (to_type == _XtQString) *(String*)(to->addr) = tempTo.addr; else { XtMemmove(to->addr, tempTo.addr, tempTo.size); } retval = True; } to->size = tempTo.size; } else { /* old-style caller */ *to = tempTo; retval = True; } } } if (args) DEALLOCATE_LOCAL( (XtPointer)args ); UNLOCK_PROCESS; return retval; } } { String params[2]; Cardinal num_params = 2; params[0] = XrmRepresentationToString(from_type); params[1] = XrmRepresentationToString(to_type); XtAppWarningMsg(app, "typeConversionError", "noConverter", XtCXtToolkitError, "No type converter registered for '%s' to '%s' conversion.", params, &num_params); } UNLOCK_PROCESS; return False; } void XtConvert( Widget widget, _Xconst char* from_type_str, XrmValuePtr from, _Xconst char* to_type_str, XrmValuePtr to) { XrmQuark from_type, to_type; WIDGET_TO_APPCON(widget); LOCK_APP(app); from_type = XrmStringToRepresentation(from_type_str); to_type = XrmStringToRepresentation(to_type_str); if (from_type != to_type) { /* It's not safe to ref count these resources, 'cause we don't know what older clients may have assumed about the resource lifetimes. XtCacheRef ref; */ to->addr = NULL; to->size = 0; _XtConvert(widget, from_type, from, to_type, to, /*&ref*/ NULL); /* if (ref) { XtAddCallback( widget, XtNdestroyCallback, XtCallbackReleaseCacheRef, (XtPointer)ref ); } */ } else (*to) = *from; UNLOCK_APP(app); } Boolean XtConvertAndStore( Widget object, _Xconst char* from_type_str, XrmValuePtr from, _Xconst char* to_type_str, XrmValuePtr to) { XrmQuark from_type, to_type; WIDGET_TO_APPCON(object); LOCK_APP(app); LOCK_PROCESS; from_type = XrmStringToRepresentation(from_type_str); to_type = XrmStringToRepresentation(to_type_str); if (from_type != to_type) { static XtPointer local_valueP = NULL; static Cardinal local_valueS = 128; XtCacheRef ref; Boolean local = False; do { if (!to->addr) { if (!local_valueP) local_valueP = _XtHeapAlloc(&globalHeap, local_valueS); to->addr = local_valueP; to->size = local_valueS; local = True; } if (!_XtConvert(object, from_type, from, to_type, to, &ref)) { if (local && (to->size > local_valueS)) { to->addr = local_valueP = _XtHeapAlloc(&globalHeap, to->size); local_valueS = to->size; continue; } else { if (local) { to->addr = NULL; to->size = 0; } UNLOCK_PROCESS; UNLOCK_APP(app); return False; } } if (ref) { XtAddCallback( object, XtNdestroyCallback, XtCallbackReleaseCacheRef, (XtPointer)ref ); } UNLOCK_PROCESS; UNLOCK_APP(app); return True; } while (local /* && local_valueS < to->size */); } if (to->addr) { if (to->size < from->size) { to->size = from->size; UNLOCK_PROCESS; UNLOCK_APP(app); return False; } (void) memmove(to->addr, from->addr, from->size ); to->size = from->size; } else /* from_type == to_type */ *to = *from; UNLOCK_PROCESS; UNLOCK_APP(app); return True; } void XtAppReleaseCacheRefs( XtAppContext app, XtCacheRef *refs) { register CachePtr *r; register CachePtr p; LOCK_APP(app); LOCK_PROCESS; for (r = (CachePtr*)refs; (p = *r); r++) { if (p->is_refcounted && --(CEXT(p)->ref_count) == 0) { FreeCacheRec(app, p, NULL); } } UNLOCK_PROCESS; UNLOCK_APP(app); } /* ARGSUSED */ void XtCallbackReleaseCacheRefList( Widget widget, /* unused */ XtPointer closure, XtPointer call_data) /* unused */ { XtAppReleaseCacheRefs( XtWidgetToApplicationContext(widget), (XtCacheRef*)closure ); XtFree(closure); } /* ARGSUSED */ void XtCallbackReleaseCacheRef( Widget widget, /* unused */ XtPointer closure, XtPointer call_data) /* unused */ { XtCacheRef cache_refs[2]; cache_refs[0] = (XtCacheRef)closure; cache_refs[1] = NULL; XtAppReleaseCacheRefs( XtWidgetToApplicationContext(widget), cache_refs ); } rTable converterTable; LOCK_PROCESS; converterTable = app->converterTable; cP = NULL; for (entry = 0; (entry < CONVERTHASHSIZE) && !cP; entry++) { cP = converterTable[entry]; while (cP && (cP->converter != converter)) cP = cP->next; } UNLOCK_PROCESS; return cP; } static Boolean CallConverter( Display* dpy, XtTypeConverter converter, XrmValuePtr args, Cardinal num_args, register XrmValuePtr from, XrmValuePtr tlibXt-1.1.5/src/Create.c000064401431060000012000000576371252061032400152340ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "VarargsI.h" #include "ShellP.h" #include "CreateI.h" #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT #include "ResConfigP.h" #endif #include static String XtNxtCreateWidget = "xtCreateWidget"; static String XtNxtCreatePopupShell = "xtCreatePopupShell"; static void CallClassPartInit(WidgetClass ancestor, WidgetClass wc) { if (ancestor->core_class.superclass != NULL) { CallClassPartInit(ancestor->core_class.superclass, wc); } if (ancestor->core_class.class_part_initialize != NULL) { (*(ancestor->core_class.class_part_initialize)) (wc); } } void XtInitializeWidgetClass(WidgetClass wc) { XtEnum inited; LOCK_PROCESS; if (wc->core_class.class_inited) { UNLOCK_PROCESS; return; } inited = 0x01; { WidgetClass pc; #define LeaveIfClass(c, d) if (pc == c) { inited = d; break; } for (pc = wc; pc; pc = pc->core_class.superclass) { LeaveIfClass(rectObjClass, 0x01 | RectObjClassFlag); LeaveIfClass(coreWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag); LeaveIfClass(compositeWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag | CompositeClassFlag); LeaveIfClass(constraintWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag | CompositeClassFlag | ConstraintClassFlag); LeaveIfClass(shellWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag | CompositeClassFlag | ShellClassFlag); LeaveIfClass(wmShellWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag | CompositeClassFlag | ShellClassFlag | WMShellClassFlag); LeaveIfClass(topLevelShellWidgetClass, 0x01 | RectObjClassFlag | WidgetClassFlag | CompositeClassFlag | ShellClassFlag | WMShellClassFlag | TopLevelClassFlag); } #undef LeaveIfClass } if (wc->core_class.version != XtVersion && wc->core_class.version != XtVersionDontCheck) { String param[3]; String mismatch = "Widget class %s version mismatch (recompilation needed):\n widget %d vs. intrinsics %d."; String recompile = "Widget class %s must be re-compiled."; Cardinal num_params; param[0] = wc->core_class.class_name; param[1] = (String) wc->core_class.version; param[2] = (String) XtVersion; if (wc->core_class.version == (11 * 1000 + 5) || /* MIT X11R5 */ wc->core_class.version == (11 * 1000 + 4)) { /* MIT X11R4 */ if ((inited & WMShellClassFlag) && (sizeof(Boolean) != sizeof(char) || sizeof(Atom) != sizeof(Widget) || sizeof(Atom) != sizeof(String))) { num_params=3; XtWarningMsg("versionMismatch","widget",XtCXtToolkitError, mismatch, param, &num_params); num_params=1; XtErrorMsg("R4orR5versionMismatch","widget",XtCXtToolkitError, recompile, param, &num_params); } } else if (wc->core_class.version == (11 * 1000 + 3)) { /* MIT X11R3 */ if (inited & ShellClassFlag) { num_params=1; XtWarningMsg("r3versionMismatch","widget",XtCXtToolkitError, "Shell Widget class %s binary compiled for R3", param,&num_params); XtErrorMsg("R3versionMismatch","widget",XtCXtToolkitError, recompile, param, &num_params); } } else { num_params=3; XtWarningMsg("versionMismatch","widget",XtCXtToolkitError, mismatch, param, &num_params); if (wc->core_class.version == (2 * 1000 + 2)) /* MIT X11R2 */ { num_params=1; XtErrorMsg("r2versionMismatch","widget",XtCXtToolkitError, recompile, param, &num_params); } } } if ((wc->core_class.superclass != NULL) && (!(wc->core_class.superclass->core_class.class_inited))) XtInitializeWidgetClass(wc->core_class.superclass); if (wc->core_class.class_initialize != NULL) (*(wc->core_class.class_initialize))(); CallClassPartInit(wc, wc); wc->core_class.class_inited = inited; UNLOCK_PROCESS; } static void CallInitialize ( WidgetClass class, Widget req_widget, Widget new_widget, ArgList args, Cardinal num_args) { WidgetClass superclass; XtInitProc initialize; XtArgsProc initialize_hook; LOCK_PROCESS; superclass = class->core_class.superclass; UNLOCK_PROCESS; if (superclass) CallInitialize (superclass, req_widget, new_widget, args, num_args); LOCK_PROCESS; initialize = class->core_class.initialize; UNLOCK_PROCESS; if (initialize) (*initialize) (req_widget, new_widget, args, &num_args); LOCK_PROCESS; initialize_hook = class->core_class.initialize_hook; UNLOCK_PROCESS; if (initialize_hook) (*initialize_hook) (new_widget, args, &num_args); } static void CallConstraintInitialize ( ConstraintWidgetClass class, Widget req_widget, Widget new_widget, ArgList args, Cardinal num_args) { WidgetClass superclass; XtInitProc initialize; LOCK_PROCESS; superclass = class->core_class.superclass; UNLOCK_PROCESS; if (superclass != constraintWidgetClass) CallConstraintInitialize((ConstraintWidgetClass) superclass, req_widget, new_widget, args, num_args); LOCK_PROCESS; initialize = class->constraint_class.initialize; UNLOCK_PROCESS; if (initialize) (*initialize) (req_widget, new_widget, args, &num_args); } static Widget xtWidgetAlloc( WidgetClass widget_class, ConstraintWidgetClass parent_constraint_class, Widget parent, String name, ArgList args, /* must be NULL if typed_args is non-NULL */ Cardinal num_args, XtTypedArgList typed_args, /* must be NULL if args is non-NULL */ Cardinal num_typed_args) { Widget widget; Cardinal wsize, csize = 0; ObjectClassExtension ext; LOCK_PROCESS; if (! (widget_class->core_class.class_inited)) XtInitializeWidgetClass(widget_class); ext = (ObjectClassExtension) XtGetClassExtension(widget_class, XtOffsetOf(ObjectClassRec, object_class.extension), NULLQUARK, XtObjectExtensionVersion, sizeof(ObjectClassExtensionRec)); if (parent_constraint_class) csize = parent_constraint_class->constraint_class.constraint_size; if (ext && ext->allocate) { XtAllocateProc allocate; Cardinal extra = 0; Cardinal nargs = num_args; Cardinal ntyped = num_typed_args; allocate = ext->allocate; UNLOCK_PROCESS; (*allocate)(widget_class, &csize, &extra, args, &nargs, typed_args, &ntyped, &widget, NULL); } else { wsize = widget_class->core_class.widget_size; UNLOCK_PROCESS; if (csize) { if (sizeof(struct {char a; double b;}) != (sizeof(struct {char a; unsigned long b;}) - sizeof(unsigned long) + sizeof(double))) { if (csize && !(csize & (sizeof(double) - 1))) wsize = (wsize + sizeof(double) - 1) & ~(sizeof(double)-1); } } widget = (Widget) __XtMalloc((unsigned)(wsize + csize)); bzero(widget, wsize + csize); widget->core.constraints = (csize ? (XtPointer)((char *)widget + wsize) : NULL); } widget->core.self = widget; widget->core.parent = parent; widget->core.widget_class = widget_class; widget->core.xrm_name = StringToName((name != NULL) ? name : ""); widget->core.being_destroyed = (parent != NULL ? parent->core.being_destroyed : FALSE); return widget; } static void CompileCallbacks( Widget widget) { CallbackTable offsets; InternalCallbackList* cl; int i; LOCK_PROCESS; offsets = (CallbackTable) widget->core.widget_class->core_class.callback_private; for (i = (int)(long) *(offsets++); --i >= 0; offsets++) { cl = (InternalCallbackList *) ((char *) widget - (*offsets)->xrm_offset - 1); if (*cl) *cl = _XtCompileCallbackList((XtCallbackList) *cl); } UNLOCK_PROCESS; } static Widget xtCreate( char *name, char *class, WidgetClass widget_class, Widget parent, Screen* default_screen, /* undefined when creating a nonwidget */ ArgList args, /* must be NULL if typed_args is non-NULL */ Cardinal num_args, XtTypedArgList typed_args, /* must be NULL if args is non-NULL */ Cardinal num_typed_args, ConstraintWidgetClass parent_constraint_class, /* NULL if not a subclass of Constraint or if child is popup shell */ XtWidgetProc post_proc) { /* need to use strictest alignment rules possible in next two decls. */ double widget_cache[100]; double constraint_cache[20]; Widget req_widget; XtPointer req_constraints = NULL; Cardinal wsize, csize; Widget widget; XtCacheRef *cache_refs; Cardinal i; XtCreateHookDataRec call_data; widget = xtWidgetAlloc(widget_class, parent_constraint_class, parent, name, args, num_args, typed_args, num_typed_args); if (XtIsRectObj(widget)) { widget->core.managed = FALSE; } if (XtIsWidget(widget)) { widget->core.name = XrmNameToString(widget->core.xrm_name); widget->core.screen = default_screen; widget->core.tm.translations = NULL; widget->core.window = (Window) 0; widget->core.visible = TRUE; widget->core.popup_list = NULL; widget->core.num_popups = 0; }; LOCK_PROCESS; if (XtIsApplicationShell(widget)) { ApplicationShellWidget a = (ApplicationShellWidget) widget; if (class != NULL) a->application.xrm_class = StringToClass(class); else a->application.xrm_class = widget_class->core_class.xrm_class; a->application.class = XrmQuarkToString(a->application.xrm_class); } UNLOCK_PROCESS; /* fetch resources */ cache_refs = _XtGetResources(widget, args, num_args, typed_args, &num_typed_args); /* Convert typed arg list to arg list */ if (typed_args != NULL && num_typed_args > 0) { args = (ArgList)ALLOCATE_LOCAL(sizeof(Arg) * num_typed_args); if (args == NULL) _XtAllocError(NULL); for (i = 0; i < num_typed_args; i++) { args[i].name = typed_args[i].name; args[i].value = typed_args[i].value; } num_args = num_typed_args; } CompileCallbacks(widget); if (cache_refs != NULL) { XtAddCallback(widget, XtNdestroyCallback, XtCallbackReleaseCacheRefList, (XtPointer)cache_refs ); } wsize = widget_class->core_class.widget_size; csize = 0; req_widget = (Widget) XtStackAlloc(wsize, widget_cache); (void) memmove ((char *) req_widget, (char *) widget, (int) wsize); CallInitialize (XtClass(widget), req_widget, widget, args, num_args); if (parent_constraint_class != NULL) { csize = parent_constraint_class->constraint_class.constraint_size; if (csize) { req_constraints = XtStackAlloc(csize, constraint_cache); (void) memmove((char*)req_constraints, widget->core.constraints, (int)csize); req_widget->core.constraints = req_constraints; } else req_widget->core.constraints = NULL; CallConstraintInitialize(parent_constraint_class, req_widget, widget, args, num_args); if (csize) { XtStackFree(req_constraints, constraint_cache); } } XtStackFree((XtPointer)req_widget, widget_cache); if (post_proc != (XtWidgetProc) NULL) { Widget hookobj; (*post_proc)(widget); hookobj = XtHooksOfDisplay((default_screen != (Screen*) NULL) ? default_screen->display : XtDisplayOfObject(parent)); if (XtHasCallbacks(hookobj, XtNcreateHook) == XtCallbackHasSome) { call_data.type = XtHcreate; call_data.widget = widget; call_data.args = args; call_data.num_args = num_args; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.createhook_callbacks, (XtPointer)&call_data); } } if (typed_args != NULL) { while (num_typed_args-- > 0) { /* In GetResources we may have dynamically alloc'd store to hold */ /* a copy of a resource which was larger then sizeof(XtArgVal). */ /* We must free this store now in order to prevent a memory leak */ /* A typed arg that has a converted value in dynamic store has a */ /* negated size field. */ if (typed_args->type != NULL && typed_args->size < 0) { XtFree((char*)typed_args->value); typed_args->size = -(typed_args->size); } typed_args++; } DEALLOCATE_LOCAL((char*)args); } return (widget); } static void widgetPostProc(Widget w) { XtWidgetProc insert_child; Widget parent = XtParent(w); String param = XtName(w); Cardinal num_params = 1; if (XtIsComposite(parent)) { LOCK_PROCESS; insert_child = ((CompositeWidgetClass) parent->core.widget_class)-> composite_class.insert_child; UNLOCK_PROCESS; } else { return; } if (insert_child == NULL) { XtAppErrorMsg(XtWidgetToApplicationContext(parent), "nullProc","insertChild",XtCXtToolkitError, "\"%s\" parent has NULL insert_child method", ¶m, &num_params); } else { (*insert_child) (w); } } Widget _XtCreateWidget( String name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args) { register Widget widget; ConstraintWidgetClass cwc; Screen* default_screen; XtEnum class_inited; String params[3]; Cardinal num_params; params[0] = name; num_params = 1; if (parent == NULL) { XtErrorMsg("invalidParent", XtNxtCreateWidget, XtCXtToolkitError, "XtCreateWidget \"%s\" requires non-NULL parent", params, &num_params); } else if (widget_class == NULL) { XtAppErrorMsg(XtWidgetToApplicationContext(parent), "invalidClass", XtNxtCreateWidget, XtCXtToolkitError, "XtCreateWidget \"%s\" requires non-NULL widget class", params, &num_params); } LOCK_PROCESS; if (!widget_class->core_class.class_inited) XtInitializeWidgetClass(widget_class); class_inited = widget_class->core_class.class_inited; UNLOCK_PROCESS; if ((class_inited & WidgetClassFlag) == 0) { /* not a widget */ default_screen = NULL; if (XtIsComposite(parent)) { CompositeClassExtension ext; ext = (CompositeClassExtension) XtGetClassExtension(XtClass(parent), XtOffsetOf(CompositeClassRec, composite_class.extension), NULLQUARK, 1L, (Cardinal) 0); LOCK_PROCESS; if (ext && (ext->version > XtCompositeExtensionVersion || ext->record_size > sizeof(CompositeClassExtensionRec))) { params[1] = XtClass(parent)->core_class.class_name; num_params = 2; XtAppWarningMsg(XtWidgetToApplicationContext(parent), "invalidExtension", XtNxtCreateWidget, XtCXtToolkitError, "widget \"%s\" class %s has invalid CompositeClassExtension record", params, &num_params); } if (!ext || !ext->accepts_objects) { params[1] = XtName(parent); num_params = 2; XtAppErrorMsg(XtWidgetToApplicationContext(parent), "nonWidget", XtNxtCreateWidget,XtCXtToolkitError, "attempt to add non-widget child \"%s\" to parent \"%s\" which supports only widgets", params, &num_params); } UNLOCK_PROCESS; } } else { default_screen = parent->core.screen; } if (XtIsConstraint(parent)) { cwc = (ConstraintWidgetClass) parent->core.widget_class; } else { cwc = NULL; } widget = xtCreate(name, (char *)NULL, widget_class, parent, default_screen, args, num_args, typed_args, num_typed_args, cwc, widgetPostProc); return (widget); } Widget XtCreateWidget( _Xconst char* name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args ) { Widget retval; WIDGET_TO_APPCON(parent); LOCK_APP(app); retval = _XtCreateWidget((String)name, widget_class, parent, args, num_args, (XtTypedArgList)NULL, (Cardinal)0); UNLOCK_APP(app); return retval; } Widget XtCreateManagedWidget( _Xconst char* name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args ) { register Widget widget; WIDGET_TO_APPCON(parent); LOCK_APP(app); XtCheckSubclass(parent, compositeWidgetClass, "in XtCreateManagedWidget"); widget = _XtCreateWidget((String)name, widget_class, parent, args, num_args, (XtTypedArgList)NULL, (Cardinal) 0); XtManageChild(widget); UNLOCK_APP(app); return widget; } static void popupPostProc(Widget w) { Widget parent = XtParent(w); parent->core.popup_list = (WidgetList) XtRealloc((char*) parent->core.popup_list, (unsigned) (parent->core.num_popups+1) * sizeof(Widget)); parent->core.popup_list[parent->core.num_popups++] = w; } Widget _XtCreatePopupShell( String name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args) { register Widget widget; Screen* default_screen; if (parent == NULL) { XtErrorMsg("invalidParent",XtNxtCreatePopupShell,XtCXtToolkitError, "XtCreatePopupShell requires non-NULL parent", (String *)NULL, (Cardinal *)NULL); } else if (widget_class == NULL) { XtAppErrorMsg(XtWidgetToApplicationContext(parent), "invalidClass",XtNxtCreatePopupShell,XtCXtToolkitError, "XtCreatePopupShell requires non-NULL widget class", (String *)NULL, (Cardinal *)NULL); } XtCheckSubclass(parent, coreWidgetClass, "in XtCreatePopupShell"); default_screen = parent->core.screen; widget = xtCreate(name, (char *)NULL, widget_class, parent, default_screen, args, num_args, typed_args, num_typed_args, (ConstraintWidgetClass)NULL, popupPostProc); #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT XtAddEventHandler (widget, (EventMask) PropertyChangeMask, FALSE, (XtEventHandler) _XtResourceConfigurationEH, NULL); #endif return(widget); } Widget XtCreatePopupShell( _Xconst char* name, WidgetClass widget_class, Widget parent, ArgList args, Cardinal num_args ) { Widget retval; WIDGET_TO_APPCON(parent); LOCK_APP(app); retval = _XtCreatePopupShell((String)name, widget_class, parent, args, num_args, (XtTypedArgList)NULL, (Cardinal)0); UNLOCK_APP(app); return retval; } Widget _XtAppCreateShell( String name, String class, WidgetClass widget_class, Display* display, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args) { Widget shell; if (widget_class == NULL) { XtAppErrorMsg(XtDisplayToApplicationContext(display), "invalidClass","xtAppCreateShell",XtCXtToolkitError, "XtAppCreateShell requires non-NULL widget class", (String *)NULL, (Cardinal *)NULL); } if (name == NULL) name = XrmNameToString(_XtGetPerDisplay(display)->name); shell = xtCreate(name, class, widget_class, (Widget)NULL, (Screen*)DefaultScreenOfDisplay(display), args, num_args, typed_args, num_typed_args, (ConstraintWidgetClass) NULL, _XtAddShellToHookObj); #ifndef X_NO_RESOURCE_CONFIGURATION_MANAGEMENT XtAddEventHandler (shell, (EventMask) PropertyChangeMask, FALSE, (XtEventHandler) _XtResourceConfigurationEH, NULL); #endif return shell; } Widget XtAppCreateShell( _Xconst char* name, _Xconst char* class, WidgetClass widget_class, Display *display, ArgList args, Cardinal num_args ) { Widget retval; DPY_TO_APPCON(display); LOCK_APP(app); retval = _XtAppCreateShell((String)name, (String)class, widget_class, display, args, num_args, (XtTypedArgList)NULL, (Cardinal)0); UNLOCK_APP(app); return retval; } /* ARGSUSED */ Widget XtCreateApplicationShell( _Xconst char* name, /* unused in R3 and later */ WidgetClass widget_class, ArgList args, Cardinal num_args ) { Widget retval; Display* dpy; XrmClass class; XtAppContext app = _XtDefaultAppContext(); LOCK_APP(app); dpy = app->list[0]; class = _XtGetPerDisplay(dpy)->class; retval = _XtAppCreateShell((String)NULL, XrmQuarkToString((XrmQuark)class), widget_class, dpy, args, num_args, (XtTypedArgList)NULL, (Cardinal)0); UNLOCK_APP(app); return retval; } Widget _XtCreateHookObj(Screen* screen) { Widget req_widget; double widget_cache[100]; Cardinal wsize = 0; Widget hookobj = xtWidgetAlloc(hookObjectClass, (ConstraintWidgetClass)NULL, (Widget)NULL, "hooks", (ArgList)NULL, (Cardinal)0, (XtTypedArgList)NULL, (Cardinal)0); ((HookObject)hookobj)->hooks.screen = screen; (void) _XtGetResources(hookobj, (ArgList)NULL, 0, (XtTypedArgList)NULL, &wsize); CompileCallbacks(hookobj); wsize = hookObjectClass->core_class.widget_size; req_widget = (Widget) XtStackAlloc(wsize, widget_cache); (void) memmove ((char *) req_widget, (char *) hookobj, (int) wsize); CallInitialize (hookObjectClass, req_widget, hookobj, (ArgList)NULL, (Cardinal) 0); XtStackFree((XtPointer)req_widget, widget_cache); return hookobj; } idget->core.constraints = req_constraints; } else req_widget->core.constraints = NULL; CallConslibXt-1.1.5/src/Error.c000064401431060000012000000430661252061032400151110ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include #include /* The error handlers in the application context aren't used since we can't come up with a uniform way of using them. If you can, define GLOBALERRORS to be FALSE (or 0). */ #ifndef GLOBALERRORS #define GLOBALERRORS 1 #endif static void InitErrorHandling(XrmDatabase *); #if GLOBALERRORS static XrmDatabase errorDB = NULL; static Boolean error_inited = FALSE; void _XtDefaultErrorMsg(String, String, String, String, String*, Cardinal*); void _XtDefaultWarningMsg(String, String, String, String, String*, Cardinal*); void _XtDefaultError(String) _X_NORETURN; void _XtDefaultWarning(String); static XtErrorMsgHandler errorMsgHandler = _XtDefaultErrorMsg; static XtErrorMsgHandler warningMsgHandler = _XtDefaultWarningMsg; static XtErrorHandler errorHandler = _XtDefaultError; static XtErrorHandler warningHandler = _XtDefaultWarning; #endif /* GLOBALERRORS */ XrmDatabase *XtGetErrorDatabase(void) { XrmDatabase* retval; #if GLOBALERRORS LOCK_PROCESS; retval = &errorDB; UNLOCK_PROCESS; #else retval = XtAppGetErrorDatabase(_XtDefaultAppContext()); #endif /* GLOBALERRORS */ return retval; } XrmDatabase *XtAppGetErrorDatabase( XtAppContext app) { XrmDatabase* retval; #if GLOBALERRORS LOCK_PROCESS; retval = &errorDB; UNLOCK_PROCESS; #else LOCK_APP(app); retval= &app->errorDB; UNLOCK_APP(app); #endif /* GLOBALERRORS */ return retval; } void XtGetErrorDatabaseText( register _Xconst char* name, register _Xconst char* type, register _Xconst char* class, _Xconst char* defaultp, String buffer, int nbytes) { #if GLOBALERRORS XtAppGetErrorDatabaseText(NULL, name,type,class,defaultp, buffer, nbytes, NULL); #else XtAppGetErrorDatabaseText(_XtDefaultAppContext(), name,type,class,defaultp, buffer, nbytes, NULL); #endif /* GLOBALERRORS */ } void XtAppGetErrorDatabaseText( XtAppContext app, register _Xconst char* name, register _Xconst char* type, register _Xconst char* class, _Xconst char* defaultp, String buffer, int nbytes, XrmDatabase db) { String str_class; String type_str; XrmValue result; char *str_name = NULL; char *temp = NULL; #if GLOBALERRORS LOCK_PROCESS; if (error_inited == FALSE) { InitErrorHandling (&errorDB); error_inited = TRUE; } #else LOCK_APP(app); if (app->error_inited == FALSE) { InitErrorHandling (&app->errorDB); app->error_inited = TRUE; } #endif /* GLOBALERRORS */ if (!(str_name = ALLOCATE_LOCAL(strlen(name) + strlen(type) + 2))) _XtAllocError(NULL); (void) sprintf(str_name, "%s.%s", name, type); /* XrmGetResource requires the name and class to be fully qualified * and to have the same number of components. */ str_class = (char *)class; if (! strchr(class, '.')) { if (!(temp = ALLOCATE_LOCAL(2 * strlen(class) + 2))) _XtAllocError(NULL); (void) sprintf(temp, "%s.%s", class, class); str_class = temp; } if (db == NULL) { #if GLOBALERRORS (void) XrmGetResource(errorDB, str_name, str_class, &type_str, &result); #else (void) XrmGetResource(app->errorDB, str_name, str_class, &type_str, &result); #endif /* GLOBALERRORS */ } else (void) XrmGetResource(db, str_name, str_class, &type_str, &result); if (result.addr) { (void) strncpy (buffer, result.addr, nbytes); if (result.size > (unsigned) nbytes) buffer[nbytes-1] = 0; } else { int len = strlen(defaultp); if (len >= nbytes) len = nbytes-1; (void) memmove(buffer, defaultp, len); buffer[len] = '\0'; } if (str_name) DEALLOCATE_LOCAL(str_name); if (temp) DEALLOCATE_LOCAL(temp); #if GLOBALERRORS UNLOCK_PROCESS; #else UNLOCK_APP(app); #endif } static void InitErrorHandling ( XrmDatabase *db) { XrmDatabase errordb; errordb = XrmGetFileDatabase(ERRORDB); XrmMergeDatabases(errordb, db); } static void DefaultMsg ( String name, String type, String class, String defaultp, String* params, Cardinal* num_params, Bool error, void (*fn)(_Xconst _XtString)) { #define BIGBUF 1024 char buffer[BIGBUF]; char* message; XtGetErrorDatabaseText(name,type,class,defaultp, buffer, BIGBUF); /*need better solution here, perhaps use lower level printf primitives? */ if (params == NULL || num_params == NULL || *num_params == 0) (*fn)(buffer); #ifndef WIN32 /* and OS/2 */ else if ((getuid () != geteuid ()) || getuid() == 0) { if ((error && errorHandler == _XtDefaultError) || (!error && warningHandler == _XtDefaultWarning)) { /* * if it's just going to go to stderr anyway, then we'll * fprintf to stderr ourselves and skip the insecure sprintf. */ Cardinal i = *num_params; String par[10]; if (i > 10) i = 10; (void) memmove((char*)par, (char*)params, i * sizeof(String) ); bzero( &par[i], (10-i) * sizeof(String) ); (void) fprintf (stderr, "%s%s", error ? XTERROR_PREFIX : XTWARNING_PREFIX, error ? "Error: " : "Warning: "); (void) fprintf (stderr, buffer, par[0], par[1], par[2], par[3], par[4], par[5], par[6], par[7], par[8], par[9]); (void) fprintf (stderr, "%c", '\n'); if (i != *num_params) (*fn) ( "Some arguments in previous message were lost" ); else if (error) exit (1); } else { /* * can't tell what it might do, so we'll play it safe */ XtWarning ("\ This program is an suid-root program or is being run by the root user.\n\ The full text of the error or warning message cannot be safely formatted\n\ in this environment. You may get a more descriptive message by running the\n\ program as a non-root user or by removing the suid bit on the executable."); (*fn)(buffer); /* if *fn is an ErrorHandler it should exit */ } } #endif else { /* * If you have snprintf the worst thing that could happen is you'd * lose some information. Without snprintf you're probably going to * scramble your heap and perhaps SEGV -- sooner or later. * If it hurts when you go like this then don't go like this! :-) */ Cardinal i = *num_params; String par[10]; if (i > 10) i = 10; (void) memmove((char*)par, (char*)params, i * sizeof(String) ); bzero( &par[i], (10-i) * sizeof(String) ); if (i != *num_params) XtWarning( "Some arguments in following message were lost" ); /* * resist any temptation you might have to make `message' a * local buffer on the stack. Doing so is a security hole * in programs executing as root. Error and Warning * messages shouldn't be called frequently enough for this * to be a performance issue. */ if ((message = __XtMalloc (BIGBUF))) { (void) snprintf (message, BIGBUF, buffer, par[0], par[1], par[2], par[3], par[4], par[5], par[6], par[7], par[8], par[9]); (*fn)(message); XtFree(message); } else { XtWarning ("Memory allocation failed, arguments in the following message were lost"); (*fn)(buffer); } } } void _XtDefaultErrorMsg ( String name, String type, String class, String defaultp, String* params, Cardinal* num_params) { DefaultMsg (name,type,class,defaultp,params,num_params,True,XtError); } void _XtDefaultWarningMsg ( String name, String type, String class, String defaultp, String* params, Cardinal* num_params) { DefaultMsg (name,type,class,defaultp,params,num_params,False,XtWarning); } void XtErrorMsg( _Xconst char* name, _Xconst char* type, _Xconst char* class, _Xconst char* defaultp, String* params, Cardinal* num_params) { #if GLOBALERRORS LOCK_PROCESS; (*errorMsgHandler)((String)name,(String)type,(String)class, (String)defaultp,params,num_params); UNLOCK_PROCESS; #else XtAppErrorMsg(_XtDefaultAppContext(),name,type,class, defaultp,params,num_params); #endif /* GLOBALERRORS */ } void XtAppErrorMsg( XtAppContext app, _Xconst char* name, _Xconst char* type, _Xconst char* class, _Xconst char* defaultp, String* params, Cardinal* num_params) { #if GLOBALERRORS LOCK_PROCESS; (*errorMsgHandler)((String)name,(String)type,(String)class, (String)defaultp,params,num_params); UNLOCK_PROCESS; #else LOCK_APP(app); (*app->errorMsgHandler)(name,type,class,defaultp,params,num_params); UNLOCK_APP(app); #endif /* GLOBALERRORS */ } void XtWarningMsg( _Xconst char* name, _Xconst char* type, _Xconst char* class, _Xconst char* defaultp, String* params, Cardinal* num_params) { #if GLOBALERRORS LOCK_PROCESS; (*warningMsgHandler)((String)name,(String)type,(String)class, (String)defaultp,params,num_params); UNLOCK_PROCESS; #else XtAppWarningMsg(_XtDefaultAppContext(),name,type,class, defaultp,params,num_params); #endif /* GLOBALERRORS */ } void XtAppWarningMsg( XtAppContext app, _Xconst char* name, _Xconst char* type, _Xconst char* class, _Xconst char* defaultp, String* params, Cardinal* num_params) { #if GLOBALERRORS LOCK_PROCESS; (*warningMsgHandler)((String)name,(String)type,(String)class, (String)defaultp,params,num_params); UNLOCK_PROCESS; #else LOCK_APP(app); (*app->warningMsgHandler)(name,type,class,defaultp,params,num_params); UNLOCK_APP(app); #endif /* GLOBALERRORS */ } void XtSetErrorMsgHandler( XtErrorMsgHandler handler) { #if GLOBALERRORS LOCK_PROCESS; if (handler != NULL) errorMsgHandler = handler; else errorMsgHandler = _XtDefaultErrorMsg; UNLOCK_PROCESS; #else XtAppSetErrorMsgHandler(_XtDefaultAppContext(), handler); #endif /* GLOBALERRORS */ } XtErrorMsgHandler XtAppSetErrorMsgHandler( XtAppContext app, XtErrorMsgHandler handler) { XtErrorMsgHandler old; #if GLOBALERRORS LOCK_PROCESS; old = errorMsgHandler; if (handler != NULL) errorMsgHandler = handler; else errorMsgHandler = _XtDefaultErrorMsg; UNLOCK_PROCESS; #else LOCK_APP(app); old = app->errorMsgHandler; if (handler != NULL) app->errorMsgHandler = handler; else app->errorMsgHandler = _XtDefaultErrorMsg; UNLOCK_APP(app); #endif /* GLOBALERRORS */ return old; } void XtSetWarningMsgHandler( XtErrorMsgHandler handler) { #if GLOBALERRORS LOCK_PROCESS; if (handler != NULL) warningMsgHandler = handler; else warningMsgHandler = _XtDefaultWarningMsg; UNLOCK_PROCESS; #else XtAppSetWarningMsgHandler(_XtDefaultAppContext(),handler); #endif /* GLOBALERRORS */ } XtErrorMsgHandler XtAppSetWarningMsgHandler( XtAppContext app, XtErrorMsgHandler handler) { XtErrorMsgHandler old; #if GLOBALERRORS LOCK_PROCESS; old = warningMsgHandler; if (handler != NULL) warningMsgHandler = handler; else warningMsgHandler = _XtDefaultWarningMsg; UNLOCK_PROCESS; #else LOCK_APP(app); old = app->warningMsgHandler; if (handler != NULL) app->warningMsgHandler = handler; else app->warningMsgHandler = _XtDefaultWarningMsg; UNLOCK_APP(app); #endif /* GLOBALERRORS */ return old; } void _XtDefaultError(String message) { if (message && *message) (void)fprintf(stderr, "%sError: %s\n", XTERROR_PREFIX, message); exit(1); } void _XtDefaultWarning(String message) { if (message && *message) (void)fprintf(stderr, "%sWarning: %s\n", XTWARNING_PREFIX, message); return; } void XtError( _Xconst char* message) { #if GLOBALERRORS LOCK_PROCESS; (*errorHandler)((String)message); UNLOCK_PROCESS; #else XtAppError(_XtDefaultAppContext(),message); #endif /* GLOBALERRORS */ } void XtAppError( XtAppContext app, _Xconst char* message) { #if GLOBALERRORS LOCK_PROCESS; (*errorHandler)((String)message); UNLOCK_PROCESS; #else LOCK_APP(app); (*app->errorHandler)(message); UNLOCK_APP(app); #endif /* GLOBALERRORS */ } void XtWarning( _Xconst char* message) { #if GLOBALERRORS LOCK_PROCESS; (*warningHandler)((String)message); UNLOCK_PROCESS; #else XtAppWarning(_XtDefaultAppContext(),message); #endif /* GLOBALERRORS */ } void XtAppWarning( XtAppContext app, _Xconst char* message) { #if GLOBALERRORS LOCK_PROCESS; (*warningHandler)((String)message); UNLOCK_PROCESS; #else LOCK_APP(app); (*app->warningHandler)(message); UNLOCK_APP(app); #endif /* GLOBALERRORS */ } void XtSetErrorHandler(XtErrorHandler handler) { #if GLOBALERRORS LOCK_PROCESS; if (handler != NULL) errorHandler = handler; else errorHandler = _XtDefaultError; UNLOCK_PROCESS; #else XtAppSetErrorHandler(_XtDefaultAppContext(),handler); #endif /* GLOBALERRORS */ } XtErrorHandler XtAppSetErrorHandler( XtAppContext app, XtErrorHandler handler) { XtErrorHandler old; #if GLOBALERRORS LOCK_PROCESS; old = errorHandler; if (handler != NULL) errorHandler = handler; else errorHandler = _XtDefaultError; UNLOCK_PROCESS; #else LOCK_APP(app); old = app->errorHandler; if (handler != NULL) app->errorHandler = handler; else app->errorHandler = _XtDefaultError; UNLOCK_APP(app); #endif /* GLOBALERRORS */ return old; } void XtSetWarningHandler(XtErrorHandler handler) { #if GLOBALERRORS LOCK_PROCESS; if (handler != NULL) warningHandler = handler; else warningHandler = _XtDefaultWarning; UNLOCK_PROCESS; #else XtAppSetWarningHandler(_XtDefaultAppContext(),handler); #endif /* GLOBALERRORS */ } XtErrorHandler XtAppSetWarningHandler( XtAppContext app, XtErrorHandler handler) { XtErrorHandler old; #if GLOBALERRORS LOCK_PROCESS; old = warningHandler; if (handler != NULL) warningHandler = handler; else warningHandler = _XtDefaultWarning; UNLOCK_PROCESS; #else LOCK_APP(app); old = app->warningHandler; if (handler != NULL) app->warningHandler = handler; else app->warningHandler = _XtDefaultWarning; UNLOCK_APP(app); #endif /* GLOBALERRORS */ return old; } void _XtSetDefaultErrorHandlers( XtErrorMsgHandler *errMsg, XtErrorMsgHandler *warnMsg, XtErrorHandler *err, XtErrorHandler *warn) { #ifndef GLOBALERRORS LOCK_PROCESS; *errMsg = _XtDefaultErrorMsg; *warnMsg = _XtDefaultWarningMsg; *err = _XtDefaultError; *warn = _XtDefaultWarning; UNLOCK_PROCESS; #endif /* GLOBALERRORS */ } GetErrorDatabaseText(name,type,class,defaultp, buffer, BIGBUF); /*need better solution here, perhaps use lower level printf primitives? */ if (params == NULL || num_params == NULL || *num_params == 0) (*fn)(buffer); #ifndef WIN32 /* and OS/2 */ else if ((getuid () != geteuid ()) || getuid() == 0) { if ((error && errorHandler == _XtDefaultError) || (!error && warningHandler == _XtDefaultWarning)) { /* * if it's just going to go tlibXt-1.1.5/src/VarGet.c000064401431060000012000000217551252061032400152110ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Copyright 1985, 1986, 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "VarargsI.h" #include "StringDefs.h" static String XtNxtGetTypedArg = "xtGetTypedArg"; void XtVaGetSubresources( Widget widget, XtPointer base, _Xconst char* name, _Xconst char* class, XtResourceList resources, Cardinal num_resources, ...) { va_list var; XtTypedArgList args; Cardinal num_args; int total_count, typed_count; WIDGET_TO_APPCON(widget); LOCK_APP(app); va_start(var, num_resources); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var, num_resources); _XtVaToTypedArgList(var, total_count, &args, &num_args); _XtGetSubresources(widget, base, name, class, resources, num_resources, NULL, 0, args, num_args); if (num_args != 0) { XtFree((XtPointer)args); } va_end(var); UNLOCK_APP(app); } void XtVaGetApplicationResources(Widget widget, XtPointer base, XtResourceList resources, Cardinal num_resources, ...) { va_list var; XtTypedArgList args; Cardinal num_args; int total_count, typed_count; WIDGET_TO_APPCON(widget); LOCK_APP(app); va_start(var,num_resources); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,num_resources); _XtVaToTypedArgList(var, total_count, &args, &num_args); _XtGetApplicationResources(widget, base, resources, num_resources, NULL, 0, args, num_args); if (num_args != 0) { XtFree((XtPointer)args); } va_end(var); UNLOCK_APP(app); } static void GetTypedArg( Widget widget, XtTypedArgList typed_arg, XtResourceList resources, Cardinal num_resources) { String from_type = NULL; Cardinal from_size = 0; XrmValue from_val, to_val; register Cardinal i; Arg arg; XtPointer value; /* note we presume that the XtResourceList to be un-compiled */ for (i = 0; i < num_resources; i++) { if (StringToName(typed_arg->name) == StringToName(resources[i].resource_name)) { from_type = resources[i].resource_type; from_size = resources[i].resource_size; break; } } if (i == num_resources) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "unknownType", XtNxtGetTypedArg, XtCXtToolkitError, "Unable to find type of resource for conversion", (String *)NULL, (Cardinal *)NULL); return; } value = ALLOCATE_LOCAL(from_size); if (value == NULL) _XtAllocError(NULL); XtSetArg(arg, typed_arg->name, value); XtGetValues(widget, &arg, 1); from_val.size = from_size; from_val.addr = (XPointer)value; to_val.addr = (XPointer)typed_arg->value; to_val.size = typed_arg->size; if (!XtConvertAndStore(widget, from_type, &from_val, typed_arg->type, &to_val)) { if (to_val.size > (unsigned) typed_arg->size) { String params[2]; Cardinal num_params = 2; params[0] = typed_arg->type; params[1] = XtName(widget); XtAppWarningMsg(XtWidgetToApplicationContext(widget), "insufficientSpace", XtNxtGetTypedArg, XtCXtToolkitError, "Insufficient space for converted type '%s' in widget '%s'", params, &num_params); } else { String params[3]; Cardinal num_params = 3; params[0] = from_type; params[1] = typed_arg->type; params[2] = XtName(widget); XtAppWarningMsg(XtWidgetToApplicationContext(widget), "conversionFailed", XtNxtGetTypedArg, XtCXtToolkitError, "Type conversion (%s to %s) failed for widget '%s'", params, &num_params); } } DEALLOCATE_LOCAL(value); } static int GetNestedArg( Widget widget, XtTypedArgList avlist, ArgList args, XtResourceList resources, Cardinal num_resources) { int count = 0; for (; avlist->name != NULL; avlist++) { if (avlist->type != NULL) { GetTypedArg(widget, avlist, resources, num_resources); } else if(strcmp(avlist->name, XtVaNestedList) == 0) { count += GetNestedArg(widget, (XtTypedArgList)avlist->value, args, resources, num_resources); } else { (args+count)->name = avlist->name; (args+count)->value = avlist->value; ++count; } } return(count); } void XtVaGetValues(Widget widget, ...) { va_list var; String attr; ArgList args; XtTypedArg typed_arg; XtResourceList resources = (XtResourceList)NULL; Cardinal num_resources; int count, total_count, typed_count; WIDGET_TO_APPCON(widget); LOCK_APP(app); va_start(var,widget); _XtCountVaList(var, &total_count, &typed_count); if (total_count != typed_count) { args = (ArgList)__XtMalloc((unsigned)((total_count - typed_count) * sizeof(Arg))); } else args = NULL; /* for lint; really unused */ va_end(var); va_start(var,widget); for(attr = va_arg(var, String), count = 0 ; attr != NULL; attr = va_arg(var, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { typed_arg.name = va_arg(var, String); typed_arg.type = va_arg(var, String); typed_arg.value = va_arg(var, XtArgVal); typed_arg.size = va_arg(var, int); if (resources == NULL) { XtGetResourceList(XtClass(widget), &resources,&num_resources); } GetTypedArg(widget, &typed_arg, resources, num_resources); } else if (strcmp(attr, XtVaNestedList) == 0) { if (resources == NULL) { XtGetResourceList(XtClass(widget),&resources, &num_resources); } count += GetNestedArg(widget, va_arg(var, XtTypedArgList), (args+count), resources, num_resources); } else { args[count].name = attr; args[count].value = va_arg(var, XtArgVal); count ++; } } va_end(var); if (resources != (XtResourceList)NULL) { XtFree((XtPointer)resources); } if (total_count != typed_count) { XtGetValues(widget, args, count); XtFree((XtPointer)args); } UNLOCK_APP(app); } void XtVaGetSubvalues(XtPointer base,XtResourceList resources, Cardinal num_resources, ...) { va_list var; ArgList args; Cardinal num_args; int total_count, typed_count; va_start(var,num_resources); _XtCountVaList(var, &total_count, &typed_count); if (typed_count != 0) { XtWarning("XtVaTypedArg is an invalid argument to XtVaGetSubvalues()\n"); } va_end(var); va_start(var,num_resources); _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args); va_end(var); XtGetSubvalues(base, resources, num_resources, args, num_args); if (num_args != 0) { XtFree((XtPointer)args); } } ing conditions: ThlibXt-1.1.5/src/TMprint.c000064401431060000012000000612051252061032400154100ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /*LINTLIBRARY*/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include typedef struct _TMStringBufRec{ String start; String current; Cardinal max; }TMStringBufRec, *TMStringBuf; #define STR_THRESHOLD 25 #define STR_INCAMOUNT 100 #define CHECK_STR_OVERFLOW(sb) \ if (sb->current - sb->start > (int)sb->max - STR_THRESHOLD) \ { String old = sb->start; \ sb->start = XtRealloc(old, (Cardinal)(sb->max += STR_INCAMOUNT)); \ sb->current = sb->current - old + sb->start; \ } #define ExpandForChars(sb, nchars ) \ if ((unsigned)(sb->current - sb->start) > sb->max - STR_THRESHOLD - nchars) { \ String old = sb->start; \ sb->start = XtRealloc(old, \ (Cardinal)(sb->max += STR_INCAMOUNT + nchars)); \ sb->current = sb->current - old + sb->start; \ } #define ExpandToFit(sb, more) \ { \ size_t l = strlen(more); \ ExpandForChars(sb, l); \ } static void PrintModifiers( TMStringBuf sb, unsigned long mask, unsigned long mod) { Boolean notfirst = False; CHECK_STR_OVERFLOW(sb); if (mask == ~0UL && mod == 0) { *sb->current++ = '!'; *sb->current = '\0'; return; } #define PRINTMOD(modmask,modstring) \ if (mask & modmask) { \ if (! (mod & modmask)) { \ *sb->current++ = '~'; \ notfirst = True; \ } \ else if (notfirst) \ *sb->current++ = ' '; \ else notfirst = True; \ strcpy(sb->current, modstring); \ sb->current += strlen(sb->current); \ } PRINTMOD(ShiftMask, "Shift"); PRINTMOD(ControlMask, "Ctrl"); /* name is not CtrlMask... */ PRINTMOD(LockMask, "Lock"); PRINTMOD(Mod1Mask, "Mod1"); CHECK_STR_OVERFLOW(sb); PRINTMOD(Mod2Mask, "Mod2"); PRINTMOD(Mod3Mask, "Mod3"); PRINTMOD(Mod4Mask, "Mod4"); PRINTMOD(Mod5Mask, "Mod5"); CHECK_STR_OVERFLOW(sb); PRINTMOD(Button1Mask, "Button1"); PRINTMOD(Button2Mask, "Button2"); PRINTMOD(Button3Mask, "Button3"); CHECK_STR_OVERFLOW(sb); PRINTMOD(Button4Mask, "Button4"); PRINTMOD(Button5Mask, "Button5"); #undef PRINTMOD } static void PrintEventType( TMStringBuf sb, unsigned long event) { CHECK_STR_OVERFLOW(sb); switch (event) { #define PRINTEVENT(event, name) case event: (void) strcpy(sb->current, name); break; PRINTEVENT(KeyPress, "") PRINTEVENT(KeyRelease, "") PRINTEVENT(ButtonPress, "") PRINTEVENT(ButtonRelease, "") PRINTEVENT(MotionNotify, "") PRINTEVENT(EnterNotify, "") PRINTEVENT(LeaveNotify, "") PRINTEVENT(FocusIn, "") PRINTEVENT(FocusOut, "") PRINTEVENT(KeymapNotify, "") PRINTEVENT(Expose, "") PRINTEVENT(GraphicsExpose, "") PRINTEVENT(NoExpose, "") PRINTEVENT(VisibilityNotify, "") PRINTEVENT(CreateNotify, "") PRINTEVENT(DestroyNotify, "") PRINTEVENT(UnmapNotify, "") PRINTEVENT(MapNotify, "") PRINTEVENT(MapRequest, "") PRINTEVENT(ReparentNotify, "") PRINTEVENT(ConfigureNotify, "") PRINTEVENT(ConfigureRequest, "") PRINTEVENT(GravityNotify, "") PRINTEVENT(ResizeRequest, "") PRINTEVENT(CirculateNotify, "") PRINTEVENT(CirculateRequest, "") PRINTEVENT(PropertyNotify, "") PRINTEVENT(SelectionClear, "") PRINTEVENT(SelectionRequest, "") PRINTEVENT(SelectionNotify, "") PRINTEVENT(ColormapNotify, "") PRINTEVENT(ClientMessage, "") case _XtEventTimerEventType: (void) strcpy(sb->current,""); break; default: (void) sprintf(sb->current, "<0x%x>", (int) event); #undef PRINTEVENT } sb->current += strlen(sb->current); } static void PrintCode( TMStringBuf sb, unsigned long mask, unsigned long code) { CHECK_STR_OVERFLOW(sb); if (mask != 0) { if (mask != ~0UL) (void) sprintf(sb->current, "0x%lx:0x%lx", mask, code); else (void) sprintf(sb->current, /*"0x%lx"*/ "%d", (unsigned)code); sb->current += strlen(sb->current); } } static void PrintKeysym( TMStringBuf sb, KeySym keysym) { String keysymName; if (keysym == 0) return; CHECK_STR_OVERFLOW(sb); keysymName = XKeysymToString(keysym); if (keysymName == NULL) PrintCode(sb,~0UL,(unsigned long)keysym); else { ExpandToFit(sb, keysymName); strcpy(sb->current, keysymName); sb->current += strlen(sb->current); } } static void PrintAtom( TMStringBuf sb, Display *dpy, Atom atom) { String atomName; if (atom == 0) return; atomName = (dpy ? XGetAtomName(dpy, atom) : NULL); if (! atomName) PrintCode(sb,~0UL,(unsigned long)atom); else { ExpandToFit( sb, atomName ); strcpy(sb->current, atomName); sb->current += strlen(sb->current); XFree(atomName); } } static void PrintLateModifiers( TMStringBuf sb, LateBindingsPtr lateModifiers) { for (; lateModifiers->keysym; lateModifiers++) { CHECK_STR_OVERFLOW(sb); if (lateModifiers->knot) { *sb->current++ = '~'; } else { *sb->current++ = ' '; } strcpy(sb->current, XKeysymToString(lateModifiers->keysym)); sb->current += strlen(sb->current); if (lateModifiers->pair) { *(sb->current -= 2) = '\0'; /* strip "_L" */ lateModifiers++; /* skip _R keysym */ } } } static void PrintEvent( TMStringBuf sb, register TMTypeMatch typeMatch, register TMModifierMatch modMatch, Display *dpy) { if (modMatch->standard) *sb->current++ = ':'; PrintModifiers(sb, modMatch->modifierMask, modMatch->modifiers); if (modMatch->lateModifiers != NULL) PrintLateModifiers(sb, modMatch->lateModifiers); PrintEventType(sb, typeMatch->eventType); switch (typeMatch->eventType) { case KeyPress: case KeyRelease: PrintKeysym(sb, (KeySym)typeMatch->eventCode); break; case PropertyNotify: case SelectionClear: case SelectionRequest: case SelectionNotify: case ClientMessage: PrintAtom(sb, dpy, (Atom)typeMatch->eventCode); break; default: PrintCode(sb, typeMatch->eventCodeMask, typeMatch->eventCode); } } static void PrintParams( TMStringBuf sb, String *params, Cardinal num_params) { register Cardinal i; for (i = 0; icurrent++ = ','; *sb->current++ = ' '; } *sb->current++ = '"'; strcpy(sb->current, params[i]); sb->current += strlen(sb->current); *sb->current++ = '"'; } *sb->current = '\0'; } static void PrintActions( TMStringBuf sb, register ActionPtr actions, XrmQuark *quarkTbl, Widget accelWidget) { while (actions != NULL) { String proc; *sb->current++ = ' '; if (accelWidget) { /* accelerator */ String name = XtName(accelWidget); int nameLen = strlen(name); ExpandForChars(sb, nameLen ); XtMemmove(sb->current, name, nameLen ); sb->current += nameLen; *sb->current++ = '`'; } proc = XrmQuarkToString(quarkTbl[actions->idx]); ExpandToFit( sb, proc ); strcpy(sb->current, proc); sb->current += strlen(proc); *sb->current++ = '('; PrintParams(sb, actions->params, actions->num_params); *sb->current++ = ')'; actions = actions->next; } *sb->current = '\0'; } static Boolean LookAheadForCycleOrMulticlick( register StatePtr state, StatePtr *state_return, /* state to print, usually startState */ int *countP, StatePtr *nextLevelP) { int repeatCount = 0; StatePtr startState = state; Boolean isCycle = startState->isCycleEnd; TMTypeMatch sTypeMatch; TMModifierMatch sModMatch; LOCK_PROCESS; sTypeMatch = TMGetTypeMatch(startState->typeIndex); sModMatch = TMGetModifierMatch(startState->modIndex); *state_return = startState; for (state = state->nextLevel; state != NULL; state = state->nextLevel) { TMTypeMatch typeMatch = TMGetTypeMatch(state->typeIndex); TMModifierMatch modMatch = TMGetModifierMatch(state->modIndex); /* try to pick up the correct state with actions, to be printed */ /* This is to accommodate (2+), for example */ if (state->isCycleStart) *state_return = state; if (state->isCycleEnd) { *countP = repeatCount; UNLOCK_PROCESS; return True; } if ((startState->typeIndex == state->typeIndex) && (startState->modIndex == state->modIndex)) { repeatCount++; *nextLevelP = state; } else if (typeMatch->eventType == _XtEventTimerEventType) continue; else /* not same event as starting event and not timer */ { unsigned int type = sTypeMatch->eventType; unsigned int t = typeMatch->eventType; if ( (type == ButtonPress && t != ButtonRelease) || (type == ButtonRelease && t != ButtonPress) || (type == KeyPress && t != KeyRelease) || (type == KeyRelease && t != KeyPress) || typeMatch->eventCode != sTypeMatch->eventCode || modMatch->modifiers != sModMatch->modifiers || modMatch->modifierMask != sModMatch->modifierMask || modMatch->lateModifiers != sModMatch->lateModifiers || typeMatch->eventCodeMask != sTypeMatch->eventCodeMask || typeMatch->matchEvent != sTypeMatch->matchEvent || modMatch->standard != sModMatch->standard) /* not inverse of starting event, either */ break; } } *countP = repeatCount; UNLOCK_PROCESS; return isCycle; } static void PrintComplexState( TMStringBuf sb, Boolean includeRHS, StatePtr state, TMStateTree stateTree, Widget accelWidget, Display *dpy) { int clickCount = 0; Boolean cycle; StatePtr nextLevel = NULL; StatePtr triggerState = NULL; /* print the current state */ if (! state) return; LOCK_PROCESS; cycle = LookAheadForCycleOrMulticlick(state, &triggerState, &clickCount, &nextLevel); PrintEvent(sb, TMGetTypeMatch(triggerState->typeIndex), TMGetModifierMatch(triggerState->modIndex), dpy); if (cycle || clickCount) { if (clickCount) sprintf(sb->current, "(%d%s)", clickCount+1, cycle ? "+" : ""); else (void) strncpy(sb->current, "(+)", 4); sb->current += strlen(sb->current); if (! state->actions && nextLevel) state = nextLevel; while (! state->actions && ! state->isCycleEnd) state = state->nextLevel; /* should be trigger state */ } if (state->actions) { if (includeRHS) { CHECK_STR_OVERFLOW(sb); *sb->current++ = ':'; PrintActions(sb, state->actions, ((TMSimpleStateTree)stateTree)->quarkTbl, accelWidget); *sb->current++ = '\n'; } } else { if (state->nextLevel && !cycle && !clickCount) *sb->current++ = ','; else { /* no actions are attached to this production */ *sb->current++ = ':'; *sb->current++ = '\n'; } } *sb->current = '\0'; /* print succeeding states */ if (state->nextLevel && !cycle && !clickCount) PrintComplexState(sb, includeRHS, state->nextLevel, stateTree, accelWidget, dpy); UNLOCK_PROCESS; } typedef struct{ TMShortCard tIndex; TMShortCard bIndex; }PrintRec, *Print; static int FindNextMatch( PrintRec *printData, TMShortCard numPrints, XtTranslations xlations, TMBranchHead branchHead, StatePtr nextLevel, TMShortCard startIndex) { TMShortCard i; TMComplexStateTree stateTree; StatePtr currState, candState; Boolean noMatch = True; TMBranchHead prBranchHead; for (i = startIndex; noMatch && i < numPrints; i++) { stateTree = (TMComplexStateTree) xlations->stateTreeTbl[printData[i].tIndex]; prBranchHead = &(stateTree->branchHeadTbl[printData[i].bIndex]); if ((prBranchHead->typeIndex == branchHead->typeIndex) && (prBranchHead->modIndex == branchHead->modIndex)) { if (prBranchHead->isSimple) { if (!nextLevel) return i; } else { currState = TMComplexBranchHead(stateTree, prBranchHead); currState = currState->nextLevel; candState = nextLevel; for (; ((currState && !currState->isCycleEnd) && (candState && !candState->isCycleEnd)); currState = currState->nextLevel, candState = candState->nextLevel) { if ((currState->typeIndex != candState->typeIndex) || (currState->modIndex != candState->modIndex)) break; } if (candState == currState) { return i; } } } } return TM_NO_MATCH; } static void ProcessLaterMatches( PrintRec *printData, XtTranslations xlations, TMShortCard tIndex, int bIndex, TMShortCard *numPrintsRtn) { TMComplexStateTree stateTree; int i, j; TMBranchHead branchHead, matchBranch = NULL; for (i = tIndex; i < (int)xlations->numStateTrees; i++) { stateTree = (TMComplexStateTree)xlations->stateTreeTbl[i]; if (i == tIndex) { matchBranch = &stateTree->branchHeadTbl[bIndex]; j = bIndex+1; } else j = 0; for (branchHead = &stateTree->branchHeadTbl[j]; j < (int)stateTree->numBranchHeads; j++, branchHead++) { if ((branchHead->typeIndex == matchBranch->typeIndex) && (branchHead->modIndex == matchBranch->modIndex)) { StatePtr state; if (!branchHead->isSimple) state = TMComplexBranchHead(stateTree, branchHead); else state = NULL; if ((!branchHead->isSimple || branchHead->hasActions) && (FindNextMatch(printData, *numPrintsRtn, xlations, branchHead, (state ? state->nextLevel : NULL), 0) == TM_NO_MATCH)) { printData[*numPrintsRtn].tIndex = i; printData[*numPrintsRtn].bIndex = j; (*numPrintsRtn)++; } } } } } static void ProcessStateTree( PrintRec *printData, XtTranslations xlations, TMShortCard tIndex, TMShortCard *numPrintsRtn) { TMComplexStateTree stateTree; int i; TMBranchHead branchHead; stateTree = (TMComplexStateTree)xlations->stateTreeTbl[tIndex]; for (i = 0, branchHead = stateTree->branchHeadTbl; i < (int)stateTree->numBranchHeads; i++, branchHead++) { StatePtr state; if (!branchHead->isSimple) state = TMComplexBranchHead(stateTree, branchHead); else state = NULL; if (FindNextMatch(printData, *numPrintsRtn, xlations, branchHead, (state ? state->nextLevel : NULL), 0) == TM_NO_MATCH) { if (!branchHead->isSimple || branchHead->hasActions) { printData[*numPrintsRtn].tIndex = tIndex; printData[*numPrintsRtn].bIndex = i; (*numPrintsRtn)++; } LOCK_PROCESS; if (_XtGlobalTM.newMatchSemantics == False) ProcessLaterMatches(printData, xlations, tIndex, i, numPrintsRtn); UNLOCK_PROCESS; } } } static void PrintState( TMStringBuf sb, TMStateTree tree, TMBranchHead branchHead, Boolean includeRHS, Widget accelWidget, Display *dpy) { TMComplexStateTree stateTree = (TMComplexStateTree)tree; LOCK_PROCESS; if (branchHead->isSimple) { PrintEvent(sb, TMGetTypeMatch(branchHead->typeIndex), TMGetModifierMatch(branchHead->modIndex), dpy); if (includeRHS) { ActionRec actRec; CHECK_STR_OVERFLOW(sb); *sb->current++ = ':'; actRec.idx = TMBranchMore(branchHead); actRec.num_params = 0; actRec.params = NULL; actRec.next = NULL; PrintActions(sb, &actRec, stateTree->quarkTbl, accelWidget); *sb->current++ = '\n'; } else *sb->current++ = ','; #ifdef TRACE_TM if (!branchHead->hasActions) printf(" !! no actions !! "); #endif } else { /* it's a complex branchHead */ StatePtr state = TMComplexBranchHead(stateTree, branchHead); PrintComplexState(sb, includeRHS, state, tree, accelWidget, (Display *)NULL); } *sb->current = '\0'; UNLOCK_PROCESS; } String _XtPrintXlations( Widget w, XtTranslations xlations, Widget accelWidget, _XtBoolean includeRHS) { register Cardinal i; #define STACKPRINTSIZE 250 PrintRec stackPrints[STACKPRINTSIZE]; PrintRec *prints; TMStringBufRec sbRec, *sb = &sbRec; TMShortCard numPrints, maxPrints; #ifdef TRACE_TM TMBindData bindData = (TMBindData)w->core.tm.proc_table; Boolean hasAccel = (accelWidget ? True : False); #endif /* TRACE_TM */ if (xlations == NULL) return NULL; sb->current = sb->start = __XtMalloc((Cardinal)1000); sb->max = 1000; maxPrints = 0; for (i = 0; i < xlations->numStateTrees; i++) maxPrints += ((TMSimpleStateTree)(xlations->stateTreeTbl[i]))->numBranchHeads; prints = (PrintRec *) XtStackAlloc(maxPrints * sizeof(PrintRec), stackPrints); numPrints = 0; for (i = 0; i < xlations->numStateTrees; i++) ProcessStateTree(prints, xlations, i, &numPrints); for (i = 0; i < numPrints; i++) { TMSimpleStateTree stateTree = (TMSimpleStateTree) xlations->stateTreeTbl[prints[i].tIndex]; TMBranchHead branchHead = &stateTree->branchHeadTbl[prints[i].bIndex]; #ifdef TRACE_TM TMComplexBindProcs complexBindProcs; if (hasAccel == False) { accelWidget = NULL; if (bindData->simple.isComplex) { complexBindProcs = TMGetComplexBindEntry(bindData, 0); accelWidget = complexBindProcs[prints[i].tIndex].widget; } } #endif /* TRACE_TM */ PrintState(sb, (TMStateTree)stateTree, branchHead, includeRHS, accelWidget, XtDisplay(w)); } XtStackFree((XtPointer)prints, (XtPointer)stackPrints); return (sb->start); } #ifndef NO_MIT_HACKS /*ARGSUSED*/ void _XtDisplayTranslations( Widget widget, XEvent *event, String *params, Cardinal *num_params) { String xString; xString = _XtPrintXlations(widget, widget->core.tm.translations, NULL, True); if (xString) { printf("%s\n",xString); XtFree(xString); } } /*ARGSUSED*/ void _XtDisplayAccelerators( Widget widget, XEvent *event, String *params, Cardinal *num_params) { String xString; xString = _XtPrintXlations(widget, widget->core.accelerators, NULL, True); if (xString) { printf("%s\n",xString); XtFree(xString); } } /*ARGSUSED*/ void _XtDisplayInstalledAccelerators( Widget widget, XEvent *event, String *params, Cardinal *num_params) { Widget eventWidget = XtWindowToWidget(event->xany.display, event->xany.window); register Cardinal i; TMStringBufRec sbRec, *sb = &sbRec; XtTranslations xlations; #define STACKPRINTSIZE 250 PrintRec stackPrints[STACKPRINTSIZE]; PrintRec *prints; TMShortCard numPrints, maxPrints; TMBindData bindData ; TMComplexBindProcs complexBindProcs; if ((eventWidget == NULL) || (eventWidget->core.tm.translations == NULL) ) return; xlations = eventWidget->core.tm.translations; bindData = (TMBindData) eventWidget->core.tm.proc_table; if (bindData->simple.isComplex == False) return; sb->current = sb->start = __XtMalloc((Cardinal)1000); sb->start[0] = '\0'; sb->max = 1000; maxPrints = 0; for (i = 0; i < xlations->numStateTrees; i++) maxPrints += ((TMSimpleStateTree)xlations->stateTreeTbl[i])->numBranchHeads; prints = (PrintRec *) XtStackAlloc(maxPrints * sizeof(PrintRec), stackPrints); numPrints = 0; complexBindProcs = TMGetComplexBindEntry(bindData, 0); for (i = 0; i < xlations->numStateTrees; i++, complexBindProcs++) { if (complexBindProcs->widget) { ProcessStateTree(prints, xlations, i, &numPrints); } } for (i = 0; i < numPrints; i++) { TMSimpleStateTree stateTree = (TMSimpleStateTree) xlations->stateTreeTbl[prints[i].tIndex]; TMBranchHead branchHead = &stateTree->branchHeadTbl[prints[i].bIndex]; complexBindProcs = TMGetComplexBindEntry(bindData, 0); PrintState(sb, (TMStateTree)stateTree, branchHead, True, complexBindProcs[prints[i].tIndex].widget, XtDisplay(widget)); } XtStackFree((XtPointer)prints, (XtPointer)stackPrints); printf("%s\n", sb->start); XtFree(sb->start); } #endif /*NO_MIT_HACKS*/ String _XtPrintActions( register ActionRec *actions, XrmQuark *quarkTbl) { TMStringBufRec sbRec, *sb = &sbRec; sb->max = 1000; sb->current = sb->start = __XtMalloc((Cardinal)1000); PrintActions(sb, actions, quarkTbl, (Widget)NULL); return sb->start; } String _XtPrintState( TMStateTree stateTree, TMBranchHead branchHead) { TMStringBufRec sbRec, *sb = &sbRec; sb->current = sb->start = __XtMalloc((Cardinal)1000); sb->max = 1000; PrintState(sb, stateTree, branchHead, True, (Widget)NULL, (Display *)NULL); return sb->start; } String _XtPrintEventSeq( register EventSeqPtr eventSeq, Display *dpy) { TMStringBufRec sbRec, *sb = &sbRec; TMTypeMatch typeMatch; TMModifierMatch modMatch; #define MAXSEQS 100 EventSeqPtr eventSeqs[MAXSEQS]; TMShortCard i, j; Boolean cycle = False; sb->current = sb->start = __XtMalloc((Cardinal)1000); sb->max = 1000; for (i = 0; i < MAXSEQS && eventSeq != NULL && !cycle; eventSeq = eventSeq->next, i++) { eventSeqs[i] = eventSeq; for (j = 0; j < i && !cycle; j++) if (eventSeqs[j] == eventSeq) cycle = True; } LOCK_PROCESS; for (j = 0; j < i; j++) { typeMatch = TMGetTypeMatch(_XtGetTypeIndex(&eventSeqs[j]->event)); modMatch = TMGetModifierMatch(_XtGetModifierIndex(&eventSeqs[j]->event)); PrintEvent(sb, typeMatch, modMatch, dpy); if (j < i) *sb->current++ = ','; } UNLOCK_PROCESS; return sb->start; } ) { TMShortCard i; TMComplexStateTree stateTree; StatePtr currState, candState; Boolean noMatch = True; TMBranchHead prBranchHead; for (i = startIndex; noMatch && i < numPrints; i++) { stateTree = (TMComplexStateTree) xlations->stateTreeTbl[printData[i].tIndex]; prBranchHead = &(stateTree->branchHeadTbl[printData[i].bIndex]); if ((prBranclibXt-1.1.5/src/Converters.c000064401431060000012000001564551252061032400161610ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /*LINTLIBRARY*/ /* Conversion.c - implementations of resource type conversion procs */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "Shell.h" #include #include #include #include #include /* for StringToDirectoryString */ #define IsNewline(str) ((str) == '\n') #define IsWhitespace(str) ((str)== ' ' || (str) == '\t') static const String XtNwrongParameters = "wrongParameters"; static const String XtNconversionError = "conversionError"; static const String XtNmissingCharsetList = "missingCharsetList"; /* Representation types */ #define XtQAtom XrmPermStringToQuark(XtRAtom) #define XtQCommandArgArray XrmPermStringToQuark(XtRCommandArgArray) #define XtQCursor XrmPermStringToQuark(XtRCursor) #define XtQDirectoryString XrmPermStringToQuark(XtRDirectoryString) #define XtQDisplay XrmPermStringToQuark(XtRDisplay) #define XtQFile XrmPermStringToQuark(XtRFile) #define XtQFloat XrmPermStringToQuark(XtRFloat) #define XtQInitialState XrmPermStringToQuark(XtRInitialState) #define XtQPixmap XrmPermStringToQuark(XtRPixmap) #define XtQRestartStyle XrmPermStringToQuark(XtRRestartStyle) #define XtQShort XrmPermStringToQuark(XtRShort) #define XtQUnsignedChar XrmPermStringToQuark(XtRUnsignedChar) #define XtQVisual XrmPermStringToQuark(XtRVisual) static XrmQuark XtQBool; static XrmQuark XtQBoolean; static XrmQuark XtQColor; static XrmQuark XtQDimension; static XrmQuark XtQFont; static XrmQuark XtQFontSet; static XrmQuark XtQFontStruct; static XrmQuark XtQGravity; static XrmQuark XtQInt; static XrmQuark XtQPixel; static XrmQuark XtQPosition; XrmQuark _XtQString; void _XtConvertInitialize(void) { XtQBool = XrmPermStringToQuark(XtRBool); XtQBoolean = XrmPermStringToQuark(XtRBoolean); XtQColor = XrmPermStringToQuark(XtRColor); XtQDimension = XrmPermStringToQuark(XtRDimension); XtQFont = XrmPermStringToQuark(XtRFont); XtQFontSet = XrmPermStringToQuark(XtRFontSet); XtQFontStruct = XrmPermStringToQuark(XtRFontStruct); XtQGravity = XrmPermStringToQuark(XtRGravity); XtQInt = XrmPermStringToQuark(XtRInt); XtQPixel = XrmPermStringToQuark(XtRPixel); XtQPosition = XrmPermStringToQuark(XtRPosition); _XtQString = XrmPermStringToQuark(XtRString); } #define donestr(type, value, tstr) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ toVal->size = sizeof(type); \ XtDisplayStringConversionWarning(dpy, \ (char*) fromVal->addr, tstr); \ return False; \ } \ *(type*)(toVal->addr) = (value); \ } \ else { \ static type static_val; \ static_val = (value); \ toVal->addr = (XPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } #define done(type, value) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ toVal->size = sizeof(type); \ return False; \ } \ *(type*)(toVal->addr) = (value); \ } \ else { \ static type static_val; \ static_val = (value); \ toVal->addr = (XPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } void XtDisplayStringConversionWarning( Display* dpy, _Xconst char* from, _Xconst char* toType ) { #ifndef NO_MIT_HACKS /* Allow suppression of conversion warnings. %%% Not specified. */ static enum {Check, Report, Ignore} report_it = Check; XtAppContext app = XtDisplayToApplicationContext(dpy); LOCK_APP(app); LOCK_PROCESS; if (report_it == Check) { XrmDatabase rdb = XtDatabase(dpy); XrmName xrm_name[2]; XrmClass xrm_class[2]; XrmRepresentation rep_type; XrmValue value; xrm_name[0] = XrmPermStringToQuark( "stringConversionWarnings" ); xrm_name[1] = 0; xrm_class[0] = XrmPermStringToQuark( "StringConversionWarnings" ); xrm_class[1] = 0; if (XrmQGetResource( rdb, xrm_name, xrm_class, &rep_type, &value )) { if (rep_type == XtQBoolean) report_it = *(Boolean*)value.addr ? Report : Ignore; else if (rep_type == _XtQString) { XrmValue toVal; Boolean report; toVal.addr = (XPointer)&report; toVal.size = sizeof(Boolean); if (XtCallConverter(dpy, XtCvtStringToBoolean, (XrmValuePtr)NULL, (Cardinal)0, &value, &toVal, (XtCacheRef*)NULL)) report_it = report ? Report : Ignore; } else report_it = Report; } else report_it = Report; } if (report_it == Report) { #endif /* ifndef NO_MIT_HACKS */ String params[2]; Cardinal num_params = 2; params[0] = (String)from; params[1] = (String)toType; XtAppWarningMsg(app, XtNconversionError,"string",XtCXtToolkitError, "Cannot convert string \"%s\" to type %s", params,&num_params); #ifndef NO_MIT_HACKS } #endif /* ifndef NO_MIT_HACKS */ UNLOCK_PROCESS; UNLOCK_APP(app); } void XtStringConversionWarning( _Xconst char* from, _Xconst char* toType ) { String params[2]; Cardinal num_params = 2; params[0] = (String)from; params[1] = (String)toType; XtWarningMsg(XtNconversionError,"string",XtCXtToolkitError, "Cannot convert string \"%s\" to type %s", params,&num_params); } static int CompareISOLatin1(const char *, const char *); static Boolean IsInteger( String string, int *value) { Boolean foundDigit = False; Boolean isNegative = False; Boolean isPositive = False; int val = 0; char ch; /* skip leading whitespace */ while ((ch = *string) == ' ' || ch == '\t') string++; while ((ch = *string++)) { if (ch >= '0' && ch <= '9') { val *= 10; val += ch - '0'; foundDigit = True; continue; } if (IsWhitespace(ch)) { if (!foundDigit) return False; /* make sure only trailing whitespace */ while ((ch = *string++)) { if (!IsWhitespace(ch)) return False; } break; } if (ch == '-' && !foundDigit && !isNegative && !isPositive) { isNegative = True; continue; } if (ch == '+' && !foundDigit && !isNegative && !isPositive) { isPositive = True; continue; } return False; } if (ch == '\0') { if (isNegative) *value = -val; else *value = val; return True; } return False; } /*ARGSUSED*/ Boolean XtCvtIntToBoolean( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToBoolean",XtCXtToolkitError, "Integer to Boolean conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); done(Boolean, (*(int *)fromVal->addr != 0)); } /*ARGSUSED*/ Boolean XtCvtIntToShort( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToShort",XtCXtToolkitError, "Integer to Short conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); done(short, (*(int *)fromVal->addr)); } /*ARGSUSED*/ Boolean XtCvtStringToBoolean( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str = (String)fromVal->addr; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToBoolean",XtCXtToolkitError, "String to Boolean conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); if ( (CompareISOLatin1(str, "true") == 0) || (CompareISOLatin1(str, "yes") == 0) || (CompareISOLatin1(str, "on") == 0) || (CompareISOLatin1(str, "1") == 0)) donestr( Boolean, True, XtRBoolean ); if ( (CompareISOLatin1(str, "false") == 0) || (CompareISOLatin1(str, "no") == 0) || (CompareISOLatin1(str, "off") == 0) || (CompareISOLatin1(str, "0") == 0)) donestr( Boolean, False, XtRBoolean ); XtDisplayStringConversionWarning(dpy, str, XtRBoolean); return False; } /*ARGSUSED*/ Boolean XtCvtIntToBool( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToBool",XtCXtToolkitError, "Integer to Bool conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); done(Bool, (*(int *)fromVal->addr != 0)); } /*ARGSUSED*/ Boolean XtCvtStringToBool( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str = (String)fromVal->addr; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToBool", XtCXtToolkitError, "String to Bool conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); if ( (CompareISOLatin1(str, "true") == 0) || (CompareISOLatin1(str, "yes") == 0) || (CompareISOLatin1(str, "on") == 0) || (CompareISOLatin1(str, "1") == 0)) donestr( Bool, True, XtRBool ); if ( (CompareISOLatin1(str, "false") == 0) || (CompareISOLatin1(str, "no") == 0) || (CompareISOLatin1(str, "off") == 0) || (CompareISOLatin1(str, "0") == 0)) donestr( Bool, False, XtRBool ); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRBool); return False; } XtConvertArgRec const colorConvertArgs[] = { {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen), sizeof(Screen *)}, {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.colormap), sizeof(Colormap)} }; /* ARGSUSED */ Boolean XtCvtIntToColor( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { XColor c; Screen *screen; Colormap colormap; if (*num_args != 2) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntOrPixelToXColor",XtCXtToolkitError, "Pixel to color conversion needs screen and colormap arguments", (String *)NULL, (Cardinal *)NULL); return False; } screen = *((Screen **) args[0].addr); colormap = *((Colormap *) args[1].addr); c.pixel = *(int *)fromVal->addr; XQueryColor(DisplayOfScreen(screen), colormap, &c); done(XColor, c); } Boolean XtCvtStringToPixel( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str = (String)fromVal->addr; XColor screenColor; XColor exactColor; Screen *screen; XtPerDisplay pd = _XtGetPerDisplay(dpy); Colormap colormap; Status status; String params[1]; Cardinal num_params=1; if (*num_args != 2) { XtAppWarningMsg(pd->appContext, XtNwrongParameters, "cvtStringToPixel", XtCXtToolkitError, "String to pixel conversion needs screen and colormap arguments", (String *)NULL, (Cardinal *)NULL); return False; } screen = *((Screen **) args[0].addr); colormap = *((Colormap *) args[1].addr); if (CompareISOLatin1(str, XtDefaultBackground) == 0) { *closure_ret = NULL; if (pd->rv) donestr(Pixel, BlackPixelOfScreen(screen), XtRPixel) else donestr(Pixel, WhitePixelOfScreen(screen), XtRPixel); } if (CompareISOLatin1(str, XtDefaultForeground) == 0) { *closure_ret = NULL; if (pd->rv) donestr(Pixel, WhitePixelOfScreen(screen), XtRPixel) else donestr(Pixel, BlackPixelOfScreen(screen), XtRPixel); } status = XAllocNamedColor(DisplayOfScreen(screen), colormap, (char*)str, &screenColor, &exactColor); if (status == 0) { String msg, type; params[0] = str; /* Server returns a specific error code but Xlib discards it. Ugh */ if (XLookupColor(DisplayOfScreen(screen), colormap, (char*)str, &exactColor, &screenColor)) { type = "noColormap"; msg = "Cannot allocate colormap entry for \"%s\""; } else { type = "badValue"; msg = "Color name \"%s\" is not defined"; } XtAppWarningMsg(pd->appContext, type, "cvtStringToPixel", XtCXtToolkitError, msg, params, &num_params); *closure_ret = NULL; return False; } else { *closure_ret = (char*)True; donestr(Pixel, screenColor.pixel, XtRPixel); } } /* ARGSUSED */ static void FreePixel( XtAppContext app, XrmValuePtr toVal, XtPointer closure, XrmValuePtr args, Cardinal *num_args) { Screen *screen; Colormap colormap; if (*num_args != 2) { XtAppWarningMsg(app, XtNwrongParameters,"freePixel",XtCXtToolkitError, "Freeing a pixel requires screen and colormap arguments", (String *)NULL, (Cardinal *)NULL); return; } screen = *((Screen **) args[0].addr); colormap = *((Colormap *) args[1].addr); if (closure) { XFreeColors( DisplayOfScreen(screen), colormap, (unsigned long*)toVal->addr, 1, (unsigned long)0 ); } } /* no longer used by Xt, but it's in the spec */ XtConvertArgRec const screenConvertArg[] = { {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen), sizeof(Screen *)} }; /*ARGSUSED*/ static void FetchDisplayArg( Widget widget, Cardinal *size, XrmValue* value) { if (widget == NULL) XtErrorMsg("missingWidget", "fetchDisplayArg", XtCXtToolkitError, "FetchDisplayArg called without a widget to reference", (String*)NULL, (Cardinal*)NULL); /* can't return any useful Display and caller will de-ref NULL, so aborting is the only useful option */ value->size = sizeof(Display*); value->addr = (XPointer)&DisplayOfScreen(XtScreenOfObject(widget)); } static XtConvertArgRec const displayConvertArg[] = { {XtProcedureArg, (XtPointer)FetchDisplayArg, 0}, }; /*ARGSUSED*/ Boolean XtCvtStringToCursor( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { static const struct _CursorName { const char *name; unsigned int shape; } cursor_names[] = { {"X_cursor", XC_X_cursor}, {"arrow", XC_arrow}, {"based_arrow_down", XC_based_arrow_down}, {"based_arrow_up", XC_based_arrow_up}, {"boat", XC_boat}, {"bogosity", XC_bogosity}, {"bottom_left_corner", XC_bottom_left_corner}, {"bottom_right_corner", XC_bottom_right_corner}, {"bottom_side", XC_bottom_side}, {"bottom_tee", XC_bottom_tee}, {"box_spiral", XC_box_spiral}, {"center_ptr", XC_center_ptr}, {"circle", XC_circle}, {"clock", XC_clock}, {"coffee_mug", XC_coffee_mug}, {"cross", XC_cross}, {"cross_reverse", XC_cross_reverse}, {"crosshair", XC_crosshair}, {"diamond_cross", XC_diamond_cross}, {"dot", XC_dot}, {"dotbox", XC_dotbox}, {"double_arrow", XC_double_arrow}, {"draft_large", XC_draft_large}, {"draft_small", XC_draft_small}, {"draped_box", XC_draped_box}, {"exchange", XC_exchange}, {"fleur", XC_fleur}, {"gobbler", XC_gobbler}, {"gumby", XC_gumby}, {"hand1", XC_hand1}, {"hand2", XC_hand2}, {"heart", XC_heart}, {"icon", XC_icon}, {"iron_cross", XC_iron_cross}, {"left_ptr", XC_left_ptr}, {"left_side", XC_left_side}, {"left_tee", XC_left_tee}, {"leftbutton", XC_leftbutton}, {"ll_angle", XC_ll_angle}, {"lr_angle", XC_lr_angle}, {"man", XC_man}, {"middlebutton", XC_middlebutton}, {"mouse", XC_mouse}, {"pencil", XC_pencil}, {"pirate", XC_pirate}, {"plus", XC_plus}, {"question_arrow", XC_question_arrow}, {"right_ptr", XC_right_ptr}, {"right_side", XC_right_side}, {"right_tee", XC_right_tee}, {"rightbutton", XC_rightbutton}, {"rtl_logo", XC_rtl_logo}, {"sailboat", XC_sailboat}, {"sb_down_arrow", XC_sb_down_arrow}, {"sb_h_double_arrow", XC_sb_h_double_arrow}, {"sb_left_arrow", XC_sb_left_arrow}, {"sb_right_arrow", XC_sb_right_arrow}, {"sb_up_arrow", XC_sb_up_arrow}, {"sb_v_double_arrow", XC_sb_v_double_arrow}, {"shuttle", XC_shuttle}, {"sizing", XC_sizing}, {"spider", XC_spider}, {"spraycan", XC_spraycan}, {"star", XC_star}, {"target", XC_target}, {"tcross", XC_tcross}, {"top_left_arrow", XC_top_left_arrow}, {"top_left_corner", XC_top_left_corner}, {"top_right_corner", XC_top_right_corner}, {"top_side", XC_top_side}, {"top_tee", XC_top_tee}, {"trek", XC_trek}, {"ul_angle", XC_ul_angle}, {"umbrella", XC_umbrella}, {"ur_angle", XC_ur_angle}, {"watch", XC_watch}, {"xterm", XC_xterm}, }; const struct _CursorName *nP; char *name = (char *)fromVal->addr; register Cardinal i; if (*num_args != 1) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToCursor",XtCXtToolkitError, "String to cursor conversion needs display argument", (String *)NULL, (Cardinal *)NULL); return False; } for (i=0, nP=cursor_names; i < XtNumber(cursor_names); i++, nP++ ) { if (strcmp(name, nP->name) == 0) { Display *display = *(Display**)args[0].addr; Cursor cursor = XCreateFontCursor(display, nP->shape ); donestr(Cursor, cursor, XtRCursor); } } XtDisplayStringConversionWarning(dpy, name, XtRCursor); return False; } /* ARGSUSED */ static void FreeCursor( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, Cardinal *num_args) { Display* display; if (*num_args != 1) { XtAppWarningMsg(app, XtNwrongParameters,"freeCursor",XtCXtToolkitError, "Free Cursor requires display argument", (String *)NULL, (Cardinal *)NULL); return; } display = *(Display**)args[0].addr; XFreeCursor( display, *(Cursor*)toVal->addr ); } /*ARGSUSED*/ Boolean XtCvtStringToDisplay( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { Display *d; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToDisplay",XtCXtToolkitError, "String to Display conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); d = XOpenDisplay((char *)fromVal->addr); if (d != NULL) donestr(Display*, d, XtRDisplay); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRDisplay); return False; } /*ARGSUSED*/ Boolean XtCvtStringToFile( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { FILE *f; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToFile",XtCXtToolkitError, "String to File conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); f = fopen((char *)fromVal->addr, "r"); if (f != NULL) donestr(FILE*, f, XtRFile); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRFile); return False; } /* ARGSUSED */ static void FreeFile( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, /* unused */ Cardinal *num_args) { if (*num_args != 0) XtAppWarningMsg(app, XtNwrongParameters,"freeFile",XtCXtToolkitError, "Free File requires no extra arguments", (String *) NULL, (Cardinal *)NULL); fclose( *(FILE**)toVal->addr ); } /*ARGSUSED*/ Boolean XtCvtIntToFloat( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToFloat",XtCXtToolkitError, "Integer to Float conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); done(float, (*(int *)fromVal->addr)); } /*ARGSUSED*/ Boolean XtCvtStringToFloat( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { int ret; float f, nan; #ifndef ISC /* On ISC this generates a core dump :-( at least with gs */ /* depending on the system this may or may not do anything useful */ (void) sscanf ("NaNS", "%g", toVal->addr != NULL ? (float*) toVal->addr : &nan); #endif if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToFloat",XtCXtToolkitError, "String to Float conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); ret = sscanf (fromVal->addr, "%g", &f); if (ret == 0) { if (toVal->addr != NULL && toVal->size == sizeof nan) *(float*)toVal->addr = nan; XtDisplayStringConversionWarning (dpy, (char*) fromVal->addr, XtRFloat); return False; } donestr(float, f, XtRFloat); } /*ARGSUSED*/ Boolean XtCvtStringToFont( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { Font f; Display* display; if (*num_args != 1) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToFont",XtCXtToolkitError, "String to font conversion needs display argument", (String *) NULL, (Cardinal *)NULL); return False; } display = *(Display**)args[0].addr; if (CompareISOLatin1((String)fromVal->addr, XtDefaultFont) != 0) { f = XLoadFont(display, (char *)fromVal->addr); if (f != 0) { Done: donestr( Font, f, XtRFont ); } XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRFont); } /* try and get the default font */ { XrmName xrm_name[2]; XrmClass xrm_class[2]; XrmRepresentation rep_type; XrmValue value; xrm_name[0] = XrmPermStringToQuark ("xtDefaultFont"); xrm_name[1] = 0; xrm_class[0] = XrmPermStringToQuark ("XtDefaultFont"); xrm_class[1] = 0; if (XrmQGetResource(XtDatabase(display), xrm_name, xrm_class, &rep_type, &value)) { if (rep_type == _XtQString) { f = XLoadFont(display, (char *)value.addr); if (f != 0) goto Done; else XtDisplayStringConversionWarning(dpy, (char *)value.addr, XtRFont); } else if (rep_type == XtQFont) { f = *(Font*)value.addr; goto Done; } else if (rep_type == XtQFontStruct) { f = ((XFontStruct*)value.addr)->fid; goto Done; } } } /* Should really do XListFonts, but most servers support this */ f = XLoadFont(display, "-*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-*"); if (f != 0) goto Done; XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "noFont","cvtStringToFont",XtCXtToolkitError, "Unable to load any usable ISO8859 font", (String *) NULL, (Cardinal *)NULL); return False; } /* ARGSUSED */ static void FreeFont( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, Cardinal *num_args) { Display *display; if (*num_args != 1) { XtAppWarningMsg(app, XtNwrongParameters,"freeFont",XtCXtToolkitError, "Free Font needs display argument", (String *) NULL, (Cardinal *)NULL); return; } display = *(Display**)args[0].addr; XUnloadFont( display, *(Font*)toVal->addr ); } /*ARGSUSED*/ Boolean XtCvtIntToFont( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToFont",XtCXtToolkitError, "Integer to Font conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); done(Font, *(int*)fromVal->addr); } /*ARGSUSED*/ Boolean XtCvtStringToFontSet( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { XFontSet f; Display* display; char** missing_charset_list; int missing_charset_count; char* def_string; if (*num_args != 2) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToFontSet",XtCXtToolkitError, "String to FontSet conversion needs display and locale arguments", (String *) NULL, (Cardinal *)NULL); return False; } display = *(Display**)args[0].addr; if (CompareISOLatin1((String)fromVal->addr, XtDefaultFontSet) != 0) { f = XCreateFontSet(display, (char *)fromVal->addr, &missing_charset_list, &missing_charset_count, &def_string); /* Free any returned missing charset list */ if (missing_charset_count) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNmissingCharsetList,"cvtStringToFontSet",XtCXtToolkitError, "Missing charsets in String to FontSet conversion", (String *) NULL, (Cardinal *)NULL); XFreeStringList(missing_charset_list); } if (f != NULL) { Done: donestr( XFontSet, f, XtRFontSet ); } XtDisplayStringConversionWarning(dpy, (char *)fromVal->addr, XtRFontSet); } /* try and get the default fontset */ { XrmName xrm_name[2]; XrmClass xrm_class[2]; XrmRepresentation rep_type; XrmValue value; xrm_name[0] = XrmPermStringToQuark ("xtDefaultFontSet"); xrm_name[1] = 0; xrm_class[0] = XrmPermStringToQuark ("XtDefaultFontSet"); xrm_class[1] = 0; if (XrmQGetResource(XtDatabase(display), xrm_name, xrm_class, &rep_type, &value)) { if (rep_type == _XtQString) { f = XCreateFontSet(display, (char *)value.addr, &missing_charset_list, &missing_charset_count, &def_string); /* Free any returned missing charset list */ if (missing_charset_count) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNmissingCharsetList,"cvtStringToFontSet", XtCXtToolkitError, "Missing charsets in String to FontSet conversion", (String *) NULL, (Cardinal *)NULL); XFreeStringList(missing_charset_list); } if (f != NULL) goto Done; else XtDisplayStringConversionWarning(dpy, (char *)value.addr, XtRFontSet); } else if (rep_type == XtQFontSet) { f = *(XFontSet*)value.addr; goto Done; } } } /* Should really do XListFonts, but most servers support this */ f = XCreateFontSet(display, "-*-*-*-R-*-*-*-120-*-*-*-*,*", &missing_charset_list, &missing_charset_count, &def_string); /* Free any returned missing charset list */ if (missing_charset_count) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNmissingCharsetList,"cvtStringToFontSet",XtCXtToolkitError, "Missing charsets in String to FontSet conversion", (String *) NULL, (Cardinal *)NULL); XFreeStringList(missing_charset_list); } if (f != NULL) goto Done; XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "noFont","cvtStringToFontSet",XtCXtToolkitError, "Unable to load any usable fontset", (String *) NULL, (Cardinal *)NULL); return False; } /*ARGSUSED*/ static void FreeFontSet( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, Cardinal *num_args) { Display *display; if (*num_args != 2) { XtAppWarningMsg(app, XtNwrongParameters,"freeFontSet",XtCXtToolkitError, "FreeFontSet needs display and locale arguments", (String *) NULL, (Cardinal *)NULL); return; } display = *(Display**)args[0].addr; XFreeFontSet( display, *(XFontSet*)toVal->addr ); } /*ARGSUSED*/ static void FetchLocaleArg( Widget widget, /* unused */ Cardinal *size, /* unused */ XrmValue *value) { static XrmString locale; locale = XrmQuarkToString(XrmStringToQuark (setlocale(LC_CTYPE, (char*)NULL))); value->size = sizeof(XrmString); value->addr = (XPointer)&locale; } static XtConvertArgRec const localeDisplayConvertArgs[] = { {XtProcedureArg, (XtPointer)FetchDisplayArg, 0}, {XtProcedureArg, (XtPointer)FetchLocaleArg, 0}, }; /*ARGSUSED*/ Boolean XtCvtStringToFontStruct( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { XFontStruct *f; Display* display; if (*num_args != 1) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToFontStruct",XtCXtToolkitError, "String to font conversion needs display argument", (String *) NULL, (Cardinal *)NULL); return False; } display = *(Display**)args[0].addr; if (CompareISOLatin1((String)fromVal->addr, XtDefaultFont) != 0) { f = XLoadQueryFont(display, (char *)fromVal->addr); if (f != NULL) { Done: donestr( XFontStruct*, f, XtRFontStruct); } XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRFontStruct); } /* try and get the default font */ { XrmName xrm_name[2]; XrmClass xrm_class[2]; XrmRepresentation rep_type; XrmValue value; xrm_name[0] = XrmPermStringToQuark ("xtDefaultFont"); xrm_name[1] = 0; xrm_class[0] = XrmPermStringToQuark ("XtDefaultFont"); xrm_class[1] = 0; if (XrmQGetResource(XtDatabase(display), xrm_name, xrm_class, &rep_type, &value)) { if (rep_type == _XtQString) { f = XLoadQueryFont(display, (char*)value.addr); if (f != NULL) goto Done; else XtDisplayStringConversionWarning(dpy, (char*)value.addr, XtRFontStruct); } else if (rep_type == XtQFont) { f = XQueryFont(display, *(Font*)value.addr ); if (f != NULL) goto Done; } else if (rep_type == XtQFontStruct) { f = (XFontStruct*)value.addr; goto Done; } } } /* Should really do XListFonts, but most servers support this */ f = XLoadQueryFont(display, "-*-*-*-R-*-*-*-120-*-*-*-*-ISO8859-*"); if (f != NULL) goto Done; XtAppWarningMsg(XtDisplayToApplicationContext(dpy), "noFont","cvtStringToFontStruct",XtCXtToolkitError, "Unable to load any usable ISO8859 font", (String *) NULL, (Cardinal *)NULL); return False; } /* ARGSUSED */ static void FreeFontStruct( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, Cardinal *num_args) { Display *display; if (*num_args != 1) { XtAppWarningMsg(app, XtNwrongParameters,"freeFontStruct",XtCXtToolkitError, "Free FontStruct requires display argument", (String *) NULL, (Cardinal *)NULL); return; } display = *(Display**)args[0].addr; XFreeFont( display, *(XFontStruct**)toVal->addr ); } /*ARGSUSED*/ Boolean XtCvtStringToInt( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { int i; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToInt",XtCXtToolkitError, "String to Integer conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (IsInteger((String)fromVal->addr, &i)) donestr(int, i, XtRInt); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRInt); return False; } /*ARGSUSED*/ Boolean XtCvtStringToShort( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { int i; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToShort",XtCXtToolkitError, "String to Integer conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (IsInteger((String)fromVal->addr, &i)) donestr(short, (short)i, XtRShort); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRShort); return False; } /*ARGSUSED*/ Boolean XtCvtStringToDimension( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { int i; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToDimension",XtCXtToolkitError, "String to Dimension conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (IsInteger((String)fromVal->addr, &i)) { if ( i < 0 ) XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRDimension); donestr(Dimension, (Dimension)i, XtRDimension); } XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRDimension); return False; } /*ARGSUSED*/ Boolean XtCvtIntToUnsignedChar( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToUnsignedChar",XtCXtToolkitError, "Integer to UnsignedChar conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); done(unsigned char, (*(int *)fromVal->addr)); } /*ARGSUSED*/ Boolean XtCvtStringToUnsignedChar( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { int i; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToUnsignedChar",XtCXtToolkitError, "String to Integer conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (IsInteger((String)fromVal->addr, &i)) { if ( i < 0 || i > 255 ) XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRUnsignedChar); donestr(unsigned char, i, XtRUnsignedChar); } XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRUnsignedChar); return False; } /*ARGSUSED*/ Boolean XtCvtColorToPixel( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtXColorToPixel",XtCXtToolkitError, "Color to Pixel conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); done(Pixel, ((XColor *)fromVal->addr)->pixel); } /*ARGSUSED*/ Boolean XtCvtIntToPixel( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToPixel",XtCXtToolkitError, "Integer to Pixel conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); done(Pixel, *(int*)fromVal->addr); } /*ARGSUSED*/ Boolean XtCvtIntToPixmap( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtIntToPixmap",XtCXtToolkitError, "Integer to Pixmap conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); done(Pixmap, *(int*)fromVal->addr); } #ifdef MOTIFBC void LowerCase(register char *source, register *dest) { register char ch; int i; for (i = 0; (ch = *source) != 0 && i < 999; source++, dest++, i++) { if ('A' <= ch && ch <= 'Z') *dest = ch - 'A' + 'a'; else *dest = ch; } *dest = 0; } #endif static int CompareISOLatin1 (const char *first, const char *second) { register const unsigned char *ap, *bp; for (ap = (const unsigned char *) first, bp = (const unsigned char *) second; *ap && *bp; ap++, bp++) { register unsigned char a, b; if ((a = *ap) != (b = *bp)) { /* try lowercasing and try again */ if ((a >= XK_A) && (a <= XK_Z)) a += (XK_a - XK_A); else if ((a >= XK_Agrave) && (a <= XK_Odiaeresis)) a += (XK_agrave - XK_Agrave); else if ((a >= XK_Ooblique) && (a <= XK_Thorn)) a += (XK_oslash - XK_Ooblique); if ((b >= XK_A) && (b <= XK_Z)) b += (XK_a - XK_A); else if ((b >= XK_Agrave) && (b <= XK_Odiaeresis)) b += (XK_agrave - XK_Agrave); else if ((b >= XK_Ooblique) && (b <= XK_Thorn)) b += (XK_oslash - XK_Ooblique); if (a != b) break; } } return (((int) *bp) - ((int) *ap)); } static void CopyISOLatin1Lowered(char *dst, const char *src) { unsigned char *dest = (unsigned char *) dst; const unsigned char *source = (const unsigned char *) src; for ( ; *source; source++, dest++) { if (*source >= XK_A && *source <= XK_Z) *dest = *source + (XK_a - XK_A); else if (*source >= XK_Agrave && *source <= XK_Odiaeresis) *dest = *source + (XK_agrave - XK_Agrave); else if (*source >= XK_Ooblique && *source <= XK_Thorn) *dest = *source + (XK_oslash - XK_Ooblique); else *dest = *source; } *dest = '\0'; } /*ARGSUSED*/ Boolean XtCvtStringToInitialState( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str = (String)fromVal->addr; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToInitialState",XtCXtToolkitError, "String to InitialState conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); if (CompareISOLatin1(str, "NormalState") == 0) donestr(int, NormalState, XtRInitialState); if (CompareISOLatin1(str, "IconicState") == 0) donestr(int, IconicState, XtRInitialState); { int val; if (IsInteger(str, &val)) donestr( int, val, XtRInitialState ); } XtDisplayStringConversionWarning(dpy, str, XtRInitialState); return False; } static XtConvertArgRec const visualConvertArgs[] = { {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.screen), sizeof(Screen *)}, {XtWidgetBaseOffset, (XtPointer)XtOffsetOf(WidgetRec, core.depth), sizeof(Cardinal)} }; /*ARGSUSED*/ Boolean XtCvtStringToVisual( Display* dpy, XrmValuePtr args, /* Screen, depth */ Cardinal *num_args, /* 2 */ XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) /* unused */ { String str = (String)fromVal->addr; int vc; XVisualInfo vinfo; if (*num_args != 2) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToVisual",XtCXtToolkitError, "String to Visual conversion needs screen and depth arguments", (String *) NULL, (Cardinal *)NULL); return False; } if (CompareISOLatin1(str, "StaticGray") == 0) vc = StaticGray; else if (CompareISOLatin1(str, "StaticColor") == 0) vc = StaticColor; else if (CompareISOLatin1(str, "TrueColor") == 0) vc = TrueColor; else if (CompareISOLatin1(str, "GrayScale") == 0) vc = GrayScale; else if (CompareISOLatin1(str, "PseudoColor") == 0) vc = PseudoColor; else if (CompareISOLatin1(str, "DirectColor") == 0) vc = DirectColor; else if (!IsInteger(str, &vc)) { XtDisplayStringConversionWarning(dpy, str, "Visual class name"); return False; } if (XMatchVisualInfo( XDisplayOfScreen((Screen*)*(Screen**)args[0].addr), XScreenNumberOfScreen((Screen*)*(Screen**)args[0].addr), (int)*(int*)args[1].addr, vc, &vinfo) ) { donestr( Visual*, vinfo.visual, XtRVisual ); } else { String params[2]; Cardinal num_params = 2; params[0] = str; params[1] = DisplayString(XDisplayOfScreen((Screen*)*(Screen**)args[0].addr)); XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNconversionError, "stringToVisual", XtCXtToolkitError, "Cannot find Visual of class %s for display %s", params, &num_params ); return False; } } /*ARGSUSED*/ Boolean XtCvtStringToAtom( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { Atom atom; if (*num_args != 1) { XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToAtom",XtCXtToolkitError, "String to Atom conversion needs Display argument", (String *) NULL, (Cardinal *)NULL); return False; } atom = XInternAtom( *(Display**)args->addr, (char*)fromVal->addr, False ); donestr(Atom, atom, XtRAtom); } /*ARGSUSED*/ Boolean XtCvtStringToDirectoryString( Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str; char directory[PATH_MAX+1]; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToDirectoryString",XtCXtToolkitError, "String to DirectoryString conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); str = (String)fromVal->addr; if (CompareISOLatin1(str, "XtCurrentDirectory") == 0) { /* uglier, but does not depend on compiler knowing return type */ #if !defined(X_NOT_POSIX) || defined(SYSV) || defined(WIN32) if (getcwd(directory, PATH_MAX + 1)) str = directory; #else if (getwd(directory)) str = directory; #endif if (!str) { if (errno == EACCES) errno = 0; /* reset errno */ XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRDirectoryString); return False; } } /* Since memory from the resource database or from static buffers of * system libraries may be freed or overwritten, allocate memory. * The memory is freed when all cache references are released. */ str = XtNewString(str); donestr(String, str, XtRDirectoryString); } /*ARGSUSED*/ static void FreeDirectoryString( XtAppContext app, XrmValuePtr toVal, XtPointer closure, /* unused */ XrmValuePtr args, Cardinal *num_args) { if (*num_args != 0) XtAppWarningMsg(app, XtNwrongParameters,"freeDirectoryString",XtCXtToolkitError, "Free Directory String requires no extra arguments", (String *) NULL, (Cardinal *) NULL); XtFree((char *) toVal->addr); } /*ARGSUSED*/ Boolean XtCvtStringToRestartStyle( Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String str = (String)fromVal->addr; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToRestartStyle",XtCXtToolkitError, "String to RestartStyle conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); if (CompareISOLatin1(str, "RestartIfRunning") == 0) donestr(unsigned char, SmRestartIfRunning, XtRRestartStyle); if (CompareISOLatin1(str, "RestartAnyway") == 0) donestr(unsigned char, SmRestartAnyway, XtRRestartStyle); if (CompareISOLatin1(str, "RestartImmediately") == 0) donestr(unsigned char, SmRestartImmediately, XtRRestartStyle); if (CompareISOLatin1(str, "RestartNever") == 0) donestr(unsigned char, SmRestartNever, XtRRestartStyle); XtDisplayStringConversionWarning(dpy, str, XtRRestartStyle); return False; } /*ARGSUSED*/ Boolean XtCvtStringToCommandArgArray( Display *dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { String *strarray, *ptr; char *src; char *dst, *dst_str; char *start; int tokens, len; if (*num_args != 0) XtAppWarningMsg(XtDisplayToApplicationContext(dpy), XtNwrongParameters,"cvtStringToCommandArgArray",XtCXtToolkitError, "String to CommandArgArray conversion needs no extra arguments", (String *)NULL, (Cardinal *)NULL); src = fromVal->addr; dst = dst_str = __XtMalloc((unsigned) strlen(src) + 1); tokens = 0; while (*src != '\0') { /* skip whitespace */ while (IsWhitespace(*src) || IsNewline(*src)) src++; /* test for end of string */ if (*src == '\0') break; /* start new token */ tokens++; start = src; while (*src != '\0' && !IsWhitespace(*src) && !IsNewline(*src)) { if (*src == '\\' && (IsWhitespace(*(src+1)) || IsNewline(*(src+1)))) { len = src - start; if (len) { /* copy preceeding part of token */ memcpy(dst, start, len); dst += len; } /* skip backslash */ src++; /* next part of token starts at whitespace */ start = src; } src++; } len = src - start; if (len) { /* copy last part of token */ memcpy(dst, start, len); dst += len; } *dst = '\0'; if (*src != '\0') dst++; } ptr = strarray = (String*) __XtMalloc((Cardinal)(tokens+1) * sizeof(String)); src = dst_str; while (--tokens >= 0) { *ptr = src; ptr++; if (tokens) { len = strlen(src); src = src + len + 1; } } *ptr = NULL; *closure_ret = (XtPointer) strarray; donestr(char**, strarray, XtRCommandArgArray) } /*ARGSUSED*/ static void ArgArrayDestructor( XtAppContext app, XrmValuePtr toVal, XtPointer closure, XrmValuePtr args, Cardinal *num_args) { String *strarray; if (closure) { strarray = (String*) closure; XtFree(*strarray); XtFree((char *) strarray); } } /*ARGSUSED*/ Boolean XtCvtStringToGravity ( Display* dpy, XrmValuePtr args, Cardinal *num_args, XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *closure_ret) { static struct _namepair { XrmQuark quark; const char *name; int gravity; } names[] = { { NULLQUARK, "forget", ForgetGravity }, { NULLQUARK, "northwest", NorthWestGravity }, { NULLQUARK, "north", NorthGravity }, { NULLQUARK, "northeast", NorthEastGravity }, { NULLQUARK, "west", WestGravity }, { NULLQUARK, "center", CenterGravity }, { NULLQUARK, "east", EastGravity }, { NULLQUARK, "southwest", SouthWestGravity }, { NULLQUARK, "south", SouthGravity }, { NULLQUARK, "southeast", SouthEastGravity }, { NULLQUARK, "static", StaticGravity }, { NULLQUARK, "unmap", UnmapGravity }, { NULLQUARK, "0", ForgetGravity }, { NULLQUARK, "1", NorthWestGravity }, { NULLQUARK, "2", NorthGravity }, { NULLQUARK, "3", NorthEastGravity }, { NULLQUARK, "4", WestGravity }, { NULLQUARK, "5", CenterGravity }, { NULLQUARK, "6", EastGravity }, { NULLQUARK, "7", SouthWestGravity }, { NULLQUARK, "8", SouthGravity }, { NULLQUARK, "9", SouthEastGravity }, { NULLQUARK, "10", StaticGravity }, { NULLQUARK, NULL, ForgetGravity } }; static Boolean haveQuarks = FALSE; char lowerName[40]; XrmQuark q; char *s; struct _namepair *np; if (*num_args != 0) { XtAppWarningMsg(XtDisplayToApplicationContext (dpy), "wrongParameters","cvtStringToGravity","XtToolkitError", "String to Gravity conversion needs no extra arguments", (String *) NULL, (Cardinal *)NULL); return False; } if (!haveQuarks) { for (np = names; np->name; np++) { np->quark = XrmPermStringToQuark (np->name); } haveQuarks = TRUE; } s = (char *) fromVal->addr; if (strlen(s) < sizeof lowerName) { CopyISOLatin1Lowered (lowerName, s); q = XrmStringToQuark (lowerName); for (np = names; np->name; np++) if (np->quark == q) donestr(int, np->gravity, XtRGravity); } XtDisplayStringConversionWarning(dpy, (char *)fromVal->addr, XtRGravity); return False; } void _XtAddDefaultConverters( ConverterTable table) { #define Add(from, to, proc, convert_args, num_args, cache) \ _XtTableAddConverter(table, from, to, proc, \ (XtConvertArgList) convert_args, (Cardinal)num_args, \ True, cache, (XtDestructor)NULL, True) #define Add2(from, to, proc, convert_args, num_args, cache, destructor) \ _XtTableAddConverter(table, from, to, proc, \ (XtConvertArgList) convert_args, (Cardinal)num_args, \ True, cache, destructor, True) Add(XtQColor, XtQPixel, XtCvtColorToPixel, NULL, 0, XtCacheNone); Add(XtQInt, XtQBool, XtCvtIntToBool, NULL, 0, XtCacheNone); Add(XtQInt, XtQBoolean, XtCvtIntToBoolean, NULL, 0, XtCacheNone); Add(XtQInt, XtQColor, XtCvtIntToColor, colorConvertArgs, XtNumber(colorConvertArgs), XtCacheByDisplay); Add(XtQInt, XtQDimension, XtCvtIntToShort, NULL, 0, XtCacheNone); Add(XtQInt, XtQFloat, XtCvtIntToFloat, NULL, 0, XtCacheNone); Add(XtQInt, XtQFont, XtCvtIntToFont, NULL, 0, XtCacheNone); Add(XtQInt, XtQPixel, XtCvtIntToPixel, NULL, 0, XtCacheNone); Add(XtQInt, XtQPixmap, XtCvtIntToPixmap, NULL, 0, XtCacheNone); Add(XtQInt, XtQPosition, XtCvtIntToShort, NULL, 0, XtCacheNone); Add(XtQInt, XtQShort, XtCvtIntToShort, NULL, 0, XtCacheNone); Add(XtQInt, XtQUnsignedChar,XtCvtIntToUnsignedChar,NULL, 0, XtCacheNone); Add(XtQPixel, XtQColor, XtCvtIntToColor, colorConvertArgs, XtNumber(colorConvertArgs), XtCacheByDisplay); Add(_XtQString, XtQAtom, XtCvtStringToAtom, displayConvertArg, XtNumber(displayConvertArg), XtCacheNone); Add(_XtQString, XtQBool, XtCvtStringToBool, NULL, 0, XtCacheNone); Add(_XtQString, XtQBoolean, XtCvtStringToBoolean, NULL, 0, XtCacheNone); Add2(_XtQString, XtQCommandArgArray, XtCvtStringToCommandArgArray, NULL, 0, XtCacheNone | XtCacheRefCount, ArgArrayDestructor); Add2(_XtQString, XtQCursor, XtCvtStringToCursor, displayConvertArg, XtNumber(displayConvertArg), XtCacheByDisplay, FreeCursor); Add(_XtQString, XtQDimension, XtCvtStringToDimension,NULL, 0, XtCacheNone); Add2(_XtQString, XtQDirectoryString, XtCvtStringToDirectoryString, NULL, 0, XtCacheNone | XtCacheRefCount, FreeDirectoryString); Add(_XtQString, XtQDisplay, XtCvtStringToDisplay, NULL, 0, XtCacheAll); Add2(_XtQString, XtQFile, XtCvtStringToFile, NULL, 0, XtCacheAll | XtCacheRefCount, FreeFile); Add(_XtQString, XtQFloat, XtCvtStringToFloat, NULL, 0, XtCacheNone); Add2(_XtQString, XtQFont, XtCvtStringToFont, displayConvertArg, XtNumber(displayConvertArg), XtCacheByDisplay, FreeFont); Add2(_XtQString, XtQFontSet, XtCvtStringToFontSet, localeDisplayConvertArgs, XtNumber(localeDisplayConvertArgs), XtCacheByDisplay, FreeFontSet); Add2(_XtQString, XtQFontStruct,XtCvtStringToFontStruct, displayConvertArg, XtNumber(displayConvertArg), XtCacheByDisplay, FreeFontStruct); Add(_XtQString, XtQGravity, XtCvtStringToGravity, NULL, 0, XtCacheNone); Add(_XtQString, XtQInitialState, XtCvtStringToInitialState, NULL, 0, XtCacheNone); Add(_XtQString, XtQInt, XtCvtStringToInt, NULL, 0, XtCacheAll); Add2(_XtQString, XtQPixel, XtCvtStringToPixel, colorConvertArgs, XtNumber(colorConvertArgs), XtCacheByDisplay, FreePixel); Add(_XtQString, XtQPosition, XtCvtStringToShort, NULL, 0, XtCacheAll); Add(_XtQString, XtQRestartStyle, XtCvtStringToRestartStyle, NULL, 0, XtCacheNone); Add(_XtQString, XtQShort, XtCvtStringToShort, NULL, 0, XtCacheAll); Add(_XtQString, XtQUnsignedChar, XtCvtStringToUnsignedChar, NULL, 0, XtCacheAll); Add2(_XtQString, XtQVisual, XtCvtStringToVisual, visualConvertArgs, XtNumber(visualConvertArgs), XtCacheByDisplay, NULL); _XtAddTMConverters(table); } ined(WIN32) if (getcwd(directory, PATH_MAX + 1)) str = directory; #else if (getwd(directory)) str = directory; #endif if (!str) { if (errno == EACCES) errno = 0; /* reset errno */ XtlibXt-1.1.5/src/sharedlib.c000064401431060000012000000146201252061032400157470ustar00alancstaff00002660200006/* Copyright 1989, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #if (defined(SUNSHLIB) || defined(AIXSHLIB)) && !defined(SHAREDCODE) #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "VarargsI.h" #include "ShellP.h" #include "VendorP.h" #include "CreateI.h" #if defined(AIXSHLIB) WidgetClass vendorShellWidgetClass = (WidgetClass) &vendorShellClassRec; static void _XtVendorInitialize() { transientShellWidgetClass->core_class.superclass = (WidgetClass) &vendorShellClassRec; topLevelShellWidgetClass->core_class.superclass = (WidgetClass) &vendorShellClassRec; } #define VENDORINIT _XtVendorInitialize(); #else #define VENDORINIT /* as nothing */ #endif #ifdef SUNSHLIB /* * _XtInherit needs to be statically linked since it is compared against as * well as called. */ void _XtInherit() { extern void __XtInherit(); __XtInherit(); } #endif /* * The following routine will be called by every toolkit * application, forcing this file to be statically linked. * * Note: XtInitialize, XtAppInitialize, and XtOpenApplication * call XtToolkitInitialize. */ void XtToolkitInitialize() { extern void _XtToolkitInitialize(); VENDORINIT _XtToolkitInitialize(); } Widget XtInitialize( _Xconst char* name, _Xconst char* classname, XrmOptionDescRec *options, Cardinal num_options, int *argc, String *argv) { extern Widget _XtInitialize(); VENDORINIT return _XtInitialize (name, classname, options, num_options, argc, argv); } Widget XtAppInitialize( XtAppContext * app_context_return, _Xconst char* application_class, XrmOptionDescRec *options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, ArgList args_in, Cardinal num_args_in) { extern Widget _XtAppInitialize(); VENDORINIT return _XtAppInitialize (app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, args_in, num_args_in); } Widget XtVaAppInitialize( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, ...) { va_list var; extern Widget _XtVaAppInitialize(); VENDORINIT va_start(var, fallback_resources); return _XtVaAppInitialize(app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, var); } Widget XtOpenApplication( XtAppContext * app_context_return, _Xconst char* application_class, XrmOptionDescRec *options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, ArgList args_in, Cardinal num_args_in) { extern Widget _XtOpenApplication(); VENDORINIT return _XtOpenApplication (app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, widget_class, args_in, num_args_in); } Widget XtVaOpenApplication( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, ...) { va_list var; extern Widget _XtVaOpenApplication(); VENDORINIT va_start(var, widget_class); return _XtVaOpenApplication(app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, widget_class, var); } #else #ifndef lint static int dummy; /* avoid warning from ranlib */ #endif #endif /* SUNSHLIB or AIXSHLIB */ #if defined(SUNSHLIB) && !defined(SHAREDCODE) int _XtInheritTranslations = 0; extern CompositeClassRec compositeClassRec; WidgetClass compositeWidgetClass = (WidgetClass) &compositeClassRec; extern ConstraintClassRec constraintClassRec; WidgetClass constraintWidgetClass = (WidgetClass) &constraintClassRec; extern WidgetClassRec widgetClassRec; WidgetClass widgetClass = &widgetClassRec; WidgetClass coreWidgetClass = &widgetClassRec; extern ObjectClassRec objectClassRec; WidgetClass objectClass = (WidgetClass)&objectClassRec; extern RectObjClassRec rectObjClassRec; WidgetClass rectObjClass = (WidgetClass)&rectObjClassRec; extern ShellClassRec shellClassRec; WidgetClass shellWidgetClass = (WidgetClass) &shellClassRec; extern OverrideShellClassRec overrideShellClassRec; WidgetClass overrideShellWidgetClass = (WidgetClass) &overrideShellClassRec; extern WMShellClassRec wmShellClassRec; WidgetClass wmShellWidgetClass = (WidgetClass) &wmShellClassRec; extern TransientShellClassRec transientShellClassRec; WidgetClass transientShellWidgetClass = (WidgetClass) &transientShellClassRec; extern TopLevelShellClassRec topLevelShellClassRec; WidgetClass topLevelShellWidgetClass = (WidgetClass) &topLevelShellClassRec; extern ApplicationShellClassRec applicationShellClassRec; WidgetClass applicationShellWidgetClass = (WidgetClass) &applicationShellClassRec; extern SessionShellClassRec sessionShellClassRec; WidgetClass sessionShellWidgetClass = (WidgetClass) &sessionShellClassRec; extern HookObjClassRec hookObjClassRec; WidgetClass hookObjectClass = (WidgetClass) &hookObjClassRec; #endif /* SUNSHLIB */ libXt-1.1.5/src/Callback.c000064401431060000012000000467151252061032400155200ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" static String XtNinvalidCallbackList = "invalidCallbackList"; static String XtNxtAddCallback = "xtAddCallback"; static String XtNxtRemoveCallback = "xtRemoveCallback"; static String XtNxtRemoveAllCallback = "xtRemoveAllCallback"; static String XtNxtCallCallback = "xtCallCallback"; /* However it doesn't contain a final NULL record */ #define ToList(p) ((XtCallbackList) ((p)+1)) static InternalCallbackList* FetchInternalList( Widget widget, _Xconst char *name) { XrmQuark quark; int n; CallbackTable offsets; InternalCallbackList* retval = NULL; quark = StringToQuark(name); LOCK_PROCESS; offsets = (CallbackTable) widget->core.widget_class->core_class.callback_private; for (n = (int)(long) *(offsets++); --n >= 0; offsets++) if (quark == (*offsets)->xrm_name) { retval = (InternalCallbackList *) ((char *) widget - (*offsets)->xrm_offset - 1); break; } UNLOCK_PROCESS; return retval; } void _XtAddCallback( InternalCallbackList* callbacks, XtCallbackProc callback, XtPointer closure) { register InternalCallbackList icl; register XtCallbackList cl; register int count; icl = *callbacks; count = icl ? icl->count : 0; if (icl && icl->call_state) { icl->call_state |= _XtCBFreeAfterCalling; icl = (InternalCallbackList) __XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (count + 1)); (void) memmove((char *)ToList(icl), (char *)ToList(*callbacks), sizeof(XtCallbackRec) * count); } else { icl = (InternalCallbackList) XtRealloc((char *) icl, sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (count + 1)); } *callbacks = icl; icl->count = count + 1; icl->is_padded = 0; icl->call_state = 0; cl = ToList(icl) + count; cl->callback = callback; cl->closure = closure; } /* _XtAddCallback */ void _XtAddCallbackOnce( register InternalCallbackList*callbacks, XtCallbackProc callback, XtPointer closure) { register XtCallbackList cl = ToList(*callbacks); register int i; for (i=(*callbacks)->count; --i >= 0; cl++) if (cl->callback == callback && cl->closure == closure) return; _XtAddCallback(callbacks, callback, closure); } /* _XtAddCallbackOnce */ void XtAddCallback( Widget widget, _Xconst char* name, XtCallbackProc callback, XtPointer closure ) { InternalCallbackList *callbacks; Widget hookobj; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtAddCallback,XtCXtToolkitError, "Cannot find callback list in XtAddCallback", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } _XtAddCallback(callbacks, callback, closure); if (!_XtIsHookObject(widget)) { hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHaddCallback; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } } UNLOCK_APP(app); } /* XtAddCallback */ /* ARGSUSED */ static void AddCallbacks( Widget widget, InternalCallbackList *callbacks, XtCallbackList newcallbacks) { register InternalCallbackList icl; register int i, j; register XtCallbackList cl; icl = *callbacks; i = icl ? icl->count : 0; for (j=0, cl = newcallbacks; cl->callback; cl++, j++); if (icl && icl->call_state) { icl->call_state |= _XtCBFreeAfterCalling; icl = (InternalCallbackList) __XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (i+j)); (void) memmove((char *)ToList(*callbacks), (char *)ToList(icl), sizeof(XtCallbackRec) * i); } else { icl = (InternalCallbackList) XtRealloc((char *) icl, sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (i+j)); } *callbacks = icl; icl->count = i+j; icl->is_padded = 0; icl->call_state = 0; for (cl = ToList(icl) + i; --j >= 0; ) *cl++ = *newcallbacks++; } /* AddCallbacks */ void XtAddCallbacks( Widget widget, _Xconst char* name, XtCallbackList xtcallbacks ) { InternalCallbackList* callbacks; Widget hookobj; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtAddCallback,XtCXtToolkitError, "Cannot find callback list in XtAddCallbacks", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } AddCallbacks(widget, callbacks, xtcallbacks); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHaddCallbacks; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtAddCallbacks */ void _XtRemoveCallback ( InternalCallbackList *callbacks, XtCallbackProc callback, XtPointer closure) { register InternalCallbackList icl; register int i, j; register XtCallbackList cl, ncl, ocl; icl = *callbacks; if (!icl) return; cl = ToList(icl); for (i=icl->count; --i >= 0; cl++) { if (cl->callback == callback && cl->closure == closure) { if (icl->call_state) { icl->call_state |= _XtCBFreeAfterCalling; if (icl->count == 1) { *callbacks = NULL; } else { j = icl->count - i - 1; ocl = ToList(icl); icl = (InternalCallbackList) __XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (i + j)); icl->count = i + j; icl->is_padded = 0; icl->call_state = 0; ncl = ToList(icl); while (--j >= 0) *ncl++ = *ocl++; while (--i >= 0) *ncl++ = *++cl; *callbacks = icl; } } else { if (--icl->count) { ncl = cl + 1; while (--i >= 0) *cl++ = *ncl++; icl = (InternalCallbackList) XtRealloc((char *) icl, sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * icl->count); icl->is_padded = 0; *callbacks = icl; } else { XtFree((char *) icl); *callbacks = NULL; } } return; } } } /* _XtRemoveCallback */ void XtRemoveCallback ( Widget widget, _Xconst char* name, XtCallbackProc callback, XtPointer closure ) { InternalCallbackList *callbacks; Widget hookobj; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtRemoveCallback,XtCXtToolkitError, "Cannot find callback list in XtRemoveCallback", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } _XtRemoveCallback(callbacks, callback, closure); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHremoveCallback; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtRemoveCallback */ void XtRemoveCallbacks ( Widget widget, _Xconst char* name, XtCallbackList xtcallbacks) { InternalCallbackList *callbacks; Widget hookobj; int i; InternalCallbackList icl; XtCallbackList cl, ccl, rcl; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtRemoveCallback,XtCXtToolkitError, "Cannot find callback list in XtRemoveCallbacks", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } icl = *callbacks; if (!icl) { UNLOCK_APP(app); return; } i = icl->count; cl = ToList(icl); if (icl->call_state) { icl->call_state |= _XtCBFreeAfterCalling; icl = (InternalCallbackList)__XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * i); icl->count = i; icl->call_state = 0; } ccl = ToList(icl); while (--i >= 0) { *ccl++ = *cl; for (rcl=xtcallbacks; rcl->callback; rcl++) { if (cl->callback == rcl->callback && cl->closure == rcl->closure) { ccl--; icl->count--; break; } } cl++; } if (icl->count) { icl = (InternalCallbackList) XtRealloc((char *)icl, (sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * icl->count)); icl->is_padded = 0; *callbacks = icl; } else { XtFree((char *)icl); *callbacks = NULL; } hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHremoveCallbacks; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtRemoveCallbacks */ void _XtRemoveAllCallbacks ( InternalCallbackList *callbacks) { register InternalCallbackList icl = *callbacks; if (icl) { if (icl->call_state) icl->call_state |= _XtCBFreeAfterCalling; else XtFree((char *) icl); *callbacks = NULL; } } /* _XtRemoveAllCallbacks */ void XtRemoveAllCallbacks( Widget widget, _Xconst char* name) { InternalCallbackList *callbacks; Widget hookobj; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtRemoveAllCallback,XtCXtToolkitError, "Cannot find callback list in XtRemoveAllCallbacks", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } _XtRemoveAllCallbacks(callbacks); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHremoveAllCallbacks; call_data.widget = widget; call_data.event_data = (XtPointer) name; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtRemoveAllCallbacks */ InternalCallbackList _XtCompileCallbackList( XtCallbackList xtcallbacks) { register int n; register XtCallbackList xtcl, cl; register InternalCallbackList callbacks; for (n=0, xtcl=xtcallbacks; xtcl->callback; n++, xtcl++) {}; if (n == 0) return (InternalCallbackList) NULL; callbacks = (InternalCallbackList) __XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * n); callbacks->count = n; callbacks->is_padded = 0; callbacks->call_state = 0; cl = ToList(callbacks); while (--n >= 0) *cl++ = *xtcallbacks++; return(callbacks); } /* _XtCompileCallbackList */ XtCallbackList _XtGetCallbackList( InternalCallbackList *callbacks) { register int i; register InternalCallbackList icl; register XtCallbackList cl, ocl; icl = *callbacks; if (!icl) { static XtCallbackRec emptyList[1] = { {NULL, NULL} }; return (XtCallbackList)emptyList; } if (icl->is_padded) return ToList(icl); i = icl->count; if (icl->call_state) { icl->call_state |= _XtCBFreeAfterCalling; ocl = ToList(icl); icl = (InternalCallbackList) __XtMalloc(sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (i+1)); icl->count = i; icl->call_state = 0; cl = ToList(icl); while (--i >= 0) *cl++ = *ocl++; } else { icl = (InternalCallbackList) XtRealloc((char *)icl, sizeof(InternalCallbackRec) + sizeof(XtCallbackRec) * (i+1)); cl = ToList(icl) + i; } icl->is_padded = 1; cl->callback = (XtCallbackProc) NULL; cl->closure = NULL; *callbacks = icl; return ToList(icl); } void XtCallCallbacks( Widget widget, _Xconst char* name, XtPointer call_data ) { InternalCallbackList *callbacks; InternalCallbackList icl; XtCallbackList cl; int i; char ostate; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, name); if (!callbacks) { XtAppWarningMsg(app, XtNinvalidCallbackList,XtNxtCallCallback,XtCXtToolkitError, "Cannot find callback list in XtCallCallbacks", (String *)NULL, (Cardinal *)NULL); UNLOCK_APP(app); return; } icl = *callbacks; if (!icl) { UNLOCK_APP(app); return; } cl = ToList(icl); if (icl->count == 1) { (*cl->callback) (widget, cl->closure, call_data); UNLOCK_APP(app); return; } ostate = icl->call_state; icl->call_state = _XtCBCalling; for (i = icl->count; --i >= 0; cl++) (*cl->callback) (widget, cl->closure, call_data); if (ostate) icl->call_state |= ostate; else if (icl->call_state & _XtCBFreeAfterCalling) XtFree((char *)icl); else icl->call_state = ostate; UNLOCK_APP(app); } /* XtCallCallbacks */ XtCallbackStatus XtHasCallbacks( Widget widget, _Xconst char* callback_name ) { InternalCallbackList *callbacks; XtCallbackStatus retval = XtCallbackHasSome; WIDGET_TO_APPCON(widget); LOCK_APP(app); callbacks = FetchInternalList(widget, callback_name); if (!callbacks) retval = XtCallbackNoList; else if (!*callbacks) retval = XtCallbackHasNone; UNLOCK_APP(app); return retval; } /* XtHasCallbacks */ void XtCallCallbackList( Widget widget, XtCallbackList callbacks, XtPointer call_data) { register InternalCallbackList icl; register XtCallbackList cl; register int i; char ostate; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (!callbacks) { UNLOCK_APP(app); return; } icl = (InternalCallbackList)callbacks; cl = ToList(icl); if (icl->count == 1) { (*cl->callback) (widget, cl->closure, call_data); UNLOCK_APP(app); return; } ostate = icl->call_state; icl->call_state = _XtCBCalling; for (i = icl->count; --i >= 0; cl++) (*cl->callback) (widget, cl->closure, call_data); if (ostate) icl->call_state |= ostate; else if (icl->call_state & _XtCBFreeAfterCalling) XtFree((char *)icl); else icl->call_state = 0; UNLOCK_APP(app); } /* XtCallCallbackList */ void _XtPeekCallback( Widget widget, XtCallbackList callbacks, XtCallbackProc *callback, XtPointer *closure) { register InternalCallbackList icl = (InternalCallbackList) callbacks; register XtCallbackList cl; if (!callbacks) { *callback = (XtCallbackProc) NULL; return; } cl = ToList(icl); *callback = cl->callback; *closure = cl->closure; return; } void _XtCallConditionalCallbackList( Widget widget, XtCallbackList callbacks, XtPointer call_data, _XtConditionProc cond_proc) { register InternalCallbackList icl; register XtCallbackList cl; register int i; char ostate; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (!callbacks) { UNLOCK_APP(app); return; } icl = (InternalCallbackList)callbacks; cl = ToList(icl); if (icl->count == 1) { (*cl->callback) (widget, cl->closure, call_data); (void) (*cond_proc)(call_data); UNLOCK_APP(app); return; } ostate = icl->call_state; icl->call_state = _XtCBCalling; for (i = icl->count; --i >= 0; cl++) { (*cl->callback) (widget, cl->closure, call_data); if (! (*cond_proc)(call_data)) break; } if (ostate) icl->call_state |= ostate; else if (icl->call_state & _XtCBFreeAfterCalling) XtFree((char *)icl); else icl->call_state = 0; UNLOCK_APP(app); } ate = 0; ncl = ToList(icl); while (--j libXt-1.1.5/src/Varargs.c000064401431060000012000000373371252061032400154310ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1988, 1989, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "VarargsI.h" #include "StringDefs.h" static String XtNxtConvertVarToArgList = "xtConvertVarToArgList"; /* * Given a nested list, _XtCountNestedList() returns counts of the * total number of attribute-value pairs and the count of those * attributes that are typed. The list is counted recursively. */ static void _XtCountNestedList( XtTypedArgList avlist, int *total_count, int *typed_count) { for (; avlist->name != NULL; avlist++) { if (strcmp(avlist->name, XtVaNestedList) == 0) { _XtCountNestedList((XtTypedArgList)avlist->value, total_count, typed_count); } else { if (avlist->type != NULL) { ++(*typed_count); } ++(*total_count); } } } /* * Given a variable length attribute-value list, _XtCountVaList() * returns counts of the total number of attribute-value pairs, * and the count of the number of those attributes that are typed. * The list is counted recursively. */ void _XtCountVaList(va_list var, int* total_count, int* typed_count) { String attr; *total_count = 0; *typed_count = 0; for(attr = va_arg(var, String) ; attr != NULL; attr = va_arg(var, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { (void)va_arg(var, String); (void)va_arg(var, String); (void)va_arg(var, XtArgVal); (void)va_arg(var, int); ++(*total_count); ++(*typed_count); } else if (strcmp(attr, XtVaNestedList) == 0) { _XtCountNestedList(va_arg(var, XtTypedArgList), total_count, typed_count); } else { (void)va_arg(var, XtArgVal); ++(*total_count); } } } /* * Given a variable length attribute-value list, XtVaCreateArgsList() * constructs an attribute-value list of type XtTypedArgList and * returns the list. */ XtVarArgsList XtVaCreateArgsList(XtPointer unused, ...) { va_list var; XtTypedArgList avlist; int count = 0; String attr; /* * Count the number of attribute-value pairs in the list. * Note: The count is required only to allocate enough space to store * the list. Therefore nested lists are not counted recursively. */ va_start(var,unused); for(attr = va_arg(var, String) ; attr != NULL; attr = va_arg(var, String)) { ++count; if (strcmp(attr, XtVaTypedArg) == 0) { (void)va_arg(var, String); (void)va_arg(var, String); (void)va_arg(var, XtArgVal); (void)va_arg(var, int); } else { (void)va_arg(var, XtArgVal); } } va_end(var); va_start(var,unused); avlist = _XtVaCreateTypedArgList(var, count); va_end(var); return (XtVarArgsList)avlist; } XtTypedArgList _XtVaCreateTypedArgList(va_list var, register int count) { String attr; XtTypedArgList avlist; avlist = (XtTypedArgList) __XtCalloc((int)count + 1, (unsigned)sizeof(XtTypedArg)); for(attr = va_arg(var, String), count = 0; attr != NULL; attr = va_arg(var, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { avlist[count].name = va_arg(var, String); avlist[count].type = va_arg(var, String); avlist[count].value = va_arg(var, XtArgVal); avlist[count].size = va_arg(var, int); } else { avlist[count].name = attr; avlist[count].type = NULL; avlist[count].value = va_arg(var, XtArgVal); } ++count; } avlist[count].name = NULL; return avlist; } /* * TypedArgToArg() invokes a resource converter to convert the * passed typed arg into a name/value pair and stores the name/value * pair in the passed Arg structure. If memory is allocated for the * converted value, the address is returned in the value field of * memory_return; otherwise that field is NULL. The function returns * 1 if the conversion succeeded and 0 if the conversion failed. */ static int TypedArgToArg( Widget widget, XtTypedArgList typed_arg, ArgList arg_return, XtResourceList resources, Cardinal num_resources, ArgList memory_return) { String to_type = NULL; XrmValue from_val, to_val; if (widget == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "nullWidget", XtNxtConvertVarToArgList, XtCXtToolkitError, "XtVaTypedArg conversion needs non-NULL widget handle", (String *)NULL, (Cardinal *)NULL); return(0); } /* again we assume that the XtResourceList is un-compiled */ for (; num_resources--; resources++) if (strcmp(typed_arg->name, resources->resource_name) == 0) { to_type = resources->resource_type; break; } if (to_type == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "unknownType", XtNxtConvertVarToArgList, XtCXtToolkitError, "Unable to find type of resource for conversion", (String *)NULL, (Cardinal *)NULL); return(0); } to_val.addr = NULL; from_val.size = typed_arg->size; if ((strcmp(typed_arg->type, XtRString) == 0) || ((unsigned) typed_arg->size > sizeof(XtArgVal))) { from_val.addr = (XPointer)typed_arg->value; } else { from_val.addr = (XPointer)&typed_arg->value; } LOCK_PROCESS; XtConvertAndStore(widget, typed_arg->type, &from_val, to_type, &to_val); if (to_val.addr == NULL) { UNLOCK_PROCESS; XtAppWarningMsg(XtWidgetToApplicationContext(widget), "conversionFailed", XtNxtConvertVarToArgList, XtCXtToolkitError, "Type conversion failed", (String *)NULL, (Cardinal *)NULL); return(0); } arg_return->name = typed_arg->name; memory_return->value = (XtArgVal) NULL; if (strcmp(to_type, XtRString) == 0) { arg_return->value = (XtArgVal) to_val.addr; } else { if (to_val.size == sizeof(long)) arg_return->value = (XtArgVal) *(long *)to_val.addr; else if (to_val.size == sizeof(int)) arg_return->value = (XtArgVal) *(int *)to_val.addr; else if (to_val.size == sizeof(short)) arg_return->value = (XtArgVal) *(short *)to_val.addr; else if (to_val.size == sizeof(char)) arg_return->value = (XtArgVal) *(char *)to_val.addr; else if (to_val.size == sizeof(XtArgVal)) arg_return->value = *(XtArgVal *)to_val.addr; else if (to_val.size > sizeof(XtArgVal)) { arg_return->value = (XtArgVal) __XtMalloc(to_val.size); memory_return->value = (XtArgVal) memcpy((void *)arg_return->value, to_val.addr, to_val.size); } } UNLOCK_PROCESS; return(1); } /* * NestedArgtoArg() converts the passed nested list into * an ArgList/count. */ static int NestedArgtoArg( Widget widget, XtTypedArgList avlist, ArgList args, XtResourceList resources, Cardinal num_resources, ArgList memory_return) { int count = 0; for (; avlist->name != NULL; avlist++) { if (avlist->type != NULL) { /* If widget is NULL, the typed arg is ignored */ if (widget != NULL) { /* this is a typed arg */ count += TypedArgToArg(widget, avlist, (args+count), resources, num_resources, (memory_return+count)); } } else if (strcmp(avlist->name, XtVaNestedList) == 0) { count += NestedArgtoArg(widget, (XtTypedArgList)avlist->value, (args+count), resources, num_resources, (memory_return+count)); } else { (args+count)->name = avlist->name; (args+count)->value = avlist->value; ++count; } } return(count); } /* * Free memory allocated through _XtVaToArgList. The actual args array * size is expected to be total_count * 2, where total_count is the number * of elements needed for resource representations. The lower half of the * array contains pairs of resource names and values as usual. For each * element [n] in the lower half of the array, the value field of the * corresponding element [n + total_count] in the upper half of the array * has been pressed into service in order to note whether the resource value * is a pointer to memory that was allocated in TypedArgToArg. In the * upper half, if the value field is not NULL, it contains the address of * memory which should now be freed. That memory could have been allocated * only as a result of the conversion of typed arguments. Therefore, if * there were no typed arguments in the original varargs, there is no need * to examine the upper half of the array. In the choice of data structure * to make this representation, priority was given to the wish to retrofit * the release of memory around the existing signature of _XtVaToArgList. */ void _XtFreeArgList( ArgList args, /* as returned by _XtVaToArgList */ int total_count, /* argument count returned by _XtCountVaList */ int typed_count) /* typed arg count returned by _XtCountVaList */ { ArgList p; if (args) { if (typed_count) for (p = args + total_count; total_count--; ++p) { XtFree((char *)p->value); } XtFree((char *)args); } } static void GetResources(Widget widget, XtResourceList *res_list, Cardinal *number); /* * Given a variable argument list, _XtVaToArgList() returns the * equivalent ArgList and count. _XtVaToArgList() handles nested * lists and typed arguments. If typed arguments are present, the * ArgList should be freed with _XtFreeArgList. */ void _XtVaToArgList( Widget widget, va_list var, int max_count, ArgList *args_return, Cardinal *num_args_return) { String attr; int count; ArgList args = (ArgList)NULL; XtTypedArg typed_arg; XtResourceList resources = (XtResourceList)NULL; Cardinal num_resources; Boolean fetched_resource_list = False; if (max_count == 0) { *num_args_return = 0; *args_return = (ArgList)NULL; return; } args = (ArgList)__XtMalloc((unsigned)(max_count * 2 * sizeof(Arg))); for (count = max_count * 2; --count >= 0; ) args[count].value = (XtArgVal) NULL; count = 0; for(attr = va_arg(var, String) ; attr != NULL; attr = va_arg(var, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { typed_arg.name = va_arg(var, String); typed_arg.type = va_arg(var, String); typed_arg.value = va_arg(var, XtArgVal); typed_arg.size = va_arg(var, int); /* if widget is NULL, typed args are ignored */ if (widget != NULL) { if (!fetched_resource_list) { GetResources(widget, &resources, &num_resources); fetched_resource_list = True; } count += TypedArgToArg(widget, &typed_arg, &args[count], resources, num_resources, &args[max_count + count]); } } else if (strcmp(attr, XtVaNestedList) == 0) { if (widget != NULL) { if (!fetched_resource_list) { GetResources(widget, &resources, &num_resources); fetched_resource_list = True; } } count += NestedArgtoArg(widget, va_arg(var, XtTypedArgList), &args[count], resources, num_resources, &args[max_count + count]); } else { args[count].name = attr; args[count].value = va_arg(var, XtArgVal); count ++; } } XtFree((XtPointer)resources); *num_args_return = (Cardinal)count; *args_return = (ArgList)args; } /* Function Name: GetResources * Description: Retreives the normal and constraint resources * for this widget. * Arguments: widget - the widget. * RETURNED res_list - the list of resource for this widget * RETURNED number - the number of resources in the above list. * Returns: none */ static void GetResources( Widget widget, XtResourceList * res_list, Cardinal * number) { Widget parent = XtParent(widget); XtInitializeWidgetClass(XtClass(widget)); XtGetResourceList(XtClass(widget), res_list, number); if (!XtIsShell(widget) && parent && XtIsConstraint(parent)) { XtResourceList res, constraint, cons_top; Cardinal num_constraint, temp; XtGetConstraintResourceList(XtClass(parent), &constraint, &num_constraint); cons_top = constraint; *res_list = (XtResourceList) XtRealloc((char*)*res_list, ((*number + num_constraint) * sizeof(XtResource))); for (temp= num_constraint, res= *res_list + *number; temp != 0; temp--) *res++ = *constraint++; *number += num_constraint; XtFree( (XtPointer) cons_top); } } static int NestedArgtoTypedArg( XtTypedArgList args, XtTypedArgList avlist) { int count = 0; for (; avlist->name != NULL; avlist++) { if (avlist->type != NULL) { (args+count)->name = avlist->name; (args+count)->type = avlist->type; (args+count)->size = avlist->size; (args+count)->value = avlist->value; ++count; } else if(strcmp(avlist->name, XtVaNestedList) == 0) { count += NestedArgtoTypedArg((args+count), (XtTypedArgList)avlist->value); } else { (args+count)->name = avlist->name; (args+count)->type = NULL; (args+count)->value = avlist->value; ++count; } } return(count); } /* * Given a variable argument list, _XtVaToTypedArgList() returns * the equivalent TypedArgList. _XtVaToTypedArgList() handles nested * lists. * Note: _XtVaToTypedArgList() does not do type conversions. */ void _XtVaToTypedArgList( va_list var, int max_count, XtTypedArgList *args_return, Cardinal *num_args_return) { XtTypedArgList args = NULL; String attr; int count; args = (XtTypedArgList) __XtMalloc((unsigned)(max_count * sizeof(XtTypedArg))); for(attr = va_arg(var, String), count = 0 ; attr != NULL; attr = va_arg(var, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { args[count].name = va_arg(var, String); args[count].type = va_arg(var, String); args[count].value = va_arg(var, XtArgVal); args[count].size = va_arg(var, int); ++count; } else if (strcmp(attr, XtVaNestedList) == 0) { count += NestedArgtoTypedArg(&args[count], va_arg(var, XtTypedArgList)); } else { args[count].name = attr; args[count].type = NULL; args[count].value = va_arg(var, XtArgVal); ++count; } } *args_return = args; *num_args_return = count; } edArg conversion needs non-NULL widget handle", (String *)NULL, (Cardinal *)NULL); return(0); } /* again we assume that the XtResourceList is un-compiled */ for (; num_resources--; resources++) if (strcmp(typed_arg->name, resources->resource_name) == 0) libXt-1.1.5/src/Event.c000064401431060000012000001366251252061032400151050ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "Shell.h" #include "StringDefs.h" typedef struct _XtEventRecExt { int type; XtPointer select_data[1]; /* actual dimension is [mask] */ } XtEventRecExt; #define EXT_TYPE(p) (((XtEventRecExt*) ((p)+1))->type) #define EXT_SELECT_DATA(p,n) (((XtEventRecExt*) ((p)+1))->select_data[n]) #define NonMaskableMask ((EventMask)0x80000000L) /* * These are definitions to make the code that handles exposure compresssion * easier to read. * * COMP_EXPOSE - The compression exposure field of "widget" * COMP_EXPOSE_TYPE - The type of compression (lower 4 bits of COMP_EXPOSE. * GRAPHICS_EXPOSE - TRUE if the widget wants graphics expose events * dispatched. * NO_EXPOSE - TRUE if the widget wants No expose events dispatched. */ #define COMP_EXPOSE (widget->core.widget_class->core_class.compress_exposure) #define COMP_EXPOSE_TYPE (COMP_EXPOSE & 0x0f) #define GRAPHICS_EXPOSE ((XtExposeGraphicsExpose & COMP_EXPOSE) || \ (XtExposeGraphicsExposeMerged & COMP_EXPOSE)) #define NO_EXPOSE (XtExposeNoExpose & COMP_EXPOSE) EventMask XtBuildEventMask( Widget widget) { XtEventTable ev; EventMask mask = 0L; WIDGET_TO_APPCON(widget); LOCK_APP(app); for (ev = widget->core.event_table; ev != NULL; ev = ev->next) if (ev->select) { if (!ev->has_type_specifier) mask |= ev->mask; else { if (EXT_TYPE(ev) < LASTEvent) { Cardinal i; for (i = 0; i < ev->mask; i++) if (EXT_SELECT_DATA(ev, i)) mask |= *(EventMask*)EXT_SELECT_DATA(ev, i); } } } LOCK_PROCESS; if (widget->core.widget_class->core_class.expose != NULL) mask |= ExposureMask; if (widget->core.widget_class->core_class.visible_interest) mask |= VisibilityChangeMask; UNLOCK_PROCESS; if (widget->core.tm.translations) mask |= widget->core.tm.translations->eventMask; mask = mask & ~NonMaskableMask; UNLOCK_APP(app); return mask; } static void CallExtensionSelector( Widget widget, ExtSelectRec* rec, Boolean forceCall) { XtEventRec* p; XtPointer* data; int* types; Cardinal i, count = 0; for (p = widget->core.event_table; p != NULL; p = p->next) if (p->has_type_specifier && EXT_TYPE(p) >= rec->min && EXT_TYPE(p) <= rec->max) count += p->mask; if (count == 0 && !forceCall) return; data = (XtPointer *) ALLOCATE_LOCAL(count * sizeof (XtPointer)); types = (int *) ALLOCATE_LOCAL(count * sizeof (int)); count = 0; for (p = widget->core.event_table; p != NULL; p = p->next) if (p->has_type_specifier && EXT_TYPE(p) >= rec->min && EXT_TYPE(p) <= rec->max) for (i =0; i < p->mask; i++) { types[count] = EXT_TYPE(p); data[count++] = EXT_SELECT_DATA(p, i); } (*rec->proc)(widget, types, data, count, rec->client_data); DEALLOCATE_LOCAL((char*) types); DEALLOCATE_LOCAL((char*) data); } static void RemoveEventHandler( Widget widget, XtPointer select_data, int type, Boolean has_type_specifier, Boolean other, XtEventHandler proc, XtPointer closure, Boolean raw) { XtEventRec *p, **pp; EventMask eventMask, oldMask = XtBuildEventMask(widget); if (raw) raw = 1; pp = &widget->core.event_table; while ((p = *pp) && (p->proc != proc || p->closure != closure || p->select == raw || has_type_specifier != p->has_type_specifier || (has_type_specifier && EXT_TYPE(p) != type))) pp = &p->next; if (!p) return; /* un-register it */ if (!has_type_specifier) { eventMask = *(EventMask*)select_data; eventMask &= ~NonMaskableMask; if (other) eventMask |= NonMaskableMask; p->mask &= ~eventMask; } else { Cardinal i; /* p->mask specifies count of EXT_SELECT_DATA(p,i) * search through the list of selection data, if not found * dont remove this handler */ for (i = 0; i < p->mask && select_data != EXT_SELECT_DATA(p,i);) i++; if (i == p->mask) return; if (p->mask == 1) p->mask = 0; else { p->mask--; while (i < p->mask) { EXT_SELECT_DATA(p,i) = EXT_SELECT_DATA(p, i+1); i++; } } } if (!p->mask) { /* delete it entirely */ *pp = p->next; XtFree((char *)p); } /* Reset select mask if realized and not raw. */ if ( !raw && XtIsRealized(widget) && !widget->core.being_destroyed) { EventMask mask = XtBuildEventMask(widget); Display* dpy = XtDisplay (widget); if (oldMask != mask) XSelectInput(dpy, XtWindow(widget), mask); if (has_type_specifier) { XtPerDisplay pd = _XtGetPerDisplay(dpy); int i; for (i = 0; i < pd->ext_select_count; i++) { if (type >= pd->ext_select_list[i].min && type <= pd->ext_select_list[i].max) { CallExtensionSelector(widget, pd->ext_select_list+i, TRUE); break; } if (type < pd->ext_select_list[i].min) break; } } } } /* Function Name: AddEventHandler * Description: An Internal routine that does the actual work of * adding the event handlers. * Arguments: widget - widget to register an event handler for. * eventMask - events to mask for. * other - pass non maskable events to this proceedure. * proc - proceedure to register. * closure - data to pass to the event hander. * position - where to add this event handler. * force_new_position - If the element is already in the * list, this will force it to the * beginning or end depending on position. * raw - If FALSE call XSelectInput for events in mask. * Returns: none */ static void AddEventHandler( Widget widget, XtPointer select_data, int type, Boolean has_type_specifier, Boolean other, XtEventHandler proc, XtPointer closure, XtListPosition position, Boolean force_new_position, Boolean raw) { register XtEventRec *p, **pp; EventMask oldMask = 0, eventMask = 0; if (!has_type_specifier) { eventMask = *(EventMask*)select_data & ~NonMaskableMask; if (other) eventMask |= NonMaskableMask; if (!eventMask) return; } else if (!type) return; if (XtIsRealized(widget) && !raw) oldMask = XtBuildEventMask(widget); if (raw) raw = 1; pp = &widget->core.event_table; while ((p = *pp) && (p->proc != proc || p->closure != closure || p->select == raw || has_type_specifier != p->has_type_specifier || (has_type_specifier && EXT_TYPE(p) != type))) pp = &p->next; if (!p) { /* New proc to add to list */ if (has_type_specifier) { p = (XtEventRec*) __XtMalloc(sizeof(XtEventRec) + sizeof(XtEventRecExt)); EXT_TYPE(p) = type; EXT_SELECT_DATA(p,0) = select_data; p->mask = 1; p->has_type_specifier = True; } else { p = (XtEventRec*) __XtMalloc(sizeof(XtEventRec)); p->mask = eventMask; p->has_type_specifier = False; } p->proc = proc; p->closure = closure; p->select = ! raw; if (position == XtListHead) { p->next = widget->core.event_table; widget->core.event_table = p; pp = &widget->core.event_table; } else { *pp = p; p->next = NULL; } } else { if (force_new_position) { *pp = p->next; if (position == XtListHead) { p->next = widget->core.event_table; widget->core.event_table = p; } else { /* * Find the last element in the list. */ while (*pp) pp = &(*pp)->next; *pp = p; p->next = NULL; } } if (!has_type_specifier) p->mask |= eventMask; else { Cardinal i; /* p->mask specifies count of EXT_SELECT_DATA(p,i) */ for (i = 0; i < p->mask && select_data != EXT_SELECT_DATA(p,i); ) i++; if (i == p->mask) { p = (XtEventRec*) XtRealloc((char*)p, sizeof(XtEventRec) + sizeof(XtEventRecExt) + p->mask * sizeof(XtPointer)); EXT_SELECT_DATA(p,i) = select_data; p->mask++; *pp = p; } } } if (XtIsRealized(widget) && !raw) { EventMask mask = XtBuildEventMask(widget); Display* dpy = XtDisplay (widget); if (oldMask != mask) XSelectInput(dpy, XtWindow(widget), mask); if (has_type_specifier) { XtPerDisplay pd = _XtGetPerDisplay (dpy); int i; for (i = 0; i < pd->ext_select_count; i++) { if (type >= pd->ext_select_list[i].min && type <= pd->ext_select_list[i].max) { CallExtensionSelector(widget, pd->ext_select_list+i, FALSE); break; } if (type < pd->ext_select_list[i].min) break; } } } } void XtRemoveEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure) { WIDGET_TO_APPCON(widget); LOCK_APP(app); RemoveEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, FALSE); UNLOCK_APP(app); } void XtAddEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure) { WIDGET_TO_APPCON(widget); LOCK_APP(app); AddEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, XtListTail, FALSE, FALSE); UNLOCK_APP(app); } void XtInsertEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure, XtListPosition position) { WIDGET_TO_APPCON(widget); LOCK_APP(app); AddEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, position, TRUE, FALSE); UNLOCK_APP(app); } void XtRemoveRawEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure) { WIDGET_TO_APPCON(widget); LOCK_APP(app); RemoveEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, TRUE); UNLOCK_APP(app); } void XtInsertRawEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure, XtListPosition position) { WIDGET_TO_APPCON(widget); LOCK_APP(app); AddEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, position, TRUE, TRUE); UNLOCK_APP(app); } void XtAddRawEventHandler( Widget widget, EventMask eventMask, _XtBoolean other, XtEventHandler proc, XtPointer closure) { WIDGET_TO_APPCON(widget); LOCK_APP(app); AddEventHandler(widget, (XtPointer) &eventMask, 0, FALSE, other, proc, closure, XtListTail, FALSE, TRUE); UNLOCK_APP(app); } void XtRemoveEventTypeHandler( Widget widget, int type, XtPointer select_data, XtEventHandler proc, XtPointer closure) { WIDGET_TO_APPCON(widget); LOCK_APP(app); RemoveEventHandler(widget, select_data, type, TRUE, FALSE, proc, closure, FALSE); UNLOCK_APP(app); } void XtInsertEventTypeHandler( Widget widget, int type, XtPointer select_data, XtEventHandler proc, XtPointer closure, XtListPosition position) { WIDGET_TO_APPCON(widget); LOCK_APP(app); AddEventHandler(widget, select_data, type, TRUE, FALSE, proc, closure, position, TRUE, FALSE); UNLOCK_APP(app); } typedef struct _WWPair { struct _WWPair *next; Window window; Widget widget; } *WWPair; typedef struct _WWTable { unsigned int mask; /* size of hash table - 1 */ unsigned int rehash; /* mask - 2 */ unsigned int occupied; /* number of occupied entries */ unsigned int fakes; /* number occupied by WWfake */ Widget *entries; /* the entries */ WWPair pairs; /* bogus entries */ } *WWTable; static const WidgetRec WWfake; /* placeholder for deletions */ #define WWHASH(tab,win) ((win) & tab->mask) #define WWREHASHVAL(tab,win) ((((win) % tab->rehash) + 2) | 1) #define WWREHASH(tab,idx,rehash) ((idx + rehash) & tab->mask) #define WWTABLE(display) (_XtGetPerDisplay(display)->WWtable) static void ExpandWWTable(WWTable); void XtRegisterDrawable( Display* display, Drawable drawable, Widget widget) { WWTable tab; int idx, rehash; Widget entry; Window window = (Window) drawable; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; tab = WWTABLE(display); if (window != XtWindow(widget)) { WWPair pair; pair = XtNew(struct _WWPair); pair->next = tab->pairs; pair->window = window; pair->widget = widget; tab->pairs = pair; UNLOCK_PROCESS; UNLOCK_APP(app); return; } if ((tab->occupied + (tab->occupied >> 2)) > tab->mask) ExpandWWTable(tab); idx = WWHASH(tab, window); if ((entry = tab->entries[idx]) && entry != &WWfake) { rehash = WWREHASHVAL(tab, window); do { idx = WWREHASH(tab, idx, rehash); } while ((entry = tab->entries[idx]) && entry != &WWfake); } if (!entry) tab->occupied++; else if (entry == &WWfake) tab->fakes--; tab->entries[idx] = widget; UNLOCK_PROCESS; UNLOCK_APP(app); } void XtUnregisterDrawable( Display* display, Drawable drawable) { WWTable tab; int idx, rehash; Widget entry; Window window = (Window) drawable; Widget widget = XtWindowToWidget (display, window); DPY_TO_APPCON(display); if (widget == NULL) return; LOCK_APP(app); LOCK_PROCESS; tab = WWTABLE(display); if (window != XtWindow(widget)) { WWPair *prev, pair; prev = &tab->pairs; while ((pair = *prev) && pair->window != window) prev = &pair->next; if (pair) { *prev = pair->next; XtFree((char *)pair); } UNLOCK_PROCESS; UNLOCK_APP(app); return; } idx = WWHASH(tab, window); if ((entry = tab->entries[idx])) { if (entry != widget) { rehash = WWREHASHVAL(tab, window); do { idx = WWREHASH(tab, idx, rehash); if (!(entry = tab->entries[idx])) { UNLOCK_PROCESS; UNLOCK_APP(app); return; } } while (entry != widget); } tab->entries[idx] = (Widget)&WWfake; tab->fakes++; } UNLOCK_PROCESS; UNLOCK_APP(app); } static void ExpandWWTable( register WWTable tab) { unsigned int oldmask; register Widget *oldentries, *entries; register Cardinal oldidx, newidx, rehash; register Widget entry; LOCK_PROCESS; oldmask = tab->mask; oldentries = tab->entries; tab->occupied -= tab->fakes; tab->fakes = 0; if ((tab->occupied + (tab->occupied >> 2)) > tab->mask) { tab->mask = (tab->mask << 1) + 1; tab->rehash = tab->mask - 2; } entries = tab->entries = (Widget *) __XtCalloc(tab->mask+1, sizeof(Widget)); for (oldidx = 0; oldidx <= oldmask; oldidx++) { if ((entry = oldentries[oldidx]) && entry != &WWfake) { newidx = WWHASH(tab, XtWindow(entry)); if (entries[newidx]) { rehash = WWREHASHVAL(tab, XtWindow(entry)); do { newidx = WWREHASH(tab, newidx, rehash); } while (entries[newidx]); } entries[newidx] = entry; } } XtFree((char *)oldentries); UNLOCK_PROCESS; } Widget XtWindowToWidget( register Display *display, register Window window) { register WWTable tab; register int idx, rehash; register Widget entry; WWPair pair; DPY_TO_APPCON(display); if (!window) return NULL; LOCK_APP(app); LOCK_PROCESS; tab = WWTABLE(display); idx = WWHASH(tab, window); if ((entry = tab->entries[idx]) && XtWindow(entry) != window) { rehash = WWREHASHVAL(tab, window); do { idx = WWREHASH(tab, idx, rehash); } while ((entry = tab->entries[idx]) && XtWindow(entry) != window); } if (entry) { UNLOCK_PROCESS; UNLOCK_APP(app); return entry; } for (pair = tab->pairs; pair; pair = pair->next) { if (pair->window == window) { entry = pair->widget; UNLOCK_PROCESS; UNLOCK_APP(app); return entry; } } UNLOCK_PROCESS; UNLOCK_APP(app); return NULL; } void _XtAllocWWTable( XtPerDisplay pd) { register WWTable tab; tab = (WWTable) __XtMalloc(sizeof(struct _WWTable)); tab->mask = 0x7f; tab->rehash = tab->mask - 2; tab->entries = (Widget *) __XtCalloc(tab->mask+1, sizeof(Widget)); tab->occupied = 0; tab->fakes = 0; tab->pairs = NULL; pd->WWtable = tab; } void _XtFreeWWTable( register XtPerDisplay pd) { register WWPair pair, next; for (pair = pd->WWtable->pairs; pair; pair = next) { next = pair->next; XtFree((char *)pair); } XtFree((char *)pd->WWtable->entries); XtFree((char *)pd->WWtable); } #define EHMAXSIZE 25 /* do not make whopping big */ static Boolean CallEventHandlers( Widget widget, XEvent *event, EventMask mask) { register XtEventRec *p; XtEventHandler *proc; XtPointer *closure; XtEventHandler procs[EHMAXSIZE]; XtPointer closures[EHMAXSIZE]; Boolean cont_to_disp = True; int i, numprocs; /* Have to copy the procs into an array, because one of them might * call XtRemoveEventHandler, which would break our linked list. */ numprocs = 0; for (p=widget->core.event_table; p; p = p->next) { if ((!p->has_type_specifier && (mask & p->mask)) || (p->has_type_specifier && event->type == EXT_TYPE(p))) numprocs++; } if (numprocs > EHMAXSIZE) { proc = (XtEventHandler *)__XtMalloc(numprocs * (sizeof(XtEventHandler) + sizeof(XtPointer))); closure = (XtPointer *)(proc + numprocs); } else { proc = procs; closure = closures; } numprocs = 0; for (p=widget->core.event_table; p; p = p->next) { if ((!p->has_type_specifier && (mask & p->mask)) || (p->has_type_specifier && event->type == EXT_TYPE(p))) { proc[numprocs] = p->proc; closure[numprocs] = p->closure; numprocs++; } } /* FUNCTIONS CALLED THROUGH POINTER proc: Selection.c:ReqCleanup, "Shell.c":EventHandler, PassivGrab.c:ActiveHandler, PassivGrab.c:RealizeHandler, Keyboard.c:QueryEventMask, _XtHandleFocus, Selection.c:HandleSelectionReplies, Selection.c:HandleGetIncrement, Selection.c:HandleIncremental, Selection.c:HandlePropertyGone, Selection.c:HandleSelectionEvents */ for (i = 0; i < numprocs && cont_to_disp; i++) (*(proc[i]))(widget, closure[i], event, &cont_to_disp); if (numprocs > EHMAXSIZE) XtFree((char *)proc); return cont_to_disp; } static void CompressExposures(XEvent *, Widget); #define KnownButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* keep this SMALL to avoid blowing stack cache! */ /* because some compilers allocate all local locals on procedure entry */ #define EHSIZE 4 Boolean XtDispatchEventToWidget( Widget widget, XEvent* event) { register XtEventRec *p; Boolean was_dispatched = False; Boolean call_tm = False; Boolean cont_to_disp; EventMask mask; WIDGET_TO_APPCON(widget); LOCK_APP(app); mask = _XtConvertTypeToMask(event->type); if (event->type == MotionNotify) mask |= (event->xmotion.state & KnownButtons); LOCK_PROCESS; if ( (mask == ExposureMask) || ((event->type == NoExpose) && NO_EXPOSE) || ((event->type == GraphicsExpose) && GRAPHICS_EXPOSE) ) { if (widget->core.widget_class->core_class.expose != NULL ) { /* We need to mask off the bits that could contain the information * about whether or not we desire Graphics and NoExpose events. */ if ( (COMP_EXPOSE_TYPE == XtExposeNoCompress) || (event->type == NoExpose) ) (*widget->core.widget_class->core_class.expose) (widget, event, (Region)NULL); else { CompressExposures(event, widget); } was_dispatched = True; } } if ((mask == VisibilityChangeMask) && XtClass(widget)->core_class.visible_interest) { was_dispatched = True; /* our visibility just changed... */ switch (((XVisibilityEvent *)event)->state) { case VisibilityUnobscured: widget->core.visible = TRUE; break; case VisibilityPartiallyObscured: /* what do we want to say here? */ /* well... some of us is visible */ widget->core.visible = TRUE; break; case VisibilityFullyObscured: widget->core.visible = FALSE; /* do we want to mark our children obscured? */ break; } } UNLOCK_PROCESS; /* to maintain "copy" semantics we check TM now but call later */ if (widget->core.tm.translations && (mask & widget->core.tm.translations->eventMask)) call_tm = True; cont_to_disp = True; p=widget->core.event_table; if (p) { if (p->next) { XtEventHandler proc[EHSIZE]; XtPointer closure[EHSIZE]; int numprocs = 0; /* Have to copy the procs into an array, because one of them might * call XtRemoveEventHandler, which would break our linked list. */ for (; p; p = p->next) { if ((!p->has_type_specifier && (mask & p->mask)) || (p->has_type_specifier && event->type == EXT_TYPE(p))) { if (numprocs >= EHSIZE) break; proc[numprocs] = p->proc; closure[numprocs] = p->closure; numprocs++; } } if (numprocs) { if (p) { cont_to_disp = CallEventHandlers(widget, event, mask); } else { int i; for (i = 0; i < numprocs && cont_to_disp; i++) (*(proc[i]))(widget, closure[i], event, &cont_to_disp); /* FUNCTIONS CALLED THROUGH POINTER proc: Selection.c:ReqCleanup, "Shell.c":EventHandler, PassivGrab.c:ActiveHandler, PassivGrab.c:RealizeHandler, Keyboard.c:QueryEventMask, _XtHandleFocus, Selection.c:HandleSelectionReplies, Selection.c:HandleGetIncrement, Selection.c:HandleIncremental, Selection.c:HandlePropertyGone, Selection.c:HandleSelectionEvents */ } was_dispatched = True; } } else if ((!p->has_type_specifier && (mask & p->mask)) || (p->has_type_specifier && event->type == EXT_TYPE(p))) { (*p->proc)(widget, p->closure, event, &cont_to_disp); was_dispatched = True; } } if (call_tm && cont_to_disp) _XtTranslateEvent(widget, event); UNLOCK_APP(app); return (was_dispatched|call_tm); } /* * This structure is passed into the check exposure proc. */ typedef struct _CheckExposeInfo { int type1, type2; /* Types of events to check for. */ Boolean maximal; /* Ignore non-exposure events? */ Boolean non_matching; /* Was there an event that did not match either type? */ Window window; /* Window to match. */ } CheckExposeInfo; #define GetCount(ev) (((XExposeEvent *)(ev))->count) static void SendExposureEvent(XEvent *, Widget, XtPerDisplay); static Bool CheckExposureEvent(Display *, XEvent *, char *); static void AddExposureToRectangularRegion(XEvent *, Region); /* Function Name: CompressExposures * Description: Handles all exposure compression * Arguments: event - the xevent that is to be dispatched * widget - the widget that this event occured in. * Returns: none. * * NOTE: Event must be of type Expose or GraphicsExpose. */ static void CompressExposures( XEvent * event, Widget widget) { CheckExposeInfo info; int count; Display* dpy = XtDisplay (widget); XtPerDisplay pd = _XtGetPerDisplay(dpy); XtEnum comp_expose; XtEnum comp_expose_type; Boolean no_region; LOCK_PROCESS; comp_expose = COMP_EXPOSE; UNLOCK_PROCESS; comp_expose_type = comp_expose & 0x0f; no_region = ((comp_expose & XtExposeNoRegion) ? True : False); if (no_region) AddExposureToRectangularRegion(event, pd->region); else XtAddExposureToRegion(event, pd->region); if ( GetCount(event) != 0 ) return; if ((comp_expose_type == XtExposeCompressSeries) || (XEventsQueued(dpy, QueuedAfterReading) == 0)) { SendExposureEvent(event, widget, pd); return; } if (comp_expose & XtExposeGraphicsExposeMerged) { info.type1 = Expose; info.type2 = GraphicsExpose; } else { info.type1 = event->type; info.type2 = 0; } info.maximal = (comp_expose_type == XtExposeCompressMaximal); info.non_matching = FALSE; info.window = XtWindow(widget); /* * We have to be very careful here not to hose down the processor * when blocking until count gets to zero. * * First, check to see if there are any events in the queue for this * widget, and of the correct type. * * Once we cannot find any more events, check to see that count is zero. * If it is not then block until we get another exposure event. * * If we find no more events, and count on the last one we saw was zero we * we can be sure that all events have been processed. * * Unfortunately, we wind up having to look at the entire queue * event if we're not doing Maximal compression, due to the * semantics of XCheckIfEvent (we can't abort without re-ordering * the event queue as a side-effect). */ count = 0; while (TRUE) { XEvent event_return; if (XCheckIfEvent(dpy, &event_return, CheckExposureEvent, (char *) &info)) { count = GetCount(&event_return); if (no_region) AddExposureToRectangularRegion(&event_return, pd->region); else XtAddExposureToRegion(&event_return, pd->region); } else if (count != 0) { XIfEvent(dpy, &event_return, CheckExposureEvent, (char *) &info); count = GetCount(&event_return); if (no_region) AddExposureToRectangularRegion(&event_return, pd->region); else XtAddExposureToRegion(&event_return, pd->region); } else /* count == 0 && XCheckIfEvent Failed. */ break; } SendExposureEvent(event, widget, pd); } void XtAddExposureToRegion( XEvent *event, Region region) { XRectangle rect; XExposeEvent *ev = (XExposeEvent *) event; /* These Expose and GraphicsExpose fields are at identical offsets */ if (event->type == Expose || event->type == GraphicsExpose) { rect.x = ev->x; rect.y = ev->y; rect.width = ev->width; rect.height = ev->height; XUnionRectWithRegion(&rect, region, region); } } #ifndef MAX #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif static void AddExposureToRectangularRegion( XEvent *event, /* when called internally, type is always appropriate */ Region region) { XRectangle rect; XExposeEvent *ev = (XExposeEvent *) event; /* These Expose and GraphicsExpose fields are at identical offsets */ rect.x = ev->x; rect.y = ev->y; rect.width = ev->width; rect.height = ev->height; if (XEmptyRegion(region)) { XUnionRectWithRegion(&rect, region, region); } else { XRectangle merged, bbox; XClipBox(region, &bbox); merged.x = MIN(rect.x, bbox.x); merged.y = MIN(rect.y, bbox.y); merged.width = MAX(rect.x + rect.width, bbox.x + bbox.width) - merged.x; merged.height = MAX(rect.y + rect.height, bbox.y + bbox.height) - merged.y; XUnionRectWithRegion(&merged, region, region); } } static Region nullRegion; /* READ-ONLY VARIABLES: nullRegion */ void _XtEventInitialize(void) { #ifndef __lock_lint nullRegion = XCreateRegion(); #endif } /* Function Name: SendExposureEvent * Description: Sets the x, y, width, and height of the event * to be the clip box of Expose Region. * Arguments: event - the X Event to mangle; Expose or GraphicsExpose. * widget - the widget that this event occured in. * pd - the per display information for this widget. * Returns: none. */ static void SendExposureEvent( XEvent * event, Widget widget, XtPerDisplay pd) { XtExposeProc expose; XRectangle rect; XtEnum comp_expose; XExposeEvent *ev = (XExposeEvent *) event; XClipBox(pd->region, &rect); ev->x = rect.x; ev->y = rect.y; ev->width = rect.width; ev->height = rect.height; LOCK_PROCESS; comp_expose = COMP_EXPOSE; expose = widget->core.widget_class->core_class.expose; UNLOCK_PROCESS; if (comp_expose & XtExposeNoRegion) (*expose)(widget, event, NULL); else (*expose)(widget, event, pd->region); (void) XIntersectRegion(nullRegion, pd->region, pd->region); } /* Function Name: CheckExposureEvent * Description: Checks the event queue for an expose event * Arguments: display - the display connection. * event - the event to check. * arg - a pointer to the exposure info structure. * Returns: TRUE if we found an event of the correct type * with the right window. * * NOTE: The only valid types (info.type1 and info.type2) are Expose * and GraphicsExpose. */ /* ARGSUSED */ static Bool CheckExposureEvent( Display * disp, XEvent * event, char * arg) { CheckExposeInfo * info = ((CheckExposeInfo *) arg); if ( (info->type1 == event->type) || (info->type2 == event->type)) { if (!info->maximal && info->non_matching) return FALSE; if (event->type == GraphicsExpose) return(event->xgraphicsexpose.drawable == info->window); return(event->xexpose.window == info->window); } info->non_matching = TRUE; return(FALSE); } static EventMask const masks[] = { 0, /* Error, should never see */ 0, /* Reply, should never see */ KeyPressMask, /* KeyPress */ KeyReleaseMask, /* KeyRelease */ ButtonPressMask, /* ButtonPress */ ButtonReleaseMask, /* ButtonRelease */ PointerMotionMask /* MotionNotify */ | ButtonMotionMask, EnterWindowMask, /* EnterNotify */ LeaveWindowMask, /* LeaveNotify */ FocusChangeMask, /* FocusIn */ FocusChangeMask, /* FocusOut */ KeymapStateMask, /* KeymapNotify */ ExposureMask, /* Expose */ NonMaskableMask, /* GraphicsExpose, in GC */ NonMaskableMask, /* NoExpose, in GC */ VisibilityChangeMask, /* VisibilityNotify */ SubstructureNotifyMask, /* CreateNotify */ StructureNotifyMask /* DestroyNotify */ | SubstructureNotifyMask, StructureNotifyMask /* UnmapNotify */ | SubstructureNotifyMask, StructureNotifyMask /* MapNotify */ | SubstructureNotifyMask, SubstructureRedirectMask, /* MapRequest */ StructureNotifyMask /* ReparentNotify */ | SubstructureNotifyMask, StructureNotifyMask /* ConfigureNotify */ | SubstructureNotifyMask, SubstructureRedirectMask, /* ConfigureRequest */ StructureNotifyMask /* GravityNotify */ | SubstructureNotifyMask, ResizeRedirectMask, /* ResizeRequest */ StructureNotifyMask /* CirculateNotify */ | SubstructureNotifyMask, SubstructureRedirectMask, /* CirculateRequest */ PropertyChangeMask, /* PropertyNotify */ NonMaskableMask, /* SelectionClear */ NonMaskableMask, /* SelectionRequest */ NonMaskableMask, /* SelectionNotify */ ColormapChangeMask, /* ColormapNotify */ NonMaskableMask, /* ClientMessage */ NonMaskableMask /* MappingNotify */ }; EventMask _XtConvertTypeToMask ( int eventType) { if ((Cardinal) eventType < XtNumber(masks)) return masks[eventType]; else return NoEventMask; } Boolean _XtOnGrabList( register Widget widget, XtGrabRec *grabList) { register XtGrabRec* gl; for (; widget != NULL; widget = (Widget)widget->core.parent) { for (gl = grabList; gl != NULL; gl = gl->next) { if (gl->widget == widget) return TRUE; if (gl->exclusive) break; } } return FALSE; } static Widget LookupSpringLoaded( XtGrabList grabList) { XtGrabList gl; for (gl = grabList; gl != NULL; gl = gl->next) { if (gl->spring_loaded) { if (XtIsSensitive(gl->widget)) return gl->widget; else return NULL; } if (gl->exclusive) break; } return NULL; } static Boolean DispatchEvent( XEvent* event, Widget widget) { if (event->type == EnterNotify && event->xcrossing.mode == NotifyNormal && widget->core.widget_class->core_class.compress_enterleave) { if (XPending(event->xcrossing.display)) { XEvent nextEvent; XPeekEvent(event->xcrossing.display, &nextEvent); if (nextEvent.type == LeaveNotify && event->xcrossing.window == nextEvent.xcrossing.window && nextEvent.xcrossing.mode == NotifyNormal && ((event->xcrossing.detail != NotifyInferior && nextEvent.xcrossing.detail != NotifyInferior) || (event->xcrossing.detail == NotifyInferior && nextEvent.xcrossing.detail == NotifyInferior))) { /* skip the enter/leave pair */ XNextEvent(event->xcrossing.display, &nextEvent); return False; } } } if (event->type == MotionNotify && widget->core.widget_class->core_class.compress_motion) { while (XPending(event->xmotion.display)) { XEvent nextEvent; XPeekEvent(event->xmotion.display, &nextEvent); if (nextEvent.type == MotionNotify && event->xmotion.window == nextEvent.xmotion.window && event->xmotion.subwindow == nextEvent.xmotion.subwindow) { /* replace the current event with the next one */ XNextEvent(event->xmotion.display, event); } else break; } } return XtDispatchEventToWidget(widget, event); } typedef enum _GrabType {pass, ignore, remap} GrabType; #if !defined(AIXV3) || !defined(AIXSHLIB) static /* AIX shared libraries are broken */ #endif Boolean _XtDefaultDispatcher( XEvent *event) { register Widget widget; GrabType grabType; XtPerDisplayInput pdi; XtGrabList grabList; Boolean was_dispatched = False; DPY_TO_APPCON(event->xany.display); /* the default dispatcher discards all extension events */ if (event->type >= LASTEvent) return False; LOCK_APP(app); switch (event->type) { case KeyPress: case KeyRelease: case ButtonPress: case ButtonRelease: grabType = remap; break; case MotionNotify: case EnterNotify: grabType = ignore; break; default: grabType = pass; break; } widget = XtWindowToWidget (event->xany.display, event->xany.window); pdi = _XtGetPerDisplayInput(event->xany.display); grabList = *_XtGetGrabList(pdi); if (widget == NULL) { if (grabType == remap && (widget = LookupSpringLoaded(grabList)) != NULL) { /* event occurred in a non-widget window, but we've promised also to dispatch it to the nearest accessible spring_loaded widget */ was_dispatched = (XFilterEvent(event, XtWindow(widget)) || XtDispatchEventToWidget(widget, event)); } else was_dispatched = XFilterEvent(event, None); } else if (grabType == pass) { if (event->type == LeaveNotify || event->type == FocusIn || event->type == FocusOut) { if (XtIsSensitive (widget)) was_dispatched = (XFilterEvent(event, XtWindow(widget)) || XtDispatchEventToWidget(widget, event)); } else was_dispatched = (XFilterEvent(event, XtWindow(widget)) || XtDispatchEventToWidget(widget, event)); } else if (grabType == ignore) { if ((grabList == NULL || _XtOnGrabList(widget, grabList)) && XtIsSensitive(widget)) { was_dispatched = (XFilterEvent(event, XtWindow(widget)) || DispatchEvent(event, widget)); } } else if (grabType == remap) { EventMask mask = _XtConvertTypeToMask(event->type); Widget dspWidget; Boolean was_filtered = False; dspWidget = _XtFindRemapWidget(event, widget, mask, pdi); if ((grabList == NULL ||_XtOnGrabList(dspWidget, grabList)) && XtIsSensitive(dspWidget)) { if ((was_filtered = XFilterEvent(event, XtWindow(dspWidget)))) { /* If this event activated a device grab, release it. */ _XtUngrabBadGrabs(event, widget, mask, pdi); was_dispatched = True; } else was_dispatched = XtDispatchEventToWidget(dspWidget, event); } else _XtUngrabBadGrabs(event, widget, mask, pdi); if (!was_filtered) { /* Also dispatch to nearest accessible spring_loaded. */ /* Fetch this afterward to reflect modal list changes */ grabList = *_XtGetGrabList(pdi); widget = LookupSpringLoaded(grabList); if (widget != NULL && widget != dspWidget) { was_dispatched = (XFilterEvent(event, XtWindow(widget)) || XtDispatchEventToWidget(widget, event) || was_dispatched); } } } UNLOCK_APP(app); return was_dispatched; } Boolean XtDispatchEvent ( XEvent *event) { Boolean was_dispatched, safe; int dispatch_level; int starting_count; XtPerDisplay pd; Time time = 0; XtEventDispatchProc dispatch = _XtDefaultDispatcher; XtAppContext app = XtDisplayToApplicationContext(event->xany.display); LOCK_APP(app); dispatch_level = ++app->dispatch_level; starting_count = app->destroy_count; switch (event->type) { case KeyPress: case KeyRelease: time = event->xkey.time; break; case ButtonPress: case ButtonRelease: time = event->xbutton.time; break; case MotionNotify: time = event->xmotion.time; break; case EnterNotify: case LeaveNotify: time = event->xcrossing.time; break; case PropertyNotify: time = event->xproperty.time; break; case SelectionClear: time = event->xselectionclear.time; break; case MappingNotify: _XtRefreshMapping(event, True); break; } pd = _XtGetPerDisplay(event->xany.display); if (time) pd->last_timestamp = time; pd->last_event = *event; if (pd->dispatcher_list) { dispatch = pd->dispatcher_list[event->type]; if (dispatch == NULL) dispatch = _XtDefaultDispatcher; } was_dispatched = (*dispatch)(event); /* * To make recursive XtDispatchEvent work, we need to do phase 2 destroys * only on those widgets destroyed by this particular dispatch. * */ if (app->destroy_count > starting_count) _XtDoPhase2Destroy(app, dispatch_level); app->dispatch_level = dispatch_level - 1; if ((safe = _XtSafeToDestroy(app))) { if (app->dpy_destroy_count != 0) _XtCloseDisplays(app); if (app->free_bindings) _XtDoFreeBindings(app); } UNLOCK_APP(app); LOCK_PROCESS; if (_XtAppDestroyCount != 0 && safe) _XtDestroyAppContexts(); UNLOCK_PROCESS; return was_dispatched; } /* ARGSUSED */ static void GrabDestroyCallback( Widget widget, XtPointer closure, XtPointer call_data) { /* Remove widget from grab list if it destroyed */ XtRemoveGrab(widget); } static XtGrabRec *NewGrabRec( Widget widget, Boolean exclusive, Boolean spring_loaded) { register XtGrabList gl; gl = XtNew(XtGrabRec); gl->next = NULL; gl->widget = widget; gl->exclusive = exclusive; gl->spring_loaded = spring_loaded; return gl; } void XtAddGrab( Widget widget, _XtBoolean exclusive, _XtBoolean spring_loaded) { register XtGrabList gl; XtGrabList *grabListPtr; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); LOCK_PROCESS; grabListPtr = _XtGetGrabList(_XtGetPerDisplayInput(XtDisplay(widget))); if (spring_loaded && !exclusive) { XtAppWarningMsg(app, "grabError", "xtAddGrab", XtCXtToolkitError, "XtAddGrab requires exclusive grab if spring_loaded is TRUE", (String *) NULL, (Cardinal *) NULL); exclusive = TRUE; } gl = NewGrabRec(widget, exclusive, spring_loaded); gl->next = *grabListPtr; *grabListPtr = gl; XtAddCallback (widget, XtNdestroyCallback, GrabDestroyCallback, (XtPointer) NULL); UNLOCK_PROCESS; UNLOCK_APP(app); } void XtRemoveGrab( Widget widget) { register XtGrabList gl; register Boolean done; XtGrabList *grabListPtr; XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); LOCK_PROCESS; grabListPtr = _XtGetGrabList(_XtGetPerDisplayInput(XtDisplay(widget))); for (gl = *grabListPtr; gl != NULL; gl = gl->next) { if (gl->widget == widget) break; } if (gl == NULL) { XtAppWarningMsg(app, "grabError","xtRemoveGrab",XtCXtToolkitError, "XtRemoveGrab asked to remove a widget not on the list", (String *)NULL, (Cardinal *)NULL); UNLOCK_PROCESS; UNLOCK_APP(app); return; } do { gl = *grabListPtr; done = (gl->widget == widget); *grabListPtr = gl->next; XtRemoveCallback(gl->widget, XtNdestroyCallback, GrabDestroyCallback, (XtPointer)NULL); XtFree((char *)gl); } while (! done); UNLOCK_PROCESS; UNLOCK_APP(app); return; } void XtMainLoop(void) { XtAppMainLoop(_XtDefaultAppContext()); } void XtAppMainLoop( XtAppContext app) { LOCK_APP(app); do { XtAppProcessEvent(app, XtIMAll); } while(app->exit_flag == FALSE); UNLOCK_APP(app); } void _XtFreeEventTable( XtEventTable *event_table) { register XtEventTable event; event = *event_table; while (event != NULL) { register XtEventTable next = event->next; XtFree((char *) event); event = next; } } Time XtLastTimestampProcessed( Display *dpy) { Time time; DPY_TO_APPCON(dpy); LOCK_APP(app); LOCK_PROCESS; time = _XtGetPerDisplay(dpy)->last_timestamp; UNLOCK_PROCESS; UNLOCK_APP(app); return(time); } XEvent* XtLastEventProcessed( Display* dpy) { XEvent* le = NULL; DPY_TO_APPCON(dpy); LOCK_APP(app); le = &_XtGetPerDisplay(dpy)->last_event; if (!le->xany.serial) le = NULL; UNLOCK_APP(app); return le; } void _XtSendFocusEvent( Widget child, int type) { child = XtIsWidget(child) ? child : _XtWindowedAncestor(child); if (XtIsSensitive(child) && !child->core.being_destroyed && XtIsRealized(child) && (XtBuildEventMask(child) & FocusChangeMask)) { XFocusChangeEvent event; Display* dpy = XtDisplay (child); event.type = type; event.serial = LastKnownRequestProcessed(dpy); event.send_event = True; event.display = dpy; event.window = XtWindow(child); event.mode = NotifyNormal; event.detail = NotifyAncestor; if (XFilterEvent((XEvent*)&event, XtWindow(child))) return; XtDispatchEventToWidget(child, (XEvent*)&event); } } static XtEventDispatchProc* NewDispatcherList(void) { XtEventDispatchProc* l = (XtEventDispatchProc*) __XtCalloc((Cardinal) 128, (Cardinal)sizeof(XtEventDispatchProc)); return l; } XtEventDispatchProc XtSetEventDispatcher( Display *dpy, int event_type, XtEventDispatchProc proc) { XtEventDispatchProc *list; XtEventDispatchProc old_proc; register XtPerDisplay pd; DPY_TO_APPCON(dpy); LOCK_APP(app); LOCK_PROCESS; pd = _XtGetPerDisplay(dpy); list = pd->dispatcher_list; if (!list) { if (proc) list = pd->dispatcher_list = NewDispatcherList(); else return _XtDefaultDispatcher; } old_proc = list[event_type]; list[event_type] = proc; if (old_proc == NULL) old_proc = _XtDefaultDispatcher; UNLOCK_PROCESS; UNLOCK_APP(app); return old_proc; } void XtRegisterExtensionSelector( Display *dpy, int min_event_type, int max_event_type, XtExtensionSelectProc proc, XtPointer client_data) { ExtSelectRec *e; XtPerDisplay pd; int i; DPY_TO_APPCON(dpy); if (dpy == NULL) XtErrorMsg("nullDisplay", "xtRegisterExtensionSelector", XtCXtToolkitError, "XtRegisterExtensionSelector requires a non-NULL display", (String *) NULL, (Cardinal *) NULL); LOCK_APP(app); LOCK_PROCESS; pd = _XtGetPerDisplay(dpy); for (i = 0; i < pd->ext_select_count; i++) { e = &pd->ext_select_list[i]; if (e->min == min_event_type && e->max == max_event_type) { e->proc = proc; e->client_data = client_data; return; } if ((min_event_type >= e->min && min_event_type <= e->max) || (max_event_type >= e->min && max_event_type <= e->max)) { XtErrorMsg("rangeError", "xtRegisterExtensionSelector", XtCXtToolkitError, "Attempt to register multiple selectors for one extension event type", (String *) NULL, (Cardinal *) NULL); UNLOCK_PROCESS; UNLOCK_APP(app); return; } } pd->ext_select_count++; pd->ext_select_list = (ExtSelectRec *) XtRealloc((char *) pd->ext_select_list, pd->ext_select_count * sizeof(ExtSelectRec)); for (i = pd->ext_select_count - 1; i > 0; i--) { if (pd->ext_select_list[i-1].min > min_event_type) { pd->ext_select_list[i] = pd->ext_select_list[i-1]; } else break; } pd->ext_select_list[i].min = min_event_type; pd->ext_select_list[i].max = max_event_type; pd->ext_select_list[i].proc = proc; pd->ext_select_list[i].client_data = client_data; UNLOCK_PROCESS; UNLOCK_APP(app); } void _XtExtensionSelect( Widget widget) { int i; XtPerDisplay pd; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; pd = _XtGetPerDisplay(XtDisplay(widget)); for (i = 0; i < pd->ext_select_count; i++) { CallExtensionSelector(widget, pd->ext_select_list+i, FALSE); } UNLOCK_PROCESS; UNLOCK_APP(app); } terEvent(event, XtWindow(widget)) || XtDispatchEventToWidget(widget, event)); } else was_dislibXt-1.1.5/src/Hooks.c000064401431060000012000000101501252061032400150670ustar00alancstaff00002660200006/* Copyright 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /*LINTLIBRARY*/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "CreateI.h" static void FreeBlockHookList( Widget widget, /* unused (and invalid) */ XtPointer closure, /* ActionHook* */ XtPointer call_data) /* unused */ { BlockHook list = *(BlockHook*)closure; while (list != NULL) { BlockHook next = list->next; XtFree( (XtPointer)list ); list = next; } } XtBlockHookId XtAppAddBlockHook( XtAppContext app, XtBlockHookProc proc, XtPointer closure) { BlockHook hook = XtNew(BlockHookRec); LOCK_APP(app); hook->next = app->block_hook_list; hook->app = app; hook->proc = proc; hook->closure = closure; if (app->block_hook_list == NULL) { _XtAddCallback( &app->destroy_callbacks, FreeBlockHookList, (XtPointer)&app->block_hook_list ); } app->block_hook_list = hook; UNLOCK_APP(app); return (XtBlockHookId)hook; } void XtRemoveBlockHook( XtBlockHookId id) { BlockHook *p, hook = (BlockHook)id; XtAppContext app = hook->app; LOCK_APP(app); for (p = &app->block_hook_list; p != NULL && *p != hook; p = &(*p)->next); if (p == NULL) { #ifdef DEBUG XtAppWarningMsg(app, "badId", "xtRemoveBlockHook", XtCXtToolkitError, "XtRemoveBlockHook called with bad or old hook id", (String*)NULL, (Cardinal*)NULL); #endif /*DEBUG*/ UNLOCK_APP(app); return; } *p = hook->next; XtFree( (XtPointer)hook ); UNLOCK_APP(app); } static void DeleteShellFromHookObj( Widget shell, XtPointer closure, XtPointer call_data) { /* app_con is locked when this function is called */ Cardinal ii, jj; HookObject ho = (HookObject) closure; for (ii = 0; ii < ho->hooks.num_shells; ii++) if (ho->hooks.shells[ii] == shell) { /* collapse the list */ for (jj = ii; jj < ho->hooks.num_shells; jj++) { if ((jj+1) < ho->hooks.num_shells) ho->hooks.shells[jj] = ho->hooks.shells[jj+1]; } break; } ho->hooks.num_shells--; } #define SHELL_INCR 4 void _XtAddShellToHookObj( Widget shell) { /* app_con is locked when this function is called */ HookObject ho = (HookObject) XtHooksOfDisplay(XtDisplay(shell)); if (ho->hooks.num_shells == ho->hooks.max_shells) { ho->hooks.max_shells += SHELL_INCR; ho->hooks.shells = (WidgetList)XtRealloc((char*)ho->hooks.shells, ho->hooks.max_shells * sizeof (Widget)); } ho->hooks.shells[ho->hooks.num_shells++] = shell; XtAddCallback(shell, XtNdestroyCallback, DeleteShellFromHookObj, (XtPointer)ho); } Boolean _XtIsHookObject( Widget widget) { return (widget->core.widget_class == hookObjectClass); } Widget XtHooksOfDisplay( Display* dpy) { Widget retval; XtPerDisplay pd; DPY_TO_APPCON(dpy); LOCK_APP(app); pd = _XtGetPerDisplay(dpy); if (pd->hook_object == NULL) pd->hook_object = _XtCreateHookObj((Screen*)DefaultScreenOfDisplay(dpy)); retval = pd->hook_object; UNLOCK_APP(app); return retval; } libXt-1.1.5/src/HookObj.c000064401431060000012000000110341252061032400153410ustar00alancstaff00002660200006/* Copyright 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" /****************************************************************** * * Hook Object Resources * ******************************************************************/ static XtResource resources[] = { { XtNcreateHook, XtCCallback, XtRCallback, sizeof(XtPointer), XtOffsetOf(HookObjRec, hooks.createhook_callbacks), XtRCallback, (XtPointer)NULL}, { XtNchangeHook, XtCCallback, XtRCallback, sizeof(XtPointer), XtOffsetOf(HookObjRec, hooks.changehook_callbacks), XtRCallback, (XtPointer)NULL}, { XtNconfigureHook, XtCCallback, XtRCallback, sizeof(XtPointer), XtOffsetOf(HookObjRec, hooks.confighook_callbacks), XtRCallback, (XtPointer)NULL}, { XtNgeometryHook, XtCCallback, XtRCallback, sizeof(XtPointer), XtOffsetOf(HookObjRec, hooks.geometryhook_callbacks), XtRCallback, (XtPointer)NULL}, { XtNdestroyHook, XtCCallback, XtRCallback, sizeof(XtPointer), XtOffsetOf(HookObjRec, hooks.destroyhook_callbacks), XtRCallback, (XtPointer)NULL}, { XtNshells, XtCReadOnly, XtRWidgetList, sizeof(WidgetList), XtOffsetOf(HookObjRec, hooks.shells), XtRImmediate, (XtPointer) NULL }, { XtNnumShells, XtCReadOnly, XtRCardinal, sizeof(Cardinal), XtOffsetOf(HookObjRec, hooks.num_shells), XtRImmediate, (XtPointer) 0 } }; static void GetValuesHook(Widget widget, ArgList args, Cardinal *num_args); static void Initialize(Widget req, Widget new, ArgList args, Cardinal *num_args); externaldef(hookobjclassrec) HookObjClassRec hookObjClassRec = { { /* Object Class Part */ /* superclass */ (WidgetClass)&objectClassRec, /* class_name */ "Hook", /* widget_size */ sizeof(HookObjRec), /* class_initialize */ NULL, /* class_part_initialize*/ NULL, /* class_inited */ FALSE, /* initialize */ Initialize, /* initialize_hook */ NULL, /* realize */ NULL, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ NULL, /* get_values_hook */ GetValuesHook, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL }, { /* HookObj Class Part */ /* unused */ 0 } }; externaldef(hookObjectClass) WidgetClass hookObjectClass = (WidgetClass)&hookObjClassRec; static void FreeShellList( Widget w, XtPointer closure, XtPointer call_data) { HookObject h = (HookObject)w; if (h->hooks.shells != NULL) XtFree((char*)h->hooks.shells); } static void Initialize( Widget req, Widget new, ArgList args, Cardinal* num_args) { HookObject w = (HookObject) new; w->hooks.max_shells = 0; XtAddCallback (new, XtNdestroyCallback, FreeShellList, (XtPointer) NULL); } static void GetValuesHook( Widget widget, ArgList args, Cardinal* num_args) { /* get the XtNshells and XtNnumShells pseudo-resources */ } libXt-1.1.5/src/GetValues.c000064401431060000012000000223341252061032400157120ustar00alancstaff00002660200006/*LINTLIBRARY*/ /*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" static int GetValues( char* base, /* Base address to fetch values from */ XrmResourceList* res, /* The current resource values. */ register Cardinal num_resources, /* number of items in resources */ ArgList args, /* The resource values requested */ Cardinal num_args) /* number of items in arg list */ { register ArgList arg; register Cardinal i; register XrmName argName; register XrmResourceList* xrmres; int translation_arg_num = -1; static XrmQuark QCallback = NULLQUARK; static XrmQuark QTranslationTable = NULLQUARK; LOCK_PROCESS; if (QCallback == NULLQUARK) { QCallback = XrmPermStringToQuark(XtRCallback); QTranslationTable = XrmPermStringToQuark(XtRTranslationTable); } UNLOCK_PROCESS; /* Resource lists should be in compiled form already */ for (arg = args ; num_args != 0; num_args--, arg++) { argName = StringToName(arg->name); for (xrmres = res, i = 0; i < num_resources; i++, xrmres++) { if (argName == (*xrmres)->xrm_name) { /* hack; do special cases here instead of a get_values_hook * because get_values_hook looses info as to * whether arg->value == NULL for ancient compatibility * mode in _XtCopyToArg. It helps performance, too... */ if ((*xrmres)->xrm_type == QCallback) { XtCallbackList callback = _XtGetCallbackList( (InternalCallbackList *) (base - (*xrmres)->xrm_offset - 1)); _XtCopyToArg( (char*)&callback, &arg->value, (*xrmres)->xrm_size); } else if ((*xrmres)->xrm_type == QTranslationTable) translation_arg_num = (int) (arg - args); else { _XtCopyToArg( base - (*xrmres)->xrm_offset - 1, &arg->value, (*xrmres)->xrm_size); } break; } } } return translation_arg_num; } /* GetValues */ static void CallGetValuesHook( WidgetClass widget_class, Widget w, ArgList args, Cardinal num_args) { WidgetClass superclass; XtArgsProc get_values_hook; LOCK_PROCESS; superclass = widget_class->core_class.superclass; UNLOCK_PROCESS; if (superclass != NULL) CallGetValuesHook (superclass, w, args, num_args); LOCK_PROCESS; get_values_hook = widget_class->core_class.get_values_hook; UNLOCK_PROCESS; if (get_values_hook != NULL) (*get_values_hook) (w, args, &num_args); } static void CallConstraintGetValuesHook( WidgetClass widget_class, Widget w, ArgList args, Cardinal num_args) { ConstraintClassExtension ext; LOCK_PROCESS; if (widget_class->core_class.superclass ->core_class.class_inited & ConstraintClassFlag) { CallConstraintGetValuesHook (widget_class->core_class.superclass, w, args, num_args); } for (ext = (ConstraintClassExtension)((ConstraintWidgetClass)widget_class) ->constraint_class.extension; ext != NULL && ext->record_type != NULLQUARK; ext = (ConstraintClassExtension)ext->next_extension); if (ext != NULL) { if ( ext->version == XtConstraintExtensionVersion && ext->record_size == sizeof(ConstraintClassExtensionRec)) { if (ext->get_values_hook != NULL) (*(ext->get_values_hook)) (w, args, &num_args); } else { String params[1]; Cardinal num_params = 1; params[0] = widget_class->core_class.class_name; XtAppWarningMsg(XtWidgetToApplicationContext(w), "invalidExtension", "xtCreateWidget", XtCXtToolkitError, "widget class %s has invalid ConstraintClassExtension record", params, &num_params); } } UNLOCK_PROCESS; } void XtGetValues( register Widget w, register ArgList args, register Cardinal num_args) { WidgetClass wc; int targ; XtAppContext app = XtWidgetToApplicationContext(w); if (num_args == 0) return; if ((args == NULL) && (num_args != 0)) { XtAppErrorMsg(app, "invalidArgCount","xtGetValues",XtCXtToolkitError, "Argument count > 0 on NULL argument list in XtGetValues", (String *)NULL, (Cardinal *)NULL); } LOCK_APP(app); wc = XtClass(w); LOCK_PROCESS; /* Get widget values */ targ = GetValues((char*)w, (XrmResourceList *) wc->core_class.resources, wc->core_class.num_resources, args, num_args); UNLOCK_PROCESS; if (targ != -1 && XtIsWidget(w)) { XtTranslations translations = _XtGetTranslationValue(w); _XtCopyToArg((char*)&translations, &args[targ].value, sizeof(XtTranslations)); } /* Get constraint values if necessary */ /* constraints may be NULL if constraint_size==0 */ if (XtParent(w) != NULL && !XtIsShell(w) && XtIsConstraint(XtParent(w)) && w->core.constraints) { ConstraintWidgetClass cwc = (ConstraintWidgetClass) XtClass(XtParent(w)); LOCK_PROCESS; GetValues((char*)w->core.constraints, (XrmResourceList *)(cwc->constraint_class.resources), cwc->constraint_class.num_resources, args, num_args); UNLOCK_PROCESS; } /* Notify any class procedures that we have performed get_values */ CallGetValuesHook(wc, w, args, num_args); /* Notify constraint get_values if necessary */ if (XtParent(w) != NULL && !XtIsShell(w) && XtIsConstraint(XtParent(w))) CallConstraintGetValuesHook(XtClass(XtParent(w)), w, args,num_args); UNLOCK_APP(app); } /* XtGetValues */ void XtGetSubvalues( XtPointer base, /* Base address to fetch values from */ XtResourceList resources, /* The current resource values. */ Cardinal num_resources, /* number of items in resources */ ArgList args, /* The resource values requested */ Cardinal num_args) /* number of items in arg list */ { XrmResourceList* xrmres; xrmres = _XtCreateIndirectionTable(resources, num_resources); GetValues((char*)base, xrmres, num_resources, args, num_args); XtFree((char *)xrmres); } equested */ Cardinal num_args) /* number of items in arg list */ { register ArgList arg; register Cardinal i; register XrmName argName; register XrmResourceList* xrmres; int translation_arg_num = -1; static XrmQuark QCallback = NULLQUARK; stalibXt-1.1.5/src/ActionHook.c000064401431060000012000000120071252061032400160450ustar00alancstaff00002660200006/*LINTLIBRARY*/ /*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* * Contains XtAppAddActionHook, XtRemoveActionHook */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" /*ARGSUSED*/ static void FreeActionHookList( Widget widget, /* unused (and invalid) */ XtPointer closure, /* ActionHook* */ XtPointer call_data) /* unused */ { ActionHook list = *(ActionHook*)closure; while (list != NULL) { ActionHook next = list->next; XtFree( (XtPointer)list ); list = next; } } XtActionHookId XtAppAddActionHook( XtAppContext app, XtActionHookProc proc, XtPointer closure) { ActionHook hook = XtNew(ActionHookRec); LOCK_APP(app); hook->next = app->action_hook_list; hook->app = app; hook->proc = proc; hook->closure = closure; if (app->action_hook_list == NULL) { _XtAddCallback( &app->destroy_callbacks, FreeActionHookList, (XtPointer)&app->action_hook_list ); } app->action_hook_list = hook; UNLOCK_APP(app); return (XtActionHookId)hook; } void XtRemoveActionHook( XtActionHookId id) { ActionHook *p, hook = (ActionHook)id; XtAppContext app = hook->app; LOCK_APP(app); for (p = &app->action_hook_list; p != NULL && *p != hook; p = &(*p)->next); if (p) { *p = hook->next; XtFree( (XtPointer)hook ); if (app->action_hook_list == NULL) _XtRemoveCallback(&app->destroy_callbacks, FreeActionHookList, (XtPointer) &app->action_hook_list); } #ifdef DEBUG else { XtAppWarningMsg(app, "badId", "xtRemoveActionHook", XtCXtToolkitError, "XtRemoveActionHook called with bad or old hook id", (String*)NULL, (Cardinal*)NULL); } #endif /*DEBUG*/ UNLOCK_APP(app); } libXt-1.1.5/src/Makefile.in000064401431060000012000000674451252061035100157300ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 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__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 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 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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) libXt_la_DEPENDENCIES = am_libXt_la_OBJECTS = ActionHook.lo Alloc.lo ArgList.lo Callback.lo \ ClickTime.lo Composite.lo Constraint.lo Convert.lo \ Converters.lo Core.lo Create.lo Destroy.lo Display.lo Error.lo \ Event.lo EventUtil.lo Functions.lo GCManager.lo Geometry.lo \ GetActKey.lo GetResList.lo GetValues.lo HookObj.lo Hooks.lo \ Initialize.lo Intrinsic.lo Keyboard.lo Manage.lo NextEvent.lo \ Object.lo PassivGrab.lo Pointer.lo Popup.lo PopupCB.lo \ RectObj.lo ResConfig.lo Resources.lo Selection.lo SetSens.lo \ SetValues.lo SetWMCW.lo Shell.lo TMaction.lo TMgrab.lo \ TMkey.lo TMparse.lo TMprint.lo TMstate.lo Threads.lo \ VarCreate.lo VarGet.lo Varargs.lo Vendor.lo sharedlib.lo nodist_libXt_la_OBJECTS = StringDefs.lo libXt_la_OBJECTS = $(am_libXt_la_OBJECTS) $(nodist_libXt_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libXt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libXt_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libXt_la_SOURCES) $(nodist_libXt_la_SOURCES) DIST_SOURCES = $(libXt_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ERRORDBDIR = @ERRORDBDIR@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_DEBUG_ENV = @MALLOC_DEBUG_ENV@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ 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@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRINGSABIOPTIONS = @STRINGSABIOPTIONS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ XFILESEARCHPATHDEFAULT = @XFILESEARCHPATHDEFAULT@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ XT_CFLAGS = @XT_CFLAGS@ XT_LIBS = @XT_LIBS@ 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_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@ appdefaultdir = @appdefaultdir@ 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@ lib_LTLIBRARIES = libXt.la BUILT_SOURCES = $(BUILT_FILES) CLEANFILES = $(BUILT_SOURCES) SRCH_DEFINES = -DXFILESEARCHPATHDEFAULT=\"$(XFILESEARCHPATHDEFAULT)\" ERRORDB_DEFINES = -DERRORDB=\"$(ERRORDBDIR)/XtErrorDB\" AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(SRCH_DEFINES) $(ERRORDB_DEFINES) \ $(XTMALLOC_ZERO_CFLAGS) -DLIBXT_COMPILATION AM_CPPFLAGS = -I$(top_srcdir)/include/ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include -I$(top_builddir)/include/X11 nodist_libXt_la_SOURCES = StringDefs.c libXt_la_SOURCES = \ ActionHook.c \ Alloc.c \ ArgList.c \ Callback.c \ ClickTime.c \ Composite.c \ Constraint.c \ Convert.c \ Converters.c \ Core.c \ Create.c \ Destroy.c \ Display.c \ Error.c \ Event.c \ EventUtil.c \ Functions.c \ GCManager.c \ Geometry.c \ GetActKey.c \ GetResList.c \ GetValues.c \ HookObj.c \ Hooks.c \ Initialize.c \ Intrinsic.c \ Keyboard.c \ Manage.c \ NextEvent.c \ Object.c \ PassivGrab.c \ Pointer.c \ Popup.c \ PopupCB.c \ RectObj.c \ ResConfig.c \ Resources.c \ Selection.c \ SetSens.c \ SetValues.c \ SetWMCW.c \ Shell.c \ TMaction.c \ TMgrab.c \ TMkey.c \ TMparse.c \ TMprint.c \ TMstate.c \ Threads.c \ VarCreate.c \ VarGet.c \ Varargs.c \ Vendor.c \ sharedlib.c DISTCLEANFILES = StringDefs.c libXt_la_LIBADD = @XT_LIBS@ libXt_la_LDFLAGS = -version-number 6:0:0 -no-undefined # # The util directory contains a program that builds some of the sources. # The input to this program is given in files. Unfortunately those input # files refers to things like # # util/foo # # so the generating program must be run from the top directory. # BUILT_SOURCE = StringDefs.c BUILT_HEADER = $(top_builddir)/include/X11/StringDefs.h $(top_builddir)/include/X11/Shell.h BUILT_FILES = $(BUILT_SOURCE) $(BUILT_HEADER) STRING_LIST = $(top_srcdir)/util/string.list all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libXt.la: $(libXt_la_OBJECTS) $(libXt_la_DEPENDENCIES) $(EXTRA_libXt_la_DEPENDENCIES) $(AM_V_CCLD)$(libXt_la_LINK) -rpath $(libdir) $(libXt_la_OBJECTS) $(libXt_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ActionHook.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Alloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ArgList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Callback.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClickTime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Composite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Constraint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Convert.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Converters.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Core.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Create.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Destroy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Display.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EventUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Functions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GCManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Geometry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetActKey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetResList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetValues.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HookObj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hooks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Initialize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Intrinsic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Keyboard.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Manage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NextEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Object.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PassivGrab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Pointer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Popup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PopupCB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RectObj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ResConfig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Resources.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Selection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetSens.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetValues.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetWMCW.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Shell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringDefs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMaction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMgrab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMkey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMparse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMprint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TMstate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VarCreate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VarGet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Varargs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Vendor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sharedlib.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ 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-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ 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" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) all-local installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) 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: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am 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 tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile all-local: $(BUILT_FILES) $(BUILT_HEADER): $(BUILT_SOURCE) $(BUILT_SOURCE): $(AM_V_GEN)$(top_builddir)/util/makestrs -i $(top_srcdir) $(STRINGSABIOPTIONS) < $(STRING_LIST) > StringDefs.c $(AM_V_at)$(MKDIR_P) $(top_builddir)/src $(AM_V_at)$(MKDIR_P) $(top_builddir)/include/X11 $(AM_V_at)cp StringDefs.h $(top_builddir)/include/X11 $(AM_V_at)cp Shell.h $(top_builddir)/include/X11 $(AM_V_at)rm StringDefs.h Shell.h # 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: @ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetValues.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HookObj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hooks.Plo@am__quote@ @libXt-1.1.5/src/Geometry.c000064401431060000012000000634441252061032400156150ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "ShellP.h" #include "ShellI.h" static void ClearRectObjAreas( RectObj r, XWindowChanges* old) { Widget pw = _XtWindowedAncestor((Widget)r); int bw2; bw2 = old->border_width << 1; XClearArea( XtDisplay(pw), XtWindow(pw), old->x, old->y, old->width + bw2, old->height + bw2, TRUE ); bw2 = r->rectangle.border_width << 1; XClearArea( XtDisplay(pw), XtWindow(pw), (int)r->rectangle.x, (int)r->rectangle.y, (unsigned int)(r->rectangle.width + bw2), (unsigned int)(r->rectangle.height + bw2), TRUE ); } /* * Internal function used by XtMakeGeometryRequest and XtSetValues. * Returns more data than the public interface. Does not convert * XtGeometryDone to XtGeometryYes. * * clear_rect_obj - *** RETURNED *** * TRUE if the rect obj has been cleared, false otherwise. */ XtGeometryResult _XtMakeGeometryRequest ( Widget widget, XtWidgetGeometry *request, XtWidgetGeometry *reply, Boolean * clear_rect_obj) { XtWidgetGeometry junk; XtGeometryHandler manager = (XtGeometryHandler) NULL; XtGeometryResult returnCode; Widget parent = widget->core.parent; Boolean managed, parentRealized, rgm = False; XtConfigureHookDataRec req; Widget hookobj; *clear_rect_obj = FALSE; CALLGEOTAT(_XtGeoTrace(widget, "\"%s\" is making a %sgeometry request to its parent \"%s\".\n", XtName(widget), ((request->request_mode & XtCWQueryOnly))? "query only ":"", (XtParent(widget))?XtName(XtParent(widget)):"Root")); CALLGEOTAT(_XtGeoTab(1)); if (XtIsShell(widget)) { ShellClassExtension ext; LOCK_PROCESS; for (ext = (ShellClassExtension)((ShellWidgetClass)XtClass(widget)) ->shell_class.extension; ext != NULL && ext->record_type != NULLQUARK; ext = (ShellClassExtension)ext->next_extension); if (ext != NULL) { if ( ext->version == XtShellExtensionVersion && ext->record_size == sizeof(ShellClassExtensionRec)) { manager = ext->root_geometry_manager; rgm = True; } else { String params[1]; Cardinal num_params = 1; params[0] = XtClass(widget)->core_class.class_name; XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidExtension", "xtMakeGeometryRequest", XtCXtToolkitError, "widget class %s has invalid ShellClassExtension record", params, &num_params); } } else { XtAppErrorMsg(XtWidgetToApplicationContext(widget), "internalError", "xtMakeGeometryRequest", XtCXtToolkitError, "internal error; ShellClassExtension is NULL", NULL, NULL); } managed = True; parentRealized = TRUE; UNLOCK_PROCESS; } else /* not shell */ { if (parent == NULL) XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidParent","xtMakeGeometryRequest", XtCXtToolkitError, "non-shell has no parent in XtMakeGeometryRequest", (String *)NULL, (Cardinal *)NULL); managed = XtIsManaged(widget); parentRealized = XtIsRealized(parent); if (XtIsComposite(parent)) { LOCK_PROCESS; manager = ((CompositeWidgetClass) (parent->core.widget_class)) ->composite_class.geometry_manager; UNLOCK_PROCESS; } } #if 0 /* * The Xt spec says that these conditions must generate * error messages (not warnings), but many Xt applications * and toolkits (including parts of Xaw, Motif and Netscape) * depend on the previous Xt behaviour. Thus, these tests * should probably remain disabled. */ if (parentRealized && managed) { if (parent && !XtIsComposite(parent)) { /* * This shouldn't ever happen, we only test for this to pass * VSW5. Normally managing the widget will catch this, but VSW5 * does some really screwy stuff to get here. */ XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidParent", "xtMakeGeometryRequest", XtCXtToolkitError, "XtMakeGeometryRequest - parent not composite", (String *)NULL, (Cardinal *)NULL); } else if (manager == (XtGeometryHandler) NULL) { XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidGeometryManager","xtMakeGeometryRequest", XtCXtToolkitError, "XtMakeGeometryRequest - parent has no geometry manager", (String *)NULL, (Cardinal *)NULL); } } #else if (!manager) managed = False; #endif if (widget->core.being_destroyed) { CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget, "It is being destroyed, just return XtGeometryNo.\n")); return XtGeometryNo; } /* see if requesting anything to change */ req.changeMask = 0; if (request->request_mode & CWStackMode && request->stack_mode != XtSMDontChange) { req.changeMask |= CWStackMode; CALLGEOTAT(_XtGeoTrace(widget, "Asking for a change in StackMode!\n")); if (request->request_mode & CWSibling) { XtCheckSubclass(request->sibling, rectObjClass, "XtMakeGeometryRequest"); req.changeMask |= CWSibling; } } if (request->request_mode & CWX && widget->core.x != request->x) { CALLGEOTAT(_XtGeoTrace(widget, "Asking for a change in x: from %d to %d.\n", widget->core.x, request->x)); req.changeMask |= CWX; } if (request->request_mode & CWY && widget->core.y != request->y) { CALLGEOTAT(_XtGeoTrace(widget, "Asking for a change in y: from %d to %d.\n", widget->core.y, request->y)); req.changeMask |= CWY; } if (request->request_mode & CWWidth && widget->core.width != request->width) { CALLGEOTAT(_XtGeoTrace(widget,"Asking for a change in width: from %d to %d.\n", widget->core.width, request->width)); req.changeMask |= CWWidth; } if (request->request_mode & CWHeight && widget->core.height != request->height) { CALLGEOTAT(_XtGeoTrace(widget, "Asking for a change in height: from %d to %d.\n", widget->core.height, request->height)); req.changeMask |= CWHeight; } if (request->request_mode & CWBorderWidth && widget->core.border_width != request->border_width){ CALLGEOTAT(_XtGeoTrace(widget, "Asking for a change in border_width: from %d to %d.\n", widget->core.border_width, request->border_width)); req.changeMask |= CWBorderWidth; } if (! req.changeMask) { CALLGEOTAT(_XtGeoTrace(widget, "Asking for nothing new,\n")); CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget, "just return XtGeometryYes.\n")); return XtGeometryYes; } req.changeMask |= (request->request_mode & XtCWQueryOnly); if ( !(req.changeMask & XtCWQueryOnly) && XtIsRealized(widget) ) { /* keep record of the current geometry so we know what's changed */ req.changes.x = widget->core.x ; req.changes.y = widget->core.y ; req.changes.width = widget->core.width ; req.changes.height = widget->core.height ; req.changes.border_width = widget->core.border_width ; } if (!managed || !parentRealized) { CALLGEOTAT(_XtGeoTrace(widget, "Not Managed or Parent not realized.\n")); /* Don't get parent's manager involved--assume the answer is yes */ if (req.changeMask & XtCWQueryOnly) { /* He was just asking, don't change anything, just tell him yes */ CALLGEOTAT(_XtGeoTrace(widget,"QueryOnly request\n")); CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"just return XtGeometryYes.\n")); return XtGeometryYes; } else { CALLGEOTAT(_XtGeoTrace(widget, "Copy values from request to widget.\n")); /* copy values from request to widget */ if (request->request_mode & CWX) widget->core.x = request->x; if (request->request_mode & CWY) widget->core.y = request->y; if (request->request_mode & CWWidth) widget->core.width = request->width; if (request->request_mode & CWHeight) widget->core.height = request->height; if (request->request_mode & CWBorderWidth) widget->core.border_width = request->border_width; if (!parentRealized) { CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"and return XtGeometryYes.\n")); return XtGeometryYes; } else returnCode = XtGeometryYes; } } else { /* go ask the widget's geometry manager */ CALLGEOTAT(_XtGeoTrace(widget, "Go ask the parent geometry manager.\n")); if (reply == (XtWidgetGeometry *) NULL) { returnCode = (*manager)(widget, request, &junk); } else { returnCode = (*manager)(widget, request, reply); } } /* * If Unrealized, not a XtGeometryYes, or a query-only then we are done. */ if ((returnCode != XtGeometryYes) || (req.changeMask & XtCWQueryOnly) || !XtIsRealized(widget)) { #ifdef XT_GEO_TATTLER switch(returnCode){ case XtGeometryNo: CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" returns XtGeometryNo.\n", (XtParent(widget))?XtName(XtParent(widget)):"Root")); /* check for no change */ break ; case XtGeometryDone: CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" returns XtGeometryDone.\n", (XtParent(widget))?XtName(XtParent(widget)):"Root")); /* check for no change in queryonly */ break ; case XtGeometryAlmost: CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" returns XtGeometryAlmost.\n", (XtParent(widget))?XtName(XtParent(widget)):"Root")); CALLGEOTAT(_XtGeoTab(1)); CALLGEOTAT(_XtGeoTrace(widget,"Proposal: width %d height %d.\n", (reply)?reply->width:junk.width, (reply)?reply->height:junk.height)); CALLGEOTAT(_XtGeoTab(-1)); /* check for no change */ break ; case XtGeometryYes: if (req.changeMask & XtCWQueryOnly) { CALLGEOTAT(_XtGeoTrace(widget, "QueryOnly specified, no configuration.\n")); } if (!XtIsRealized(widget)) { CALLGEOTAT(_XtGeoTrace(widget, "\"%s\" not realized, no configuration.\n", XtName(widget))); } CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" returns XtGeometryYes.\n", (XtParent(widget))?XtName(XtParent(widget)):"Root")); break ; } #endif return returnCode; } CALLGEOTAT(_XtGeoTab(-1)); CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" returns XtGeometryYes.\n", (XtParent(widget))?XtName(XtParent(widget)):"Root")); if (XtIsWidget(widget)) { /* reconfigure the window (if needed) */ if (rgm) return returnCode; if (req.changes.x != widget->core.x) { req.changeMask |= CWX; req.changes.x = widget->core.x; CALLGEOTAT(_XtGeoTrace(widget, "x changing to %d\n",widget->core.x)); } if (req.changes.y != widget->core.y) { req.changeMask |= CWY; req.changes.y = widget->core.y; CALLGEOTAT(_XtGeoTrace(widget, "y changing to %d\n",widget->core.y)); } if (req.changes.width != widget->core.width) { req.changeMask |= CWWidth; req.changes.width = widget->core.width; CALLGEOTAT(_XtGeoTrace(widget, "width changing to %d\n",widget->core.width)); } if (req.changes.height != widget->core.height) { req.changeMask |= CWHeight; req.changes.height = widget->core.height; CALLGEOTAT(_XtGeoTrace(widget, "height changing to %d\n",widget->core.height)); } if (req.changes.border_width != widget->core.border_width) { req.changeMask |= CWBorderWidth; req.changes.border_width = widget->core.border_width; CALLGEOTAT(_XtGeoTrace(widget, "border_width changing to %d\n", widget->core.border_width)); } if (req.changeMask & CWStackMode) { req.changes.stack_mode = request->stack_mode; CALLGEOTAT(_XtGeoTrace(widget,"stack_mode changing\n")); if (req.changeMask & CWSibling) { if (XtIsWidget(request->sibling)) req.changes.sibling = XtWindow(request->sibling); else req.changeMask &= ~(CWStackMode | CWSibling); } } #ifdef XT_GEO_TATTLER if (req.changeMask) { CALLGEOTAT(_XtGeoTrace(widget, "XConfigure \"%s\"'s window.\n", XtName(widget))); } else { CALLGEOTAT(_XtGeoTrace(widget, "No window configuration needed for \"%s\".\n", XtName(widget))); } #endif XConfigureWindow(XtDisplay(widget), XtWindow(widget), req.changeMask, &req.changes); } else { /* RectObj child of realized Widget */ *clear_rect_obj = TRUE; CALLGEOTAT(_XtGeoTrace(widget, "ClearRectObj on \"%s\".\n",XtName(widget))); ClearRectObjAreas((RectObj)widget, &req.changes); } hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget));; if (XtHasCallbacks(hookobj, XtNconfigureHook) == XtCallbackHasSome) { req.type = XtHconfigure; req.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.confighook_callbacks, (XtPointer)&req); } return returnCode; } /* _XtMakeGeometryRequest */ /* Public routines */ XtGeometryResult XtMakeGeometryRequest ( Widget widget, XtWidgetGeometry *request, XtWidgetGeometry *reply) { Boolean junk; XtGeometryResult r; XtGeometryHookDataRec call_data; Widget hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); WIDGET_TO_APPCON(widget); LOCK_APP(app); if (XtHasCallbacks(hookobj, XtNgeometryHook) == XtCallbackHasSome) { call_data.type = XtHpreGeometry; call_data.widget = widget; call_data.request = request; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); call_data.result = r = _XtMakeGeometryRequest(widget, request, reply, &junk); call_data.type = XtHpostGeometry; call_data.reply = reply; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); } else { r = _XtMakeGeometryRequest(widget, request, reply, &junk); } UNLOCK_APP(app); return ((r == XtGeometryDone) ? XtGeometryYes : r); } XtGeometryResult XtMakeResizeRequest( Widget widget, _XtDimension width, _XtDimension height, Dimension *replyWidth, Dimension *replyHeight) { XtWidgetGeometry request, reply; XtGeometryResult r; XtGeometryHookDataRec call_data; Boolean junk; Widget hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); WIDGET_TO_APPCON(widget); LOCK_APP(app); request.request_mode = CWWidth | CWHeight; request.width = width; request.height = height; if (XtHasCallbacks(hookobj, XtNgeometryHook) == XtCallbackHasSome) { call_data.type = XtHpreGeometry; call_data.widget = widget; call_data.request = &request; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); call_data.result = r = _XtMakeGeometryRequest(widget, &request, &reply, &junk); call_data.type = XtHpostGeometry; call_data.reply = &reply; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.geometryhook_callbacks, (XtPointer)&call_data); } else { r = _XtMakeGeometryRequest(widget, &request, &reply, &junk); } if (replyWidth != NULL) { if (r == XtGeometryAlmost && reply.request_mode & CWWidth) *replyWidth = reply.width; else *replyWidth = width; } if (replyHeight != NULL) { if (r == XtGeometryAlmost && reply.request_mode & CWHeight) *replyHeight = reply.height; else *replyHeight = height; } UNLOCK_APP(app); return ((r == XtGeometryDone) ? XtGeometryYes : r); } /* XtMakeResizeRequest */ void XtResizeWindow( Widget w) { XtConfigureHookDataRec req; Widget hookobj; WIDGET_TO_APPCON(w); LOCK_APP(app); if (XtIsRealized(w)) { req.changes.width = w->core.width; req.changes.height = w->core.height; req.changes.border_width = w->core.border_width; req.changeMask = CWWidth | CWHeight | CWBorderWidth; XConfigureWindow(XtDisplay(w), XtWindow(w), (unsigned) req.changeMask, &req.changes); hookobj = XtHooksOfDisplay(XtDisplayOfObject(w));; if (XtHasCallbacks(hookobj, XtNconfigureHook) == XtCallbackHasSome) { req.type = XtHconfigure; req.widget = w; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.confighook_callbacks, (XtPointer)&req); } } UNLOCK_APP(app); } /* XtResizeWindow */ void XtResizeWidget( Widget w, _XtDimension width, _XtDimension height, _XtDimension borderWidth) { XtConfigureWidget(w, w->core.x, w->core.y, width, height, borderWidth); } /* XtResizeWidget */ void XtConfigureWidget( Widget w, _XtPosition x, _XtPosition y, _XtDimension width, _XtDimension height, _XtDimension borderWidth) { XtConfigureHookDataRec req; Widget hookobj; XWindowChanges old; WIDGET_TO_APPCON(w); CALLGEOTAT(_XtGeoTrace(w, "\"%s\" is being configured by its parent \"%s\"\n", XtName(w), (XtParent(w))?XtName(XtParent(w)):"Root")); CALLGEOTAT(_XtGeoTab(1)); LOCK_APP(app); req.changeMask = 0; if ((old.x = w->core.x) != x) { CALLGEOTAT(_XtGeoTrace(w,"x move from %d to %d\n",w->core.x, x)); req.changes.x = w->core.x = x; req.changeMask |= CWX; } if ((old.y = w->core.y) != y) { CALLGEOTAT(_XtGeoTrace(w,"y move from %d to %d\n",w->core.y, y)); req.changes.y = w->core.y = y; req.changeMask |= CWY; } if ((old.width = w->core.width) != width) { CALLGEOTAT(_XtGeoTrace(w, "width move from %d to %d\n",w->core.width, width)); req.changes.width = w->core.width = width; req.changeMask |= CWWidth; } if ((old.height = w->core.height) != height) { CALLGEOTAT(_XtGeoTrace(w, "height move from %d to %d\n",w->core.height, height)); req.changes.height = w->core.height = height; req.changeMask |= CWHeight; } if ((old.border_width = w->core.border_width) != borderWidth) { CALLGEOTAT(_XtGeoTrace(w,"border_width move from %d to %d\n", w->core.border_width,borderWidth )); req.changes.border_width = w->core.border_width = borderWidth; req.changeMask |= CWBorderWidth; } if (req.changeMask != 0) { if (XtIsRealized(w)) { if (XtIsWidget(w)) { CALLGEOTAT(_XtGeoTrace(w, "XConfigure \"%s\"'s window\n",XtName(w))); XConfigureWindow(XtDisplay(w), XtWindow(w), req.changeMask, &req.changes); } else { CALLGEOTAT(_XtGeoTrace(w, "ClearRectObj called on \"%s\"\n",XtName(w))); ClearRectObjAreas((RectObj)w, &old); } } hookobj = XtHooksOfDisplay(XtDisplayOfObject(w));; if (XtHasCallbacks(hookobj, XtNconfigureHook) == XtCallbackHasSome) { req.type = XtHconfigure; req.widget = w; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.confighook_callbacks, (XtPointer)&req); } { XtWidgetProc resize; LOCK_PROCESS; resize = XtClass(w)->core_class.resize; UNLOCK_PROCESS; if ((req.changeMask & (CWWidth | CWHeight)) && resize != (XtWidgetProc) NULL) { CALLGEOTAT(_XtGeoTrace(w,"Resize proc is called.\n")); (*resize)(w); } } } else { CALLGEOTAT(_XtGeoTrace(w,"No change in configuration\n")); } CALLGEOTAT(_XtGeoTab(-1)); UNLOCK_APP(app); } /* XtConfigureWidget */ void XtMoveWidget( Widget w, _XtPosition x, _XtPosition y) { XtConfigureWidget(w, x, y, w->core.width, w->core.height, w->core.border_width); } /* XtMoveWidget */ void XtTranslateCoords( register Widget w, _XtPosition x, _XtPosition y, register Position *rootx, /* return */ register Position *rooty) /* return */ { Position garbagex, garbagey; XtAppContext app = XtWidgetToApplicationContext(w); LOCK_APP(app); if (rootx == NULL) rootx = &garbagex; if (rooty == NULL) rooty = &garbagey; *rootx = x; *rooty = y; for (; w != NULL && ! XtIsShell(w); w = w->core.parent) { *rootx += w->core.x + w->core.border_width; *rooty += w->core.y + w->core.border_width; } if (w == NULL) XtAppWarningMsg(app, "invalidShell","xtTranslateCoords",XtCXtToolkitError, "Widget has no shell ancestor", (String *)NULL, (Cardinal *)NULL); else { Position x, y; _XtShellGetCoordinates( w, &x, &y ); *rootx += x + w->core.border_width; *rooty += y + w->core.border_width; } UNLOCK_APP(app); } XtGeometryResult XtQueryGeometry( Widget widget, register XtWidgetGeometry *intended, /* parent's changes; may be NULL */ XtWidgetGeometry *reply) /* child's preferred geometry; never NULL */ { XtWidgetGeometry null_intended; XtGeometryHandler query; XtGeometryResult result; WIDGET_TO_APPCON(widget); CALLGEOTAT(_XtGeoTrace(widget, "\"%s\" is asking its preferred geometry to \"%s\".\n", (XtParent(widget))?XtName(XtParent(widget)):"Root", XtName(widget))); CALLGEOTAT(_XtGeoTab(1)); LOCK_APP(app); LOCK_PROCESS; query = XtClass(widget)->core_class.query_geometry; UNLOCK_PROCESS; reply->request_mode = 0; if (query != NULL) { if (intended == NULL) { null_intended.request_mode = 0; intended = &null_intended; #ifdef XT_GEO_TATTLER CALLGEOTAT(_XtGeoTrace(widget,"without any constraint.\n")); } else { CALLGEOTAT(_XtGeoTrace(widget, "with the following constraints:\n")); if (intended->request_mode & CWX) { CALLGEOTAT(_XtGeoTrace(widget," x = %d\n",intended->x)); } if (intended->request_mode & CWY) { CALLGEOTAT(_XtGeoTrace(widget," y = %d\n",intended->y)); } if (intended->request_mode & CWWidth) { CALLGEOTAT(_XtGeoTrace(widget, " width = %d\n",intended->width)); } if (intended->request_mode & CWHeight) { CALLGEOTAT(_XtGeoTrace(widget, " height = %d\n",intended->height)); } if (intended->request_mode & CWBorderWidth) { CALLGEOTAT(_XtGeoTrace(widget, " border_width = %d\n",intended->border_width)); } #endif } result = (*query) (widget, intended, reply); } else { CALLGEOTAT(_XtGeoTrace(widget,"\"%s\" has no QueryGeometry proc, return the current state\n",XtName(widget))); result = XtGeometryYes; } #ifdef XT_GEO_TATTLER #define FillIn(mask, field) \ if (!(reply->request_mode & mask)) {\ reply->field = widget->core.field;\ _XtGeoTrace(widget," using core %s = %d.\n","field",\ widget->core.field);\ } else {\ _XtGeoTrace(widget," replied %s = %d\n","field",\ reply->field);\ } #else #define FillIn(mask, field) \ if (!(reply->request_mode & mask)) reply->field = widget->core.field; #endif FillIn(CWX, x); FillIn(CWY, y); FillIn(CWWidth, width); FillIn(CWHeight, height); FillIn(CWBorderWidth, border_width); CALLGEOTAT(_XtGeoTab(-1)); #undef FillIn if (!(reply->request_mode & CWStackMode)) reply->stack_mode = XtSMDontChange; UNLOCK_APP(app); return result; } obj, XtNconfigureHook) == XtCallbackHasSome) { req.type = XtHconfigure; req.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.confighook_callbacks, (XtPointer)&req); } return returlibXt-1.1.5/src/Intrinsic.c000064401431060000012000001170321252061032400157550ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #define INTRINSIC_C #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "VarargsI.h" /* for geoTattler */ #ifndef NO_IDENTIFY_WINDOWS #include #endif #ifndef VMS #include #endif /* VMS */ #ifdef WIN32 #include /* for _getdrives() */ #endif #include String XtCXtToolkitError = "XtToolkitError"; Boolean XtIsSubclass( Widget widget, WidgetClass widgetClass) { register WidgetClass w; Boolean retval = FALSE; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; for (w = widget->core.widget_class; w != NULL; w = w->core_class.superclass) if (w == widgetClass) { retval = TRUE; break; } UNLOCK_PROCESS; UNLOCK_APP(app); return retval; } /* XtIsSubclass */ Boolean _XtCheckSubclassFlag( Widget object, _XtXtEnum flag) { Boolean retval; LOCK_PROCESS; if (object->core.widget_class->core_class.class_inited & flag) retval = TRUE; else retval = FALSE; UNLOCK_PROCESS; return retval; } /*_XtVerifySubclass */ Boolean _XtIsSubclassOf( Widget object, WidgetClass widgetClass, WidgetClass superClass, _XtXtEnum flag) { LOCK_PROCESS; if (!(object->core.widget_class->core_class.class_inited & flag)) { UNLOCK_PROCESS; return False; } else { register WidgetClass c = object->core.widget_class; while (c != superClass) { if (c == widgetClass) { UNLOCK_PROCESS; return True; } c = c->core_class.superclass; } UNLOCK_PROCESS; return False; } } /*_XtIsSubclassOf */ XtPointer XtGetClassExtension( WidgetClass object_class, Cardinal byte_offset, XrmQuark type, long version, Cardinal record_size) { ObjectClassExtension ext; LOCK_PROCESS; ext = *(ObjectClassExtension *)((char *)object_class + byte_offset); while (ext && (ext->record_type != type || ext->version < version || ext->record_size < record_size)) { ext = (ObjectClassExtension) ext->next_extension; } UNLOCK_PROCESS; return (XtPointer) ext; } static void ComputeWindowAttributes( Widget widget, XtValueMask *value_mask, XSetWindowAttributes *values) { XtExposeProc expose; *value_mask = CWEventMask | CWColormap; (*values).event_mask = XtBuildEventMask(widget); (*values).colormap = widget->core.colormap; if (widget->core.background_pixmap != XtUnspecifiedPixmap) { *value_mask |= CWBackPixmap; (*values).background_pixmap = widget->core.background_pixmap; } else { *value_mask |= CWBackPixel; (*values).background_pixel = widget->core.background_pixel; } if (widget->core.border_pixmap != XtUnspecifiedPixmap) { *value_mask |= CWBorderPixmap; (*values).border_pixmap = widget->core.border_pixmap; } else { *value_mask |= CWBorderPixel; (*values).border_pixel = widget->core.border_pixel; } LOCK_PROCESS; expose = widget->core.widget_class->core_class.expose; UNLOCK_PROCESS; if (expose == (XtExposeProc) NULL) { /* Try to avoid redisplay upon resize by making bit_gravity the same as the default win_gravity */ *value_mask |= CWBitGravity; (*values).bit_gravity = NorthWestGravity; } } /* ComputeWindowAttributes */ static void CallChangeManaged( register Widget widget) { register Cardinal i; XtWidgetProc change_managed; register WidgetList children; int managed_children = 0; register CompositePtr cpPtr; register CompositePartPtr clPtr; if (XtIsComposite (widget)) { cpPtr = (CompositePtr)&((CompositeWidget) widget)->composite; clPtr = (CompositePartPtr)&((CompositeWidgetClass) widget->core.widget_class)->composite_class; } else return; children = cpPtr->children; LOCK_PROCESS; change_managed = clPtr->change_managed; UNLOCK_PROCESS; /* CallChangeManaged for all children */ for (i = cpPtr->num_children; i != 0; --i) { CallChangeManaged (children[i-1]); if (XtIsManaged(children[i-1])) managed_children++; } if (change_managed != NULL && managed_children != 0) { CALLGEOTAT(_XtGeoTrace(widget,"Call \"%s\"[%d,%d]'s changemanaged\n", XtName(widget), widget->core.width, widget->core.height)); (*change_managed) (widget); } } /* CallChangeManaged */ static void MapChildren( CompositePart *cwp) { Cardinal i; WidgetList children; register Widget child; children = cwp->children; for (i = 0; i < cwp->num_children; i++) { child = children[i]; if (XtIsWidget (child)){ if (child->core.managed && child->core.mapped_when_managed) { XtMapWidget (children[i]); } } } } /* MapChildren */ static Boolean ShouldMapAllChildren( CompositePart *cwp) { Cardinal i; WidgetList children; register Widget child; children = cwp->children; for (i = 0; i < cwp->num_children; i++) { child = children[i]; if (XtIsWidget(child)) { if (XtIsRealized(child) && (! (child->core.managed && child->core.mapped_when_managed))){ return False; } } } return True; } /* ShouldMapAllChildren */ static void RealizeWidget( Widget widget) { XtValueMask value_mask; XSetWindowAttributes values; XtRealizeProc realize; Window window; Display* display; String class_name; Widget hookobj; if (!XtIsWidget(widget) || XtIsRealized(widget)) return; display = XtDisplay(widget); _XtInstallTranslations(widget); ComputeWindowAttributes (widget, &value_mask, &values); LOCK_PROCESS; realize = widget->core.widget_class->core_class.realize; class_name = widget->core.widget_class->core_class.class_name; UNLOCK_PROCESS; if (realize == NULL) XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidProcedure","realizeProc",XtCXtToolkitError, "No realize class procedure defined", (String *)NULL, (Cardinal *)NULL); else { CALLGEOTAT(_XtGeoTrace(widget,"Call \"%s\"[%d,%d]'s realize proc\n", XtName(widget), widget->core.width, widget->core.height)); (*realize) (widget, &value_mask, &values); } window = XtWindow(widget); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj,XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHrealizeWidget; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } #ifndef NO_IDENTIFY_WINDOWS if (_XtGetPerDisplay(display)->appContext->identify_windows) { int len_nm, len_cl; char *s; len_nm = widget->core.name ? strlen(widget->core.name) : 0; len_cl = strlen(class_name); s = __XtMalloc((unsigned) (len_nm + len_cl + 2)); s[0] = '\0'; if (len_nm) strcpy(s, widget->core.name); strcpy(s + len_nm + 1, class_name); XChangeProperty(display, window, XInternAtom(display, "_MIT_OBJ_CLASS", False), XA_STRING, 8, PropModeReplace, (unsigned char *) s, len_nm + len_cl + 2); XtFree(s); } #endif #ifdef notdef _XtRegisterAsyncHandlers(widget); #endif /* (re)register any grabs extant in the translations */ _XtRegisterGrabs(widget); /* reregister any grabs added with XtGrab{Button,Key} */ _XtRegisterPassiveGrabs(widget); XtRegisterDrawable (display, window, widget); _XtExtensionSelect(widget); if (XtIsComposite (widget)) { Cardinal i; CompositePart *cwp = &(((CompositeWidget)widget)->composite); WidgetList children = cwp->children; /* Realize all children */ for (i = cwp->num_children; i != 0; --i) { RealizeWidget (children[i-1]); } /* Map children that are managed and mapped_when_managed */ if (cwp->num_children != 0) { if (ShouldMapAllChildren(cwp)) { XMapSubwindows (display, window); } else { MapChildren(cwp); } } } /* If this is the application's popup shell, map it */ if (widget->core.parent == NULL && widget->core.mapped_when_managed) { XtMapWidget (widget); } } /* RealizeWidget */ void XtRealizeWidget ( Widget widget) { WIDGET_TO_APPCON(widget); LOCK_APP(app); if (XtIsRealized (widget)) { UNLOCK_APP(app); return; } CallChangeManaged(widget); RealizeWidget(widget); UNLOCK_APP(app); } /* XtRealizeWidget */ static void UnrealizeWidget( Widget widget) { CompositeWidget cw; Cardinal i; WidgetList children; if (!XtIsWidget(widget) || !XtIsRealized(widget)) return; /* If this is the application's popup shell, unmap it? */ /* no, the window is being destroyed */ /* Recurse on children */ if (XtIsComposite (widget)) { cw = (CompositeWidget) widget; children = cw->composite.children; /* Unrealize all children */ for (i = cw->composite.num_children; i != 0; --i) { UnrealizeWidget (children[i-1]); } /* Unmap children that are managed and mapped_when_managed? */ /* No, it's ok to be managed and unrealized as long as your parent */ /* is unrealized. XtUnrealize widget makes sure the "top" widget */ /* is unmanaged, we can ignore all descendents */ } if (XtHasCallbacks(widget, XtNunrealizeCallback) == XtCallbackHasSome) XtCallCallbacks(widget, XtNunrealizeCallback, NULL); /* Unregister window */ XtUnregisterDrawable(XtDisplay(widget), XtWindow(widget)); /* Remove Event Handlers */ /* remove grabs. Happens automatically when window is destroyed. */ /* Destroy X Window, done at outer level with one request */ widget->core.window = None; /* Removing the event handler here saves having to keep track if * the translation table is changed while the widget is unrealized. */ _XtRemoveTranslations(widget); } /* UnrealizeWidget */ void XtUnrealizeWidget ( Widget widget) { Window window; Widget hookobj; WIDGET_TO_APPCON(widget); LOCK_APP(app); window = XtWindow(widget); if (! XtIsRealized (widget)) { UNLOCK_APP(app); return; } if (widget->core.managed && widget->core.parent != NULL) XtUnmanageChild(widget); UnrealizeWidget(widget); if (window != None) XDestroyWindow(XtDisplay(widget), window); hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHunrealizeWidget; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } UNLOCK_APP(app); } /* XtUnrealizeWidget */ void XtCreateWindow( Widget widget, unsigned int window_class, Visual *visual, XtValueMask value_mask, XSetWindowAttributes *attributes) { XtAppContext app = XtWidgetToApplicationContext(widget); LOCK_APP(app); if (widget->core.window == None) { if (widget->core.width == 0 || widget->core.height == 0) { Cardinal count = 1; XtAppErrorMsg(app, "invalidDimension", "xtCreateWindow", XtCXtToolkitError, "Widget %s has zero width and/or height", &widget->core.name, &count); } widget->core.window = XCreateWindow ( XtDisplay (widget), (widget->core.parent ? widget->core.parent->core.window : widget->core.screen->root), (int)widget->core.x, (int)widget->core.y, (unsigned)widget->core.width, (unsigned)widget->core.height, (unsigned)widget->core.border_width, (int) widget->core.depth, window_class, visual, value_mask, attributes); } UNLOCK_APP(app); } /* XtCreateWindow */ /* ---------------- XtNameToWidget ----------------- */ static Widget NameListToWidget( Widget root, XrmNameList names, XrmBindingList bindings, int in_depth, int *out_depth, int *found_depth); typedef Widget (*NameMatchProc)(XrmNameList, XrmBindingList, WidgetList, Cardinal, int, int *, int *); static Widget MatchExactChildren( XrmNameList names, XrmBindingList bindings, register WidgetList children, register Cardinal num, int in_depth, int *out_depth, int *found_depth) { register Cardinal i; register XrmName name = *names; Widget w, result = NULL; int d, min = 10000; for (i = 0; i < num; i++) { if (name == children[i]->core.xrm_name) { w = NameListToWidget(children[i], &names[1], &bindings[1], in_depth+1, &d, found_depth); if (w != NULL && d < min) {result = w; min = d;} } } *out_depth = min; return result; } static Widget MatchWildChildren( XrmNameList names, XrmBindingList bindings, register WidgetList children, register Cardinal num, int in_depth, int *out_depth, int *found_depth) { register Cardinal i; Widget w, result = NULL; int d, min = 10000; for (i = 0; i < num; i++) { w = NameListToWidget(children[i], names, bindings, in_depth+1, &d, found_depth); if (w != NULL && d < min) {result = w; min = d;} } *out_depth = min; return result; } static Widget SearchChildren( Widget root, XrmNameList names, XrmBindingList bindings, NameMatchProc matchproc, int in_depth, int *out_depth, int *found_depth) { Widget w1 = NULL, w2; int d1, d2; if (XtIsComposite(root)) { w1 = (*matchproc)(names, bindings, ((CompositeWidget) root)->composite.children, ((CompositeWidget) root)->composite.num_children, in_depth, &d1, found_depth); } else d1 = 10000; w2 = (*matchproc)(names, bindings, root->core.popup_list, root->core.num_popups, in_depth, &d2, found_depth); *out_depth = (d1 < d2 ? d1 : d2); return (d1 < d2 ? w1 : w2); } static Widget NameListToWidget( register Widget root, XrmNameList names, XrmBindingList bindings, int in_depth, int *out_depth, int *found_depth) { Widget w1, w2; int d1, d2; if (in_depth >= *found_depth) { *out_depth = 10000; return NULL; } if (names[0] == NULLQUARK) { *out_depth = *found_depth = in_depth; return root; } if (! XtIsWidget(root)) { *out_depth = 10000; return NULL; } if (*bindings == XrmBindTightly) { return SearchChildren(root, names, bindings, MatchExactChildren, in_depth, out_depth, found_depth); } else { /* XrmBindLoosely */ w1 = SearchChildren(root, names, bindings, MatchExactChildren, in_depth, &d1, found_depth); w2 = SearchChildren(root, names, bindings, MatchWildChildren, in_depth, &d2, found_depth); *out_depth = (d1 < d2 ? d1 : d2); return (d1 < d2 ? w1 : w2); } } /* NameListToWidget */ Widget XtNameToWidget( Widget root, _Xconst char* name) { XrmName *names; XrmBinding *bindings; int len, depth, found = 10000; Widget result; WIDGET_TO_APPCON(root); len = strlen(name); if (len == 0) return NULL; LOCK_APP(app); names = (XrmName *) ALLOCATE_LOCAL((unsigned) (len+1) * sizeof(XrmName)); bindings = (XrmBinding *) ALLOCATE_LOCAL((unsigned) (len+1) * sizeof(XrmBinding)); if (names == NULL || bindings == NULL) _XtAllocError(NULL); XrmStringToBindingQuarkList(name, bindings, names); if (names[0] == NULLQUARK) { DEALLOCATE_LOCAL((char *) bindings); DEALLOCATE_LOCAL((char *) names); UNLOCK_APP(app); return NULL; } result = NameListToWidget(root, names, bindings, 0, &depth, &found); DEALLOCATE_LOCAL((char *) bindings); DEALLOCATE_LOCAL((char *) names); UNLOCK_APP(app); return result; } /* XtNameToWidget */ /* Define user versions of intrinsics macros */ #undef XtDisplayOfObject Display *XtDisplayOfObject( Widget object) { /* Attempts to LockApp() here will generate endless recursive loops */ if (XtIsSubclass(object, hookObjectClass)) return DisplayOfScreen(((HookObject)object)->hooks.screen); return XtDisplay(XtIsWidget(object) ? object : _XtWindowedAncestor(object)); } #undef XtDisplay Display *XtDisplay( Widget widget) { /* Attempts to LockApp() here will generate endless recursive loops */ return DisplayOfScreen(widget->core.screen); } #undef XtScreenOfObject Screen *XtScreenOfObject( Widget object) { /* Attempts to LockApp() here will generate endless recursive loops */ if (XtIsSubclass(object, hookObjectClass)) return ((HookObject)object)->hooks.screen; return XtScreen(XtIsWidget(object) ? object : _XtWindowedAncestor(object)); } #undef XtScreen Screen *XtScreen( Widget widget) { /* Attempts to LockApp() here will generate endless recursive loops */ return widget->core.screen; } #undef XtWindowOfObject Window XtWindowOfObject( Widget object) { return XtWindow(XtIsWidget(object) ? object : _XtWindowedAncestor(object)); } #undef XtWindow Window XtWindow( Widget widget) { return widget->core.window; } #undef XtSuperclass WidgetClass XtSuperclass( Widget widget) { WidgetClass retval; LOCK_PROCESS; retval = XtClass(widget)->core_class.superclass; UNLOCK_PROCESS; return retval; } #undef XtClass WidgetClass XtClass( Widget widget) { WidgetClass retval; LOCK_PROCESS; retval = widget->core.widget_class; UNLOCK_PROCESS; return retval; } #undef XtIsManaged Boolean XtIsManaged( Widget object) { Boolean retval; WIDGET_TO_APPCON(object); LOCK_APP(app); if (XtIsRectObj(object)) retval = object->core.managed; else retval = False; UNLOCK_APP(app); return retval; } #undef XtIsRealized Boolean XtIsRealized ( Widget object) { Boolean retval; WIDGET_TO_APPCON(object); LOCK_APP(app); retval = XtWindowOfObject(object) != None; UNLOCK_APP(app); return retval; } /* XtIsRealized */ #undef XtIsSensitive Boolean XtIsSensitive( Widget object) { Boolean retval; WIDGET_TO_APPCON(object); LOCK_APP(app); if (XtIsRectObj(object)) retval = object->core.sensitive && object->core.ancestor_sensitive; else retval = False; UNLOCK_APP(app); return retval; } /* * Internal routine; must be called only after XtIsWidget returns false */ Widget _XtWindowedAncestor( register Widget object) { Widget obj = object; for (object = XtParent(object); object && !XtIsWidget(object);) object = XtParent(object); if (object == NULL) { String params = XtName(obj); Cardinal num_params = 1; XtErrorMsg("noWidgetAncestor", "windowedAncestor", XtCXtToolkitError, "Object \"%s\" does not have windowed ancestor", ¶ms, &num_params); } return object; } #undef XtParent Widget XtParent( Widget widget) { /* Attempts to LockApp() here will generate endless recursive loops */ return widget->core.parent; } #undef XtName String XtName( Widget object) { /* Attempts to LockApp() here will generate endless recursive loops */ return XrmQuarkToString(object->core.xrm_name); } Boolean XtIsObject( Widget object) { WidgetClass wc; String class_name; /* perform basic sanity checks */ if (object->core.self != object || object->core.xrm_name == NULLQUARK) return False; LOCK_PROCESS; wc = object->core.widget_class; if (wc->core_class.class_name == NULL || wc->core_class.xrm_class == NULLQUARK || (class_name = XrmClassToString(wc->core_class.xrm_class)) == NULL || strcmp(wc->core_class.class_name, class_name) != 0) { UNLOCK_PROCESS; return False; } UNLOCK_PROCESS; if (XtIsWidget(object)) { if (object->core.name == NULL || (class_name = XrmNameToString(object->core.xrm_name)) == NULL || strcmp(object->core.name, class_name) != 0) return False; } return True; } #if defined(WIN32) static int access_file ( char* path, char* pathbuf, int len_pathbuf, char** pathret) { if (access (path, F_OK) == 0) { if (strlen (path) < len_pathbuf) *pathret = pathbuf; else *pathret = XtMalloc (strlen (path)); if (*pathret) { strcpy (*pathret, path); return 1; } } return 0; } static int AccessFile ( char* path, char* pathbuf, int len_pathbuf, char** pathret) { unsigned long drives; int i, len; char* drive; char buf[MAX_PATH]; char* bufp; /* just try the "raw" name first and see if it works */ if (access_file (path, pathbuf, len_pathbuf, pathret)) return 1; #if defined(WIN32) && defined(__MINGW32__) /* don't try others */ return 0; #endif /* try the places set in the environment */ drive = getenv ("_XBASEDRIVE"); if (!drive) drive = "C:"; len = strlen (drive) + strlen (path); bufp = XtStackAlloc (len + 1, buf); strcpy (bufp, drive); strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { XtStackFree (bufp, buf); return 1; } /* one last place to look */ drive = getenv ("HOMEDRIVE"); if (drive) { len = strlen (drive) + strlen (path); bufp = XtStackAlloc (len + 1, buf); strcpy (bufp, drive); strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { XtStackFree (bufp, buf); return 1; } } /* does OS/2 (with or with gcc-emx) have getdrives()? */ /* tried everywhere else, go fishing */ drives = _getdrives (); #define C_DRIVE ('C' - 'A') #define Z_DRIVE ('Z' - 'A') for (i = C_DRIVE; i <= Z_DRIVE; i++) { /* don't check on A: or B: */ if ((1 << i) & drives) { len = 2 + strlen (path); bufp = XtStackAlloc (len + 1, buf); *bufp = 'A' + i; *(bufp + 1) = ':'; *(bufp + 2) = '\0'; strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { XtStackFree (bufp, buf); return 1; } } } return 0; } #endif static Boolean TestFile( String path) { #ifndef VMS int ret = 0; struct stat status; #if defined(WIN32) char buf[MAX_PATH]; char* bufp; int len; UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS); if (AccessFile (path, buf, MAX_PATH, &bufp)) path = bufp; (void) SetErrorMode (olderror); #endif ret = (access(path, R_OK) == 0 && /* exists and is readable */ stat(path, &status) == 0 && /* get the status */ #ifndef X_NOT_POSIX S_ISDIR(status.st_mode) == 0); /* not a directory */ #else (status.st_mode & S_IFMT) != S_IFDIR); /* not a directory */ #endif /* X_NOT_POSIX else */ return ret; #else /* VMS */ return TRUE; /* Who knows what to do here? */ #endif /* VMS */ } /* return of TRUE = resolved string fit, FALSE = didn't fit. Not null-terminated and not collapsed if it didn't fit */ static Boolean Resolve( register _Xconst char *source, /* The source string */ register int len, /* The length in bytes of *source */ Substitution sub, /* Array of string values to substitute */ Cardinal num, /* Number of substitution entries */ char *buf, /* Where to put the resolved string; */ char collapse) /* Character to collapse */ { register int bytesLeft = PATH_MAX; register char* bp = buf; #ifndef DONT_COLLAPSE Boolean atBeginning = TRUE; Boolean prevIsCollapse = FALSE; #define PUT(ch) \ { \ if (--bytesLeft == 0) return FALSE; \ if (prevIsCollapse) \ if ((*bp = ch) != collapse) { \ prevIsCollapse = FALSE; \ bp++; \ } \ else bytesLeft++; \ else if ((*bp++ = ch) == collapse && !atBeginning) \ prevIsCollapse = TRUE; \ } #else /* DONT_COLLAPSE */ #define PUT(ch) \ { \ if (--bytesLeft == 0) return FALSE; \ *bp++ = ch; \ } #endif /* DONT_COLLAPSE */ #define escape '%' while (len--) { #ifndef DONT_COLLAPSE if (*source == collapse) { PUT(*source); source++; continue; } else #endif /* DONT_COLLAPSE */ if (*source != escape) { PUT(*source); } else { source++; if (len-- == 0) { PUT(escape); break; } if (*source == ':' || *source == escape) PUT(*source) else { /* Match the character against the match array */ register Cardinal j; for (j = 0; j < num && sub[j].match != *source; j++) {} /* Substitute the substitution string */ if (j >= num) PUT(*source) else if (sub[j].substitution != NULL) { char *sp = sub[j].substitution; while (*sp) { PUT(*sp); sp++; } } } } source++; #ifndef DONT_COLLAPSE atBeginning = FALSE; #endif /* DONT_COLLAPSE */ } PUT('\0'); return TRUE; #undef PUT #undef escape } String XtFindFile( _Xconst char* path, Substitution substitutions, Cardinal num_substitutions, XtFilePredicate predicate) { char *buf, *buf1, *buf2, *colon; int len; Boolean firstTime = TRUE; buf = buf1 = __XtMalloc((unsigned)PATH_MAX); buf2 = __XtMalloc((unsigned)PATH_MAX); if (predicate == NULL) predicate = TestFile; while (1) { colon = (String)path; /* skip leading colons */ while (*colon) { if (*colon != ':') break; colon++; path++; } /* now look for an un-escaped colon */ for ( ; *colon ; colon++) { if (*colon == '%' && *(path+1)) { colon++; /* bump it an extra time to skip %. */ continue; } if (*colon == ':') break; } len = colon - path; if (Resolve(path, len, substitutions, num_substitutions, buf, '/')) { if (firstTime || strcmp(buf1,buf2) != 0) { #ifdef XNL_DEBUG printf("Testing file %s\n", buf); #endif /* XNL_DEBUG */ /* Check out the file */ if ((*predicate) (buf)) { /* We've found it, return it */ #ifdef XNL_DEBUG printf("File found.\n"); #endif /* XNL_DEBUG */ if (buf == buf1) XtFree(buf2); else XtFree(buf1); return buf; } if (buf == buf1) buf = buf2; else buf = buf1; firstTime = FALSE; } } /* Nope...any more paths? */ if (*colon == '\0') break; path = colon+1; } /* No file found */ XtFree(buf1); XtFree(buf2); return NULL; } /* The implementation of this routine is operating system dependent */ /* Should match the code in Xlib _XlcMapOSLocaleName */ static char *ExtractLocaleName( String lang) { #if defined(hpux) || defined(CSRG_BASED) || defined(sun) || defined(SVR4) || defined(sgi) || defined(__osf__) || defined(AIXV3) || defined(ultrix) || defined(WIN32) || defined (linux) # ifdef hpux /* * We need to discriminated between HPUX 9 and HPUX 10. The equivalent * code in Xlib in SetLocale.c does include locale.h via X11/Xlocale.h. */ # include # ifndef _LastCategory /* HPUX 9 and earlier */ # define SKIPCOUNT 2 # define STARTCHAR ':' # define ENDCHAR ';' # else /* HPUX 10 */ # define ENDCHAR ' ' # endif # else # ifdef ultrix # define SKIPCOUNT 2 # define STARTCHAR '\001' # define ENDCHAR '\001' # else # ifdef WIN32 # define SKIPCOUNT 1 # define STARTCHAR '=' # define ENDCHAR ';' # define WHITEFILL # else # if defined(__osf__) || (defined(AIXV3) && !defined(AIXV4)) # define STARTCHAR ' ' # define ENDCHAR ' ' # else # if defined(linux) # define STARTSTR "LC_CTYPE=" # define ENDCHAR ';' # else # if !defined(sun) || defined(SVR4) # define STARTCHAR '/' # define ENDCHAR '/' # endif # endif # endif # endif # endif # endif char *start; char *end; int len; # ifdef SKIPCOUNT int n; # endif static char* buf = NULL; start = lang; # ifdef SKIPCOUNT for (n = SKIPCOUNT; --n >= 0 && start && (start = strchr (start, STARTCHAR)); start++) ; if (!start) start = lang; # endif # ifdef STARTCHAR if (start && (start = strchr (start, STARTCHAR))) # elif defined (STARTSTR) if (start && (start = strstr (start,STARTSTR))) # endif { # ifdef STARTCHAR start++; # elif defined (STARTSTR) start += strlen(STARTSTR); # endif if ((end = strchr (start, ENDCHAR))) { len = end - start; if (buf != NULL) XtFree (buf); buf = XtMalloc (len + 1); if (buf == NULL) return NULL; strncpy(buf, start, len); *(buf + len) = '\0'; # ifdef WHITEFILL for (start = buf; start = strchr(start, ' '); ) *start++ = '-'; # endif return buf; } else /* if no ENDCHAR is found we are at the end of the line */ return start; } # ifdef WHITEFILL if (strchr(lang, ' ')) { if (buf != NULL) XtFree (buf); else buf = XtMalloc (strlen (lang) + 1); if (buf == NULL) return NULL; strcpy(buf, lang); for (start = buf; start = strchr(start, ' '); ) *start++ = '-'; return buf; } # endif # undef STARTCHAR # undef ENDCHAR # undef WHITEFILL #endif return lang; } static void FillInLangSubs( Substitution subs, XtPerDisplay pd) { int len; char *string, *p1, *p2, *p3; char **rest; char *ch; if (pd->language == NULL || (pd->language != NULL && pd->language[0] == '\0')) { subs[0].substitution = subs[1].substitution = subs[2].substitution = subs[3].substitution = NULL; return; } string = ExtractLocaleName(pd->language); if (string == NULL || (string != NULL && string[0] == '\0')) { subs[0].substitution = subs[1].substitution = subs[2].substitution = subs[3].substitution = NULL; return; } len = strlen(string) + 1; subs[0].substitution = string; p1 = subs[1].substitution = __XtMalloc((Cardinal) 3*len); p2 = subs[2].substitution = subs[1].substitution + len; p3 = subs[3].substitution = subs[2].substitution + len; /* Everything up to the first "_" goes into p1. From "_" to "." in p2. The rest in p3. If no delimiters, all goes into p1. We assume p1, p2, and p3 are large enough. */ *p1 = *p2 = *p3 = '\0'; ch = strchr(string, '_'); if (ch != NULL) { len = ch - string; (void) strncpy(p1, string, len); p1[len] = '\0'; string = ch + 1; rest = &p2; } else rest = &p1; /* Rest points to where we put the first part */ ch = strchr(string, '.'); if (ch != NULL) { len = ch - string; strncpy(*rest, string, len); (*rest)[len] = '\0'; (void) strcpy(p3, ch+1); } else (void) strcpy(*rest, string); } /* * default path used if environment variable XFILESEARCHPATH * is not defined. Also substitued for %D. * The exact value should be documented in the implementation * notes for any Xt implementation. */ static const char *implementation_default_path(void) { #if defined(WIN32) static char xfilesearchpath[] = ""; return xfilesearchpath; #else return XFILESEARCHPATHDEFAULT; #endif } static SubstitutionRec defaultSubs[] = { {'N', NULL}, {'T', NULL}, {'S', NULL}, {'C', NULL}, {'L', NULL}, {'l', NULL}, {'t', NULL}, {'c', NULL} }; String XtResolvePathname( Display *dpy, _Xconst char* type, _Xconst char* filename, _Xconst char* suffix, _Xconst char* path, Substitution substitutions, Cardinal num_substitutions, XtFilePredicate predicate) { XtPerDisplay pd; static const char *defaultPath = NULL; const char *impl_default = implementation_default_path(); int idef_len = strlen(impl_default); char *massagedPath; int bytesAllocd, bytesLeft; char *ch, *result; Substitution merged_substitutions; XrmRepresentation db_type; XrmValue value; XrmName name_list[3]; XrmClass class_list[3]; Boolean pathMallocd = False; LOCK_PROCESS; pd = _XtGetPerDisplay(dpy); if (path == NULL) { #ifndef VMS if (defaultPath == NULL) { defaultPath = getenv("XFILESEARCHPATH"); if (defaultPath == NULL) defaultPath = impl_default; } path = defaultPath; #endif /* VMS */ } if (path == NULL) path = ""; /* NULL would kill us later */ if (filename == NULL) { filename = XrmClassToString(pd->class); } bytesAllocd = bytesLeft = 1000; massagedPath = ALLOCATE_LOCAL(bytesAllocd); if (massagedPath == NULL) _XtAllocError(NULL); if (path[0] == ':') { strcpy(massagedPath, "%N%S"); ch = &massagedPath[4]; bytesLeft -= 4; } else ch = massagedPath; /* Insert %N%S between adjacent colons * and default path for %D. * Default path should not have any adjacent colons of its own. */ while (*path != '\0') { if (bytesLeft < idef_len) { int bytesUsed = bytesAllocd - bytesLeft; char *new; bytesAllocd +=1000; new = __XtMalloc((Cardinal) bytesAllocd); strncpy( new, massagedPath, bytesUsed ); ch = new + bytesUsed; if (pathMallocd) XtFree(massagedPath); else DEALLOCATE_LOCAL(massagedPath); pathMallocd = True; massagedPath = new; bytesLeft = bytesAllocd - bytesUsed; } if (*path == '%' && *(path+1) == ':') { *ch++ = '%'; *ch++ = ':'; path += 2; bytesLeft -= 2; continue; } if (*path == ':' && *(path+1) == ':') { strcpy(ch, ":%N%S:"); ch += 6; bytesLeft -= 6; while (*path == ':') path++; continue; } if (*path == '%' && *(path+1) == 'D') { strcpy(ch, impl_default); ch += idef_len; bytesLeft -= idef_len; path += 2; continue; } *ch++ = *path++; bytesLeft--; } *ch = '\0'; #ifdef XNL_DEBUG printf("Massaged path: %s\n", massagedPath); #endif /* XNL_DEBUG */ if (num_substitutions == 0) merged_substitutions = defaultSubs; else { int i = XtNumber(defaultSubs); Substitution sub, def; merged_substitutions = sub = (Substitution) ALLOCATE_LOCAL((unsigned)(num_substitutions+i)*sizeof(SubstitutionRec)); if (sub == NULL) _XtAllocError(NULL); for (def = defaultSubs; i--; sub++, def++) sub->match = def->match; for (i = num_substitutions; i--; ) *sub++ = *substitutions++; } merged_substitutions[0].substitution = (String)filename; merged_substitutions[1].substitution = (String)type; merged_substitutions[2].substitution = (String)suffix; name_list[0] = pd->name; name_list[1] = XrmPermStringToQuark("customization"); name_list[2] = NULLQUARK; class_list[0] = pd->class; class_list[1] = XrmPermStringToQuark("Customization"); class_list[2] = NULLQUARK; if (XrmQGetResource(XrmGetDatabase(dpy), name_list, class_list, &db_type, &value) && db_type == _XtQString) merged_substitutions[3].substitution = (char *)value.addr; else merged_substitutions[3].substitution = NULL; FillInLangSubs(&merged_substitutions[4], pd); result = XtFindFile(massagedPath, merged_substitutions, num_substitutions + XtNumber(defaultSubs), predicate); if (merged_substitutions[5].substitution != NULL) XtFree( (XtPointer)merged_substitutions[5].substitution ); if (merged_substitutions != defaultSubs) DEALLOCATE_LOCAL(merged_substitutions); if (pathMallocd) XtFree(massagedPath); else DEALLOCATE_LOCAL(massagedPath); UNLOCK_PROCESS; return result; } Boolean XtCallAcceptFocus( Widget widget, Time *time) { XtAcceptFocusProc ac; Boolean retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; ac = XtClass(widget)->core_class.accept_focus; UNLOCK_PROCESS; if (ac != NULL) retval = (*ac) (widget, time); else retval = FALSE; UNLOCK_APP(app); return retval; } #ifdef XT_GEO_TATTLER /************************************************************************** GeoTattler: This is used to debug Geometry management in Xt. It uses a pseudo resource XtNgeotattler. E.G. if those lines are found in the resource database: myapp*draw.XmScale.geoTattler: ON *XmScrollBar.geoTattler:ON *XmRowColumn.exit_button.geoTattler:ON then: all the XmScale children of the widget named draw, all the XmScrollBars, the widget named exit_button in any XmRowColumn will return True to the function IsTattled(), and will generate outlined trace to stdout. *************************************************************************/ #define XtNgeoTattler "geoTattler" #define XtCGeoTattler "GeoTattler" typedef struct { Boolean geo_tattler ;} GeoDataRec ; static XtResource geo_resources[] = { { XtNgeoTattler, XtCGeoTattler, XtRBoolean, sizeof(Boolean), XtOffsetOf(GeoDataRec, geo_tattler), XtRImmediate, (XtPointer) False } }; /************************************************************************ This function uses XtGetSubresources to find out if a widget needs to be geo-spied by the caller. */ static Boolean IsTattled (Widget widget) { GeoDataRec geo_data ; XtGetSubresources(widget, (XtPointer)&geo_data, (String)NULL, (String)NULL, geo_resources, XtNumber(geo_resources), NULL, 0); return geo_data.geo_tattler; } /* IsTattled */ static int n_tab = 0 ; /* not MT for now */ void _XtGeoTab (int direction) /* +1 or -1 */ { n_tab += direction ; } void _XtGeoTrace (Widget widget, ...) { va_list args; char *fmt; int i ; if (IsTattled(widget)) { va_start(args, widget); fmt = va_arg(args, char *); for (i=0; i #endif #include "IntrinsicI.h" #include "VarargsI.h" #include "Shell.h" #include "ShellP.h" #include "StringDefs.h" #include static XrmClass QBoolean, QString, QCallProc, QImmediate; static XrmName QinitialResourcesPersistent, QInitialResourcesPersistent; static XrmClass QTranslations, QTranslationTable; static XrmName Qtranslations, QbaseTranslations; static XrmName Qscreen; static XrmClass QScreen; void _XtCopyFromParent( Widget widget, int offset, XrmValue *value) { if (widget->core.parent == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidParent","xtCopyFromParent",XtCXtToolkitError, "CopyFromParent must have non-NULL parent", (String *)NULL, (Cardinal *)NULL); value->addr = NULL; return; } value->addr = (XPointer)(((char *)widget->core.parent) + offset); } /* _XtCopyFromParent */ void _XtCopyFromArg( XtArgVal src, char* dst, register unsigned int size) { if (size > sizeof(XtArgVal)) (void) memmove((char *) dst, (char *) src, (int) size); else { union { long longval; #ifdef LONG64 int intval; #endif short shortval; char charval; char* charptr; XtPointer ptr; } u; char *p = (char*)&u; if (size == sizeof(long)) u.longval = (long)src; #ifdef LONG64 else if (size == sizeof(int)) u.intval = (int)src; #endif else if (size == sizeof(short)) u.shortval = (short)src; else if (size == sizeof(char)) u.charval = (char)src; else if (size == sizeof(XtPointer)) u.ptr = (XtPointer)src; else if (size == sizeof(char*)) u.charptr = (char*)src; else p = (char*)&src; (void) memmove(dst, p, (int) size); } } /* _XtCopyFromArg */ void _XtCopyToArg( char* src, XtArgVal *dst, register unsigned int size) { if (!*dst) { #ifdef GETVALUES_BUG /* old GetValues semantics (storing directly into arglists) are bad, * but preserve for compatibility as long as arglist contains NULL. */ union { long longval; #ifdef LONG64 int intval; #endif short shortval; char charval; char* charptr; XtPointer ptr; } u; if (size <= sizeof(XtArgVal)) { (void) memmove((char*)&u, (char*)src, (int)size ); if (size == sizeof(long)) *dst = (XtArgVal)u.longval; #ifdef LONG64 else if (size == sizeof(int)) *dst = (XtArgVal)u.intval; #endif else if (size == sizeof(short)) *dst = (XtArgVal)u.shortval; else if (size == sizeof(char)) *dst = (XtArgVal)u.charval; else if (size == sizeof(char*)) *dst = (XtArgVal)u.charptr; else if (size == sizeof(XtPointer)) *dst = (XtArgVal)u.ptr; else (void) memmove((char*)dst, (char*)src, (int)size ); } else (void) memmove((char*)dst, (char*)src, (int)size ); #else XtErrorMsg("invalidGetValues", "xtGetValues", XtCXtToolkitError, "NULL ArgVal in XtGetValues", (String*) NULL, (Cardinal*) NULL); #endif } else { /* proper GetValues semantics: argval is pointer to destination */ (void) memmove((char*)*dst, (char*)src, (int)size ); } } /* _XtCopyToArg */ static void CopyToArg( char* src, XtArgVal *dst, register unsigned int size) { if (!*dst) { /* old GetValues semantics (storing directly into arglists) are bad, * but preserve for compatibility as long as arglist contains NULL. */ union { long longval; #ifdef LONG64 int intval; #endif short shortval; char charval; char* charptr; XtPointer ptr; } u; if (size <= sizeof(XtArgVal)) { (void) memmove((char*)&u, (char*)src, (int)size ); if (size == sizeof(long)) *dst = (XtArgVal)u.longval; #ifdef LONG64 else if (size == sizeof(int)) *dst = (XtArgVal)u.intval; #endif else if (size == sizeof(short)) *dst = (XtArgVal)u.shortval; else if (size == sizeof(char)) *dst = (XtArgVal)u.charval; else if (size == sizeof(char*)) *dst = (XtArgVal)u.charptr; else if (size == sizeof(XtPointer)) *dst = (XtArgVal)u.ptr; else (void) memmove((char*)dst, (char*)src, (int)size ); } else (void) memmove((char*)dst, (char*)src, (int)size ); } else { /* proper GetValues semantics: argval is pointer to destination */ (void) memmove((char*)*dst, (char*)src, (int)size ); } } /* CopyToArg */ static Cardinal CountTreeDepth( Widget w) { Cardinal count; for (count = 1; w != NULL; w = (Widget) w->core.parent) count++; return count; } static void GetNamesAndClasses( register Widget w, register XrmNameList names, register XrmClassList classes) { register Cardinal length, j; register XrmQuark t; WidgetClass class; /* Return null-terminated quark arrays, with length the number of quarks (not including NULL) */ LOCK_PROCESS; for (length = 0; w != NULL; w = (Widget) w->core.parent) { names[length] = w->core.xrm_name; class = XtClass(w); /* KLUDGE KLUDGE KLUDGE KLUDGE */ if (w->core.parent == NULL && XtIsApplicationShell(w)) { classes[length] = ((ApplicationShellWidget) w)->application.xrm_class; } else classes[length] = class->core_class.xrm_class; length++; } UNLOCK_PROCESS; /* They're in backwards order, flop them around */ for (j = 0; j < length/2; j++) { t = names[j]; names[j] = names[length-j-1]; names[length-j-1] = t; t = classes[j]; classes[j] = classes[length-j-1]; classes[length-j-1] = t; } names[length] = NULLQUARK; classes[length] = NULLQUARK; } /* GetNamesAndClasses */ /* Spiffy fast compiled form of resource list. */ /* XtResourceLists are compiled in-place into XrmResourceLists */ /* All atoms are replaced by quarks, and offsets are -offset-1 to */ /* indicate that this list has been compiled already */ void _XtCompileResourceList( register XtResourceList resources, Cardinal num_resources) { register Cardinal count; #define xrmres ((XrmResourceList) resources) #define PSToQ XrmPermStringToQuark for (count = 0; count < num_resources; resources++, count++) { xrmres->xrm_name = PSToQ(resources->resource_name); xrmres->xrm_class = PSToQ(resources->resource_class); xrmres->xrm_type = PSToQ(resources->resource_type); xrmres->xrm_offset = (Cardinal) (-(int)resources->resource_offset - 1); xrmres->xrm_default_type = PSToQ(resources->default_type); } #undef PSToQ #undef xrmres } /* _XtCompileResourceList */ /* Like _XtCompileResourceList, but strings are not permanent */ static void XrmCompileResourceListEphem( register XtResourceList resources, Cardinal num_resources) { register Cardinal count; #define xrmres ((XrmResourceList) resources) for (count = 0; count < num_resources; resources++, count++) { xrmres->xrm_name = StringToName(resources->resource_name); xrmres->xrm_class = StringToClass(resources->resource_class); xrmres->xrm_type = StringToQuark(resources->resource_type); xrmres->xrm_offset = (Cardinal) (-(int)resources->resource_offset - 1); xrmres->xrm_default_type = StringToQuark(resources->default_type); } #undef xrmres } /* XrmCompileResourceListEphem */ static void BadSize( Cardinal size, XrmQuark name) { String params[2]; Cardinal num_params = 2; params[0] = (String)(long) size; params[1] = XrmQuarkToString(name); XtWarningMsg("invalidSizeOverride", "xtDependencies", XtCXtToolkitError, "Representation size %d must match superclass's to override %s", params, &num_params); } /* BadType */ /* * Create a new resource list, with the class resources following the * superclass's resources. If a resource in the class list overrides * a superclass resource, then just replace the superclass entry in place. * * At the same time, add a level of indirection to the XtResourceList to * create and XrmResourceList. */ void _XtDependencies( XtResourceList *class_resp, /* VAR */ Cardinal *class_num_resp, /* VAR */ XrmResourceList *super_res, Cardinal super_num_res, Cardinal super_widget_size) { register XrmResourceList *new_res; Cardinal new_num_res; XrmResourceList class_res = (XrmResourceList) *class_resp; Cardinal class_num_res = *class_num_resp; register Cardinal i, j; Cardinal new_next; if (class_num_res == 0) { /* Just point to superclass resource list */ *class_resp = (XtResourceList) super_res; *class_num_resp = super_num_res; return; } /* Allocate and initialize new_res with superclass resource pointers */ new_num_res = super_num_res + class_num_res; new_res = (XrmResourceList *) __XtMalloc(new_num_res*sizeof(XrmResourceList)); if (super_num_res > 0) XtMemmove(new_res, super_res, super_num_res * sizeof(XrmResourceList)); /* Put pointers to class resource entries into new_res */ new_next = super_num_res; for (i = 0; i < class_num_res; i++) { if ((Cardinal)(-class_res[i].xrm_offset-1) < super_widget_size) { /* Probably an override of superclass resources--look for overlap */ for (j = 0; j < super_num_res; j++) { if (class_res[i].xrm_offset == new_res[j]->xrm_offset) { /* Spec is silent on what fields subclass can override. * The only two of real concern are type & size. * Although allowing type to be over-ridden introduces * the possibility of errors, it's at present the only * reasonable way to allow a subclass to force a private * converter to be invoked for a subset of fields. */ /* We do insist that size be identical to superclass */ if (class_res[i].xrm_size != new_res[j]->xrm_size) { BadSize(class_res[i].xrm_size, (XrmQuark) class_res[i].xrm_name); class_res[i].xrm_size = new_res[j]->xrm_size; } new_res[j] = &(class_res[i]); new_num_res--; goto NextResource; } } /* for j */ } /* Not an overlap, add an entry to new_res */ new_res[new_next++] = &(class_res[i]); NextResource:; } /* for i */ /* Okay, stuff new resources back into class record */ *class_resp = (XtResourceList) new_res; *class_num_resp = new_num_res; } /* _XtDependencies */ void _XtResourceDependencies( WidgetClass wc) { WidgetClass sc; sc = wc->core_class.superclass; if (sc == NULL) { _XtDependencies(&(wc->core_class.resources), &(wc->core_class.num_resources), (XrmResourceList *) NULL, (unsigned)0, (unsigned)0); } else { _XtDependencies(&(wc->core_class.resources), &(wc->core_class.num_resources), (XrmResourceList *) sc->core_class.resources, sc->core_class.num_resources, sc->core_class.widget_size); } } /* _XtResourceDependencies */ void _XtConstraintResDependencies( ConstraintWidgetClass wc) { ConstraintWidgetClass sc; if (wc == (ConstraintWidgetClass) constraintWidgetClass) { _XtDependencies(&(wc->constraint_class.resources), &(wc->constraint_class.num_resources), (XrmResourceList *)NULL, (unsigned)0, (unsigned)0); } else { sc = (ConstraintWidgetClass) wc->core_class.superclass; _XtDependencies(&(wc->constraint_class.resources), &(wc->constraint_class.num_resources), (XrmResourceList *) sc->constraint_class.resources, sc->constraint_class.num_resources, sc->constraint_class.constraint_size); } } /* _XtConstraintResDependencies */ XrmResourceList* _XtCreateIndirectionTable ( XtResourceList resources, Cardinal num_resources) { register Cardinal idx; XrmResourceList* table; table = (XrmResourceList*)__XtMalloc(num_resources * sizeof(XrmResourceList)); for (idx = 0; idx < num_resources; idx++) table[idx] = (XrmResourceList)(&(resources[idx])); return table; } static XtCacheRef *GetResources( Widget widget, /* Widget resources are associated with */ char* base, /* Base address of memory to write to */ XrmNameList names, /* Full inheritance name of widget */ XrmClassList classes, /* Full inheritance class of widget */ XrmResourceList* table, /* The list of resources required. */ unsigned num_resources, /* number of items in resource list */ XrmQuarkList quark_args, /* Arg names quarkified */ ArgList args, /* ArgList to override resources */ unsigned num_args, /* number of items in arg list */ XtTypedArgList typed_args, /* Typed arg list to override resources */ Cardinal* pNumTypedArgs, /* number of items in typed arg list */ Boolean tm_hack) /* do baseTranslations */ { /* * assert: *pNumTypedArgs == 0 if num_args > 0 * assert: num_args == 0 if *pNumTypedArgs > 0 */ #define SEARCHLISTLEN 100 #define MAXRESOURCES 400 XrmValue value; XrmQuark rawType; XrmValue convValue; XrmHashTable stackSearchList[SEARCHLISTLEN]; XrmHashTable *searchList = stackSearchList; unsigned int searchListSize = SEARCHLISTLEN; Boolean found[MAXRESOURCES]; int typed[MAXRESOURCES]; XtCacheRef cache_ref[MAXRESOURCES]; XtCacheRef *cache_ptr, *cache_base; Boolean persistent_resources = True; Boolean found_persistence = False; int num_typed_args = *pNumTypedArgs; XrmDatabase db; Boolean do_tm_hack = False; if ((args == NULL) && (num_args != 0)) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidArgCount","getResources",XtCXtToolkitError, "argument count > 0 on NULL argument list", (String *)NULL, (Cardinal *)NULL); num_args = 0; } if (num_resources == 0) { return NULL; } else if (num_resources >= MAXRESOURCES) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidResourceCount","getResources",XtCXtToolkitError, "too many resources", (String *)NULL, (Cardinal *)NULL); return NULL; } else if (table == NULL) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidResourceCount","getResources",XtCXtToolkitError, "resource count > 0 on NULL resource list", (String *)NULL, (Cardinal *)NULL); return NULL; } /* Mark each resource as not found on arg list */ bzero((char *) found, (int) (num_resources * sizeof(Boolean))); bzero((char *) typed, (int) (num_resources * sizeof(int))); /* Copy the args into the resources, mark each as found */ { register ArgList arg; register XtTypedArgList typed_arg; register XrmName argName; register Cardinal j; register int i; register XrmResourceList rx; register XrmResourceList *res; for (arg = args, i = 0; (Cardinal)i < num_args; i++, arg++) { argName = quark_args[i]; if (argName == QinitialResourcesPersistent) { persistent_resources = (Boolean)arg->value; found_persistence = True; continue; } for (j = 0, res = table; j < num_resources; j++, res++) { rx = *res; if (argName == rx->xrm_name) { _XtCopyFromArg( arg->value, base - rx->xrm_offset - 1, rx->xrm_size); found[j] = TRUE; break; } } } for (typed_arg = typed_args, i = 0; i < num_typed_args; i++, typed_arg++) { register XrmRepresentation argType; argName = quark_args[i]; argType = (typed_arg->type == NULL) ? NULLQUARK : XrmStringToRepresentation(typed_arg->type); if (argName == QinitialResourcesPersistent) { persistent_resources = (Boolean)typed_arg->value; found_persistence = True; break; } for (j = 0, res = table; j < num_resources; j++, res++) { rx = *res; if (argName == rx->xrm_name) { if (argType != NULLQUARK && argType != rx->xrm_type) { typed[j] = i + 1; } else { _XtCopyFromArg( typed_arg->value, base - rx->xrm_offset - 1, rx->xrm_size); } found[j] = TRUE; break; } } } } /* Ask resource manager for a list of database levels that we can do a single-level search on each resource */ db = XtScreenDatabase(XtScreenOfObject(widget)); while (!XrmQGetSearchList(db, names, classes, searchList, searchListSize)) { if (searchList == stackSearchList) searchList = NULL; searchList = (XrmHashTable*)XtRealloc((char*)searchList, sizeof(XrmHashTable) * (searchListSize *= 2)); } if (persistent_resources) cache_base = NULL; else cache_base = cache_ref; /* geez, this is an ugly mess */ if (XtIsShell(widget)) { register XrmResourceList *res; register Cardinal j; Screen *oldscreen = widget->core.screen; /* look up screen resource first, since real rdb depends on it */ for (res = table, j = 0; j < num_resources; j++, res++) { if ((*res)->xrm_name != Qscreen) continue; if (typed[j]) { register XtTypedArg* arg = typed_args + typed[j] - 1; XrmQuark from_type; XrmValue from_val, to_val; from_type = StringToQuark(arg->type); from_val.size = arg->size; if ((from_type == QString) || ((unsigned) arg->size > sizeof(XtArgVal))) from_val.addr = (XPointer)arg->value; else from_val.addr = (XPointer)&arg->value; to_val.size = sizeof(Screen*); to_val.addr = (XPointer)&widget->core.screen; found[j] = _XtConvert(widget, from_type, &from_val, QScreen, &to_val, cache_base); if (cache_base && *cache_base) cache_base++; } if (!found[j]) { if (XrmQGetSearchResource(searchList, Qscreen, QScreen, &rawType, &value)) { if (rawType != QScreen) { convValue.size = sizeof(Screen*); convValue.addr = (XPointer)&widget->core.screen; (void)_XtConvert(widget, rawType, &value, QScreen, &convValue, cache_base); if (cache_base && *cache_base) cache_base++; } else { widget->core.screen = *((Screen **)value.addr); } } } break; } /* now get the database to use for the rest of the resources */ if (widget->core.screen != oldscreen) { db = XtScreenDatabase(widget->core.screen); while (!XrmQGetSearchList(db, names, classes, searchList, searchListSize)) { if (searchList == stackSearchList) searchList = NULL; searchList = (XrmHashTable*)XtRealloc((char*)searchList, sizeof(XrmHashTable) * (searchListSize *= 2)); } } } /* go to the resource manager for those resources not found yet */ /* if it's not in the resource database use the default value */ { register XrmResourceList rx; register XrmResourceList *res; register Cardinal j; register XrmRepresentation xrm_type; register XrmRepresentation xrm_default_type; char char_val; short short_val; int int_val; long long_val; char* char_ptr; if (!found_persistence) { if (XrmQGetSearchResource(searchList, QinitialResourcesPersistent, QInitialResourcesPersistent, &rawType, &value)) { if (rawType != QBoolean) { convValue.size = sizeof(Boolean); convValue.addr = (XPointer)&persistent_resources; (void)_XtConvert(widget, rawType, &value, QBoolean, &convValue, NULL); } else persistent_resources = *(Boolean*)value.addr; } } if (persistent_resources) cache_ptr = NULL; else if (cache_base) cache_ptr = cache_base; else cache_ptr = cache_ref; for (res = table, j = 0; j < num_resources; j++, res++) { rx = *res; xrm_type = rx->xrm_type; if (typed[j]) { register XtTypedArg* arg = typed_args + typed[j] - 1; /* * This resource value has been specified as a typed arg and * has to be converted. Typed arg conversions are done here * to correctly interpose them with normal resource conversions. */ XrmQuark from_type; XrmValue from_val, to_val; Boolean converted; from_type = StringToQuark(arg->type); from_val.size = arg->size; if ((from_type == QString) || ((unsigned) arg->size > sizeof(XtArgVal))) from_val.addr = (XPointer)arg->value; else from_val.addr = (XPointer)&arg->value; to_val.size = rx->xrm_size; to_val.addr = base - rx->xrm_offset - 1; converted = _XtConvert(widget, from_type, &from_val, xrm_type, &to_val, cache_ptr); if (converted) { /* Copy the converted value back into the typed argument. * normally the data should be <= sizeof(XtArgVal) and * is stored directly into the 'value' field .... BUT * if the resource size is greater than sizeof(XtArgVal) * then we dynamically alloc a block of store to hold the * data and zap a copy in there !!! .... freeing it later * the size field in the typed arg is negated to indicate * that the store pointed to by the value field is * dynamic ....... * "freeing" happens in the case of _XtCreate after the * CallInitialize ..... other clients of GetResources * using typed args should be aware of the need to free * this store ..... */ if(rx->xrm_size > sizeof(XtArgVal)) { arg->value = (XtArgVal) __XtMalloc(rx->xrm_size); arg->size = -(arg->size); } else { /* will fit - copy directly into value field */ arg->value = (XtArgVal) NULL; } CopyToArg((char *)(base - rx->xrm_offset - 1), &arg->value, rx->xrm_size); } else { /* Conversion failed. Get default value. */ found[j] = False; } if (cache_ptr && *cache_ptr) cache_ptr++; } if (!found[j]) { Boolean already_copied = False; Boolean have_value = False; if (XrmQGetSearchResource(searchList, rx->xrm_name, rx->xrm_class, &rawType, &value)) { if (rawType != xrm_type) { convValue.size = rx->xrm_size; convValue.addr = (XPointer)(base - rx->xrm_offset - 1); already_copied = have_value = _XtConvert(widget, rawType, &value, xrm_type, &convValue, cache_ptr); if (cache_ptr && *cache_ptr) cache_ptr++; } else have_value = True; if (have_value && rx->xrm_name == Qtranslations) do_tm_hack = True; } LOCK_PROCESS; if (!have_value && ((rx->xrm_default_type == QImmediate) || (rx->xrm_default_type == xrm_type) || (rx->xrm_default_addr != NULL))) { /* Convert default value to proper type */ xrm_default_type = rx->xrm_default_type; if (xrm_default_type == QCallProc) { (*(XtResourceDefaultProc)(rx->xrm_default_addr))( widget,-(rx->xrm_offset+1), &value); } else if (xrm_default_type == QImmediate) { /* XtRImmediate == XtRString for type XtRString */ if (xrm_type == QString) { value.addr = rx->xrm_default_addr; } else if (rx->xrm_size == sizeof(int)) { int_val = (int)(long)rx->xrm_default_addr; value.addr = (XPointer) &int_val; } else if (rx->xrm_size == sizeof(short)) { short_val = (short)(long)rx->xrm_default_addr; value.addr = (XPointer) &short_val; } else if (rx->xrm_size == sizeof(char)) { char_val = (char)(long)rx->xrm_default_addr; value.addr = (XPointer) &char_val; } else if (rx->xrm_size == sizeof(long)) { long_val = (long)rx->xrm_default_addr; value.addr = (XPointer) &long_val; } else if (rx->xrm_size == sizeof(char*)) { char_ptr = (char*)rx->xrm_default_addr; value.addr = (XPointer) &char_ptr; } else { value.addr = (XPointer) &(rx->xrm_default_addr); } } else if (xrm_default_type == xrm_type) { value.addr = rx->xrm_default_addr; } else { value.addr = rx->xrm_default_addr; if (xrm_default_type == QString) { value.size = strlen((char *)value.addr) + 1; } else { value.size = sizeof(XtPointer); } convValue.size = rx->xrm_size; convValue.addr = (XPointer)(base - rx->xrm_offset - 1); already_copied = _XtConvert(widget, xrm_default_type, &value, xrm_type, &convValue, cache_ptr); if (!already_copied) value.addr = NULL; if (cache_ptr && *cache_ptr) cache_ptr++; } } if (!already_copied) { if (xrm_type == QString) { *((String*)(base - rx->xrm_offset - 1)) = value.addr; } else { if (value.addr != NULL) { XtMemmove(base - rx->xrm_offset - 1, value.addr, rx->xrm_size); } else { /* didn't get value, initialize to NULL... */ XtBZero(base - rx->xrm_offset - 1, rx->xrm_size); } } } UNLOCK_PROCESS; } } for (res = table, j = 0; j < num_resources; j++, res++) { if (!found[j] && typed[j]) { /* * This resource value was specified as a typed arg. * However, the default value is being used here since * type type conversion failed, so we compress the list. */ register XtTypedArg* arg = typed_args + typed[j] - 1; register int i; for (i = num_typed_args - typed[j]; i > 0; i--, arg++) { *arg = *(arg+1); } num_typed_args--; } } if (tm_hack) widget->core.tm.current_state = NULL; if (tm_hack && (!widget->core.tm.translations || (do_tm_hack && widget->core.tm.translations->operation != XtTableReplace)) && XrmQGetSearchResource(searchList, QbaseTranslations, QTranslations, &rawType, &value)) { if (rawType != QTranslationTable) { convValue.size = sizeof(XtTranslations); convValue.addr = (XPointer)&widget->core.tm.current_state; (void)_XtConvert(widget, rawType, &value, QTranslationTable, &convValue, cache_ptr); if (cache_ptr && *cache_ptr) cache_ptr++; } else { /* value.addr can be NULL see: !already_copied */ if (value.addr) *((XtTranslations *)&widget->core.tm.current_state) = *((XtTranslations *)value.addr); } } } if ((Cardinal)num_typed_args != *pNumTypedArgs) *pNumTypedArgs = num_typed_args; if (searchList != stackSearchList) XtFree((char*)searchList); if (!cache_ptr) cache_ptr = cache_base; if (cache_ptr && cache_ptr != cache_ref) { int cache_ref_size = cache_ptr - cache_ref; XtCacheRef *refs = (XtCacheRef*) __XtMalloc((unsigned)sizeof(XtCacheRef)*(cache_ref_size + 1)); (void) memmove(refs, cache_ref, sizeof(XtCacheRef)*cache_ref_size ); refs[cache_ref_size] = NULL; return refs; } return (XtCacheRef*)NULL; } static void CacheArgs( ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args, XrmQuarkList quark_cache, Cardinal num_quarks, XrmQuarkList *pQuarks) /* RETURN */ { register XrmQuarkList quarks; register Cardinal i; register Cardinal count; count = (args != NULL) ? num_args : num_typed_args; if (num_quarks < count) { quarks = (XrmQuarkList) __XtMalloc(count * sizeof(XrmQuark)); } else { quarks = quark_cache; } *pQuarks = quarks; if (args != NULL) { for (i = count; i; i--) *quarks++ = StringToQuark((args++)->name); } else { for (i = count; i; i--) *quarks++ = StringToQuark((typed_args++)->name); } } #define FreeCache(cache, pointer) \ if (cache != pointer) XtFree((char *)pointer) XtCacheRef *_XtGetResources( register Widget w, ArgList args, Cardinal num_args, XtTypedArgList typed_args, Cardinal* num_typed_args) { XrmName *names, names_s[50]; XrmClass *classes, classes_s[50]; XrmQuark quark_cache[100]; XrmQuarkList quark_args; WidgetClass wc; ConstraintWidgetClass cwc; XtCacheRef *cache_refs, *cache_refs_core; Cardinal count; wc = XtClass(w); count = CountTreeDepth(w); names = (XrmName*) XtStackAlloc (count * sizeof(XrmName), names_s); classes = (XrmClass*) XtStackAlloc (count * sizeof(XrmClass), classes_s); if (names == NULL || classes == NULL) _XtAllocError(NULL); /* Get names, classes for widget and ancestors */ GetNamesAndClasses(w, names, classes); /* Compile arg list into quarks */ CacheArgs(args, num_args, typed_args, *num_typed_args, quark_cache, XtNumber(quark_cache), &quark_args); /* Get normal resources */ LOCK_PROCESS; cache_refs = GetResources(w, (char*)w, names, classes, (XrmResourceList *) wc->core_class.resources, wc->core_class.num_resources, quark_args, args, num_args, typed_args, num_typed_args, XtIsWidget(w)); if (w->core.constraints != NULL) { cwc = (ConstraintWidgetClass) XtClass(w->core.parent); cache_refs_core = GetResources(w, (char*)w->core.constraints, names, classes, (XrmResourceList *) cwc->constraint_class.resources, cwc->constraint_class.num_resources, quark_args, args, num_args, typed_args, num_typed_args, False); if (cache_refs_core) { XtFree((char *)cache_refs_core); } } FreeCache(quark_cache, quark_args); UNLOCK_PROCESS; XtStackFree((XtPointer)names, names_s); XtStackFree((XtPointer)classes, classes_s); return cache_refs; } /* _XtGetResources */ void _XtGetSubresources ( Widget w, /* Widget "parent" of subobject */ XtPointer base, /* Base address to write to */ const char* name, /* name of subobject */ const char* class, /* class of subobject */ XtResourceList resources, /* resource list for subobject */ Cardinal num_resources, ArgList args, /* arg list to override resources */ Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args) { XrmName *names, names_s[50]; XrmClass *classes, classes_s[50]; XrmQuark quark_cache[100]; XrmQuarkList quark_args; XrmResourceList* table; Cardinal count, ntyped_args = num_typed_args; XtCacheRef *Resrc = NULL; WIDGET_TO_APPCON(w); if (num_resources == 0) return; LOCK_APP(app); count = CountTreeDepth(w); count++; /* make sure there's enough room for name and class */ names = (XrmName*) XtStackAlloc(count * sizeof(XrmName), names_s); classes = (XrmClass*) XtStackAlloc(count * sizeof(XrmClass), classes_s); if (names == NULL || classes == NULL) _XtAllocError(NULL); /* Get full name, class of subobject */ GetNamesAndClasses(w, names, classes); count -= 2; names[count] = StringToName(name); classes[count] = StringToClass(class); count++; names[count] = NULLQUARK; classes[count] = NULLQUARK; /* Compile arg list into quarks */ CacheArgs(args, num_args, typed_args, num_typed_args, quark_cache, XtNumber(quark_cache), &quark_args); /* Compile resource list if needed */ if (((int) resources->resource_offset) >= 0) { XrmCompileResourceListEphem(resources, num_resources); } table = _XtCreateIndirectionTable(resources, num_resources); Resrc = GetResources(w, (char*)base, names, classes, table, num_resources, quark_args, args, num_args, typed_args, &ntyped_args, False); FreeCache(quark_cache, quark_args); XtFree((char *)table); XtFree((char *)Resrc); XtStackFree((XtPointer)names, names_s); XtStackFree((XtPointer)classes, classes_s); UNLOCK_APP(app); } void XtGetSubresources ( Widget w, /* Widget "parent" of subobject */ XtPointer base, /* Base address to write to */ _Xconst char* name, /* name of subobject */ _Xconst char* class, /* class of subobject */ XtResourceList resources, /* resource list for subobject */ Cardinal num_resources, ArgList args, /* arg list to override resources */ Cardinal num_args) { _XtGetSubresources (w, base, name, class, resources, num_resources, args, num_args, NULL, 0); } void _XtGetApplicationResources ( Widget w, /* Application shell widget */ XtPointer base, /* Base address to write to */ XtResourceList resources, /* resource list for subobject */ Cardinal num_resources, ArgList args, /* arg list to override resources */ Cardinal num_args, XtTypedArgList typed_args, Cardinal num_typed_args) { XrmName *names, names_s[50]; XrmClass *classes, classes_s[50]; XrmQuark quark_cache[100]; XrmQuarkList quark_args; XrmResourceList* table; Cardinal count, ntyped_args = num_typed_args; #ifdef XTHREADS XtAppContext app; #endif XtCacheRef *Resrc = NULL; if (num_resources == 0) return; #ifdef XTHREADS if (w == NULL) app = _XtDefaultAppContext(); else app = XtWidgetToApplicationContext(w); #endif LOCK_APP(app); /* Get full name, class of application */ if (w == NULL) { /* hack for R2 compatibility */ XtPerDisplay pd = _XtGetPerDisplay(_XtDefaultAppContext()->list[0]); names = (XrmName*) XtStackAlloc (2 * sizeof(XrmName), names_s); classes = (XrmClass*) XtStackAlloc (2 * sizeof(XrmClass), classes_s); names[0] = pd->name; names[1] = NULLQUARK; classes[0] = pd->class; classes[1] = NULLQUARK; } else { count = CountTreeDepth(w); names = (XrmName*) XtStackAlloc(count * sizeof(XrmName), names_s); classes = (XrmClass*) XtStackAlloc(count * sizeof(XrmClass), classes_s); if (names == NULL || classes == NULL) _XtAllocError(NULL); GetNamesAndClasses(w, names, classes); } /* Compile arg list into quarks */ CacheArgs(args, num_args, typed_args, num_typed_args, quark_cache, XtNumber(quark_cache), &quark_args); /* Compile resource list if needed */ if (((int) resources->resource_offset) >= 0) { XrmCompileResourceListEphem(resources, num_resources); } table = _XtCreateIndirectionTable(resources,num_resources); Resrc = GetResources(w, (char*)base, names, classes, table, num_resources, quark_args, args, num_args, typed_args, &ntyped_args, False); FreeCache(quark_cache, quark_args); XtFree((char *)table); XtFree((char *)Resrc); if (w != NULL) { XtStackFree((XtPointer)names, names_s); XtStackFree((XtPointer)classes, classes_s); } UNLOCK_APP(app); } void XtGetApplicationResources ( Widget w, /* Application shell widget */ XtPointer base, /* Base address to write to */ XtResourceList resources, /* resource list for subobject */ Cardinal num_resources, ArgList args, /* arg list to override resources */ Cardinal num_args) { _XtGetApplicationResources(w, base, resources, num_resources, args, num_args, NULL, 0); } static Boolean initialized = FALSE; void _XtResourceListInitialize(void) { LOCK_PROCESS; if (initialized) { XtWarningMsg("initializationError","xtInitialize",XtCXtToolkitError, "Initializing Resource Lists twice", (String *)NULL, (Cardinal *)NULL); UNLOCK_PROCESS; return; } initialized = TRUE; UNLOCK_PROCESS; QBoolean = XrmPermStringToQuark(XtCBoolean); QString = XrmPermStringToQuark(XtCString); QCallProc = XrmPermStringToQuark(XtRCallProc); QImmediate = XrmPermStringToQuark(XtRImmediate); QinitialResourcesPersistent = XrmPermStringToQuark(XtNinitialResourcesPersistent); QInitialResourcesPersistent = XrmPermStringToQuark(XtCInitialResourcesPersistent); Qtranslations = XrmPermStringToQuark(XtNtranslations); QbaseTranslations = XrmPermStringToQuark("baseTranslations"); QTranslations = XrmPermStringToQuark(XtCTranslations); QTranslationTable = XrmPermStringToQuark(XtRTranslationTable); Qscreen = XrmPermStringToQuark(XtNscreen); QScreen = XrmPermStringToQuark(XtCScreen); } ue.size = sizeof(XtTranslations); convValue.addr = (XPointer)&widget->core.tm.current_state; (void)_XtConvert(widget, rawType, &value, QTranslationTable, &convValue, cache_ptr); if (cache_ptr && *cache_ptr) cache_ptr++; } else { /* value.addr can be NULL see: !already_copied */ if (value.addr) *((XtTranslatilibXt-1.1.5/src/ClickTime.c000064401431060000012000000075431252061032400156640ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* * Contains XtSetMultiClickTime, XtGetMultiClickTime */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" void XtSetMultiClickTime( Display *dpy, int time) { DPY_TO_APPCON(dpy); LOCK_APP(app); _XtGetPerDisplay(dpy)->multi_click_time = time; UNLOCK_APP(app); } int XtGetMultiClickTime( Display *dpy) { int retval; DPY_TO_APPCON(dpy); LOCK_APP(app); retval = _XtGetPerDisplay(dpy)->multi_click_time; UNLOCK_APP(app); return retval; } libXt-1.1.5/src/Initialize.c000064401431060000012000000744051252061032400161220ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* Make sure all wm properties can make it out of the resource manager */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "CoreP.h" #include "ShellP.h" #include #include #ifdef XTHREADS #include #endif #ifndef WIN32 #define X_INCLUDE_PWD_H #define XOS_USE_XT_LOCKING #include #endif #include #if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE) /* * If used as a shared library, generate code under a different name so that * the stub routines in sharedlib.c get loaded into the application binary. */ #define XtToolkitInitialize _XtToolkitInitialize #define XtOpenApplication _XtOpenApplication #define XtAppInitialize _XtAppInitialize #define XtInitialize _XtInitialize #endif /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */ /* * hpux * Hand-patched versions of HP-UX prior to version 7.0 can usefully add * -DUSE_UNAME in the appropriate config file to get long hostnames. */ #ifdef USG #define USE_UNAME #endif #ifdef USE_UNAME #include #endif /* some unspecified magic number of expected search levels for Xrm */ #define SEARCH_LIST_SIZE 1000 /* This is a set of default records describing the command line arguments that Xlib will parse and set into the resource data base. This list is applied before the users list to enforce these defaults. This is policy, which the toolkit avoids but I hate differing programs at this level. */ static XrmOptionDescRec const opTable[] = { {"+rv", "*reverseVideo", XrmoptionNoArg, (XtPointer) "off"}, {"+synchronous","*synchronous", XrmoptionNoArg, (XtPointer) "off"}, {"-background", "*background", XrmoptionSepArg, (XtPointer) NULL}, {"-bd", "*borderColor", XrmoptionSepArg, (XtPointer) NULL}, {"-bg", "*background", XrmoptionSepArg, (XtPointer) NULL}, {"-bordercolor","*borderColor", XrmoptionSepArg, (XtPointer) NULL}, {"-borderwidth",".borderWidth", XrmoptionSepArg, (XtPointer) NULL}, {"-bw", ".borderWidth", XrmoptionSepArg, (XtPointer) NULL}, {"-display", ".display", XrmoptionSepArg, (XtPointer) NULL}, {"-fg", "*foreground", XrmoptionSepArg, (XtPointer) NULL}, {"-fn", "*font", XrmoptionSepArg, (XtPointer) NULL}, {"-font", "*font", XrmoptionSepArg, (XtPointer) NULL}, {"-foreground", "*foreground", XrmoptionSepArg, (XtPointer) NULL}, {"-geometry", ".geometry", XrmoptionSepArg, (XtPointer) NULL}, {"-iconic", ".iconic", XrmoptionNoArg, (XtPointer) "on"}, {"-name", ".name", XrmoptionSepArg, (XtPointer) NULL}, {"-reverse", "*reverseVideo", XrmoptionNoArg, (XtPointer) "on"}, {"-rv", "*reverseVideo", XrmoptionNoArg, (XtPointer) "on"}, {"-selectionTimeout", ".selectionTimeout", XrmoptionSepArg, (XtPointer) NULL}, {"-synchronous","*synchronous", XrmoptionNoArg, (XtPointer) "on"}, {"-title", ".title", XrmoptionSepArg, (XtPointer) NULL}, {"-xnllanguage",".xnlLanguage", XrmoptionSepArg, (XtPointer) NULL}, {"-xrm", NULL, XrmoptionResArg, (XtPointer) NULL}, {"-xtsessionID",".sessionID", XrmoptionSepArg, (XtPointer) NULL}, }; /* * GetHostname - emulates gethostname() on non-bsd systems. */ static void GetHostname ( char *buf, int maxlen) { #ifdef USE_UNAME int len; struct utsname name; if (maxlen <= 0 || buf == NULL) return; uname (&name); len = strlen (name.nodename); if (len >= maxlen) len = maxlen; (void) strncpy (buf, name.nodename, len-1); buf[len-1] = '\0'; #else if (maxlen <= 0 || buf == NULL) return; buf[0] = '\0'; (void) gethostname (buf, maxlen); buf [maxlen - 1] = '\0'; #endif } #ifdef SUNSHLIB void _XtInherit(void) { extern void __XtInherit(); __XtInherit(); } #define _XtInherit __XtInherit #endif #if defined (WIN32) || defined(__CYGWIN__) /* * The Symbol _XtInherit is used in two different manners. * First it could be used as a generic function and second * as an absolute address reference, which will be used to * check the initialisation process of several other libraries. * Because of this the symbol must be accessable by all * client dll's and applications. In unix environments * this is no problem, because the used shared libraries * format (elf) supports this immediatly. Under Windows * this isn't true, because a functions address in a dll * is different from the same function in another dll or * applications, because the used Portable Executable * File adds a code stub to each client to provide the * exported symbol name. This stub uses an indirect * pointer to get the original symbol address, which is * then jumped to, like in this example: * * --- client --- --- dll ---- * ... * call foo * * foo: jmp (*_imp_foo) ----> foo: .... * nop * nop * * _imp_foo: .long * * Now it is clear why the clients symbol foo isn't the same * as in the dll and we can think about how to deal which * this two above mentioned requirements, to export this * symbol to all clients and to allow calling this symbol * as a function. The solution I've used exports the * symbol _XtInherit as data symbol, because global data * symbols are exported to all clients. But how to deal * with the second requirement, that this symbol should * be used as function. The Trick is to build a little * code stub in the data section in the exact manner as * above explained. This is done with the assembler code * below. * * Ralf Habacker * * References: * msdn http://msdn.microsoft.com/msdnmag/issues/02/02/PE/PE.asp * cygwin-xfree: http://www.cygwin.com/ml/cygwin-xfree/2003-10/msg00000.html */ #ifdef __x86_64__ asm (".section .trampoline, \"dwx\" \n\ .globl _XtInherit \n\ _XtInherit: \n\ jmp *_y(%rip) \n\ _y: .quad __XtInherit \n\ .text \n"); #else asm (".data\n\ .globl __XtInherit \n\ __XtInherit: jmp *_y \n\ _y: .long ___XtInherit \n\ .text \n"); #endif #define _XtInherit __XtInherit #endif void _XtInherit(void) { XtErrorMsg("invalidProcedure","inheritanceProc",XtCXtToolkitError, "Unresolved inheritance operation", (String *)NULL, (Cardinal *)NULL); } void XtToolkitInitialize(void) { static Boolean initialized = False; LOCK_PROCESS; if (initialized) { UNLOCK_PROCESS; return; } initialized = True; UNLOCK_PROCESS; /* Resource management initialization */ XrmInitialize(); _XtResourceListInitialize(); /* Other intrinsic intialization */ _XtConvertInitialize(); _XtEventInitialize(); _XtTranslateInitialize(); /* Some apps rely on old (broken) XtAppPeekEvent behavior */ if(getenv("XTAPPPEEKEVENT_SKIPTIMER")) XtAppPeekEvent_SkipTimer = True; else XtAppPeekEvent_SkipTimer = False; } String _XtGetUserName( String dest, int len) { #ifdef WIN32 String ptr = NULL; if ((ptr = getenv("USERNAME"))) { (void) strncpy (dest, ptr, len-1); dest[len-1] = '\0'; } else *dest = '\0'; #else #ifdef X_NEEDS_PWPARAMS _Xgetpwparams pwparams; #endif struct passwd *pw; char* ptr; if ((ptr = getenv("USER"))) { (void) strncpy (dest, ptr, len-1); dest[len-1] = '\0'; } else { if ((pw = _XGetpwuid(getuid(),pwparams)) != NULL) { (void) strncpy (dest, pw->pw_name, len-1); dest[len-1] = '\0'; } else *dest = '\0'; } #endif return dest; } static String GetRootDirName( String dest, int len) { #ifdef WIN32 register char *ptr1; register char *ptr2 = NULL; int len1 = 0, len2 = 0; if (ptr1 = getenv("HOME")) { /* old, deprecated */ len1 = strlen (ptr1); } else if ((ptr1 = getenv("HOMEDRIVE")) && (ptr2 = getenv("HOMEDIR"))) { len1 = strlen (ptr1); len2 = strlen (ptr2); } else if (ptr2 = getenv("USERNAME")) { len1 = strlen (ptr1 = "/users/"); len2 = strlen (ptr2); } if ((len1 + len2 + 1) < len) sprintf (dest, "%s%s", ptr1, (ptr2) ? ptr2 : ""); else *dest = '\0'; #else #ifdef X_NEEDS_PWPARAMS _Xgetpwparams pwparams; #endif struct passwd *pw; static char *ptr; if (len <= 0 || dest == NULL) return NULL; if ((ptr = getenv("HOME"))) { (void) strncpy (dest, ptr, len-1); dest[len-1] = '\0'; } else { if ((ptr = getenv("USER"))) pw = _XGetpwnam(ptr,pwparams); else pw = _XGetpwuid(getuid(),pwparams); if (pw != NULL) { (void) strncpy (dest, pw->pw_dir, len-1); dest[len-1] = '\0'; } else *dest = '\0'; } #endif return dest; } static void CombineAppUserDefaults( Display *dpy, XrmDatabase *pdb) { char* filename; char* path = NULL; Boolean deallocate = False; if (!(path = getenv("XUSERFILESEARCHPATH"))) { #if !defined(WIN32) || !defined(__MINGW32__) char *old_path; char homedir[PATH_MAX]; GetRootDirName(homedir, PATH_MAX); if (!(old_path = getenv("XAPPLRESDIR"))) { XtAsprintf(&path, "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N", homedir, homedir, homedir, homedir, homedir, homedir); } else { XtAsprintf(&path, "%s/%%L/%%N%%C:%s/%%l/%%N%%C:%s/%%N%%C:%s/%%N%%C:%s/%%L/%%N:%s/%%l/%%N:%s/%%N:%s/%%N", old_path, old_path, old_path, homedir, old_path, old_path, old_path, homedir); } deallocate = True; #endif } filename = XtResolvePathname(dpy, NULL, NULL, NULL, path, NULL, 0, NULL); if (filename) { (void)XrmCombineFileDatabase(filename, pdb, False); XtFree(filename); } if (deallocate) XtFree(path); } static void CombineUserDefaults( Display *dpy, XrmDatabase *pdb) { #ifdef __MINGW32__ const char *slashDotXdefaults = "/Xdefaults"; #else const char *slashDotXdefaults = "/.Xdefaults"; #endif char *dpy_defaults = XResourceManagerString(dpy); if (dpy_defaults) { XrmCombineDatabase(XrmGetStringDatabase(dpy_defaults), pdb, False); } else { char filename[PATH_MAX]; (void) GetRootDirName(filename, PATH_MAX - strlen (slashDotXdefaults) - 1); (void) strcat(filename, slashDotXdefaults); (void)XrmCombineFileDatabase(filename, pdb, False); } } /*ARGSUSED*/ static Bool StoreDBEntry( XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValuePtr value, XPointer data) { XrmQPutResource((XrmDatabase *)data, bindings, quarks, *type, value); return False; } static XrmDatabase CopyDB(XrmDatabase db) { XrmDatabase copy = NULL; XrmQuark empty = NULLQUARK; XrmEnumerateDatabase(db, &empty, &empty, XrmEnumAllLevels, StoreDBEntry, (XPointer)©); return copy; } /*ARGSUSED*/ static String _XtDefaultLanguageProc( Display *dpy, /* unused */ String xnl, XtPointer closure) /* unused */ { if (! setlocale(LC_ALL, xnl)) XtWarning("locale not supported by C library, locale unchanged"); if (! XSupportsLocale()) { XtWarning("locale not supported by Xlib, locale set to C"); setlocale(LC_ALL, "C"); } if (! XSetLocaleModifiers("")) XtWarning("X locale modifiers not supported, using default"); return setlocale(LC_ALL, NULL); /* re-query in case overwritten */ } XtLanguageProc XtSetLanguageProc( XtAppContext app, XtLanguageProc proc, XtPointer closure) { XtLanguageProc old; if (!proc) { proc = _XtDefaultLanguageProc; closure = NULL; } if (app) { LOCK_APP(app); LOCK_PROCESS; /* set langProcRec only for this application context */ old = app->langProcRec.proc; app->langProcRec.proc = proc; app->langProcRec.closure = closure; UNLOCK_PROCESS; UNLOCK_APP(app); } else { /* set langProcRec for all application contexts */ ProcessContext process; LOCK_PROCESS; process = _XtGetProcessContext(); old = process->globalLangProcRec.proc; process->globalLangProcRec.proc = proc; process->globalLangProcRec.closure = closure; app = process->appContextList; while (app) { app->langProcRec.proc = proc; app->langProcRec.closure = closure; app = app->next; } UNLOCK_PROCESS; } return (old ? old : _XtDefaultLanguageProc); } XrmDatabase XtScreenDatabase( Screen *screen) { int scrno; Bool doing_def; XrmDatabase db, olddb; XtPerDisplay pd; Status do_fallback; char *scr_resources; Display *dpy = DisplayOfScreen(screen); DPY_TO_APPCON(dpy); LOCK_APP(app); LOCK_PROCESS; if (screen == DefaultScreenOfDisplay(dpy)) { scrno = DefaultScreen(dpy); doing_def = True; } else { scrno = XScreenNumberOfScreen(screen); doing_def = False; } pd = _XtGetPerDisplay(dpy); if ((db = pd->per_screen_db[scrno])) { UNLOCK_PROCESS; UNLOCK_APP(app); return (doing_def ? XrmGetDatabase(dpy) : db); } scr_resources = XScreenResourceString(screen); if (ScreenCount(dpy) == 1) { db = pd->cmd_db; pd->cmd_db = NULL; } else { db = CopyDB(pd->cmd_db); } { /* Environment defaults */ char filenamebuf[PATH_MAX]; char *filename; if (!(filename = getenv("XENVIRONMENT"))) { int len; #ifdef __MINGW32__ const char *slashDotXdefaultsDash = "/Xdefaults-"; #else const char *slashDotXdefaultsDash = "/.Xdefaults-"; #endif (void) GetRootDirName(filename = filenamebuf, PATH_MAX - strlen (slashDotXdefaultsDash) - 1); (void) strcat(filename, slashDotXdefaultsDash); len = strlen(filename); GetHostname (filename+len, PATH_MAX-len); } (void)XrmCombineFileDatabase(filename, &db, False); } if (scr_resources) { /* Screen defaults */ XrmCombineDatabase(XrmGetStringDatabase(scr_resources), &db, False); XFree(scr_resources); } /* Server or host defaults */ if (!pd->server_db) CombineUserDefaults(dpy, &db); else { (void) XrmCombineDatabase(pd->server_db, &db, False); pd->server_db = NULL; } if (!db) db = XrmGetStringDatabase(""); pd->per_screen_db[scrno] = db; olddb = XrmGetDatabase(dpy); /* set database now, for XtResolvePathname to use */ XrmSetDatabase(dpy, db); CombineAppUserDefaults(dpy, &db); do_fallback = 1; { /* System app-defaults */ char *filename; if ((filename = XtResolvePathname(dpy, "app-defaults", NULL, NULL, NULL, NULL, 0, NULL))) { do_fallback = !XrmCombineFileDatabase(filename, &db, False); XtFree(filename); } } /* now restore old database, if need be */ if (!doing_def) XrmSetDatabase(dpy, olddb); if (do_fallback && pd->appContext->fallback_resources) { /* Fallback defaults */ XrmDatabase fdb = NULL; String *res; for (res = pd->appContext->fallback_resources; *res; res++) XrmPutLineResource(&fdb, *res); (void)XrmCombineDatabase(fdb, &db, False); } UNLOCK_PROCESS; UNLOCK_APP(app); return db; } /* * Merge two option tables, allowing the second to over-ride the first, * so that ambiguous abbreviations can be noticed. The merge attempts * to make the resulting table lexicographically sorted, but succeeds * only if the first source table is sorted. Though it _is_ recommended * (for optimizations later in XrmParseCommand), it is not required * that either source table be sorted. * * Caller is responsible for freeing the returned option table. */ static void _MergeOptionTables( const XrmOptionDescRec *src1, Cardinal num_src1, const XrmOptionDescRec *src2, Cardinal num_src2, XrmOptionDescRec **dst, Cardinal *num_dst) { XrmOptionDescRec *table, *endP; register XrmOptionDescRec *opt1, *whereP, *dstP; register const XrmOptionDescRec *opt2; int i1; Cardinal i2; int dst_len, order; Boolean found; enum {Check, NotSorted, IsSorted} sort_order = Check; *dst = table = (XrmOptionDescRec*) __XtMalloc( sizeof(XrmOptionDescRec) * (num_src1 + num_src2) ); (void) memmove(table, src1, sizeof(XrmOptionDescRec) * num_src1 ); if (num_src2 == 0) { *num_dst = num_src1; return; } endP = &table[dst_len = num_src1]; for (opt2 = src2, i2= 0; i2 < num_src2; opt2++, i2++) { found = False; whereP = endP-1; /* assume new option goes at the end */ for (opt1 = table, i1 = 0; i1 < dst_len; opt1++, i1++) { /* have to walk the entire new table so new list is ordered (if src1 was ordered) */ if (sort_order == Check && i1 > 0 && strcmp(opt1->option, (opt1-1)->option) < 0) sort_order = NotSorted; if ((order = strcmp(opt1->option, opt2->option)) == 0) { /* same option names; just overwrite opt1 with opt2 */ *opt1 = *opt2; found = True; break; } /* else */ if (sort_order == IsSorted && order > 0) { /* insert before opt1 to preserve order */ /* shift rest of table forward to make room for new entry */ for (dstP = endP++; dstP > opt1; dstP--) *dstP = *(dstP-1); *opt1 = *opt2; dst_len++; found = True; break; } /* else */ if (order < 0) /* opt2 sorts after opt1, so remember this position */ whereP = opt1; } if (sort_order == Check && i1 == dst_len) sort_order = IsSorted; if (!found) { /* when we get here, whereP points to the last entry in the destination that sorts before "opt2". Shift rest of table forward and insert "opt2" after whereP. */ whereP++; for (dstP = endP++; dstP > whereP; dstP--) *dstP = *(dstP-1); *whereP = *opt2; dst_len++; } } *num_dst = dst_len; } /* NOTE: name, class, and type must be permanent strings */ static Boolean _GetResource( Display *dpy, XrmSearchList list, String name, String class, String type, XrmValue* value) { XrmRepresentation db_type; XrmValue db_value; XrmName Qname = XrmPermStringToQuark(name); XrmClass Qclass = XrmPermStringToQuark(class); XrmRepresentation Qtype = XrmPermStringToQuark(type); if (XrmQGetSearchResource(list, Qname, Qclass, &db_type, &db_value)) { if (db_type == Qtype) { if (Qtype == _XtQString) *(String*)value->addr = db_value.addr; else (void) memmove(value->addr, db_value.addr, value->size ); return True; } else { WidgetRec widget; /* hack, hack */ bzero( &widget, sizeof(widget) ); widget.core.self = &widget; widget.core.widget_class = coreWidgetClass; widget.core.screen = (Screen*)DefaultScreenOfDisplay(dpy); XtInitializeWidgetClass(coreWidgetClass); if (_XtConvert(&widget,db_type,&db_value,Qtype,value,NULL)) { return True; } } } return False; } XrmDatabase _XtPreparseCommandLine( XrmOptionDescRec *urlist, Cardinal num_urs, int argc, String *argv, /* return */ String *applName, String *displayName, String *language) { XrmDatabase db = NULL; XrmOptionDescRec *options; Cardinal num_options; XrmName name_list[3]; XrmName class_list[3]; XrmRepresentation type; XrmValue val; String *targv; int targc = argc; targv = (String *) __XtMalloc(sizeof(char *) * argc); (void) memmove(targv, argv, sizeof(char *) * argc); _MergeOptionTables(opTable, XtNumber(opTable), urlist, num_urs, &options, &num_options); name_list[0] = class_list[0] = XrmPermStringToQuark("."); name_list[2] = class_list[2] = NULLQUARK; XrmParseCommand(&db, options, num_options, ".", &targc, targv); if (applName) { name_list[1] = XrmPermStringToQuark("name"); if (XrmQGetResource(db, name_list, name_list, &type, &val) && type == _XtQString) *applName = val.addr; } if (displayName) { name_list[1] = XrmPermStringToQuark("display"); if (XrmQGetResource(db, name_list, name_list, &type, &val) && type == _XtQString) *displayName = val.addr; } if (language) { name_list[1] = XrmPermStringToQuark("xnlLanguage"); class_list[1] = XrmPermStringToQuark("XnlLanguage"); if (XrmQGetResource(db, name_list, class_list, &type, &val) && type == _XtQString) *language = val.addr; } XtFree((char *)targv); XtFree((char *)options); return db; } static void GetLanguage( Display *dpy, XtPerDisplay pd) { XrmRepresentation type; XrmValue value; XrmName name_list[3]; XrmName class_list[3]; LOCK_PROCESS; if (! pd->language) { name_list[0] = pd->name; name_list[1] = XrmPermStringToQuark("xnlLanguage"); class_list[0] = pd->class; class_list[1] = XrmPermStringToQuark("XnlLanguage"); name_list[2] = class_list[2] = NULLQUARK; if (!pd->server_db) CombineUserDefaults(dpy, &pd->server_db); if (pd->server_db && XrmQGetResource(pd->server_db,name_list,class_list, &type, &value) && type == _XtQString) pd->language = (char *) value.addr; } if (pd->appContext->langProcRec.proc) { if (! pd->language) pd->language = ""; pd->language = (*pd->appContext->langProcRec.proc) (dpy, pd->language, pd->appContext->langProcRec.closure); } else if (! pd->language || pd->language[0] == '\0') /* R4 compatibility */ pd->language = getenv("LANG"); if (pd->language) pd->language = XtNewString(pd->language); UNLOCK_PROCESS; } static void ProcessInternalConnection ( XtPointer client_data, int* fd, XtInputId* id) { XProcessInternalConnection ((Display *) client_data, *fd); } static void ConnectionWatch ( Display* dpy, XPointer client_data, int fd, Bool opening, XPointer* watch_data) { XtInputId* iptr; XtAppContext app = XtDisplayToApplicationContext(dpy); if (opening) { iptr = (XtInputId *) __XtMalloc(sizeof(XtInputId)); *iptr = XtAppAddInput(app, fd, (XtPointer) XtInputReadMask, ProcessInternalConnection, client_data); *watch_data = (XPointer) iptr; } else { iptr = (XtInputId *) *watch_data; XtRemoveInput(*iptr); (void) XtFree(*watch_data); } } void _XtDisplayInitialize( Display *dpy, XtPerDisplay pd, _Xconst char* name, XrmOptionDescRec *urlist, Cardinal num_urs, int *argc, char **argv) { Boolean tmp_bool; XrmValue value; XrmOptionDescRec *options; Cardinal num_options; XrmDatabase db; XrmName name_list[2]; XrmClass class_list[2]; XrmHashTable* search_list; int search_list_size = SEARCH_LIST_SIZE; GetLanguage(dpy, pd); /* Parse the command line and remove Xt arguments from argv */ _MergeOptionTables( opTable, XtNumber(opTable), urlist, num_urs, &options, &num_options ); XrmParseCommand(&pd->cmd_db, options, num_options, name, argc, argv); db = XtScreenDatabase(DefaultScreenOfDisplay(dpy)); if (!(search_list = (XrmHashTable*) ALLOCATE_LOCAL( SEARCH_LIST_SIZE*sizeof(XrmHashTable)))) _XtAllocError(NULL); name_list[0] = pd->name; class_list[0] = pd->class; name_list[1] = NULLQUARK; class_list[1] = NULLQUARK; while (!XrmQGetSearchList(db, name_list, class_list, search_list, search_list_size)) { XrmHashTable* old = search_list; Cardinal size = (search_list_size*=2)*sizeof(XrmHashTable); if (!(search_list = (XrmHashTable*)ALLOCATE_LOCAL(size))) _XtAllocError(NULL); (void) memmove((char*)search_list, (char*)old, (size>>1) ); DEALLOCATE_LOCAL(old); } value.size = sizeof(tmp_bool); value.addr = (XtPointer)&tmp_bool; if (_GetResource(dpy, search_list, "synchronous", "Synchronous", XtRBoolean, &value)) { int i; Display **dpyP = pd->appContext->list; pd->appContext->sync = tmp_bool; for (i = pd->appContext->count; i; dpyP++, i--) { (void) XSynchronize(*dpyP, (Bool)tmp_bool); } } else { (void) XSynchronize(dpy, (Bool)pd->appContext->sync); } if (_GetResource(dpy, search_list, "reverseVideo", "ReverseVideo", XtRBoolean, &value) && tmp_bool) { pd->rv = True; } value.size = sizeof(pd->multi_click_time); value.addr = (XtPointer)&pd->multi_click_time; if (!_GetResource(dpy, search_list, "multiClickTime", "MultiClickTime", XtRInt, &value)) { pd->multi_click_time = 200; } value.size = sizeof(pd->appContext->selectionTimeout); value.addr = (XtPointer)&pd->appContext->selectionTimeout; (void)_GetResource(dpy, search_list, "selectionTimeout", "SelectionTimeout", XtRInt, &value); #ifndef NO_IDENTIFY_WINDOWS value.size = sizeof(pd->appContext->identify_windows); value.addr = (XtPointer)&pd->appContext->identify_windows; (void)_GetResource(dpy, search_list, "xtIdentifyWindows", "XtDebug", XtRBoolean, &value); #endif XAddConnectionWatch(dpy, ConnectionWatch, (XPointer) dpy); XtFree( (XtPointer)options ); DEALLOCATE_LOCAL( search_list ); } /* Function Name: XtAppSetFallbackResources * Description: Sets the fallback resource list that will be loaded * at display initialization time. * Arguments: app_context - the app context. * specification_list - the resource specification list. * Returns: none. */ void XtAppSetFallbackResources( XtAppContext app_context, String *specification_list) { LOCK_APP(app_context); app_context->fallback_resources = specification_list; UNLOCK_APP(app_context); } Widget XtOpenApplication(XtAppContext *app_context_return, _Xconst char *application_class, XrmOptionDescRec *options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, ArgList args_in, Cardinal num_args_in) { XtAppContext app_con; Display * dpy; register int saved_argc = *argc_in_out; Widget root; Arg args[3], *merged_args; Cardinal num = 0; XtToolkitInitialize(); /* cannot be moved into _XtAppInit */ dpy = _XtAppInit(&app_con, (String)application_class, options, num_options, argc_in_out, &argv_in_out, fallback_resources); LOCK_APP(app_con); XtSetArg(args[num], XtNscreen, DefaultScreenOfDisplay(dpy)); num++; XtSetArg(args[num], XtNargc, saved_argc); num++; XtSetArg(args[num], XtNargv, argv_in_out); num++; merged_args = XtMergeArgLists(args_in, num_args_in, args, num); num += num_args_in; root = XtAppCreateShell(NULL, application_class, widget_class, dpy, merged_args, num); if (app_context_return) *app_context_return = app_con; XtFree((XtPointer)merged_args); XtFree((XtPointer)argv_in_out); UNLOCK_APP(app_con); return root; } Widget XtAppInitialize( XtAppContext * app_context_return, _Xconst char* application_class, XrmOptionDescRec *options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, ArgList args_in, Cardinal num_args_in) { return XtOpenApplication(app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, applicationShellWidgetClass, args_in, num_args_in); } /*ARGSUSED*/ Widget XtInitialize( _Xconst char* name, _Xconst char* classname, XrmOptionDescRec *options, Cardinal num_options, int *argc, String *argv) { Widget root; XtAppContext app_con; register ProcessContext process = _XtGetProcessContext(); root = XtAppInitialize(&app_con, classname, options, num_options, argc, argv, NULL, NULL, (Cardinal) 0); LOCK_PROCESS; process->defaultAppContext = app_con; UNLOCK_PROCESS; return root; } * when we get here, whereP points to the last entry in the destination that sorts before "opt2". Shift rest of table forward and insert "opt2" after whereP. */ whereP++; for (dstP = endP++; dstP > whereP; dstP--) *dstP = *(dlibXt-1.1.5/src/Destroy.c000064401431060000012000000265251252061032400154520ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" struct _DestroyRec { int dispatch_level; Widget widget; }; static void Recursive(Widget widget, XtWidgetProc proc) { register Cardinal i; CompositePart *cwp; /* Recurse down normal children */ if (XtIsComposite(widget)) { cwp = &(((CompositeWidget) widget)->composite); for (i = 0; i < cwp->num_children; i++) { Recursive(cwp->children[i], proc); } } /* Recurse down popup children */ if (XtIsWidget(widget)) { for (i = 0; i < widget->core.num_popups; i++) { Recursive(widget->core.popup_list[i], proc); } } /* Finally, apply procedure to this widget */ (*proc) (widget); } /* Recursive */ static void Phase1Destroy (Widget widget) { Widget hookobj = XtHooksOfDisplay(XtDisplayOfObject(widget)); widget->core.being_destroyed = TRUE; if (XtHasCallbacks(hookobj, XtNdestroyHook) == XtCallbackHasSome) { XtDestroyHookDataRec call_data; call_data.type = XtHdestroy; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.destroyhook_callbacks, (XtPointer) &call_data); } } /* Phase1Destroy */ static void Phase2Callbacks(Widget widget) { if (widget->core.destroy_callbacks != NULL) { XtCallCallbackList(widget, widget->core.destroy_callbacks, (XtPointer) NULL); } } /* Phase2Callbacks */ static void Phase2Destroy(register Widget widget) { register WidgetClass class; register ConstraintWidgetClass cwClass; ObjectClassExtension ext; /* Call constraint destroy procedures */ if (XtParent(widget) != NULL && !XtIsShell(widget) && XtIsConstraint(XtParent(widget))) { LOCK_PROCESS; cwClass = (ConstraintWidgetClass)XtParent(widget)->core.widget_class; UNLOCK_PROCESS; for (;;) { XtWidgetProc destroy; LOCK_PROCESS; destroy = cwClass->constraint_class.destroy; UNLOCK_PROCESS; if (destroy) (*destroy) (widget); if (cwClass == (ConstraintWidgetClass)constraintWidgetClass) break; LOCK_PROCESS; cwClass = (ConstraintWidgetClass) cwClass->core_class.superclass; UNLOCK_PROCESS; } } /* Call widget destroy procedures */ LOCK_PROCESS; for (class = widget->core.widget_class; class != NULL; class = class->core_class.superclass) { XtWidgetProc destroy; destroy = class->core_class.destroy; UNLOCK_PROCESS; if (destroy) (*destroy) (widget); LOCK_PROCESS; } /* Call widget deallocate procedure */ ext = (ObjectClassExtension) XtGetClassExtension(widget->core.widget_class, XtOffsetOf(CoreClassPart, extension), NULLQUARK, XtObjectExtensionVersion, sizeof(ObjectClassExtensionRec)); if (ext && ext->deallocate) { XtDeallocateProc deallocate; deallocate = ext->deallocate; UNLOCK_PROCESS; (*deallocate)(widget, NULL); } else { UNLOCK_PROCESS; XtFree((char *)widget); } } /* Phase2Destroy */ static Boolean IsDescendant(Widget widget, Widget root) { while ((widget = XtParent(widget)) != root) { if (widget == NULL) return False; } return True; } static void XtPhase2Destroy (Widget widget) { Display *display = NULL; Window window; Widget parent; XtAppContext app = XtWidgetToApplicationContext(widget); Widget outerInPhase2Destroy = app->in_phase2_destroy; int starting_count = app->destroy_count; Boolean isPopup = False; /* invalidate focus trace cache for this display */ _XtGetPerDisplay(XtDisplayOfObject(widget))->pdi.traceDepth = 0; parent = widget->core.parent; if (parent && XtIsWidget(parent) && parent->core.num_popups) { Cardinal i; for (i = 0; i < parent->core.num_popups; i++) { if (parent->core.popup_list[i] == widget) { isPopup = True; break; } } } if (!isPopup && parent && XtIsComposite(parent)) { XtWidgetProc delete_child; LOCK_PROCESS; delete_child = ((CompositeWidgetClass) parent->core.widget_class)-> composite_class.delete_child; UNLOCK_PROCESS; if (XtIsRectObj(widget)) { XtUnmanageChild(widget); } if (delete_child == NULL) { String param; Cardinal num_params = 1; LOCK_PROCESS; param = parent->core.widget_class->core_class.class_name; UNLOCK_PROCESS; XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidProcedure","deleteChild",XtCXtToolkitError, "null delete_child procedure for class %s in XtDestroy", ¶m, &num_params); } else { (*delete_child) (widget); } } /* widget is freed in Phase2Destroy, so retrieve window now. * Shells destroy their own windows, to prevent window leaks in * popups; this test is practical only when XtIsShell() is cheap. */ if (XtIsShell(widget) || !XtIsWidget(widget)) { window = 0; } else { display = XtDisplay(widget); window = widget->core.window; } Recursive(widget, Phase2Callbacks); if (app->destroy_count > starting_count) { int i = starting_count; while (i < app->destroy_count) { DestroyRec * dr = app->destroy_list + i; if (IsDescendant(dr->widget, widget)) { Widget descendant = dr->widget; register int j; app->destroy_count--; for (j = app->destroy_count - i; --j >= 0; dr++) *dr = *(dr + 1); XtPhase2Destroy(descendant); } else i++; } } app->in_phase2_destroy = widget; Recursive(widget, Phase2Destroy); app->in_phase2_destroy = outerInPhase2Destroy; if (isPopup) { Cardinal i; for (i = 0; i < parent->core.num_popups; i++) if (parent->core.popup_list[i] == widget) { parent->core.num_popups--; while (i < parent->core.num_popups) { parent->core.popup_list[i] = parent->core.popup_list[i+1]; i++; } break; } } /* %%% the following parent test hides a more serious problem, but it avoids breaking those who depended on the old bug until we have time to fix it properly. */ if (window && (parent == NULL || !parent->core.being_destroyed)) XDestroyWindow(display, window); } /* XtPhase2Destroy */ void _XtDoPhase2Destroy(XtAppContext app, int dispatch_level) { /* Phase 2 must occur in fifo order. List is not necessarily * contiguous in dispatch_level. */ int i = 0; while (i < app->destroy_count) { /* XtPhase2Destroy can result in calls to XtDestroyWidget, * and these could cause app->destroy_list to be reallocated. */ DestroyRec* dr = app->destroy_list + i; if (dr->dispatch_level >= dispatch_level) { Widget w = dr->widget; register int j; app->destroy_count--; for (j = app->destroy_count - i; --j >=0; dr++) *dr = *(dr + 1); XtPhase2Destroy(w); } else i++; } } void XtDestroyWidget (Widget widget) { XtAppContext app; DestroyRec *dr, *dr2; app = XtWidgetToApplicationContext(widget); LOCK_APP(app); if (widget->core.being_destroyed) { UNLOCK_APP(app); return; } Recursive(widget, Phase1Destroy); if (app->in_phase2_destroy && IsDescendant(widget, app->in_phase2_destroy)) { XtPhase2Destroy(widget); UNLOCK_APP(app); return; } if (app->destroy_count == app->destroy_list_size) { app->destroy_list_size += 10; app->destroy_list = (DestroyRec*) XtRealloc( (char*)app->destroy_list, (unsigned)sizeof(DestroyRec)*app->destroy_list_size ); } dr = app->destroy_list + app->destroy_count++; dr->dispatch_level = app->dispatch_level; dr->widget = widget; if (app->dispatch_level > 1) { int i; for (i = app->destroy_count - 1; i;) { /* this handles only one case of nesting difficulties */ dr = app->destroy_list + (--i); if (dr->dispatch_level < app->dispatch_level && IsDescendant(dr->widget, widget)) { dr2 = app->destroy_list + (app->destroy_count-1); dr2->dispatch_level = dr->dispatch_level; break; } } } if (_XtSafeToDestroy(app)) { app->dispatch_level = 1; /* avoid nested _XtDoPhase2Destroy */ _XtDoPhase2Destroy(app, 0); app->dispatch_level = 0; } UNLOCK_APP(app); } /* XtDestroyWidget */ LITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFlibXt-1.1.5/src/GCManager.c000064401431060000012000000265131252061032400156020ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988, 1990 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1990, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" typedef struct _GCrec { unsigned char screen; /* Screen for GC */ unsigned char depth; /* Depth for GC */ char dashes; /* Dashes value */ Pixmap clip_mask; /* Clip_mask value */ Cardinal ref_count; /* # of shareholders */ GC gc; /* The GC itself. */ XtGCMask dynamic_mask; /* Writable values */ XtGCMask unused_mask; /* Unused values */ struct _GCrec *next; /* Next GC for this widgetkind. */ } GCrec, *GCptr; #define GCVAL(bit,mask,val,default) ((bit&mask) ? val : default) #define CHECK(bit,comp,default) \ if ((checkMask & bit) && \ (GCVAL(bit,valueMask,v->comp,default) != gcv.comp)) return False #define ALLGCVALS (GCFunction | GCPlaneMask | GCForeground | \ GCBackground | GCLineWidth | GCLineStyle | \ GCCapStyle | GCJoinStyle | GCFillStyle | \ GCFillRule | GCTile | GCStipple | \ GCTileStipXOrigin | GCTileStipYOrigin | \ GCFont | GCSubwindowMode | GCGraphicsExposures | \ GCClipXOrigin | GCClipYOrigin | GCDashOffset | \ GCArcMode) static Bool Matches( Display *dpy, GCptr ptr, register XtGCMask valueMask, register XGCValues *v, XtGCMask readOnlyMask, XtGCMask dynamicMask) { XGCValues gcv; register XtGCMask checkMask; if (readOnlyMask & ptr->dynamic_mask) return False; if (((ptr->dynamic_mask|ptr->unused_mask) & dynamicMask) != dynamicMask) return False; if (!XGetGCValues(dpy, ptr->gc, ALLGCVALS, &gcv)) return False; checkMask = readOnlyMask & ~ptr->unused_mask; CHECK(GCForeground, foreground, 0); CHECK(GCBackground, background, 1); CHECK(GCFont, font, ~0UL); CHECK(GCFillStyle, fill_style, FillSolid); CHECK(GCLineWidth, line_width, 0); CHECK(GCFunction, function, GXcopy); CHECK(GCGraphicsExposures, graphics_exposures, True); CHECK(GCTile, tile, ~0UL); CHECK(GCSubwindowMode, subwindow_mode, ClipByChildren); CHECK(GCPlaneMask, plane_mask, AllPlanes); CHECK(GCLineStyle, line_style, LineSolid); CHECK(GCCapStyle, cap_style, CapButt); CHECK(GCJoinStyle, join_style, JoinMiter); CHECK(GCFillRule, fill_rule, EvenOddRule); CHECK(GCArcMode, arc_mode, ArcPieSlice); CHECK(GCStipple, stipple, ~0UL); CHECK(GCTileStipXOrigin, ts_x_origin, 0); CHECK(GCTileStipYOrigin, ts_y_origin, 0); CHECK(GCClipXOrigin, clip_x_origin, 0); CHECK(GCClipYOrigin, clip_y_origin, 0); CHECK(GCDashOffset, dash_offset, 0); gcv.clip_mask = ptr->clip_mask; CHECK(GCClipMask, clip_mask, None); gcv.dashes = ptr->dashes; CHECK(GCDashList, dashes, 4); valueMask &= ptr->unused_mask | dynamicMask; if (valueMask) { XChangeGC(dpy, ptr->gc, valueMask, v); if (valueMask & GCDashList) ptr->dashes = v->dashes; if (valueMask & GCClipMask) ptr->clip_mask = v->clip_mask; } ptr->unused_mask &= ~(dynamicMask | readOnlyMask); ptr->dynamic_mask |= dynamicMask; return True; } /* Matches */ /* Called by CloseDisplay to free the per-display GC list */ void _XtGClistFree( Display *dpy, register XtPerDisplay pd) { register GCptr GClist, next; register int i; GClist = pd->GClist; while (GClist) { next = GClist->next; XtFree((char*)GClist); GClist = next; } if (pd->pixmap_tab) { for (i = ScreenCount(dpy); --i >= 0; ) { if (pd->pixmap_tab[i]) XtFree((char *)pd->pixmap_tab[i]); } XtFree((char *)pd->pixmap_tab); } } /* * Return a GC with the given values and characteristics. */ GC XtAllocateGC( register Widget widget, Cardinal depth, XtGCMask valueMask, XGCValues *values, XtGCMask dynamicMask, XtGCMask unusedMask) { register GCptr *prev; register GCptr cur; Screen *screen; register Display *dpy; register XtPerDisplay pd; Drawable drawable; Drawable *pixmaps; XtGCMask readOnlyMask; GC retval; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; if (!XtIsWidget(widget)) widget = _XtWindowedAncestor(widget); if (!depth) depth = widget->core.depth; screen = XtScreen(widget); dpy = DisplayOfScreen(screen); pd = _XtGetPerDisplay(dpy); unusedMask &= ~valueMask; readOnlyMask = ~(dynamicMask | unusedMask); /* Search for existing GC that matches exactly */ for (prev = &pd->GClist; (cur = *prev); prev = &cur->next) { if (cur->depth == depth && ScreenOfDisplay(dpy, cur->screen) == screen && Matches(dpy, cur, valueMask, values, readOnlyMask, dynamicMask)) { cur->ref_count++; /* Move this GC to front of list */ *prev = cur->next; cur->next = pd->GClist; pd->GClist = cur; retval = cur->gc; UNLOCK_PROCESS; UNLOCK_APP(app); return retval; } } /* No matches, have to create a new one */ cur = XtNew(GCrec); cur->screen = XScreenNumberOfScreen(screen); cur->depth = depth; cur->ref_count = 1; cur->dynamic_mask = dynamicMask; cur->unused_mask = (unusedMask & ~dynamicMask); cur->dashes = GCVAL(GCDashList, valueMask, values->dashes, 4); cur->clip_mask = GCVAL(GCClipMask, valueMask, values->clip_mask, None); drawable = 0; if (depth == widget->core.depth) drawable = XtWindow(widget); if (!drawable && depth == (Cardinal) DefaultDepthOfScreen(screen)) drawable = RootWindowOfScreen(screen); if (!drawable) { if (!pd->pixmap_tab) { int n; pd->pixmap_tab = (Drawable **)__XtMalloc((unsigned)ScreenCount(dpy) * sizeof(Drawable *)); for (n = 0; n < ScreenCount(dpy); n++) pd->pixmap_tab[n] = NULL; } pixmaps = pd->pixmap_tab[cur->screen]; if (!pixmaps) { int max, n, *depths; depths = XListDepths(dpy, cur->screen, &n); n--; max = depths[n]; while (n--) { if (depths[n] > max) max = depths[n]; } XFree((char *)depths); pixmaps = (Drawable *)__XtCalloc((unsigned)max, sizeof(Drawable)); pd->pixmap_tab[cur->screen] = pixmaps; } drawable = pixmaps[cur->depth - 1]; if (!drawable) { drawable = XCreatePixmap(dpy, RootWindowOfScreen(screen), 1, 1, cur->depth); pixmaps[cur->depth - 1] = drawable; } } cur->gc = XCreateGC(dpy, drawable, valueMask, values); cur->next = pd->GClist; pd->GClist = cur; retval = cur->gc; UNLOCK_PROCESS; UNLOCK_APP(app); return retval; } /* XtAllocateGC */ /* * Return a read-only GC with the given values. */ GC XtGetGC( register Widget widget, XtGCMask valueMask, XGCValues *values) { return XtAllocateGC(widget, 0, valueMask, values, 0, 0); } /* XtGetGC */ void XtReleaseGC( Widget widget, register GC gc) { register GCptr cur, *prev; Display* dpy; XtPerDisplay pd; WIDGET_TO_APPCON(widget); LOCK_APP(app); LOCK_PROCESS; dpy = XtDisplayOfObject(widget); pd = _XtGetPerDisplay(dpy); for (prev = &pd->GClist; (cur = *prev); prev = &cur->next) { if (cur->gc == gc) { if (--(cur->ref_count) == 0) { *prev = cur->next; XFreeGC(dpy, gc); XtFree((char *) cur); } break; } } UNLOCK_PROCESS; UNLOCK_APP(app); } /* XtReleaseGC */ /* The following interface is broken and supplied only for backwards * compatibility. It will work properly in all cases only if there * is exactly 1 Display created by the application. */ void XtDestroyGC(register GC gc) { GCptr cur, *prev; XtAppContext app; LOCK_PROCESS; app = _XtGetProcessContext()->appContextList; /* This is awful; we have to search through all the lists to find the GC. */ for (; app; app = app->next) { int i; for (i = app->count; i ;) { Display *dpy = app->list[--i]; XtPerDisplay pd = _XtGetPerDisplay(dpy); for (prev = &pd->GClist; (cur = *prev); prev = &cur->next) { if (cur->gc == gc) { if (--(cur->ref_count) == 0) { *prev = cur->next; XFreeGC(dpy, gc); XtFree((char *) cur); } UNLOCK_PROCESS; return; } } } } UNLOCK_PROCESS; } /* XtDestroyGC */ rec *next; /* Next GC for this widgetkind. */ } GCrec, *GCptr; #define GCVAL(bit,mask,val,default) ((bit&mask) ? val : default) #define CHECK(bit,comp,default) \ if ((checkMaslibXt-1.1.5/src/Core.c000064401431060000012000000347471252061032400147160ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicP.h" #include "EventI.h" #include "ConvertI.h" #include "TranslateI.h" #include "ResourceI.h" #include "RectObj.h" #include "RectObjP.h" #include "ThreadsI.h" #include "StringDefs.h" /****************************************************************** * * CoreWidget Resources * ******************************************************************/ externaldef(xtinherittranslations) int _XtInheritTranslations = 0; extern String XtCXtToolkitError; /* from IntrinsicI.h */ static void XtCopyScreen(Widget, int, XrmValue *); static XtResource resources[] = { {XtNscreen, XtCScreen, XtRScreen, sizeof(Screen*), XtOffsetOf(CoreRec,core.screen), XtRCallProc, (XtPointer)XtCopyScreen}, /*_XtCopyFromParent does not work for screen because the Display parameter is not passed through to the XtRCallProc routines */ {XtNdepth, XtCDepth, XtRInt,sizeof(int), XtOffsetOf(CoreRec,core.depth), XtRCallProc, (XtPointer)_XtCopyFromParent}, {XtNcolormap, XtCColormap, XtRColormap, sizeof(Colormap), XtOffsetOf(CoreRec,core.colormap), XtRCallProc,(XtPointer)_XtCopyFromParent}, {XtNbackground, XtCBackground, XtRPixel,sizeof(Pixel), XtOffsetOf(CoreRec,core.background_pixel), XtRString, (XtPointer)"XtDefaultBackground"}, {XtNbackgroundPixmap, XtCPixmap, XtRPixmap, sizeof(Pixmap), XtOffsetOf(CoreRec,core.background_pixmap), XtRImmediate, (XtPointer)XtUnspecifiedPixmap}, {XtNborderColor, XtCBorderColor, XtRPixel,sizeof(Pixel), XtOffsetOf(CoreRec,core.border_pixel), XtRString,(XtPointer)"XtDefaultForeground"}, {XtNborderPixmap, XtCPixmap, XtRPixmap, sizeof(Pixmap), XtOffsetOf(CoreRec,core.border_pixmap), XtRImmediate, (XtPointer)XtUnspecifiedPixmap}, {XtNmappedWhenManaged, XtCMappedWhenManaged, XtRBoolean, sizeof(Boolean), XtOffsetOf(CoreRec,core.mapped_when_managed), XtRImmediate, (XtPointer)True}, {XtNtranslations, XtCTranslations, XtRTranslationTable, sizeof(XtTranslations), XtOffsetOf(CoreRec,core.tm.translations), XtRTranslationTable, (XtPointer)NULL}, {XtNaccelerators, XtCAccelerators, XtRAcceleratorTable, sizeof(XtTranslations), XtOffsetOf(CoreRec,core.accelerators), XtRTranslationTable, (XtPointer)NULL} }; static void CoreInitialize(Widget, Widget, ArgList, Cardinal *); static void CoreClassPartInitialize(WidgetClass); static void CoreDestroy(Widget); static void CoreRealize(Widget, XtValueMask *, XSetWindowAttributes *); static Boolean CoreSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static void CoreSetValuesAlmost(Widget, Widget, XtWidgetGeometry *, XtWidgetGeometry *); static RectObjClassRec unNamedObjClassRec = { { /* superclass */ (WidgetClass)&rectObjClassRec, /* class_name */ "UnNamedObj", /* widget_size */ 0, /* class_initialize */ NULL, /* class_part_initialize*/ NULL, /* class_inited */ FALSE, /* initialize */ NULL, /* initialize_hook */ NULL, /* realize */ (XtProc)XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ NULL, /* num_resources */ 0, /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ FALSE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ NULL, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL } }; externaldef(widgetclassrec) WidgetClassRec widgetClassRec = { { /* superclass */ (WidgetClass)&unNamedObjClassRec, /* class_name */ "Core", /* widget_size */ sizeof(WidgetRec), /* class_initialize */ NULL, /* class_part_initialize*/ CoreClassPartInitialize, /* class_inited */ FALSE, /* initialize */ CoreInitialize, /* initialize_hook */ NULL, /* realize */ CoreRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ resources, /* num_resources */ XtNumber(resources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ CoreDestroy, /* resize */ NULL, /* expose */ NULL, /* set_values */ CoreSetValues, /* set_values_hook */ NULL, /* set_values_almost */ CoreSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* version */ XtVersion, /* callback_offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL } }; externaldef (WidgetClass) WidgetClass widgetClass = &widgetClassRec; externaldef (WidgetClass) WidgetClass coreWidgetClass = &widgetClassRec; /*ARGSUSED*/ static void XtCopyScreen( Widget widget, int offset, XrmValue *value) { value->addr = (XPointer)(&widget->core.screen); } /* * Start of Core methods */ static void CoreClassPartInitialize( register WidgetClass wc) { /* We don't need to check for null super since we'll get to object eventually, and it had better define them! */ register WidgetClass super = wc->core_class.superclass; LOCK_PROCESS; if (wc->core_class.realize == XtInheritRealize) { wc->core_class.realize = super->core_class.realize; } if (wc->core_class.accept_focus == XtInheritAcceptFocus) { wc->core_class.accept_focus = super->core_class.accept_focus; } if (wc->core_class.display_accelerator == XtInheritDisplayAccelerator) { wc->core_class.display_accelerator = super->core_class.display_accelerator; } if (wc->core_class.tm_table == (char *) XtInheritTranslations) { wc->core_class.tm_table = wc->core_class.superclass->core_class.tm_table; } else if (wc->core_class.tm_table != NULL) { wc->core_class.tm_table = (String)XtParseTranslationTable(wc->core_class.tm_table); } if (wc->core_class.actions != NULL) { Boolean inPlace; if (wc->core_class.version == XtVersionDontCheck) inPlace = True; else inPlace = (wc->core_class.version < XtVersion) ? False : True; /* Compile the action table into a more efficient form */ wc->core_class.actions = (XtActionList) _XtInitializeActionData( wc->core_class.actions, wc->core_class.num_actions, inPlace); } UNLOCK_PROCESS; } /* ARGSUSED */ static void CoreInitialize( Widget requested_widget, register Widget new_widget, ArgList args, Cardinal *num_args) { XtTranslations save1, save2; new_widget->core.event_table = NULL; new_widget->core.tm.proc_table = NULL; new_widget->core.tm.lastEventTime = 0; /* magic semi-resource fetched by GetResources */ save1 = (XtTranslations)new_widget->core.tm.current_state; new_widget->core.tm.current_state = NULL; save2 = new_widget->core.tm.translations; LOCK_PROCESS; new_widget->core.tm.translations = (XtTranslations)new_widget->core.widget_class->core_class.tm_table; UNLOCK_PROCESS; if (save1) _XtMergeTranslations(new_widget, save1, save1->operation); if (save2) _XtMergeTranslations(new_widget, save2, save2->operation); } static void CoreRealize( Widget widget, XtValueMask *value_mask, XSetWindowAttributes *attributes) { XtCreateWindow(widget, (unsigned int) InputOutput, (Visual *) CopyFromParent, *value_mask, attributes); } /* CoreRealize */ static void CoreDestroy ( Widget widget) { _XtFreeEventTable(&widget->core.event_table); _XtDestroyTMData(widget); XtUnregisterDrawable(XtDisplay(widget), widget->core.window); if (widget->core.popup_list != NULL) XtFree((char *)widget->core.popup_list); } /* CoreDestroy */ /* ARGSUSED */ static Boolean CoreSetValues( Widget old, Widget reference, Widget new, ArgList args, Cardinal *num_args) { Boolean redisplay; Mask window_mask; XSetWindowAttributes attributes; XtTranslations save; redisplay = FALSE; if (old->core.tm.translations != new->core.tm.translations) { save = new->core.tm.translations; new->core.tm.translations = old->core.tm.translations; _XtMergeTranslations(new, save, XtTableReplace); } /* Check everything that depends upon window being realized */ if (XtIsRealized(old)) { window_mask = 0; /* Check window attributes */ if (old->core.background_pixel != new->core.background_pixel && new->core.background_pixmap == XtUnspecifiedPixmap) { attributes.background_pixel = new->core.background_pixel; window_mask |= CWBackPixel; redisplay = TRUE; } if (old->core.background_pixmap != new->core.background_pixmap) { if (new->core.background_pixmap == XtUnspecifiedPixmap) { window_mask |= CWBackPixel; attributes.background_pixel = new->core.background_pixel; } else { attributes.background_pixmap = new->core.background_pixmap; window_mask &= ~CWBackPixel; window_mask |= CWBackPixmap; } redisplay = TRUE; } if (old->core.border_pixel != new->core.border_pixel && new->core.border_pixmap == XtUnspecifiedPixmap) { attributes.border_pixel = new->core.border_pixel; window_mask |= CWBorderPixel; } if (old->core.border_pixmap != new->core.border_pixmap) { if (new->core.border_pixmap == XtUnspecifiedPixmap) { window_mask |= CWBorderPixel; attributes.border_pixel = new->core.border_pixel; } else { attributes.border_pixmap = new->core.border_pixmap; window_mask &= ~CWBorderPixel; window_mask |= CWBorderPixmap; } } if (old->core.depth != new->core.depth) { XtAppWarningMsg(XtWidgetToApplicationContext(old), "invalidDepth","setValues",XtCXtToolkitError, "Can't change widget depth", (String *)NULL, (Cardinal *)NULL); new->core.depth = old->core.depth; } if (old->core.colormap != new->core.colormap) { window_mask |= CWColormap; attributes.colormap = new->core.colormap; } if (window_mask != 0) { /* Actually change X window attributes */ XChangeWindowAttributes( XtDisplay(new), XtWindow(new), window_mask, &attributes); } if (old->core.mapped_when_managed != new->core.mapped_when_managed) { Boolean mapped_when_managed = new->core.mapped_when_managed; new->core.mapped_when_managed = !mapped_when_managed; XtSetMappedWhenManaged(new, mapped_when_managed); } } /* if realized */ return redisplay; } /* CoreSetValues */ /*ARGSUSED*/ static void CoreSetValuesAlmost( Widget old, Widget new, XtWidgetGeometry *request, XtWidgetGeometry *reply) { *request = *reply; } libXt-1.1.5/src/Shell.c000064401431060000012000003175711252061032400150740ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifndef DEFAULT_WM_TIMEOUT #define DEFAULT_WM_TIMEOUT 5000 #endif #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "Shell.h" #include "ShellP.h" #include "ShellI.h" #include "Vendor.h" #include "VendorP.h" #include #include #include #include #include #include #ifdef EDITRES #include #endif /*************************************************************************** * * Note: per the Xt spec, the Shell geometry management assumes in * several places that there is only one managed child. This is * *not* a bug. Any subclass that assumes otherwise is broken. * ***************************************************************************/ #define BIGSIZE ((Dimension)32767) /*************************************************************************** * * Default values for resource lists * ***************************************************************************/ static void _XtShellDepth(Widget, int, XrmValue *); static void _XtShellColormap(Widget, int, XrmValue *); static void _XtShellAncestorSensitive(Widget, int, XrmValue *); static void _XtTitleEncoding(Widget, int, XrmValue *); /*************************************************************************** * * Shell class record * ***************************************************************************/ #define Offset(x) (XtOffsetOf(ShellRec, x)) static XtResource shellResources[]= { {XtNx, XtCPosition, XtRPosition, sizeof(Position), Offset(core.x), XtRImmediate, (XtPointer)BIGSIZE}, {XtNy, XtCPosition, XtRPosition, sizeof(Position), Offset(core.y), XtRImmediate, (XtPointer)BIGSIZE}, { XtNdepth, XtCDepth, XtRInt, sizeof(int), Offset(core.depth), XtRCallProc, (XtPointer) _XtShellDepth}, { XtNcolormap, XtCColormap, XtRColormap, sizeof(Colormap), Offset(core.colormap), XtRCallProc, (XtPointer) _XtShellColormap}, { XtNancestorSensitive, XtCSensitive, XtRBoolean, sizeof(Boolean), Offset(core.ancestor_sensitive), XtRCallProc, (XtPointer) _XtShellAncestorSensitive}, { XtNallowShellResize, XtCAllowShellResize, XtRBoolean, sizeof(Boolean), Offset(shell.allow_shell_resize), XtRImmediate, (XtPointer)False}, { XtNgeometry, XtCGeometry, XtRString, sizeof(String), Offset(shell.geometry), XtRString, (XtPointer)NULL}, { XtNcreatePopupChildProc, XtCCreatePopupChildProc, XtRFunction, sizeof(XtCreatePopupChildProc), Offset(shell.create_popup_child_proc), XtRFunction, NULL}, { XtNsaveUnder, XtCSaveUnder, XtRBoolean, sizeof(Boolean), Offset(shell.save_under), XtRImmediate, (XtPointer)False}, { XtNpopupCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), Offset(shell.popup_callback), XtRCallback, (XtPointer) NULL}, { XtNpopdownCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), Offset(shell.popdown_callback), XtRCallback, (XtPointer) NULL}, { XtNoverrideRedirect, XtCOverrideRedirect, XtRBoolean, sizeof(Boolean), Offset(shell.override_redirect), XtRImmediate, (XtPointer)False}, { XtNvisual, XtCVisual, XtRVisual, sizeof(Visual*), Offset(shell.visual), XtRImmediate, (XtPointer)CopyFromParent} }; static void ClassPartInitialize(WidgetClass); static void Initialize(Widget, Widget, ArgList, Cardinal *); static void Realize(Widget, Mask *, XSetWindowAttributes *); static void Resize(Widget); static Boolean SetValues(Widget, Widget, Widget, ArgList , Cardinal *); static void GetValuesHook(Widget, ArgList, Cardinal*); static void ChangeManaged(Widget); static XtGeometryResult GeometryManager(Widget, XtWidgetGeometry *, XtWidgetGeometry *); static XtGeometryResult RootGeometryManager(Widget gw, XtWidgetGeometry *request, XtWidgetGeometry *reply); static void Destroy(Widget); static ShellClassExtensionRec shellClassExtRec = { NULL, NULLQUARK, XtShellExtensionVersion, sizeof(ShellClassExtensionRec), RootGeometryManager }; externaldef(shellclassrec) ShellClassRec shellClassRec = { { /* Core */ /* superclass */ (WidgetClass) &compositeClassRec, /* class_name */ "Shell", /* size */ sizeof(ShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ ClassPartInitialize, /* Class init'ed ? */ FALSE, /* initialize */ Initialize, /* initialize_notify */ NULL, /* realize */ Realize, /* actions */ NULL, /* num_actions */ 0, /* resources */ shellResources, /* resource_count */ XtNumber(shellResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ Destroy, /* resize */ Resize, /* expose */ NULL, /* set_values */ SetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ GetValuesHook, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator*/ NULL, /* extension */ NULL },{ /* Composite */ /* geometry_manager */ GeometryManager, /* change_managed */ ChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* Shell */ /* extension */ (XtPointer)&shellClassExtRec } }; externaldef(shellwidgetclass) WidgetClass shellWidgetClass = (WidgetClass) (&shellClassRec); /*************************************************************************** * * OverrideShell class record * ***************************************************************************/ static XtResource overrideResources[]= { { XtNoverrideRedirect, XtCOverrideRedirect, XtRBoolean, sizeof(Boolean), Offset(shell.override_redirect), XtRImmediate, (XtPointer)True}, { XtNsaveUnder, XtCSaveUnder, XtRBoolean, sizeof(Boolean), Offset(shell.save_under), XtRImmediate, (XtPointer)True}, }; externaldef(overrideshellclassrec) OverrideShellClassRec overrideShellClassRec = { { /* superclass */ (WidgetClass) &shellClassRec, /* class_name */ "OverrideShell", /* size */ sizeof(OverrideShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ NULL, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ overrideResources, /* resource_count */ XtNumber(overrideResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ NULL, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(overrideshellwidgetclass) WidgetClass overrideShellWidgetClass = (WidgetClass) (&overrideShellClassRec); /*************************************************************************** * * WMShell class record * ***************************************************************************/ #undef Offset #define Offset(x) (XtOffsetOf(WMShellRec, x)) static int default_unspecified_shell_int = XtUnspecifiedShellInt; /* * Warning, casting XtUnspecifiedShellInt (which is -1) to an (XtPointer) * can result is loss of bits on some machines (i.e. crays) */ static XtResource wmResources[]= { { XtNtitle, XtCTitle, XtRString, sizeof(String), Offset(wm.title), XtRString, NULL}, { XtNtitleEncoding, XtCTitleEncoding, XtRAtom, sizeof(Atom), Offset(wm.title_encoding), XtRCallProc, (XtPointer) _XtTitleEncoding}, { XtNwmTimeout, XtCWmTimeout, XtRInt, sizeof(int), Offset(wm.wm_timeout), XtRImmediate,(XtPointer)DEFAULT_WM_TIMEOUT}, { XtNwaitForWm, XtCWaitForWm, XtRBoolean, sizeof(Boolean), Offset(wm.wait_for_wm), XtRImmediate, (XtPointer)True}, { XtNtransient, XtCTransient, XtRBoolean, sizeof(Boolean), Offset(wm.transient), XtRImmediate, (XtPointer)False}, /* size_hints minus things stored in core */ { XtNbaseWidth, XtCBaseWidth, XtRInt, sizeof(int), Offset(wm.base_width), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNbaseHeight, XtCBaseHeight, XtRInt, sizeof(int), Offset(wm.base_height), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNwinGravity, XtCWinGravity, XtRGravity, sizeof(int), Offset(wm.win_gravity), XtRGravity, (XtPointer) &default_unspecified_shell_int}, { XtNminWidth, XtCMinWidth, XtRInt, sizeof(int), Offset(wm.size_hints.min_width), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNminHeight, XtCMinHeight, XtRInt, sizeof(int), Offset(wm.size_hints.min_height), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNmaxWidth, XtCMaxWidth, XtRInt, sizeof(int), Offset(wm.size_hints.max_width), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNmaxHeight, XtCMaxHeight, XtRInt, sizeof(int), Offset(wm.size_hints.max_height), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNwidthInc, XtCWidthInc, XtRInt, sizeof(int), Offset(wm.size_hints.width_inc), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNheightInc, XtCHeightInc, XtRInt, sizeof(int), Offset(wm.size_hints.height_inc), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNminAspectX, XtCMinAspectX, XtRInt, sizeof(int), Offset(wm.size_hints.min_aspect.x), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNminAspectY, XtCMinAspectY, XtRInt, sizeof(int), Offset(wm.size_hints.min_aspect.y), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNmaxAspectX, XtCMaxAspectX, XtRInt, sizeof(int), Offset(wm.size_hints.max_aspect.x), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNmaxAspectY, XtCMaxAspectY, XtRInt, sizeof(int), Offset(wm.size_hints.max_aspect.y), XtRInt, (XtPointer) &default_unspecified_shell_int}, /* wm_hints */ { XtNinput, XtCInput, XtRBool, sizeof(Bool), Offset(wm.wm_hints.input), XtRImmediate, (XtPointer)False}, { XtNinitialState, XtCInitialState, XtRInitialState, sizeof(int), Offset(wm.wm_hints.initial_state), XtRImmediate, (XtPointer)NormalState}, { XtNiconPixmap, XtCIconPixmap, XtRBitmap, sizeof(Pixmap), Offset(wm.wm_hints.icon_pixmap), XtRPixmap, NULL}, { XtNiconWindow, XtCIconWindow, XtRWindow, sizeof(Window), Offset(wm.wm_hints.icon_window), XtRWindow, (XtPointer) NULL}, { XtNiconX, XtCIconX, XtRInt, sizeof(int), Offset(wm.wm_hints.icon_x), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNiconY, XtCIconY, XtRInt, sizeof(int), Offset(wm.wm_hints.icon_y), XtRInt, (XtPointer) &default_unspecified_shell_int}, { XtNiconMask, XtCIconMask, XtRBitmap, sizeof(Pixmap), Offset(wm.wm_hints.icon_mask), XtRPixmap, NULL}, { XtNwindowGroup, XtCWindowGroup, XtRWindow, sizeof(Window), Offset(wm.wm_hints.window_group), XtRImmediate, (XtPointer)XtUnspecifiedWindow}, { XtNclientLeader, XtCClientLeader, XtRWidget, sizeof(Widget), Offset(wm.client_leader), XtRWidget, NULL}, { XtNwindowRole, XtCWindowRole, XtRString, sizeof(String), Offset(wm.window_role), XtRString, (XtPointer) NULL}, { XtNurgency, XtCUrgency, XtRBoolean, sizeof(Boolean), Offset(wm.urgency), XtRImmediate, (XtPointer) False} }; static void WMInitialize(Widget, Widget, ArgList, Cardinal *); static Boolean WMSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static void WMDestroy(Widget); externaldef(wmshellclassrec) WMShellClassRec wmShellClassRec = { { /* superclass */ (WidgetClass) &shellClassRec, /* class_name */ "WMShell", /* size */ sizeof(WMShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ WMInitialize, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ wmResources, /* resource_count */ XtNumber(wmResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ WMDestroy, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ WMSetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ NULL, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(wmshellwidgetclass) WidgetClass wmShellWidgetClass = (WidgetClass) (&wmShellClassRec); /*************************************************************************** * * TransientShell class record * ***************************************************************************/ #undef Offset #define Offset(x) (XtOffsetOf(TransientShellRec, x)) static XtResource transientResources[]= { { XtNtransient, XtCTransient, XtRBoolean, sizeof(Boolean), Offset(wm.transient), XtRImmediate, (XtPointer)True}, { XtNtransientFor, XtCTransientFor, XtRWidget, sizeof(Widget), Offset(transient.transient_for), XtRWidget, NULL}, { XtNsaveUnder, XtCSaveUnder, XtRBoolean, sizeof(Boolean), Offset(shell.save_under), XtRImmediate, (XtPointer)True}, }; static void TransientRealize(Widget, Mask *, XSetWindowAttributes *); static Boolean TransientSetValues(Widget, Widget, Widget, ArgList, Cardinal *); externaldef(transientshellclassrec) TransientShellClassRec transientShellClassRec = { { /* superclass */ (WidgetClass) &vendorShellClassRec, /* class_name */ "TransientShell", /* size */ sizeof(TransientShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ NULL, /* initialize_notify */ NULL, /* realize */ TransientRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ transientResources, /* resource_count */ XtNumber(transientResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ NULL, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ TransientSetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ XtInheritTranslations, /* query_geometry */ NULL, /* display_accelerator*/ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(transientshellwidgetclass) WidgetClass transientShellWidgetClass = (WidgetClass) (&transientShellClassRec); /*************************************************************************** * * TopLevelShell class record * ***************************************************************************/ #undef Offset #define Offset(x) (XtOffsetOf(TopLevelShellRec, x)) static XtResource topLevelResources[]= { { XtNiconName, XtCIconName, XtRString, sizeof(String), Offset(topLevel.icon_name), XtRString, (XtPointer) NULL}, { XtNiconNameEncoding, XtCIconNameEncoding, XtRAtom, sizeof(Atom), Offset(topLevel.icon_name_encoding), XtRCallProc, (XtPointer) _XtTitleEncoding}, { XtNiconic, XtCIconic, XtRBoolean, sizeof(Boolean), Offset(topLevel.iconic), XtRImmediate, (XtPointer)False} }; static void TopLevelInitialize(Widget, Widget, ArgList, Cardinal *); static Boolean TopLevelSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static void TopLevelDestroy(Widget); externaldef(toplevelshellclassrec) TopLevelShellClassRec topLevelShellClassRec = { { /* superclass */ (WidgetClass) &vendorShellClassRec, /* class_name */ "TopLevelShell", /* size */ sizeof(TopLevelShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ TopLevelInitialize, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ topLevelResources, /* resource_count */ XtNumber(topLevelResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ TopLevelDestroy, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ TopLevelSetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ XtInheritTranslations, /* query_geometry */ NULL, /* display_accelerator */ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(toplevelshellwidgetclass) WidgetClass topLevelShellWidgetClass = (WidgetClass) (&topLevelShellClassRec); /*************************************************************************** * * ApplicationShell class record * ***************************************************************************/ #undef Offset #define Offset(x) (XtOffsetOf(ApplicationShellRec, x)) static XtResource applicationResources[]= { {XtNargc, XtCArgc, XtRInt, sizeof(int), Offset(application.argc), XtRImmediate, (XtPointer)0}, {XtNargv, XtCArgv, XtRStringArray, sizeof(String*), Offset(application.argv), XtRPointer, (XtPointer) NULL} }; #undef Offset static void ApplicationInitialize(Widget, Widget, ArgList, Cardinal *); static void ApplicationDestroy(Widget); static Boolean ApplicationSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static void ApplicationShellInsertChild(Widget); static CompositeClassExtensionRec compositeClassExtension = { /* next_extension */ NULL, /* record_type */ NULLQUARK, /* version */ XtCompositeExtensionVersion, /* record_size */ sizeof(CompositeClassExtensionRec), /* accepts_objects */ TRUE, /* allows_change_managed_set */ FALSE }; externaldef(applicationshellclassrec) ApplicationShellClassRec applicationShellClassRec = { { /* superclass */ (WidgetClass) &topLevelShellClassRec, /* class_name */ "ApplicationShell", /* size */ sizeof(ApplicationShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ ApplicationInitialize, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ applicationResources, /* resource_count */ XtNumber(applicationResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ ApplicationDestroy, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ ApplicationSetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ XtInheritTranslations, /* query_geometry */ NULL, /* display_accelerator*/ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ ApplicationShellInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ (XtPointer)&compositeClassExtension },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(applicationshellwidgetclass) WidgetClass applicationShellWidgetClass = (WidgetClass) (&applicationShellClassRec); /*************************************************************************** * * SessionShell class record * ***************************************************************************/ #undef Offset #define Offset(x) (XtOffsetOf(SessionShellRec, x)) static XtResource sessionResources[]= { #ifndef XT_NO_SM {XtNconnection, XtCConnection, XtRSmcConn, sizeof(SmcConn), Offset(session.connection), XtRSmcConn, (XtPointer) NULL}, #endif {XtNsessionID, XtCSessionID, XtRString, sizeof(String), Offset(session.session_id), XtRString, (XtPointer) NULL}, {XtNrestartCommand, XtCRestartCommand, XtRCommandArgArray, sizeof(String*), Offset(session.restart_command), XtRPointer, (XtPointer) NULL}, {XtNcloneCommand, XtCCloneCommand, XtRCommandArgArray, sizeof(String*), Offset(session.clone_command), XtRPointer, (XtPointer) NULL}, {XtNdiscardCommand, XtCDiscardCommand, XtRCommandArgArray, sizeof(String*), Offset(session.discard_command), XtRPointer, (XtPointer) NULL}, {XtNresignCommand, XtCResignCommand, XtRCommandArgArray, sizeof(String*), Offset(session.resign_command), XtRPointer, (XtPointer) NULL}, {XtNshutdownCommand, XtCShutdownCommand, XtRCommandArgArray, sizeof(String*), Offset(session.shutdown_command), XtRPointer, (XtPointer) NULL}, {XtNenvironment, XtCEnvironment, XtREnvironmentArray, sizeof(String*), Offset(session.environment), XtRPointer, (XtPointer) NULL}, {XtNcurrentDirectory, XtCCurrentDirectory, XtRDirectoryString, sizeof(String), Offset(session.current_dir), XtRString, (XtPointer) NULL}, {XtNprogramPath, XtCProgramPath, XtRString, sizeof(String), Offset(session.program_path), XtRString, (XtPointer) NULL}, {XtNrestartStyle, XtCRestartStyle, XtRRestartStyle, sizeof(unsigned char), Offset(session.restart_style), XtRImmediate, (XtPointer) SmRestartIfRunning}, {XtNjoinSession, XtCJoinSession, XtRBoolean, sizeof(Boolean), Offset(session.join_session), XtRImmediate, (XtPointer) True}, {XtNsaveCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.save_callbacks), XtRCallback, (XtPointer) NULL}, {XtNinteractCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.interact_callbacks), XtRCallback, (XtPointer)NULL}, {XtNcancelCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.cancel_callbacks), XtRCallback, (XtPointer) NULL}, {XtNsaveCompleteCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.save_complete_callbacks), XtRCallback, (XtPointer) NULL}, {XtNdieCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.die_callbacks), XtRCallback, (XtPointer) NULL}, {XtNerrorCallback, XtCCallback, XtRCallback, sizeof(XtPointer), Offset(session.error_callbacks), XtRCallback, (XtPointer) NULL} }; #undef Offset static void SessionInitialize(Widget, Widget, ArgList, Cardinal *); static void SessionDestroy(Widget); static Boolean SessionSetValues(Widget, Widget, Widget, ArgList, Cardinal *); static CompositeClassExtensionRec sessionCompositeClassExtension = { /* next_extension */ NULL, /* record_type */ NULLQUARK, /* version */ XtCompositeExtensionVersion, /* record_size */ sizeof(CompositeClassExtensionRec), /* accepts_objects */ TRUE, /* allows_change_managed_set */ FALSE }; externaldef(sessionshellclassrec) SessionShellClassRec sessionShellClassRec = { { /* superclass */ (WidgetClass) &applicationShellClassRec, /* class_name */ "SessionShell", /* size */ sizeof(SessionShellRec), /* Class Initializer */ NULL, /* class_part_initialize*/ NULL, /* Class init'ed ? */ FALSE, /* initialize */ SessionInitialize, /* initialize_notify */ NULL, /* realize */ XtInheritRealize, /* actions */ NULL, /* num_actions */ 0, /* resources */ sessionResources, /* resource_count */ XtNumber(sessionResources), /* xrm_class */ NULLQUARK, /* compress_motion */ FALSE, /* compress_exposure */ TRUE, /* compress_enterleave*/ FALSE, /* visible_interest */ FALSE, /* destroy */ SessionDestroy, /* resize */ XtInheritResize, /* expose */ NULL, /* set_values */ SessionSetValues, /* set_values_hook */ NULL, /* set_values_almost */ XtInheritSetValuesAlmost, /* get_values_hook */ NULL, /* accept_focus */ NULL, /* intrinsics version */ XtVersion, /* callback offsets */ NULL, /* tm_table */ XtInheritTranslations, /* query_geometry */ NULL, /* display_accelerator*/ NULL, /* extension */ NULL },{ /* geometry_manager */ XtInheritGeometryManager, /* change_managed */ XtInheritChangeManaged, /* insert_child */ XtInheritInsertChild, /* delete_child */ XtInheritDeleteChild, /* extension */ (XtPointer)&sessionCompositeClassExtension },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL },{ /* extension */ NULL } }; externaldef(sessionshellwidgetclass) WidgetClass sessionShellWidgetClass = (WidgetClass) (&sessionShellClassRec); /**************************************************************************** * Whew! ****************************************************************************/ static void ComputeWMSizeHints( WMShellWidget w, XSizeHints *hints) { register long flags; hints->flags = flags = w->wm.size_hints.flags; #define copy(field) hints->field = w->wm.size_hints.field if (flags & (USPosition | PPosition)) { copy(x); copy(y); } if (flags & (USSize | PSize)) { copy(width); copy(height); } if (flags & PMinSize) { copy(min_width); copy(min_height); } if (flags & PMaxSize) { copy(max_width); copy(max_height); } if (flags & PResizeInc) { copy(width_inc); copy(height_inc); } if (flags & PAspect) { copy(min_aspect.x); copy(min_aspect.y); copy(max_aspect.x); copy(max_aspect.y); } #undef copy #define copy(field) hints->field = w->wm.field if (flags & PBaseSize) { copy(base_width); copy(base_height); } if (flags & PWinGravity) copy(win_gravity); #undef copy } static void _SetWMSizeHints( WMShellWidget w) { XSizeHints *size_hints = XAllocSizeHints(); if (size_hints == NULL) _XtAllocError("XAllocSizeHints"); ComputeWMSizeHints(w, size_hints); XSetWMNormalHints(XtDisplay((Widget)w), XtWindow((Widget)w), size_hints); XFree((char*)size_hints); } static ShellClassExtension _FindClassExtension( WidgetClass widget_class) { ShellClassExtension ext; for (ext = (ShellClassExtension)((ShellWidgetClass)widget_class) ->shell_class.extension; ext != NULL && ext->record_type != NULLQUARK; ext = (ShellClassExtension)ext->next_extension); if (ext != NULL) { if ( ext->version == XtShellExtensionVersion && ext->record_size == sizeof(ShellClassExtensionRec)) { /* continue */ } else { String params[1]; Cardinal num_params = 1; params[0] = widget_class->core_class.class_name; XtErrorMsg( "invalidExtension", "shellClassPartInitialize", XtCXtToolkitError, "widget class %s has invalid ShellClassExtension record", params, &num_params); } } return ext; } static void ClassPartInitialize(WidgetClass widget_class) { ShellClassExtension ext = _FindClassExtension(widget_class); if (ext != NULL) { if (ext->root_geometry_manager == XtInheritRootGeometryManager) { ext->root_geometry_manager = _FindClassExtension(widget_class->core_class.superclass) ->root_geometry_manager; } } else { /* if not found, spec requires XtInheritRootGeometryManager */ XtPointer *extP = &((ShellWidgetClass)widget_class)->shell_class.extension; ext = XtNew(ShellClassExtensionRec); (void) memmove((char*)ext, (char*)_FindClassExtension(widget_class->core_class.superclass), sizeof(ShellClassExtensionRec)); ext->next_extension = *extP; *extP = (XtPointer)ext; } } static void EventHandler(Widget wid, XtPointer closure, XEvent *event, Boolean *continue_to_dispatch); static void _popup_set_prop(ShellWidget); /*ARGSUSED*/ static void XtCopyDefaultDepth( Widget widget, int offset, XrmValue *value) { value->addr = (XPointer)(&DefaultDepthOfScreen(XtScreenOfObject(widget))); } static void _XtShellDepth( Widget widget, int closure, XrmValue *value) { if (widget->core.parent == NULL) XtCopyDefaultDepth(widget,closure,value); else _XtCopyFromParent (widget,closure,value); } /*ARGSUSED*/ static void XtCopyDefaultColormap( Widget widget, int offset, XrmValue *value) { value->addr = (XPointer)(&DefaultColormapOfScreen(XtScreenOfObject(widget))); } static void _XtShellColormap( Widget widget, int closure, XrmValue *value) { if (widget->core.parent == NULL) XtCopyDefaultColormap(widget,closure,value); else _XtCopyFromParent (widget,closure,value); } static void _XtShellAncestorSensitive( Widget widget, int closure, XrmValue *value) { static Boolean true = True; if (widget->core.parent == NULL) value->addr = (XPointer)(&true); else _XtCopyFromParent (widget,closure,value); } /*ARGSUSED*/ static void _XtTitleEncoding( Widget widget, int offset, XrmValue *value) { static Atom atom; if (XtWidgetToApplicationContext(widget)->langProcRec.proc) atom = None; else atom = XA_STRING; value->addr = (XPointer) &atom; } /* ARGSUSED */ static void Initialize( Widget req, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { ShellWidget w = (ShellWidget) new; w->shell.popped_up = FALSE; w->shell.client_specified = _XtShellNotReparented | _XtShellPositionValid; if (w->core.x == BIGSIZE) { w->core.x = 0; if (w->core.y == BIGSIZE) w->core.y = 0; } else { if (w->core.y == BIGSIZE) w->core.y = 0; else w->shell.client_specified |= _XtShellPPositionOK; } XtAddEventHandler(new, (EventMask) StructureNotifyMask, TRUE, EventHandler, (XtPointer) NULL); #ifdef EDITRES XtAddEventHandler(new, (EventMask) 0, TRUE, _XEditResCheckMessages, NULL); #endif } /* ARGSUSED */ static void WMInitialize( Widget req, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { WMShellWidget w = (WMShellWidget) new; TopLevelShellWidget tls = (TopLevelShellWidget) new; /* maybe */ if(w->wm.title == NULL) { if (XtIsTopLevelShell(new) && tls->topLevel.icon_name != NULL && strlen(tls->topLevel.icon_name) != 0) { w->wm.title = XtNewString(tls->topLevel.icon_name); } else { w->wm.title = XtNewString(w->core.name); } } else { w->wm.title = XtNewString(w->wm.title); } w->wm.size_hints.flags = 0; w->wm.wm_hints.flags = 0; if (w->wm.window_role) w->wm.window_role = XtNewString(w->wm.window_role); } /* ARGSUSED */ static void TopLevelInitialize( Widget req, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { TopLevelShellWidget w = (TopLevelShellWidget) new; if (w->topLevel.icon_name == NULL) { w->topLevel.icon_name = XtNewString(w->core.name); } else { w->topLevel.icon_name = XtNewString(w->topLevel.icon_name); } if (w->topLevel.iconic) w->wm.wm_hints.initial_state = IconicState; } static String *NewArgv(int, String *); static String *NewStringArray(String *); static void FreeStringArray(String *); /* ARGSUSED */ static void ApplicationInitialize( Widget req, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { ApplicationShellWidget w = (ApplicationShellWidget)new; if (w->application.argc > 0) w->application.argv = NewArgv(w->application.argc, w->application.argv); } #define XtSaveInactive 0 #define XtSaveActive 1 #define XtInteractPending 2 #define XtInteractActive 3 #define XtCloneCommandMask (1L<<0) #define XtCurrentDirectoryMask (1L<<1) #define XtDiscardCommandMask (1L<<2) #define XtEnvironmentMask (1L<<3) #define XtProgramMask (1L<<4) #define XtResignCommandMask (1L<<5) #define XtRestartCommandMask (1L<<6) #define XtRestartStyleHintMask (1L<<7) #define XtShutdownCommandMask (1L<<8) static void JoinSession(SessionShellWidget); static void SetSessionProperties(SessionShellWidget, Boolean, unsigned long, unsigned long); static void StopManagingSession(SessionShellWidget, SmcConn); typedef struct _XtSaveYourselfRec { XtSaveYourself next; int save_type; int interact_style; Boolean shutdown; Boolean fast; Boolean cancel_shutdown; int phase; int interact_dialog_type; Boolean request_cancel; Boolean request_next_phase; Boolean save_success; int save_tokens; int interact_tokens; } XtSaveYourselfRec; /* ARGSUSED */ static void SessionInitialize( Widget req, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { #ifndef XT_NO_SM SessionShellWidget w = (SessionShellWidget)new; if (w->session.session_id) w->session.session_id = XtNewString(w->session.session_id); if (w->session.restart_command) w->session.restart_command = NewStringArray(w->session.restart_command); if (w->session.clone_command) w->session.clone_command = NewStringArray(w->session.clone_command); if (w->session.discard_command) w->session.discard_command = NewStringArray(w->session.discard_command); if (w->session.resign_command) w->session.resign_command = NewStringArray(w->session.resign_command); if (w->session.shutdown_command) w->session.shutdown_command = NewStringArray(w->session.shutdown_command); if (w->session.environment) w->session.environment = NewStringArray(w->session.environment); if (w->session.current_dir) w->session.current_dir = XtNewString(w->session.current_dir); if (w->session.program_path) w->session.program_path = XtNewString(w->session.program_path); w->session.checkpoint_state = XtSaveInactive; w->session.input_id = 0; w->session.save = NULL; if ((w->session.join_session) && (w->application.argv || w->session.restart_command)) JoinSession(w); if (w->session.connection) SetSessionProperties(w, True, 0L, 0L); #endif /* !XT_NO_SM */ } static void Resize( Widget w) { register ShellWidget sw = (ShellWidget)w; Widget childwid; Cardinal i; for(i = 0; i < sw->composite.num_children; i++) { if (XtIsManaged(sw->composite.children[i])) { childwid = sw->composite.children[i]; XtResizeWidget(childwid, sw->core.width, sw->core.height, childwid->core.border_width); break; /* can only be one managed child */ } } } static void GetGeometry(Widget, Widget); static void Realize( Widget wid, Mask *vmask, XSetWindowAttributes *attr) { ShellWidget w = (ShellWidget) wid; Mask mask = *vmask; if (! (w->shell.client_specified & _XtShellGeometryParsed)) { /* we'll get here only if there was no child the first time we were realized. If the shell was Unrealized and then re-Realized, we probably don't want to re-evaluate the defaults anyway. */ GetGeometry(wid, (Widget)NULL); } else if (w->core.background_pixmap == XtUnspecifiedPixmap) { /* I attempt to inherit my child's background to avoid screen flash * if there is latency between when I get resized and when my child * is resized. Background=None is not satisfactory, as I want the * user to get immediate feedback on the new dimensions (most * particularly in the case of a non-reparenting wm). It is * especially important to have the server clear any old cruft * from the display when I am resized larger. */ register Widget *childP = w->composite.children; int i; for (i = w->composite.num_children; i; i--, childP++) { if (XtIsWidget(*childP) && XtIsManaged(*childP)) { if ((*childP)->core.background_pixmap != XtUnspecifiedPixmap) { mask &= ~(CWBackPixel); mask |= CWBackPixmap; attr->background_pixmap = w->core.background_pixmap = (*childP)->core.background_pixmap; } else { attr->background_pixel = w->core.background_pixel = (*childP)->core.background_pixel; } break; } } } if(w->shell.save_under) { mask |= CWSaveUnder; attr->save_under = TRUE; } if(w->shell.override_redirect) { mask |= CWOverrideRedirect; attr->override_redirect = TRUE; } if (wid->core.width == 0 || wid->core.height == 0) { Cardinal count = 1; XtErrorMsg("invalidDimension", "shellRealize", XtCXtToolkitError, "Shell widget %s has zero width and/or height", &wid->core.name, &count); } wid->core.window = XCreateWindow(XtDisplay(wid), wid->core.screen->root, (int)wid->core.x, (int)wid->core.y, (unsigned int)wid->core.width, (unsigned int)wid->core.height, (unsigned int)wid->core.border_width, (int) wid->core.depth, (unsigned int) InputOutput, w->shell.visual, mask, attr); _popup_set_prop(w); } static void _SetTransientForHint( TransientShellWidget w, Boolean delete) { Window window_group; if (w->wm.transient) { if (w->transient.transient_for != NULL && XtIsRealized(w->transient.transient_for)) window_group = XtWindow(w->transient.transient_for); else if ((window_group = w->wm.wm_hints.window_group) == XtUnspecifiedWindowGroup) { if (delete) XDeleteProperty( XtDisplay((Widget)w), XtWindow((Widget)w), XA_WM_TRANSIENT_FOR ); return; } XSetTransientForHint( XtDisplay((Widget)w), XtWindow((Widget)w), window_group ); } } static void TransientRealize( Widget w, Mask *vmask, XSetWindowAttributes *attr) { XtRealizeProc realize; LOCK_PROCESS; realize = transientShellWidgetClass->core_class.superclass->core_class.realize; UNLOCK_PROCESS; (*realize) (w, vmask, attr); _SetTransientForHint((TransientShellWidget)w, False); } static Widget GetClientLeader( Widget w) { while ((! XtIsWMShell(w) || ! ((WMShellWidget)w)->wm.client_leader) && w->core.parent) w = w->core.parent; /* ASSERT: w is a WMshell with client_leader set, or w has no parent */ if (XtIsWMShell(w) && ((WMShellWidget)w)->wm.client_leader) w = ((WMShellWidget)w)->wm.client_leader; return w; } static void EvaluateWMHints( WMShellWidget w) { XWMHints *hintp = &w->wm.wm_hints; hintp->flags = StateHint | InputHint; if (hintp->icon_x == XtUnspecifiedShellInt) hintp->icon_x = -1; else hintp->flags |= IconPositionHint; if (hintp->icon_y == XtUnspecifiedShellInt) hintp->icon_y = -1; else hintp->flags |= IconPositionHint; if (hintp->icon_pixmap != None) hintp->flags |= IconPixmapHint; if (hintp->icon_mask != None) hintp->flags |= IconMaskHint; if (hintp->icon_window != None) hintp->flags |= IconWindowHint; if (hintp->window_group == XtUnspecifiedWindow) { if(w->core.parent) { Widget p; for (p = w->core.parent; p->core.parent; p = p->core.parent); if (XtIsRealized(p)) { hintp->window_group = XtWindow(p); hintp->flags |= WindowGroupHint; } } } else if (hintp->window_group != XtUnspecifiedWindowGroup) hintp->flags |= WindowGroupHint; if (w->wm.urgency) hintp->flags |= XUrgencyHint; } static void EvaluateSizeHints( WMShellWidget w) { struct _OldXSizeHints *sizep = &w->wm.size_hints; sizep->x = w->core.x; sizep->y = w->core.y; sizep->width = w->core.width; sizep->height = w->core.height; if (sizep->flags & USSize) { if (sizep->flags & PSize) sizep->flags &= ~PSize; } else sizep->flags |= PSize; if (sizep->flags & USPosition) { if (sizep->flags & PPosition) sizep->flags &= ~PPosition; } else if (w->shell.client_specified & _XtShellPPositionOK) sizep->flags |= PPosition; if (sizep->min_aspect.x != XtUnspecifiedShellInt || sizep->min_aspect.y != XtUnspecifiedShellInt || sizep->max_aspect.x != XtUnspecifiedShellInt || sizep->max_aspect.y != XtUnspecifiedShellInt) { sizep->flags |= PAspect; } if (sizep->flags & PBaseSize || w->wm.base_width != XtUnspecifiedShellInt || w->wm.base_height != XtUnspecifiedShellInt) { sizep->flags |= PBaseSize; if (w->wm.base_width == XtUnspecifiedShellInt) w->wm.base_width = 0; if (w->wm.base_height == XtUnspecifiedShellInt) w->wm.base_height = 0; } if (sizep->flags & PResizeInc || sizep->width_inc != XtUnspecifiedShellInt || sizep->height_inc != XtUnspecifiedShellInt) { if (sizep->width_inc < 1) sizep->width_inc = 1; if (sizep->height_inc < 1) sizep->height_inc = 1; sizep->flags |= PResizeInc; } if (sizep->flags & PMaxSize || sizep->max_width != XtUnspecifiedShellInt || sizep->max_height != XtUnspecifiedShellInt) { sizep->flags |= PMaxSize; if (sizep->max_width == XtUnspecifiedShellInt) sizep->max_width = BIGSIZE; if (sizep->max_height == XtUnspecifiedShellInt) sizep->max_height = BIGSIZE; } if (sizep->flags & PMinSize || sizep->min_width != XtUnspecifiedShellInt || sizep->min_height != XtUnspecifiedShellInt) { sizep->flags |= PMinSize; if (sizep->min_width == XtUnspecifiedShellInt) sizep->min_width = 1; if (sizep->min_height == XtUnspecifiedShellInt) sizep->min_height = 1; } } static void _popup_set_prop( ShellWidget w) { Widget p; WMShellWidget wmshell = (WMShellWidget) w; TopLevelShellWidget tlshell = (TopLevelShellWidget) w; ApplicationShellWidget appshell = (ApplicationShellWidget) w; XTextProperty icon_name; XTextProperty window_name; char **argv; int argc; XSizeHints *size_hints; Window window_group; XClassHint classhint; Boolean copied_iname, copied_wname; if (!XtIsWMShell((Widget)w) || w->shell.override_redirect) return; if ((size_hints = XAllocSizeHints()) == NULL) _XtAllocError("XAllocSizeHints"); copied_iname = copied_wname = False; if (wmshell->wm.title_encoding == None && XmbTextListToTextProperty(XtDisplay((Widget)w), (char**)&wmshell->wm.title, 1, XStdICCTextStyle, &window_name) >= Success) { copied_wname = True; } else { window_name.value = (unsigned char*)wmshell->wm.title; window_name.encoding = wmshell->wm.title_encoding ? wmshell->wm.title_encoding : XA_STRING; window_name.format = 8; window_name.nitems = strlen((char *)window_name.value); } if (XtIsTopLevelShell((Widget)w)) { if (tlshell->topLevel.icon_name_encoding == None && XmbTextListToTextProperty(XtDisplay((Widget)w), (char**)&tlshell->topLevel.icon_name, 1, XStdICCTextStyle, &icon_name) >= Success) { copied_iname = True; } else { icon_name.value = (unsigned char*)tlshell->topLevel.icon_name; icon_name.encoding = tlshell->topLevel.icon_name_encoding ? tlshell->topLevel.icon_name_encoding : XA_STRING; icon_name.format = 8; icon_name.nitems = strlen((char *)icon_name.value); } } EvaluateWMHints(wmshell); EvaluateSizeHints(wmshell); ComputeWMSizeHints(wmshell, size_hints); if (wmshell->wm.transient && !XtIsTransientShell((Widget)w) && (window_group = wmshell->wm.wm_hints.window_group) != XtUnspecifiedWindowGroup) { XSetTransientForHint(XtDisplay((Widget)w), XtWindow((Widget)w), window_group ); } classhint.res_name = w->core.name; /* For the class, look up to the top of the tree */ for (p = (Widget)w; p->core.parent != NULL; p = p->core.parent); if (XtIsApplicationShell(p)) { classhint.res_class = ((ApplicationShellWidget)p)->application.class; } else { LOCK_PROCESS; classhint.res_class = XtClass(p)->core_class.class_name; UNLOCK_PROCESS; } if (XtIsApplicationShell((Widget)w) && (argc = appshell->application.argc) != -1) argv = (char**)appshell->application.argv; else { argv = NULL; argc = 0; } XSetWMProperties(XtDisplay((Widget)w), XtWindow((Widget)w), &window_name, (XtIsTopLevelShell((Widget)w)) ? &icon_name : NULL, argv, argc, size_hints, &wmshell->wm.wm_hints, &classhint); XFree((char*)size_hints); if (copied_wname) XFree((XPointer)window_name.value); if (copied_iname) XFree((XPointer)icon_name.value); LOCK_PROCESS; if (XtWidgetToApplicationContext((Widget)w)->langProcRec.proc) { char *locale = setlocale(LC_CTYPE, (char *)NULL); if (locale) XChangeProperty(XtDisplay((Widget)w), XtWindow((Widget)w), XInternAtom(XtDisplay((Widget)w), "WM_LOCALE_NAME", False), XA_STRING, 8, PropModeReplace, (unsigned char *)locale, strlen(locale)); } UNLOCK_PROCESS; p = GetClientLeader((Widget)w); if (XtWindow(p)) XChangeProperty(XtDisplay((Widget)w), XtWindow((Widget)w), XInternAtom(XtDisplay((Widget)w), "WM_CLIENT_LEADER", False), XA_WINDOW, 32, PropModeReplace, (unsigned char *)(&(p->core.window)), 1); #ifndef XT_NO_SM if (p == (Widget) w) { for ( ; p->core.parent != NULL; p = p->core.parent); if (XtIsSubclass(p, sessionShellWidgetClass)) { String sm_client_id = ((SessionShellWidget)p)->session.session_id; if (sm_client_id != NULL) { XChangeProperty(XtDisplay((Widget)w), XtWindow((Widget)w), XInternAtom(XtDisplay((Widget)w), "SM_CLIENT_ID", False), XA_STRING, 8, PropModeReplace, (unsigned char *) sm_client_id, strlen(sm_client_id)); } } } #endif /* !XT_NO_SM */ if (wmshell->wm.window_role) XChangeProperty(XtDisplay((Widget)w), XtWindow((Widget)w), XInternAtom(XtDisplay((Widget)w), "WM_WINDOW_ROLE", False), XA_STRING, 8, PropModeReplace, (unsigned char *)wmshell->wm.window_role, strlen(wmshell->wm.window_role)); } /* ARGSUSED */ static void EventHandler( Widget wid, XtPointer closure, /* unused */ XEvent *event, Boolean *continue_to_dispatch) /* unused */ { register ShellWidget w = (ShellWidget) wid; WMShellWidget wmshell = (WMShellWidget) w; Boolean sizechanged = FALSE; if(w->core.window != event->xany.window) { XtAppErrorMsg(XtWidgetToApplicationContext(wid), "invalidWindow","eventHandler",XtCXtToolkitError, "Event with wrong window", (String *)NULL, (Cardinal *)NULL); return; } switch(event->type) { case ConfigureNotify: if (w->core.window != event->xconfigure.window) return; /* in case of SubstructureNotify */ #define NEQ(x) ( w->core.x != event->xconfigure.x ) if( NEQ(width) || NEQ(height) || NEQ(border_width) ) { sizechanged = TRUE; #undef NEQ w->core.width = event->xconfigure.width; w->core.height = event->xconfigure.height; w->core.border_width = event->xconfigure.border_width; } if (event->xany.send_event /* ICCCM compliant synthetic ev */ /* || w->shell.override_redirect */ || w->shell.client_specified & _XtShellNotReparented) { w->core.x = event->xconfigure.x; w->core.y = event->xconfigure.y; w->shell.client_specified |= _XtShellPositionValid; } else w->shell.client_specified &= ~_XtShellPositionValid; if (XtIsWMShell(wid) && !wmshell->wm.wait_for_wm) { /* Consider trusting the wm again */ register struct _OldXSizeHints *hintp = &wmshell->wm.size_hints; #define EQ(x) (hintp->x == w->core.x) if (EQ(x) && EQ(y) && EQ(width) && EQ(height)) { wmshell->wm.wait_for_wm = TRUE; } #undef EQ } break; case ReparentNotify: if (event->xreparent.window == XtWindow(w)) { if (event->xreparent.parent != RootWindowOfScreen(XtScreen(w))) w->shell.client_specified &= ~(_XtShellNotReparented | _XtShellPositionValid); else { w->core.x = event->xreparent.x; w->core.y = event->xreparent.y; w->shell.client_specified |= (_XtShellNotReparented | _XtShellPositionValid); } } return; case MapNotify: if (XtIsTopLevelShell(wid)) { ((TopLevelShellWidget)wid)->topLevel.iconic = FALSE; } return; case UnmapNotify: { XtPerDisplayInput pdi; XtDevice device; Widget p; if (XtIsTopLevelShell(wid)) ((TopLevelShellWidget)wid)->topLevel.iconic = TRUE; pdi = _XtGetPerDisplayInput(event->xunmap.display); device = &pdi->pointer; if (device->grabType == XtPassiveServerGrab) { p = device->grab.widget; while (p && !(XtIsShell(p))) p = p->core.parent; if (p == wid) device->grabType = XtNoServerGrab; } device = &pdi->keyboard; if (IsEitherPassiveGrab(device->grabType)) { p = device->grab.widget; while (p && !(XtIsShell(p))) p = p->core.parent; if (p == wid) { device->grabType = XtNoServerGrab; pdi->activatingKey = 0; } } return; } default: return; } { XtWidgetProc resize; LOCK_PROCESS; resize = XtClass(wid)->core_class.resize; UNLOCK_PROCESS; if (sizechanged && resize) { CALLGEOTAT(_XtGeoTrace((Widget)w, "Shell \"%s\" is being resized to %d %d.\n", XtName(wid), wid->core.width, wid->core.height )); (*resize)(wid); } } } static void Destroy( Widget wid) { if (XtIsRealized(wid)) XDestroyWindow( XtDisplay(wid), XtWindow(wid) ); } static void WMDestroy( Widget wid) { WMShellWidget w = (WMShellWidget) wid; XtFree((char *) w->wm.title); XtFree((char *) w->wm.window_role); } static void TopLevelDestroy( Widget wid) { TopLevelShellWidget w = (TopLevelShellWidget) wid; XtFree((char *) w->topLevel.icon_name); } static void ApplicationDestroy( Widget wid) { ApplicationShellWidget w = (ApplicationShellWidget) wid; if (w->application.argc > 0) FreeStringArray(w->application.argv); } static void SessionDestroy( Widget wid) { #ifndef XT_NO_SM SessionShellWidget w = (SessionShellWidget) wid; StopManagingSession(w, w->session.connection); XtFree(w->session.session_id); FreeStringArray(w->session.restart_command); FreeStringArray(w->session.clone_command); FreeStringArray(w->session.discard_command); FreeStringArray(w->session.resign_command); FreeStringArray(w->session.shutdown_command); FreeStringArray(w->session.environment); XtFree(w->session.current_dir); XtFree(w->session.program_path); #endif /* !XT_NO_SM */ } /* * If the Shell has a width and a height which are zero, and as such * suspect, and it has not yet been realized then it will grow to * match the child before parsing the geometry resource. * */ static void GetGeometry( Widget W, Widget child) { register ShellWidget w = (ShellWidget)W; Boolean is_wmshell = XtIsWMShell(W); int x, y, width, height, win_gravity = -1, flag; XSizeHints hints; if (child != NULL) { /* we default to our child's size */ if (is_wmshell && (w->core.width == 0 || w->core.height == 0)) ((WMShellWidget)W)->wm.size_hints.flags |= PSize; if (w->core.width == 0) w->core.width = child->core.width; if (w->core.height == 0) w->core.height = child->core.height; } if(w->shell.geometry != NULL) { char def_geom[64]; x = w->core.x; y = w->core.y; width = w->core.width; height = w->core.height; if (is_wmshell) { WMShellPart* wm = &((WMShellWidget)w)->wm; EvaluateSizeHints((WMShellWidget)w); (void) memmove((char*)&hints, (char*)&wm->size_hints, sizeof(struct _OldXSizeHints)); hints.win_gravity = wm->win_gravity; if (wm->size_hints.flags & PBaseSize) { width -= wm->base_width; height -= wm->base_height; hints.base_width = wm->base_width; hints.base_height = wm->base_height; } else if (wm->size_hints.flags & PMinSize) { width -= wm->size_hints.min_width; height -= wm->size_hints.min_height; } if (wm->size_hints.flags & PResizeInc) { width /= wm->size_hints.width_inc; height /= wm->size_hints.height_inc; } } else hints.flags = 0; snprintf( def_geom, sizeof(def_geom), "%dx%d+%d+%d", width, height, x, y ); flag = XWMGeometry( XtDisplay(W), XScreenNumberOfScreen(XtScreen(W)), w->shell.geometry, def_geom, (unsigned int)w->core.border_width, &hints, &x, &y, &width, &height, &win_gravity ); if (flag) { if (flag & XValue) w->core.x = (Position)x; if (flag & YValue) w->core.y = (Position)y; if (flag & WidthValue) w->core.width = (Dimension)width; if (flag & HeightValue) w->core.height = (Dimension)height; } else { String params[2]; Cardinal num_params = 2; params[0] = XtName(W); params[1] = w->shell.geometry; XtAppWarningMsg(XtWidgetToApplicationContext(W), "badGeometry", "shellRealize", XtCXtToolkitError, "Shell widget \"%s\" has an invalid geometry specification: \"%s\"", params, &num_params); } } else flag = 0; if (is_wmshell) { WMShellWidget wmshell = (WMShellWidget) w; if (wmshell->wm.win_gravity == XtUnspecifiedShellInt) { if (win_gravity != -1) wmshell->wm.win_gravity = win_gravity; else wmshell->wm.win_gravity = NorthWestGravity; } wmshell->wm.size_hints.flags |= PWinGravity; if ((flag & (XValue|YValue)) == (XValue|YValue)) wmshell->wm.size_hints.flags |= USPosition; if ((flag & (WidthValue|HeightValue)) == (WidthValue|HeightValue)) wmshell->wm.size_hints.flags |= USSize; } w->shell.client_specified |= _XtShellGeometryParsed; } static void ChangeManaged(Widget wid) { ShellWidget w = (ShellWidget) wid; Widget child = NULL; Cardinal i; for (i = 0; i < w->composite.num_children; i++) { if (XtIsManaged(w->composite.children[i])) { child = w->composite.children[i]; break; /* there can only be one of them! */ } } if (!XtIsRealized (wid)) /* then we're about to be realized... */ GetGeometry(wid, child); if (child != NULL) XtConfigureWidget (child, (Position)0, (Position)0, w->core.width, w->core.height, (Dimension)0 ); } /* * This is gross, I can't wait to see if the change happened so I will ask * the window manager to change my size and do the appropriate X work. * I will then tell the requester that he can. Care must be taken because * it is possible that some time in the future the request will be * asynchronusly denied and the window reverted to it's old size/shape. */ /*ARGSUSED*/ static XtGeometryResult GeometryManager( Widget wid, XtWidgetGeometry *request, XtWidgetGeometry *reply) { ShellWidget shell = (ShellWidget)(wid->core.parent); XtWidgetGeometry my_request; if(shell->shell.allow_shell_resize == FALSE && XtIsRealized(wid)) return(XtGeometryNo); if (request->request_mode & (CWX | CWY)) return(XtGeometryNo); my_request.request_mode = (request->request_mode & XtCWQueryOnly); if (request->request_mode & CWWidth) { my_request.width = request->width; my_request.request_mode |= CWWidth; } if (request->request_mode & CWHeight) { my_request.height = request->height; my_request.request_mode |= CWHeight; } if (request->request_mode & CWBorderWidth) { my_request.border_width = request->border_width; my_request.request_mode |= CWBorderWidth; } if (XtMakeGeometryRequest((Widget)shell, &my_request, NULL) == XtGeometryYes) { /* assert: if (request->request_mode & CWWidth) then * shell->core.width == request->width * assert: if (request->request_mode & CWHeight) then * shell->core.height == request->height * * so, whatever the WM sized us to (if the Shell requested * only one of the two) is now the correct child size */ if (!(request->request_mode & XtCWQueryOnly)) { wid->core.width = shell->core.width; wid->core.height = shell->core.height; if (request->request_mode & CWBorderWidth) { wid->core.x = wid->core.y = -request->border_width; } } return XtGeometryYes; } else return XtGeometryNo; } typedef struct { Widget w; unsigned long request_num; Boolean done; } QueryStruct; static Bool isMine( Display *dpy, register XEvent *event, char *arg) { QueryStruct *q = (QueryStruct *) arg; register Widget w = q->w; if ( (dpy != XtDisplay(w)) || (event->xany.window != XtWindow(w)) ) { return FALSE; } if (event->xany.serial >= q->request_num) { if (event->type == ConfigureNotify) { q->done = TRUE; return TRUE; } } else if (event->type == ConfigureNotify) return TRUE; /* flush old events */ if (event->type == ReparentNotify && event->xreparent.window == XtWindow(w)) { /* we might get ahead of this event, so just in case someone * asks for coordinates before this event is dispatched... */ register ShellWidget s = (ShellWidget)w; if (event->xreparent.parent != RootWindowOfScreen(XtScreen(w))) s->shell.client_specified &= ~_XtShellNotReparented; else s->shell.client_specified |= _XtShellNotReparented; } return FALSE; } static Boolean _wait_for_response( ShellWidget w, XEvent *event, unsigned long request_num) { XtAppContext app = XtWidgetToApplicationContext((Widget) w); QueryStruct q; unsigned long timeout; if (XtIsWMShell((Widget)w)) timeout = ((WMShellWidget)w)->wm.wm_timeout; else timeout = DEFAULT_WM_TIMEOUT; XFlush(XtDisplay(w)); q.w = (Widget) w; q.request_num = request_num; q.done = FALSE; /* * look for match event and discard all prior configures */ while (XCheckIfEvent(XtDisplay(w),event,isMine,(char*)&q)) { if (q.done) return TRUE; } while (timeout > 0) { if (_XtWaitForSomething (app, FALSE, TRUE, TRUE, TRUE, TRUE, #ifdef XTHREADS FALSE, #endif &timeout) != -1) { while (XCheckIfEvent(XtDisplay(w),event,isMine,(char*)&q)) { if (q.done) return TRUE; } } } return FALSE; } /*ARGSUSED*/ static XtGeometryResult RootGeometryManager( Widget gw, XtWidgetGeometry *request, XtWidgetGeometry *reply) { register ShellWidget w = (ShellWidget)gw; XWindowChanges values; unsigned int mask = request->request_mode; XEvent event; Boolean wm; register struct _OldXSizeHints *hintp = NULL; int oldx, oldy, oldwidth, oldheight, oldborder_width; unsigned long request_num; CALLGEOTAT(_XtGeoTab(1)); if (XtIsWMShell(gw)) { wm = True; hintp = &((WMShellWidget)w)->wm.size_hints; /* for draft-ICCCM wm's, need to make sure hints reflect (current) reality so client can move and size separately. */ hintp->x = w->core.x; hintp->y = w->core.y; hintp->width = w->core.width; hintp->height = w->core.height; } else wm = False; oldx = w->core.x; oldy = w->core.y; oldwidth = w->core.width; oldheight = w->core.height; oldborder_width = w->core.border_width; #define PutBackGeometry() \ { w->core.x = oldx; \ w->core.y = oldy; \ w->core.width = oldwidth; \ w->core.height = oldheight; \ w->core.border_width = oldborder_width; } if (mask & CWX) { if (w->core.x == request->x) mask &= ~CWX; else { w->core.x = values.x = request->x; if (wm) { hintp->flags &= ~USPosition; hintp->flags |= PPosition; hintp->x = values.x; } } } if (mask & CWY) { if (w->core.y == request->y) mask &= ~CWY; else { w->core.y = values.y = request->y; if (wm) { hintp->flags &= ~USPosition; hintp->flags |= PPosition; hintp->y = values.y; } } } if (mask & CWBorderWidth) { if (w->core.border_width == request->border_width) { mask &= ~CWBorderWidth; } else w->core.border_width = values.border_width = request->border_width; } if (mask & CWWidth) { if (w->core.width == request->width) mask &= ~CWWidth; else { w->core.width = values.width = request->width; if (wm) { hintp->flags &= ~USSize; hintp->flags |= PSize; hintp->width = values.width; } } } if (mask & CWHeight) { if (w->core.height == request->height) mask &= ~CWHeight; else { w->core.height = values.height = request->height; if (wm) { hintp->flags &= ~USSize; hintp->flags |= PSize; hintp->height = values.height; } } } if (mask & CWStackMode) { values.stack_mode = request->stack_mode; if (mask & CWSibling) values.sibling = XtWindow(request->sibling); } if (!XtIsRealized((Widget)w)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "Shell \"%s\" is not realized, return XtGeometryYes.\n", XtName((Widget)w))); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryYes; } request_num = NextRequest(XtDisplay(w)); CALLGEOTAT(_XtGeoTrace((Widget)w,"XConfiguring the Shell X window :\n")); CALLGEOTAT(_XtGeoTab(1)); #ifdef XT_GEO_TATTLER if (mask & CWX) { CALLGEOTAT(_XtGeoTrace((Widget)w,"x = %d\n",values.x));} if (mask & CWY) { CALLGEOTAT(_XtGeoTrace((Widget)w,"y = %d\n",values.y));} if (mask & CWWidth) { CALLGEOTAT(_XtGeoTrace((Widget)w, "width = %d\n",values.width));} if (mask & CWHeight) { CALLGEOTAT(_XtGeoTrace((Widget)w, "height = %d\n",values.height));} if (mask & CWBorderWidth) { CALLGEOTAT(_XtGeoTrace((Widget)w, "border_width = %d\n",values.border_width));} #endif CALLGEOTAT(_XtGeoTab(-1)); XConfigureWindow(XtDisplay((Widget)w), XtWindow((Widget)w), mask,&values); if (wm && !w->shell.override_redirect && mask & (CWX | CWY | CWWidth | CWHeight | CWBorderWidth)) { _SetWMSizeHints((WMShellWidget)w); } if (w->shell.override_redirect) { CALLGEOTAT(_XtGeoTrace((Widget)w,"Shell \"%s\" is override redirect, return XtGeometryYes.\n", XtName((Widget)w))); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryYes; } /* If no non-stacking bits are set, there's no way to tell whether or not this worked, so assume it did */ if (!(mask & ~(CWStackMode | CWSibling))) return XtGeometryYes; if (wm && ((WMShellWidget)w)->wm.wait_for_wm == FALSE) { /* the window manager is sick * so I will do the work and * say no so if a new WM starts up, * or the current one recovers * my size requests will be visible */ CALLGEOTAT(_XtGeoTrace((Widget)w,"Shell \"%s\" has wait_for_wm == FALSE, return XtGeometryNo.\n", XtName((Widget)w))); CALLGEOTAT(_XtGeoTab(-1)); PutBackGeometry(); return XtGeometryNo; } if (_wait_for_response(w, &event, request_num)) { /* got an event */ if (event.type == ConfigureNotify) { #define NEQ(x, msk) ((mask & msk) && (values.x != event.xconfigure.x)) if (NEQ(x, CWX) || NEQ(y, CWY) || NEQ(width, CWWidth) || NEQ(height, CWHeight) || NEQ(border_width, CWBorderWidth)) { #ifdef XT_GEO_TATTLER if (NEQ(x, CWX)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "received Configure X %d\n", event.xconfigure.x)); } if (NEQ(y, CWY)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "received Configure Y %d\n", event.xconfigure.y)); } if (NEQ(width, CWWidth)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "received Configure Width %d\n", event.xconfigure.width)); } if (NEQ(height, CWHeight)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "received Configure Height %d\n", event.xconfigure.height)); } if (NEQ(border_width, CWBorderWidth)) { CALLGEOTAT(_XtGeoTrace((Widget)w, "received Configure BorderWidth %d\n", event.xconfigure.border_width)); } #endif #undef NEQ XPutBackEvent(XtDisplay(w), &event); PutBackGeometry(); /* * We just potentially re-ordered the event queue * w.r.t. ConfigureNotifies with some trepidation. * But this is probably a Good Thing because we * will know the new true state of the world sooner * this way. */ CALLGEOTAT(_XtGeoTrace((Widget)w, "ConfigureNotify failed, return XtGeometryNo.\n")); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryNo; } else { w->core.width = event.xconfigure.width; w->core.height = event.xconfigure.height; w->core.border_width = event.xconfigure.border_width; if (event.xany.send_event || /* ICCCM compliant synth */ w->shell.client_specified & _XtShellNotReparented) { w->core.x = event.xconfigure.x; w->core.y = event.xconfigure.y; w->shell.client_specified |= _XtShellPositionValid; } else w->shell.client_specified &= ~_XtShellPositionValid; CALLGEOTAT(_XtGeoTrace((Widget)w, "ConfigureNotify succeed, return XtGeometryYes.\n")); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryYes; } } else if (!wm) { PutBackGeometry(); CALLGEOTAT(_XtGeoTrace((Widget)w, "Not wm, return XtGeometryNo.\n")); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryNo; } else XtAppWarningMsg(XtWidgetToApplicationContext((Widget)w), "internalError", "shell", XtCXtToolkitError, "Shell's window manager interaction is broken", (String *)NULL, (Cardinal *)NULL); } else if (wm) { /* no event */ ((WMShellWidget)w)->wm.wait_for_wm = FALSE; /* timed out; must be broken */ } PutBackGeometry(); #undef PutBackGeometry CALLGEOTAT(_XtGeoTrace((Widget)w, "Timeout passed?, return XtGeometryNo.\n")); CALLGEOTAT(_XtGeoTab(-1)); return XtGeometryNo; } /* ARGSUSED */ static Boolean SetValues( Widget old, Widget ref, Widget new, ArgList args, Cardinal *num_args) { ShellWidget nw = (ShellWidget) new; ShellWidget ow = (ShellWidget) old; Mask mask = 0; XSetWindowAttributes attr; if (!XtIsRealized(new)) return False; if (ow->shell.save_under != nw->shell.save_under) { mask = CWSaveUnder; attr.save_under = nw->shell.save_under; } if (ow->shell.override_redirect != nw->shell.override_redirect) { mask |= CWOverrideRedirect; attr.override_redirect = nw->shell.override_redirect; } if (mask) { XChangeWindowAttributes(XtDisplay(new),XtWindow(new), mask, &attr); if ((mask & CWOverrideRedirect) && !nw->shell.override_redirect) _popup_set_prop(nw); } if (! (ow->shell.client_specified & _XtShellPositionValid)) { Cardinal n; for (n = *num_args; n; n--, args++) { if (strcmp(XtNx, args->name) == 0) { _XtShellGetCoordinates((Widget)ow, &ow->core.x, &ow->core.y); } else if (strcmp(XtNy, args->name) == 0) { _XtShellGetCoordinates((Widget)ow, &ow->core.x, &ow->core.y); } } } return FALSE; } /* ARGSUSED */ static Boolean WMSetValues( Widget old, Widget ref, Widget new, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { WMShellWidget nwmshell = (WMShellWidget) new; WMShellWidget owmshell = (WMShellWidget) old; Boolean set_prop = XtIsRealized(new) && !nwmshell->shell.override_redirect; Boolean title_changed; EvaluateSizeHints(nwmshell); #define NEQ(f) (nwmshell->wm.size_hints.f != owmshell->wm.size_hints.f) if (set_prop && (NEQ(flags) || NEQ(min_width) || NEQ(min_height) || NEQ(max_width) || NEQ(max_height) || NEQ(width_inc) || NEQ(height_inc) || NEQ(min_aspect.x) || NEQ(min_aspect.y) || NEQ(max_aspect.x) || NEQ(max_aspect.y) #undef NEQ #define NEQ(f) (nwmshell->wm.f != owmshell->wm.f) || NEQ(base_width) || NEQ(base_height) || NEQ(win_gravity))) { _SetWMSizeHints(nwmshell); } #undef NEQ if (nwmshell->wm.title != owmshell->wm.title) { XtFree(owmshell->wm.title); if (! nwmshell->wm.title) nwmshell->wm.title = ""; nwmshell->wm.title = XtNewString(nwmshell->wm.title); title_changed = True; } else title_changed = False; if (set_prop && (title_changed || nwmshell->wm.title_encoding != owmshell->wm.title_encoding)) { XTextProperty title; Boolean copied = False; if (nwmshell->wm.title_encoding == None && XmbTextListToTextProperty(XtDisplay(new), (char**)&nwmshell->wm.title, 1, XStdICCTextStyle, &title) >= Success) { copied = True; } else { title.value = (unsigned char*)nwmshell->wm.title; title.encoding = nwmshell->wm.title_encoding ? nwmshell->wm.title_encoding : XA_STRING; title.format = 8; title.nitems = strlen(nwmshell->wm.title); } XSetWMName(XtDisplay(new), XtWindow(new), &title); if (copied) XFree((XPointer)title.value); } EvaluateWMHints(nwmshell); #define NEQ(f) (nwmshell->wm.wm_hints.f != owmshell->wm.wm_hints.f) if (set_prop && (NEQ(flags) || NEQ(input) || NEQ(initial_state) || NEQ(icon_x) || NEQ(icon_y) || NEQ(icon_pixmap) || NEQ(icon_mask) || NEQ(icon_window) || NEQ(window_group))) { XSetWMHints(XtDisplay(new), XtWindow(new), &nwmshell->wm.wm_hints); } #undef NEQ if (XtIsRealized(new) && nwmshell->wm.transient != owmshell->wm.transient) { if (nwmshell->wm.transient) { if (!XtIsTransientShell(new) && !nwmshell->shell.override_redirect && nwmshell->wm.wm_hints.window_group != XtUnspecifiedWindowGroup) XSetTransientForHint(XtDisplay(new), XtWindow(new), nwmshell->wm.wm_hints.window_group); } else XDeleteProperty(XtDisplay(new), XtWindow(new), XA_WM_TRANSIENT_FOR); } if (nwmshell->wm.client_leader != owmshell->wm.client_leader && XtWindow(new) && !nwmshell->shell.override_redirect) { Widget leader = GetClientLeader(new); if (XtWindow(leader)) XChangeProperty(XtDisplay(new), XtWindow(new), XInternAtom(XtDisplay(new), "WM_CLIENT_LEADER", False), XA_WINDOW, 32, PropModeReplace, (unsigned char *) &(leader->core.window), 1); } if (nwmshell->wm.window_role != owmshell->wm.window_role) { XtFree(owmshell->wm.window_role); if (set_prop && nwmshell->wm.window_role) { XChangeProperty(XtDisplay(new), XtWindow(new), XInternAtom(XtDisplay(new), "WM_WINDOW_ROLE", False), XA_STRING, 8, PropModeReplace, (unsigned char *)nwmshell->wm.window_role, strlen(nwmshell->wm.window_role)); } else if (XtIsRealized(new) && ! nwmshell->wm.window_role) { XDeleteProperty(XtDisplay(new), XtWindow(new), XInternAtom(XtDisplay(new), "WM_WINDOW_ROLE", False)); } } return FALSE; } /*ARGSUSED*/ static Boolean TransientSetValues( Widget oldW, Widget refW, Widget newW, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { TransientShellWidget old = (TransientShellWidget)oldW; TransientShellWidget new = (TransientShellWidget)newW; if (XtIsRealized(newW) && ((new->wm.transient && !old->wm.transient) || ((new->transient.transient_for != old->transient.transient_for) || (new->transient.transient_for == NULL && (new->wm.wm_hints.window_group != old->wm.wm_hints.window_group))))) { _SetTransientForHint(new, True); } return False; } /* ARGSUSED */ static Boolean TopLevelSetValues( Widget oldW, Widget refW, Widget newW, ArgList args, /* unused */ Cardinal *num_args) /* unused */ { TopLevelShellWidget old = (TopLevelShellWidget)oldW; TopLevelShellWidget new = (TopLevelShellWidget)newW; Boolean name_changed; if (old->topLevel.icon_name != new->topLevel.icon_name) { XtFree((XtPointer)old->topLevel.icon_name); if (! new->topLevel.icon_name) new->topLevel.icon_name = ""; new->topLevel.icon_name = XtNewString(new->topLevel.icon_name); name_changed = True; } else name_changed = False; if (XtIsRealized(newW)) { if (new->topLevel.iconic != old->topLevel.iconic) { if (new->topLevel.iconic) XIconifyWindow(XtDisplay(newW), XtWindow(newW), XScreenNumberOfScreen(XtScreen(newW)) ); else { Boolean map = new->shell.popped_up; XtPopup(newW, XtGrabNone); if (map) XMapWindow(XtDisplay(newW), XtWindow(newW)); } } if (!new->shell.override_redirect && (name_changed || (old->topLevel.icon_name_encoding != new->topLevel.icon_name_encoding))) { XTextProperty icon_name; Boolean copied = False; if (new->topLevel.icon_name_encoding == None && XmbTextListToTextProperty(XtDisplay(newW), (char**) &new->topLevel.icon_name, 1, XStdICCTextStyle, &icon_name) >= Success) { copied = True; } else { icon_name.value = (unsigned char *)new->topLevel.icon_name; icon_name.encoding = new->topLevel.icon_name_encoding ? new->topLevel.icon_name_encoding : XA_STRING; icon_name.format = 8; icon_name.nitems = strlen((char *)icon_name.value); } XSetWMIconName(XtDisplay(newW), XtWindow(newW), &icon_name); if (copied) XFree((XPointer)icon_name.value); } } else if (new->topLevel.iconic != old->topLevel.iconic) { if (new->topLevel.iconic) new->wm.wm_hints.initial_state = IconicState; } return False; } static String * NewArgv( int count, String *str) /* do not assume it's terminated by a NULL element */ { Cardinal nbytes = 0; Cardinal num = 0; String *newarray, *new; String *strarray = str; String sptr; if (count <= 0 || !str) return NULL; for (num = count; num--; str++) { nbytes += strlen(*str); nbytes++; } num = (count+1) * sizeof(String); new = newarray = (String *) __XtMalloc(num + nbytes); sptr = ((char *) new) + num; for (str = strarray; count--; str++) { *new = sptr; strcpy(*new, *str); new++; sptr = strchr(sptr, '\0'); sptr++; } *new = NULL; return newarray; } /*ARGSUSED*/ static Boolean ApplicationSetValues( Widget current, Widget request, Widget new, ArgList args, Cardinal *num_args) { ApplicationShellWidget nw = (ApplicationShellWidget) new; ApplicationShellWidget cw = (ApplicationShellWidget) current; if (cw->application.argc != nw->application.argc || cw->application.argv != nw->application.argv) { if (nw->application.argc > 0) nw->application.argv = NewArgv(nw->application.argc, nw->application.argv); if (cw->application.argc > 0) FreeStringArray(cw->application.argv); if (XtIsRealized(new) && !nw->shell.override_redirect) { if (nw->application.argc >= 0 && nw->application.argv) XSetCommand(XtDisplay(new), XtWindow(new), nw->application.argv, nw->application.argc); else XDeleteProperty(XtDisplay(new), XtWindow(new), XA_WM_COMMAND); } } return False; } /*ARGSUSED*/ static Boolean SessionSetValues( Widget current, Widget request, Widget new, ArgList args, Cardinal *num_args) { #ifndef XT_NO_SM SessionShellWidget nw = (SessionShellWidget) new; SessionShellWidget cw = (SessionShellWidget) current; unsigned long set_mask = 0UL; unsigned long unset_mask = 0UL; Boolean initialize = False; if (cw->session.session_id != nw->session.session_id) { nw->session.session_id = XtNewString(nw->session.session_id); XtFree(cw->session.session_id); } if (cw->session.clone_command != nw->session.clone_command) { if (nw->session.clone_command) { nw->session.clone_command = NewStringArray(nw->session.clone_command); set_mask |= XtCloneCommandMask; } else unset_mask |= XtCloneCommandMask; FreeStringArray(cw->session.clone_command); } if (cw->session.current_dir != nw->session.current_dir) { if (nw->session.current_dir) { nw->session.current_dir = XtNewString(nw->session.current_dir); set_mask |= XtCurrentDirectoryMask; } else unset_mask |= XtCurrentDirectoryMask; XtFree((char *) cw->session.current_dir); } if (cw->session.discard_command != nw->session.discard_command) { if (nw->session.discard_command) { nw->session.discard_command = NewStringArray(nw->session.discard_command); set_mask |= XtDiscardCommandMask; } else unset_mask |= XtDiscardCommandMask; FreeStringArray(cw->session.discard_command); } if (cw->session.environment != nw->session.environment) { if (nw->session.environment) { nw->session.environment = NewStringArray(nw->session.environment); set_mask |= XtEnvironmentMask; } else unset_mask |= XtEnvironmentMask; FreeStringArray(cw->session.environment); } if (cw->session.program_path != nw->session.program_path) { if (nw->session.program_path) { nw->session.program_path = XtNewString(nw->session.program_path); set_mask |= XtProgramMask; } else unset_mask |= XtProgramMask; XtFree((char *) cw->session.program_path); } if (cw->session.resign_command != nw->session.resign_command) { if (nw->session.resign_command) { nw->session.resign_command = NewStringArray(nw->session.resign_command); set_mask |= XtResignCommandMask; } else set_mask |= XtResignCommandMask; FreeStringArray(cw->session.resign_command); } if (cw->session.restart_command != nw->session.restart_command) { if (nw->session.restart_command) { nw->session.restart_command = NewStringArray(nw->session.restart_command); set_mask |= XtRestartCommandMask; } else unset_mask |= XtRestartCommandMask; FreeStringArray(cw->session.restart_command); } if (cw->session.restart_style != nw->session.restart_style) set_mask |= XtRestartStyleHintMask; if (cw->session.shutdown_command != nw->session.shutdown_command) { if (nw->session.shutdown_command) { nw->session.shutdown_command = NewStringArray(nw->session.shutdown_command); set_mask |= XtShutdownCommandMask; } else unset_mask |= XtShutdownCommandMask; FreeStringArray(cw->session.shutdown_command); } if ((!cw->session.join_session && nw->session.join_session) || (!cw->session.connection && nw->session.connection)) { JoinSession(nw); initialize = True; } if (nw->session.connection && (set_mask || unset_mask || initialize)) SetSessionProperties((SessionShellWidget) new, initialize, set_mask, unset_mask); if ((cw->session.join_session && !nw->session.join_session) || (cw->session.connection && !nw->session.connection)) StopManagingSession(nw, nw->session.connection); #endif /* !XT_NO_SM */ if (cw->wm.client_leader != nw->wm.client_leader || cw->session.session_id != nw->session.session_id) { Widget leader; if (cw->session.session_id) { leader = GetClientLeader(current); if (XtWindow(leader)) XDeleteProperty(XtDisplay(leader), XtWindow(leader), XInternAtom(XtDisplay(leader), "SM_CLIENT_ID", False)); } if (nw->session.session_id) { leader = GetClientLeader(new); if (XtWindow(leader)) XChangeProperty(XtDisplay(leader), XtWindow(leader), XInternAtom(XtDisplay(leader), "SM_CLIENT_ID", False), XA_STRING, 8, PropModeReplace, (unsigned char *) nw->session.session_id, strlen(nw->session.session_id)); } } return False; } void _XtShellGetCoordinates( Widget widget, Position* x, Position* y) { ShellWidget w = (ShellWidget)widget; if (XtIsRealized(widget) && !(w->shell.client_specified & _XtShellPositionValid)) { int tmpx, tmpy; Window tmpchild; (void) XTranslateCoordinates(XtDisplay(w), XtWindow(w), RootWindowOfScreen(XtScreen(w)), (int) -w->core.border_width, (int) -w->core.border_width, &tmpx, &tmpy, &tmpchild); w->core.x = tmpx; w->core.y = tmpy; w->shell.client_specified |= _XtShellPositionValid; } *x = w->core.x; *y = w->core.y; } static void GetValuesHook( Widget widget, ArgList args, Cardinal* num_args) { ShellWidget w = (ShellWidget) widget; /* x and y resource values may be invalid after a shell resize */ if (XtIsRealized(widget) && !(w->shell.client_specified & _XtShellPositionValid)) { Cardinal n; Position x, y; for (n = *num_args; n; n--, args++) { if (strcmp(XtNx, args->name) == 0) { _XtShellGetCoordinates(widget, &x, &y); _XtCopyToArg((char *) &x, &args->value, sizeof(Position)); } else if (strcmp(XtNy, args->name) == 0) { _XtShellGetCoordinates(widget, &x, &y); _XtCopyToArg((char *) &y, &args->value, sizeof(Position)); } } } } static void ApplicationShellInsertChild( Widget widget) { if (! XtIsWidget(widget) && XtIsRectObj(widget)) { XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidClass", "applicationShellInsertChild", XtCXtToolkitError, "ApplicationShell does not accept RectObj children; ignored", (String*)NULL, (Cardinal*)NULL); } else { XtWidgetProc insert_child; LOCK_PROCESS; insert_child = ((CompositeWidgetClass)applicationShellClassRec.core_class. superclass)->composite_class.insert_child; UNLOCK_PROCESS; (*insert_child) (widget); } } /************************************************************************** Session Protocol Participation *************************************************************************/ #define XtSessionCheckpoint 0 #define XtSessionInteract 1 static void CallSaveCallbacks(SessionShellWidget ); static String *EditCommand(String, String *, String *); static Boolean ExamineToken(XtPointer); static void GetIceEvent(XtPointer, int *, XtInputId *); static XtCheckpointToken GetToken(Widget, int); static void XtCallCancelCallbacks(SmcConn, SmPointer); static void XtCallDieCallbacks(SmcConn, SmPointer); static void XtCallSaveCallbacks(SmcConn, SmPointer, int, Bool, int, Bool); static void XtCallSaveCompleteCallbacks(SmcConn, SmPointer); #ifndef XT_NO_SM static void StopManagingSession( SessionShellWidget w, SmcConn connection) /* connection to close, if any */ { if (connection) SmcCloseConnection(connection, 0, NULL); if (w->session.input_id) { XtRemoveInput(w->session.input_id); w->session.input_id = 0; } w->session.connection = NULL; } #define XT_MSG_LENGTH 256 static void JoinSession( SessionShellWidget w) { IceConn ice_conn; SmcCallbacks smcb; char * sm_client_id; unsigned long mask; static char context; /* used to guarantee the connection isn't shared */ smcb.save_yourself.callback = XtCallSaveCallbacks; smcb.die.callback = XtCallDieCallbacks; smcb.save_complete.callback = XtCallSaveCompleteCallbacks; smcb.shutdown_cancelled.callback = XtCallCancelCallbacks; smcb.save_yourself.client_data = smcb.die.client_data = smcb.save_complete.client_data = smcb.shutdown_cancelled.client_data = (SmPointer) w; mask = SmcSaveYourselfProcMask | SmcDieProcMask | SmcSaveCompleteProcMask | SmcShutdownCancelledProcMask; if (w->session.connection) { SmcModifyCallbacks(w->session.connection, mask, &smcb); sm_client_id = SmcClientID(w->session.connection); } else if (getenv("SESSION_MANAGER")) { char error_msg[XT_MSG_LENGTH]; error_msg[0] = '\0'; w->session.connection = SmcOpenConnection(NULL, &context, SmProtoMajor, SmProtoMinor, mask, &smcb, w->session.session_id, &sm_client_id, XT_MSG_LENGTH, error_msg); if (error_msg[0]) { String params[1]; Cardinal num_params = 1; params[0] = error_msg; XtAppWarningMsg(XtWidgetToApplicationContext((Widget) w), "sessionManagement", "SmcOpenConnection", XtCXtToolkitError, "Tried to connect to session manager, %s", params, &num_params); } } if (w->session.connection) { if (w->session.session_id == NULL || (strcmp(w->session.session_id, sm_client_id) != 0)) { XtFree(w->session.session_id); w->session.session_id = XtNewString(sm_client_id); } free(sm_client_id); ice_conn = SmcGetIceConnection(w->session.connection); w->session.input_id = XtAppAddInput(XtWidgetToApplicationContext((Widget)w), IceConnectionNumber(ice_conn), (XtPointer) XtInputReadMask, GetIceEvent, (XtPointer) w); w->session.restart_command = EditCommand(w->session.session_id, w->session.restart_command, w->application.argv); if (! w->session.clone_command) w->session.clone_command = EditCommand(NULL, NULL, w->session.restart_command); if (! w->session.program_path) w->session.program_path = w->session.restart_command ? XtNewString(w->session.restart_command[0]) : NULL; } } #undef XT_MSG_LENGTH #endif /* !XT_NO_SM */ static String * NewStringArray(String *str) { Cardinal nbytes = 0; Cardinal num = 0; String *newarray, *new; String *strarray = str; String sptr; if (!str) return NULL; for (num = 0; *str; num++, str++) { nbytes += strlen(*str); nbytes++; } num = (num + 1) * sizeof(String); new = newarray = (String *) __XtMalloc(num + nbytes); sptr = ((char *) new) + num; for (str = strarray; *str; str++) { *new = sptr; strcpy(*new, *str); new++; sptr = strchr(sptr, '\0'); sptr++; } *new = NULL; return newarray; } static void FreeStringArray(String *str) { if (str) XtFree((char *) str); } #ifndef XT_NO_SM static SmProp * CardPack( char *name, XtPointer closure) { unsigned char *prop = (unsigned char *) closure; SmProp *p; p = (SmProp *) __XtMalloc(sizeof(SmProp) + sizeof(SmPropValue)); p->vals = (SmPropValue *) (((char *) p) + sizeof(SmProp)); p->num_vals = 1; p->type = SmCARD8; p->name = name; p->vals->length = 1; p->vals->value = (SmPointer) prop; return p; } static SmProp * ArrayPack(char *name, XtPointer closure) { String prop = *(String *) closure; SmProp *p; p = (SmProp *) __XtMalloc(sizeof(SmProp) + sizeof(SmPropValue)); p->vals = (SmPropValue *) (((char *) p) + sizeof(SmProp)); p->num_vals = 1; p->type = SmARRAY8; p->name = name; p->vals->length = strlen(prop) + 1; p->vals->value = prop; return p; } static SmProp * ListPack( char *name, XtPointer closure) { String *prop = *(String **) closure; SmProp *p; String *ptr; SmPropValue *vals; int n = 0; for (ptr = prop; *ptr; ptr++) n++; p = (SmProp*) __XtMalloc(sizeof(SmProp) + (Cardinal)(n*sizeof(SmPropValue))); p->vals = (SmPropValue *) (((char *) p) + sizeof(SmProp)); p->num_vals = n; p->type = SmLISTofARRAY8; p->name = name; for (ptr = prop, vals = p->vals; *ptr; ptr++, vals++) { vals->length = strlen(*ptr) + 1; vals->value = *ptr; } return p; } static void FreePacks( SmProp **props, int num_props) { while (--num_props >= 0) XtFree((char *) props[num_props]); } typedef SmProp* (*PackProc)(char *, XtPointer); typedef struct PropertyRec { char * name; int offset; PackProc proc; } PropertyRec, *PropertyTable; #define Offset(x) (XtOffsetOf(SessionShellRec, x)) static PropertyRec propertyTable[] = { {SmCloneCommand, Offset(session.clone_command), ListPack}, {SmCurrentDirectory, Offset(session.current_dir), ArrayPack}, {SmDiscardCommand, Offset(session.discard_command), ListPack}, {SmEnvironment, Offset(session.environment), ListPack}, {SmProgram, Offset(session.program_path), ArrayPack}, {SmResignCommand, Offset(session.resign_command), ListPack}, {SmRestartCommand, Offset(session.restart_command), ListPack}, {SmRestartStyleHint, Offset(session.restart_style), CardPack}, {SmShutdownCommand, Offset(session.shutdown_command), ListPack} }; #undef Offset #define XT_NUM_SM_PROPS 11 static void SetSessionProperties( SessionShellWidget w, Boolean initialize, unsigned long set_mask, unsigned long unset_mask) { PropertyTable p = propertyTable; int n; int num_props = 0; XtPointer *addr; unsigned long mask; SmProp *props[XT_NUM_SM_PROPS]; char *pnames[XT_NUM_SM_PROPS]; if (w->session.connection == NULL) return; if (initialize) { char nam_buf[32]; char pid[12]; String user_name; String pidp = pid; /* set all non-NULL session properties, the UserID and the ProcessID */ for (n = XtNumber(propertyTable); n; n--, p++) { addr = (XtPointer *) ((char *) w + p->offset); if (p->proc == CardPack) { if (*(unsigned char *)addr) props[num_props++] =(*(p->proc))(p->name, (XtPointer)addr); } else if (* addr) props[num_props++] = (*(p->proc))(p->name, (XtPointer)addr); } user_name = _XtGetUserName(nam_buf, sizeof nam_buf); if (user_name) props[num_props++] = ArrayPack(SmUserID, &user_name); snprintf(pid, sizeof(pid), "%ld", (long)getpid()); props[num_props++] = ArrayPack(SmProcessID, &pidp); if (num_props) { SmcSetProperties(w->session.connection, num_props, props); FreePacks(props, num_props); } return; } if (set_mask) { mask = 1L; for (n = XtNumber(propertyTable); n; n--, p++, mask <<= 1) if (mask & set_mask) { addr = (XtPointer *) ((char *) w + p->offset); props[num_props++] = (*(p->proc))(p->name, (XtPointer)addr); } SmcSetProperties(w->session.connection, num_props, props); FreePacks(props, num_props); } if (unset_mask) { mask = 1L; num_props = 0; for (n = XtNumber(propertyTable); n; n--, p++, mask <<= 1) if (mask & unset_mask) pnames[num_props++] = p->name; SmcDeleteProperties(w->session.connection, num_props, pnames); } } /*ARGSUSED*/ static void GetIceEvent( XtPointer client_data, int * source, XtInputId * id) { SessionShellWidget w = (SessionShellWidget) client_data; IceProcessMessagesStatus status; status = IceProcessMessages(SmcGetIceConnection(w->session.connection), NULL, NULL); if (status == IceProcessMessagesIOError) { StopManagingSession(w, w->session.connection); XtCallCallbackList((Widget)w, w->session.error_callbacks, (XtPointer) NULL); } } static void CleanUpSave( SessionShellWidget w) { XtSaveYourself next = w->session.save->next; XtFree((char *)w->session.save); w->session.save = next; if (w->session.save) CallSaveCallbacks(w); } static void CallSaveCallbacks( SessionShellWidget w) { XtCheckpointToken token; if (XtHasCallbacks((Widget) w, XtNsaveCallback) != XtCallbackHasSome) { /* if the application makes no attempt to save state, report failure */ SmcSaveYourselfDone(w->session.connection, False); CleanUpSave(w); } else { w->session.checkpoint_state = XtSaveActive; token = GetToken((Widget) w, XtSessionCheckpoint); _XtCallConditionalCallbackList((Widget)w, w->session.save_callbacks, (XtPointer)token, ExamineToken); XtSessionReturnToken(token); } } /*ARGSUSED*/ static void XtCallSaveCallbacks( SmcConn connection, /* unused */ SmPointer client_data, int save_type, Bool shutdown, int interact, Bool fast) { SessionShellWidget w = (SessionShellWidget) client_data; XtSaveYourself save; XtSaveYourself prev; save = XtNew(XtSaveYourselfRec); save->next = NULL; save->save_type = save_type; save->interact_style = interact; save->shutdown = shutdown; save->fast = fast; save->cancel_shutdown = False; save->phase = 1; save->interact_dialog_type = SmDialogNormal; save->request_cancel = save->request_next_phase = False; save->save_success = True; save->save_tokens = save->interact_tokens = 0; prev = (XtSaveYourself) &w->session.save; while (prev->next) prev = prev->next; prev->next = save; if (w->session.checkpoint_state == XtSaveInactive) CallSaveCallbacks(w); } static void XtInteractPermission( SmcConn connection, SmPointer data) { Widget w = (Widget) data; SessionShellWidget sw = (SessionShellWidget) data; XtCheckpointToken token; XtCallbackProc callback; XtPointer client_data; _XtPeekCallback(w, sw->session.interact_callbacks, &callback, &client_data); if (callback) { sw->session.checkpoint_state = XtInteractActive; token = GetToken(w, XtSessionInteract); XtRemoveCallback(w, XtNinteractCallback, callback, client_data); (*callback)(w, client_data, (XtPointer) token); } else if (! sw->session.save->cancel_shutdown) { SmcInteractDone(connection, False); } } /*ARGSUSED*/ static void XtCallSaveCompleteCallbacks( SmcConn connection, SmPointer client_data) { SessionShellWidget w = (SessionShellWidget) client_data; XtCallCallbackList((Widget)w, w->session.save_complete_callbacks, (XtPointer) NULL); } /*ARGSUSED*/ static void XtCallNextPhaseCallbacks( SmcConn connection, /* unused */ SmPointer client_data) { SessionShellWidget w = (SessionShellWidget) client_data; w->session.save->phase = 2; CallSaveCallbacks(w); } /*ARGSUSED*/ static void XtCallDieCallbacks( SmcConn connection, /* unused */ SmPointer client_data) { SessionShellWidget w = (SessionShellWidget) client_data; StopManagingSession(w, w->session.connection); XtCallCallbackList((Widget)w, w->session.die_callbacks, (XtPointer) NULL); } /*ARGSUSED*/ static void XtCallCancelCallbacks( SmcConn connection, /* unused */ SmPointer client_data) { SessionShellWidget w = (SessionShellWidget) client_data; Boolean call_interacts = False; if (w->session.checkpoint_state != XtSaveInactive) { w->session.save->cancel_shutdown = True; call_interacts = (w->session.save->interact_style != SmInteractStyleNone); } XtCallCallbackList((Widget)w, w->session.cancel_callbacks, (XtPointer) NULL); if (call_interacts) { w->session.save->interact_style = SmInteractStyleNone; XtInteractPermission(w->session.connection, (SmPointer) w); } if (w->session.checkpoint_state != XtSaveInactive) { if (w->session.save->save_tokens == 0 && w->session.checkpoint_state == XtSaveActive) { w->session.checkpoint_state = XtSaveInactive; SmcSaveYourselfDone(w->session.connection, w->session.save->save_success); CleanUpSave(w); } } } static XtCheckpointToken GetToken( Widget widget, int type) { SessionShellWidget w = (SessionShellWidget) widget; XtCheckpointToken token; XtSaveYourself save = w->session.save; if (type == XtSessionCheckpoint) w->session.save->save_tokens++; else if (type == XtSessionInteract) w->session.save->interact_tokens++; else return (XtCheckpointToken) NULL; token = (XtCheckpointToken) __XtMalloc(sizeof(XtCheckpointTokenRec)); token->save_type = save->save_type; token->interact_style = save->interact_style; token->shutdown = save->shutdown; token->fast = save->fast; token->cancel_shutdown = save->cancel_shutdown; token->phase = save->phase; token->interact_dialog_type = save->interact_dialog_type; token->request_cancel = save->request_cancel; token->request_next_phase = save->request_next_phase; token->save_success = save->save_success; token->type = type; token->widget = widget; return token; } XtCheckpointToken XtSessionGetToken(Widget widget) { SessionShellWidget w = (SessionShellWidget) widget; XtCheckpointToken token = NULL; WIDGET_TO_APPCON(widget); LOCK_APP(app); if (w->session.checkpoint_state) token = GetToken(widget, XtSessionCheckpoint); UNLOCK_APP(app); return token; } static Boolean ExamineToken( XtPointer call_data) { XtCheckpointToken token = (XtCheckpointToken) call_data; SessionShellWidget w = (SessionShellWidget) token->widget; if (token->interact_dialog_type == SmDialogError) w->session.save->interact_dialog_type = SmDialogError; if (token->request_next_phase) w->session.save->request_next_phase = True; if (! token->save_success) w->session.save->save_success = False; token->interact_dialog_type = w->session.save->interact_dialog_type; token->request_next_phase = w->session.save->request_next_phase; token->save_success = w->session.save->save_success; token->cancel_shutdown = w->session.save->cancel_shutdown; return True; } void XtSessionReturnToken(XtCheckpointToken token) { SessionShellWidget w = (SessionShellWidget) token->widget; Boolean has_some; Boolean phase_done; XtCallbackProc callback; XtPointer client_data; WIDGET_TO_APPCON((Widget)w); LOCK_APP(app); has_some = (XtHasCallbacks(token->widget, XtNinteractCallback) == XtCallbackHasSome); (void) ExamineToken((XtPointer) token); if (token->type == XtSessionCheckpoint) { w->session.save->save_tokens--; if (has_some && w->session.checkpoint_state == XtSaveActive) { w->session.checkpoint_state = XtInteractPending; SmcInteractRequest(w->session.connection, w->session.save->interact_dialog_type, XtInteractPermission, (SmPointer) w); } XtFree((char*) token); } else { if (token->request_cancel) w->session.save->request_cancel = True; token->request_cancel = w->session.save->request_cancel; if (has_some) { _XtPeekCallback((Widget)w, w->session.interact_callbacks, &callback, &client_data); XtRemoveCallback((Widget)w, XtNinteractCallback, callback, client_data); (*callback)((Widget)w, client_data, (XtPointer)token); } else { w->session.save->interact_tokens--; if (w->session.save->interact_tokens == 0) { w->session.checkpoint_state = XtSaveActive; if (! w->session.save->cancel_shutdown) SmcInteractDone(w->session.connection, w->session.save->request_cancel); } XtFree((char *) token); } } phase_done = (w->session.save->save_tokens == 0 && w->session.checkpoint_state == XtSaveActive); if (phase_done) { if (w->session.save->request_next_phase && w->session.save->phase == 1) { SmcRequestSaveYourselfPhase2(w->session.connection, XtCallNextPhaseCallbacks, (SmPointer)w); } else { w->session.checkpoint_state = XtSaveInactive; SmcSaveYourselfDone(w->session.connection, w->session.save->save_success); CleanUpSave(w); } } UNLOCK_APP(app); } static Boolean IsInArray( String str, String *sarray) { if (str == NULL || sarray == NULL) return False; for (; *sarray; sarray++) { if (strcmp(*sarray, str) == 0) return True; } return False; } static String* EditCommand( String str, /* if not NULL, the sm_client_id */ String *src1, /* first choice */ String *src2) /* alternate */ { Boolean have; Boolean want; int count; String *sarray; String *s; String *new; want = (str != NULL); sarray = (src1 ? src1 : src2); if (! sarray) return NULL; have = IsInArray("-xtsessionID", sarray); if ((want && have) || (!want && !have)) { if (sarray == src1) return src1; else return NewStringArray(sarray); } count = 0; for (s = sarray; *s; s++) count++; if (want) { s = new = (String *) __XtMalloc((Cardinal)(count+3) * sizeof(String*)); *s = *sarray; s++; sarray++; *s = "-xtsessionID"; s++; *s = str; s++; for (; --count > 0; s++, sarray++) *s = *sarray; *s = (String) NULL; } else { if (count < 3) return NewStringArray(sarray); s = new = (String *) __XtMalloc((Cardinal)(count-1) * sizeof(String*)); for (; --count >= 0; sarray++) { if (strcmp(*sarray, "-xtsessionID") == 0) { sarray++; count--; } else { *s = *sarray; s++; } } *s = (String) NULL; } s = new; new = NewStringArray(new); XtFree((char *)s); return new; } #endif /* !XT_NO_SM */ onnection, num_props, pnames); } } /*ARGSUSED*/ static void GetIceEvent( XtPointer client_data, int * source, XtInputIlibXt-1.1.5/src/TMgrab.c000064401431060000012000000250421252061032400151660ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /*LINTLIBRARY*/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" typedef struct _GrabActionRec { struct _GrabActionRec* next; XtActionProc action_proc; Boolean owner_events; unsigned int event_mask; int pointer_mode, keyboard_mode; } GrabActionRec; static GrabActionRec *grabActionList = NULL; static void GrabAllCorrectKeys( Widget widget, TMTypeMatch typeMatch, TMModifierMatch modMatch, GrabActionRec* grabP) { Display *dpy = XtDisplay(widget); KeyCode *keycodes, *keycodeP; Cardinal keycount; Modifiers careOn = 0; Modifiers careMask = 0; if (modMatch->lateModifiers) { Boolean resolved; resolved = _XtComputeLateBindings(dpy, modMatch->lateModifiers, &careOn, &careMask); if (!resolved) return; } careOn |= modMatch->modifiers; careMask |= modMatch->modifierMask; XtKeysymToKeycodeList( dpy, (KeySym)typeMatch->eventCode, &keycodes, &keycount ); if (keycount == 0) return; for (keycodeP = keycodes; keycount--; keycodeP++) { if (modMatch->standard) { /* find standard modifiers that produce this keysym */ KeySym keysym; int std_mods, least_mod; Modifiers modifiers_return; XtTranslateKeycode( dpy, *keycodeP, (Modifiers)0, &modifiers_return, &keysym ); if (careOn & modifiers_return) return; if (keysym == typeMatch->eventCode) { XtGrabKey(widget, *keycodeP, careOn, grabP->owner_events, grabP->pointer_mode, grabP->keyboard_mode ); /* continue; */ /* grab all modifier combinations */ } least_mod = modifiers_return & (~modifiers_return + 1); for (std_mods = modifiers_return; std_mods >= least_mod; std_mods--) { Modifiers dummy; /* check all useful combinations of modifier bits */ if (modifiers_return & std_mods && !(~modifiers_return & std_mods)) { XtTranslateKeycode( dpy, *keycodeP, (Modifiers)std_mods, &dummy, &keysym ); if (keysym == typeMatch->eventCode) { XtGrabKey(widget, *keycodeP, careOn | (Modifiers) std_mods, grabP->owner_events, grabP->pointer_mode, grabP->keyboard_mode ); /* break; */ /* grab all modifier combinations */ } } } } else /* !event->standard */ { XtGrabKey(widget, *keycodeP, careOn, grabP->owner_events, grabP->pointer_mode, grabP->keyboard_mode ); } } XtFree((char *)keycodes); } typedef struct { TMShortCard count; Widget widget; GrabActionRec *grabP; }DoGrabRec; static Boolean DoGrab( StatePtr state, XtPointer data) { DoGrabRec *doGrabP = (DoGrabRec *)data; GrabActionRec* grabP = doGrabP->grabP; Widget widget = doGrabP->widget; TMShortCard count = doGrabP->count; TMShortCard typeIndex = state->typeIndex; TMShortCard modIndex = state->modIndex; ActionRec *action; TMTypeMatch typeMatch; TMModifierMatch modMatch; Modifiers careOn = 0; Modifiers careMask = 0; Boolean resolved; LOCK_PROCESS; typeMatch = TMGetTypeMatch(typeIndex); modMatch = TMGetModifierMatch(modIndex); for (action = state->actions; action; action = action->next) if (count == action->idx) break; if (!action) { UNLOCK_PROCESS; return False; } switch (typeMatch->eventType) { case ButtonPress: case ButtonRelease: if (modMatch->lateModifiers) { resolved = _XtComputeLateBindings(XtDisplay(widget), modMatch->lateModifiers, &careOn, &careMask); if (!resolved) break; } careOn |= modMatch->modifiers; XtGrabButton( widget, (unsigned) typeMatch->eventCode, careOn, grabP->owner_events, grabP->event_mask, grabP->pointer_mode, grabP->keyboard_mode, None, None ); break; case KeyPress: case KeyRelease: GrabAllCorrectKeys(widget, typeMatch, modMatch, grabP); break; case EnterNotify: break; default: XtAppWarningMsg(XtWidgetToApplicationContext(widget), "invalidPopup","unsupportedOperation",XtCXtToolkitError, "Pop-up menu creation is only supported on Button, Key or EnterNotify events.", (String *)NULL, (Cardinal *)NULL); break; } UNLOCK_PROCESS; return False; } void _XtRegisterGrabs( Widget widget) { XtTranslations xlations = widget->core.tm.translations; TMComplexStateTree *stateTreePtr; unsigned int count; TMShortCard i; TMBindData bindData = (TMBindData) widget->core.tm.proc_table; XtActionProc *procs; if (! XtIsRealized(widget) || widget->core.being_destroyed) return; /* walk the widget instance action bindings table looking for */ /* actions registered as grab actions. */ /* when you find one, do a grab on the triggering event */ if (xlations == NULL) return; stateTreePtr = (TMComplexStateTree *) xlations->stateTreeTbl; if (*stateTreePtr == NULL) return; for (i = 0; i < xlations->numStateTrees; i++, stateTreePtr++) { if (bindData->simple.isComplex) procs = TMGetComplexBindEntry(bindData, i)->procs; else procs = TMGetSimpleBindEntry(bindData, i)->procs; for (count=0; count < (*stateTreePtr)->numQuarks; count++) { GrabActionRec* grabP; DoGrabRec doGrab; LOCK_PROCESS; for (grabP = grabActionList; grabP != NULL; grabP = grabP->next) { if (grabP->action_proc == procs[count]) { /* we've found a "grabber" in the action table. Find the * states that call this action. Note that if there is * more than one "grabber" in the action table, we end * up searching all of the states multiple times. */ doGrab.widget = widget; doGrab.grabP = grabP; doGrab.count = count; _XtTraverseStateTree((TMStateTree)*stateTreePtr, DoGrab, (XtPointer)&doGrab); } } UNLOCK_PROCESS; } } } void XtRegisterGrabAction( XtActionProc action_proc, _XtBoolean owner_events, unsigned int event_mask, int pointer_mode, int keyboard_mode) { GrabActionRec* actionP; LOCK_PROCESS; for (actionP = grabActionList; actionP != NULL; actionP = actionP->next) { if (actionP->action_proc == action_proc) break; } if (actionP == NULL) { actionP = XtNew(GrabActionRec); actionP->action_proc = action_proc; actionP->next = grabActionList; grabActionList = actionP; } #ifdef DEBUG else if ( actionP->owner_events != owner_events || actionP->event_mask != event_mask || actionP->pointer_mode != pointer_mode || actionP->keyboard_mode != keyboard_mode) { Cardinal n = 0; XtWarningMsg( "argsReplaced", "xtRegisterGrabAction", XtCXtToolkitError, "XtRegisterGrabAction called on same proc with different args", NULL, &n); } #endif /*DEBUG*/ actionP->owner_events = owner_events; actionP->event_mask = event_mask; actionP->pointer_mode = pointer_mode; actionP->keyboard_mode = keyboard_mode; UNLOCK_PROCESS; } /*ARGSUSED*/ void _XtGrabInitialize( XtAppContext app) { LOCK_PROCESS; if (grabActionList == NULL) XtRegisterGrabAction( XtMenuPopupAction, True, (unsigned)(ButtonPressMask | ButtonReleaseMask), GrabModeAsync, GrabModeAsync ); UNLOCK_PROCESS; } odifiers modifiers_return; XtTranslateKeycode( dpy, *keycodeP, (Modifiers)0, &modifiers_return, &keysym ); if (careOn & modifiers_return) return; if (keysym == typeMatch->eventCode) { XtGrabKey(widget, *keycodeP, careOn, grabP->owner_events, grabP->pointer_mode, grabP->keyboard_mode ); /* continue; */ /* grab all modifier combinations */ } least_mod = modifiers_return & (~modifiers_return + 1); for (std_mods libXt-1.1.5/src/EventUtil.c000064401431060000012000000157321252061032400157360ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /******************************************************** Copyright 1988 by Hewlett-Packard Company Copyright 1987, 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 names of Hewlett-Packard or Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ /* Copyright 1987, 1988, 1989, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "PassivGraI.h" #include "StringDefs.h" #include "EventI.h" static XContext perWidgetInputContext = 0; void _XtFreePerWidgetInput( Widget w, XtPerWidgetInput pwi) { LOCK_PROCESS; XDeleteContext(XtDisplay(w), (Window)w, perWidgetInputContext); XtFree((char *)pwi); UNLOCK_PROCESS; } /* * This routine gets the passive list associated with the widget * from the context manager. */ XtPerWidgetInput _XtGetPerWidgetInput( Widget widget, _XtBoolean create) { XtPerWidgetInput pwi = NULL; Display *dpy = widget->core.screen->display; LOCK_PROCESS; if (! perWidgetInputContext) perWidgetInputContext = XUniqueContext(); if (XFindContext(dpy, (Window)widget, perWidgetInputContext, (XPointer *)&pwi) && create) { pwi = (XtPerWidgetInput) __XtMalloc((unsigned) sizeof(XtPerWidgetInputRec)); pwi->focusKid = NULL; pwi->queryEventDescendant = NULL; pwi->focalPoint = XtUnrelated; pwi->keyList = pwi->ptrList = NULL; pwi->haveFocus = pwi->map_handler_added = pwi->realize_handler_added = pwi->active_handler_added = FALSE; XtAddCallback(widget, XtNdestroyCallback, _XtDestroyServerGrabs, (XtPointer)pwi); (void) XSaveContext(dpy, (Window)widget, perWidgetInputContext, (char *) pwi); } UNLOCK_PROCESS; return pwi; } void _XtFillAncestorList( Widget **listPtr, int *maxElemsPtr, int *numElemsPtr, Widget start, Widget breakWidget) { #define CACHESIZE 16 Cardinal i; Widget w; Widget *trace = *listPtr; /* First time in, allocate the ancestor list */ if (trace == NULL) { trace = (Widget *) __XtMalloc(CACHESIZE * sizeof(Widget)); *maxElemsPtr = CACHESIZE; } /* First fill in the ancestor list */ trace[0] = start; for (i = 1, w = XtParent(start); w != NULL && !XtIsShell(trace[i-1]) && trace[i-1] != breakWidget; w = XtParent(w), i++) { if (i == (Cardinal) *maxElemsPtr) { /* This should rarely happen, but if it does it'll probably happen again, so grow the ancestor list */ *maxElemsPtr += CACHESIZE; trace = (Widget *) XtRealloc((char*)trace, sizeof(Widget) * (*maxElemsPtr)); } trace[i] = w; } *listPtr = trace; *numElemsPtr = i; #undef CACHESIZE } Widget _XtFindRemapWidget( XEvent *event, Widget widget, EventMask mask, XtPerDisplayInput pdi) { Widget dspWidget = widget; if (!pdi->traceDepth || !(widget == pdi->trace[0])) { _XtFillAncestorList(&pdi->trace, &pdi->traceMax, &pdi->traceDepth, widget, NULL); pdi->focusWidget = NULL; /* invalidate the focus cache */ } if (mask & (KeyPressMask | KeyReleaseMask)) dspWidget = _XtProcessKeyboardEvent((XKeyEvent*)event, widget, pdi); else if (mask &(ButtonPressMask | ButtonReleaseMask)) dspWidget = _XtProcessPointerEvent((XButtonEvent*)event, widget,pdi); return dspWidget; } void _XtUngrabBadGrabs( XEvent *event, Widget widget, EventMask mask, XtPerDisplayInput pdi) { XKeyEvent * ke = (XKeyEvent *) event; if (mask & (KeyPressMask | KeyReleaseMask)) { if (IsServerGrab(pdi->keyboard.grabType) && !_XtOnGrabList(pdi->keyboard.grab.widget, pdi->grabList)) XtUngrabKeyboard(widget, ke->time); } else { if (IsServerGrab(pdi->pointer.grabType) && !_XtOnGrabList(pdi->pointer.grab.widget, pdi->grabList)) XtUngrabPointer(widget, ke->time); } } ppear in all copies and that both thatlibXt-1.1.5/src/Popup.c000064401431060000012000000144231252061032400151160ustar00alancstaff00002660200006/*********************************************************** Copyright 1987, 1988, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "ShellP.h" void _XtPopup( Widget widget, XtGrabKind grab_kind, _XtBoolean spring_loaded) { register ShellWidget shell_widget = (ShellWidget) widget; if (! XtIsShell(widget)) { XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidClass","xtPopup",XtCXtToolkitError, "XtPopup requires a subclass of shellWidgetClass", (String *)NULL, (Cardinal *)NULL); } if (! shell_widget->shell.popped_up) { XtGrabKind call_data = grab_kind; XtCallCallbacks(widget, XtNpopupCallback, (XtPointer)&call_data); shell_widget->shell.popped_up = TRUE; shell_widget->shell.grab_kind = grab_kind; shell_widget->shell.spring_loaded = spring_loaded; if (shell_widget->shell.create_popup_child_proc != NULL) { (*(shell_widget->shell.create_popup_child_proc))(widget); } if (grab_kind == XtGrabExclusive) { XtAddGrab(widget, TRUE, spring_loaded); } else if (grab_kind == XtGrabNonexclusive) { XtAddGrab(widget, FALSE, spring_loaded); } XtRealizeWidget(widget); XMapRaised(XtDisplay(widget), XtWindow(widget)); } else XRaiseWindow(XtDisplay(widget), XtWindow(widget)); } /* _XtPopup */ void XtPopup (Widget widget, XtGrabKind grab_kind) { Widget hookobj; switch (grab_kind) { case XtGrabNone: case XtGrabExclusive: case XtGrabNonexclusive: break; default: XtAppWarningMsg( XtWidgetToApplicationContext(widget), "invalidGrabKind","xtPopup",XtCXtToolkitError, "grab kind argument has invalid value; XtGrabNone assumed", (String *)NULL, (Cardinal *)NULL); grab_kind = XtGrabNone; } _XtPopup(widget, grab_kind, FALSE); hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHpopup; call_data.widget = widget; call_data.event_data = (XtPointer)grab_kind; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } } /* XtPopup */ void XtPopupSpringLoaded ( Widget widget) { Widget hookobj; _XtPopup(widget, XtGrabExclusive, True); hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHpopupSpringLoaded; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } } void XtPopdown( Widget widget) { /* Unmap a shell widget if it is mapped, and remove from grab list */ Widget hookobj; ShellWidget shell_widget = (ShellWidget) widget; XtGrabKind grab_kind; if (! XtIsShell(widget)) { XtAppErrorMsg(XtWidgetToApplicationContext(widget), "invalidClass","xtPopdown",XtCXtToolkitError, "XtPopdown requires a subclass of shellWidgetClass", (String *)NULL, (Cardinal *)NULL); } #ifndef X_NO_XT_POPDOWN_CONFORMANCE if (!shell_widget->shell.popped_up) return; #endif grab_kind = shell_widget->shell.grab_kind; XWithdrawWindow(XtDisplay(widget), XtWindow(widget), XScreenNumberOfScreen(XtScreen(widget))); if (grab_kind != XtGrabNone) XtRemoveGrab(widget); shell_widget->shell.popped_up = FALSE; XtCallCallbacks(widget, XtNpopdownCallback, (XtPointer)&grab_kind); hookobj = XtHooksOfDisplay(XtDisplay(widget)); if (XtHasCallbacks(hookobj, XtNchangeHook) == XtCallbackHasSome) { XtChangeHookDataRec call_data; call_data.type = XtHpopdown; call_data.widget = widget; XtCallCallbackList(hookobj, ((HookObject)hookobj)->hooks.changehook_callbacks, (XtPointer)&call_data); } } /* XtPopdown */ /* ARGSUSED */ void XtCallbackPopdown( Widget widget, XtPointer closure, XtPointer call_data) { register XtPopdownID id = (XtPopdownID) closure; XtPopdown(id->shell_widget); if (id->enable_widget != NULL) { XtSetSensitive(id->enable_widget, TRUE); } } /* XtCallbackPopdown */ libXt-1.1.5/src/ResConfig.c000064401431060000012000000632511252061032400156750ustar00alancstaff00002660200006/* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /***************************************************************** (C) COPYRIGHT International Business Machines Corp. 1992,1997 All Rights Reserved Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE IBM CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of the IBM Corporation shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the IBM Corporation. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Intrinsic.h" #include "IntrinsicI.h" #include "Core.h" #include "CoreP.h" #include "ShellP.h" #include "StringDefs.h" #include "ResConfigP.h" #include #include #include #define MAX_BUFFER 512 static void _search_child(Widget, char *, char *, char *, char *, char, char *); static void _set_and_search(Widget, char *, char *, char *, char *, char , char *); static int _locate_children(Widget, Widget **); /* * NAME: _set_resource_values * * FUNCTION: * This function sets the value on the widget. It must first determine * if the last part is a valid resource for that widget. (eg. * labelString is a valid resource for label but not for bulletin board) * It must also add the resource to the application's resource database * and then query it out using specific resource strings that it builds * from the widget information. This ensures that a customizing tool * on-the-fly paradigm is followed: an application that is * instantaneously updated should look the same as one that is restarted * and uses the .Xdefaults file. * * PARAMETERS: * w the widget to match * resource the resource string to be matched * value the value to be set * last_part the last resource part (e.g. *background) * * RETURN VALUES: void * * ERRORS: none */ static void _set_resource_values ( Widget w, char *resource, char *value, char *last_part) { XrmDatabase db = NULL; char *resource_name = NULL; char *resource_class = NULL; char *return_type; XrmValue return_value; char *resource_value; Widget cur = w; char *temp; XtResourceList resources_return = NULL; Cardinal num_resources_return = 0; Cardinal res_index; Boolean found_resource = False; Display *dpy; XrmDatabase tmp_db; if (!XtIsWidget (w)) dpy = XtDisplay (w->core.parent); else dpy = XtDisplay (w); tmp_db = XtDatabase(dpy); /* * get a list of all the valid resources for this widget */ XtGetResourceList (w->core.widget_class, &resources_return, &num_resources_return); /* * try to match the last_part of the resource string with * a resource in this resource list */ for (res_index=0; res_indexcore.name, resource_name); XtFree (resource_name); } else if (!XtIsWidget (cur) || !cur->core.name) { cur = XtParent(cur); continue; } else { XtAsprintf (&temp, ".%s", cur->core.name); } resource_name = temp; /* * create resource class string */ if ((XtIsTopLevelShell (cur)) && (XtParent (cur) == NULL)) { ApplicationShellWidget top = (ApplicationShellWidget) (cur); if (resource_class) { XtAsprintf (&temp, ".%s%s", top->application.class, resource_class); } else { XtAsprintf (&temp, ".%s", top->application.class); } } else { if (resource_class) { XtAsprintf (&temp, ".%s%s", cur->core.widget_class->core_class.class_name, resource_class); } else { XtAsprintf (&temp, ".%s", cur->core.widget_class->core_class.class_name); } } if (resource_class != NULL) XtFree (resource_class); resource_class = temp; cur = XtParent(cur); } /* * add the resource name to the end of the resource name string */ XtAsprintf (&temp, "%s.%s", resource_name, resources_return[res_index].resource_name); if (resource_name != NULL) XtFree (resource_name); resource_name = temp; /* * add the resource class to the end of the resource class string */ XtAsprintf (&temp, "%s.%s", resource_class, resources_return[res_index].resource_class); if (resource_class != NULL) XtFree (resource_class); resource_class = temp; #ifdef DEBUG fprintf (stderr, "resource_name = %s\n", resource_name); fprintf (stderr, "resource_class = %s\n", resource_class); #endif /* * put the resource and its value in a resource database and * then query it back out again using the specific name and * class resource strings that were built above. This is * necessary to maintain a precedence similar to the .Xdefaults * file */ XrmPutStringResource (&db, resource, value); XrmMergeDatabases (db, &tmp_db); XrmGetResource (tmp_db, resource_name, resource_class, &return_type, &return_value); if (return_type) resource_value = XtNewString (return_value.addr); else resource_value = XtNewString (value); #ifdef DEBUG fprintf (stderr, "Apply:\n\twidget = %s\n\tlast_part = %s\n\tvalue = %s\n", (w->core.name == NULL) ? "NULL" : w->core.name, resources_return[res_index].resource_name, resource_value); #endif /* * use XtVaSetValues with XtVaTypedArg to convert the value of * type String the the same type as the resource (last_part). * Then set the value. */ XtVaSetValues (w, XtVaTypedArg, resources_return[res_index].resource_name, XtRString, resource_value, strlen (resource_value) + 1, NULL); XtFree ((char *) resources_return); XtFree (resource_name); XtFree (resource_class); XtFree (resource_value); } /* * NAME: _apply_values_to_children * * FUNCTION: * Once the resource string matches the value must be applied to * all children if applicable. (eg. App*Form.background must apply * background to all children of the Form widget) * * PARAMETERS: * w the widget to match * remainder the part of the resource string left over * resource the resource string to be matched * value the value to be set * last_token the last * or . before the final resoruce part * last_part the last resource part (e.g. *background) * * RETURN VALUES: void * * ERRORS: none */ static void _apply_values_to_children ( Widget w, char *remainder, char *resource, char *value, char last_token, char *last_part) { int i; int num_children; Widget *children; /* * Recursively search through the children */ num_children = _locate_children (w, &children); for (i=0; icore.name, w->core.name); else fprintf (stderr,"searching child (NULL) of parent %s\n", w->core.name); if (!XtIsWidget (children[i])) fprintf (stderr, "children[%d] is NOT a widget\n", i); if (!XtIsWidget (w)) fprintf (stderr, "w is NOT a widget\n"); #endif _set_resource_values (children[i], resource, value, last_part); _apply_values_to_children (children[i], remainder, resource, value, last_token, last_part); } XtFree ((char *)children); } /* * NAME: _search_child * * FUNCTION: * descends through each child of the tree * * PARAMETERS: * w the widget whose children are to be searched * indx index into the resource string * remainder the remaining part of the resource string * resource the resource string to be matched * value the value to be applied * last_token the last * or . before the final resoruce part * last_part the last resource part (e.g. *background) * * RETURN VALUES: none * * ERRORS: none */ static void _search_child ( Widget w, char *indx, char *remainder, char *resource, char *value, char last_token, char *last_part) { int i; int num_children; Widget *children; /* * Recursively search through the children */ num_children = _locate_children (w, &children); for (i=0; i= MAX_BUFFER - 1) break; } *buf_ptr = '\0'; *part = XtNewString (buffer); /* return a new string to part */ if (strcmp (*indx, "") == 0) *indx = NULL; return (token); /* return the token */ } /* * NAME: _match_resource_to_widget * * FUNCTION: * This function matches the resource part to the widget name or class * * PARAMETERS: * w the widget to match * part the parsed off part of the resource string * * RETURN VALUES: * Boolean true if a match occurs * * ERRORS: none */ static Boolean _match_resource_to_widget ( Widget w, char *part) { /* * Match any widget at this level if the ? is used */ if (strcmp (part, "?") == 0) return (True); /* * if the object is really a widget then its name can be matched * otherwise only use its class. Note that if you try to reference * a widget name when the object is not a widget, you may get a * core dump from an invalid pointer reference. */ if (XtIsWidget (w)) { if ((strcmp (w->core.name, part) == 0) || (strcmp (w->core.widget_class->core_class.class_name, part) == 0)) return (True); else return (False); } else { if ((strcmp (w->core.widget_class->core_class.class_name, part) == 0)) return (True); else return (False); } } /* * NAME: _set_and_search * * FUNCTION: * The algorithm to search the widget tree and apply a resource string * * PARAMETERS: * w the widget to match * indx the index into the resource string * remainder the part of the resource string left over * resource the resource string to be matched * value the value to be set * last_token the last * or . before the final resoruce part * last_part the last resource part (e.g. *background) * * RETURN VALUES: none * * ERRORS: none * * ALGORITHM: * loop (look at all children) * if (resource segment and current widget match) * if '.' * if at end of resource string * set values ( .=over all children * *=this widget only) * else * descend the widget tree * and parse off resource segment * exit the loop * if '*' * if at end of resource string * set values ( .=over all children * *=this widget only) * descend and parse * else * if '.' * continue looping * if '*' * descend but don't parse * continue looping * end loop * * NOTE: the _set_resource_values routine will not allow a value to be * set on a resource against the rules of the resource database manager */ static void _set_and_search ( Widget w, char *indx, char *remainder, char *resource, char *value, char last_token, char *last_part) { char *part; char *local_index = indx; char token; /* * parse off one part, return token and the new index */ token = _get_part (remainder, &local_index, &part); if (_match_resource_to_widget (w, part)) { if (token == '.') { if (local_index == NULL) { if (last_token == '.') { _set_resource_values (w, resource, value, last_part); } else if (last_token == '*') { _set_resource_values (w, resource, value, last_part); _apply_values_to_children (w, remainder, resource, value, last_token, last_part); } } else _search_child (w, local_index, remainder, resource, value, last_token, last_part); return; } if (token == '*') { if (local_index == NULL) { if (last_token == '.') { _set_resource_values (w, resource, value, last_part); } else if (last_token == '*') { _set_resource_values (w, resource, value, last_part); _apply_values_to_children ( w, remainder, resource, value, last_token, last_part); } } else _search_child (w, local_index, remainder, resource, value, last_token, last_part); } } else {/* if the widget name and class don't match the part */ /* if (token == '.') just continue looping */ if (token == '*') { _search_child (w, indx, remainder, resource, value, last_token, last_part); } } XtFree (part); } /* * NAME: _get_last_part * * FUNCTION: * This routine will parse off the last segment of a resource string * and its token and return them. the remainder of resource is also * returned. strcoll is used to guarantee no problems with * international strings. * * PARAMETERS: * remainder the part of the resource string left over * part the parsed off part of the resource string * * RETURN VALUES: * char the token (* or . or ?) preceding the resource part * remainder the part of the resource string left over * part the parsed off part of the resource string * * ERRORS: none */ static char _get_last_part ( char *remainder, char **part) { char *loose, *tight; loose = strrchr (remainder, '*'); tight = strrchr (remainder, '.'); if ((loose == NULL) && (tight == NULL)) { *part = XtNewString (remainder); return ('.'); } if ((loose == NULL) || (tight && (strcoll (loose, tight) < 0))) { *tight++ = '\0'; /* shorten the remainder string */ *part = XtNewString (tight); return ('.'); } if ((tight == NULL) || (loose && (strcoll (tight, loose) < 0))) { *loose++ = '\0'; *part = XtNewString (loose); return ('*'); } *part = NULL; return ('0'); /* error - return 0 */ } /* * NAME: _search_widget_tree * * FUNCTION: * This function tries to match a resource string to the widgets * it applies to. The functions it invokes to do this then set * the value for that resource to each widget. * * The resource string has to be parsed into the following format: * resource = App*Form*button1.background * remainder = *Form*button1 * last_part = background last_token = . * As the widget tree is recursively descended, these variables are * passed. The remainder is parsed at each level in the widget * tree as the _set_and_search function attempts to match * the resource part (eg. part = Form token = *) to a widget. When * the entire resource string has been matched, the _set_resource_values * functions is called to apply the value to the widget or widgets. * * PARAMETERS: * w a widget from whose toplevel shell ancestor * the search will start * resource the resource string to match * value the value to apply * * RETURN VALUES: none * * ERRORS: none */ static void _search_widget_tree ( Widget w, char *resource, char *value) { Widget parent = w; char *last_part; char *remainder = NULL; char last_token; char *indx, *copy; char *loose, *tight; int loose_len, tight_len; /* * Find the root of the tree given any widget */ while (XtParent(parent) != NULL) { parent = XtParent(parent); } #ifdef DEBUG if (XtIsWidget (w) && XtIsWidget (parent)) fprintf (stderr, "widget = %s parent = %s\n", w->core.name, parent->core.name); else fprintf (stderr, "widget = NULL parent = NULL\n"); #endif /* * parse off the Class name that was prepended to this string in * a customizing tool */ loose = strchr (resource, '*'); tight = strchr (resource, '.'); if ((loose == NULL) && (tight == NULL)) return; loose_len = (loose) ? strlen (loose) : 0; tight_len = (tight) ? strlen (tight) : 0; if ((loose == NULL) || (tight_len > loose_len)) remainder = XtNewString (tight); else if ((tight == NULL) || (loose_len > tight_len)) remainder = XtNewString (loose); /* * Parse last segment off of resource string, (eg. background, font, * etc.) */ last_token = _get_last_part (remainder, &last_part); /* * this case covers resources of only one level (eg. *background) */ if (remainder[0] == 0) { _set_resource_values (w, resource, value, last_part); if (last_token == '*') _apply_values_to_children (parent, remainder, resource, value, last_token, last_part); /* * all other resource strings are recursively applied to the widget tree. * Prepend a '.' to the remainder string if there is no leading token. */ } else { if (remainder[0] != '*' && remainder[0] != '.') { XtAsprintf (©, ".%s", remainder); XtFree (remainder); remainder = copy; } indx = remainder; _set_and_search (parent, indx, remainder, resource, value, last_token, last_part); } XtFree (remainder); XtFree (last_part); } /* * NAME: _locate_children * * FUNCTION: * returns a list of all of a widget's children * * PARAMETERS: * w the parent to search for its children * children the list of children that is created * normal flag for normal children * popup flag for popup children * * RETURN VALUES: * int the number of children * children the list of children found * * ERRORS: none */ static int _locate_children ( Widget parent, Widget **children) { CompositeWidget comp = (CompositeWidget) parent; Cardinal i; int num_children = 0; int current = 0; /* * count the number of children */ if (XtIsWidget (parent)) num_children += parent->core.num_popups; if (XtIsComposite (parent)) num_children += comp->composite.num_children; if (num_children == 0) { *children = NULL; return (0); } *children = (Widget *) XtMalloc ((Cardinal) sizeof(Widget) * num_children); if (XtIsComposite (parent)) { for (i=0; icomposite.num_children; i++) { (*children)[current] = comp->composite.children[i]; current++; } } if (XtIsWidget (parent)) { for (i=0; icore.num_popups; i++) { (*children)[current] = comp->core.popup_list[i]; current++; } } return (num_children); } #ifdef DEBUG /* * NAME: dump_widget_tree * * FUNCTION: * recursively printout entire widget tree * * PARAMETERS: * w the widget to match * indent the amount to indent each line * * RETURN VALUES: void * * ERRORS: none */ static void dump_widget_tree ( Widget w, int indent) { int i,j; int num_children; Widget *children; /* * Recursively search through the children */ num_children = _locate_children (w, &children); indent += 2; for (i=0; icore.name); fprintf (stderr, "(%s)\n", children[i]->core.widget_class->core_class.class_name); } else { fprintf (stderr, "(NULL)\t"); fprintf (stderr, "(%s)\n", children[i]->core.widget_class->core_class.class_name); } } dump_widget_tree (children[i], indent); } XtFree ((char *)children); } #endif /* * NAME: _XtResourceConfiguationEH * * FUNCTION: * This function is the event handler for the on-the-fly communication * with a resource customization tool. This event handler must be * registered for the toplevel shell of each app. This is best done * in the _XtCreatePopupShell and _XtAppCreateShell functions in Xt's * Create.c source file. * * The property used to communicate with a customizing tool is * placed on the toplevel shell window of the application. The * customizing tool places a property on this window which causes * this event handler to be invoked via the PropertyNotify event. * This event handler reads the property and then deletes it from * the server. The contents of the property are a resource string * and value. The event handler then calls functions to walk the * applications widget tree, determining which widgets are affected * by the resource string, and then applying the value with XtSetValues. * * PARAMETERS: * w the widget that invoked this event handler * client_data not used * event the event structure * * RETURN VALUES: none * * ERRORS: none */ /* ARGSUSED */ void _XtResourceConfigurationEH ( Widget w, XtPointer client_data, XEvent *event) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; char *data = NULL; unsigned long resource_len; char *data_ptr; char *resource; char *value; #ifdef DEBUG int indent = 0; #endif XtPerDisplay pd; #ifdef DEBUG fprintf (stderr, "in _XtResourceConfiguationEH atom = %d\n",event->xproperty.atom); fprintf (stderr, " window = %x\n", XtWindow (w)); if (XtIsWidget (w)) fprintf (stderr, " widget = %x name = %s\n", w, w->core.name); #endif pd = _XtGetPerDisplay (XtDisplay (w)); /* * The window on which a customizing tool places the property * is determined at this point. It should be the applications * toplevel shell window. * * A customizing tool sends a "ping" to the application on * the RCM_INIT property. The application answers the ping * by deleting the property. */ if (event->xproperty.atom == pd->rcm_init) { XDeleteProperty (XtDisplay(w), XtWindow (w), pd->rcm_init); #ifdef DEBUG if (XtIsWidget (w)) fprintf (stderr, "%s\n", w->core.name); else fprintf (stderr, "NULL name\n"); dump_widget_tree(w, indent); fprintf (stderr, "answer ping\n"); #endif } /* * This event handler ignores any property notify events that * are not RCM_INIT or RCM_DATA */ if (event->xproperty.atom != pd->rcm_data) return; /* * Retrieve the data from the property */ #ifdef DEBUG fprintf (stderr, "receiving RCM_DATA property\n"); #endif if (XGetWindowProperty (XtDisplay(w), XtWindow (w), pd->rcm_data, 0L, 8192L, TRUE, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&data ) == Success && actual_type == XA_STRING && actual_format == 8) { /* * data format is: * * resource_length, resource, value * * convert the resource_length to a long, skip over it, put a * zero byte at the end of the resource, and pick off the * resource and value fields. */ if (data) { char *data_end = data + nitems; char *data_value; resource_len = strtoul (data, &data_ptr, 10); if (data_ptr != (char *) data) { data_ptr++; data_value = data_ptr + resource_len; } else /* strtoul failed to convert a number */ data_ptr = data_value = NULL; if (data_value > data_ptr && data_value < data_end) { *data_value++ = '\0'; resource = XtNewString (data_ptr); value = XtNewString (data_value); #ifdef DEBUG fprintf (stderr, "resource_len=%d\n", resource_len); fprintf (stderr, "resource = %s\t value = %s\n", resource, value); #endif /* * descend the application widget tree and * apply the value to the appropriate widgets */ _search_widget_tree (w, resource, value); XtFree (resource); XtFree (value); } } } if (data) XFree ((char *)data); } ed to guarantee no problems with * international strings. * * PARAMETERS: * remainder the part of the resource string left over * part the parsed off part of the resource string * * RETURN VALUES: * char the token (* or . or ?) preceding the resource part * remainder the part of the resource string left over * part the parsed oflibXt-1.1.5/src/Makefile.am000064401431060000012000000043431252061032400157030ustar00alancstaff00002660200006lib_LTLIBRARIES = libXt.la BUILT_SOURCES = $(BUILT_FILES) CLEANFILES = $(BUILT_SOURCES) SRCH_DEFINES = -DXFILESEARCHPATHDEFAULT=\"$(XFILESEARCHPATHDEFAULT)\" ERRORDB_DEFINES = -DERRORDB=\"$(ERRORDBDIR)/XtErrorDB\" AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(SRCH_DEFINES) $(ERRORDB_DEFINES) \ $(XTMALLOC_ZERO_CFLAGS) -DLIBXT_COMPILATION AM_CPPFLAGS = -I$(top_srcdir)/include/ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include -I$(top_builddir)/include/X11 nodist_libXt_la_SOURCES = StringDefs.c libXt_la_SOURCES = \ ActionHook.c \ Alloc.c \ ArgList.c \ Callback.c \ ClickTime.c \ Composite.c \ Constraint.c \ Convert.c \ Converters.c \ Core.c \ Create.c \ Destroy.c \ Display.c \ Error.c \ Event.c \ EventUtil.c \ Functions.c \ GCManager.c \ Geometry.c \ GetActKey.c \ GetResList.c \ GetValues.c \ HookObj.c \ Hooks.c \ Initialize.c \ Intrinsic.c \ Keyboard.c \ Manage.c \ NextEvent.c \ Object.c \ PassivGrab.c \ Pointer.c \ Popup.c \ PopupCB.c \ RectObj.c \ ResConfig.c \ Resources.c \ Selection.c \ SetSens.c \ SetValues.c \ SetWMCW.c \ Shell.c \ TMaction.c \ TMgrab.c \ TMkey.c \ TMparse.c \ TMprint.c \ TMstate.c \ Threads.c \ VarCreate.c \ VarGet.c \ Varargs.c \ Vendor.c \ sharedlib.c DISTCLEANFILES = StringDefs.c libXt_la_LIBADD = @XT_LIBS@ libXt_la_LDFLAGS = -version-number 6:0:0 -no-undefined # # The util directory contains a program that builds some of the sources. # The input to this program is given in files. Unfortunately those input # files refers to things like # # util/foo # # so the generating program must be run from the top directory. # BUILT_SOURCE = StringDefs.c BUILT_HEADER = $(top_builddir)/include/X11/StringDefs.h $(top_builddir)/include/X11/Shell.h BUILT_FILES = $(BUILT_SOURCE) $(BUILT_HEADER) STRING_LIST = $(top_srcdir)/util/string.list all-local: $(BUILT_FILES) $(BUILT_HEADER): $(BUILT_SOURCE) $(BUILT_SOURCE): $(AM_V_GEN)$(top_builddir)/util/makestrs -i $(top_srcdir) $(STRINGSABIOPTIONS) < $(STRING_LIST) > StringDefs.c $(AM_V_at)$(MKDIR_P) $(top_builddir)/src $(AM_V_at)$(MKDIR_P) $(top_builddir)/include/X11 $(AM_V_at)cp StringDefs.h $(top_builddir)/include/X11 $(AM_V_at)cp Shell.h $(top_builddir)/include/X11 $(AM_V_at)rm StringDefs.h Shell.h libXt-1.1.5/src/GetActKey.c000064401431060000012000000104441252061032400156320ustar00alancstaff00002660200006/*LINTLIBRARY*/ /*********************************************************** Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" KeySym XtGetActionKeysym( XEvent *event, Modifiers *modifiers_return) { TMKeyContext tm_context; Modifiers modifiers; KeySym keysym, retval; LOCK_PROCESS; tm_context= _XtGetPerDisplay(event->xany.display)->tm_context; if (event->xany.type != KeyPress && event->xany.type != KeyRelease) { UNLOCK_PROCESS; return NoSymbol; } if (tm_context != NULL && event == tm_context->event && event->xany.serial == tm_context->serial ) { if (modifiers_return != NULL) *modifiers_return = tm_context->modifiers; retval = tm_context->keysym; UNLOCK_PROCESS; return retval; } XtTranslateKeycode( event->xany.display, (KeyCode)event->xkey.keycode, event->xkey.state, &modifiers, &keysym ); if (modifiers_return != NULL) *modifiers_return = event->xkey.state & modifiers; UNLOCK_PROCESS; return keysym; } libXt-1.1.5/src/Alloc.c000064401431060000012000000313161252061032400150450ustar00alancstaff00002660200006/*********************************************************** Copyright (c) 1993, 2011, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, 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 Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ /* * X Toolkit Memory Allocation Routines * * Uses Xlib memory management, which is spec'd to be re-entrant. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "InitialI.h" #undef _XBCOPYFUNC #include #include #include #define Xmalloc(size) malloc((size)) #define Xrealloc(ptr, size) realloc((ptr), (size)) #define Xcalloc(nelem, elsize) calloc((nelem), (elsize)) #define Xfree(ptr) free(ptr) #ifdef _XNEEDBCOPYFUNC void _XtBcopy( char *src, char *dst, int length) { if (src < dst) { dst += length; src += length; while (length--) *--dst = *--src; } else { while (length--) *dst++ = *src++; } } #endif void _XtAllocError( String type) { Cardinal num_params = 1; if (type == NULL) type = "local memory allocation"; XtErrorMsg("allocError", type, XtCXtToolkitError, "Cannot perform %s", &type, &num_params); } void _XtHeapInit( Heap* heap) { heap->start = NULL; heap->bytes_remaining = 0; } /* Version of asprintf() using XtMalloc * Not currently available in XTTRACEMEMORY version, since that would * require varargs macros everywhere, which are only standard in C99 & later. */ Cardinal XtAsprintf( String *new_string, _Xconst char * _X_RESTRICT_KYWD format, ...) { char buf[256]; int len; va_list ap; va_start(ap, format); len = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if (len < 0) _XtAllocError("vsnprintf"); *new_string = XtMalloc(len + 1); /* snprintf doesn't count trailing '\0' */ if (len < sizeof(buf)) { strncpy(*new_string, buf, len); (*new_string)[len] = '\0'; } else { va_start(ap, format); if (vsnprintf(*new_string, len + 1, format, ap) < 0) _XtAllocError("vsnprintf"); va_end(ap); } return len; } #ifndef XTTRACEMEMORY char *XtMalloc( unsigned size) { char *ptr; #if defined(MALLOC_0_RETURNS_NULL) && defined(XTMALLOC_BC) /* preserve this (broken) behavior until everyone fixes their apps */ if (!size) size = 1; #endif if ((ptr = Xmalloc(size)) == NULL) _XtAllocError("malloc"); return(ptr); } char *XtRealloc( char *ptr, unsigned size) { if (ptr == NULL) { #ifdef MALLOC_0_RETURNS_NULL if (!size) size = 1; #endif return(XtMalloc(size)); } else if ((ptr = Xrealloc(ptr, size)) == NULL #ifdef MALLOC_0_RETURNS_NULL && size #endif ) _XtAllocError("realloc"); return(ptr); } char *XtCalloc( unsigned num, unsigned size) { char *ptr; #if defined(MALLOC_0_RETURNS_NULL) && defined(XTMALLOC_BC) /* preserve this (broken) behavior until everyone fixes their apps */ if (!size) num = size = 1; #endif if ((ptr = Xcalloc(num, size)) == NULL) _XtAllocError("calloc"); return(ptr); } void XtFree( char *ptr) { if (ptr != NULL) Xfree(ptr); } char* __XtMalloc( unsigned size) { #ifdef MALLOC_0_RETURNS_NULL if (!size) size = 1; #endif return XtMalloc (size); } char* __XtCalloc( unsigned num, unsigned size) { #ifdef MALLOC_0_RETURNS_NULL if (!size) num = size = 1; #endif return XtCalloc(num, size); } #ifndef HEAP_SEGMENT_SIZE #define HEAP_SEGMENT_SIZE 1492 #endif char* _XtHeapAlloc( Heap* heap, Cardinal bytes) { register char* heap_loc; if (heap == NULL) return XtMalloc(bytes); if (heap->bytes_remaining < (int)bytes) { if ((bytes + sizeof(char*)) >= (HEAP_SEGMENT_SIZE>>1)) { /* preserve current segment; insert this one in front */ #ifdef _TRACE_HEAP printf( "allocating large segment (%d bytes) on heap %#x\n", bytes, heap ); #endif heap_loc = XtMalloc(bytes + sizeof(char*)); if (heap->start) { *(char**)heap_loc = *(char**)heap->start; *(char**)heap->start = heap_loc; } else { *(char**)heap_loc = NULL; heap->start = heap_loc; } return heap_loc + sizeof(char*); } /* else discard remainder of this segment */ #ifdef _TRACE_HEAP printf( "allocating new segment on heap %#x\n", heap ); #endif heap_loc = XtMalloc((unsigned)HEAP_SEGMENT_SIZE); *(char**)heap_loc = heap->start; heap->start = heap_loc; heap->current = heap_loc + sizeof(char*); heap->bytes_remaining = HEAP_SEGMENT_SIZE - sizeof(char*); } bytes = (bytes + (sizeof(long) - 1)) & (~(sizeof(long) - 1)); heap_loc = heap->current; heap->current += bytes; heap->bytes_remaining -= bytes; /* can be negative, if rounded */ return heap_loc; } void _XtHeapFree( Heap* heap) { char* segment = heap->start; while (segment != NULL) { char* next_segment = *(char**)segment; XtFree(segment); segment = next_segment; } heap->start = NULL; heap->bytes_remaining = 0; } #else /* * X Toolkit Memory Trace Allocation Routines */ #undef XtMalloc #undef XtRealloc #undef XtCalloc #undef XtFree typedef struct _Stats *StatsPtr; typedef struct _Stats { StatsPtr prev, next; char *file; int line; unsigned size; unsigned long seq; XtPointer heap; } Stats; static StatsPtr XtMemory = (StatsPtr)NULL; static unsigned long ActiveXtMemory = 0; static unsigned long XtSeqId = 0; static unsigned long XtSeqBreakpoint = ~0; #define StatsSize(n) ((((n) + (sizeof(long) - 1)) & ~(sizeof(long) - 1)) + sizeof(Stats)) #define ToStats(ptr) ((StatsPtr)(ptr - sizeof(Stats))) #define ToMem(ptr) (((char *)ptr) + sizeof(Stats)) #define CHAIN(ptr,len,hp) \ ptr->next = XtMemory; \ if (XtMemory) \ XtMemory->prev = ptr; \ XtMemory = ptr; \ ptr->prev = (StatsPtr)NULL; \ ptr->file = file; \ ptr->line = line; \ ptr->size = len; \ ptr->heap = hp; \ if (file) \ ActiveXtMemory += len; \ ptr->seq = XtSeqId; \ if (XtSeqId == XtSeqBreakpoint) \ _XtBreakpoint(ptr); \ XtSeqId++ /*ARGUSED*/ static void _XtBreakpoint( StatsPtr mem) { mem->seq = XtSeqId; /* avoid being optimized out of existence */ } char *_XtMalloc( unsigned size, char *file, int line) { StatsPtr ptr; unsigned newsize; char* retval = NULL; LOCK_PROCESS; newsize = StatsSize(size); if ((ptr = (StatsPtr)Xmalloc(newsize)) == NULL) _XtAllocError("malloc"); CHAIN(ptr, size, NULL); retval = (ToMem(ptr)); UNLOCK_PROCESS; return retval; } char *XtMalloc( unsigned size) { return _XtMalloc(size, (char *)NULL, 0); } char *_XtRealloc( char *ptr, unsigned size, char *file, int line) { char *newptr; LOCK_PROCESS; newptr = _XtMalloc(size, file, line); if (ptr) { unsigned copysize = ToStats(ptr)->size; if (copysize > size) copysize = size; memmove(newptr, ptr, copysize); _XtFree(ptr); } UNLOCK_PROCESS; return(newptr); } char *XtRealloc( char *ptr, unsigned size) { return _XtRealloc(ptr, size, (char *)NULL, 0); } char *_XtCalloc( unsigned num, unsigned size, char *file, int line) { StatsPtr ptr; unsigned total, newsize; char* retval = NULL; LOCK_PROCESS; total = num * size; newsize = StatsSize(total); if ((ptr = (StatsPtr)Xcalloc(newsize, 1)) == NULL) _XtAllocError("calloc"); CHAIN(ptr, total, NULL); retval = (ToMem(ptr)); UNLOCK_PROCESS; return retval; } char *XtCalloc( unsigned num, unsigned size) { return _XtCalloc(num, size, (char *)NULL, 0); } Boolean _XtIsValidPointer( char *ptr) { register StatsPtr mem; register StatsPtr stp = ToStats(ptr); LOCK_PROCESS; for (mem = XtMemory; mem; mem = mem->next) { if (mem == stp) { UNLOCK_PROCESS; return True; } } UNLOCK_PROCESS; return False; } Boolean _XtValidateMemory = False; void _XtFree( char *ptr) { register StatsPtr stp; LOCK_PROCESS; if (ptr) { if (_XtValidateMemory && !_XtIsValidPointer(ptr)) abort(); stp = ToStats(ptr); if (stp->file) ActiveXtMemory -= stp->size; if (stp->prev) stp->prev->next = stp->next; else XtMemory = stp->next; if (stp->next) stp->next->prev = stp->prev; Xfree((char *)stp); } UNLOCK_PROCESS; } void XtFree(char *ptr) { _XtFree(ptr); } char *_XtHeapMalloc( Heap *heap, Cardinal size, char *file, int line) { StatsPtr ptr; unsigned newsize; XtPointer hp = (XtPointer) heap; char* retval = NULL; LOCK_PROCESS; newsize = StatsSize(size); if ((ptr = (StatsPtr)Xmalloc(newsize)) == NULL) _XtAllocError("malloc"); CHAIN(ptr, size, hp); retval = (ToMem(ptr)); UNLOCK_PROCESS; return retval; } void _XtHeapFree(register XtPointer heap) { register StatsPtr mem, next; LOCK_PROCESS; for (mem = XtMemory; mem; mem = next) { next = mem->next; if (mem->heap == heap) { if (mem->file) ActiveXtMemory -= mem->size; if (mem->prev) mem->prev->next = next; else XtMemory = next; if (next) next->prev = mem->prev; Xfree((char *)mem); } } UNLOCK_PROCESS; } #include void _XtPrintMemory(char * filename) { register StatsPtr mem; FILE *f; if (filename == NULL) f = stderr; else f = fopen(filename, "w"); LOCK_PROCESS; fprintf(f, "total size: %d\n", ActiveXtMemory); for (mem = XtMemory; mem; mem = mem->next) { if (mem->file) fprintf(f, "size: %6d seq: %5d %12s(%4d) %s\n", mem->size, mem->seq, mem->file, mem->line, mem->heap ? "heap" : ""); } UNLOCK_PROCESS; if (filename) fclose(f); } #endif /* XTTRACEMEMORY */ libXt-1.1.5/src/VarCreate.c000064401431060000012000000251041252061032400156650ustar00alancstaff00002660200006/* Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Copyright 1885, 1986, 1987, 1988, 1989, 1994, 1998 The Open Group 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. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "IntrinsicI.h" #include "StringDefs.h" #include "Shell.h" #include "VarargsI.h" #include "CreateI.h" #if (defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE) #define XtToolkitInitialize _XtToolkitInitialize #endif /* (SUNSHLIB || AIXSHLIB) && SHAREDCODE */ static Widget _XtVaCreateWidget( String name, WidgetClass widget_class, Widget parent, va_list var, int count) { register Widget widget; XtTypedArgList typed_args = NULL; Cardinal num_args; _XtVaToTypedArgList(var, count, &typed_args, &num_args); widget = _XtCreateWidget(name, widget_class, parent, (ArgList)NULL, (Cardinal)0, typed_args, num_args); if (typed_args != NULL) { XtFree((XtPointer)typed_args); } return widget; } Widget XtVaCreateWidget( _Xconst char* name, WidgetClass widget_class, Widget parent, ...) { va_list var; register Widget widget; int total_count, typed_count; WIDGET_TO_APPCON(parent); LOCK_APP(app); va_start(var,parent); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,parent); widget = _XtVaCreateWidget((String)name, widget_class, parent, var, total_count); va_end(var); UNLOCK_APP(app); return widget; } Widget XtVaCreateManagedWidget( _Xconst char* name, WidgetClass widget_class, Widget parent, ...) { va_list var; register Widget widget; int total_count, typed_count; WIDGET_TO_APPCON(parent); LOCK_APP(app); va_start(var,parent); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,parent); widget = _XtVaCreateWidget((String)name, widget_class, parent, var, total_count); XtManageChild(widget); va_end(var); UNLOCK_APP(app); return widget; } Widget XtVaAppCreateShell( _Xconst char* name, _Xconst char* class, WidgetClass widget_class, Display* display, ...) { va_list var; register Widget widget; XtTypedArgList typed_args = NULL; Cardinal num_args; int total_count, typed_count; DPY_TO_APPCON(display); LOCK_APP(app); va_start(var,display); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,display); _XtVaToTypedArgList(var, total_count, &typed_args, &num_args); widget = _XtAppCreateShell((String)name, (String)class, widget_class, display, (ArgList)NULL, (Cardinal)0, typed_args, num_args); if (typed_args != NULL) { XtFree((XtPointer)typed_args); } va_end(var); UNLOCK_APP(app); return widget; } Widget XtVaCreatePopupShell( _Xconst char* name, WidgetClass widget_class, Widget parent, ...) { va_list var; register Widget widget; XtTypedArgList typed_args = NULL; Cardinal num_args; int total_count, typed_count; WIDGET_TO_APPCON(parent); LOCK_APP(app); va_start(var,parent); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,parent); _XtVaToTypedArgList(var, total_count, &typed_args, &num_args); widget = _XtCreatePopupShell((String)name, widget_class, parent, (ArgList)NULL, (Cardinal)0, typed_args, num_args); if (typed_args != NULL) { XtFree((XtPointer)typed_args); } va_end(var); UNLOCK_APP(app); return widget; } void XtVaSetValues(Widget widget, ...) { va_list var; ArgList args = NULL; Cardinal num_args; int total_count, typed_count; WIDGET_TO_APPCON(widget); LOCK_APP(app); va_start(var,widget); _XtCountVaList(var, &total_count, &typed_count); va_end(var); va_start(var,widget); _XtVaToArgList(widget, var, total_count, &args, &num_args); XtSetValues(widget, args, num_args); _XtFreeArgList(args, total_count, typed_count); UNLOCK_APP(app); va_end(var); } void XtVaSetSubvalues(XtPointer base, XtResourceList resources, Cardinal num_resources, ...) { va_list var; ArgList args; Cardinal num_args; int total_count, typed_count; va_start(var, num_resources); _XtCountVaList(var, &total_count, &typed_count); va_end(var); if (typed_count != 0) { XtWarning("XtVaTypedArg is not valid in XtVaSetSubvalues()\n"); } va_start(var, num_resources); _XtVaToArgList((Widget)NULL, var, total_count, &args, &num_args); XtSetSubvalues(base, resources, num_resources, args, num_args); if (num_args != 0) { XtFree((XtPointer)args); } va_end(var); } Widget _XtVaOpenApplication( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, va_list var_args) { XtAppContext app_con; Display * dpy; register int saved_argc = *argc_in_out; Widget root; String attr; int count = 0; XtTypedArgList typed_args; XtToolkitInitialize(); /* cannot be moved into _XtAppInit */ dpy = _XtAppInit(&app_con, (String)application_class, options, num_options, argc_in_out, &argv_in_out, fallback_resources); typed_args = (XtTypedArgList) __XtMalloc((unsigned) sizeof(XtTypedArg)); attr = va_arg (var_args, String); for(; attr != NULL; attr = va_arg (var_args, String)) { if (strcmp(attr, XtVaTypedArg) == 0) { typed_args[count].name = va_arg(var_args, String); typed_args[count].type = va_arg(var_args, String); typed_args[count].value = va_arg(var_args, XtArgVal); typed_args[count].size = va_arg(var_args, int); } else { typed_args[count].name = attr; typed_args[count].type = NULL; typed_args[count].value = va_arg(var_args, XtArgVal); typed_args[count].size = 0; } count++; typed_args = (XtTypedArgList) XtRealloc((char *) typed_args, (unsigned) (count + 1) * sizeof(XtTypedArg)); } typed_args[count].name = NULL; va_end (var_args); root = XtVaAppCreateShell( NULL, application_class, widget_class, dpy, XtNscreen, (XtArgVal)DefaultScreenOfDisplay(dpy), XtNargc, (XtArgVal)saved_argc, XtNargv, (XtArgVal)argv_in_out, XtVaNestedList, (XtVarArgsList)typed_args, NULL ); if (app_context_return != NULL) *app_context_return = app_con; XtFree((XtPointer)typed_args); XtFree((XtPointer)argv_in_out); return(root); } Widget _XtVaAppInitialize( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, va_list var_args) { return _XtVaOpenApplication(app_context_return, application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, applicationShellWidgetClass, var_args); } #if !((defined(SUNSHLIB) || defined(AIXSHLIB)) && defined(SHAREDCODE)) /* * If not used as a shared library, we still need a front end to * _XtVaOpenApplication and to _XtVaAppInitialize. */ Widget XtVaOpenApplication( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, WidgetClass widget_class, ...) { va_list var; va_start(var, widget_class); return _XtVaOpenApplication(app_context_return, (String)application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, widget_class, var); } Widget XtVaAppInitialize( XtAppContext *app_context_return, _Xconst char* application_class, XrmOptionDescList options, Cardinal num_options, int *argc_in_out, String *argv_in_out, String *fallback_resources, ...) { va_list var; va_start(var, fallback_resources); return _XtVaOpenApplication(app_context_return, (String)application_class, options, num_options, argc_in_out, argv_in_out, fallback_resources, applicationShellWidgetClass, var); } #endif /* !((SUNSHLIB || AIXSHLIB) && SHAREDCODE) */ libXt-1.1.5/ChangeLog000064401431060000012000002253741252061064300146470ustar00alancstaff00002660200006commit e7411e7e5299116604ff1f01d9415802607f1051 Author: Alan Coopersmith Date: Thu Apr 30 22:36:14 2015 -0700 libXt 1.1.5 Signed-off-by: Alan Coopersmith commit 0c2c7562426aec7bdf9b54a7d6993153e0bce489 Author: Yaakov Selkowitz Date: Sun Aug 10 12:44:26 2014 -0500 Fix _XtInherit on x86_64 Windows As noted in Initialize.c, _XtInherit needs special treatment as it's both called as a function, and used as a value to compare with. We need to change this trickery for x86_64, as the symbols are no longer underscore prefixed, and the address is 64 bits. We also cannot place the trampoline in the .data section, as it may be marked no-execute, so we use a special section for it instead. v2: Uses of XtInherit must also be marked dllimport, so that they do not use a thunk, but instead indirect via the __imp_XtInherit auto-import. This avoids problems with an incorrect relocation being calculated in the case where libXt and a library using it (e.g. libXaw/libXaw3d/libXm/etc.) are loaded more than 2GiB apart from each other. This is enough to build a working libXt for Cygwin x86_64, because it uses the LP64 data model. I believe that more patches are needed for libXt to work correctly when built for the Windows LLP64 data model. Signed-off-by: Yaakov Selkowitz Reviewed-by: Jon TURNEY Reviewed-by: Colin Harrison commit 171d82fa36bb601360da2cc519718c46f137c467 Author: Jon TURNEY Date: Tue Apr 14 12:21:58 2015 +0100 Include unistd.h for getpid() Signed-off-by: Jon TURNEY Reviewed-by: David Macek commit af9c277491c9bdc37a6fc5ae5a6c6ca190bfa56c Author: Jon TURNEY Date: Tue Apr 14 12:19:07 2015 +0100 Include direct.h header for _getdrives() on Win32 Signed-off-by: Jon TURNEY Reviewed-by: David Macek commit e7094ceaf95a15eae73819d0ffdb9b982075e0d2 Author: Alan Coopersmith Date: Sat Feb 14 14:10:21 2015 -0800 unifdef -UCRAY -UCRAY2 Signed-off-by: Alan Coopersmith commit 33a6d9dc30188c02a3ec703153728b31d458ec1e Author: Rob Clark Date: Mon Jan 26 11:51:48 2015 -0500 asprintf needs _GNU_SOURCE on some platforms Fixes a build break noticed on fedora 21 on arm (although I doubt that is in any way arch specific). http://tinderbox.x.org/builds/2015-01-26-0012/logs/libXt/#build Signed-off-by: Rob Clark Reviewed-by: Alan Coopersmith commit ca04f74887d53c75e794f643f7e860ba588c3a57 Author: Alan Coopersmith Date: Sun Jan 18 11:21:45 2015 -0800 makestrs: Use asprintf() if available Signed-off-by: Alan Coopersmith Reviewed-by: Hans de Goede commit fba83e45a8d5dc2ca920ec6c49446d2b54c2db5c Author: Alan Coopersmith Date: Sun Jan 18 10:58:08 2015 -0800 makestrs: Replace strcpy()+strcat() calls with snprintf() calls Signed-off-by: Alan Coopersmith Reviewed-by: Hans de Goede commit 47fa41960650dd0e97eb78de2af0f5fcd9323b35 Author: Alan Coopersmith Date: Sun Jan 18 10:43:11 2015 -0800 makestrs: Replace malloc()+strcpy() calls with strdup() calls Signed-off-by: Alan Coopersmith Reviewed-by: Hans de Goede commit f3e5903536f80cb42ee6841f85e013284eb4c2fc Author: Alan Coopersmith Date: Sun Jan 18 10:27:42 2015 -0800 makestrs: use strchr() instead of index() Besides being supported by more standards, strchr() has the important characteristic of having a prototype included in on Solaris so that 64-bit compiles know it returns a pointer, not an integer. (On Solaris, index() is only found in , for SunOS compatibility.) Without this fix, makestrs segfaulted in 64-bit builds on Solaris after commit f9baaf55ff8cbd4bf018a34f181eda30d03b20dc switched to . Signed-off-by: Alan Coopersmith Reviewed-by: Hans de Goede commit aed2c4d3493cf3a06ad1240f317552fd8bfd687a Author: Alan Coopersmith Date: Sun Jan 18 10:34:38 2015 -0800 If CFLAGS_FOR_BUILD is not set, include CWARNFLAGS in default value Help catch errors like missing prototypes in makestrs sooner. Signed-off-by: Alan Coopersmith Reviewed-by: Hans de Goede commit f9baaf55ff8cbd4bf018a34f181eda30d03b20dc Author: Thomas Klausner Date: Thu Jan 8 09:18:16 2015 +0100 Use string.h instead of X11/Xos.h. Long long ago, Xos.h was needed to choose between & depending on the OS in use. Today we can rely on C89 & later providing everywhere for us. Signed-off-by: Thomas Klausner Reviewed-by: Alan Coopersmith commit 51d63a9d82dc4f2407862131bbf3e5d72b4505d3 Author: Gaetan Nadon Date: Sat Sep 21 12:52:15 2013 -0400 Use $(MKDIR_P) in Makefile.am for better code portability Reviewed-by: Alan Coopersmith Signed-off-by: Gaetan Nadon commit 8828fc21cb5b10f06294e460d15c38e234324960 Author: Alan Coopersmith Date: Wed Jul 10 08:18:26 2013 -0700 Revert "Avoid shadowing variables." This reverts commit 3919044bd7d3bcb85ce3425a43b8889a248a7542. Breaks programs such as xcalc & xlogo on multiple platforms. commit 9dc5fb0b9640b79a234b58e640e05d8276556beb Author: Thomas Klausner Date: Tue Jun 25 23:02:48 2013 +0200 Fix char vs. unsigned char warnings. Signed-off-by: Alan Coopersmith commit 3919044bd7d3bcb85ce3425a43b8889a248a7542 Author: Thomas Klausner Date: Tue Jun 25 23:02:46 2013 +0200 Avoid shadowing variables. Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit d395f487e659ee1091eb60c89c551ba1b61dfe51 Author: Thomas Klausner Date: Tue Jun 25 23:02:50 2013 +0200 Ignore test-driver from automake-1.13. Signed-off-by: Alan Coopersmith commit 71c76a6c500761a2ca0091a55b8c106906fcb125 Author: Thomas Klausner Date: Wed Jun 26 00:43:03 2013 +0200 Mark non-returning function with appropriate attribute. Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit ce57783ea5b5c47f5dca172d36a76f91dd7704df Author: Thomas Klausner Date: Wed Jun 26 00:43:32 2013 +0200 Use appropriate variable type for vsnprintf return value. Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 0bf255ce5f2aeacece0b685996491729f804fe94 Author: Thierry Reding Date: Thu Jan 3 10:16:55 2013 +0100 Fix cross-compilation When cross-compiling against a sysroot for instance, a --sysroot option is typically passed via the CPPFLAGS variable. This can cause the build to break in the util subdirectory which requires the CPPFLAGS to be set for the build system. Solve this by using the value of CPPFLAGS_FOR_BUILD for CPPFLAGS in the util subdirectory. Cross-compile setups can override the variable when calling the configure script. Signed-off-by: Thierry Reding Signed-off-by: Alan Coopersmith commit 02fd80afd5d2416301e5166e202ff859902c7987 Author: Thomas Klausner Date: Sun Jun 2 21:48:38 2013 +0200 Add missing comma to fix DEBUG build. Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit e83d6d66ea28b0aaa7e574dd2471121a5250b934 Author: Alan Coopersmith Date: Thu May 30 18:13:27 2013 -0700 libXt 1.1.4 Signed-off-by: Alan Coopersmith commit 1f4802b745aa172d375cb79403cb1e013e6aa4c0 Author: Alan Coopersmith Date: Sat Mar 9 13:33:20 2013 -0800 Remove old strtoul workaround for SunOS 4 Signed-off-by: Alan Coopersmith commit 9264a21b688891dbdcee630ff72cf39aa75fc4e1 Author: Alan Coopersmith Date: Sat Mar 9 11:44:14 2013 -0800 unvalidated length in _XtResourceConfigurationEH [CVE-2013-2002] The RCM_DATA property is expected to be in the format: resource_length, resource, value If the property contains a resource_length thats results in a pointer outside the property string, memory corruption can occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit eae57493feec958bcf733ad0d334715107029f8b Author: Alan Coopersmith Date: Sat Mar 9 11:29:21 2013 -0800 Unchecked return values of XGetWindowProperty [CVE-2013-2005] Multiple functions in Selection.c assumed that XGetWindowProperty() would always set the pointer to the property, but before libX11 1.6, it could fail to do so in some cases, leading to libXt freeing or operating on an uninitialized pointer value, so libXt should always initialize the pointers and check for failure itself. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit ead50a9a274aa96bef94e57c4625be8e9288af4e Author: Colin Walters Date: Wed Jan 4 17:37:06 2012 -0500 autogen.sh: Implement GNOME Build API http://people.gnome.org/~walters/docs/build-api.txt Signed-off-by: Adam Jackson commit 8f5f3f7a3c36088d6faf0f13da4416596257bc58 Author: Adam Jackson Date: Tue Jan 15 14:28:48 2013 -0500 configure: Remove AM_MAINTAINER_MODE Signed-off-by: Adam Jackson commit 6731c2c7e3c16ad17425acfb5024fa1501e94411 Author: Thierry Reding Date: Thu Jan 3 10:16:56 2013 +0100 Use AM_CPPFLAGS instead of INCLUDES Recent versions of automake deprecate the INCLUDES variable. The same effect can be achieved by using AM_CPPFLAGS instead, which is also automake's recommendation. Signed-off-by: Thierry Reding Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 97034e393cfa63a55e9cec2d795ac41e5872f5b5 Author: Alan Coopersmith Date: Fri Jan 4 19:52:59 2013 -0800 unifdef -U__UNIXOS2__ Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit 0033d063894d003b1cb6edb14107d6ef7e0f3fec Author: Egbert Eich Date: Thu Sep 8 16:40:27 2011 +0200 Add XtErrorDB directory to pkg-config file. Should anyone ever desire to supply this file externally it's location is specified in the pkg-config file. Signed-off-by: Egbert Eich Reviewed-by: Gaetan Nadon Tested-by: Gaetan Nadon commit 15d7f9cf9e089f5968a20f80529096e9a1d3551f Author: Egbert Eich Date: Thu May 19 18:18:52 2011 +0200 Install ErrorDB into a $datarootdir-path, not $libdir. This lets Xt search for it's ErrorDB in the same location as Xlib. These error databases are architecture independent data files. The XtErrorDB file neither exists in libXt nor has it ever been supplied by any '3rd party' (at least Google didn't turn up any results). Therefore changing the location of this file (again) should have no side effects on backward compatibility. Signed-off-by: Egbert Eich Reviewed-by: Gaetan Nadon Tested-by: Gaetan Nadon commit 690d6587e7e0ba29b70d2b1d6c5c6a128c5547a2 Author: Eric S. Raymond Date: Thu Aug 23 11:43:42 2012 -0400 Remove unused macros that are temptations to presentation-level klugery. Also, change .Ds/.De to use CW font, as what they're wrapping is code displays. This may not be recognized on archaic Unixes, but .ft 1 isn't any too safe either. The PostScript and DVI drivers both grok CW. Signed-off-by: Eric S. Raymond commit 356b3e6235be4cdb51f13249cb68c581c0fc50c7 Author: Eric S. Raymond Date: Thu Aug 23 11:30:47 2012 -0400 Eliminate use of tab stops. Signed-off-by: Eric S. Raymond commit 1e5e04a80b391ea6827bb3c537be47533c6afe1e Author: Thomas Klausner Date: Wed Jul 18 16:45:19 2012 +0200 Fix DEBUG build (TMparse.c:376:1: error: overflow in implicit constant conversion) Signed-off-by: Thomas Klausner Signed-off-by: Alan Coopersmith commit 1ab3a0dd5140489bc80edcfd940609fefaec81f1 Author: Thomas Klausner Date: Wed Jul 18 16:45:18 2012 +0200 Avoid referencing something that isn't defined. Bring in the definition from another manual page. Signed-off-by: Thomas Klausner Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 6adb4655a15276973f5e74fd79f5c99d3d4b77a0 Author: Julien Cristau Date: Mon Apr 23 20:08:34 2012 +0200 Add copyright notice and license from the X Consortium to COPYING These appear in the Xt manpages. Reported-by: Ansgar Burchardt Signed-off-by: Julien Cristau commit 2d689ac861085d1d74bcbd05d1595bac0bf67d20 Author: Alan Coopersmith Date: Thu Mar 15 22:51:45 2012 -0700 libXt 1.1.3 Signed-off-by: Alan Coopersmith commit 75bef5b488245467b6638e25cd22006b306e8536 Author: Jeremy Huddleston Date: Mon Mar 12 18:36:52 2012 -0700 Revert "Treat unexpected returned events from poll as errors" This commit caused regressions: https://bugs.freedesktop.org/show_bug.cgi?id=47203 https://bugs.freedesktop.org/show_bug.cgi?id=47216 This reverts commit 70bb9e28d37fff4ead4d0a2c672af77059765fa4. commit 8ab1833a80a18131d897f6d9965545c16acef921 Author: Alan Coopersmith Date: Wed Mar 7 17:57:26 2012 -0800 libXt 1.1.2 Signed-off-by: Alan Coopersmith commit aa0f30641769968e0453a7d02f3f8e5955641336 Author: Matt Dew Date: Mon Jan 16 16:24:32 2012 -0700 informaltable cleanup On certain tables, add top and bottom borders to table header and a bottom border to the table. This matches what those tables in the old pdfs looked like. the prevents tables from splitting across pages. Useful for tiny tables. Converting the colwidth to a floating point, IE, 1* -> 1.0* cleans up these build errors: WARNING: table-layout="fixed" and column-width unspecified => falling back to proportional-column-width(1) Signed-off-by: Matt Dew commit 70bb9e28d37fff4ead4d0a2c672af77059765fa4 Author: Jeremy Huddleston Date: Wed Jan 4 10:33:29 2012 -0800 Treat unexpected returned events from poll as errors Inspired by libxcb's f0565e8f06aadf760a9065a97b8cf5ab9cbd18de Resolves https://bugs.freedesktop.org/show_bug.cgi?id=20048 Signed-off-by: Jeremy Huddleston commit 6dd231d37c036d182e789f0af37ee5417792ad4e Author: Stephen Turnbull Date: Wed Jan 4 10:18:29 2012 -0800 Don't re-enter the WaitLoop if block is set to false See: https://bugs.freedesktop.org/show_bug.cgi?id=20048 Signed-off-by: Jeremy Huddleston commit 0d8ef503e2d51d727a912d6ef3cf017608e45b7f Author: Gaetan Nadon Date: Sat Dec 31 09:03:39 2011 -0500 Add .gitignore for the newly added DocBook/XML generated files. Signed-off-by: Gaetan Nadon commit 9cbf06b9f7b1378ce3424837c979c3241516bf9b Author: Gaetan Nadon Date: Fri Dec 30 17:08:14 2011 -0500 docbook.am: embed css styles inside the HTML HEAD element Rather than referring to the external xorg.css stylesheet, embed the content of the file in the html output produced. This is accomplished by using version 1.10 of xorg-xhtml.xsl. This makes the whole html docs tree much more relocatable. In addition, it eliminates xorg.css as a runtime file which makes xorg-sgml-doctools a build time only package. Signed-off-by: Gaetan Nadon commit 7aa5d801d3b17fc9a1af9d5f6bc0283e3762cca2 Author: Matt Dew Date: Wed Dec 28 21:17:53 2011 -0700 Remove old files. commit b8818e1233b75c6bd47a6d2197fabf3a036a2119 Author: Matt Dew Date: Wed Dec 28 20:34:51 2011 -0700 Initial docbook conversion. commit fd0da0d44a8501edaac3be7fac9449ad730d8bf4 Author: Alan Coopersmith Date: Fri Oct 7 19:45:21 2011 -0700 Add const attributes to TMparse typedefs to fix gcc -Wwrite-strings warnings Signed-off-by: Alan Coopersmith commit af9e4b75167c0e31ec02d5ababf204daa12f500d Author: Alan Coopersmith Date: Fri Oct 7 19:32:08 2011 -0700 Add const attributes to slashDotXdefaults to fix gcc -Wwrite-strings warnings Signed-off-by: Alan Coopersmith commit 682ca8daf29285ef5013751784a7ec98962b7cbb Author: Alan Coopersmith Date: Fri Oct 7 19:30:11 2011 -0700 Make implementation_default_path return const char * Signed-off-by: Alan Coopersmith commit d3c2fbcd83ed9ae9b6cc8d765badca7f8d3261b2 Author: Alan Coopersmith Date: Fri Oct 7 19:23:37 2011 -0700 Make gravity strings const to fix gcc -Wwrite-strings warnings Signed-off-by: Alan Coopersmith commit 94ffb37790ce33fdf49d07dd1ade60b6d8376aa7 Author: Alan Coopersmith Date: Fri Oct 7 19:21:10 2011 -0700 Convert ISOLatin1 functions to specify args as const char * Signed-off-by: Alan Coopersmith commit 1f48cadaa88423a012613a0b456ec8795c8c0992 Author: Jeremy Huddleston Date: Fri Oct 7 17:08:07 2011 -0700 Whitespace changes related to cleaning up previous patch Signed-off-by: Jeremy Huddleston commit 9e898aa4fd964e888044e2fa2d64089505331f62 Author: Jeremy Huddleston Date: Fri Oct 7 17:01:34 2011 -0700 Don't pop elements from our array while we're itterating through it. https://bugs.freedesktop.org/show_bug.cgi?id=22543 Signed-off-by: Jeremy Huddleston commit df2008411a5c6a735af2b0fced01df660bb6978a Author: Alan Coopersmith Date: Mon Sep 26 15:29:45 2011 -0700 makestrs: Add const attributes to fix gcc -Wwrite-strings warnings Signed-off-by: Alan Coopersmith commit 9347b890ba24db41c7cb6c6e76564e4896bc8cac Author: Olivier Fourdan Date: Tue Sep 20 16:45:02 2011 -0700 Bug 40577 - Missing bound checking in FreeSelectionProperty() https://bugs.freedesktop.org/show_bug.cgi?id=40577 FreeSelectionProperty() did not check for the count of items in array and relied on a NULL terminated list, which can cause libXt to crash if FreeSelectionProperty() follows a call to GetSelectionProperty() which reallocates the array. Signed-off-by: Alan Coopersmith commit 5691187ced24b16a951e2b8308bcc2b65dd36eee Author: Alan Coopersmith Date: Fri Sep 16 22:54:05 2011 -0700 Strip trailing whitespace Performed with: find * -type f | xargs perl -i -p -e 's{[ \t]+$}{}' git diff -w & git diff -b show no diffs from this change Signed-off-by: Alan Coopersmith commit 6c0b44caa9b424c7e05327e8ddc9273b87a0f81f Author: Jeremy Huddleston Date: Sun Oct 2 13:35:26 2011 -0700 LP64 fix for TypedArgToArg() https://bugs.freedesktop.org/show_bug.cgi?id=12662 Signed-off-by: Jeremy Huddleston commit 2c29b8b71575d73db6b9542b24fa3312a2cf2f86 Author: Jon TURNEY Date: Wed Apr 27 12:32:39 2011 +0100 Only link with ws2_32 for mingw target For the Cygwin target, we will be using the socket functions provided by the Cygwin DLL, so linking with ws2_32 is unnecessary, even though it may be present. Signed-off-by: Jon TURNEY Reviewed-by: Cyril Brulebois commit 4ee8867047eaff3b121478b7199201d669e2c85d Author: Gaetan Nadon Date: Tue May 24 14:37:03 2011 -0400 Update README for documentation reference Reviewed-by: Alan Coopersmith Reviewed-by: Cyril Brulebois Signed-off-by: Gaetan Nadon commit 5e299936489bf3476464f00ebf3ffa3fa893cc23 Author: Alan Coopersmith Date: Fri Mar 18 19:36:05 2011 -0700 Add test case for XtCvtIntToPixmap fix in commit 16d9941f3aa38 Expanded from original Sun test case for Solaris bug 4163152. Verified that with commit 16d9941f3aa38 reverted, this test case fails on amd64, with it present, this test case passes. Signed-off-by: Alan Coopersmith commit 6fc14afa3fa98503248138f7f6984ee33a9bd889 Author: Alan Coopersmith Date: Mon Mar 14 19:07:12 2011 -0700 Add test case for XtAppMainLoop bug 34715 Signed-off-by: Alan Coopersmith Reviewed-by: Gaetan Nadon commit 4bf003a824577b5a46a59b3b3e91687b530ee48f Author: Alan Coopersmith Date: Thu Mar 10 14:23:44 2011 -0800 Add test framework similar to xserver and use it to test XtAsprintf Only two simple test cases to start with: - compares the results of snprintf of a short string to a static buffer with the new buffer returned by XtAsprintf. - compare the results of using XtAsprintf to replicate a portion of a very long string with the original string. Uses malloc debugging flags for various platforms to try to catch errors with uninitialized memory (such as the recently fixed failure to terminate the string). Requires xorg-macros 1.13 for XORG_ENABLE_UNIT_TESTS and XORG_WITH_GLIB. Signed-off-by: Alan Coopersmith Reviewed-by: Gaetan Nadon commit 42c611d9f8c80528f6e36ceb0ce245b06e8b1e8e Author: Jordan Hayes Date: Sun Mar 6 11:35:47 2011 -0800 Bug 34715: XtAppMainLoop doesn't work without a Display https://bugs.freedesktop.org/show_bug.cgi?id=34715 XtAppNextEvent() doesn't return until there's an actual XEvent to be handled; it handles Xt-internal events (inputs, timers, signals) itself, but doesn't return (because of course, those aren't XEvents). Which means that the exit flag doesn't get a chance to break the loop until/unless there's an actual XEvent. Signed-off-by: Alan Coopersmith commit c16d3cc264c45601f0e59bdd29e438c7c9679721 Author: Julien Cristau Date: Thu Mar 10 10:19:59 2011 +0100 Bump to 1.1.1 Signed-off-by: Julien Cristau commit fe2cf6e2b70e57624aad71f510ff8c6addaae196 Author: Cyril Brulebois Date: Tue Mar 8 16:09:49 2011 +0100 XtAsprintf: Fix memory corruption. Don't write the null terminator to a random place, this can trigger some segfault in XtOpenDisplay() and other annoyances. Debian Bug #617208 Signed-off-by: Cyril Brulebois Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit f6c791b5f318d8805db4cb6c74b1bc2e91d6c15c Author: Gaetan Nadon Date: Sun Mar 6 13:43:46 2011 -0500 man: replace hard coded section number 3Xt with __libmansuffix__ #35050 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=512130 The Xt manpages are installed in section 3 (and not 3Xt as upstream would have it). But, internal cross-references (in particular, in the SEE ALSO part) are left alone, and keep pointing at Foo(3Xt). The result is that they can't be automatically followed from manpage sanitizers such as dwww or emacs. Reviewed-by: Alan Coopersmith Signed-off-by: Gaetan Nadon commit 9ccf14fddedc11bd17b3ae30612c6f70f4cd7e14 Author: Alan Coopersmith Date: Fri Mar 4 16:31:59 2011 -0800 Don't need to use target-specific CFLAGS for makestrs It's the only thing built in that directory, so we can use AM_CFLAGS and drop the requirement for AM_PROG_CC_C_O in configure.ac Signed-off-by: Alan Coopersmith Reviewed-by: Gaetan Nadon Tested-by: Gaetan Nadon commit 16d9941f3aa38dde115cbff639e131761c1b36d0 Author: Alan Coopersmith Date: Fri Mar 4 15:43:43 2011 -0800 Incorrect cast in XtCvtIntToPixmap could cause bus error on 64-bit machines Originally fixed by Leo Binchy for Sun Bug 4163152 to resolve bus error on VSW5 (XTS) testing on 64-bit SPARC test run on Solaris 7. ( Testcase: XtCvtIntToPixmap, Purpose: 1) Since we're converting from Int to Pixmap, need to access the argument passed in as an int, not a Pixmap, which is consistent with the other IntToXXX converters in this file. Signed-off-by: Alan Coopersmith Reviewed-by: Matt Turner commit 994443524ade46bad03eea0acbd1410d561c591d Author: Jeremy Huddleston Date: Fri Mar 4 16:30:58 2011 -0800 configure: Bump version to 1.1.0 for release Signed-off-by: Jeremy Huddleston commit c0a233895cc8270ec0ff0bd2abb88d3f6dd524c3 Author: Jeremy Huddleston Date: Fri Mar 4 12:49:48 2011 -0800 darwin: Don't use poll() when expected to run on darwin10 and prior Signed-off-by: Jeremy Huddleston commit abf6062715c7d1390e516261a31abde4ed7ea64e Author: Alan Coopersmith Date: Wed Feb 2 23:29:46 2011 -0800 Shell.c: TopLevelSetValues ignores iconic state if shell not yet realized Fix originally created by Leo Binchy for Sun to fix Solaris bug 1243761 The XmNiconic resource doesn't work Signed-off-by: Alan Coopersmith commit b1eaa18835ec7c3a11e580340625b35c18edf7ca Author: Alan Coopersmith Date: Wed Feb 2 23:21:02 2011 -0800 GetResources: protect against underflow when type conversion fails Fix originally created by Leo Binchy for Sun to fix Solaris bug 1211553: XtVaCreateManagedWidget with list of resources XtVaTypedArg cause core dump Signed-off-by: Alan Coopersmith commit 21c1cc98d8210a3ce2a4bf62ecee9168fdd99dcb Author: Alan Coopersmith Date: Wed Feb 2 22:42:13 2011 -0800 Remove unused #ifdef UNALIGNED version of Xt macros & functions Trying to outsmart the compiler and libc is a losing battle, but since UNALIGNED was never defined, we weren't even trying. Signed-off-by: Alan Coopersmith commit 19538f2b4553221b35831e13ec70ed9db436dd32 Author: Gaetan Nadon Date: Wed Feb 2 11:43:44 2011 -0500 config: comment, minor upgrade, quote and layout configure.ac Group statements per section as per Autoconf standard layout Quote statements where appropriate. Autoconf recommends not using dnl instead of # for comments Use AC_CONFIG_FILES to replace the deprecated AC_OUTPUT with parameters. Add AC_CONFIG_SRCDIR([Makefile.am]) This helps automated maintenance and release activities. Details can be found in http://wiki.x.org/wiki/NewModuleGuidelines commit 7fd1e98987967b23f66da4b18ebf9798a68cd370 Author: Gaetan Nadon Date: Fri Jan 28 16:07:07 2011 -0500 config: replace deprecated AC_HELP_STRING with AS_HELP_STRING This silences an Automake warning. Signed-off-by: Gaetan Nadon commit 84e512a94295387bd0625ce619fc8bd381395c71 Author: Alan Coopersmith Date: Wed Dec 22 10:49:42 2010 -0800 Convert ALLOCATE_LOCAL + sprintf to XtAsprintf Now that we don't need to separately strlen the format string, put it directly into the function call to clear gcc warnings of: Initialize.c:397: warning: format not a string literal, argument types not checked Signed-off-by: Alan Coopersmith commit c80650fddec8596ef7278e37aa12ce2076c54e93 Author: Alan Coopersmith Date: Thu Dec 9 23:36:31 2010 -0800 Convert ResConfig.c to use XtAsprintf() instead of XtMalloc + sprintf Signed-off-by: Alan Coopersmith commit ac07da253415ccb8b6322feedf7969967357050e Author: Alan Coopersmith Date: Wed Jan 12 23:09:29 2011 -0800 Add XtAsprintf() as a new exported API Like asprintf() but using XtMalloc() to tie into the Xt memory allocation and error handling subsystems. Bumps libXt version to 1.0.99.1 so that modules can set their pkg-config dependency to libXt >= 1.0.99.1 to require XtAsprintf(). Signed-off-by: Alan Coopersmith commit 84f73c49db8071c06f27609ce7cc7a32a17351a9 Author: Alan Coopersmith Date: Thu Dec 9 23:44:42 2010 -0800 Convert some sprintf calls to snprintf Signed-off-by: Alan Coopersmith Reviewed-by: Julien Cristau commit 14145f3e87a039640cd8bdb2e2f4f30ca9b2a710 Author: Alan Coopersmith Date: Sun Dec 5 01:21:06 2010 -0800 config: AC_PROG_CC is provided by XORG_DEFAULT_OPTIONS now Signed-off-by: Alan Coopersmith commit a73b8f06b95216083c8335fad45dd0de7f44a529 Author: Alan Coopersmith Date: Sun Dec 5 01:19:10 2010 -0800 config: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS Regroup AC statements under the Autoconf initialization section. Regroup AM statements under the Automake initialization section. Add missing AC_CONFIG_SRCDIR Signed-off-by: Alan Coopersmith commit 2bf988d229d2b85208cc42094ce7202204d628af Author: Alan Coopersmith Date: Sun Dec 5 00:33:44 2010 -0800 Remove ancient #if defined(macII) hack for A/UX from makestrs.c Signed-off-by: Alan Coopersmith commit 96508e1b9da790d4b824a42246d1e86379101733 Author: Alan Coopersmith Date: Sun Dec 5 00:19:30 2010 -0800 Remove non-USE_SNPRINTF case from src/Error.c unifdef -DUSE_SNPRINTF src/Error.c Plus manual removal of old #ifdef notyet section that said not enough platforms had snprintf support yet. Welcome to the new millenium! Signed-off-by: Alan Coopersmith commit 0b780f8cc8bc2606fc3173628c4d3065aae190f8 Author: walter harms Date: Sun Nov 7 18:51:19 2010 +0100 remove strcmp in src/ResConfig.c Make remainder check like in the rest of code and replace strcmp() Signed-off-by: walter harms Reviewed-by: Mikhail Gusarov Signed-off-by: Alan Coopersmith commit 59598f20ba160fd92abcf88a30f0008425e7b1ec Author: walter harms Date: Tue Oct 26 13:46:32 2010 +0200 QueryEventMask: fix NULL check _XtGetPerWidgetInput may return NULL avoid possible NULL references Signed-off-by: walter harms Signed-off-by: Alan Coopersmith commit 8572cba2b9094dcd8ee5b4c5bcf3c38f1f291918 Author: walter harms Date: Sat Oct 30 10:47:23 2010 +0200 src/Resource.c: Fix possible NULL access Signed-off-by: walter harms Signed-off-by: Alan Coopersmith commit 6c75b449f6436b787247e164bee03691af2a4f55 Author: walter harms Date: Fri Oct 29 17:24:48 2010 +0200 XtFree() can handle NULL , remove check Signed-off-by: walter harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 0d29ca61b94cd34b04c5eedae443620a616d01c3 Author: Alan Coopersmith Date: Thu Oct 28 12:03:25 2010 -0700 libXt 1.0.9 Signed-off-by: Alan Coopersmith commit 87d019acc715c5ab4a5b2431ec882a0f84946c20 Author: Jesse Adkins Date: Tue Sep 28 13:30:03 2010 -0700 Purge cvs tags. Signed-off-by: Jesse Adkins Signed-off-by: Alan Coopersmith commit aa70c813f6eac2cad2944a98a1a444ea69dc024f Author: Gaetan Nadon Date: Tue Oct 5 09:07:30 2010 -0400 makestrs: Use MAN_SUBST now supplied in XORG_MANPAGE_SECTIONS The value of MAN_SUBST is the same for all X.Org packages. Signed-off-by: Gaetan Nadon commit 9d80fae6bc2cff26f320ff5b7b2ca7333ab3d677 Author: Gaetan Nadon Date: Tue Oct 5 09:04:19 2010 -0400 makestrs: Use $(SED) from AC_PROG_SED supplied by XORG_DEFAULT_OPTIONS Use the appropriate platform version of sed Signed-off-by: Gaetan Nadon commit 71a7e999a4d99aa54ea7268b928d87e27cea6279 Author: Gaetan Nadon Date: Tue Oct 5 09:02:41 2010 -0400 makestrs: remove unsed $(appman_DATA) Man page is not installed, this variable is not defined. Signed-off-by: Gaetan Nadon commit 0c968d108d8575db0149922b8375533fc54d0b7a Author: walter harms Date: Fri Oct 1 15:13:43 2010 +0200 Honor that GetClassActions() may return NULL. Signed-off-by: Walter Signed-off-by: Alan Coopersmith commit 6e4dbf06d4d049666cf81207d9f853a0a40c71b7 Author: Alan Coopersmith Date: Thu Sep 23 18:27:46 2010 -0700 Sun's copyrights belong to Oracle now Signed-off-by: Alan Coopersmith commit 94680a56a32ada91f07db34e02a526dca5ecbbf4 Author: Ryan Hajdaj Date: Thu Sep 23 18:13:28 2010 -0700 Bug 1478: Selection.c damages user error handler function https://bugs.freedesktop.org/show_bug.cgi?id=1478 Signed-off-by: Alan Coopersmith commit d53a3deb52100596bef9fb7b6c6e7ba15ed18bda Author: walter harms Date: Wed Sep 22 19:25:20 2010 +0200 fix dereference in TMprint.c the current codes checks for eventWidget == NULL after accessing eventWidget->core.tm.proc_table now it checks for eventWidget before access eventWidget->core.tm.proc_table. Signed-off-by: walter harms Reviewed-by: Jeremy Huddleston Signed-off-by: Alan Coopersmith commit 47e73791d4a88e59a797e9dde1ab2d5f58ff774c Author: Gaetan Nadon Date: Tue Aug 17 10:17:57 2010 -0400 man: whitespace management Signed-off-by: Gaetan Nadon commit 8c307c168c724368be2b9e784365b40d4b001aa3 Author: Gaetan Nadon Date: Tue Aug 17 09:21:36 2010 -0400 man: store shadow man pages in git rather than generating them Simplify the build process and the makefile. Local fix in CVS for bug 5628 is not required as the problem has been fixed in util-macros d9062e4077ebfd0985baf8418f3d0f111b9ddbba Signed-off-by: Gaetan Nadon commit 198ac897c7136425a20011a6c99f80cb925d622b Author: Gaetan Nadon Date: Fri Aug 6 12:32:10 2010 -0400 man: using the C preprocessor is not required for man pages. There were no special symbols needing cpp. Everything can be handled by the default MAN_SUBSTS in util-macros. Signed-off-by: Gaetan Nadon commit 74cb722a974010fa3c82dc57a036f97768b3695b Author: Alan Coopersmith Date: Tue Jun 8 20:26:29 2010 -0700 Move Xt specs from xorg-docs module For now, just checked in and included in dist tarballs, not processed into a usable format - same as it was in xorg-docs Signed-off-by: Alan Coopersmith commit 56621d3ec521dd30fabb1a77ad1c396baa740569 Author: Alan Coopersmith Date: Tue May 18 18:21:32 2010 -0700 Move sm from Requires to Requires.private in xt.pc As explained in https://bugs.freedesktop.org/show_bug.cgi?id=26943 since libXt callers need the SM headers but don't necessarily need to link directly to libSM, it should be in Requires.private, not Requires. Signed-off-by: Alan Coopersmith Reviewed-by: Adam Jackson commit f3d2ac478918b99c51e0b4bff97935f2255ab537 Author: Alan Coopersmith Date: Fri Apr 16 16:08:39 2010 -0700 Bug 26943: wrong dependencies in xt.pc.in https://bugs.freedesktop.org/show_bug.cgi?id=26943 Signed-off-by: Alan Coopersmith commit 723d78fe8e159dee1281f3e4f8dc03825aa334b6 Author: Gaetan Nadon Date: Thu Apr 1 20:30:43 2010 -0400 config: update and relocate AX_DEFINE_DIR macro Remove deprecated acinclude.m4 macro container file Use separate macro files as per autoconf recommendation Use the latest macro from GNU Signed-off-by: Gaetan Nadon commit 99a1c1f2cfa595500704d54e223f1c9e0ff9a10e Author: Yaakov Selkowitz Date: Fri Apr 2 01:43:22 2010 -0500 Use automake silent rules for BUILT_SOURCES generation Signed-off-by: Yaakov Selkowitz Acked-by: Gaetan Nadon commit cf3198fdc302bb017e6cc8014abc3bdbfeb9f6b1 Author: Gaetan Nadon Date: Mon Mar 29 16:50:34 2010 -0400 config: update AC_PREREQ statement to 2.60 Unrelated to the previous patches, the new value simply reflects the reality that the minimum level for autoconf to configure all x.org modules is 2.60 dated June 2006. ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz Signed-off-by: Gaetan Nadon commit 5a876831762c5d22101bd2fa71203647858f66b2 Author: Gaetan Nadon Date: Mon Mar 29 14:53:49 2010 -0400 config: remove the pkgconfig pc.in file from EXTRA_DIST Automake always includes it in the tarball. Signed-off-by: Gaetan Nadon commit cba12c108da0c3eb868a5cb08f641b6d036e0d05 Author: Gaetan Nadon Date: Sat Mar 27 16:30:02 2010 -0400 config: remove execute permission on configureation file Introduced in commit 6baea764567c3327f1d85ba91375adaea6dab46d "Link with winsock for WIN32 platforms" Signed-off-by: Gaetan Nadon commit e3bce11a8ea7e0175a6f08367bace9b0eb2b898a Author: Rémi Cardona Date: Mon Mar 15 22:59:04 2010 +0100 libXt 1.0.8 Signed-off-by: Rémi Cardona commit a1a8df535fa5ab3748404bdeb07e61beb604b14e Author: Alan Coopersmith Date: Thu Jan 14 20:07:46 2010 -0800 Update Sun license notices to current X.Org standard form Signed-off-by: Alan Coopersmith commit 6393306d1a2eb8239f108a773f342495e1cfd85c Author: Gaetan Nadon Date: Thu Jan 14 15:57:31 2010 -0500 COPYING: add missing copyright notices Refer to: ActionHook.c Copyright 1987, 1988 by Digital Equipment Corporation Copyright 1993 by Sun Microsystems, Inc. Mountain View, CA. Copyright 1987, 1988, 1998 The Open Group Signed-off-by: Gaetan Nadon Reviewed-by: Peter Hutterer Signed-off-by: Alan Coopersmith commit b798093fc6cbcf35c095f3401586d2741adcd2cd Author: Jeremy Huddleston Date: Fri Dec 11 17:04:23 2009 -0800 darwin: xnu doesn't support poll on ttys on the master side. Signed-off-by: Jeremy Huddleston commit e0ac2ea8b211bdca848679ee59362384f0f97e36 Author: Alan Coopersmith Date: Mon Dec 7 22:28:53 2009 -0800 Fix make distcheck (./util/makestrs.1 left after distclean) Signed-off-by: Alan Coopersmith commit 345633dc9c79b32a1b391dfb4dfedf87ae9e291b Author: Rémi Cardona Date: Mon Nov 9 12:26:17 2009 +0100 Don't install makestrs on the system It has no known outside-libXt users. Let's not install it and its man page. Signed-off-by: Rémi Cardona Signed-off-by: Alan Coopersmith commit ed31677bb9b1dd9498715a922763968917b87e49 Author: Gaetan Nadon Date: Fri Nov 27 20:56:04 2009 -0500 Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES Now that the INSTALL file is generated. Allows running make maintainer-clean. commit 2d95ad4beed294a0a30fdb1d8e7798fa62455a41 Author: Gaetan Nadon Date: Wed Oct 28 14:09:10 2009 -0400 INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206 Add missing INSTALL file. Use standard GNU file on building tarball README may have been updated Remove AUTHORS file as it is empty and no content available yet. Remove NEWS file as it is empty and no content available yet. commit 7cc872e9934f62bf56976d5592ce621e30b1f95a Author: Gaetan Nadon Date: Tue Oct 27 15:07:26 2009 -0400 Deploy the new XORG_DEFAULT_OPTIONS #24242 This macro aggregate a number of existing macros that sets commmon X.Org components configuration options. It shields the configuration file from future changes. commit 7ba57d7789362c2c2e646cc3b896802e6cbcb039 Author: Gaetan Nadon Date: Mon Oct 26 22:08:43 2009 -0400 Makefile.am: ChangeLog not required: EXTRA_DIST or *CLEANFILES #24432 ChangeLog filename is known to Automake and requires no further coding in the makefile. commit b4309cadb1de581d191fce924dac8fc7e55e5fb8 Author: Gaetan Nadon Date: Thu Oct 22 12:34:19 2009 -0400 .gitignore: use common defaults with custom section # 24239 Using common defaults will reduce errors and maintenance. Only the very small or inexistent custom section need periodic maintenance when the structure of the component changes. Do not edit defaults. commit 80ff1f362eefabe4be62784b001500b49943f1a5 Author: Jeremy Huddleston Date: Wed Oct 21 12:47:26 2009 -0700 This is not a GNU project, so declare it foreign. On Wed, 2009-10-21 at 13:36 +1000, Peter Hutterer wrote: > On Tue, Oct 20, 2009 at 08:23:55PM -0700, Jeremy Huddleston wrote: > > I noticed an INSTALL file in xlsclients and libXvMC today, and it > > was quite annoying to work around since 'autoreconf -fvi' replaces > > it and git wants to commit it. Should these files even be in git? > > Can I nuke them for the betterment of humanity and since they get > > created by autoreconf anyways? > > See https://bugs.freedesktop.org/show_bug.cgi?id=24206 As an interim measure, replace AM_INIT_AUTOMAKE([dist-bzip2]) with AM_INIT_AUTOMAKE([foreign dist-bzip2]). This will prevent the generation of the INSTALL file. It is also part of the 24206 solution. Signed-off-by: Jeremy Huddleston commit 5d63df924d7f66d2207c8db67e5d6cce8c7b245b Author: Alan Coopersmith Date: Thu Oct 8 21:50:35 2009 -0700 libXt 1.0.7 Signed-off-by: Alan Coopersmith commit f82769a1a75e17f66b67a5f71dcf889955569a57 Author: Alan Coopersmith Date: Thu Oct 8 21:33:27 2009 -0700 Replace AC_DEFINE_DIR with AX_DEFINE_DIR from Autoconf Archive commit 0ce97e4422409de070af7fd70da590db12c58579 Author: Alan Coopersmith Date: Tue Oct 6 16:12:03 2009 -0700 Migrate to xorg macros 1.3 & XORG_DEFAULT_OPTIONS Includes adding many $(AM_V_GEN) calls for the AM_SILENT_RULES included by XORG_DEFAULT_OPTIONS when automake-1.11 or newer is used Signed-off-by: Alan Coopersmith commit 254e2e0a8197e47bcef3e3c0b461ef8156a1af64 Author: Alan Coopersmith Date: Tue Oct 6 16:29:59 2009 -0700 Use make rules instead of shell for loops to generate shadow man pages Allows parallel make and simpler build logs/error reporting Signed-off-by: Alan Coopersmith commit fedc095da647b6f4fda8ca5edc5644458e2b2fbf Author: Julien Cristau Date: Tue Aug 25 18:31:49 2009 +0200 Link against libICE libXt uses IceConnectionNumber() and IceProcessMessages(), so make sure we link against -lICE. Signed-off-by: Julien Cristau commit f77482f0618f954de1d080599ada058e9a3c24ff Author: Thomas Petazzoni Date: Tue Jul 28 11:59:41 2009 +0200 Fix compilation of host tools in cross-compilation case At 36e9f0d351afbf7fd2595990b2d39e7c551f6420, a fix was added to use the host gcc instead of the target gcc when cross-compiling libXt. This fix works, but is not solve the whole problem: the CFLAGS and LDFLAGS used with the host compilers are the one defined for the target compiler (and the flags for both compilers might be very different). This new fix let libXt obey to CFLAGS_FOR_BUILD and LDFLAGS_FOR_BUILD environment variables, and use them to compile the host tools in util/. Signed-off-by: Thomas Petazzoni commit 369629611609f20c89499c1f6b5562a4f3cca983 Author: Adam Jackson Date: Thu Jul 2 13:28:01 2009 -0400 libXt 1.0.6 commit 28677468c56888b18c44d71a62903d23e5c294cf Author: Jon TURNEY Date: Tue May 19 23:25:15 2009 +0100 Cygwin/X: Build fix Commit c59dd27ecb1751f0b097046b2f892028e5a10a3e replaces __CYGWIN__ with WIN32 in a preprocessor check, as the code is appropriate for both Cygwin and Mingw. But this isn't quite the right was to do this. Being a Win32 platform is Cygwin's secret shame, and WIN32 isn't actually defined to avoid turning on code specific to native-Win API ports (See http://www.cygwin.com/faq/faq.programming.html#faq.programming.preprocessor) Yes, this probably means WIN32 could bereplaced by __MINGW32__ everywhere in the X sources... commit 535f8c5324205b92c15e8755008c33a2766832c8 Author: John McKernan Date: Fri May 1 13:53:03 2009 -0700 Sun bug 4010369: Too slow to process Keycode 0 events in Xt Translation Mgr. Evaluation from original bug report against Solaris 2.6 in 1996: According to my investigation with the problem using debuggable libXt and libXm, keycode 0 keypress events, which are given to Xt's Translation Manager when inputting any cyrillic/greek characters, are not cached in Xt's Translation Manager. At the TRANSLATE macro in the Xt's source lib/Xt/TMkey.c, keycode 0 keyevents are always given to XtTranslateKeycode() and it consumes a long time to parse Motif's Translation Manager tables as many times as keycode 0 keyevent are given. Signed-off-by: Alan Coopersmith commit 061d3eebf7a0502afcd9c1831d67c8961feece8d Author: John McKernan Date: Fri May 1 13:41:26 2009 -0700 Sun bug #1237023: Dtterm crashes in XtDisplayAccelerators() Don't try to printf if returned string is NULL Signed-off-by: Alan Coopersmith commit e500631954c8d390e8705fde7f50d1acc006406e Author: Jeremy Huddleston Date: Thu Mar 12 01:03:39 2009 -0700 darwin: Don't use poll() on versions of darwin before darwin10 commit 81792a4cb402c4e5275d63465bc5d65599e34a25 Author: Alan Coopersmith Date: Mon Feb 2 20:34:36 2009 -0800 Add README with pointers to mailing list, bugzilla & git repos Signed-off-by: Alan Coopersmith commit f56a69f2cf7df1e7cdf2494c5408786e53467374 Author: Paulo Cesar Pereira de Andrade Date: Fri Jan 30 18:22:10 2009 -0200 Janitor: ansification, make distcheck, compiler warnings, .gitignore. Most "compiler" warnings were actually sparse warnings, due to assigning a integer to a pointer, or an external symbol without a previous declaration. commit c1f227f94aec6f4555182965fc0d2d8f33fef01f Author: Peter Breitenlohner Date: Mon Oct 20 18:50:37 2008 -0700 X.Org Bug 17942: libXt manpage formatting commit f488a6a218da6b543d1495e607ff1b31b0b48900 Author: Daniel Stone Date: Tue Sep 23 19:14:09 2008 +0300 configure.ac: Minor thinko commit 36e9f0d351afbf7fd2595990b2d39e7c551f6420 Author: John Tapsell Date: Tue Sep 23 19:00:42 2008 +0300 configure.ac: Use native compiler for build tools makestrs is used during the build, so use the native compiler (either gcc or cc in $PATH, can be overridden as $CC_FOR_BUILD) instead of the (possibly cross-) compiler. commit ace1676b0630dfe739c3bd712ed2b6e46bdb52f1 Author: Alan Coopersmith Date: Mon Jun 23 20:04:29 2008 -0700 Update ac_define_dir.m4 to 2008-04-12 version commit 556918e21fbb67131d979b04f29a0b59fcd87575 Author: Alan Hourihane Date: Wed Apr 30 19:15:14 2008 +0100 Set a blank default search path for WIN32 commit 56444103a3b2159d334aa87d782fbca987118bbc Author: Alan Hourihane Date: Tue Apr 29 22:44:54 2008 +0100 less speed, more haste commit a393450cbde80b6e7f0e1c4112363eb1313a6cdb Author: Alan Hourihane Date: Tue Apr 29 22:16:05 2008 +0100 fix logic inverted problem commit cd83cf47412b4a5979e152990c3b0870751aee07 Author: Colin Harrison Date: Tue Apr 29 19:45:50 2008 +0100 Reduce the path searches on mingw commit bb6d2a09b87560ae396085ef0981b700924333cd Author: Colin Harrison Date: Tue Apr 29 13:45:06 2008 +0100 Xming specific configuration file settings commit 6baea764567c3327f1d85ba91375adaea6dab46d Author: Alan Hourihane Date: Tue Apr 29 10:22:35 2008 +0100 Link with winsock for WIN32 platforms commit c59dd27ecb1751f0b097046b2f892028e5a10a3e Author: Colin Harrison Date: Tue Apr 29 10:19:55 2008 +0100 Fix some build issues for Win32 platforms commit 8e95cb765e88d36c35f868f650c86c62c31ad635 Author: Colin Harrison Date: Wed Apr 23 13:56:28 2008 +0100 Add __MINGW32__ commit 4b64b821a48fe493056271216dbe29d43376954b Author: Matthieu Herrb Date: Sun Mar 9 08:42:48 2008 +0100 nuke RCS Ids commit b648ed992d2c3ea8a7462a595e51a07085bf4688 Author: Alan Coopersmith Date: Fri Mar 7 15:52:27 2008 -0800 Solaris builds need to pass -intelabi to makestrs, even on SPARC For some reason, when Solaris moved to X11R6.0, the intelabi version of StringDefs.c/.h was used on SPARC, so now we're stuck with 10+ years of binaries built to use it. commit c044ea620446db676ee076484fed3268c4d7c695 Author: James Cloos Date: Thu Dec 6 15:51:20 2007 -0500 Add missing PHONY line for automatic ChangeLog generation commit 6b483e355de6c5ee5dc635ab9b817bf72680b016 Author: Julien Cristau Date: Sat Jun 23 15:20:09 2007 +0100 Allow C++ apps to build using libXt commit 845e51c740574db2f72a5e7c5462d8f56a3c4e22 Author: Andreas Luik Date: Sun Apr 8 00:43:56 2007 +0300 Recalculate fd_set more aggressively (bug #808) select() can modify the fd set, so be a bit pessimistic and recalculate it more often. commit 007d9e5f8b2edc3ff8ce8b2f96b8f56a417bb78d Author: Matthieu Herrb Date: Mon Feb 26 18:27:43 2007 +0100 Sync XtGetErrorDatabaseText() prototype with reality. commit 4e7031510d05471e77ff48355b23fc8e4302648c Author: Ben Byer Date: Tue Feb 20 01:05:27 2007 -0800 added -flat_namespace to CFLAGS for Darwin commit 92452ca7a51fa77ea60eacd320dbd970e32653c9 Author: Alan Coopersmith Date: Sat Jan 27 22:29:03 2007 -0800 Version bump: 1.0.5 commit a5c7d56278e569257d3d64ff7681d0a484a1f817 Author: Alan Coopersmith Date: Sat Jan 27 22:26:55 2007 -0800 Replace static ChangeLog with dist-hook to generate from git log commit 67772a3f39c5e8c4019336b0bf4d32e70726b0c0 Author: Eric S. Raymond Date: Tue Jan 2 17:49:17 2007 -0800 Bug 9514: Markup error in makestrs.1x man page commit 75f83503ba1db628137ffc9d1d9e4f2a7a2fd97a Merge: 2f201b1 153264a Author: Jeremy C. Reed Date: Sat Dec 9 09:31:02 2006 -0600 Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/lib/libXt commit 2f201b177816be7112884bda180d65f5fff19155 Author: Jeremy C. Reed Date: Sat Dec 9 09:28:04 2006 -0600 Don't use "INSTALL" during the build because INSTALL may be set by build environment with settings for chown and make not work with permissions of the builder. So use mkdir -p and cp instead. This is for my bug #6599. commit 153264a7f290f98e01ed2dbd7265c977ec8ba7e1 Author: Daniel Stone Date: Wed Nov 8 16:16:02 2006 +0200 bump to 1.0.4 commit 0c1954765c32c1bd298111cc6bed2f090494c0cf Author: Eric Anholt Date: Fri Oct 27 12:35:38 2006 -0700 Fix .pc file with new autotools by using AC_DEFINE_DIR. With autoconf 2.60, $datadir now expands to use $datarootdir rather than just $prefix, so the .pc referenced the undefined $datarootdir. AC_DEFINE_DIR expands it all out for us. commit 3c166cc1efe86ca42180a64e14b6bbbc9744bc82 Author: Eric Anholt Date: Fri Oct 27 12:30:09 2006 -0700 Add more generated files to ignore. commit 8d18dfa21f8349c998675e1f9971de02ca99a1cd Author: Adam Jackson Date: Fri Oct 13 16:32:28 2006 -0400 Bump to 1.0.3 commit b54d069ea397486c6125943ffdb813482383576a Author: Qiu-Yuan (Kathleen) Yang Date: Fri Sep 1 18:04:26 2006 -0700 Sun bug #4962001: Close memory leaks seen in Motif apps The function "GetResources" will return a copy of resources to the caller and the caller has the responsibility to free the returned copy. However some functions, such as "XtGetSubresources", "_XtGetResources", and "XtGetApplicationResources" invoked "GetResources" without freeing the returned resource copy. commit 6e48adfab0c020ab5d55b68f9b4cc63ed5d8b14c Author: Alan Coopersmith Date: Fri Sep 1 17:59:42 2006 -0700 Add *~ to .gitignore to skip over emacs droppings commit 1eeeff85bf9f293de875169f6dc54577de0443f1 Author: David Nusinow Date: Wed Aug 30 16:33:10 2006 -0400 Generate the internal manpage section using __libmansuffix__ commit e2f43888fe021aac27770afa6a64fb3cf3fab190 Author: Alan Coopersmith Date: Thu Jul 13 14:59:08 2006 -0700 renamed: .cvsignore -> .gitignore commit 3d3a1bc23f571daa7a876a21169d5a0c996ce7cc Author: Adam Jackson Date: Fri May 12 16:10:27 2006 +0000 Bump to 1.0.2 commit fc82234c73362d6f07acf2dcf72bcefd96850105 Author: Matthieu Herrb Date: Sun Apr 30 14:30:16 2006 +0000 Fix ERRORDB definition for the case where ${prefix} != /usr commit bc813392aa8f563e6cd385636b90a7496fcaa14e Author: Adam Jackson Date: Thu Apr 27 00:23:17 2006 +0000 Bump to 1.0.1 commit 1c55684a7411c35fce2a958d84be4c13b5349ea0 Author: Alan Coopersmith Date: Sun Feb 12 18:19:22 2006 +0000 Bug #5628 Shadow pages not created correctly when MANDIR & MANSUFFIX don't match. commit 6851a1faf46a4d8a85e481162c8ee84f66174f89 Author: Kevin E Martin Date: Thu Dec 15 00:24:34 2005 +0000 Update package version number for final X11R7 release candidate. commit b9464aa563b650faefbb881d5b399659aa8c30bb Author: Kevin E Martin Date: Sat Dec 10 16:29:07 2005 +0000 Add configure option to install makestrs and its manpage. Add makestrs man page. commit 6be3ca4fb0d0f9a1361d45dfc094f0a7a85b27b4 Author: Kevin E Martin Date: Wed Dec 7 16:17:08 2005 +0000 Add configure option to set the build's app-default dir, and put the result in the xt.pc file for applications to use. commit 3186014010acbda9f8e3568a1e8076130212f600 Author: Kevin E Martin Date: Tue Dec 6 22:48:44 2005 +0000 Change *man_SOURCES ==> *man_PRE to fix autotools warnings. commit 5801485b720e1dd3799737d9f127212afd3101c7 Author: Kevin E Martin Date: Sat Dec 3 05:49:45 2005 +0000 Update package version number for X11R7 RC3 release. commit d480f9dbd3e07b4e139f2a1422f803e6e6264854 Author: Kevin E Martin Date: Sat Dec 3 04:41:50 2005 +0000 Add check and cflags for malloc(0) returning NULL. commit 2a591fe7b3416d8609bd71cb068f9390105ffecf Author: Alan Coopersmith Date: Mon Nov 28 22:03:06 2005 +0000 Change *mandir targets to use new *_MAN_DIR variables set by xorg-macros.m4 update to fix bug #5167 (Linux prefers *.1x man pages in man1 subdir) commit 7a8979367e4ab1a6412fef9a027b7d38621d87b7 Author: Alan Coopersmith Date: Wed Nov 23 22:33:07 2005 +0000 Bug #5003 Patch #3763 Xorg code misuses S_IF* macros commit 2533120c26185990d326fa14c92383f85239f3b7 Author: Kevin E Martin Date: Sat Nov 19 07:15:43 2005 +0000 Update pkgconfig files to separate library build-time dependencies from application build-time dependencies, and update package deps to work with separate build roots. commit 3f332f9af360cd42f5ff1b6f16ac64f7d146ff34 Author: Kevin E Martin Date: Wed Nov 9 21:19:13 2005 +0000 Update package version number for X11R7 RC2 release. commit f151f6dfa14c36cfa54ab3e55bb67f24a8a39dc6 Author: Kean Johnson Date: Tue Nov 8 06:33:25 2005 +0000 See ChangeLog entry 2005-11-07 for details. commit 7ed0ec3136190288b0c450cdf2998000c43619df Author: Kevin E Martin Date: Tue Nov 1 15:11:51 2005 +0000 Update pkgcheck dependencies to work with separate build roots. commit 33b861860b86b53840007010287f5483a503c8e9 Author: Kevin E Martin Date: Wed Oct 19 02:48:11 2005 +0000 Update package version number for RC1 release. commit d3853ab17d7203e7fbdfcd5cc8ed3505e5aa6233 Author: Kevin E Martin Date: Tue Oct 18 07:24:03 2005 +0000 Use $(INSTALL) instead of $(install_sh_DATA) for creating directories. commit 831a32df90d6b3db66d6c578f6e231d4aab2b760 Author: Adam Jackson Date: Tue Oct 18 03:10:14 2005 +0000 Split the 'install -d' over multiple lines so certain lame versions of autotools don't flip out. commit 5e37faddaac8ac50ee4ca719975f9bf526e4c980 Author: Alan Coopersmith Date: Tue Oct 18 01:50:02 2005 +0000 Add --with-xfile-search-path= and default setting to match monolith XFileSearchPathDefault in Imake (including extra directories used in Debian section of linux.cf.) commit 52edad6913e3efd3fcec6c73e13d33bf8c3a5e65 Author: Alan Coopersmith Date: Tue Oct 18 00:00:09 2005 +0000 Use @LIB_MAN_SUFFIX@ instead of $(LIB_MAN_SUFFIX) in macro substitutions to work better with BSD make commit 1fcb9d04dd8b2f78aff2d64e6db7588c973cdb5b Author: Alan Coopersmith Date: Mon Oct 17 21:13:22 2005 +0000 Rename .shadows.DONE to shadows.DONE to avoid some make's thinking it's a suffix rule (reported by Matthieu Herrb) commit 4423fc41efc97ad1559f281c2ce3c835ccc88c61 Author: Alan Coopersmith Date: Thu Oct 13 04:27:16 2005 +0000 Add generated man pages to .cvsignore file commit 3c676e51ca509fff616495ac7354ac8b4ecde7e4 Author: Alan Coopersmith Date: Wed Oct 12 00:22:32 2005 +0000 configure.ac Set up cpp pre-processing of man pages Add shadow man pages for man pages that document multiple functions. commit 0543cf76a5e11133b5f76fa37b39cbe2985c1c75 Author: Alan Coopersmith Date: Sat Sep 24 00:23:32 2005 +0000 Include to get correct XTHREADS settings in non-Imake builds. commit 88374bab9adfe73dc445d4202a28e4d6021a674f Author: Alan Coopersmith Date: Wed Sep 21 02:35:01 2005 +0000 Add checks for poll & snprintf & define old Imake names if found Enable XKB usage in Xt unless --disable-xkb is specified Set STRINGSABIOPTIONS for building StringDefs files on Solaris, SCO, and SVR4 systems. commit dbd0485a6e1926e7b94fdffb3e71de27c4a29012 Author: Adam Jackson Date: Mon Aug 1 23:59:39 2005 +0000 Properly define BUILT_FILES commit f4043547fbb2feb87f480388a695016b90f53279 Author: Keith Packard Date: Mon Aug 1 23:47:55 2005 +0000 Move building of StringDefs files to src and fix them so that parallel make works right. commit 027977140e19c5622331ac90eeb5e9bb9fe72640 Author: Kevin E Martin Date: Fri Jul 29 21:22:52 2005 +0000 Various changes preparing packages for RC0: - Verify and update package version numbers as needed - Implement versioning scheme - Change bug address to point to bugzilla bug entry form - Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to reenable it) - Fix makedepend to use pkgconfig and pass distcheck - Update build script to build macros first - Update modular Xorg version commit 28845cf017b991f7ed2dd23c005ab36ca43b97a5 Author: Alan Coopersmith Date: Fri Jul 22 20:30:10 2005 +0000 Bug #3824: Correct incomplete license statement from Sun. commit 052efe144da64f96fb1201a36933894d2d4bfb3c Author: Daniel Stone Date: Tue Jul 19 02:00:01 2005 +0000 distcheck fixes -- clean up after makestrs, don't list non-existant files. commit e1cd82cf0b4d51db42c5d71a63805b6fb9ad45b8 Author: Matthieu Herrb Date: Sun Jul 17 10:15:26 2005 +0000 Fix for building outside of srcdir. commit 40bf5c6a837430bf23f86b97fcde8237099511c0 Author: Daniel Stone Date: Sat Jul 16 07:37:19 2005 +0000 Set version number to 6.0.0 with -version-number. commit 265f56bafdca73f28a4937ebff86ac77a25f2d4b Author: Keith Packard Date: Sat Jul 9 06:49:50 2005 +0000 Add .cvsignore files commit 63a4f8f76f5fb9159447878a4a85a14d0fbf4bf6 Author: Alexander Gottwald Date: Thu Jun 30 12:23:32 2005 +0000 Add -no-undefined to linker command to build shared library on cygwin too commit 64b2b98096c6a5b2ac3af59796e07601eee4e28a Author: Søren Sandmann Pedersen Date: Mon Jun 20 21:47:20 2005 +0000 - Make Xt install its internal files in /usr/include/X11, both in the modular and the monolithic tree. - Update XTrap to use #include - Add XvMC to symlink.sh commit 6e10d9886cfe518d1407331a7a8e5bac85390249 Author: Alexander Gottwald Date: Fri Jun 10 12:19:31 2005 +0000 ensure $(buildir)/src and $(builddir)/include/X11 exist before installing generated files there commit 1b5fb35a8db7bcf568a2318118068b6c01169c14 Author: Alexander Gottwald Date: Tue May 24 16:06:12 2005 +0000 separation of source and build directories commit e6db93aff3a4e92b8d13998866a787bdc08b6f35 Author: Alexander Gottwald Date: Tue May 24 15:58:51 2005 +0000 Make source directory for templates configurable commit 82f3473668ed08af059e094a696911d2347e5d57 Author: Alan Coopersmith Date: Sun May 22 19:05:11 2005 +0000 Convert man pages to long file names in lib/X11, lib/Xt, & lib/Xext commit 1c6db5c90aa4b4c7c82b0676416c2a9a0baa6c67 Author: Alan Coopersmith Date: Sun May 22 04:25:43 2005 +0000 Check for and define INCLUDE_ALLOCA_H if found, since requires it. commit 2e00049e9b02e26f858c3e4510641a735c03b086 Author: Alan Coopersmith Date: Sat May 21 20:47:26 2005 +0000 Use $(install_sh_DATA) instead of "install" for better portability. Remove duplicate installation lines. Add AM_CFLAGS to pass through XT_CFLAGS & X11_CFLAGS commit a175c9ea92967441a7ad33d2f6c8bf26cbe954fe Author: Adam Jackson Date: Thu May 19 00:22:33 2005 +0000 revert last change, didn't do right thing at all, sorry for the noise commit 185284247a889358b2ea269424eb665a71079826 Author: Adam Jackson Date: Thu May 19 00:10:08 2005 +0000 Require automake 1.7 in AM_INIT_AUTOMAKE commit c7fe09644945e3725c0b67b84cd24d8475cea184 Author: Søren Sandmann Pedersen Date: Wed May 18 19:34:25 2005 +0000 Also include include/X11 commit 605a76dcc93e277e1b26841a0225b7e0fb851b76 Author: Søren Sandmann Pedersen Date: Wed May 18 15:38:31 2005 +0000 - conditionally include config.h in xc/lib/Xt sources - add build system for lib/Xt commit b0a241cf7c7ab3840929da3b1aabdda7bab22517 Author: Egbert Eich Date: Tue May 17 08:10:10 2005 +0000 gcc4 allows to check if sentinels are correct (a sentinel is the terminating element in a varargs list). A sentinel needs to be NULL, not 0 - which doesn't make a difference on 32bit but matters on 64bit. Furthermore it can be told that functions have a printf-like format string and argument list so that they can verify that both match. To use these features certain attributes need to be set - which are compiler specific. To do this we define macros which are expanded depending on the compiler version. For now we put those in include/Xfuncproto.h (the XFree86 DDX layer contains a file compiler.h which however is not visible outside the DDX) (Bugzilla #3268). commit 2b42b9154f9886ab05da1c3d6ce75fd95f59e04e Author: Alan Coopersmith Date: Sun May 15 20:52:39 2005 +0000 Add settings to bring Solaris builds closer to the ones Sun packages in Solaris. Adds "BuildLikeSun" options for areas Sun deviates from the way Xorg is packaged on other platforms. See comment in sun.cf for details. Also, use system-provided Expat on Solaris 10 and other cleanups. Set shared library versions for Solaris builds to match versions used in Solaris. Add missing SharedXfixesReqs and SharedXdamageReqs. Add -solarisabi option to create XtStrings code compatibile with existing Solaris binaries. (Off by default, on if "BuildLikeSun" is set in sun.cf) commit 149898492fe56f6a096a875375faa7323f7e96f4 Author: Alexander Gottwald Date: Wed Apr 20 09:35:50 2005 +0000 Bugzilla #3072 (https://bugs.freedesktop.org/show_bug.cgi?id=3072) attachment #2469 (https://bugs.freedesktop.org/attachment.cgi?id=2469): fix uninitialized pointer in libXt on Win32. Reported by Dave Williss commit 85eb751e4e1683af6cee3ee9dce29f74911a639d Author: Matthieu Herrb Date: Mon Feb 21 21:08:27 2005 +0000 Convert lib/Xt to ANSI C (Thomas Dickey). Fixes for a few valgrind warnings (Thomas Dickey). commit 94150cb72d9d641c64325cd70323d93b9a3701a5 Author: Alan Coopersmith Date: Wed Jan 19 19:27:34 2005 +0000 doc/man/Xt/Imakefile doc/man/Xt/XtAddCbk.man doc/man/Xt/XtAddIn.man doc/man/Xt/XtAllocGC.man doc/man/Xt/XtAppE.man doc/man/Xt/XtAppEM.man doc/man/Xt/XtAppSTC.man doc/man/Xt/XtClass.man doc/man/Xt/XtConvSt.man doc/man/Xt/XtConvert.man doc/man/Xt/XtCreateSR.man doc/man/Xt/XtDisplayI.man doc/man/Xt/XtErr.man doc/man/Xt/XtErrM.man doc/man/Xt/XtExtEvDis.man doc/man/Xt/XtGEDB.man doc/man/Xt/XtGetANC.man doc/man/Xt/XtGetActK.man doc/man/Xt/XtGetAres.man doc/man/Xt/XtGetSTO.man doc/man/Xt/XtGetSres.man doc/man/Xt/XtInit.man doc/man/Xt/XtInitWC.man doc/man/Xt/XtManChild.man doc/man/Xt/XtOffset.man doc/man/Xt/XtOwnSel.man doc/man/Xt/XtRegDraw.man doc/man/Xt/XtResPA.man doc/man/Xt/XtSession.man doc/man/Xt/XtSetLangP.man doc/man/Xt/XtSetSP.man doc/man/Xt/XtSetVal.man //bugs.freedesktop.org/show_bug.cgi?id=2331> Attachment #1718 commit cd85103c7298be4a13909c07c95f5d53b069966e Author: Matthieu Herrb Date: Sun Jan 2 11:08:49 2005 +0000 Fix formatting. commit 054445f4238a98b7ea7910778ed110f5eff9d4f2 Author: Matthieu Herrb Date: Sun Oct 3 20:08:42 2004 +0000 Xt Manual pages fixes from Dmitry Bolkhovitanov (Bugzilla #1498, $1499). commit 045e3de107523f28e765da8239d6afa9f51d6ba2 Author: Kevin E Martin Date: Wed Aug 11 21:14:17 2004 +0000 Apply PPC64 build patch (Bug #303, Mike A. Harris, Alan Coopersmith). commit 7a541dcaa28b6f97a647d0d8e0873f665ea372aa Author: Eric Anholt Date: Sat Jul 31 01:21:51 2004 +0000 Rename some COMPOSITE macros and enums to avoid conflicting with the COMPOSITE extension's new macro. These appear to only be used internally. commit b83924fa380f9e68c0c8a9dada6094c95fc44441 Author: Egbert Eich Date: Fri Apr 23 18:43:54 2004 +0000 Merging XORG-CURRENT into trunk commit 1b4f95dee32054b4d14ed5f78e47371c544fc5ac Author: Egbert Eich Date: Sun Mar 14 08:32:26 2004 +0000 Importing vendor version xf86-4_4_99_1 on Sun Mar 14 00:26:39 PST 2004 commit 83e661ed1cec6b14c60adbd48ab8588f6b13c391 Author: Egbert Eich Date: Wed Mar 3 12:11:32 2004 +0000 Importing vendor version xf86-4_4_0 on Wed Mar 3 04:09:24 PST 2004 commit 77d281253982e2ebe27430f38b993927d879a005 Author: Egbert Eich Date: Thu Feb 26 13:35:34 2004 +0000 readding XFree86's cvs IDs commit 0efb2e616125953a3773b9b6c9a530ad30ce9bc8 Author: Egbert Eich Date: Thu Feb 26 09:22:45 2004 +0000 Importing vendor version xf86-4_3_99_903 on Wed Feb 26 01:21:00 PST 2004 commit 036e955dfcc31d3b6c081f84e4f0b85969ccdd12 Author: Egbert Eich Date: Thu Jan 29 08:08:07 2004 +0000 Importing vendor version xf86-012804-2330 on Thu Jan 29 00:06:33 PST 2004 commit f81d7ef72c9b4f13e33efa812bed9446657ed003 Author: Kaleb Keithley Date: Tue Nov 25 19:28:16 2003 +0000 XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks commit bdc0667ef29e24b1a2188b11546d843a7d3e5ef6 Author: Kaleb Keithley Date: Fri Nov 14 16:48:49 2003 +0000 XFree86 4.3.0.1 commit 6a13c9e08bb042c81ae904c44a38a50d785c824e Author: Kaleb Keithley Date: Fri Nov 14 16:48:49 2003 +0000 Initial revision commit 0117b0b441d8835a11a2886f3c8aed937dcffa9d Author: Kaleb Keithley Date: Fri Nov 14 15:54:39 2003 +0000 R6.6 is the Xorg base-line - Implement versioning scheme - Change bug address to point to bugzilla bug entry form - Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to reenable it) - Fix makedepend to use pkgconfig and pass distcheck - UpdalibXt-1.1.5/config.h.in000064401431060000012000000041571252061034600151120ustar00alancstaff00002660200006/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `ws2_32' library (-lws2_32). */ #undef HAVE_LIBWS2_32 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if Xalloca.h should include */ #undef INCLUDE_ALLOCA_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Major version of this package */ #undef PACKAGE_VERSION_MAJOR /* Minor version of this package */ #undef PACKAGE_VERSION_MINOR /* Patch version of this package */ #undef PACKAGE_VERSION_PATCHLEVEL /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* poll() function is available */ #undef USE_POLL /* Version number of package */ #undef VERSION /* Define to 1 to use XKB for keysym resolution. */ #undef XKB /* app default data directory */ #undef appdefaultdir libXt-1.1.5/configure.ac000064401431060000012000000144371252061032400153530ustar00alancstaff00002660200006# # Copyright © 2003 Keith Packard, Noah Levitt # # 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 Keith Packard not be used in # advertising or publicity pertaining to distribution of the software without # specific, written prior permission. Keith Packard makes no # representations about the suitability of this software for any purpose. It # is provided "as is" without express or implied warranty. # # KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, # INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO # EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, # DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. # # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([libXt], [1.1.5], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXt]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) # Initialize Automake AM_INIT_AUTOMAKE([foreign dist-bzip2]) # Initialize libtool AC_PROG_LIBTOOL # Require X.Org macros 1.13 or later for XORG_ENABLE_UNIT_TESTS m4_ifndef([XORG_MACROS_VERSION], [m4_fatal([must install xorg-macros 1.13 or later before running autoconf/autogen])]) XORG_MACROS_VERSION(1.13) XORG_DEFAULT_OPTIONS XORG_CHECK_MALLOC_ZERO XORG_ENABLE_SPECS XORG_WITH_XMLTO(0.0.20) XORG_WITH_FOP XORG_WITH_XSLTPROC XORG_CHECK_SGML_DOCTOOLS(1.01) XORG_PROG_RAWCPP XORG_WITH_PERL # Checks for header files. AC_CHECK_HEADER([alloca.h], AC_DEFINE(INCLUDE_ALLOCA_H, 1, [Define to 1 if Xalloca.h should include ])) # Obtain compiler/linker options for depedencies PKG_CHECK_MODULES(XT, sm ice x11 xproto kbproto) # Set-up variables to use build machine compiler when cross-compiling if test x"$CC_FOR_BUILD" = x; then if test x"$cross_compiling" = xyes; then AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc) else CC_FOR_BUILD="$CC" fi fi AC_SUBST([CC_FOR_BUILD]) DEFAULT_CPPFLAGS_FOR_BUILD="${CPPFLAGS}" AC_CHECK_FUNC(asprintf, [DEFAULT_CPPFLAGS_FOR_BUILD="${DEFAULT_CPPFLAGS_FOR_BUILD} -DHAVE_ASPRINTF -D_GNU_SOURCE"]) CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${DEFAULT_CPPFLAGS_FOR_BUILD}} AC_SUBST(CPPFLAGS_FOR_BUILD) DEFAULT_CFLAGS_FOR_BUILD="${CFLAGS} ${CWARNFLAGS}" CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${DEFAULT_CFLAGS_FOR_BUILD}} AC_SUBST(CFLAGS_FOR_BUILD) LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}} AC_SUBST(LDFLAGS_FOR_BUILD) # Map function checks to old Imake #defines case $host_os in # darwin through Snow Leopard has poll() but can't be used to poll character devices. darwin@<:@789@:>@*|darwin10*) ;; darwin*) _ac_xorg_macosx_version_min="" if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\(@<:@^ @:>@*\).*$/\1/'` else _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET fi case $_ac_xorg_macosx_version_min in 10.@<:@0123456@:>@|10.@<:@0123456@:>@.*) ;; *) AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) ;; esac unset _ac_xorg_macosx_version_min ;; *) AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) ;; esac # Link with winsock if mingw target case $host_os in *mingw*) AC_HAVE_LIBRARY(ws2_32) ;; *) ;; esac # Options AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Disable XKB support]), XKB="$enableval", XKB="yes") if test "x$XKB" = "xyes" ; then AC_DEFINE(XKB, 1, [Define to 1 to use XKB for keysym resolution.]) fi # --enable-unit-tests XORG_ENABLE_UNIT_TESTS XORG_WITH_GLIB([2.16]) # Memory checking support case $host_os in solaris*) AC_CHECK_LIB([umem], [umem_alloc], [MALLOC_DEBUG_ENV='LD_PRELOAD=libumem.so UMEM_DEBUG=default']) ;; *-gnu*) # GNU libc - Value is used as a single byte bit pattern, # both directly and inverted, so should not be 0 or 255. MALLOC_DEBUG_ENV='MALLOC_PERTURB_=15' ;; *bsd*|darwin*) MALLOC_DEBUG_ENV='MallocPreScribble=1 MallocScribble=1' ;; esac AC_SUBST([MALLOC_DEBUG_ENV]) # Replaces XFileSearchPathDefault from Imake configs XFILESEARCHPATHDEFAULT='$(sysconfdir)/X11/%L/%T/%N%C%S:$(sysconfdir)/X11/%l/%T/%N%C%S:$(sysconfdir)/X11/%T/%N%C%S:$(sysconfdir)/X11/%L/%T/%N%S:$(sysconfdir)/X11/%l/%T/%N%S:$(sysconfdir)/X11/%T/%N%S:$(datadir)/X11/%L/%T/%N%C%S:$(datadir)/X11/%l/%T/%N%C%S:$(datadir)/X11/%T/%N%C%S:$(datadir)/X11/%L/%T/%N%S:$(datadir)/X11/%l/%T/%N%S:$(datadir)/X11/%T/%N%S:$(libdir)/X11/%L/%T/%N%C%S:$(libdir)/X11/%l/%T/%N%C%S:$(libdir)/X11/%T/%N%C%S:$(libdir)/X11/%L/%T/%N%S:$(libdir)/X11/%l/%T/%N%S:$(libdir)/X11/%T/%N%S' AC_ARG_WITH(xfile-search-path, AS_HELP_STRING([--with-xfile-search-path=], [Set path to search for app-defaults and other files]), [XFILESEARCHPATHDEFAULT="$withval"], []) AC_SUBST([XFILESEARCHPATHDEFAULT]) AC_ARG_WITH(appdefaultdir, AS_HELP_STRING([--with-appdefaultdir=], [Set app-default directory (default: ${datadir}/X11/app-defaults)]), [appdefaultdir="$withval"], [appdefaultdir=${datadir}/X11/app-defaults]) AX_DEFINE_DIR([appdefaultdir], [appdefaultdir], [app default data directory]) # Replacement for Imake ToolkitStringsABIOptions, controls string tables # generated by util/string.list in StringDefs.h & Shell.h case $host_os in solaris*) # Solaris uses -intelabi even on SPARC STRINGSABIOPTIONS="-intelabi -solarisabinames" ;; sco* | svr4*) case $host_cpu in i*86) STRINGSABIOPTIONS="-intelabi" ;; *) STRINGSABIOPTIONS="" ;; esac ;; esac AC_SUBST(STRINGSABIOPTIONS) ERRORDBDIR=${datadir}/X11 AC_SUBST(ERRORDBDIR) case $host_os in darwin*) OS_CFLAGS="-Wl,-flat_namespace" ;; *) OS_CFLAGS= ;; esac XT_CFLAGS="$XT_CFLAGS $OS_CFLAGS" AC_CONFIG_FILES([Makefile src/Makefile util/Makefile include/Makefile man/Makefile specs/Makefile test/Makefile xt.pc]) AC_OUTPUT libXt-1.1.5/configure000075501431060000012000023270311252061034600147770ustar00alancstaff00002660200006#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libXt 1.1.5. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 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\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} as_awk_strverscmp=' # Use only awk features that work with 7th edition Unix awk (1978). # My, what an old awk you have, Mr. Solaris! END { while (length(v1) && length(v2)) { # Set d1 to be the next thing to compare from v1, and likewise for d2. # Normally this is a single character, but if v1 and v2 contain digits, # compare them as integers and fractions as strverscmp does. if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { # Split v1 and v2 into their leading digit string components d1 and d2, # and advance v1 and v2 past the leading digit strings. for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) if (d1 ~ /^0/) { if (d2 ~ /^0/) { # Compare two fractions. while (d1 ~ /^0/ && d2 ~ /^0/) { d1 = substr(d1, 2); len1-- d2 = substr(d2, 2); len2-- } if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { # The two components differ in length, and the common prefix # contains only leading zeros. Consider the longer to be less. d1 = -len1 d2 = -len2 } else { # Otherwise, compare as strings. d1 = "x" d1 d2 = "x" d2 } } else { # A fraction is less than an integer. exit 1 } } else { if (d2 ~ /^0/) { # An integer is greater than a fraction. exit 2 } else { # Compare two integers. d1 += 0 d2 += 0 } } } else { # The normal case, without worrying about digits. d1 = substr(v1, 1, 1); v1 = substr(v1, 2) d2 = substr(v2, 1, 1); v2 = substr(v2, 2) } if (d1 < d2) exit 1 if (d1 > d2) exit 2 } # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), # which mishandles some comparisons of empty strings to integers. if (length(v2)) exit 1 if (length(v1)) exit 2 } ' test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libXt' PACKAGE_TARNAME='libXt' PACKAGE_VERSION='1.1.5' PACKAGE_STRING='libXt 1.1.5' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' ac_unique_file="Makefile.am" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS ERRORDBDIR STRINGSABIOPTIONS appdefaultdir XFILESEARCHPATHDEFAULT MALLOC_DEBUG_ENV HAVE_GLIB_FALSE HAVE_GLIB_TRUE GLIB_LIBS GLIB_CFLAGS ENABLE_UNIT_TESTS_FALSE ENABLE_UNIT_TESTS_TRUE XORG_MALLOC_DEBUG_ENV LDFLAGS_FOR_BUILD CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CC_FOR_BUILD XT_LIBS XT_CFLAGS HAVE_PERL_FALSE HAVE_PERL_TRUE PERL TRADITIONALCPPFLAGS RAWCPPFLAGS RAWCPP HAVE_STYLESHEETS_FALSE HAVE_STYLESHEETS_TRUE XSL_STYLESHEET STYLESHEET_SRCDIR XORG_SGML_PATH HAVE_XSLTPROC_FALSE HAVE_XSLTPROC_TRUE XSLTPROC HAVE_FOP_FALSE HAVE_FOP_TRUE FOP HAVE_XMLTO_FALSE HAVE_XMLTO_TRUE HAVE_XMLTO_TEXT_FALSE HAVE_XMLTO_TEXT_TRUE XMLTO ENABLE_SPECS_FALSE ENABLE_SPECS_TRUE XTMALLOC_ZERO_CFLAGS XMALLOC_ZERO_CFLAGS MALLOC_ZERO_CFLAGS MAN_SUBSTS XORG_MAN_PAGE ADMIN_MAN_DIR DRIVER_MAN_DIR MISC_MAN_DIR FILE_MAN_DIR LIB_MAN_DIR APP_MAN_DIR ADMIN_MAN_SUFFIX DRIVER_MAN_SUFFIX MISC_MAN_SUFFIX FILE_MAN_SUFFIX LIB_MAN_SUFFIX APP_MAN_SUFFIX INSTALL_CMD PKG_CONFIG CHANGELOG_CMD STRICT_CFLAGS CWARNFLAGS BASE_CFLAGS CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_shared enable_static with_pic enable_fast_install enable_dependency_tracking with_gnu_ld with_sysroot enable_libtool_lock enable_selective_werror enable_strict_compilation enable_malloc0returnsnull enable_specs with_xmlto with_fop with_xsltproc with_perl enable_xkb enable_unit_tests with_glib with_xfile_search_path with_appdefaultdir ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG XMLTO FOP XSLTPROC PERL XT_CFLAGS XT_LIBS XORG_MALLOC_DEBUG_ENV GLIB_CFLAGS GLIB_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libXt 1.1.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libXt] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libXt 1.1.5:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --disable-selective-werror Turn off selective compiler errors. (default: enabled) --enable-strict-compilation Enable all warnings from compiler and make them errors (default: disabled) --enable-malloc0returnsnull malloc(0) returns NULL (default: auto) --enable-specs Enable building the specs (default: yes) --disable-xkb Disable XKB support --enable-unit-tests Enable building unit test cases (default: auto) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-xmlto Use xmlto to regenerate documentation (default: auto) --with-fop Use fop to regenerate documentation (default: auto) --with-xsltproc Use xsltproc for the transformation of XML documents (default: auto) --with-perl Use perl for extracting information from files (default: auto) --with-glib Use GLib library for unit testing (default: auto) --with-xfile-search-path= Set path to search for app-defaults and other files --with-appdefaultdir= Set app-default directory (default: ${datadir}/X11/app-defaults) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility XMLTO Path to xmlto command FOP Path to fop command XSLTPROC Path to xsltproc command PERL Path to perl command XT_CFLAGS C compiler flags for XT, overriding pkg-config XT_LIBS linker flags for XT, overriding pkg-config XORG_MALLOC_DEBUG_ENV Environment variables to enable memory checking in tests GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libXt configure 1.1.5 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------------------------------------------------- ## ## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ## ## ---------------------------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libXt $as_me 1.1.5, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` 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 || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" # Initialize Automake am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # 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]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != 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 # 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. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi 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 # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 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 # Define the identity of the package. PACKAGE='libXt' VERSION='1.1.5' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Initialize libtool case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # 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' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # 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*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else 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_CC_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 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 10 /bin/sh. echo '/* dummy */' > 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_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else 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 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } 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 if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else 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 fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else 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 fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #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 fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/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*) 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # 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 # 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 # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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_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 #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_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_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && 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" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 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 fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi 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|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else 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" >&5 $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 >&5 # 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 >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else 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" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $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 >&5 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 >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } 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 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; 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 else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; 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 else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; 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 else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; 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 else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF 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 for cc_temp in $compiler""; 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-%%"` # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else 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 ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" 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 fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else 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 ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" 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 fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$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);}' # 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 # 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 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* 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* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # 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\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 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 lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-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_prog_compiler_pic='-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 lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; 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_prog_compiler_pic='-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_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-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). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-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_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-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_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # 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\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 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 lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" 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>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=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\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 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_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $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* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=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\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 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_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $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* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # 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'. exclude_expsyms='_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. 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 ;; esac ld_shlibs=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 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${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 whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= 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 ld_shlibs=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 archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$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)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+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 archive_cmds='$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... archive_expsym_cmds='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 ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${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. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='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 whole_archive_flag_spec='${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 whole_archive_flag_spec='${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 whole_archive_flag_spec= 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 whole_archive_flag_spec='${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' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${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' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='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 whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='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 ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$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 ld_shlibs=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 archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=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 hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$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. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=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 export_symbols_cmds='$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 export_symbols_cmds='$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. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${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 hardcode_direct=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 hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= 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 export_dynamic_flag_spec='${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. always_export_symbols=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. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`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_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$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 hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$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. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`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_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${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. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$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 archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$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)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-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 hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # 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. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='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, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='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 hardcode_libdir_flag_spec=' ' allow_undefined_flag=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. archive_cmds='$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. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_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 archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="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}" module_expsym_cmds="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}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=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*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$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 archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$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*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # 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) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" 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>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$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 archive_cmds='$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' archive_expsym_cmds='$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 archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$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' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$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 allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$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 archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$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' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$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' archive_expsym_cmds='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 hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='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='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='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}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='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 hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=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 whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=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. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$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. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } 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}' 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`' 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 if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi 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' ;; 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != 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, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = 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 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; 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" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross 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 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } 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 striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } 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" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } 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" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Require X.Org macros 1.13 or later for XORG_ENABLE_UNIT_TESTS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_fn_c_check_decl "$LINENO" "__clang__" "ac_cv_have_decl___clang__" "$ac_includes_default" if test "x$ac_cv_have_decl___clang__" = xyes; then : CLANGCC="yes" else CLANGCC="no" fi ac_fn_c_check_decl "$LINENO" "__INTEL_COMPILER" "ac_cv_have_decl___INTEL_COMPILER" "$ac_includes_default" if test "x$ac_cv_have_decl___INTEL_COMPILER" = xyes; then : INTELCC="yes" else INTELCC="no" fi ac_fn_c_check_decl "$LINENO" "__SUNPRO_C" "ac_cv_have_decl___SUNPRO_C" "$ac_includes_default" if test "x$ac_cv_have_decl___SUNPRO_C" = xyes; then : SUNCC="yes" else SUNCC="no" fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check whether --enable-selective-werror was given. if test "${enable_selective_werror+set}" = set; then : enableval=$enable_selective_werror; SELECTIVE_WERROR=$enableval else SELECTIVE_WERROR=yes fi # -v is too short to test reliably with XORG_TESTSET_CFLAG if test "x$SUNCC" = "xyes"; then BASE_CFLAGS="-v" else BASE_CFLAGS="" fi # This chunk of warnings were those that existed in the legacy CWARNFLAGS xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wall" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wall" >&5 $as_echo_n "checking if $CC supports -Wall... " >&6; } cacheid=xorg_cv_cc_flag__Wall if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wall" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wpointer-arith" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wpointer-arith" >&5 $as_echo_n "checking if $CC supports -Wpointer-arith... " >&6; } cacheid=xorg_cv_cc_flag__Wpointer_arith if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wpointer-arith" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-declarations" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-declarations" >&5 $as_echo_n "checking if $CC supports -Wmissing-declarations... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_declarations if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-declarations" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wformat=2" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wformat=2" >&5 $as_echo_n "checking if $CC supports -Wformat=2... " >&6; } cacheid=xorg_cv_cc_flag__Wformat_2 if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wformat=2" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wformat" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wformat" >&5 $as_echo_n "checking if $CC supports -Wformat... " >&6; } cacheid=xorg_cv_cc_flag__Wformat if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wformat" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wstrict-prototypes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wstrict-prototypes" >&5 $as_echo_n "checking if $CC supports -Wstrict-prototypes... " >&6; } cacheid=xorg_cv_cc_flag__Wstrict_prototypes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wstrict-prototypes" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-prototypes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-prototypes" >&5 $as_echo_n "checking if $CC supports -Wmissing-prototypes... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_prototypes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-prototypes" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wnested-externs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wnested-externs" >&5 $as_echo_n "checking if $CC supports -Wnested-externs... " >&6; } cacheid=xorg_cv_cc_flag__Wnested_externs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wnested-externs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wbad-function-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wbad-function-cast" >&5 $as_echo_n "checking if $CC supports -Wbad-function-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wbad_function_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wbad-function-cast" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wold-style-definition" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wold-style-definition" >&5 $as_echo_n "checking if $CC supports -Wold-style-definition... " >&6; } cacheid=xorg_cv_cc_flag__Wold_style_definition if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wold-style-definition" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -fd" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fd" >&5 $as_echo_n "checking if $CC supports -fd... " >&6; } cacheid=xorg_cv_cc_flag__fd if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -fd" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wdeclaration-after-statement" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wdeclaration-after-statement" >&5 $as_echo_n "checking if $CC supports -Wdeclaration-after-statement... " >&6; } cacheid=xorg_cv_cc_flag__Wdeclaration_after_statement if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wdeclaration-after-statement" found="yes" fi fi # This chunk adds additional warnings that could catch undesired effects. xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wunused" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wunused" >&5 $as_echo_n "checking if $CC supports -Wunused... " >&6; } cacheid=xorg_cv_cc_flag__Wunused if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wunused" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wuninitialized" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wuninitialized" >&5 $as_echo_n "checking if $CC supports -Wuninitialized... " >&6; } cacheid=xorg_cv_cc_flag__Wuninitialized if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wuninitialized" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wshadow" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wshadow" >&5 $as_echo_n "checking if $CC supports -Wshadow... " >&6; } cacheid=xorg_cv_cc_flag__Wshadow if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wshadow" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-noreturn" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-noreturn" >&5 $as_echo_n "checking if $CC supports -Wmissing-noreturn... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_noreturn if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-noreturn" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-format-attribute" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-format-attribute" >&5 $as_echo_n "checking if $CC supports -Wmissing-format-attribute... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_format_attribute if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-format-attribute" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wredundant-decls" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wredundant-decls" >&5 $as_echo_n "checking if $CC supports -Wredundant-decls... " >&6; } cacheid=xorg_cv_cc_flag__Wredundant_decls if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wredundant-decls" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wlogical-op" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wlogical-op" >&5 $as_echo_n "checking if $CC supports -Wlogical-op... " >&6; } cacheid=xorg_cv_cc_flag__Wlogical_op if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wlogical-op" found="yes" fi fi # These are currently disabled because they are noisy. They will be enabled # in the future once the codebase is sufficiently modernized to silence # them. For now, I don't want them to drown out the other warnings. # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual]) # Turn some warnings into errors, so we don't accidently get successful builds # when there are problems that should be fixed. if test "x$SELECTIVE_WERROR" = "xyes" ; then xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=implicit" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=implicit" >&5 $as_echo_n "checking if $CC supports -Werror=implicit... " >&6; } cacheid=xorg_cv_cc_flag__Werror_implicit if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=implicit" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" >&5 $as_echo_n "checking if $CC supports -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_NO_EXPLICIT_TYPE_GIVEN__errwarn_E_NO_IMPLICIT_DECL_ALLOWED if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=nonnull" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=nonnull" >&5 $as_echo_n "checking if $CC supports -Werror=nonnull... " >&6; } cacheid=xorg_cv_cc_flag__Werror_nonnull if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=nonnull" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=init-self" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=init-self" >&5 $as_echo_n "checking if $CC supports -Werror=init-self... " >&6; } cacheid=xorg_cv_cc_flag__Werror_init_self if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=init-self" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=main" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=main" >&5 $as_echo_n "checking if $CC supports -Werror=main... " >&6; } cacheid=xorg_cv_cc_flag__Werror_main if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=main" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=missing-braces" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=missing-braces" >&5 $as_echo_n "checking if $CC supports -Werror=missing-braces... " >&6; } cacheid=xorg_cv_cc_flag__Werror_missing_braces if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=missing-braces" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=sequence-point" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=sequence-point" >&5 $as_echo_n "checking if $CC supports -Werror=sequence-point... " >&6; } cacheid=xorg_cv_cc_flag__Werror_sequence_point if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=sequence-point" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=return-type" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=return-type" >&5 $as_echo_n "checking if $CC supports -Werror=return-type... " >&6; } cacheid=xorg_cv_cc_flag__Werror_return_type if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=return-type" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_FUNC_HAS_NO_RETURN_STMT" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_FUNC_HAS_NO_RETURN_STMT" >&5 $as_echo_n "checking if $CC supports -errwarn=E_FUNC_HAS_NO_RETURN_STMT... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_FUNC_HAS_NO_RETURN_STMT if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_FUNC_HAS_NO_RETURN_STMT" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=trigraphs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=trigraphs" >&5 $as_echo_n "checking if $CC supports -Werror=trigraphs... " >&6; } cacheid=xorg_cv_cc_flag__Werror_trigraphs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=trigraphs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=array-bounds" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=array-bounds" >&5 $as_echo_n "checking if $CC supports -Werror=array-bounds... " >&6; } cacheid=xorg_cv_cc_flag__Werror_array_bounds if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=array-bounds" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=write-strings" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=write-strings" >&5 $as_echo_n "checking if $CC supports -Werror=write-strings... " >&6; } cacheid=xorg_cv_cc_flag__Werror_write_strings if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=write-strings" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=address" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=address" >&5 $as_echo_n "checking if $CC supports -Werror=address... " >&6; } cacheid=xorg_cv_cc_flag__Werror_address if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=address" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=int-to-pointer-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=int-to-pointer-cast" >&5 $as_echo_n "checking if $CC supports -Werror=int-to-pointer-cast... " >&6; } cacheid=xorg_cv_cc_flag__Werror_int_to_pointer_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=int-to-pointer-cast" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_BAD_PTR_INT_COMBINATION" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_BAD_PTR_INT_COMBINATION" >&5 $as_echo_n "checking if $CC supports -errwarn=E_BAD_PTR_INT_COMBINATION... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_BAD_PTR_INT_COMBINATION if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_BAD_PTR_INT_COMBINATION" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=pointer-to-int-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=pointer-to-int-cast" >&5 $as_echo_n "checking if $CC supports -Werror=pointer-to-int-cast... " >&6; } cacheid=xorg_cv_cc_flag__Werror_pointer_to_int_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=pointer-to-int-cast" found="yes" fi fi # Also -errwarn=E_BAD_PTR_INT_COMBINATION else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT" >&5 $as_echo "$as_me: WARNING: You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT" >&2;} xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wimplicit" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wimplicit" >&5 $as_echo_n "checking if $CC supports -Wimplicit... " >&6; } cacheid=xorg_cv_cc_flag__Wimplicit if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wimplicit" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wnonnull" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wnonnull" >&5 $as_echo_n "checking if $CC supports -Wnonnull... " >&6; } cacheid=xorg_cv_cc_flag__Wnonnull if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wnonnull" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Winit-self" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Winit-self" >&5 $as_echo_n "checking if $CC supports -Winit-self... " >&6; } cacheid=xorg_cv_cc_flag__Winit_self if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Winit-self" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmain" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmain" >&5 $as_echo_n "checking if $CC supports -Wmain... " >&6; } cacheid=xorg_cv_cc_flag__Wmain if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmain" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-braces" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-braces" >&5 $as_echo_n "checking if $CC supports -Wmissing-braces... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_braces if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-braces" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wsequence-point" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wsequence-point" >&5 $as_echo_n "checking if $CC supports -Wsequence-point... " >&6; } cacheid=xorg_cv_cc_flag__Wsequence_point if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wsequence-point" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wreturn-type" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wreturn-type" >&5 $as_echo_n "checking if $CC supports -Wreturn-type... " >&6; } cacheid=xorg_cv_cc_flag__Wreturn_type if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wreturn-type" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wtrigraphs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wtrigraphs" >&5 $as_echo_n "checking if $CC supports -Wtrigraphs... " >&6; } cacheid=xorg_cv_cc_flag__Wtrigraphs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wtrigraphs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Warray-bounds" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Warray-bounds" >&5 $as_echo_n "checking if $CC supports -Warray-bounds... " >&6; } cacheid=xorg_cv_cc_flag__Warray_bounds if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Warray-bounds" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wwrite-strings" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wwrite-strings" >&5 $as_echo_n "checking if $CC supports -Wwrite-strings... " >&6; } cacheid=xorg_cv_cc_flag__Wwrite_strings if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wwrite-strings" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Waddress" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Waddress" >&5 $as_echo_n "checking if $CC supports -Waddress... " >&6; } cacheid=xorg_cv_cc_flag__Waddress if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Waddress" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wint-to-pointer-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wint-to-pointer-cast" >&5 $as_echo_n "checking if $CC supports -Wint-to-pointer-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wint_to_pointer_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wint-to-pointer-cast" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wpointer-to-int-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wpointer-to-int-cast" >&5 $as_echo_n "checking if $CC supports -Wpointer-to-int-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wpointer_to_int_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wpointer-to-int-cast" found="yes" fi fi fi CWARNFLAGS="$BASE_CFLAGS" if test "x$GCC" = xyes ; then CWARNFLAGS="$CWARNFLAGS -fno-strict-aliasing" fi # Check whether --enable-strict-compilation was given. if test "${enable_strict_compilation+set}" = set; then : enableval=$enable_strict_compilation; STRICT_COMPILE=$enableval else STRICT_COMPILE=no fi STRICT_CFLAGS="" xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -pedantic" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -pedantic" >&5 $as_echo_n "checking if $CC supports -pedantic... " >&6; } cacheid=xorg_cv_cc_flag__pedantic if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -pedantic" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror" >&5 $as_echo_n "checking if $CC supports -Werror... " >&6; } cacheid=xorg_cv_cc_flag__Werror if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -Werror" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn" >&5 $as_echo_n "checking if $CC supports -errwarn... " >&6; } cacheid=xorg_cv_cc_flag__errwarn if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -errwarn" found="yes" fi fi # Earlier versions of gcc (eg: 4.2) support -Werror=attributes, but do not # activate it with -Werror, so we add it here explicitly. xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=attributes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=attributes" >&5 $as_echo_n "checking if $CC supports -Werror=attributes... " >&6; } cacheid=xorg_cv_cc_flag__Werror_attributes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -Werror=attributes" found="yes" fi fi if test "x$STRICT_COMPILE" = "xyes"; then BASE_CFLAGS="$BASE_CFLAGS $STRICT_CFLAGS" CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1` _ACEOF PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` if test "x$PVM" = "x"; then PVM="0" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_MINOR $PVM _ACEOF PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` if test "x$PVP" = "x"; then PVP="0" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_PATCHLEVEL $PVP _ACEOF CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ || (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ echo 'git directory not found: installing possibly empty changelog.' >&2)" macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ || (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi if test x$APP_MAN_DIR = x ; then APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' fi if test x$LIB_MAN_SUFFIX = x ; then LIB_MAN_SUFFIX=3 fi if test x$LIB_MAN_DIR = x ; then LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' fi if test x$FILE_MAN_SUFFIX = x ; then case $host_os in solaris*) FILE_MAN_SUFFIX=4 ;; *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' fi if test x$MISC_MAN_SUFFIX = x ; then case $host_os in solaris*) MISC_MAN_SUFFIX=5 ;; *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' fi if test x$DRIVER_MAN_SUFFIX = x ; then case $host_os in solaris*) DRIVER_MAN_SUFFIX=7 ;; *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' fi if test x$ADMIN_MAN_SUFFIX = x ; then case $host_os in solaris*) ADMIN_MAN_SUFFIX=1m ;; *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' fi XORG_MAN_PAGE="X Version 11" MAN_SUBSTS="\ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xservername__|Xorg|g' \ -e 's|__xconfigfile__|xorg.conf|g' \ -e 's|__projectroot__|\$(prefix)|g' \ -e 's|__apploaddir__|\$(appdefaultdir)|g' \ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Check whether --enable-malloc0returnsnull was given. if test "${enable_malloc0returnsnull+set}" = set; then : enableval=$enable_malloc0returnsnull; MALLOC_ZERO_RETURNS_NULL=$enableval else MALLOC_ZERO_RETURNS_NULL=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc(0) returns NULL" >&5 $as_echo_n "checking whether malloc(0) returns NULL... " >&6; } if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then if ${xorg_cv_malloc0_returns_null+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *m0, *r0, *c0, *p; m0 = malloc(0); p = malloc(10); r0 = realloc(p,0); c0 = calloc(0,10); exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : xorg_cv_malloc0_returns_null=yes else xorg_cv_malloc0_returns_null=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi MALLOC_ZERO_RETURNS_NULL=$xorg_cv_malloc0_returns_null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MALLOC_ZERO_RETURNS_NULL" >&5 $as_echo "$MALLOC_ZERO_RETURNS_NULL" >&6; } if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" else MALLOC_ZERO_CFLAGS="" XMALLOC_ZERO_CFLAGS="" XTMALLOC_ZERO_CFLAGS="" fi # Check whether --enable-specs was given. if test "${enable_specs+set}" = set; then : enableval=$enable_specs; build_specs=$enableval else build_specs=yes fi if test x$build_specs = xyes; then ENABLE_SPECS_TRUE= ENABLE_SPECS_FALSE='#' else ENABLE_SPECS_TRUE='#' ENABLE_SPECS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build functional specifications" >&5 $as_echo_n "checking whether to build functional specifications... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $build_specs" >&5 $as_echo "$build_specs" >&6; } # Check whether --with-xmlto was given. if test "${with_xmlto+set}" = set; then : withval=$with_xmlto; use_xmlto=$withval else use_xmlto=auto fi if test "x$use_xmlto" = x"auto"; then # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLTO+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLTO" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto not found - documentation targets will be skipped" >&5 $as_echo "$as_me: WARNING: xmlto not found - documentation targets will be skipped" >&2;} have_xmlto=no else have_xmlto=yes fi elif test "x$use_xmlto" = x"yes" ; then # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLTO+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLTO" = "x"; then as_fn_error $? "--with-xmlto=yes specified but xmlto not found in PATH" "$LINENO" 5 fi have_xmlto=yes elif test "x$use_xmlto" = x"no" ; then if test "x$XMLTO" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&2;} fi have_xmlto=no else as_fn_error $? "--with-xmlto expects 'yes' or 'no'" "$LINENO" 5 fi # Test for a minimum version of xmlto, if provided. if test "$have_xmlto" = yes; then # scrape the xmlto version { $as_echo "$as_me:${as_lineno-$LINENO}: checking the xmlto version" >&5 $as_echo_n "checking the xmlto version... " >&6; } xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xmlto_version" >&5 $as_echo "$xmlto_version" >&6; } as_arg_v1=$xmlto_version as_arg_v2=0.0.20 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : if test "x$use_xmlto" = xauto; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto version $xmlto_version found, but 0.0.20 needed" >&5 $as_echo "$as_me: WARNING: xmlto version $xmlto_version found, but 0.0.20 needed" >&2;} have_xmlto=no else as_fn_error $? "xmlto version $xmlto_version found, but 0.0.20 needed" "$LINENO" 5 fi ;; #( 0) : ;; #( 2) : ;; #( *) : ;; esac fi # Test for the ability of xmlto to generate a text target have_xmlto_text=no cat > conftest.xml << "EOF" EOF if test "$have_xmlto" = yes; then : if $XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1; then : have_xmlto_text=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto cannot generate text format, this format skipped" >&5 $as_echo "$as_me: WARNING: xmlto cannot generate text format, this format skipped" >&2;} fi fi rm -f conftest.xml if test $have_xmlto_text = yes; then HAVE_XMLTO_TEXT_TRUE= HAVE_XMLTO_TEXT_FALSE='#' else HAVE_XMLTO_TEXT_TRUE='#' HAVE_XMLTO_TEXT_FALSE= fi if test "$have_xmlto" = yes; then HAVE_XMLTO_TRUE= HAVE_XMLTO_FALSE='#' else HAVE_XMLTO_TRUE='#' HAVE_XMLTO_FALSE= fi # Check whether --with-fop was given. if test "${with_fop+set}" = set; then : withval=$with_fop; use_fop=$withval else use_fop=auto fi if test "x$use_fop" = x"auto"; then # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FOP+:} false; then : $as_echo_n "(cached) " >&6 else case $FOP in [\\/]* | ?:[\\/]*) ac_cv_path_FOP="$FOP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FOP=$ac_cv_path_FOP if test -n "$FOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 $as_echo "$FOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$FOP" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fop not found - documentation targets will be skipped" >&5 $as_echo "$as_me: WARNING: fop not found - documentation targets will be skipped" >&2;} have_fop=no else have_fop=yes fi elif test "x$use_fop" = x"yes" ; then # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FOP+:} false; then : $as_echo_n "(cached) " >&6 else case $FOP in [\\/]* | ?:[\\/]*) ac_cv_path_FOP="$FOP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FOP=$ac_cv_path_FOP if test -n "$FOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 $as_echo "$FOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$FOP" = "x"; then as_fn_error $? "--with-fop=yes specified but fop not found in PATH" "$LINENO" 5 fi have_fop=yes elif test "x$use_fop" = x"no" ; then if test "x$FOP" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&2;} fi have_fop=no else as_fn_error $? "--with-fop expects 'yes' or 'no'" "$LINENO" 5 fi # Test for a minimum version of fop, if provided. if test "$have_fop" = yes; then HAVE_FOP_TRUE= HAVE_FOP_FALSE='#' else HAVE_FOP_TRUE='#' HAVE_FOP_FALSE= fi # Preserves the interface, should it be implemented later # Check whether --with-xsltproc was given. if test "${with_xsltproc+set}" = set; then : withval=$with_xsltproc; use_xsltproc=$withval else use_xsltproc=auto fi if test "x$use_xsltproc" = x"auto"; then # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSLTPROC" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xsltproc not found - cannot transform XML documents" >&5 $as_echo "$as_me: WARNING: xsltproc not found - cannot transform XML documents" >&2;} have_xsltproc=no else have_xsltproc=yes fi elif test "x$use_xsltproc" = x"yes" ; then # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSLTPROC" = "x"; then as_fn_error $? "--with-xsltproc=yes specified but xsltproc not found in PATH" "$LINENO" 5 fi have_xsltproc=yes elif test "x$use_xsltproc" = x"no" ; then if test "x$XSLTPROC" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring XSLTPROC environment variable since --with-xsltproc=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring XSLTPROC environment variable since --with-xsltproc=no was specified" >&2;} fi have_xsltproc=no else as_fn_error $? "--with-xsltproc expects 'yes' or 'no'" "$LINENO" 5 fi if test "$have_xsltproc" = yes; then HAVE_XSLTPROC_TRUE= HAVE_XSLTPROC_FALSE='#' else HAVE_XSLTPROC_TRUE='#' HAVE_XSLTPROC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X.Org SGML entities >= 1.01" >&5 $as_echo_n "checking for X.Org SGML entities >= 1.01... " >&6; } XORG_SGML_PATH= if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xorg-sgml-doctools >= 1.01\""; } >&5 ($PKG_CONFIG --exists --print-errors "xorg-sgml-doctools >= 1.01") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools` else : fi # Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing # the path and the name of the doc stylesheet if test "x$XORG_SGML_PATH" != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XORG_SGML_PATH" >&5 $as_echo "$XORG_SGML_PATH" >&6; } STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSL_STYLESHEET" != "x"; then HAVE_STYLESHEETS_TRUE= HAVE_STYLESHEETS_FALSE='#' else HAVE_STYLESHEETS_TRUE='#' HAVE_STYLESHEETS_FALSE= fi for ac_prog in cpp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RAWCPP+:} false; then : $as_echo_n "(cached) " >&6 else case $RAWCPP in [\\/]* | ?:[\\/]*) ac_cv_path_RAWCPP="$RAWCPP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RAWCPP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RAWCPP=$ac_cv_path_RAWCPP if test -n "$RAWCPP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RAWCPP" >&5 $as_echo "$RAWCPP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$RAWCPP" && break done test -n "$RAWCPP" || RAWCPP="${CPP}" # Check for flag to avoid builtin definitions - assumes unix is predefined, # which is not the best choice for supporting other OS'es, but covers most # of the ones we need for now. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $RAWCPP requires -undef" >&5 $as_echo_n "checking if $RAWCPP requires -undef... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ Does cpp redefine unix ? _ACEOF if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS=-undef { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # under Cygwin unix is still defined even with -undef elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS="-undef -ansi" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, with -ansi" >&5 $as_echo "yes, with -ansi" >&6; } else as_fn_error $? "${RAWCPP} defines unix with or without -undef. I don't know what to do." "$LINENO" 5 fi fi rm -f conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $RAWCPP requires -traditional" >&5 $as_echo_n "checking if $RAWCPP requires -traditional... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ Does cpp preserve "whitespace"? _ACEOF if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then TRADITIONALCPPFLAGS="-traditional" RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do." "$LINENO" 5 fi fi rm -f conftest.$ac_ext # Preserves the interface, should it be implemented later # Check whether --with-perl was given. if test "${with_perl+set}" = set; then : withval=$with_perl; use_perl=$withval else use_perl=auto fi if test "x$use_perl" = x"auto"; then # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - cannot extract information and report" >&5 $as_echo "$as_me: WARNING: perl not found - cannot extract information and report" >&2;} have_perl=no else have_perl=yes fi elif test "x$use_perl" = x"yes" ; then # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" = "x"; then as_fn_error $? "--with-perl=yes specified but perl not found in PATH" "$LINENO" 5 fi have_perl=yes elif test "x$use_perl" = x"no" ; then if test "x$PERL" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring PERL environment variable since --with-perl=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring PERL environment variable since --with-perl=no was specified" >&2;} fi have_perl=no else as_fn_error $? "--with-perl expects 'yes' or 'no'" "$LINENO" 5 fi if test "$have_perl" = yes; then HAVE_PERL_TRUE= HAVE_PERL_FALSE='#' else HAVE_PERL_TRUE='#' HAVE_PERL_FALSE= fi # Checks for header files. ac_fn_c_check_header_mongrel "$LINENO" "alloca.h" "ac_cv_header_alloca_h" "$ac_includes_default" if test "x$ac_cv_header_alloca_h" = xyes; then : $as_echo "#define INCLUDE_ALLOCA_H 1" >>confdefs.h fi # Obtain compiler/linker options for depedencies pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XT" >&5 $as_echo_n "checking for XT... " >&6; } if test -n "$XT_CFLAGS"; then pkg_cv_XT_CFLAGS="$XT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sm ice x11 xproto kbproto\""; } >&5 ($PKG_CONFIG --exists --print-errors "sm ice x11 xproto kbproto") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XT_CFLAGS=`$PKG_CONFIG --cflags "sm ice x11 xproto kbproto" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$XT_LIBS"; then pkg_cv_XT_LIBS="$XT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sm ice x11 xproto kbproto\""; } >&5 ($PKG_CONFIG --exists --print-errors "sm ice x11 xproto kbproto") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XT_LIBS=`$PKG_CONFIG --libs "sm ice x11 xproto kbproto" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then XT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "sm ice x11 xproto kbproto" 2>&1` else XT_PKG_ERRORS=`$PKG_CONFIG --print-errors "sm ice x11 xproto kbproto" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$XT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sm ice x11 xproto kbproto) were not met: $XT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables XT_CFLAGS and XT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables XT_CFLAGS and XT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else XT_CFLAGS=$pkg_cv_XT_CFLAGS XT_LIBS=$pkg_cv_XT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi # Set-up variables to use build machine compiler when cross-compiling if test x"$CC_FOR_BUILD" = x; then if test x"$cross_compiling" = xyes; then for ac_prog in gcc cc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 $as_echo "$CC_FOR_BUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC_FOR_BUILD" && break done else CC_FOR_BUILD="$CC" fi fi DEFAULT_CPPFLAGS_FOR_BUILD="${CPPFLAGS}" ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" if test "x$ac_cv_func_asprintf" = xyes; then : DEFAULT_CPPFLAGS_FOR_BUILD="${DEFAULT_CPPFLAGS_FOR_BUILD} -DHAVE_ASPRINTF -D_GNU_SOURCE" fi CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-${DEFAULT_CPPFLAGS_FOR_BUILD}} DEFAULT_CFLAGS_FOR_BUILD="${CFLAGS} ${CWARNFLAGS}" CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${DEFAULT_CFLAGS_FOR_BUILD}} LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}} # Map function checks to old Imake #defines case $host_os in # darwin through Snow Leopard has poll() but can't be used to poll character devices. darwin[789]*|darwin10*) ;; darwin*) _ac_xorg_macosx_version_min="" if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\([^ ]*\).*$/\1/'` else _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET fi case $_ac_xorg_macosx_version_min in 10.[0123456]|10.[0123456].*) ;; *) ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" if test "x$ac_cv_func_poll" = xyes; then : $as_echo "#define USE_POLL 1" >>confdefs.h fi ;; esac unset _ac_xorg_macosx_version_min ;; *) ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" if test "x$ac_cv_func_poll" = xyes; then : $as_echo "#define USE_POLL 1" >>confdefs.h fi ;; esac # Link with winsock if mingw target case $host_os in *mingw*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5 $as_echo_n "checking for main in -lws2_32... " >&6; } if ${ac_cv_lib_ws2_32_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lws2_32 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ws2_32_main=yes else ac_cv_lib_ws2_32_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_main" >&5 $as_echo "$ac_cv_lib_ws2_32_main" >&6; } if test "x$ac_cv_lib_ws2_32_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBWS2_32 1 _ACEOF LIBS="-lws2_32 $LIBS" fi ac_cv_lib_ws2_32=ac_cv_lib_ws2_32_main ;; *) ;; esac # Options # Check whether --enable-xkb was given. if test "${enable_xkb+set}" = set; then : enableval=$enable_xkb; XKB="$enableval" else XKB="yes" fi if test "x$XKB" = "xyes" ; then $as_echo "#define XKB 1" >>confdefs.h fi # --enable-unit-tests # Check for different types of support on different platforms case $host_os in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for umem_alloc in -lumem" >&5 $as_echo_n "checking for umem_alloc in -lumem... " >&6; } if ${ac_cv_lib_umem_umem_alloc+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lumem $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char umem_alloc (); int main () { return umem_alloc (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_umem_umem_alloc=yes else ac_cv_lib_umem_umem_alloc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_umem_umem_alloc" >&5 $as_echo "$ac_cv_lib_umem_umem_alloc" >&6; } if test "x$ac_cv_lib_umem_umem_alloc" = xyes; then : malloc_debug_env='LD_PRELOAD=libumem.so UMEM_DEBUG=default' fi ;; *-gnu*) # GNU libc - Value is used as a single byte bit pattern, # both directly and inverted, so should not be 0 or 255. malloc_debug_env='MALLOC_PERTURB_=15' ;; darwin*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib' ;; *bsd*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1' ;; esac # User supplied flags override default flags if test "x$XORG_MALLOC_DEBUG_ENV" != "x"; then malloc_debug_env="$XORG_MALLOC_DEBUG_ENV" fi XORG_MALLOC_DEBUG_ENV=$malloc_debug_env # Check whether --enable-unit-tests was given. if test "${enable_unit_tests+set}" = set; then : enableval=$enable_unit_tests; enable_unit_tests=$enableval else enable_unit_tests=auto fi if test "x$enable_unit_tests" != xno; then ENABLE_UNIT_TESTS_TRUE= ENABLE_UNIT_TESTS_FALSE='#' else ENABLE_UNIT_TESTS_TRUE='#' ENABLE_UNIT_TESTS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build unit test cases" >&5 $as_echo_n "checking whether to build unit test cases... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_unit_tests" >&5 $as_echo "$enable_unit_tests" >&6; } # Check whether --with-glib was given. if test "${with_glib+set}" = set; then : withval=$with_glib; with_glib=$withval else with_glib=auto fi have_glib=no # Do not probe GLib if user explicitly disabled unit testing if test "x$enable_unit_tests" != x"no"; then # Do not probe GLib if user explicitly disabled it if test "x$with_glib" != x"no"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 $as_echo_n "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.16" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.16" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.16" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.16" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_glib=no elif test $pkg_failed = untried; then have_glib=no else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_glib=yes fi fi fi # Not having GLib when unit testing has been explicitly requested is an error if test "x$enable_unit_tests" = x"yes"; then if test "x$have_glib" = x"no"; then as_fn_error $? "--enable-unit-tests=yes specified but glib-2.0 not found" "$LINENO" 5 fi fi # Having unit testing disabled when GLib has been explicitly requested is an error if test "x$enable_unit_tests" = x"no"; then if test "x$with_glib" = x"yes"; then as_fn_error $? "--enable-unit-tests=yes specified but glib-2.0 not found" "$LINENO" 5 fi fi # Not having GLib when it has been explicitly requested is an error if test "x$with_glib" = x"yes"; then if test "x$have_glib" = x"no"; then as_fn_error $? "--with-glib=yes specified but glib-2.0 not found" "$LINENO" 5 fi fi if test "$have_glib" = yes; then HAVE_GLIB_TRUE= HAVE_GLIB_FALSE='#' else HAVE_GLIB_TRUE='#' HAVE_GLIB_FALSE= fi # Memory checking support case $host_os in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for umem_alloc in -lumem" >&5 $as_echo_n "checking for umem_alloc in -lumem... " >&6; } if ${ac_cv_lib_umem_umem_alloc+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lumem $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char umem_alloc (); int main () { return umem_alloc (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_umem_umem_alloc=yes else ac_cv_lib_umem_umem_alloc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_umem_umem_alloc" >&5 $as_echo "$ac_cv_lib_umem_umem_alloc" >&6; } if test "x$ac_cv_lib_umem_umem_alloc" = xyes; then : MALLOC_DEBUG_ENV='LD_PRELOAD=libumem.so UMEM_DEBUG=default' fi ;; *-gnu*) # GNU libc - Value is used as a single byte bit pattern, # both directly and inverted, so should not be 0 or 255. MALLOC_DEBUG_ENV='MALLOC_PERTURB_=15' ;; *bsd*|darwin*) MALLOC_DEBUG_ENV='MallocPreScribble=1 MallocScribble=1' ;; esac # Replaces XFileSearchPathDefault from Imake configs XFILESEARCHPATHDEFAULT='$(sysconfdir)/X11/%L/%T/%N%C%S:$(sysconfdir)/X11/%l/%T/%N%C%S:$(sysconfdir)/X11/%T/%N%C%S:$(sysconfdir)/X11/%L/%T/%N%S:$(sysconfdir)/X11/%l/%T/%N%S:$(sysconfdir)/X11/%T/%N%S:$(datadir)/X11/%L/%T/%N%C%S:$(datadir)/X11/%l/%T/%N%C%S:$(datadir)/X11/%T/%N%C%S:$(datadir)/X11/%L/%T/%N%S:$(datadir)/X11/%l/%T/%N%S:$(datadir)/X11/%T/%N%S:$(libdir)/X11/%L/%T/%N%C%S:$(libdir)/X11/%l/%T/%N%C%S:$(libdir)/X11/%T/%N%C%S:$(libdir)/X11/%L/%T/%N%S:$(libdir)/X11/%l/%T/%N%S:$(libdir)/X11/%T/%N%S' # Check whether --with-xfile-search-path was given. if test "${with_xfile_search_path+set}" = set; then : withval=$with_xfile_search_path; XFILESEARCHPATHDEFAULT="$withval" fi # Check whether --with-appdefaultdir was given. if test "${with_appdefaultdir+set}" = set; then : withval=$with_appdefaultdir; appdefaultdir="$withval" else appdefaultdir=${datadir}/X11/app-defaults fi prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$appdefaultdir\"" eval ax_define_dir="\"$ax_define_dir\"" appdefaultdir="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define appdefaultdir "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE # Replacement for Imake ToolkitStringsABIOptions, controls string tables # generated by util/string.list in StringDefs.h & Shell.h case $host_os in solaris*) # Solaris uses -intelabi even on SPARC STRINGSABIOPTIONS="-intelabi -solarisabinames" ;; sco* | svr4*) case $host_cpu in i*86) STRINGSABIOPTIONS="-intelabi" ;; *) STRINGSABIOPTIONS="" ;; esac ;; esac ERRORDBDIR=${datadir}/X11 case $host_os in darwin*) OS_CFLAGS="-Wl,-flat_namespace" ;; *) OS_CFLAGS= ;; esac XT_CFLAGS="$XT_CFLAGS $OS_CFLAGS" ac_config_files="$ac_config_files Makefile src/Makefile util/Makefile include/Makefile man/Makefile specs/Makefile test/Makefile xt.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SPECS_TRUE}" && test -z "${ENABLE_SPECS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SPECS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TEXT_TRUE}" && test -z "${HAVE_XMLTO_TEXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO_TEXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then as_fn_error $? "conditional \"HAVE_FOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSLTPROC_TRUE}" && test -z "${HAVE_XSLTPROC_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSLTPROC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_STYLESHEETS_TRUE}" && test -z "${HAVE_STYLESHEETS_FALSE}"; then as_fn_error $? "conditional \"HAVE_STYLESHEETS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PERL_TRUE}" && test -z "${HAVE_PERL_FALSE}"; then as_fn_error $? "conditional \"HAVE_PERL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_UNIT_TESTS_TRUE}" && test -z "${ENABLE_UNIT_TESTS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_UNIT_TESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then as_fn_error $? "conditional \"HAVE_GLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do 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 as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libXt $as_me 1.1.5, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libXt config.status 1.1.5 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # 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' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' 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 SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; 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 reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; 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 ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # 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 PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "specs/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "xt.pc") CONFIG_FILES="$CONFIG_FILES xt.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _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" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf 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" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` 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"` # 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'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":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. # # 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. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # 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 library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # 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. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### 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 ltmain="$ac_aux_dir/ltmain.sh" # 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) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname 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=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename 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=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename 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=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # 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}"}\ } # Extended-shell func_stripname 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=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt 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=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt 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=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o 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=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform 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=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith 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=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len 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=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append 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=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted 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=: # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi code_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # 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. hardcode_direct_absolute=$hardcode_direct_absollibXt-1.1.5/README000064401431060000012000000033611252061032400137370ustar00alancstaff00002660200006libXt - X Toolkit Intrinsics library Documentation for this library can be found in the included man pages; the libXt spec from the specs directory of the source, also available at: http://www.x.org/releases/X11R7.6/doc/Xt/Xt.html http://www.x.org/releases/X11R7.6/doc/Xt/Xt.pdf and the O'Reilly X Toolkit books, which they have made freely available online: - X Series Volume 4: X Toolkit Intrinsics Programming Manual, 1st Edition (1990, covers X11R3) http://www.archive.org/details/xtoolkitintrsin20400nyemiss - X Series Volume 4: X Toolkit Intrinsics Programming Manual, 2nd Edition (1990, covers X11R4) http://www.archive.org/details/xtoolkitintrinsi04nyemiss - X Series Volume 4: X Toolkit Intrinsics Programming Manual, Motif Edition (1990, covers X11R4/Motif 1.1) http://www.archive.org/details/xtoolktintrmotif04nyemiss - X Series Volume 4: X Toolkit Intrinsics Programming Manual, 3rd Edition (1993, covers X11R5) http://www.archive.org/details/xtoolkitintrinsic04nyemiss - X Series Volume 5: X Toolkit Intrinsics Reference Manual (1990, covers X11R4) http://www.archive.org/details/xtoolkitintrinsi04nyemiss All questions regarding this software should be directed at the Xorg mailing list: http://lists.freedesktop.org/mailman/listinfo/xorg Please submit bug reports to the Xorg bugzilla: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg The master development code repository can be found at: git://anongit.freedesktop.org/git/xorg/lib/libXt http://cgit.freedesktop.org/xorg/lib/libXt For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches For more information on the git code manager, see: http://wiki.x.org/wiki/GitPage libXt-1.1.5/config.sub000075501431060000012000001062231252061035000150420ustar00alancstaff00002660200006#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 1992-2014 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | 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 \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | 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-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # 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 ;; aros) basic_machine=i386-pc os=-aros ;; 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 ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 | 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 ;; dicos) basic_machine=i686-pc os=-dicos ;; 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*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 ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; 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 ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-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 ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-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[24]aeb | 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -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* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -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* | -es* | -tirtos*) # 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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; 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 ;; -cnk*|-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: v810) 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*) libXt-1.1.5/INSTALL000064401431060000012000000366001252061064300141160ustar00alancstaff00002660200006Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details.