aboutsummaryrefslogtreecommitdiff
path: root/libXt
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-04-10 15:05:45 +0200
committermarha <marha@users.sourceforge.net>2012-04-10 15:05:45 +0200
commit4b35ef19b76849cbd854c3b6f92bbc1c2d50f2d8 (patch)
tree3ddf28be6916dd5ea27837431b5be8c94017cd9a /libXt
parent5564e91e3cf4ba5cb2fbebbc2d63d18f588016b8 (diff)
parent5f8448ef6b85a9ff72c5af4cec99183c8bb60dc6 (diff)
downloadvcxsrv-4b35ef19b76849cbd854c3b6f92bbc1c2d50f2d8.tar.gz
vcxsrv-4b35ef19b76849cbd854c3b6f92bbc1c2d50f2d8.tar.bz2
vcxsrv-4b35ef19b76849cbd854c3b6f92bbc1c2d50f2d8.zip
Merge remote-tracking branch 'origin/released'
Diffstat (limited to 'libXt')
-rw-r--r--libXt/ChangeLog1748
-rw-r--r--libXt/INSTALL291
-rw-r--r--libXt/Makefile.am8
-rw-r--r--libXt/Makefile.in857
-rw-r--r--libXt/README13
-rw-r--r--libXt/aclocal.m411455
-rw-r--r--libXt/autogen.sh12
-rw-r--r--libXt/config.guess1505
-rw-r--r--libXt/config.h.in86
-rw-r--r--libXt/config.sub1739
-rw-r--r--libXt/configure21478
-rw-r--r--libXt/configure.ac46
-rw-r--r--libXt/depcomp630
-rw-r--r--libXt/docbook.am105
-rw-r--r--libXt/include/Makefile.in569
-rw-r--r--libXt/install-sh520
-rw-r--r--libXt/ltmain.sh9636
-rw-r--r--libXt/man/Makefile.in941
-rw-r--r--libXt/missing376
-rw-r--r--libXt/specs/CH012471
-rw-r--r--libXt/specs/CH01.xml2798
-rw-r--r--libXt/specs/CH023165
-rw-r--r--libXt/specs/CH02.xml4538
-rw-r--r--libXt/specs/CH031031
-rw-r--r--libXt/specs/CH03.xml1406
-rw-r--r--libXt/specs/CH041998
-rw-r--r--libXt/specs/CH04.xml2498
-rw-r--r--libXt/specs/CH05783
-rw-r--r--libXt/specs/CH05.xml1063
-rw-r--r--libXt/specs/CH061110
-rw-r--r--libXt/specs/CH06.xml1369
-rw-r--r--libXt/specs/CH073555
-rw-r--r--libXt/specs/CH07.xml4989
-rw-r--r--libXt/specs/CH08452
-rw-r--r--libXt/specs/CH08.xml613
-rw-r--r--libXt/specs/CH093211
-rw-r--r--libXt/specs/CH09.xml4326
-rw-r--r--libXt/specs/CH101521
-rw-r--r--libXt/specs/CH10.xml2211
-rw-r--r--libXt/specs/CH113566
-rw-r--r--libXt/specs/CH11.xml5538
-rw-r--r--libXt/specs/CH121067
-rw-r--r--libXt/specs/CH12.xml1166
-rw-r--r--libXt/specs/CH13.xml (renamed from libXt/specs/CH13)889
-rw-r--r--libXt/specs/Makefile.am61
-rw-r--r--libXt/specs/Makefile.in601
-rw-r--r--libXt/specs/Xtk.intr.front333
-rw-r--r--libXt/specs/acknowledgement.xml323
-rw-r--r--libXt/specs/appA107
-rw-r--r--libXt/specs/appA.xml112
-rw-r--r--libXt/specs/appB783
-rw-r--r--libXt/specs/appB.xml1181
-rw-r--r--libXt/specs/appC1204
-rw-r--r--libXt/specs/appC.xml1970
-rw-r--r--libXt/specs/appD602
-rw-r--r--libXt/specs/appD.xml880
-rw-r--r--libXt/specs/appE606
-rw-r--r--libXt/specs/appE.xml1703
-rw-r--r--libXt/specs/appF125
-rw-r--r--libXt/specs/appF.xml103
-rw-r--r--libXt/specs/intr.idxmac.t3
-rw-r--r--libXt/specs/intrinsics.xml128
-rw-r--r--libXt/specs/postproc19
-rw-r--r--libXt/specs/preface.xml51
-rw-r--r--libXt/specs/strings.mit16
-rw-r--r--libXt/src/Converters.c18
-rw-r--r--libXt/src/Event.c8
-rw-r--r--libXt/src/Initialize.c8
-rw-r--r--libXt/src/Intrinsic.c6
-rw-r--r--libXt/src/Makefile.in748
-rw-r--r--libXt/src/NextEvent.c9
-rw-r--r--libXt/src/Resources.c59
-rw-r--r--libXt/src/Selection.c5
-rw-r--r--libXt/src/TMparse.c6
-rw-r--r--libXt/src/Varargs.c4
-rw-r--r--libXt/test/Alloc.c112
-rw-r--r--libXt/test/Converters.c83
-rw-r--r--libXt/test/Event.c91
-rw-r--r--libXt/test/Makefile.am14
-rw-r--r--libXt/test/Makefile.in655
-rw-r--r--libXt/util/Makefile.in548
-rw-r--r--libXt/util/makestrs.c136
82 files changed, 94403 insertions, 28367 deletions
diff --git a/libXt/ChangeLog b/libXt/ChangeLog
new file mode 100644
index 000000000..cf0ab3d9d
--- /dev/null
+++ b/libXt/ChangeLog
@@ -0,0 +1,1748 @@
+commit 2d689ac861085d1d74bcbd05d1595bac0bf67d20
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Mar 15 22:51:45 2012 -0700
+
+ libXt 1.1.3
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 75bef5b488245467b6638e25cd22006b306e8536
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <alan.coopersmith@oracle.com>
+Date: Wed Mar 7 17:57:26 2012 -0800
+
+ libXt 1.1.2
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit aa0f30641769968e0453a7d02f3f8e5955641336
+Author: Matt Dew <marcoz@osource.org>
+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 <?dbfo keep-together='always'> 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 <marcoz@osource.org>
+
+commit 70bb9e28d37fff4ead4d0a2c672af77059765fa4
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit 6dd231d37c036d182e789f0af37ee5417792ad4e
+Author: Stephen Turnbull <stephenjturnbull@gmail.com>
+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 <jeremyhu@apple.com>
+
+commit 0d8ef503e2d51d727a912d6ef3cf017608e45b7f
+Author: Gaetan Nadon <nadon@memsize.(none)>
+Date: Sat Dec 31 09:03:39 2011 -0500
+
+ Add .gitignore for the newly added DocBook/XML generated files.
+
+ Signed-off-by: Gaetan Nadon <nadon@memsize.(none)>
+
+commit 9cbf06b9f7b1378ce3424837c979c3241516bf9b
+Author: Gaetan Nadon <nadon@memsize.(none)>
+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 <nadon@memsize.(none)>
+
+commit 7aa5d801d3b17fc9a1af9d5f6bc0283e3762cca2
+Author: Matt Dew <marcoz@osource.org>
+Date: Wed Dec 28 21:17:53 2011 -0700
+
+ Remove old files.
+
+commit b8818e1233b75c6bd47a6d2197fabf3a036a2119
+Author: Matt Dew <marcoz@osource.org>
+Date: Wed Dec 28 20:34:51 2011 -0700
+
+ Initial docbook conversion.
+
+commit fd0da0d44a8501edaac3be7fac9449ad730d8bf4
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit af9e4b75167c0e31ec02d5ababf204daa12f500d
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 682ca8daf29285ef5013751784a7ec98962b7cbb
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Oct 7 19:30:11 2011 -0700
+
+ Make implementation_default_path return const char *
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit d3c2fbcd83ed9ae9b6cc8d765badca7f8d3261b2
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Oct 7 19:23:37 2011 -0700
+
+ Make gravity strings const to fix gcc -Wwrite-strings warnings
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 94ffb37790ce33fdf49d07dd1ade60b6d8376aa7
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Fri Oct 7 19:21:10 2011 -0700
+
+ Convert ISOLatin1 functions to specify args as const char *
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 1f48cadaa88423a012613a0b456ec8795c8c0992
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Fri Oct 7 17:08:07 2011 -0700
+
+ Whitespace changes related to cleaning up previous patch
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 9e898aa4fd964e888044e2fa2d64089505331f62
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit df2008411a5c6a735af2b0fced01df660bb6978a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon Sep 26 15:29:45 2011 -0700
+
+ makestrs: Add const attributes to fix gcc -Wwrite-strings warnings
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 9347b890ba24db41c7cb6c6e76564e4896bc8cac
+Author: Olivier Fourdan <fourdan@xfce.org>
+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 <alan.coopersmith@oracle.com>
+
+commit 5691187ced24b16a951e2b8308bcc2b65dd36eee
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 6c0b44caa9b424c7e05327e8ddc9273b87a0f81f
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit 2c29b8b71575d73db6b9542b24fa3312a2cf2f86
+Author: Jon TURNEY <jon.turney@dronecode.org.uk>
+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 <jon.turney@dronecode.org.uk>
+ Reviewed-by: Cyril Brulebois <kibi@debian.org
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 4ee8867047eaff3b121478b7199201d669e2c85d
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Tue May 24 14:37:03 2011 -0400
+
+ Update README for documentation reference
+
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Cyril Brulebois <kibi@debian.org>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 5e299936489bf3476464f00ebf3ffa3fa893cc23
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 6fc14afa3fa98503248138f7f6984ee33a9bd889
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon Mar 14 19:07:12 2011 -0700
+
+ Add test case for XtAppMainLoop bug 34715
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 4bf003a824577b5a46a59b3b3e91687b530ee48f
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+ Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 42c611d9f8c80528f6e36ceb0ce245b06e8b1e8e
+Author: Jordan Hayes <jordan@bitway.com>
+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 <alan.coopersmith@oracle.com>
+
+commit c16d3cc264c45601f0e59bdd29e438c7c9679721
+Author: Julien Cristau <jcristau@debian.org>
+Date: Thu Mar 10 10:19:59 2011 +0100
+
+ Bump to 1.1.1
+
+ Signed-off-by: Julien Cristau <jcristau@debian.org>
+
+commit fe2cf6e2b70e57624aad71f510ff8c6addaae196
+Author: Cyril Brulebois <kibi@debian.org>
+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 <http://bugs.debian.org/617208>
+
+ Signed-off-by: Cyril Brulebois <kibi@debian.org>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit f6c791b5f318d8805db4cb6c74b1bc2e91d6c15c
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <alan.coopersmith@oracle.com>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 9ccf14fddedc11bd17b3ae30612c6f70f4cd7e14
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+ Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+ Tested-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 16d9941f3aa38dde115cbff639e131761c1b36d0
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+ Reviewed-by: Matt Turner <mattst88@gmail.com>
+
+commit 994443524ade46bad03eea0acbd1410d561c591d
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Fri Mar 4 16:30:58 2011 -0800
+
+ configure: Bump version to 1.1.0 for release
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit c0a233895cc8270ec0ff0bd2abb88d3f6dd524c3
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit abf6062715c7d1390e516261a31abde4ed7ea64e
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit b1eaa18835ec7c3a11e580340625b35c18edf7ca
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 21c1cc98d8210a3ce2a4bf62ecee9168fdd99dcb
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 19538f2b4553221b35831e13ec70ed9db436dd32
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 84e512a94295387bd0625ce619fc8bd381395c71
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit c80650fddec8596ef7278e37aa12ce2076c54e93
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Dec 9 23:36:31 2010 -0800
+
+ Convert ResConfig.c to use XtAsprintf() instead of XtMalloc + sprintf
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit ac07da253415ccb8b6322feedf7969967357050e
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 84f73c49db8071c06f27609ce7cc7a32a17351a9
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Dec 9 23:44:42 2010 -0800
+
+ Convert some sprintf calls to snprintf
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Julien Cristau <jcristau@debian.org>
+
+commit 14145f3e87a039640cd8bdb2e2f4f30ca9b2a710
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit a73b8f06b95216083c8335fad45dd0de7f44a529
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 2bf988d229d2b85208cc42094ce7202204d628af
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 96508e1b9da790d4b824a42246d1e86379101733
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 0b780f8cc8bc2606fc3173628c4d3065aae190f8
+Author: walter harms <wharms@bfs.de>
+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 <wharms@bfs.de>
+ Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 59598f20ba160fd92abcf88a30f0008425e7b1ec
+Author: walter harms <wharms@bfs.de>
+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 <wharms@bfs.de>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 8572cba2b9094dcd8ee5b4c5bcf3c38f1f291918
+Author: walter harms <wharms@bfs.de>
+Date: Sat Oct 30 10:47:23 2010 +0200
+
+ src/Resource.c: Fix possible NULL access
+
+ Signed-off-by: walter harms <wharms@bfs.de>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 6c75b449f6436b787247e164bee03691af2a4f55
+Author: walter harms <wharms@bfs.de>
+Date: Fri Oct 29 17:24:48 2010 +0200
+
+ XtFree() can handle NULL , remove check
+
+ Signed-off-by: walter harms <wharms@bfs.de>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 0d29ca61b94cd34b04c5eedae443620a616d01c3
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Oct 28 12:03:25 2010 -0700
+
+ libXt 1.0.9
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 87d019acc715c5ab4a5b2431ec882a0f84946c20
+Author: Jesse Adkins <jesserayadkins@gmail.com>
+Date: Tue Sep 28 13:30:03 2010 -0700
+
+ Purge cvs tags.
+
+ Signed-off-by: Jesse Adkins <jesserayadkins@gmail.com>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit aa70c813f6eac2cad2944a98a1a444ea69dc024f
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 9d80fae6bc2cff26f320ff5b7b2ca7333ab3d677
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 71a7e999a4d99aa54ea7268b928d87e27cea6279
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 0c968d108d8575db0149922b8375533fc54d0b7a
+Author: walter harms <wharms@bfs.de>
+Date: Fri Oct 1 15:13:43 2010 +0200
+
+ Honor that GetClassActions() may return NULL.
+
+ Signed-off-by: Walter <wharms@bfs.de>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 6e4dbf06d4d049666cf81207d9f853a0a40c71b7
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Thu Sep 23 18:27:46 2010 -0700
+
+ Sun's copyrights belong to Oracle now
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 94680a56a32ada91f07db34e02a526dca5ecbbf4
+Author: Ryan Hajdaj <rhajdaj@gotnothin.com>
+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 <alan.coopersmith@oracle.com>
+
+commit d53a3deb52100596bef9fb7b6c6e7ba15ed18bda
+Author: walter harms <wharms@bfs.de>
+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 <wharms@bfs.de>
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 47e73791d4a88e59a797e9dde1ab2d5f58ff774c
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date: Tue Aug 17 10:17:57 2010 -0400
+
+ man: whitespace management
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 8c307c168c724368be2b9e784365b40d4b001aa3
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 198ac897c7136425a20011a6c99f80cb925d622b
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 74cb722a974010fa3c82dc57a036f97768b3695b
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 56621d3ec521dd30fabb1a77ad1c396baa740569
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+ Reviewed-by: Adam Jackson <ajax@redhat.com>
+
+commit f3d2ac478918b99c51e0b4bff97935f2255ab537
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 723d78fe8e159dee1281f3e4f8dc03825aa334b6
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 99a1c1f2cfa595500704d54e223f1c9e0ff9a10e
+Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+Date: Fri Apr 2 01:43:22 2010 -0500
+
+ Use automake silent rules for BUILT_SOURCES generation
+
+ Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net>
+ Acked-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit cf3198fdc302bb017e6cc8014abc3bdbfeb9f6b1
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 5a876831762c5d22101bd2fa71203647858f66b2
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit cba12c108da0c3eb868a5cb08f641b6d036e0d05
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit e3bce11a8ea7e0175a6f08367bace9b0eb2b898a
+Author: Rémi Cardona <remi@gentoo.org>
+Date: Mon Mar 15 22:59:04 2010 +0100
+
+ libXt 1.0.8
+
+ Signed-off-by: Rémi Cardona <remi@gentoo.org>
+
+commit a1a8df535fa5ab3748404bdeb07e61beb604b14e
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Thu Jan 14 20:07:46 2010 -0800
+
+ Update Sun license notices to current X.Org standard form
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 6393306d1a2eb8239f108a773f342495e1cfd85c
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit b798093fc6cbcf35c095f3401586d2741adcd2cd
+Author: Jeremy Huddleston <jeremyhu@freedesktop.org>
+Date: Fri Dec 11 17:04:23 2009 -0800
+
+ darwin: xnu doesn't support poll on ttys on the master side.
+
+ <rdar://problem/7360546>
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
+
+commit e0ac2ea8b211bdca848679ee59362384f0f97e36
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Mon Dec 7 22:28:53 2009 -0800
+
+ Fix make distcheck (./util/makestrs.1 left after distclean)
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit 345633dc9c79b32a1b391dfb4dfedf87ae9e291b
+Author: Rémi Cardona <remi@gentoo.org>
+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 <remi@gentoo.org>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit ed31677bb9b1dd9498715a922763968917b87e49
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+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 <jeremyhu@freedesktop.org>
+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 <jeremyhu@freedesktop.org>
+
+commit 5d63df924d7f66d2207c8db67e5d6cce8c7b245b
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Thu Oct 8 21:50:35 2009 -0700
+
+ libXt 1.0.7
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit f82769a1a75e17f66b67a5f71dcf889955569a57
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+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 <alan.coopersmith@sun.com>
+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 <alan.coopersmith@sun.com>
+
+commit 254e2e0a8197e47bcef3e3c0b461ef8156a1af64
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+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 <alan.coopersmith@sun.com>
+
+commit fedc095da647b6f4fda8ca5edc5644458e2b2fbf
+Author: Julien Cristau <jcristau@debian.org>
+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 <jcristau@debian.org>
+
+commit f77482f0618f954de1d080599ada058e9a3c24ff
+Author: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+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 <thomas.petazzoni@free-electrons.com>
+
+commit 369629611609f20c89499c1f6b5562a4f3cca983
+Author: Adam Jackson <ajax@redhat.com>
+Date: Thu Jul 2 13:28:01 2009 -0400
+
+ libXt 1.0.6
+
+commit 28677468c56888b18c44d71a62903d23e5c294cf
+Author: Jon TURNEY <jon.turney@dronecode.org.uk>
+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 <john.mckernan@sun.com>
+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 <alan.coopersmith@sun.com>
+
+commit 061d3eebf7a0502afcd9c1831d67c8961feece8d
+Author: John McKernan <john.mckernan@sun.com>
+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 <alan.coopersmith@sun.com>
+
+commit e500631954c8d390e8705fde7f50d1acc006406e
+Author: Jeremy Huddleston <jeremy@yuffie.local>
+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 <alan.coopersmith@sun.com>
+Date: Mon Feb 2 20:34:36 2009 -0800
+
+ Add README with pointers to mailing list, bugzilla & git repos
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
+
+commit f56a69f2cf7df1e7cdf2494c5408786e53467374
+Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
+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 <peb@mppmu.mpg.de>
+Date: Mon Oct 20 18:50:37 2008 -0700
+
+ X.Org Bug 17942: libXt manpage formatting
+
+ <http://bugs.freedesktop.org/show_bug.cgi?id=17942>
+
+commit f488a6a218da6b543d1495e607ff1b31b0b48900
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Tue Sep 23 19:14:09 2008 +0300
+
+ configure.ac: Minor thinko
+
+commit 36e9f0d351afbf7fd2595990b2d39e7c551f6420
+Author: John Tapsell <johnflux@gmail.com>
+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 <alan.coopersmith@sun.com>
+Date: Mon Jun 23 20:04:29 2008 -0700
+
+ Update ac_define_dir.m4 to 2008-04-12 version
+
+commit 556918e21fbb67131d979b04f29a0b59fcd87575
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Wed Apr 30 19:15:14 2008 +0100
+
+ Set a blank default search path for WIN32
+
+commit 56444103a3b2159d334aa87d782fbca987118bbc
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Tue Apr 29 22:44:54 2008 +0100
+
+ less speed, more haste
+
+commit a393450cbde80b6e7f0e1c4112363eb1313a6cdb
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Tue Apr 29 22:16:05 2008 +0100
+
+ fix logic inverted problem
+
+commit cd83cf47412b4a5979e152990c3b0870751aee07
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Tue Apr 29 19:45:50 2008 +0100
+
+ Reduce the path searches on mingw
+
+commit bb6d2a09b87560ae396085ef0981b700924333cd
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Tue Apr 29 13:45:06 2008 +0100
+
+ Xming specific configuration file settings
+
+commit 6baea764567c3327f1d85ba91375adaea6dab46d
+Author: Alan Hourihane <alanh@tungstengraphics.com>
+Date: Tue Apr 29 10:22:35 2008 +0100
+
+ Link with winsock for WIN32 platforms
+
+commit c59dd27ecb1751f0b097046b2f892028e5a10a3e
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Tue Apr 29 10:19:55 2008 +0100
+
+ Fix some build issues for Win32 platforms
+
+commit 8e95cb765e88d36c35f868f650c86c62c31ad635
+Author: Colin Harrison <colin.harrison-at-virgin.net>
+Date: Wed Apr 23 13:56:28 2008 +0100
+
+ Add __MINGW32__
+
+commit 4b64b821a48fe493056271216dbe29d43376954b
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Sun Mar 9 08:42:48 2008 +0100
+
+ nuke RCS Ids
+
+commit b648ed992d2c3ea8a7462a595e51a07085bf4688
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+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 <cloos@jhcloos.com>
+Date: Thu Dec 6 15:51:20 2007 -0500
+
+ Add missing PHONY line for automatic ChangeLog generation
+
+commit 6b483e355de6c5ee5dc635ab9b817bf72680b016
+Author: Julien Cristau <jcristau@debian.org>
+Date: Sat Jun 23 15:20:09 2007 +0100
+
+ Allow C++ apps to build using libXt
+
+commit 845e51c740574db2f72a5e7c5462d8f56a3c4e22
+Author: Andreas Luik <luik@orthogon.com>
+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 <matthieu.herrb@laas.fr>
+Date: Mon Feb 26 18:27:43 2007 +0100
+
+ Sync XtGetErrorDatabaseText() prototype with reality.
+
+commit 4e7031510d05471e77ff48355b23fc8e4302648c
+Author: Ben Byer <bbyer@bbyer.(none)>
+Date: Tue Feb 20 01:05:27 2007 -0800
+
+ added -flat_namespace to CFLAGS for Darwin
+
+commit 92452ca7a51fa77ea60eacd320dbd970e32653c9
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Sat Jan 27 22:29:03 2007 -0800
+
+ Version bump: 1.0.5
+
+commit a5c7d56278e569257d3d64ff7681d0a484a1f817
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+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 <esr@thyrsus.com>
+Date: Tue Jan 2 17:49:17 2007 -0800
+
+ Bug 9514: Markup error in makestrs.1x man page
+
+ <https://bugs.freedesktop.org/show_bug.cgi?id=9514>
+
+commit 75f83503ba1db628137ffc9d1d9e4f2a7a2fd97a
+Merge: 2f201b1 153264a
+Author: Jeremy C. Reed <reed@glacier.reedmedia.net>
+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 <reed@glacier.reedmedia.net>
+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 <daniel@fooishbar.org>
+Date: Wed Nov 8 16:16:02 2006 +0200
+
+ bump to 1.0.4
+
+commit 0c1954765c32c1bd298111cc6bed2f090494c0cf
+Author: Eric Anholt <eric@anholt.net>
+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 <eric@anholt.net>
+Date: Fri Oct 27 12:30:09 2006 -0700
+
+ Add more generated files to ignore.
+
+commit 8d18dfa21f8349c998675e1f9971de02ca99a1cd
+Author: Adam Jackson <ajax@benzedrine.nwnk.net>
+Date: Fri Oct 13 16:32:28 2006 -0400
+
+ Bump to 1.0.3
+
+commit b54d069ea397486c6125943ffdb813482383576a
+Author: Qiu-Yuan (Kathleen) Yang <qiu-yuan.yang@sun.com>
+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 <alan.coopersmith@sun.com>
+Date: Fri Sep 1 17:59:42 2006 -0700
+
+ Add *~ to .gitignore to skip over emacs droppings
+
+commit 1eeeff85bf9f293de875169f6dc54577de0443f1
+Author: David Nusinow <dnusinow@debian.org>
+Date: Wed Aug 30 16:33:10 2006 -0400
+
+ Generate the internal manpage section using __libmansuffix__
+
+commit e2f43888fe021aac27770afa6a64fb3cf3fab190
+Author: Alan Coopersmith <alan.coopersmith@sun.com>
+Date: Thu Jul 13 14:59:08 2006 -0700
+
+ renamed: .cvsignore -> .gitignore
+
+commit 3d3a1bc23f571daa7a876a21169d5a0c996ce7cc
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Fri May 12 16:10:27 2006 +0000
+
+ Bump to 1.0.2
+
+commit fc82234c73362d6f07acf2dcf72bcefd96850105
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Sun Apr 30 14:30:16 2006 +0000
+
+ Fix ERRORDB definition for the case where ${prefix} != /usr
+
+commit bc813392aa8f563e6cd385636b90a7496fcaa14e
+Author: Adam Jackson <ajax@nwnk.net>
+Date: Thu Apr 27 00:23:17 2006 +0000
+
+ Bump to 1.0.1
+
+commit 1c55684a7411c35fce2a958d84be4c13b5349ea0
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+Date: Sun Feb 12 18:19:22 2006 +0000
+
+ Bug #5628 <https://bugs.freedesktop.org/show_bug.cgi?id=5628> Shadow pages
+ not created correctly when MANDIR & MANSUFFIX don't match.
+
+commit 6851a1faf46a4d8a85e481162c8ee84f66174f89
+Author: Kevin E Martin <kem@kem.org>
+Date: Thu Dec 15 00:24:34 2005 +0000
+
+ Update package version number for final X11R7 release candidate.
+
+commit b9464aa563b650faefbb881d5b399659aa8c30bb
+Author: Kevin E Martin <kem@kem.org>
+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 <kem@kem.org>
+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 <kem@kem.org>
+Date: Tue Dec 6 22:48:44 2005 +0000
+
+ Change *man_SOURCES ==> *man_PRE to fix autotools warnings.
+
+commit 5801485b720e1dd3799737d9f127212afd3101c7
+Author: Kevin E Martin <kem@kem.org>
+Date: Sat Dec 3 05:49:45 2005 +0000
+
+ Update package version number for X11R7 RC3 release.
+
+commit d480f9dbd3e07b4e139f2a1422f803e6e6264854
+Author: Kevin E Martin <kem@kem.org>
+Date: Sat Dec 3 04:41:50 2005 +0000
+
+ Add check and cflags for malloc(0) returning NULL.
+
+commit 2a591fe7b3416d8609bd71cb068f9390105ffecf
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+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 <Alan.Coopersmith@sun.com>
+Date: Wed Nov 23 22:33:07 2005 +0000
+
+ Bug #5003 <https://bugs.freedesktop.org/show_bug.cgi?id=5003> Patch #3763
+ <https://bugs.freedesktop.org/attachment.cgi?id=3763> Xorg code misuses
+ S_IF* macros
+
+commit 2533120c26185990d326fa14c92383f85239f3b7
+Author: Kevin E Martin <kem@kem.org>
+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 <kem@kem.org>
+Date: Wed Nov 9 21:19:13 2005 +0000
+
+ Update package version number for X11R7 RC2 release.
+
+commit f151f6dfa14c36cfa54ab3e55bb67f24a8a39dc6
+Author: Kean Johnson <kean@armory.com>
+Date: Tue Nov 8 06:33:25 2005 +0000
+
+ See ChangeLog entry 2005-11-07 for details.
+
+commit 7ed0ec3136190288b0c450cdf2998000c43619df
+Author: Kevin E Martin <kem@kem.org>
+Date: Tue Nov 1 15:11:51 2005 +0000
+
+ Update pkgcheck dependencies to work with separate build roots.
+
+commit 33b861860b86b53840007010287f5483a503c8e9
+Author: Kevin E Martin <kem@kem.org>
+Date: Wed Oct 19 02:48:11 2005 +0000
+
+ Update package version number for RC1 release.
+
+commit d3853ab17d7203e7fbdfcd5cc8ed3505e5aa6233
+Author: Kevin E Martin <kem@kem.org>
+Date: Tue Oct 18 07:24:03 2005 +0000
+
+ Use $(INSTALL) instead of $(install_sh_DATA) for creating directories.
+
+commit 831a32df90d6b3db66d6c578f6e231d4aab2b760
+Author: Adam Jackson <ajax@nwnk.net>
+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 <Alan.Coopersmith@sun.com>
+Date: Tue Oct 18 01:50:02 2005 +0000
+
+ Add --with-xfile-search-path=<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 <Alan.Coopersmith@sun.com>
+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 <Alan.Coopersmith@sun.com>
+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 <Alan.Coopersmith@sun.com>
+Date: Thu Oct 13 04:27:16 2005 +0000
+
+ Add generated man pages to .cvsignore file
+
+commit 3c676e51ca509fff616495ac7354ac8b4ecde7e4
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+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 <Alan.Coopersmith@sun.com>
+Date: Sat Sep 24 00:23:32 2005 +0000
+
+ Include <X11/XlibConf.h> to get correct XTHREADS settings in non-Imake
+ builds.
+
+commit 88374bab9adfe73dc445d4202a28e4d6021a674f
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+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 <ajax@nwnk.net>
+Date: Mon Aug 1 23:59:39 2005 +0000
+
+ Properly define BUILT_FILES
+
+commit f4043547fbb2feb87f480388a695016b90f53279
+Author: Keith Packard <keithp@keithp.com>
+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 <kem@kem.org>
+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 <Alan.Coopersmith@sun.com>
+Date: Fri Jul 22 20:30:10 2005 +0000
+
+ Bug #3824: <https://bugs.freedesktop.org/show_bug.cgi?id=3824> Correct
+ incomplete license statement from Sun.
+
+commit 052efe144da64f96fb1201a36933894d2d4bfb3c
+Author: Daniel Stone <daniel@fooishbar.org>
+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 <matthieu.herrb@laas.fr>
+Date: Sun Jul 17 10:15:26 2005 +0000
+
+ Fix for building outside of srcdir.
+
+commit 40bf5c6a837430bf23f86b97fcde8237099511c0
+Author: Daniel Stone <daniel@fooishbar.org>
+Date: Sat Jul 16 07:37:19 2005 +0000
+
+ Set version number to 6.0.0 with -version-number.
+
+commit 265f56bafdca73f28a4937ebff86ac77a25f2d4b
+Author: Keith Packard <keithp@keithp.com>
+Date: Sat Jul 9 06:49:50 2005 +0000
+
+ Add .cvsignore files
+
+commit 63a4f8f76f5fb9159447878a4a85a14d0fbf4bf6
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+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 <sandmann@daimi.au.dk>
+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 <X11/internal-xt-headerI.h>
+ - Add XvMC to symlink.sh
+
+commit 6e10d9886cfe518d1407331a7a8e5bac85390249
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+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 <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Tue May 24 16:06:12 2005 +0000
+
+ separation of source and build directories
+
+commit e6db93aff3a4e92b8d13998866a787bdc08b6f35
+Author: Alexander Gottwald <alexander.gottwald@s1999.tu-chemnitz.de>
+Date: Tue May 24 15:58:51 2005 +0000
+
+ Make source directory for templates configurable
+
+commit 82f3473668ed08af059e094a696911d2347e5d57
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+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 <Alan.Coopersmith@sun.com>
+Date: Sun May 22 04:25:43 2005 +0000
+
+ Check for <alloca.h> and define INCLUDE_ALLOCA_H if found, since
+ <Xalloca.h> requires it.
+
+commit 2e00049e9b02e26f858c3e4510641a735c03b086
+Author: Alan Coopersmith <Alan.Coopersmith@sun.com>
+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 <ajax@nwnk.net>
+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 <ajax@nwnk.net>
+Date: Thu May 19 00:10:08 2005 +0000
+
+ Require automake 1.7 in AM_INIT_AUTOMAKE
+
+commit c7fe09644945e3725c0b67b84cd24d8475cea184
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+Date: Wed May 18 19:34:25 2005 +0000
+
+ Also include include/X11
+
+commit 605a76dcc93e277e1b26841a0225b7e0fb851b76
+Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk>
+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 <eich@suse.de>
+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 <Alan.Coopersmith@sun.com>
+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 <alexander.gottwald@s1999.tu-chemnitz.de>
+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 <matthieu.herrb@laas.fr>
+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 <Alan.Coopersmith@sun.com>
+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
+ <https://bugs.freedesktop.org/attachment.cgi?id=1718>
+
+commit cd85103c7298be4a13909c07c95f5d53b069966e
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date: Sun Jan 2 11:08:49 2005 +0000
+
+ Fix formatting.
+
+commit 054445f4238a98b7ea7910778ed110f5eff9d4f2
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+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 <kem@kem.org>
+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 <anholt@freebsd.org>
+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 <eich@suse.de>
+Date: Fri Apr 23 18:43:54 2004 +0000
+
+ Merging XORG-CURRENT into trunk
+
+commit 1b4f95dee32054b4d14ed5f78e47371c544fc5ac
+Author: Egbert Eich <eich@suse.de>
+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 <eich@suse.de>
+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 <eich@suse.de>
+Date: Thu Feb 26 13:35:34 2004 +0000
+
+ readding XFree86's cvs IDs
+
+commit 0efb2e616125953a3773b9b6c9a530ad30ce9bc8
+Author: Egbert Eich <eich@suse.de>
+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 <eich@suse.de>
+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 <kaleb@freedesktop.org>
+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 <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:49 2003 +0000
+
+ XFree86 4.3.0.1
+
+commit 6a13c9e08bb042c81ae904c44a38a50d785c824e
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 16:48:49 2003 +0000
+
+ Initial revision
+
+commit 0117b0b441d8835a11a2886f3c8aed937dcffa9d
+Author: Kaleb Keithley <kaleb@freedesktop.org>
+Date: Fri Nov 14 15:54:39 2003 +0000
+
+ R6.6 is the Xorg base-line
diff --git a/libXt/INSTALL b/libXt/INSTALL
new file mode 100644
index 000000000..8b82ade08
--- /dev/null
+++ b/libXt/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+ This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+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.
+
+ 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.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. 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.
+
+ 6. Often, you can also type `make uninstall' to remove the installed
+ files again.
+
+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 `..'.
+
+ 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'.
+
+ 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.
+
+ 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'.
+
+Optional Features
+=================
+
+ 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.
+
+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"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' 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"
+
+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.
+
diff --git a/libXt/Makefile.am b/libXt/Makefile.am
index e9e0316b7..7aece78cd 100644
--- a/libXt/Makefile.am
+++ b/libXt/Makefile.am
@@ -1,6 +1,6 @@
-#
+#
# 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
@@ -10,7 +10,7 @@
# 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
@@ -19,7 +19,7 @@
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-SUBDIRS = util src include man specs
+SUBDIRS = util src include man specs test
ACLOCAL_AMFLAGS = -I m4
diff --git a/libXt/Makefile.in b/libXt/Makefile.in
new file mode 100644
index 000000000..53b0d11a1
--- /dev/null
+++ b/libXt/Makefile.in
@@ -0,0 +1,857 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/config.h.in $(srcdir)/xt.pc.in \
+ $(top_srcdir)/configure COPYING ChangeLog INSTALL config.guess \
+ config.sub depcomp install-sh ltmain.sh missing
+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)
+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_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__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__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(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
+distuninstallcheck_listfiles = find . -type f -print
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --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
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+ else :; fi
+
+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: @MAINTAINER_MODE_TRUE@ $(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)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ 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__remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.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 a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { 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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+ ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+ dist-gzip dist-hook dist-lzma 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-recursive \
+ uninstall uninstall-am uninstall-pkgconfigDATA
+
+
+.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:
diff --git a/libXt/README b/libXt/README
index 45663cbcf..40785f4cc 100644
--- a/libXt/README
+++ b/libXt/README
@@ -3,31 +3,32 @@ libXt - 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://xorg.freedesktop.org/releases/X11R7.0/doc/PDF/intrinsics.pdf
+ 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,
+ - 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,
+ - 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,
+ - 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,
+ - 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
+ - X Series Volume 5: X Toolkit Intrinsics Reference Manual
(1990, covers X11R4)
http://www.archive.org/details/xtoolkitintrinsi04nyemiss
diff --git a/libXt/aclocal.m4 b/libXt/aclocal.m4
new file mode 100644
index 000000000..60e78a5c5
--- /dev/null
+++ b/libXt/aclocal.m4
@@ -0,0 +1,11455 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 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],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], UPC, [depcc="$UPC" am_compiler_list=],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvisualcpp | msvcmsys)
+ # This compiler won't grok `-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 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}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well. Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+ [enable], [m4_define([am_maintainer_other], [disable])],
+ [disable], [m4_define([am_maintainer_other], [enable])],
+ [m4_define([am_maintainer_other], [enable])
+ m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+ dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+ AC_ARG_ENABLE([maintainer-mode],
+[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST([MAINT])dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# 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],
+[ --enable-silent-rules less verbose build output (undo: `make V=1')
+ --disable-silent-rules verbose build output (undo: `make V=0')])
+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
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/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])
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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 <http://pkg-config.freedesktop.org/>.])],
+ [$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
+
+# 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 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 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([], [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:
+#
+# <var>='`$ECHO "$<var>" | $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 <bug-libtool@gnu.org>."
+
+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) 2010 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)],
+ [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
+
+
+# _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([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 test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 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 -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; 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
+# --------------------------
+# 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\"`'
+ 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
+ ;;
+sparc*-*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*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ 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 \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$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
+ ;;
+
+ 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"`func_fallback_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 <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#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
+ 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
+ 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<name>.so
+ # instead of lib<name>.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
+ 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
+ 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
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+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[[123]]*) 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
+ 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
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux
+ 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
+ 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
+ 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 Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+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
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[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 Linux 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};"\
+" /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 '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+ ;;
+ 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\ F* | *Sun*Fortran*)
+ # 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\ 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,'
+ ;;
+ 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(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_flag_spec_ld, $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 <jrb3@best.com> 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)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $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(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
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $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_flag_spec_ld, $1)='+b $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_flag_spec_ld], [1],
+ [[If ld is used when linking, 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_flag_spec_ld, $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 <jrb3@best.com> 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
+ ;;
+
+ freebsd[[12]]*)
+ # 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
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+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_flag_spec_ld, $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_flag_spec_ld, $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_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_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],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [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 3293 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4'
+macro_revision='1.3293'
+_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])])
+
+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.17])
+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
+ 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)
+]) # 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
+#
+# 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])
+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])
+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_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 <stdlib.h>
+ 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 <vapier@gentoo.org>
+# Copyright (c) 2009 Steven G. Johnson <stevenj@alum.mit.edu>
+# 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 <http://www.gnu.org/licenses/>.
+#
+# 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_RUN_IFELSE([AC_LANG_PROGRAM([
+#include <stdlib.h>
+],[
+ 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);
+])],
+ [MALLOC_ZERO_RETURNS_NULL=yes],
+ [MALLOC_ZERO_RETURNS_NULL=no],
+ [MALLOC_ZERO_RETURNS_NULL=yes])
+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(<variable>, <flag>, [<alternative flag>, ...])
+# ---------------
+# 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_unknown_warning_option" = "xyes" ; then
+ PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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])
+ 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]], [-Wcast-qual])
+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])
+
+# 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]], [-Wlogical-op])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align])
+
+# 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
+
diff --git a/libXt/autogen.sh b/libXt/autogen.sh
deleted file mode 100644
index 904cd6746..000000000
--- a/libXt/autogen.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-ORIGDIR=`pwd`
-cd $srcdir
-
-autoreconf -v --install || exit 1
-cd $ORIGDIR || exit $?
-
-$srcdir/configure --enable-maintainer-mode "$@"
diff --git a/libXt/config.guess b/libXt/config.guess
new file mode 100644
index 000000000..285237846
--- /dev/null
+++ b/libXt/config.guess
@@ -0,0 +1,1505 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-08-21'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# 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
+
+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 <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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' HUP INT TERM
+
+# 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" HUP INT PIPE TERM ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -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 ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ 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 <stdio.h> /* 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 <sys/systemcfg.h>
+
+ 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/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ 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 <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ 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-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ 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="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:* | 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-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-tilera-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86: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' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/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 <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # 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 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ 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
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> 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:
diff --git a/libXt/config.h.in b/libXt/config.h.in
new file mode 100644
index 000000000..0cc7e012e
--- /dev/null
+++ b/libXt/config.h.in
@@ -0,0 +1,86 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> 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 <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if Xalloca.h should include <alloca.h> */
+#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
diff --git a/libXt/config.sub b/libXt/config.sub
new file mode 100644
index 000000000..320e30388
--- /dev/null
+++ b/libXt/config.sub
@@ -0,0 +1,1739 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+
+timestamp='2010-09-11'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# 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 <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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-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/'`
+ ;;
+ *)
+ 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*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | 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 \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | 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 | strongarm \
+ | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | 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-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | 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-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile-* | tilegx-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | 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)
+ 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'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ 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) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ # This must be matched before tile*.
+ tilegx*)
+ basic_machine=tilegx-unknown
+ os=-linux-gnu
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ 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* \
+ | -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* \
+ | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -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
+ ;;
+ 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
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -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:
diff --git a/libXt/configure b/libXt/configure
new file mode 100644
index 000000000..33ac09131
--- /dev/null
+++ b/libXt/configure
@@ -0,0 +1,21478 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for libXt 1.1.3.
+#
+# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
+
+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"
+ 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 :
+ # 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
+ export CONFIG_SHELL
+ 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+"$@"}
+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_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; }
+
+ # 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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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 </dev/null
+exec 6>&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.3'
+PACKAGE_STRING='libXt 1.1.3'
+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 <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+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
+CC_FOR_BUILD
+XT_LIBS
+XT_CFLAGS
+HAVE_PERL_FALSE
+HAVE_PERL_TRUE
+PERL
+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
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+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
+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
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+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_maintainer_mode
+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_silent_rules
+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
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ 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.3 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.3:";;
+ 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-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --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]
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --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-silent-rules less verbose build output (undo: `make V=1')
+ --disable-silent-rules verbose build output (undo: `make V=0')
+ --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 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=<path>
+ Set path to search for app-defaults and other files
+ --with-appdefaultdir=<path>
+ 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<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ 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 <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+_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.3
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 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 ||
+ $as_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 <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#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.3, which was
+generated by GNU Autoconf 2.68. 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.11'
+
+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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ 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 (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ 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; }
+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 --run true"; then
+ am_missing_run="$MISSING --run "
+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}" != 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+
+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.3'
+
+
+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"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+ # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+ enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+ if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# 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'
+macro_revision='1.3293'
+
+
+
+
+
+
+
+
+
+
+
+
+
+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='\'
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 <stdio.h>
+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 <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* 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
+
+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'.
+ 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 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ 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"
+ { test -f "$ac_path_SED" && $as_test_x "$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"
+ { test -f "$ac_path_GREP" && $as_test_x "$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"
+ { test -f "$ac_path_EGREP" && $as_test_x "$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"
+ { test -f "$ac_path_FGREP" && $as_test_x "$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 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&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 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+ ;;
+
+ 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"`func_fallback_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 Linux 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$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};"\
+" /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
+ ;;
+sparc*-*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*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 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 -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; 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 <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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 <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> 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 <limits.h>
+#else
+# include <assert.h>
+#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 <ac_nonexistent.h>
+_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 <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+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 <string.h>
+
+_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 <stdlib.h>
+
+_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 <ctype.h>
+#include <stdlib.h>
+#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; pic_mode="$withval"
+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 '
+ lt_prog_compiler_pic='-Xcompiler -fPIC'
+ ;;
+ 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\ F* | *Sun*Fortran*)
+ # 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\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ 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_flag_spec_ld=
+ 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 <jrb3@best.com> 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=
+ hardcode_libdir_flag_spec_ld='-rpath $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
+ 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
+ ;;
+
+ freebsd1*)
+ ld_shlibs=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_flag_spec_ld='+b $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
+ 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
+ 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<name>.so
+ # instead of lib<name>.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
+ 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
+ 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
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+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[123]*) 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
+ 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
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux
+ 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
+ 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
+ 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 Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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
+ 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 <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#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 <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#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 <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// 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 -xc99=all -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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Wformat=2" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_unused_command_line_argument" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unused-command-line-argument"
+ fi
+
+ CFLAGS="$CFLAGS -Wcast-qual"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports-Wcast-qual" >&5
+$as_echo_n "checking if $CC supports-Wcast-qual... " >&6; }
+ cacheid=xorg_cv_cc_flag__Wcast_qual
+ 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 -Wcast-qual"
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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
+
+
+
+# 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]], [-Wlogical-op])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses])
+# XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align])
+
+# 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=implicit" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=nonnull" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=init-self" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=main" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=missing-braces" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=sequence-point" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=return-type" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_FUNC_HAS_NO_RETURN_STMT" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=trigraphs" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=array-bounds" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=write-strings" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=address" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=int-to-pointer-cast" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-errwarn=E_BAD_PTR_INT_COMBINATION" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=pointer-to-int-cast" | $as_tr_sh`
+ 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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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_unknown_warning_option" = "xyes" ; then
+ CFLAGS="$CFLAGS -Werror=unknown-warning-option"
+ fi
+
+ if test "x$xorg_testset_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=`$as_echo "xorg_cv_cc_flag_-Werror=attributes" | $as_tr_sh`
+ 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_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 test "$cross_compiling" = yes; then :
+ MALLOC_ZERO_RETURNS_NULL=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+
+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 :
+ MALLOC_ZERO_RETURNS_NULL=yes
+else
+ MALLOC_ZERO_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
+{ $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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+ 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 <http://pkg-config.freedesktop.org/>.
+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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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
+
+CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}}
+
+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
+
+
+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
+
+
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+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 -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+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
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# 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.3, which was
+generated by GNU Autoconf 2.68. 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 <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>."
+
+_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.3
+configured by $0, generated by GNU Autoconf 2.68,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 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"`'
+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_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $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 \
+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_flag_spec_ld \
+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 2>/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
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$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
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$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"" || {
+ # Autoconf 2.62 quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$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"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_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 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 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
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking. This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# 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
+
diff --git a/libXt/configure.ac b/libXt/configure.ac
index 96f0ccb17..d15b32699 100644
--- a/libXt/configure.ac
+++ b/libXt/configure.ac
@@ -22,7 +22,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
-AC_INIT([libXt], [1.1.1],
+AC_INIT([libXt], [1.1.3],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXt])
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_HEADERS([config.h])
@@ -35,12 +35,20 @@ AM_MAINTAINER_MODE
# Initialize libtool
AC_PROG_LIBTOOL
-# Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS
+# 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.8 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.8)
+ [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 <alloca.h>]))
@@ -86,7 +94,14 @@ case $host_os in
;;
esac
-AC_HAVE_LIBRARY(ws2_32)
+# 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]),
@@ -95,6 +110,26 @@ 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'
@@ -144,5 +179,6 @@ AC_CONFIG_FILES([Makefile
include/Makefile
man/Makefile
specs/Makefile
+ test/Makefile
xt.pc])
AC_OUTPUT
diff --git a/libXt/depcomp b/libXt/depcomp
new file mode 100644
index 000000000..df8eea7e4
--- /dev/null
+++ b/libXt/depcomp
@@ -0,0 +1,630 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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 <http://www.gnu.org/licenses/>.
+
+# 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 <oliva@dcc.unicamp.br>.
+
+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 outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+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"
+
+# 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
+
+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 -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> "$depfile"
+ echo >> "$depfile"
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. 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.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ 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 -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ 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.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+ 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 -eq 0; then :
+ else
+ 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add `dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ echo "#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.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mechanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # 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.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || 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"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the 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:: \1 \\:p' >> "$depfile"
+ echo " " >> "$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:
diff --git a/libXt/docbook.am b/libXt/docbook.am
new file mode 100644
index 000000000..bba4d5453
--- /dev/null
+++ b/libXt/docbook.am
@@ -0,0 +1,105 @@
+#
+# 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)
diff --git a/libXt/include/Makefile.in b/libXt/include/Makefile.in
new file mode 100644
index 000000000..35f0b52d9
--- /dev/null
+++ b/libXt/include/Makefile.in
@@ -0,0 +1,569 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(xtinclude_HEADERS)
+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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+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__installdirs = "$(DESTDIR)$(xtincludedir)" \
+ "$(DESTDIR)$(xtincludedir)"
+HEADERS = $(nodist_xtinclude_HEADERS) $(xtinclude_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-nodist_xtincludeHEADERS: $(nodist_xtinclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(xtincludedir)" || $(MKDIR_P) "$(DESTDIR)$(xtincludedir)"
+ @list='$(nodist_xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xtincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xtincludedir)" && rm -f $$files
+install-xtincludeHEADERS: $(xtinclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(xtincludedir)" || $(MKDIR_P) "$(DESTDIR)$(xtincludedir)"
+ @list='$(xtinclude_HEADERS)'; test -n "$(xtincludedir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xtincludedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xtincludedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 all all-am check check-am clean clean-generic \
+ clean-libtool ctags 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 uninstall \
+ uninstall-am uninstall-nodist_xtincludeHEADERS \
+ uninstall-xtincludeHEADERS
+
+
+# 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:
diff --git a/libXt/install-sh b/libXt/install-sh
new file mode 100644
index 000000000..6781b987b
--- /dev/null
+++ b/libXt/install-sh
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # 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.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# 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_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+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
+no_target_directory=
+
+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
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+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
+ 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
+ trap '(exit $?); exit' 1 2 13 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 starting with `-'.
+ 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
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst;;
+ esac
+
+ # 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 -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ 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-writeable 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
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test -z "$d" && 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` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob 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:
diff --git a/libXt/ltmain.sh b/libXt/ltmain.sh
new file mode 100644
index 000000000..3061e3c5a
--- /dev/null
+++ b/libXt/ltmain.sh
@@ -0,0 +1,9636 @@
+
+# libtool (GNU libtool) 2.4
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 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)
+# --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
+# automake: $automake_version
+# autoconf: $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+# General help using GNU software: <http://www.gnu.org/gethelp/>.
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4
+TIMESTAMP=""
+package_revision=1.3293
+
+# 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'}
+: ${EGREP="grep -E"}
+: ${FGREP="grep -F"}
+: ${GREP="grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="sed"}
+: ${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=:
+ 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 --version) 2>/dev/null |$SED 1q`"'/
+ s/\$autoconf_version/'"`(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_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-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 <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "${write_libobj}"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name 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.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $opt_debug
+ func_convert_core_file_wine_to_w32_result="$1"
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/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 | *.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_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $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 <import library>.
+ $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 >/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 ()
+{
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done
+ 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 <<EOF
+
+/* $cwrappersource - temporary wrapper executable 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 executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* 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 <<EOF
+volatile const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test "$fast_install" = yes; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ intptr_t rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (strcmp (argv[i], dumpscript_opt) == 0)
+ {
+EOF
+ case "$host" in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (strcmp (argv[i], debug_opt) == 0)
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 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 -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ fputs ("/' -e 's/$/\\n", f);/'
+
+ 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)
+ 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)
+ 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$dir"
+ # 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
+ 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)
+ 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 <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ 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 I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ 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 a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_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\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test "$want_nocaseglob" = yes; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/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
+ 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_apped 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"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ 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
+ 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"
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ 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
+
diff --git a/libXt/man/Makefile.in b/libXt/man/Makefile.in
new file mode 100644
index 000000000..b2a4047d1
--- /dev/null
+++ b/libXt/man/Makefile.in
@@ -0,0 +1,941 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+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__installdirs = "$(DESTDIR)$(libmandir)"
+DATA = $(libman_DATA)
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-libmanDATA: $(libman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(libmandir)" || $(MKDIR_P) "$(DESTDIR)$(libmandir)"
+ @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libmandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libmandir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 \
+ 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 \
+ uninstall uninstall-am uninstall-libmanDATA
+
+
+# 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:
diff --git a/libXt/missing b/libXt/missing
new file mode 100644
index 000000000..28055d2ae
--- /dev/null
+++ b/libXt/missing
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 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 <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ 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
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ tar*)
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ exit 1
+ fi
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running `$TOOL --version' or `$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG="\${$#}"
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ tar*)
+ shift
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case $firstarg in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case $firstarg in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# 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:
diff --git a/libXt/specs/CH01 b/libXt/specs/CH01
deleted file mode 100644
index 78f128bd7..000000000
--- a/libXt/specs/CH01
+++ /dev/null
@@ -1,2471 +0,0 @@
-.\" $Xorg: CH01,v 1.3 2000/08/17 19:42:42 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 1\fP\s-1
-
-\s+1\fBIntrinsics and Widgets\fP\s-1
-.sp 2
-.if \n(GS .nr nh*hl 1
-.nr H1 1
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-\fBChapter 1 \(em Intrinsics and Widgets\fP
-.XE
-The \*(xI are a programming library tailored to the special requirements
-of user interface construction within a network window system,
-specifically the X Window System.
-The \*(xI and a widget set make up an \*(tk.
-
-.NH 2
-Intrinsics
-.XS
-\fB\*(SN Intrinsics\fP
-.XE
-.LP
-The \*(xI 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.
-.LP
-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.
-.LP
-When the \*(xI were first conceived, the root of the object
-hierarchy was a widget class named
-Core.
-.IN "Core"
-In Release 4 of the
-\*(xI, three nonwidget superclasses were added above Core.
-These superclasses are described in Chapter 12. The name of the class
-now at the root of the Intrinsics class hierarchy is
-Object.
-.IN "Object"
-The remainder of this
-specification refers uniformly to \fIwidgets\fP and \fICore\fP
-as if they were the
-base class for all \*(xI operations. The argument descriptions
-for each Intrinsics procedure and Chapter 12 describe which operations
-are defined for the nonwidget superclasses of Core. The reader may
-determine by context whether a specific reference to \fIwidget\fP
-actually means ``widget'' or ``object.''
-
-.NH 2
-Languages
-.XS
-\fB\*(SN Languages\fP
-.XE
-.LP
-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 \fIclient\fP refers to
-any module, widget, or application that calls an Intrinsics procedure.
-.LP
-Applications that use the \*(xI mechanisms
-must include the header files
-.Pn < X11/Intrinsic.h >
-and
-.Pn < X11/StringDefs.h >,
-or their equivalent,
-and they may also include
-.Pn < X11/Xatoms.h >
-and
-.Pn < X11/Shell.h >.
-In addition, widget implementations should include
-.Pn < X11/IntrinsicP.h >
-instead of
-.Pn < X11/Intrinsic.h >.
-.LP
-The applications must also include the additional header files for
-each widget class that they are to use (for example,
-.Pn < X11/Xaw/Label.h >
-or
-.Pn < X11/Xaw/Scrollbar.h >).
-On a POSIX-based system,
-the \*(xI object library file is named
-.PN libXt.a
-and is usually referenced as \-lXt when linking the application.
-
-.NH 2
-Procedures and Macros
-.LP
-.XS
-\fB\*(SN Procedures and Macros\fP
-.XE
-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.
-.LP
-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:
-.PN XtCheckSubclass ,
-.PN XtNew ,
-.PN XtNumber ,
-.PN XtOffsetOf ,
-.PN XtOffset ,
-and
-.PN XtSetArg .
-
-.NH 2
-Widgets
-.LP
-.XS
-\fB\*(SN Widgets\fP
-.XE
-.LP
-The fundamental abstraction and data type of the \*(tk 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.
-.LP
-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 Section 2.5.
-.LP
-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 Section 1.6.
-The predefined widget classes adhere to these conventions.
-.LP
-A widget instance is composed of two parts:
-.IP \(bu 5
-A data structure which contains instance-specific values.
-.IP \(bu 5
-A class structure which contains information that is applicable to
-all widgets of that class.
-.LP
-Much of the input/output of a widget (for example, fonts, colors, sizes,
-or border widths) is customizable by users.
-.LP
-This chapter discusses the base widget classes,
-Core, Composite, and Constraint, and
-ends with a discussion of widget classing.
-
-.NH 3
-Core Widgets
-.XS
-\*(SN Core Widgets
-.XE
-.LP
-.IN "Core" "" "@DEF@"
-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
-.PN CoreClassPart
-and
-.PN CorePart
-structures.
-
-.NH 4
-CoreClassPart Structure
-.XS
-\*(SN CoreClassPart Structure
-.XE
-.LP
-All widget classes contain the fields defined in the
-.PN CoreClassPart
-structure.
-.LP
-.IN "CoreClassPart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3.5i
-.ta .5i 3.5i
-typedef struct {
- WidgetClass superclass; See Section 1.6
- String class_name; See Chapter 9
- Cardinal widget_size; See Section 1.6
- XtProc class_initialize; See Section 1.6
- XtWidgetClassProc class_part_initialize; See Section 1.6
- XtEnum class_inited; See Section 1.6
- XtInitProc initialize; See Section 2.5
- XtArgsProc initialize_hook; See Section 2.5
- XtRealizeProc realize; See Section 2.6
- XtActionList actions; See Chapter 10
- Cardinal num_actions; See Chapter 10
- XtResourceList resources; See Chapter 9
- Cardinal num_resources; See Chapter 9
- XrmClass xrm_class; Private to resource manager
- Boolean compress_motion; See Section 7.9
- XtEnum compress_exposure; See Section 7.9
- Boolean compress_enterleave; See Section 7.9
- Boolean visible_interest; See Section 7.10
- XtWidgetProc destroy; See Section 2.8
- XtWidgetProc resize; See Chapter 6
- XtExposeProc expose; See Section 7.10
- XtSetValuesFunc set_values; See Section 9.7
- XtArgsFunc set_values_hook; See Section 9.7
- XtAlmostProc set_values_almost; See Section 9.7
- XtArgsProc get_values_hook; See Section 9.7
- XtAcceptFocusProc accept_focus; See Section 7.3
- XtVersionType version; See Section 1.6
- XtPointer callback_private; Private to callbacks
- String tm_table; See Chapter 10
- XtGeometryHandler query_geometry; See Chapter 6
- XtStringProc display_accelerator; See Chapter 10
- XtPointer extension; See Section 1.6
-} CoreClassPart;
-.De
-.LP
-.eM
-All widget classes have the Core class fields as their first component.
-The prototypical
-.PN WidgetClass
-and
-.PN CoreWidgetClass
-are defined with only this set of fields.
-.LP
-.IN "Core"
-.IN "WidgetClass" "" "@DEF@"
-.IN "CoreWidgetClass" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- CoreClassPart core_class;
-} WidgetClassRec, *WidgetClass, CoreClassRec, *CoreWidgetClass;
-.De
-.LP
-.eM
-Various routines can cast widget class pointers, as needed,
-to specific widget class types.
-.LP
-The single occurrences of the class record and pointer for
-creating instances of Core are
-.LP
-In
-.PN IntrinsicP.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern WidgetClassRec widgetClassRec;
-#define coreClassRec widgetClassRec
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern WidgetClass widgetClass, coreWidgetClass;
-.De
-.LP
-.eM
-The opaque types
-.PN Widget
-and
-.PN WidgetClass
-and the opaque variable
-.PN 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 \*(xI use
-incomplete structure definitions in
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _WidgetClassRec *WidgetClass, *CoreWidgetClass;
-.De
-.eM
-
-.NH 4
-CorePart Structure
-.XS
-\*(SN CorePart Structure
-.XE
-.LP
-All widget instances contain the fields defined in the
-.PN CorePart
-structure.
-.LP
-.IN "CorePart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _CorePart {
- Widget self; Described below
- WidgetClass widget_class; See Section 1.6
- Widget parent; See Section 2.5
- Boolean being_destroyed; See Section 2.8
- XtCallbackList destroy_callbacks; See Section 2.8
- XtPointer constraints; See Section 3.6
- Position x; See Chapter 6
- Position y; See Chapter 6
- Dimension width; See Chapter 6
- Dimension height; See Chapter 6
- Dimension border_width; See Chapter 6
- Boolean managed; See Chapter 3
- Boolean sensitive; See Section 7.7
- Boolean ancestor_sensitive; See Section 7.7
- XtTranslations accelerators; See Chapter 10
- Pixel border_pixel; See Section 2.6
- Pixmap border_pixmap; See Section 2.6
- WidgetList popup_list; See Chapter 5
- Cardinal num_popups; See Chapter 5
- String name; See Chapter 9
- Screen *screen; See Section 2.6
- Colormap colormap; See Section 2.6
- Window window; See Section 2.6
- Cardinal depth; See Section 2.6
- Pixel background_pixel; See Section 2.6
- Pixmap background_pixmap; See Section 2.6
- Boolean visible; See Section 7.10
- Boolean mapped_when_managed; See Chapter 3
-} CorePart;
-.De
-.LP
-.eM
-All widget instances have the Core fields as their first component.
-The prototypical type
-.PN Widget
-is defined with only this set of fields.
-.LP
-.IN "Widget" "" "@DEF@"
-.IN "CoreWidget" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- CorePart core;
-} WidgetRec, *Widget, CoreRec, *CoreWidget;
-.De
-.LP
-.eM
-Various routines can cast widget pointers, as needed,
-to specific widget types.
-.LP
-In order to make these types opaque and ensure that the compiler
-does not allow applications to access private data, the \*(xI use
-incomplete structure definitions in
-.PN Intrinsic.h .
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _WidgetRec *Widget, *CoreWidget;
-.De
-.eM
-
-.NH 4
-Core Resources
-.LP
-.XS
-\fB\*(SN Core Resources\fP
-.XE
-.LP
-.IN "CoreWidget" "Resources"
-The resource names, classes, and representation types specified in the
-.PN coreClassRec
-resource list are
-.LP
-.TS
-lw(1.5i) lw(1.5i) lw(2.5i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-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
-.sp 6p
-_
-.TE
-.LP
-Additional resources are defined for all widgets via the
-.PN objectClassRec
-and
-.PN rectObjClassRec
-resource lists; see Sections 12.2 and 12.3 for details.
-
-.NH 4
-CorePart Default Values
-.XS
-\*(SN CorePart Default Values
-.XE
-.LP
-The default values for the Core fields, which are filled in by the \*(xI,
-from the resource lists, and by the initialize procedures, are
-.LP
-.TS
-lw(1.5i) lw(4.25i) .
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-self Address of the widget structure (may not be changed).
-T{
-widget_class
-T} T{
-\fIwidget_class\fP argument to
-.PN XtCreateWidget
-(may not be changed).
-T}
-T{
-parent
-T} T{
-\fIparent\fP argument to
-.PN XtCreateWidget
-(may not be changed).
-T}
-being_destroyed Parent's \fIbeing_destroyed\fP value.
-destroy_callbacks NULL
-constraints NULL
-x 0
-y 0
-width 0
-height 0
-border_width 1
-T{
-managed
-T} T{
-.PN False
-T}
-T{
-sensitive
-T} T{
-.PN True
-T}
-ancestor_sensitive T{
-logical AND of parent's \fIsensitive\fP and
-\fIancestor_sensitive\fP values.
-T}
-accelerators NULL
-T{
-border_pixel
-T} T{
-.PN XtDefaultForeground
-T}
-border_pixmap T{
-.PN XtUnspecifiedPixmap
-T}
-popup_list NULL
-num_popups 0
-T{
-name
-T} T{
-\fIname\fP argument to
-.PN XtCreateWidget
-(may not be changed).
-T}
-T{
-screen
-T} T{
-Parent's \fIscreen\fP; top-level widget gets screen from display specifier
-.br
-(may not be changed).
-T}
-colormap Parent's \fIcolormap\fP value.
-window NULL
-depth Parent's \fIdepth\fP; top-level widget gets root window depth.
-T{
-background_pixel
-T} T{
-.PN XtDefaultBackground
-T}
-background_pixmap T{
-.PN XtUnspecifiedPixmap
-T}
-T{
-visible
-T} T{
-.PN True
-T}
-T{
-mapped_when_managed
-T} T{
-.PN True
-T}
-.sp 6p
-_
-.TE
-.LP
-.IN XtUnspecifiedPixmap "" "@DEF@"
-.PN XtUnspecifiedPixmap
-is a symbolic constant guaranteed to be unequal to
-any valid Pixmap id,
-.PN None ,
-and
-.PN ParentRelative .
-
-.NH 3
-Composite Widgets
-.XS
-\*(SN Composite Widgets
-.XE
-.LP
-.IN "Composite" "" "@DEF@"
-The Composite
-widget class is a subclass of the
-Core
-widget class (see Chapter 3).
-Composite widgets are intended to be containers for other widgets.
-The additional data used by composite widgets are defined by the
-.PN CompositeClassPart
-and
-.PN CompositePart
-structures.
-
-.NH 4
-CompositeClassPart Structure
-.XS
-\*(SN CompositeClassPart Structure
-.XE
-.LP
-In addition to the
-Core
-class fields,
-widgets of the Composite class have the following class fields.
-.LP
-.IN "CompositeClassPart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3.5i
-.ta .5i 3.5i
-typedef struct {
- XtGeometryHandler geometry_manager; See Chapter 6
- XtWidgetProc change_managed; See Chapter 3
- XtWidgetProc insert_child; See Chapter 3
- XtWidgetProc delete_child; See Chapter 3
- XtPointer extension; See Section 1.6
-} CompositeClassPart;
-.De
-.LP
-.eM
-The extension record defined for
-.PN CompositeClassPart
-with \fIrecord_type\fP
-equal to
-.PN \s-1NULLQUARK\s+1
-is
-.PN CompositeClassExtensionRec .
-.LP
-.IN "CompositeClassExtensionRec" "" "@DEF@"
-.IN "CompositeClassExtension" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3.5i
-.ta .5i 3.5i
-typedef struct {
- XtPointer next_extension; See Section 1.6.12
- XrmQuark record_type; See Section 1.6.12
- long version; See Section 1.6.12
- Cardinal record_size; See Section 1.6.12
- Boolean accepts_objects; See Section 2.5.2
- Boolean allows_change_managed_set; See Section 3.4.3
-} CompositeClassExtensionRec, *CompositeClassExtension;
-.De
-.LP
-.eM
-Composite
-classes have the Composite class fields immediately following the
-Core class fields.
-.LP
-.IN "CompositeWidgetClass" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
-} CompositeClassRec, *CompositeWidgetClass;
-.De
-.LP
-.eM
-The single occurrences of the class record and pointer for creating
-instances of Composite are
-.LP
-In
-.PN IntrinsicP.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern CompositeClassRec compositeClassRec;
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern WidgetClass compositeWidgetClass;
-.De
-.LP
-.eM
-The opaque types
-.PN CompositeWidget
-and
-.PN CompositeWidgetClass
-and the opaque variable
-.PN compositeWidgetClass
-are defined for generic operations on widgets whose class
-is Composite or a subclass of Composite.
-The symbolic constant for the
-.PN CompositeClassExtension
-version identifier is
-.PN XtCompositeExtensionVersion
-(see Section 1.6.12).
-.PN Intrinsic.h
-uses an incomplete structure
-definition to ensure that the compiler catches attempts to access
-private data.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _CompositeClassRec *CompositeWidgetClass;
-.De
-.eM
-
-.NH 4
-CompositePart Structure
-.XS
-\*(SN CompositePart Structure
-.XE
-.LP
-In addition to the
-Core instance
-fields,
-widgets of the Composite class have the following
-instance fields defined in the
-.PN CompositePart
-structure.
-.LP
-.IN "CompositePart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- WidgetList children; See Chapter 3
- Cardinal num_children; See Chapter 3
- Cardinal num_slots; See Chapter 3
- XtOrderProc insert_position; See Section 3.2
-} CompositePart;
-.De
-.LP
-.eM
-Composite
-widgets have the Composite instance fields immediately following the Core
-instance fields.
-.LP
-.IN "CompositeWidget" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- CorePart core;
- CompositePart composite;
-} CompositeRec, *CompositeWidget;
-.De
-.LP
-.eM
-.PN Intrinsic.h
-uses an incomplete structure definition to ensure that the
-compiler catches attempts to access private data.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _CompositeRec *CompositeWidget;
-.De
-.eM
-
-.NH 4
-Composite Resources
-.XS
-\fB\*(SN Composite Resources\fP
-.XE
-.LP
-.IN "CompositeWidget" "Resources"
-The resource names, classes, and representation types
-that are specified in
-the
-.PN compositeClassRec
-resource list are
-.LP
-.TS
-lw(1.5i) lw(1.5i) lw(2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNchildren XtCReadOnly XtRWidgetList
-XtNinsertPosition XtCInsertPosition XtRFunction
-XtNnumChildren XtCReadOnly XtRCardinal
-.sp 6p
-_
-.TE
-
-.NH 4
-CompositePart Default Values
-.XS
-\*(SN CompositePart Default Values
-.XE
-.LP
-The default values for the Composite fields,
-which are filled in from the
-Composite
-resource list and by the
-Composite
-initialize procedure, are
-.LP
-.TS
-l l .
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-children NULL
-num_children 0
-num_slots 0
-insert_position Internal function to insert at end
-.sp 6p
-_
-.TE
-.LP
-The \fIchildren\fP, \fInum_children\fP,
-and \fIinsert_position\fP fields are declared
-as resources;
-.IN XtNinsertPosition
-XtNinsertPosition
-is a settable resource,
-.IN XtNchildren
-XtNchildren
-and
-.IN XtNnumChildren
-XtNnumChildren
-may be read by any client but should only be modified by the composite
-widget class procedures.
-
-.NH 3
-Constraint Widgets
-.XS
-\*(SN Constraint Widgets
-.XE
-.LP
-.IN "Constraint" "" "@DEF@"
-The Constraint
-widget class is a subclass of the
-Composite
-widget class (see Section 3.6). 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
-.PN ConstraintClassPart
-and
-.PN ConstraintPart
-structures.
-
-.NH 4
-ConstraintClassPart Structure
-.XS
-\*(SN ConstraintClassPart Structure
-.XE
-.LP
-In addition to the
-Core
-and
-Composite
-class fields,
-widgets of the Constraint class
-have the following class fields.
-.LP
-.IN "ConstraintClassPart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- XtResourceList resources; See Chapter 9
- Cardinal num_resources; See Chapter 9
- Cardinal constraint_size; See Section 3.6
- XtInitProc initialize; See Section 3.6
- XtWidgetProc destroy; See Section 3.6
- XtSetValuesFunc set_values; See Section 9.7.2
- XtPointer extension; See Section 1.6
-} ConstraintClassPart;
-.De
-.LP
-.eM
-The extension record defined for
-.PN ConstraintClassPart
-with \fIrecord_type\fP equal to
-.PN \s-1NULLQUARK\s+1
-is
-.PN ConstraintClassExtensionRec .
-.LP
-.IN "ConstraintClassExtensionRec" "" "@DEF@"
-.IN "ConstraintClassExtension" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- XtPointer next_extension; See Section 1.6.12
- XrmQuark record_type; See Section 1.6.12
- long version; See Section 1.6.12
- Cardinal record_size; See Section 1.6.12
- XtArgsProc get_values_hook; See Section 9.7.1
-} ConstraintClassExtensionRec, *ConstraintClassExtension;
-.De
-.LP
-.eM
-Constraint
-classes have the Constraint class fields immediately following the
-Composite class fields.
-.LP
-.IN "ConstraintWidgetClass" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _ConstraintClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ConstraintClassPart constraint_class;
-} ConstraintClassRec, *ConstraintWidgetClass;
-.De
-.LP
-.eM
-The single occurrences of the class record and pointer for creating
-instances of Constraint are
-.LP
-In
-.PN IntrinsicP.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern ConstraintClassRec constraintClassRec;
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern WidgetClass constraintWidgetClass;
-.De
-.LP
-.eM
-The opaque types
-.PN ConstraintWidget
-and
-.PN ConstraintWidgetClass
-and the opaque variable
-.PN constraintWidgetClass
-are defined for generic operations on widgets
-whose class is Constraint or a subclass
-of Constraint.
-The symbolic constant for the
-.PN ConstraintClassExtension
-version identifier is
-.PN XtConstraintExtensionVersion
-(see Section 1.6.12).
-.PN Intrinsic.h
-uses an incomplete structure definition to ensure that the
-compiler catches attempts to access private data.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _ConstraintClassRec *ConstraintWidgetClass;
-.De
-.eM
-
-.NH 4
-ConstraintPart Structure
-.XS
-\*(SN ConstraintPart Structure
-.XE
-.LP
-In addition to the
-Core
-and
-Composite instance
-fields,
-widgets of the Constraint class have the following unused
-instance fields defined in the
-.PN ConstraintPart
-structure
-.LP
-.IN "ConstraintPart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- int empty;
-} ConstraintPart;
-.De
-.LP
-.eM
-Constraint
-widgets have the Constraint instance fields immediately following the
-Composite instance fields.
-.LP
-.IN "ConstraintWidget" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ConstraintPart constraint;
-} ConstraintRec, *ConstraintWidget;
-.De
-.LP
-.eM
-.PN Intrinsic.h
-uses an incomplete structure definition to ensure that the
-compiler catches attempts to access private data.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _ConstraintRec *ConstraintWidget;
-.De
-.eM
-
-.NH 4
-Constraint Resources
-.XS
-\fB\*(SN Constraint Resources\fP
-.XE
-.LP
-The
-.PN constraintClassRec
-\fIcore_class\fP and \fIconstraint_class resources\fP fields are NULL,
-and the \fInum_resources\fP fields are zero;
-no additional resources beyond those declared by
-the superclasses
-are defined for
-Constraint.
-
-.NH 2
-Implementation-Specific Types
-.XS
-\fB\*(SN Implementation-Specific Types\fP
-.XE
-.LP
-To increase the portability of widget and application source code
-between different system environments, the \*(xI define several
-types whose precise representation is explicitly dependent upon,
-and chosen by, each individual implementation of the \*(xI.
-.LP
-These implementation-defined types are
-.IN "Boolean" "" "@DEF@"
-.IP \fBBoolean\fP 11
-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
-.PN True .
-.IN "Cardinal" "" "@DEF@"
-.IP \fBCardinal\fP 11
-An unsigned integer datum with a minimum range of [0..2^16-1].
-.IN "Dimension" "" "@DEF@"
-.IP \fBDimension\fP 11
-An unsigned integer datum with a minimum range of [0..2^16-1].
-.IN "Position" "" "@DEF@"
-.IP \fBPosition\fP 11
-A signed integer datum with a minimum range of [-2^15..2^15-1].
-.IN "XtPointer" "" "@DEF@"
-.IP \fBXtPointer\fP 11
-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
-.PN XtPointer
-and back again and the result will
-compare equal to the original value. In ANSI C
-environments it is expected that
-.PN XtPointer
-will be
-defined as void*.
-.IN "XtArgVal" "" "@DEF@"
-.IP \fBXtArgVal\fP 11
-A datum large enough to contain an
-.PN XtPointer ,
-.PN Cardinal ,
-.PN Dimension ,
-or
-.PN Position
-value.
-.IN "XtEnum" "" "@DEF@"
-.IP \fBXtEnum\fP 11
-An integer datum large enough to encode at least 128 distinct
-values, two of which are the symbolic values
-.PN True
-and
-.PN False .
-The symbolic values
-.PN \s-1TRUE\s+1
-and
-.PN \s-1FALSE\s+1
-are
-also defined to be equal to
-.PN True
-and
-.PN False ,
-respectively.
-.LP
-In addition to these specific types, the precise order of the
-fields within the structure declarations for any of the instance
-part records
-.PN ObjectPart ,
-.PN RectObjPart ,
-.PN CorePart ,
-.PN CompositePart ,
-.PN ShellPart ,
-.PN WMShellPart ,
-.PN TopLevelShellPart ,
-and
-.PN ApplicationShellPart
-is implementation-defined. These
-structures may also have additional private
-fields internal to the implementation.
-The
-.PN ObjectPart ,
-.PN RectObjPart ,
-and
-.PN CorePart
-structures must be defined so that any member with the same name
-appears at the same offset in
-.PN ObjectRec ,
-.PN RectObjRec ,
-and
-.PN CoreRec
-.Pn ( WidgetRec ).
-No other relations between the offsets of any two
-fields may be assumed.
-
-.NH 2
-Widget Classing
-.LP
-.XS
-\fB\*(SN Widget Classing\fP
-.XE
-.IN "widget_class" "" "@DEF@"
-The \fIwidget_class\fP 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.
-.LP
-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
-.PN 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).
-.LP
-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.
-.LP
-To make good use of subclassing,
-widget declarations and naming conventions are highly stylized.
-A widget consists of three files:
-.IP \(bu 5
-A public .h file, used by client widgets or applications.
-.IP \(bu 5
-A private .h file, used by widgets whose classes
-are subclasses of the widget class.
-.IP \(bu 5
-A .c file, which implements the widget.
-
-.NH 3
-Widget Naming Conventions
-.XS
-\fB\*(SN Widget Naming Conventions\fP
-.XE
-.LP
-The \*(xI 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:
-.IP \(bu 5
-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,
-.PN ArgList
-or
-.PN XtSetValues ).
-.IP \(bu 5
-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 \fIbackground_pixmap\fP field has the corresponding identifier
-XtNbackgroundPixmap,
-which is defined as the string ``backgroundPixmap''.
-Many predefined names are listed in
-.Pn < X11/StringDefs.h >.
-Before you invent a new name,
-you should make sure there is not already a name that you can use.
-.IP \(bu 5
-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
-.Pn < X11/StringDefs.h >.
-.IP \(bu 5
-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
-.Pn < X11/StringDefs.h >.
-.IP \(bu 5
-New widget classes start with a capital and use uppercase for compound
-words.
-Given a new class name AbcXyz, you should derive several names:
-.RS
-.IP \- 5
-Additional widget instance structure part name AbcXyzPart.
-.IP \- 5
-Complete widget instance structure names AbcXyzRec and _AbcXyzRec.
-.IP \- 5
-Widget instance structure pointer type name AbcXyzWidget.
-.IP \- 5
-Additional class structure part name AbcXyzClassPart.
-.IP \- 5
-Complete class structure names AbcXyzClassRec and _AbcXyzClassRec.
-.IP \- 5
-Class structure pointer type name AbcXyzWidgetClass.
-.IP \- 5
-Class structure variable abcXyzClassRec.
-.IP \- 5
-Class structure pointer variable abcXyzWidgetClass.
-.RE
-.IP \(bu 5
-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'').
-.LP
-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
-.PN 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.
-
-.NH 3
-Widget Subclassing in Public .h Files
-.XS
-\*(SN Widget Subclassing in Public .h Files
-.XE
-.LP
-The public .h file for a widget class is imported by clients
-and contains
-.IP \(bu 5
-A reference to the public .h file for the superclass.
-.IP \(bu 5
-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.
-.IP \(bu 5
-Type declarations for any new resource data types defined by the class.
-.IP \(bu 5
-The class record pointer variable used to create widget instances.
-.IP \(bu 5
-The C type that corresponds to widget instances of this class.
-.IP \(bu 5
-Entry points for new class methods.
-.LP
-For example, the following is the public .h file for a possible
-implementation of a Label widget:
-.LP
-.Ds
-.TA .5i 1.75i
-.ta .5i 1.75i
-#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
-.De
-.LP
-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.
-.LP
-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
-.PN Constraint.h .
-
-.NH 3
-Widget Subclassing in Private .h Files
-.XS
-\*(SN Widget Subclassing in Private .h Files
-.XE
-.LP
-The private .h file for a widget is imported by widget classes that are
-subclasses of the widget and contains
-.IP \(bu 5
-A reference to the public .h file for the class.
-.IP \(bu 5
-A reference to the private .h file for the superclass.
-.IP \(bu 5
-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.
-.IP \(bu 5
-A structure part definition for
-the new fields that the widget instance adds to its superclass's
-widget structure.
-.IP \(bu 5
-The complete widget instance structure definition for this widget.
-.IP \(bu 5
-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.
-.IP \(bu 5
-The complete
-constraint
-structure definition if the widget class is a subclass of
-Constraint.
-.IP \(bu 5
-Type definitions for any new procedure types used by class methods
-declared in the widget class part.
-.IP \(bu 5
-A structure part definition for
-the new fields that this widget class adds to its superclass's widget class
-structure.
-.IP \(bu 5
-The complete widget class structure definition for this widget.
-.IP \(bu 5
-The complete widget class extension structure definition
-for this widget, if any.
-.IP \(bu 5
-The symbolic constant identifying the class extension version, if any.
-.IP \(bu 5
-The name of the global class structure variable containing the generic
-class structure for this class.
-.IP \(bu 5
-An inherit constant for each new procedure in the widget class part structure.
-.LP
-For example, the following is the private .h file for a possible Label widget:
-.LP
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-#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;
-.De
-.sp
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-/* 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
-.De
-.LP
-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
-.PN ConstrainP.h .
-
-.NH 3
-Widget Subclassing in .c Files
-.XS
-\*(SN Widget Subclassing in .c Files
-.XE
-.LP
-The .c file for a widget contains the structure initializer
-for the class record variable,
-which contains the following parts:
-.IP \(bu 5
-Class information (for example, \fIsuperclass\fP, \fIclass_name\fP,
-\fIwidget_size\fP,
-\fIclass_initialize\fP, and \fIclass_inited\fP).
-.IP \(bu 5
-Data constants (for example, \fIresources\fP and \fInum_resources\fP,
-\fIactions\fP and \fInum_actions\fP, \fIvisible_interest\fP,
-\fIcompress_motion\fP,
-\fIcompress_exposure\fP, and \fIversion\fP).
-.IP \(bu 5
-Widget operations (for example, \fIinitialize\fP, \fIrealize\fP, \fIdestroy\fP,
-\fIresize\fP, \fIexpose\fP, \fIset_values\fP, \fIaccept_focus\fP,
-and any new operations specific to
-the widget).
-.LP
-.IN "superclass" "" "@DEF@"
-The \fIsuperclass\fP field points to the superclass
-global class
-record, declared in the superclass private .h file.
-For direct subclasses of the generic core widget,
-\fIsuperclass\fP should be initialized to the address of the
-.PN widgetClassRec
-structure.
-The superclass is used for class chaining operations and for
-inheriting or enveloping a superclass's operations
-(see Sections 1.6.7, 1.6.9, and 1.6.10).
-.LP
-.IN "class_name" "" "@DEF@"
-The \fIclass_name\fP 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.
-
-.LP
-.IN "widget_size" "" "@DEF@"
-The \fIwidget_size\fP field is the size of the corresponding widget
-instance structure
-(not the size of the class structure).
-.LP
-.IN "version" "" "@DEF@"
-The \fIversion\fP field indicates the toolkit
-implementation version number and is used for
-runtime consistency checking of the \*(tk and widgets in an application.
-Widget writers must set it to the
-implementation-defined symbolic value
-.PN XtVersion
-in the widget class structure initialization.
-Those widget writers who believe that their widget binaries are compatible
-with other implementations of the \*(xI can put the special value
-.PN XtVersionDontCheck
-in the \fIversion\fP field to disable version checking for those widgets.
-If a widget needs to compile alternative code for different
-revisions of the \*(xI interface definition, it may use the symbol
-.PN XtSpecificationRelease ,
-as described in Chapter 13.
-Use of
-.PN XtVersion
-allows the \*(xI implementation to recognize widget binaries
-that were compiled with older implementations.
-.LP
-The \fIextension\fP 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.
-.LP
-All other fields are described in their respective sections.
-.LP
-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 Chapter 9.
-.LP
-.Ds
-.TA .5i 1.5i 3i
-.ta .5i 1.5i 3i
-
-/* 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();
- .
- .
- .
-.De
-.sp
-.Ds
-.TA .5i 2i 3i
-.ta .5i 2i 3i
-/* 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 */
- .
- .
- .
-.De
-
-.NH 3
-Widget Class and Superclass Look Up
-.XS
-\*(SN Widget Class and Superclass Look Up
-.XE
-.LP
-To obtain the class of a widget, use
-.PN XtClass .
-.IN "XtClass" "" "@DEF@"
-.LP
-.sM
-.FD 0
-WidgetClass XtClass(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-The
-.PN XtClass
-function returns a pointer to the widget's class structure.
-.sp
-.LP
-To obtain the superclass of a widget, use
-.PN XtSuperclass .
-.IN "XtSuperclass" "" "@DEF@"
-.LP
-.sM
-.FD 0
-WidgetClass XtSuperclass(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-The
-.PN XtSuperclass
-function returns a pointer to the widget's superclass class structure.
-
-.NH 3
-Widget Subclass Verification
-.XS
-\*(SN Widget Subclass Verification
-.XE
-.LP
-To check the subclass to which a widget belongs, use
-.PN XtIsSubclass .
-.IN "XtIsSubclass" "" "@DEF@"
-.LP
-.sM
-.FD 0
-Boolean XtIsSubclass(\fIw\fP, \fIwidget_class\fP)
-.br
- Widget \fIw\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget or object instance whose class is to be checked. \*(oI
-.IP \fIwidget_class\fP 1i
-Specifies the widget class for which to test. \*(oC
-.LP
-.eM
-The
-.PN XtIsSubclass
-function returns
-.PN 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
-.PN XtIsSubclass
-to find out if a widget belongs to the desired class of objects.
-.sp
-.LP
-To test if a given widget belongs to a subclass of an \*(xI-defined
-class, the \*(xI define macros or functions equivalent to
-.PN XtIsSubclass
-for each of the built-in classes. These procedures are
-.PN XtIsObject ,
-.PN XtIsRectObj ,
-.PN XtIsWidget ,
-.PN XtIsComposite ,
-.PN XtIsConstraint ,
-.PN XtIsShell ,
-.PN XtIsOverrideShell ,
-.PN XtIsWMShell ,
-.PN XtIsVendorShell ,
-.PN XtIsTransientShell ,
-.PN XtIsTopLevelShell ,
-.PN XtIsApplicationShell ,
-and
-.PN XtIsSessionShell .
-.IN "XtIsObject" "" "@DEF@"
-.IN "XtIsRectObj" "" "@DEF@"
-.IN "XtIsWidget" "" "@DEF@"
-.IN "XtIsComposite" "" "@DEF@"
-.IN "XtIsConstraint" "" "@DEF@"
-.IN "XtIsShell" "" "@DEF@"
-.IN "XtIsOverrideShell" "" "@DEF@"
-.IN "XtIsWMShell" "" "@DEF@"
-.IN "XtIsVendorShell" "" "@DEF@"
-.IN "XtIsTransientShell" "" "@DEF@"
-.IN "XtIsTopLevelShell" "" "@DEF@"
-.IN "XtIsApplicationShell" "" "@DEF@"
-.IN "XtIsSessionShell" "" "@DEF@"
-.LP
-All these macros and functions have the same argument description.
-.LP
-.sM
-.FD 0
-Boolean XtIs\fI<class>\fP (\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget or object instance whose class is to be checked. \*(oI
-.LP
-.eM
-These procedures may be faster than calling
-.PN XtIsSubclass
-directly for the built-in classes.
-.sp
-.LP
-To check a widget's class
-and to generate a debugging error message, use
-.PN XtCheckSubclass ,
-defined in
-.Pn < X11/IntrinsicP.h >:
-.IN "XtCheckSubclass" "" "@DEF@"
-.LP
-.sM
-.FD 0
-void XtCheckSubclass(\fIw\fP, \fIwidget_class\fP, \fImessage\fP)
-.br
- Widget \fIw\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- String \fImessage\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget or object whose class is to be checked. \*(oI
-.IP \fIwidget_class\fP 1i
-Specifies the widget class for which to test. \*(oC
-.ds Me used
-.IP \fImessage\fP 1i
-Specifies the message to be used.
-.LP
-.eM
-The
-.PN XtCheckSubclass
-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,
-.PN XtCheckSubclass
-constructs an error message from the supplied message,
-the widget's actual class, and the expected class and calls
-.PN XtErrorMsg .
-.PN 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
-.PN XtCheckSubclass
-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.
-
-.NH 3
-Superclass Chaining
-.XS
-\*(SN Superclass Chaining
-.XE
-.LP
-.IN "Chaining" "superclass"
-.IN "Chaining" "Subclass"
-.IN "Superclass Chaining" "" "@DEF@"
-.IN "Subclass Chaining" "" "@DEF@"
-.IN "Inheritance"
-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 \*(xI 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
-.sp
-.ta 2i
-In all widget classes: \fIclass_name\fP
-.br
- \fIclass_initialize\fP
-.br
- \fIwidget_size\fP
-.br
- \fIrealize\fP
-.br
- \fIvisible_interest\fP
-.br
- \fIresize\fP
-.br
- \fIexpose\fP
-.br
- \fIaccept_focus\fP
-.br
- \fIcompress_motion\fP
-.br
- \fIcompress_exposure\fP
-.br
- \fIcompress_enterleave\fP
-.br
- \fIset_values_almost\fP
-.br
- \fItm_table\fP
-.br
- \fIversion\fP
-.br
- \fIallocate\fP
-.br
- \fIdeallocate\fP
-.sp
-In Composite widget classes: \fIgeometry_manager\fP
-.br
- \fIchange_managed\fP
-.br
- \fIinsert_child\fP
-.br
- \fIdelete_child\fP
-.br
- \fIaccepts_objects\fP
-.br
- \fIallows_change_managed_set\fP
-.sp
-In Constraint widget classes: \fIconstraint_size\fP
-.sp
-In Shell widget classes: \fIroot_geometry_manager\fP
-.sp
-.LP
-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
-.sp
-.ta 1i
-.br
- \fIclass_part_initialize\fP
-.br
- \fIget_values_hook\fP
-.br
- \fIinitialize\fP
-.br
- \fIinitialize_hook\fP
-.br
- \fIset_values\fP
-.br
- \fIset_values_hook\fP
-.br
- \fIresources\fP
-.sp
-.LP
-In addition, for subclasses of
-Constraint,
-the following fields of the
-.PN ConstraintClassPart
-and
-.PN ConstraintClassExtensionRec
-structures are chained from the
-Constraint
-class down to the subclass:
-.ta 1i
-.br
- \fIresources\fP
-.br
- \fIinitialize\fP
-.br
- \fIset_values\fP
-.br
- \fIget_values_hook\fP
-.sp
-.LP
-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
-.sp
-.ta 1i
-.br
- \fIdestroy\fP
-.br
- \fIactions\fP
-.sp
-.LP
-For subclasses of
-Constraint,
-the following field of
-.PN ConstraintClassPart
-is chained from the subclass up to the
-Constraint class:
-.sp
-.ta 1i
-.br
- \fIdestroy\fP
-
-.NH 3
-Class Initialization: class_initialize and class_part_initialize Procedures
-.XS
-\*(SN Class Initialization: class_initialize and class_part_initialize Procedures
-.XE
-.LP
-.IN "Class Initialization"
-.IN "Initialization"
-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.
-.LP
-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 \*(xI.
-A class initialization procedure pointer is of type
-.PN XtProc :
-.IN "class_initialize procedure" "" "@DEF@"
-.IN "XtProc" "" "@DEF@"
-.LP
-.sM
-.FD 0
-typedef void (*XtProc)(void);
-.FN
-.LP
-.eM
-A widget class indicates that it has no class initialization procedure by
-specifying NULL in the \fIclass_initialize\fP field.
-.LP
-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 \fIclass_part_initialize\fP field.
-The class_part_initialize procedure pointer is of type
-.PN XtWidgetClassProc .
-.IN "XtWidgetClassProc" "" "@DEF@"
-.LP
-.sM
-.FD 0
-typedef void (*XtWidgetClassProc)(WidgetClass);
-.br
- WidgetClass \fIwidget_class\fP;
-.FN
-.IP \fIwidget_class\fP 1i
-Points to the class structure for the class being initialized.
-.LP
-.eM
-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 Section 1.6.9.
-Classes that do not define any new class fields
-or that need no extra processing for them can specify NULL
-in the \fIclass_part_initialize\fP field.
-.LP
-All widget classes, whether they have a class initialization procedure or not,
-must start with their \fIclass_inited\fP field
-.PN False .
-.LP
-The first time a widget of a class is created,
-.PN XtCreateWidget
-ensures that the widget class and all superclasses are initialized, in
-superclass-to-subclass order, by checking each \fIclass_inited\fP field and,
-if it is
-.PN False ,
-by calling the class_initialize and the class_part_initialize procedures
-for the class and all its superclasses.
-The \*(xI then set the \fIclass_inited\fP field to a nonzero value.
-After the one-time initialization,
-a class structure is constant.
-.LP
-The following example provides the class initialization procedure for a Label class.
-.LP
-.Ds
-.TA .5i 2i
-.ta .5i 2i
-static void ClassInitialize()
-{
- XtSetTypeConverter(XtRString, XtRJustify, CvtStringToJustify,
- NULL, 0, XtCacheNone, NULL);
-}
-.De
-
-.NH 3
-Initializing a Widget Class
-.XS
-\fB\*(SN Initializing a Widget Class\fP
-.XE
-.IN "Widget" "class initialization"
-.LP
-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
-.PN XtInitializeWidgetClass .
-.IN "XtInitializeWidgetClass" "" "@DEF@"
-.LP
-.sM
-.FD 0
-void XtInitializeWidgetClass(\fIobject_class\fP)
-.br
- WidgetClass \fIobject_class\fP;
-.br
-.FN
-.IP \fIobject_class\fP 1i
-Specifies the object class to initialize. May be
-.PN objectClass
-or any subclass thereof.
-.LP
-.eM
-If the specified widget class is already initialized,
-.PN 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
-.PN XtInitializeWidgetClass
-is called
-(see Section 9.6).
-
-.NH 3
-Inheritance of Superclass Operations
-.XS
-\*(SN Inheritance of Superclass Operations
-.XE
-.LP
-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
-.IP
-expose
-.IP
-realize
-.IP
-insert_child
-.IP
-delete_child
-.IP
-geometry_manager
-.IP
-set_values_almost
-.LP
-To inherit an operation \fIxyz\fP,
-specify the constant
-.PN XtInherit \fIXyz\fP
-in your class record.
-.LP
-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.
-.LP
-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 \*(xI internal value
-.PN _XtInherit
-cast to the appropriate type.
-.PN _XtInherit
-is a procedure that issues an error message if it is actually called.
-.LP
-For example,
-.PN CompositeP.h
-contains these definitions:
-.LP
-.Ds
-.TA .25i 1.5i 3i
-.ta .25i 1.5i 3i
-#define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit)
-#define XtInheritChangeManaged ((XtWidgetProc) _XtInherit)
-#define XtInheritInsertChild ((XtArgsProc) _XtInherit)
-#define XtInheritDeleteChild ((XtWidgetProc) _XtInherit)
-.De
-.LP
-Composite's class_part_initialize procedure begins as follows:
-.LP
-.Ds
-.TA .2i 1.5i 3i
-.ta .2i 1.5i 3i
-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;
- }
- .
- .
- .
-.De
-.LP
-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:
-.LP
-For Object:
-.IP
-.PN XtInheritAllocate
-.IP
-.PN XtInheritDeallocate
-.LP
-For Core:
-.IP
-.PN XtInheritRealize
-.IP
-.PN XtInheritResize
-.IP
-.PN XtInheritExpose
-.IP
-.PN XtInheritSetValuesAlmost
-.IP
-.PN XtInheritAcceptFocus
-.IP
-.PN XtInheritQueryGeometry
-.IP
-.PN XtInheritTranslations
-.IP
-.PN XtInheritDisplayAccelerator
-.LP
-For Composite:
-.IP
-.PN XtInheritGeometryManager
-.IP
-.PN XtInheritChangeManaged
-.IP
-.PN XtInheritInsertChild
-.IP
-.PN XtInheritDeleteChild
-.LP
-For Shell:
-.IP
-.PN XtInheritRootGeometryManager
-
-.NH 3
-Invocation of Superclass Operations
-.XS
-\*(SN Invocation of Superclass Operations
-.XE
-.LP
-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 \fIexpose\fP
-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 \fIinsert_child\fP
-.IN "insert_child procedure"
-and then calling
-.PN XtManageChild
-to add the child to the managed set.
-.LP
-.NT
-A class method should not use
-.PN 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.
-.NE
-This technique is referred to as \fIenveloping\fP the superclass's operation.
-
-.NH 3
-Class Extension Records
-.XS
-\*(SN Class Extension Records
-.XE
-.IN "Widget" "class extension records"
-.LP
-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.
-.LP
-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
-\fIextension\fP pointer for the appropriate part in their class structure to
-point to a statically declared extension record containing the
-additional fields.
-Setting the \fIextension\fP field is never mandatory; code that uses fields
-in the extension record must always check the \fIextension\fP field and take
-some appropriate default action if it is NULL.
-.LP
-In order to permit multiple subclasses and libraries to chain extension
-records from a single \fIextension\fP 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:
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-struct {
- XtPointer next_extension;
- XrmQuark record_type;
- long version;
- Cardinal record_size;
-};
-.De
-.IP \fInext_extension\fP 1.25i
-Specifies the next record in the list, or NULL.
-.IP \fIrecord_type\fP 1.25i
-Specifies the particular structure declaration to which
-each extension record instance conforms.
-.IP \fIversion\fP 1.25i
-Specifies a version id symbolic constant supplied by
-the definer of the structure.
-.IP \fIrecord_size\fP 1.25i
-Specifies the total number of bytes allocated for the
-extension record.
-.LP
-.eM
-The \fIrecord_type\fP 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
-\fIrecord_type\fP field is normally assigned the
-result of
-.PN XrmStringToQuark
-for a registered string constant. The
-\*(xI reserve all record type strings beginning with the two
-characters ``XT'' for future standard uses. The value
-.PN \s-1NULLQUARK\s+1
-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.
-.LP
-The \fIversion\fP 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 \fIrecord_size\fP field value includes the four common header fields and
-should normally be initialized with
-.PN sizeof ().
-.LP
-Any value stored in the class part extension fields of
-.PN CompositeClassPart ,
-.PN ConstraintClassPart ,
-or
-.PN ShellClassPart
-must point to an extension record conforming to this definition.
-.LP
-The \*(xI 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 \fIextension\fP field in the class record.
-.LP
-To locate a class extension record, use
-.PN XtGetClassExtension .
-.IN "XtGetClassExtension" "" "@DEF@"
-.LP
-.sM
-.FD 0
-XtPointer XtGetClassExtension(\fIobject_class\fP, \fIbyte_offset\fP, \
-\fItype\fP, \fIversion\fP, \fIrecord_size\fP)
-.br
- WidgetClass \fIobject_class\fP;
-.br
- Cardinal \fIbyte_offset\fP;
-.br
- XrmQuark \fItype\fP;
-.br
- long \fIversion\fP;
-.br
- Cardinal \fIrecord_size\fP;
-.FN
-.IP \fIobject_class\fP 1i
-Specifies the object class containing the extension list to be searched.
-.IP \fIbyte_offset\fP 1i
-Specifies the offset in bytes from the base of the
-class record of the extension field to be searched.
-.IP \fItype\fP 1i
-Specifies the record_type 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 a match, or 0.
-.LP
-.eM
-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.
-.PN XtGetClassExtension
-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.
-.bp
diff --git a/libXt/specs/CH01.xml b/libXt/specs/CH01.xml
new file mode 100644
index 000000000..df2f96f81
--- /dev/null
+++ b/libXt/specs/CH01.xml
@@ -0,0 +1,2798 @@
+<chapter id='Intrinsics_and_Widgets'>
+<title>Intrinsics and Widgets</title>
+<para>
+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.
+</para>
+<sect1 id="Intrinsics">
+<title>Intrinsics</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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 <xref linkend='Nonwidget_Objects' />.
+The name of the class
+now at the root of the Intrinsics class hierarchy is
+Object.
+The remainder of this
+specification refers uniformly to <emphasis remap='I'>widgets</emphasis> and <emphasis remap='I'>Core</emphasis>
+as if they were the
+base class for all Intrinsics operations. The argument descriptions
+for each Intrinsics procedure and <xref linkend='Nonwidget_Objects' />
+describe which operations
+are defined for the nonwidget superclasses of Core. The reader may
+determine by context whether a specific reference to <emphasis remap='I'>widget</emphasis>
+actually means ``widget'' or ``object.''
+</para>
+</sect1>
+
+<sect1 id="Languages">
+<title>Languages</title>
+<para>
+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 <emphasis remap='I'>client</emphasis> refers to
+any module, widget, or application that calls an Intrinsics procedure.
+</para>
+
+<para>
+Applications that use the Intrinsics mechanisms
+must include the header files
+<function>&lt;X11/Intrinsic.h&gt;</function>
+and
+<function>&lt;X11/StringDefs.h&gt;</function>,
+or their equivalent,
+and they may also include
+<function>&lt;X11/Xatoms.h&gt;</function>
+and
+<function>&lt;X11/Shell.h&gt;</function>.
+In addition, widget implementations should include
+<function>&lt;X11/IntrinsicP.h&gt;</function>
+instead of
+<function>&lt;X11/Intrinsic.h&gt;</function>.
+</para>
+
+<para>
+The applications must also include the additional header files for
+each widget class that they are to use (for example,
+<function>&lt;X11/Xaw/Label.h&gt;</function>
+or
+<function>&lt;X11/Xaw/Scrollbar.h&gt;).</function>
+On a POSIX-based system,
+the Intrinsics object library file is named
+<function>libXt.a</function>
+and is usually referenced as \-lXt when linking the application.
+</para>
+</sect1>
+
+<sect1 id="Procedures_and_Macros">
+<title>Procedures and Macros</title>
+<para>
+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.
+</para>
+
+<para>
+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:
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>,
+<xref linkend='XtNew' xrefstyle='select: title'/>,
+<xref linkend='XtNumber' xrefstyle='select: title'/>,
+<xref linkend='XtOffsetOf' xrefstyle='select: title'/>,
+<xref linkend='XtOffset' xrefstyle='select: title'/>,
+and
+<xref linkend='XtSetArg' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Widgets">
+<title>Widgets</title>
+<para>
+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.
+</para>
+
+<para>
+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 <xref linkend='Creating_Widgets' />
+</para>
+
+<para>
+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 <xref linkend='Widget_Classing' />
+The predefined widget classes adhere to these conventions.
+</para>
+
+<para>
+A widget instance is composed of two parts:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A data structure which contains instance-specific values.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A class structure which contains information that is applicable to
+all widgets of that class.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+Much of the input/output of a widget (for example, fonts, colors, sizes,
+or border widths) is customizable by users.
+</para>
+
+<para>
+This chapter discusses the base widget classes,
+Core, Composite, and Constraint, and
+ends with a discussion of widget classing.
+</para>
+<sect2 id="Core_Widgets">
+<title>Core Widgets</title>
+<para>
+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
+<function>CoreClassPart</function>
+and
+<function>CorePart</function>
+structures.
+</para>
+<sect3 id="CoreClassPart_Structure">
+<title>CoreClassPart Structure</title>
+<para>
+All widget classes contain the fields defined in the
+<function>CoreClassPart</function>
+structure.
+</para>
+<literallayout>
+typedef struct {
+ WidgetClass superclass; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ String class_name; See <xref linkend="Resource_Management" xrefstyle='select: label' />
+ Cardinal widget_size; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ XtProc class_initialize; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ XtWidgetClassProc class_part_initialize; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ XtEnum class_inited; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ XtInitProc initialize; See <xref linkend='Creating_Widgets' xrefstyle='select: label' />
+ XtArgsProc initialize_hook; See <xref linkend='Creating_Widgets' xrefstyle='select: label' />
+ XtRealizeProc realize; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ XtActionList actions; See <xref linkend='Translation_Management' xrefstyle='select: label' />
+ Cardinal num_actions; See <xref linkend='Translation_Management' xrefstyle='select: label' />
+ XtResourceList resources; See <xref linkend="Resource_Management" xrefstyle='select: label' />
+ Cardinal num_resources; See <xref linkend="Resource_Management" xrefstyle='select: label' />
+ XrmClass xrm_class; Private to resource manager
+ Boolean compress_motion; See <xref linkend='X_Event_Filters' xrefstyle='select: label' />
+ XtEnum compress_exposure; See <xref linkend='X_Event_Filters' xrefstyle='select: label' />
+ Boolean compress_enterleave; See <xref linkend='X_Event_Filters' xrefstyle='select: label' />
+ Boolean visible_interest; See <xref linkend='Widget_Exposure_and_Visibility' xrefstyle='select: label' />
+ XtWidgetProc destroy; See <xref linkend='Destroying_Widgets' xrefstyle='select: label' />
+ XtWidgetProc resize; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ XtExposeProc expose; See <xref linkend='Widget_Exposure_and_Visibility' xrefstyle='select: label' />
+ XtSetValuesFunc set_values; See <xref linkend='Reading_and_Writing_Widget_State' xrefstyle='select: label' />
+ XtArgsFunc set_values_hook; See <xref linkend='Reading_and_Writing_Widget_State' xrefstyle='select: label' />
+ XtAlmostProc set_values_almost; See <xref linkend='Reading_and_Writing_Widget_State' xrefstyle='select: label' />
+ XtArgsProc get_values_hook; See <xref linkend='Reading_and_Writing_Widget_State' xrefstyle='select: label' />
+ XtAcceptFocusProc accept_focus; See <xref linkend='Focusing_Events_on_a_Child' xrefstyle='select: label' />
+ XtVersionType version; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+ XtPointer callback_private; Private to callbacks
+ String tm_table; See <xref linkend='Translation_Management' xrefstyle='select: label' />
+ XtGeometryHandler query_geometry; See <xref linkend ='Geometry_Management' xrefstyle='select: label' />
+ XtStringProc display_accelerator; See <xref linkend='Translation_Management' xrefstyle='select: label' />
+ XtPointer extension; See <xref linkend="Widget_Classing" xrefstyle='select: label' />
+} CoreClassPart;
+</literallayout>
+<para>
+All widget classes have the Core class fields as their first component.
+The prototypical
+<function>WidgetClass</function>
+and
+<function>CoreWidgetClass</function>
+are defined with only this set of fields.
+</para>
+<literallayout>
+typedef struct {
+ CoreClassPart core_class;
+} WidgetClassRec, *WidgetClass, CoreClassRec, *CoreWidgetClass;
+</literallayout>
+<para>
+Various routines can cast widget class pointers, as needed,
+to specific widget class types.
+</para>
+
+<para>
+The single occurrences of the class record and pointer for
+creating instances of Core are
+</para>
+
+<para>
+In
+<function>IntrinsicP.h</function>:
+</para>
+<literallayout>
+extern WidgetClassRec widgetClassRec;
+#define coreClassRec widgetClassRec
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout>
+extern WidgetClass widgetClass, coreWidgetClass;
+</literallayout>
+<para>
+The opaque types
+<function>Widget</function>
+and
+<function>WidgetClass</function>
+and the opaque variable
+<function>widgetClass</function>
+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
+<function>Intrinsic.h</function>:
+</para>
+<literallayout>
+typedef struct _WidgetClassRec *WidgetClass, *CoreWidgetClass;
+</literallayout>
+</sect3>
+<sect3 id="CorePart_Structure">
+<title>CorePart Structure</title>
+<para>
+All widget instances contain the fields defined in the
+<function>CorePart</function>
+structure.
+</para>
+<literallayout>
+typedef struct _CorePart {
+ Widget self; Described below
+ WidgetClass widget_class; See <xref linkend='Widget_Classing' xrefstyle='select: label' />
+ Widget parent; See <xref linkend='Creating_Widgets' xrefstyle='select: label' />
+ Boolean being_destroyed; See <xref linkend='Destroying_Widgets' xrefstyle='select: label' />
+ XtCallbackList destroy_callbacks; <xref linkend='Destroying_Widgets' xrefstyle='select: label' />
+ XtPointer constraints; See <xref linkend='Constrained_Composite_Widgets' xrefstyle='select: label' />
+ Position x; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ Position y; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ Dimension width; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ Dimension height; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ Dimension border_width; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ Boolean managed; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ Boolean sensitive; See <xref linkend='Setting_and_Checking_the_Sensitivity_State_of_a_Widget' xrefstyle='select: label' />
+ Boolean ancestor_sensitive; See <xref linkend='Setting_and_Checking_the_Sensitivity_State_of_a_Widget' xrefstyle='select: label' />
+ XtTranslations accelerators; See <xref linkend='Translation_Management' xrefstyle='select: label' />
+ Pixel border_pixel; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Pixmap border_pixmap; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ WidgetList popup_list; See <xref linkend='Pop_Up_Widgets' xrefstyle='select: label' />
+ Cardinal num_popups; See <xref linkend='Pop_Up_Widgets' xrefstyle='select: label' />
+ String name; See <xref linkend='Resource_Management' xrefstyle='select: label' />
+ Screen *screen; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Colormap colormap; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Window window; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Cardinal depth; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Pixel background_pixel; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Pixmap background_pixmap; See <xref linkend='Realizing_Widgets' xrefstyle='select: label' />
+ Boolean visible; See <xref linkend='Widget_Exposure_and_Visibility' xrefstyle='select: label' />
+ Boolean mapped_when_managed; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+} CorePart;
+</literallayout>
+<para>
+All widget instances have the Core fields as their first component.
+The prototypical type
+<function>Widget</function>
+is defined with only this set of fields.
+</para>
+<literallayout>
+typedef struct {
+ CorePart core;
+} WidgetRec, *Widget, CoreRec, *CoreWidget;
+</literallayout>
+<para>
+Various routines can cast widget pointers, as needed,
+to specific widget types.
+</para>
+
+<para>
+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
+<function>Intrinsic.h</function>.
+</para>
+<literallayout>
+typedef struct _WidgetRec *Widget, *CoreWidget;
+</literallayout>
+</sect3>
+<sect3 id="Core_Resources">
+<title>Core Resources</title>
+<para>
+The resource names, classes, and representation types specified in the
+<function>coreClassRec</function>
+resource list are
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNaccelerators</entry>
+ <entry>XtCAccelerators</entry>
+ <entry>XtRAcceleratorTable</entry>
+ </row>
+ <row>
+ <entry>XtNbackground</entry>
+ <entry>XtCBackground</entry>
+ <entry>XtRPixel</entry>
+ </row>
+ <row>
+ <entry>XtNbackgroundPixmap</entry>
+ <entry>XtCPixmap</entry>
+ <entry>XtRPixmap</entry>
+ </row>
+ <row>
+ <entry>XtNborderColor</entry>
+ <entry>XtCBorderColor</entry>
+ <entry>XtRPixel</entry>
+ </row>
+ <row>
+ <entry>XtNborderPixmap</entry>
+ <entry>XtCPixmap</entry>
+ <entry>XtRPixmap</entry>
+ </row>
+ <row>
+ <entry>XtNcolormap</entry>
+ <entry>XtCColormap</entry>
+ <entry>XtRColormap</entry>
+ </row>
+ <row>
+ <entry>XtNdepth</entry>
+ <entry>XtCDepth</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNmappedWhenManaged</entry>
+ <entry>XtCMappedWhenManaged</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNscreen</entry>
+ <entry>XtCScreen</entry>
+ <entry>XtRScreen</entry>
+ </row>
+ <row>
+ <entry>XtNtranslations</entry>
+ <entry>XtCTranslations</entry>
+ <entry>XtRTranslationTable</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<para>
+Additional resources are defined for all widgets via the
+<function>objectClassRec</function>
+and
+<function>rectObjClassRec</function>
+resource lists; see <xref linkend='Object_Objects' /> and <xref linkend='Rectangle_Objects' /> for details.
+</para>
+</sect3>
+<sect3 id="CorePart_Default_Values">
+<title>CorePart Default Values</title>
+<para>
+The default values for the Core fields, which are filled in by the Intrinsics,
+from the resource lists, and by the initialize procedures, are
+</para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='0.4*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>self</entry>
+ <entry>Address of the widget structure (may not be changed).</entry>
+ </row>
+ <row>
+ <entry>widget_class</entry>
+ <entry><emphasis remap='I'>widget_class</emphasis> argument to
+ <xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+ (may not be changed).</entry>
+ </row>
+ <row>
+ <entry>parent</entry>
+ <entry><emphasis remap='I'>parent</emphasis> argument to
+ <xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+ (may not be changed).</entry>
+ </row>
+ <row>
+ <entry>being_destroyed</entry>
+ <entry>Parent's <emphasis remap='I'>being_destroyed</emphasis> value.</entry>
+ </row>
+ <row>
+ <entry>destroy_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>constraints</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>x</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>y</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>width</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>height</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>border_width</entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>managed</entry>
+ <entry><function>False</function></entry>
+ </row>
+ <row>
+ <entry>sensitive</entry>
+ <entry><function>True</function></entry>
+ </row>
+ <row>
+ <entry>ancestor_sensitive</entry>
+ <entry>logical AND of parent's <emphasis remap='I'>sensitive</emphasis> and
+ <emphasis remap='I'>ancestor_sensitive</emphasis> values.</entry>
+ </row>
+ <row>
+ <entry>accelerators</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>border_pixel</entry>
+ <entry><function>XtDefaultForeground</function></entry>
+ </row>
+ <row>
+ <entry>border_pixmap</entry>
+ <entry><function>XtUnspecifiedPixmap</function></entry>
+ </row>
+ <row>
+ <entry>popup_list</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>num_popups</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>name</entry>
+ <entry><emphasis remap='I'>name</emphasis> argument to
+ <xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+ (may not be changed).</entry>
+ </row>
+ <row>
+ <entry>screen</entry>
+ <entry>Parent's <emphasis remap='I'>screen</emphasis>; top-level widget gets screen from display specifier
+ (may not be changed).</entry>
+ </row>
+ <row>
+ <entry>colormap</entry>
+ <entry>Parent's <emphasis remap='I'>colormap</emphasis> value.</entry>
+ </row>
+ <row>
+ <entry>window</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>depth</entry>
+ <entry>Parent's <emphasis remap='I'>depth</emphasis>; top-level widget gets root window depth.</entry>
+ </row>
+ <row>
+ <entry>background_pixel</entry>
+ <entry><function>XtDefaultBackground</function></entry>
+ </row>
+ <row>
+ <entry>background_pixmap</entry>
+ <entry><function>XtUnspecifiedPixmap</function></entry>
+ </row>
+ <row>
+ <entry>visible</entry>
+ <entry><function>True</function></entry>
+ </row>
+ <row>
+ <entry>mapped_when_managed</entry>
+ <entry><function>True</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<para>
+<function>XtUnspecifiedPixmap</function>
+is a symbolic constant guaranteed to be unequal to
+any valid Pixmap id,
+<function>None</function>,
+and
+<function>ParentRelative</function>.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Composite_Widgets">
+<title>Composite Widgets</title>
+<para>
+The Composite
+widget class is a subclass of the
+Core
+widget class (see <xref linkend='Composite_Widgets_and_Their_Children' />).
+Composite widgets are intended to be containers for other widgets.
+The additional data used by composite widgets are defined by the
+<function>CompositeClassPart</function>
+and
+<function>CompositePart</function>
+structures.
+</para>
+<sect3 id="CompositeClassPart_Structure">
+<title>CompositeClassPart Structure</title>
+<para>
+In addition to the
+Core
+class fields,
+widgets of the Composite class have the following class fields.
+</para>
+<literallayout>
+typedef struct {
+ XtGeometryHandler geometry_manager; See <xref linkend='Geometry_Management' xrefstyle='select: label' />
+ XtWidgetProc change_managed; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ XtWidgetProc insert_child; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ XtWidgetProc delete_child; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ XtPointer extension; See <xref linkend='Widget_Classing' xrefstyle='select: label' />
+} CompositeClassPart;
+</literallayout>
+<para>
+The extension record defined for
+<function>CompositeClassPart</function>
+with <emphasis remap='I'>record_type</emphasis>
+equal to
+<emphasis role='strong'>NULLQUARK</emphasis>
+is
+<function>CompositeClassExtensionRec</function>.
+</para>
+<literallayout>
+typedef struct {
+ XtPointer next_extension; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ XrmQuark record_type; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ long version; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ Cardinal record_size; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ Boolean accepts_objects; See <xref linkend='Creating_a_Widget_Instance' xrefstyle='select: label' />
+ Boolean allows_change_managed_set; See <xref linkend='Bundling_Changes_to_the_Managed_Set' xrefstyle='select: label' />
+} CompositeClassExtensionRec, *CompositeClassExtension;
+</literallayout>
+<para>
+Composite
+classes have the Composite class fields immediately following the
+Core class fields.
+</para>
+<literallayout>
+typedef struct {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+} CompositeClassRec, *CompositeWidgetClass;
+</literallayout>
+<para>
+The single occurrences of the class record and pointer for creating
+instances of Composite are
+</para>
+
+<para>
+In
+<function>IntrinsicP.h</function>:
+</para>
+<literallayout>
+extern CompositeClassRec compositeClassRec;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout>
+extern WidgetClass compositeWidgetClass;
+</literallayout>
+<para>
+The opaque types
+<function>CompositeWidget</function>
+and
+<function>CompositeWidgetClass</function>
+and the opaque variable
+<function>compositeWidgetClass</function>
+are defined for generic operations on widgets whose class
+is Composite or a subclass of Composite.
+The symbolic constant for the
+<function>CompositeClassExtension</function>
+version identifier is
+<function>XtCompositeExtensionVersion</function>
+(see <xref linkend='Class_Extension_Records' />).
+<function>Intrinsic.h</function>
+uses an incomplete structure
+definition to ensure that the compiler catches attempts to access
+private data.
+</para>
+<literallayout>
+typedef struct _CompositeClassRec *CompositeWidgetClass;
+</literallayout>
+</sect3>
+<sect3 id="CompositePart_Structure">
+<title>CompositePart Structure</title>
+<para>
+In addition to the
+Core instance
+fields,
+widgets of the Composite class have the following
+instance fields defined in the
+<function>CompositePart</function>
+structure.
+</para>
+<literallayout>
+typedef struct {
+ WidgetList children; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ Cardinal num_children; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ Cardinal num_slots; See <xref linkend='Composite_Widgets_and_Their_Children' xrefstyle='select: label' />
+ XtOrderProc insert_position; See <xref linkend='Insertion_Order_of_Children_The_insert_position_Procedure' xrefstyle='select: label' />
+} CompositePart;
+</literallayout>
+<para>
+Composite
+widgets have the Composite instance fields immediately following the Core
+instance fields.
+</para>
+<literallayout>
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+} CompositeRec, *CompositeWidget;
+</literallayout>
+<para>
+<function>Intrinsic.h</function>
+uses an incomplete structure definition to ensure that the
+compiler catches attempts to access private data.
+</para>
+<literallayout>
+typedef struct _CompositeRec *CompositeWidget;
+</literallayout>
+</sect3>
+<sect3 id="Composite_Resources">
+<title>Composite Resources</title>
+<para>
+The resource names, classes, and representation types
+that are specified in
+the
+<function>compositeClassRec</function>
+resource list are
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*'/>
+ <colspec colname='c2' colwidth='1.0*'/>
+ <colspec colname='c3' colwidth='1.0*'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNchildren</entry>
+ <entry>XtCReadOnly</entry>
+ <entry>XtRWidgetList</entry>
+ </row>
+ <row>
+ <entry>XtNinsertPosition</entry>
+ <entry>XtCInsertPosition</entry>
+ <entry>XtRFunction</entry>
+ </row>
+ <row>
+ <entry>XtNnumChildren</entry>
+ <entry>XtCReadOnly</entry>
+ <entry>XtRCardinal</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect3>
+<sect3 id="CompositePart_Default_Values">
+<title>CompositePart Default Values</title>
+<para>
+The default values for the Composite fields,
+which are filled in from the
+Composite
+resource list and by the
+Composite
+initialize procedure, are
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <?dbfo table-width="50%" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colname='c1' colwidth='1.0*' colsep='0'/>
+ <colspec colname='c2' colwidth='1.0*' colsep='0'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>children</entry><entry>NULL</entry>
+ </row>
+ <row>
+ <entry>num_children</entry><entry>0</entry>
+ </row>
+ <row>
+ <entry>num_slots</entry><entry>0</entry>
+ </row>
+ <row>
+ <entry>insert_position</entry><entry>Internal function to insert at end</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>children</emphasis>, <emphasis remap='I'>num_children</emphasis>,
+and <emphasis remap='I'>insert_position</emphasis> 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.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Constraint_Widgets">
+<title>Constraint Widgets</title>
+<para>
+The Constraint
+widget class is a subclass of the
+Composite
+widget class (see <xref linkend='Constrained_Composite_Widgets' />). 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
+<function>ConstraintClassPart</function>
+and
+<function>ConstraintPart</function>
+structures.
+</para>
+<sect3 id="ConstraintClassPart_Structure">
+<title>ConstraintClassPart Structure</title>
+<para>
+In addition to the
+Core
+and
+Composite
+class fields,
+widgets of the Constraint class
+have the following class fields.
+</para>
+<literallayout>
+typedef struct {
+ XtResourceList resources; See <xref linkend='Resource_Management' xrefstyle='select: label' />
+ Cardinal num_resources; See <xref linkend='Resource_Management' xrefstyle='select: label' />
+ Cardinal constraint_size; See <xref linkend='Constrained_Composite_Widgets' xrefstyle='select: label' />
+ XtInitProc initialize; See <xref linkend='Constrained_Composite_Widgets' xrefstyle='select: label' />
+ XtWidgetProc destroy; See <xref linkend='Constrained_Composite_Widgets' xrefstyle='select: label' />
+ XtSetValuesFunc set_values; See <xref linkend='Setting_Widget_State' xrefstyle='select: label' />
+ XtPointer extension; See <xref linkend='Widget_Classing' xrefstyle='select: label' />
+} ConstraintClassPart;
+</literallayout>
+<para>
+The extension record defined for
+<function>ConstraintClassPart</function>
+with <emphasis remap='I'>record_type</emphasis> equal to
+<emphasis role='strong'>NULLQUARK</emphasis>
+is
+<function>ConstraintClassExtensionRec</function>.
+</para>
+<literallayout>
+typedef struct {
+ XtPointer next_extension; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ XrmQuark record_type; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ long version; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ Cardinal record_size; See <xref linkend='Class_Extension_Records' xrefstyle='select: label' />
+ XtArgsProc get_values_hook; See <xref linkend='Obtaining_Widget_State' xrefstyle='select: label' />
+} ConstraintClassExtensionRec, *ConstraintClassExtension;
+</literallayout>
+<para>
+Constraint
+classes have the Constraint class fields immediately following the
+Composite class fields.
+</para>
+<literallayout>
+typedef struct _ConstraintClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ConstraintClassPart constraint_class;
+} ConstraintClassRec, *ConstraintWidgetClass;
+</literallayout>
+<para>
+The single occurrences of the class record and pointer for creating
+instances of Constraint are
+</para>
+
+<para>
+In
+<function>IntrinsicP.h</function>:
+</para>
+<literallayout>
+extern ConstraintClassRec constraintClassRec;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout>
+extern WidgetClass constraintWidgetClass;
+</literallayout>
+<para>
+The opaque types
+<function>ConstraintWidget</function>
+and
+<function>ConstraintWidgetClass</function>
+and the opaque variable
+<function>constraintWidgetClass</function>
+are defined for generic operations on widgets
+whose class is Constraint or a subclass
+of Constraint.
+The symbolic constant for the
+<function>ConstraintClassExtension</function>
+version identifier is
+<function>XtConstraintExtensionVersion</function>
+(see <xref linkend='Class_Extension_Records' />).
+<function>Intrinsic.h</function>
+uses an incomplete structure definition to ensure that the
+compiler catches attempts to access private data.
+</para>
+<literallayout>
+typedef struct _ConstraintClassRec *ConstraintWidgetClass;
+</literallayout>
+</sect3>
+<sect3 id="ConstraintPart_Structure">
+<title>ConstraintPart Structure</title>
+<para>
+In addition to the
+Core
+and
+Composite instance
+fields,
+widgets of the Constraint class have the following unused
+instance fields defined in the
+<function>ConstraintPart</function>
+structure
+</para>
+<literallayout>
+typedef struct {
+ int empty;
+} ConstraintPart;
+</literallayout>
+<para>
+Constraint
+widgets have the Constraint instance fields immediately following the
+Composite instance fields.
+</para>
+<literallayout>
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ConstraintPart constraint;
+} ConstraintRec, *ConstraintWidget;
+</literallayout>
+<para>
+<function>Intrinsic.h</function>
+uses an incomplete structure definition to ensure that the
+compiler catches attempts to access private data.
+</para>
+<literallayout>
+typedef struct _ConstraintRec *ConstraintWidget;
+</literallayout>
+</sect3>
+<sect3 id="Constraint_Resources">
+<title>Constraint Resources</title>
+<para>
+The
+<function>constraintClassRec</function>
+<emphasis remap='I'>core_class</emphasis> and <emphasis remap='I'>constraint_class resources</emphasis> fields are NULL,
+and the <emphasis remap='I'>num_resources</emphasis> fields are zero;
+no additional resources beyond those declared by
+the superclasses
+are defined for
+Constraint.
+</para>
+</sect3>
+</sect2>
+</sect1>
+
+<sect1 id="Implementation_Specific_Types">
+<title>Implementation-Specific Types</title>
+<para>
+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.
+</para>
+
+<para>
+These implementation-defined types are
+</para>
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>Boolean</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>True</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>Cardinal</emphasis>
+ </term>
+ <listitem>
+ <para>
+An unsigned integer datum with a minimum range of [0..2^16-1].
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>Dimension</emphasis>
+ </term>
+ <listitem>
+ <para>
+An unsigned integer datum with a minimum range of [0..2^16-1].
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>Position</emphasis>
+ </term>
+ <listitem>
+ <para>
+A signed integer datum with a minimum range of [-2^15..2^15-1].
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtPointer</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>XtPointer</function>
+and back again and the result will
+compare equal to the original value. In ANSI C
+environments it is expected that
+<function>XtPointer</function>
+will be
+defined as void*.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtArgVal</emphasis>
+ </term>
+ <listitem>
+ <para>
+A datum large enough to contain an
+<function>XtPointer</function>,
+<function>Cardinal</function>,
+<function>Dimension</function>,
+or
+<function>Position</function>
+value.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtEnum</emphasis>
+ </term>
+ <listitem>
+ <para>
+An integer datum large enough to encode at least 128 distinct
+values, two of which are the symbolic values
+<function>True</function>
+and
+<function>False</function>.
+The symbolic values
+<emphasis role='strong'>TRUE</emphasis>
+and
+<emphasis role='strong'>FALSE</emphasis>
+are
+also defined to be equal to
+<function>True</function>
+and
+<function>False</function>,
+respectively.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+In addition to these specific types, the precise order of the
+fields within the structure declarations for any of the instance
+part records
+<function>ObjectPart</function>,
+<function>RectObjPart</function>,
+<function>CorePart</function>,
+<function>CompositePart</function>,
+<function>ShellPart</function>,
+<function>WMShellPart</function>,
+<function>TopLevelShellPart</function>,
+and
+<function>ApplicationShellPart</function>
+is implementation-defined. These
+structures may also have additional private
+fields internal to the implementation.
+The
+<function>ObjectPart</function>,
+<function>RectObjPart</function>,
+and
+<function>CorePart</function>
+structures must be defined so that any member with the same name
+appears at the same offset in
+<function>ObjectRec</function>,
+<function>RectObjRec</function>,
+and
+<function>CoreRec</function>
+<function>( WidgetRec ).</function>
+No other relations between the offsets of any two
+fields may be assumed.
+</para>
+</sect1>
+
+<sect1 id="Widget_Classing">
+<title>Widget Classing</title>
+<para>
+The <emphasis remap='I'>widget_class</emphasis> 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.
+</para>
+
+<para>
+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
+<function>XtResourceList</function>.
+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).
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+To make good use of subclassing,
+widget declarations and naming conventions are highly stylized.
+A widget consists of three files:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A public .h file, used by client widgets or applications.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A private .h file, used by widgets whose classes
+are subclasses of the widget class.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A .c file, which implements the widget.
+ </para>
+ </listitem>
+</itemizedlist>
+<sect2 id="Widget_Naming_Conventions">
+<title>Widget Naming Conventions</title>
+<para>
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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,
+<function>ArgList</function>
+or
+<function>XtSetValues ).</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>background_pixmap</emphasis> field has the corresponding identifier
+XtNbackgroundPixmap,
+which is defined as the string ``backgroundPixmap''.
+Many predefined names are listed in
+<function>&lt;X11/StringDefs.h&gt;</function>.
+Before you invent a new name,
+you should make sure there is not already a name that you can use.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<function>&lt;X11/StringDefs.h&gt;</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<function>&lt;X11/StringDefs.h&gt;</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+New widget classes start with a capital and use uppercase for compound
+words.
+Given a new class name AbcXyz, you should derive several names:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Additional widget instance structure part name AbcXyzPart.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Complete widget instance structure names AbcXyzRec and _AbcXyzRec.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Widget instance structure pointer type name AbcXyzWidget.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Additional class structure part name AbcXyzClassPart.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Complete class structure names AbcXyzClassRec and _AbcXyzClassRec.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Class structure pointer type name AbcXyzWidgetClass.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Class structure variable abcXyzClassRec.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Class structure pointer variable abcXyzWidgetClass.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+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'').
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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
+<function>String</function>.
+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.
+</para>
+</sect2>
+
+<sect2 id="Widget_Subclassing_in_Public_h_Files">
+<title>Widget Subclassing in Public .h Files</title>
+<para>
+The public .h file for a widget class is imported by clients
+and contains
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A reference to the public .h file for the superclass.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Type declarations for any new resource data types defined by the class.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The class record pointer variable used to create widget instances.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The C type that corresponds to widget instances of this class.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Entry points for new class methods.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+For example, the following is the public .h file for a possible
+implementation of a Label widget:
+</para>
+<literallayout>
+#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
+</literallayout>
+<para>
+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.
+</para>
+
+<para>
+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
+<function>Constraint.h</function>.
+</para>
+</sect2>
+
+<sect2 id="Widget_Subclassing_in_Private_h_Files">
+<title>Widget Subclassing in Private .h Files</title>
+<para>
+The private .h file for a widget is imported by widget classes that are
+subclasses of the widget and contains
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A reference to the public .h file for the class.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A reference to the private .h file for the superclass.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A structure part definition for
+the new fields that the widget instance adds to its superclass's
+widget structure.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The complete widget instance structure definition for this widget.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The complete
+constraint
+structure definition if the widget class is a subclass of
+Constraint.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Type definitions for any new procedure types used by class methods
+declared in the widget class part.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A structure part definition for
+the new fields that this widget class adds to its superclass's widget class
+structure.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The complete widget class structure definition for this widget.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The complete widget class extension structure definition
+for this widget, if any.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The symbolic constant identifying the class extension version, if any.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The name of the global class structure variable containing the generic
+class structure for this class.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+An inherit constant for each new procedure in the widget class part structure.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+For example, the following is the private .h file for a possible Label widget:
+</para>
+<literallayout>
+#ifndef LABELP_H
+#define LABELP_H
+#include &lt;X11/Label.h&gt;
+/* 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;
+</literallayout>
+<literallayout>
+/* 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
+</literallayout>
+<para>
+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
+<function>ConstrainP.h</function>.
+</para>
+</sect2>
+
+<sect2 id="Widget_Subclassing_in_c_Files">
+<title>Widget Subclassing in .c Files</title>
+<para>
+The .c file for a widget contains the structure initializer
+for the class record variable,
+which contains the following parts:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Class information (for example, <emphasis remap='I'>superclass</emphasis>, <emphasis remap='I'>class_name</emphasis>,
+<emphasis remap='I'>widget_size</emphasis>,
+<emphasis remap='I'>class_initialize</emphasis>, and <emphasis remap='I'>class_inited</emphasis>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Data constants (for example, <emphasis remap='I'>resources</emphasis> and <emphasis remap='I'>num_resources</emphasis>,
+<emphasis remap='I'>actions</emphasis> and <emphasis remap='I'>num_actions</emphasis>, <emphasis remap='I'>visible_interest</emphasis>,
+<emphasis remap='I'>compress_motion</emphasis>,
+<emphasis remap='I'>compress_exposure</emphasis>, and <emphasis remap='I'>version</emphasis>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Widget operations (for example, <emphasis remap='I'>initialize</emphasis>, <emphasis remap='I'>realize</emphasis>, <emphasis remap='I'>destroy</emphasis>,
+<emphasis remap='I'>resize</emphasis>, <emphasis remap='I'>expose</emphasis>, <emphasis remap='I'>set_values</emphasis>, <emphasis remap='I'>accept_focus</emphasis>,
+and any new operations specific to
+the widget).
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The <emphasis remap='I'>superclass</emphasis> field points to the superclass
+global class
+record, declared in the superclass private .h file.
+For direct subclasses of the generic core widget,
+<emphasis remap='I'>superclass</emphasis> should be initialized to the address of the
+<function>widgetClassRec</function>
+structure.
+The superclass is used for class chaining operations and for
+inheriting or enveloping a superclass's operations
+(see <xref linkend='Superclass_Chaining' />,
+<xref linkend='Initializing_a_Widget_Class' />, and
+<xref linkend='Inheritance_of_Superclass_Operations' />.
+</para>
+
+<para>
+The <emphasis remap='I'>class_name</emphasis> 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.
+</para>
+
+<para>
+The <emphasis remap='I'>widget_size</emphasis> field is the size of the corresponding widget
+instance structure
+(not the size of the class structure).
+</para>
+
+<para>
+The <emphasis remap='I'>version</emphasis> 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
+<function>XtVersion</function>
+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
+<function>XtVersionDontCheck</function>
+in the <emphasis remap='I'>version</emphasis> 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
+<function>XtSpecificationRelease</function>,
+as described in <xref linkend='Evolution_of_the_Intrinsics' />.
+Use of
+<function>XtVersion</function>
+allows the Intrinsics implementation to recognize widget binaries
+that were compiled with older implementations.
+</para>
+
+<para>
+The <emphasis remap='I'>extension</emphasis> 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.
+</para>
+
+<para>
+All other fields are described in their respective sections.
+</para>
+
+<para>
+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 <xref linkend='Resource_Management' />.
+</para>
+<literallayout>
+/* 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();
+ .
+ .
+ .
+</literallayout>
+<literallayout>
+/* Class record constant */
+LabelClassRec labelClassRec = {
+ {
+ /* core_class fields */
+ /* superclass */ (WidgetClass)&amp;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) &amp;labelClassRec;
+/* New method access routines */
+void LabelSetText(w, text)
+ Widget w;
+ String text;
+{
+ LabelWidgetClass lwc = (Label WidgetClass)XtClass(w);
+ XtCheckSubclass(w, labelWidgetClass, NULL);
+ *(lwc-&gt;label_class.set_text)(w, text)
+}
+/* Private procedures */
+ .
+ .
+ .
+</literallayout>
+</sect2>
+
+<sect2 id="Widget_Class_and_Superclass_Look_Up">
+<title>Widget Class and Superclass Look Up</title>
+<para>
+To obtain the class of a widget, use
+<xref linkend='XtClass' xrefstyle='select: title'/>.
+</para>
+
+
+
+<funcsynopsis id='XtClass'>
+ <funcprototype>
+ <funcdef>WidgetClass <function>XtClass</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ </funcprototype>
+ </funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+The
+<xref linkend='XtClass' xrefstyle='select: title'/>
+function returns a pointer to the widget's class structure.
+</para>
+
+<para>
+To obtain the superclass of a widget, use
+<function>XtSuperclass</function>.
+</para>
+
+<!--
+-->
+<funcsynopsis id='XtSuperClass'>
+<funcprototype>
+ <funcdef>WidgetClass <function>XtSuperClass</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<!--
+-->
+
+<para>
+The
+<function>XtSuperclass</function>
+function returns a pointer to the widget's superclass class structure.
+</para>
+</sect2>
+
+<sect2 id="Widget_Subclass_Verification">
+<title>Widget Subclass Verification</title>
+<para>
+To check the subclass to which a widget belongs, use
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtIsSubclass'>
+<funcprototype>
+ <funcdef>Boolean <function>XtIsSubclass</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>WidgetClass<parameter> widget_class</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget or object instance whose class is to be checked. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class for which to test. Must be <emphasis role='strong'>objectClass</emphasis> or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+The
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>
+function returns
+<function>True</function>
+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
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>
+to find out if a widget belongs to the desired class of objects.
+</para>
+
+<para>
+To test if a given widget belongs to a subclass of an Intrinsics-defined
+class, the Intrinsics define macros or functions equivalent to
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>
+for each of the built-in classes. These procedures are
+<function>XtIsObject</function>,
+<function>XtIsRectObj</function>,
+<function>XtIsWidget</function>,
+<function>XtIsComposite</function>,
+<function>XtIsConstraint</function>,
+<function>XtIsShell</function>,
+<function>XtIsOverrideShell</function>,
+<function>XtIsWMShell</function>,
+<function>XtIsVendorShell</function>,
+<function>XtIsTransientShell</function>,
+<function>XtIsTopLevelShell</function>,
+<function>XtIsApplicationShell</function>,
+and
+<function>XtIsSessionShell</function>.
+</para>
+
+<para>
+All these macros and functions have the same argument description.
+</para>
+
+<funcsynopsis id='XtIs'>
+<funcprototype>
+ <funcdef>Boolean <function>XtIs</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget or object instance whose class is to be checked. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+These procedures may be faster than calling
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>
+directly for the built-in classes.
+</para>
+
+<para>
+To check a widget's class
+and to generate a debugging error message, use
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>,
+defined in
+<function>&lt;X11/IntrinsicP.h&gt;</function>:
+</para>
+
+<funcsynopsis id='XtCheckSubclass'>
+<funcprototype>
+ <funcdef>void <function>XtCheckSubclass</function></funcdef>
+ <paramdef>Widget<parameter> w</parameter></paramdef>
+ <paramdef>WidgetClass<parameter> widget_class</parameter></paramdef>
+ <paramdef>String<parameter> message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget or object whose class is to be checked. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class for which to test. Must be <emphasis role='strong'>objectClass</emphasis> or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the message to be used.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+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,
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+constructs an error message from the supplied message,
+the widget's actual class, and the expected class and calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+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.
+</para>
+</sect2>
+
+<sect2 id="Superclass_Chaining">
+<title>Superclass Chaining</title>
+<para>
+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</para>
+<literallayout>
+In all widget classes: <emphasis remap='I'>class_name</emphasis>
+ <emphasis remap='I'>class_initialize</emphasis>
+ <emphasis remap='I'>widget_size</emphasis>
+ <emphasis remap='I'>realize</emphasis>
+ <emphasis remap='I'>visible_interest</emphasis>
+ <emphasis remap='I'>resize</emphasis>
+ <emphasis remap='I'>expose</emphasis>
+ <emphasis remap='I'>accept_focus</emphasis>
+ <emphasis remap='I'>compress_motion</emphasis>
+ <emphasis remap='I'>compress_exposure</emphasis>
+ <emphasis remap='I'>compress_enterleave</emphasis>
+ <emphasis remap='I'>set_values_almost</emphasis>
+ <emphasis remap='I'>tm_table</emphasis>
+ <emphasis remap='I'>version</emphasis>
+ <emphasis remap='I'>allocate</emphasis>
+ <emphasis remap='I'>deallocate</emphasis>
+
+In Composite widget classes: <emphasis remap='I'>geometry_manager</emphasis>
+ <emphasis remap='I'>change_managed</emphasis>
+ <emphasis remap='I'>insert_child</emphasis>
+ <emphasis remap='I'>delete_child</emphasis>
+ <emphasis remap='I'>accepts_objects</emphasis>
+ <emphasis remap='I'>allows_change_managed_set</emphasis>
+
+In Constraint widget classes: <emphasis remap='I'>constraint_size</emphasis>
+
+In Shell widget classes: <emphasis remap='I'>root_geometry_manager</emphasis>
+</literallayout>
+
+<para>
+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
+</para>
+<literallayout>
+ <emphasis remap='I'>class_part_initialize</emphasis>
+ <emphasis remap='I'>get_values_hook</emphasis>
+ <emphasis remap='I'>initialize</emphasis>
+ <emphasis remap='I'>initialize_hook</emphasis>
+ <emphasis remap='I'>set_values</emphasis>
+ <emphasis remap='I'>set_values_hook</emphasis>
+ <emphasis remap='I'>resources</emphasis>
+</literallayout>
+
+<para>
+In addition, for subclasses of
+Constraint,
+the following fields of the
+<function>ConstraintClassPart</function>
+and
+<function>ConstraintClassExtensionRec</function>
+structures are chained from the
+Constraint
+class down to the subclass:
+</para>
+<literallayout>
+ <emphasis remap='I'>resources</emphasis>
+ <emphasis remap='I'>initialize</emphasis>
+ <emphasis remap='I'>set_values</emphasis>
+ <emphasis remap='I'>get_values_hook</emphasis>
+</literallayout>
+
+<para>
+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
+</para>
+<literallayout>
+ <emphasis remap='I'>destroy</emphasis>
+ <emphasis remap='I'>actions</emphasis>
+</literallayout>
+
+<para>
+For subclasses of
+Constraint,
+the following field of
+<function>ConstraintClassPart</function>
+is chained from the subclass up to the
+Constraint class:
+ <emphasis remap='I'>destroy</emphasis>
+</para>
+</sect2>
+
+<sect2 id="Class_Initialization_class_initialize_and_class_part_initialize_Procedures">
+<title>Class Initialization: class_initialize and class_part_initialize Procedures</title>
+<para>
+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.
+</para>
+
+<para>
+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
+<function>XtProc</function>:
+</para>
+
+<para>
+typedef void (*XtProc)(void);
+</para>
+<para>
+A widget class indicates that it has no class initialization procedure by
+specifying NULL in the <emphasis remap='I'>class_initialize</emphasis> field.
+</para>
+
+<para>
+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 <emphasis remap='I'>class_part_initialize</emphasis> field.
+The class_part_initialize procedure pointer is of type
+<function>XtWidgetClassProc</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>void <function>(*XtWidgetClassProc)(WidgetClass)</function></funcdef>
+ <paramdef>WidgetClass<parameter> widget_class</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Points to the class structure for the class being initialized.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<para>
+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 <xref linkend='Initializing_a_Widget_Class' />
+Classes that do not define any new class fields
+or that need no extra processing for them can specify NULL
+in the <emphasis remap='I'>class_part_initialize</emphasis> field.
+</para>
+
+<para>
+All widget classes, whether they have a class initialization procedure or not,
+must start with their <emphasis remap='I'>class_inited</emphasis> field
+<function>False</function>.
+</para>
+
+<para>
+The first time a widget of a class is created,
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+ensures that the widget class and all superclasses are initialized, in
+superclass-to-subclass order, by checking each <emphasis remap='I'>class_inited</emphasis> field and,
+if it is
+<function>False</function>,
+by calling the class_initialize and the class_part_initialize procedures
+for the class and all its superclasses.
+The Intrinsics then set the <emphasis remap='I'>class_inited</emphasis> field to a nonzero value.
+After the one-time initialization,
+a class structure is constant.
+</para>
+
+<para>
+The following example provides the class initialization procedure for a Label class.
+</para>
+<literallayout>
+static void ClassInitialize()
+{
+ XtSetTypeConverter(XtRString, XtRJustify, CvtStringToJustify,
+ NULL, 0, XtCacheNone, NULL);
+}
+</literallayout>
+</sect2>
+
+<sect2 id="Initializing_a_Widget_Class">
+<title>Initializing a Widget Class</title>
+<para>
+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
+<xref linkend='XtInitializeWidgetClass' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInitializeWidgetClass'>
+<funcprototype>
+ <funcdef>void <function>XtInitializeWidgetClass</function></funcdef>
+ <paramdef>WidgetClass<parameter> object_class</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object class to initialize. May be
+<function>objectClass</function>
+or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the specified widget class is already initialized,
+<xref linkend='XtInitializeWidgetClass' xrefstyle='select: title'/>
+returns immediately.
+</para>
+
+<para>
+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
+<xref linkend='XtInitializeWidgetClass' xrefstyle='select: title'/>
+is called
+(see <xref linkend='Resource_Conversions' />).
+</para>
+</sect2>
+
+<sect2 id="Inheritance_of_Superclass_Operations">
+<title>Inheritance of Superclass Operations</title>
+<para>
+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
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+expose
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+realize
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+insert_child
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+delete_child
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+geometry_manager
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+set_values_almost
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+To inherit an operation <emphasis remap='I'>xyz</emphasis>,
+specify the constant
+<function>XtInherit</function> <emphasis remap='I'>Xyz</emphasis>
+in your class record.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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
+<function>_XtInherit</function>
+cast to the appropriate type.
+<function>_XtInherit</function>
+is a procedure that issues an error message if it is actually called.
+</para>
+
+<para>
+For example,
+<function>CompositeP.h</function>
+contains these definitions:
+</para>
+<literallayout>
+#define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit)
+#define XtInheritChangeManaged ((XtWidgetProc) _XtInherit)
+#define XtInheritInsertChild ((XtArgsProc) _XtInherit)
+#define XtInheritDeleteChild ((XtWidgetProc) _XtInherit)
+</literallayout>
+<para>
+Composite's class_part_initialize procedure begins as follows:
+</para>
+<literallayout>
+static void CompositeClassPartInitialize(widgetClass)
+ WidgetClass widgetClass;
+{
+ CompositeWidgetClass wc = (CompositeWidgetClass)widgetClass;
+ CompositeWidgetClass super = (CompositeWidgetClass)wc-&gt;core_class.superclass;
+ if (wc-&gt;composite_class.geometry_manager == XtInheritGeometryManager) {
+ wc-&gt;composite_class.geometry_manager = super-&gt;composite_class.geometry_manager;
+ }
+ if (wc-&gt;composite_class.change_managed == XtInheritChangeManaged) {
+ wc-&gt;composite_class.change_managed = super-&gt;composite_class.change_managed;
+ }
+ .
+ .
+ .
+</literallayout>
+<para>
+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:
+</para>
+
+<para>
+For Object:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<function>XtInheritAllocate</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritDeallocate</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+For Core:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<function>XtInheritRealize</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritResize</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritExpose</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritSetValuesAlmost</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritAcceptFocus</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritQueryGeometry</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritTranslations</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritDisplayAccelerator</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+For Composite:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<function>XtInheritGeometryManager</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritChangeManaged</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritInsertChild</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtInheritDeleteChild</function>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+For Shell:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<function>XtInheritRootGeometryManager</function>
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="Invocation_of_Superclass_Operations">
+<title>Invocation of Superclass Operations</title>
+<para>
+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 <emphasis remap='I'>expose</emphasis>
+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 <emphasis remap='I'>insert_child</emphasis>
+and then calling
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+to add the child to the managed set.
+</para>
+
+<note>
+<para>
+A class method should not use
+<function>XtSuperclass</function>
+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.
+</para>
+</note>
+<para>
+This technique is referred to as <emphasis remap='I'>enveloping</emphasis> the superclass's operation.
+</para>
+</sect2>
+
+<sect2 id="Class_Extension_Records">
+<title>Class Extension Records</title>
+<para>
+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.
+</para>
+
+<para>
+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
+<emphasis remap='I'>extension</emphasis> pointer for the appropriate part in their class structure to
+point to a statically declared extension record containing the
+additional fields.
+Setting the <emphasis remap='I'>extension</emphasis> field is never mandatory; code that uses fields
+in the extension record must always check the <emphasis remap='I'>extension</emphasis> field and take
+some appropriate default action if it is NULL.
+</para>
+
+<para>
+In order to permit multiple subclasses and libraries to chain extension
+records from a single <emphasis remap='I'>extension</emphasis> 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:
+</para>
+<literallayout>
+struct {
+ XtPointer next_extension;
+ XrmQuark record_type;
+ long version;
+ Cardinal record_size;
+};
+</literallayout>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>next_extension</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the next record in the list, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>record_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular structure declaration to which
+each extension record instance conforms.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>version</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a version id symbolic constant supplied by
+the definer of the structure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>record_size</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the total number of bytes allocated for the
+extension record.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>record_type</emphasis> 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
+<emphasis remap='I'>record_type</emphasis> field is normally assigned the
+result of
+<function>XrmStringToQuark</function>
+for a registered string constant. The
+Intrinsics reserve all record type strings beginning with the two
+characters ``XT'' for future standard uses. The value
+<emphasis role='strong'>NULLQUARK</emphasis>
+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.
+</para>
+
+<para>
+The <emphasis remap='I'>version</emphasis> 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 <emphasis remap='I'>record_size</emphasis> field value includes the four common header fields and
+should normally be initialized with
+<function>sizeof ().</function>
+</para>
+
+<para>
+Any value stored in the class part extension fields of
+<function>CompositeClassPart</function>,
+<function>ConstraintClassPart</function>,
+or
+<function>ShellClassPart</function>
+must point to an extension record conforming to this definition.
+</para>
+
+<para>
+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 <emphasis remap='I'>extension</emphasis> field in the class record.
+</para>
+
+<para>
+To locate a class extension record, use
+<xref linkend='XtGetClassExtension' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetClassExtension'>
+<funcprototype>
+ <funcdef>XtPointer <function>XtGetClassExtension</function></funcdef>
+ <paramdef>WidgetClass<parameter> object_class</parameter></paramdef>
+ <paramdef>Cardinal<parameter> byte_offset</parameter></paramdef>
+ <paramdef>XrmQuark<parameter> type</parameter></paramdef>
+ <paramdef>long<parameter> version</parameter></paramdef>
+ <paramdef>Cardinal<parameter> record_size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object class containing the extension list to be searched.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>byte_offset</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the offset in bytes from the base of the
+class record of the extension field to be searched.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the record_type of the class extension to be located.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>version</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the minimum acceptable version of the class
+extension required for a match.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>record_size</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the minimum acceptable length of the class
+extension record required for a match, or 0.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+<xref linkend='XtGetClassExtension' xrefstyle='select: title'/>
+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.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH02 b/libXt/specs/CH02
deleted file mode 100644
index cbb4bb8a5..000000000
--- a/libXt/specs/CH02
+++ /dev/null
@@ -1,3165 +0,0 @@
-.\" $Xorg: CH02,v 1.3 2000/08/17 19:42:42 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 2\fP\s-1
-
-\s+1\fBWidget Instantiation\fP\s-1
-.sp 2
-.nr H1 2
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 2 \(em Widget Instantiation
-.XE
-A hierarchy of widget instances constitutes a widget tree.
-The shell widget returned by
-.PN XtAppCreateShell
-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 Chapter 5),
-this widget tree instance defines the associated X Window tree.
-.LP
-Widgets can be either composite or primitive.
-Both kinds of widgets can contain children,
-but the \*(xI provide a set of management mechanisms for constructing
-and interfacing between composite widgets, their children, and
-other clients.
-.LP
-Composite widgets, that is, members of the class
-.PN 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.
-.LP
-In addition,
-the \*(xI 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.
-.LP
-A widget tree is manipulated by several \*(xI functions.
-For example,
-.PN XtRealizeWidget
-traverses the tree downward and recursively realizes all
-pop-up widgets and children of composite widgets.
-.PN XtDestroyWidget
-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.
-.PN XtMakeGeometryRequest
-traverses the tree up one level and calls the geometry manager
-that is responsible for a widget child's geometry.
-.LP
-To facilitate upward traversal of the widget tree,
-each widget has a pointer to its parent widget.
-The
-Shell
-widget that
-.PN XtAppCreateShell
-returns has a \fIparent\fP pointer of NULL.
-.LP
-To facilitate downward traversal of the widget tree,
-the \fIchildren\fP 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.
-
-.NH 2
-Initializing the \*(tk
-.XS
-\fB\*(SN Initializing the \*(tk\fP
-.XE
-.LP
-Before an application can call any \*(xI function
-other than
-.PN XtSetLanguageProc
-and
-.PN XtToolkitThreadInitialize ,
-it must initialize the \*(xI by using
-.IP \(bu 5
-.PN XtToolkitInitialize ,
-which initializes the \*(xI internals
-.IP \(bu 5
-.PN XtCreateApplicationContext ,
-which initializes the per-application state
-.IP \(bu 5
-.PN XtDisplayInitialize
-or
-.PN XtOpenDisplay ,
-which initializes the per-display state
-.IP \(bu 5
-.PN XtAppCreateShell ,
-which creates the root of a widget tree
-.LP
-Or an application can call the convenience procedure
-.PN XtOpenApplication ,
-which combines the functions of the preceding procedures.
-An application wishing to use the ANSI C locale mechanism should call
-.PN XtSetLanguageProc
-prior to calling
-.PN XtDisplayInitialize ,
-.PN XtOpenDisplay ,
-.PN XtOpenApplication ,
-or
-.PN XtAppInitialize .
-.LP
-Multiple instances of \*(tk 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.
-.IN "application context" "" "@DEF@"
-To accommodate both requirements,
-the \*(xI 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
-.PN Display
-pointers for that application.
-The \*(xI handle all display connections within a single application
-context simultaneously, handling input in a round-robin fashion.
-The application context type
-.PN XtAppContext
-.IN "XtAppContext" "" "@DEF@"
-is opaque to clients.
-.sp
-.LP
-To initialize the \*(xI internals, use
-.PN XtToolkitInitialize .
-.LP
-.IN "XtToolkitInitialize" "" "@DEF@"
-.sM
-.FD 0
-void XtToolkitInitialize()
-.FN
-.LP
-.eM
-If
-.PN XtToolkitInitialize
-was previously called, it returns immediately.
-When
-.PN XtToolkitThreadInitialize
-is called before
-.PN XtToolkitInitialize ,
-the latter is protected against
-simultaneous activation by multiple threads.
-.sp
-.LP
-To create an application context, use
-.PN XtCreateApplicationContext .
-.LP
-.IN "XtCreateApplicationContext" "" "@DEF@"
-.sM
-.FD 0
-XtAppContext XtCreateApplicationContext()
-.FN
-.LP
-.eM
-The
-.PN XtCreateApplicationContext
-function returns an application context,
-which is an opaque type.
-Every application must have at least one application context.
-.sp
-.LP
-To destroy an application context and close any
-remaining display connections in it, use
-.PN XtDestroyApplicationContext .
-.LP
-.IN "XtDestroyApplicationContext" "" "@DEF@"
-.sM
-.FD 0
-void XtDestroyApplicationContext(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.LP
-.eM
-The
-.PN XtDestroyApplicationContext
-function destroys the specified application context.
-If called from within an event dispatch (for example, in a callback procedure),
-.PN XtDestroyApplicationContext
-does not destroy the application context until the dispatch is complete.
-.sp
-.LP
-To get the application context in which a given widget was created, use
-.PN XtWidgetToApplicationContext .
-.LP
-.IN "XtWidgetToApplicationContext" "" "@DEF@"
-.sM
-.FD 0
-XtAppContext XtWidgetToApplicationContext(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which you want the application context. \*(oI
-.LP
-.eM
-The
-.PN XtWidgetToApplicationContext
-function returns the application context for the specified widget.
-.sp
-.LP
-To initialize a display and add it to an application context, use
-.PN XtDisplayInitialize .
-.LP
-.IN "XtDisplayInitialize" "" "@DEF@"
-.sM
-.FD 0
-void XtDisplayInitialize(\fIapp_context\fP, \fIdisplay\fP, \
-\fIapplication_name\fP, \fIapplication_class\fP,
-.br
- \fIoptions\fP, \fInum_options\fP, \fIargc\fP, \fIargv\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- Display *\fIdisplay\fP;
-.br
- String \fIapplication_name\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescRec *\fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc\fP;
-.br
- String *\fIargv\fP;
-.FN
-.IP \fIapp_context\fP 1.4i
-Specifies the application context.
-.IP \fIdisplay\fP 1.4i
-Specifies a previously opened display connection. Note that a single
-display connection can be in at most one application context.
-.IP \fIapplication_name\fP 1.4i
-Specifies the name of the application instance.
-.IP \fIapplication_class\fP 1.4i
-Specifies the class name of this application,
-which is usually the generic name for all instances of this application.
-.IP \fIoptions\fP 1.4i
-Specifies how to parse the command line for any application-specific resources.
-The \fIoptions\fP argument is passed as a parameter to
-.PN XrmParseCommand .
-For further information,
-see Section 15.9 in \fI\*(xL\fP and Section 2.4 of this specification.
-.IP \fInum_options\fP 1.4i
-Specifies the number of entries in the options list.
-.IP \fIargc\fP 1.4i
-Specifies a pointer to the number of command line parameters.
-.IP \fIargv\fP 1.4i
-Specifies the list of command line parameters.
-.LP
-.eM
-The
-.PN XtDisplayInitialize
-function retrieves the language string to be
-used for the specified display (see Section 11.11),
-calls the language procedure (if set) with that language string,
-builds the resource database for the default screen, calls the Xlib
-.PN XrmParseCommand
-function to parse the command line,
-and performs other per-display initialization.
-After
-.PN XrmParseCommand
-has been called,
-\fIargc\fP and \fIargv\fP contain only those parameters that
-were not in the standard option table or in the table specified by the
-\fIoptions\fP argument.
-If the modified \fIargc\fP is not zero,
-most applications simply print out the modified \fIargv\fP along with a message
-listing the allowable options.
-On POSIX-based systems,
-the application name is usually the final component of \fIargv\fP[0].
-If the synchronous resource is
-.PN True ,
-.PN XtDisplayInitialize
-calls the Xlib
-.PN XSynchronize
-function to put Xlib into synchronous mode for this display connection
-and any others currently open in the application context.
-See Sections 2.3 and 2.4 for details on the \fIapplication_name\fP,
-\fIapplication_class\fP, \fIoptions\fP, and \fInum_options\fP arguments.
-.LP
-.PN XtDisplayInitialize
-calls
-.PN XrmSetDatabase
-to associate the resource database of the default screen with the
-display before returning.
-
-.KS
-.LP
-To open a display, initialize it, and then
-add it to an application context, use
-.PN XtOpenDisplay .
-.LP
-.IN "XtOpenDisplay" "" "@DEF@"
-.sM
-.FD 0
-Display *XtOpenDisplay(\fIapp_context\fP, \fIdisplay_string\fP, \
-\fIapplication_name\fP, \fIapplication_class\fP,
-.br
- \fIoptions\fP, \fInum_options\fP, \fIargc\fP, \fIargv\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIdisplay_string\fP;
-.br
- String \fIapplication_name\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescRec *\fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc\fP;
-.br
- String *\fIargv\fP;
-.FN
-.IP \fIapp_context\fP 1.4i
-Specifies the application context.
-.IP \fIdisplay_string\fP 1.4i
-Specifies the display string, or NULL.
-.IP \fIapplication_name\fP 1.4i
-Specifies the name of the application instance, or NULL.
-.IP \fIapplication_class\fP 1.4i
-Specifies the class name of this application,
-which is usually the generic name for all instances of this application.
-.IP \fIoptions\fP 1.4i
-Specifies how to parse the command line for any application-specific resources.
-The options argument is passed as a parameter to
-.PN XrmParseCommand .
-.IP \fInum_options\fP 1.4i
-Specifies the number of entries in the options list.
-.IP \fIargc\fP 1.4i
-Specifies a pointer to the number of command line parameters.
-.IP \fIargv\fP 1.4i
-Specifies the list of command line parameters.
-.KE
-.LP
-.eM
-The
-.PN XtOpenDisplay
-function calls
-.PN XOpenDisplay
-with the specified \fIdisplay_string\fP.
-If \fIdisplay_string\fP is NULL,
-.PN XtOpenDisplay
-uses the current value of the \-display option specified in \fIargv\fP.
-If no display is specified in \fIargv\fP,
-the user's default display is retrieved from the environment.
-On POSIX-based systems,
-this is the value of the
-.PN \s-1DISPLAY\s+1
-environment variable.
-.LP
-If this succeeds,
-.PN XtOpenDisplay
-then calls
-.PN XtDisplayInitialize
-and passes it the opened display and
-the value of the \-name option specified in \fIargv\fP as the application name.
-If no \-name option is specified
-and \fIapplication_name\fP is
-non-NULL, \fIapplication_name\fP is passed to
-.PN XtDisplayInitialize .
-If \fIapplication_name\fP is NULL and if the environment variable
-.PN \s-1RESOURCE_NAME\s+1
-is set, the value of
-.PN \s-1RESOURCE_NAME\s+1
-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 \fIargv\fP[0] less any directory and file type components, that is, the
-final component of \fIargv\fP[0], if specified. If \fIargv\fP[0] does not exist or
-is the empty string, the application name is ``main''.
-.PN XtOpenDisplay
-returns the newly opened display or NULL if it failed.
-.LP
-See Section 7.12 for information regarding the use of
-.PN XtOpenDisplay
-in multiple threads.
-.sp
-.LP
-To close a display and remove it from an application context, use
-.PN XtCloseDisplay .
-.LP
-.IN "XtCloseDisplay" "" "@DEF@"
-.sM
-.FD 0
-void XtCloseDisplay(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display.
-.LP
-.eM
-The
-.PN XtCloseDisplay
-function calls
-.PN XCloseDisplay
-with the specified \fIdisplay\fP as soon as it is safe to do so.
-If called from within an event dispatch (for example, a callback procedure),
-.PN XtCloseDisplay
-does not close the display until the dispatch is complete.
-Note that applications need only call
-.PN XtCloseDisplay
-if they are to continue executing after closing the display;
-otherwise, they should call
-.PN XtDestroyApplicationContext .
-.LP
-See Section 7.12 for information regarding the use of
-.PN XtCloseDisplay
-in multiple threads.
-
-.NH 2
-Establishing the Locale
-.XS
-\fB\*(SN Establishing the Locale\fP
-.XE
-.LP
-Resource databases are specified to be created in the current process
-locale. During display initialization prior to creating the
-per-screen resource database, the \*(xI 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.
-.LP
-The callout procedure provided by the application is of type
-.PN XtLanguageProc .
-.LP
-.IN "XtLanguageProc" "" "@DEF@"
-.sM
-.FD 0
-typedef String (*XtLanguageProc)(Display*, String, XtPointer);
-.br
- Display *\fIdisplay\fP;
-.br
- String \fIlanguage\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Passes the display.
-.IP \fIlanguage\fP
-Passes the initial language value obtained from the command line
-or server per-display resource specifications.
-.IP \fIclient_data\fP
-Passes the additional client data specified in the call to
-.PN XtSetLanguageProc .
-.LP
-.eM
-The language procedure allows an application to set the locale to
-the value of the language resource determined by
-.PN XtDisplayInitialize .
-The function returns a new language string that
-will be subsequently used by
-.PN XtDisplayInitialize
-to establish the path for loading resource files. The returned
-string will be copied by the \*(xI into new memory.
-.LP
-Initially, no language procedure is set by the \*(xI.
-To set the language procedure for use by
-.PN XtDisplayInitialize ,
-use
-.PN XtSetLanguageProc .
-.LP
-.IN XtSetLanguageProc "" "@DEF@"
-.IN "language procedure" "" "@DEF@"
-.sM
-.FD 0
-XtLanguageProc XtSetLanguageProc(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtLanguageProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context in which the language procedure is
-to be used, or NULL.
-.IP \fIproc\fP 1i
-Specifies the language procedure.
-.IP \fIclient_data\fP 1i
-Specifies additional client data to be passed to the language
-procedure when it is called.
-.LP
-.eM
-.PN XtSetLanguageProc
-sets the language procedure that will be called from
-.PN 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.
-.PN 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
-.PN 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
-.PN setlocale (
-.PN LC_ALL ,
-\fIlanguage\fP ).
-If an error is encountered, a warning message is issued with
-.PN XtWarning .
-.IP \(bu 5
-Calls
-.PN XSupportsLocale
-to verify that the current locale is supported.
-If the locale is not supported, a warning message is issued with
-.PN XtWarning
-and the locale is set to ``C''.
-.IP \(bu 5
-Calls
-.PN 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
-.PN setlocale (
-.PN LC_ALL ,
-NULL ).
-.LP
-A client wishing to use this mechanism to establish locale can do so
-by calling
-.PN XtSetLanguageProc
-prior to
-.PN XtDisplayInitialize ,
-as in the following example.
-.LP
-.Ds 0
-.TA .5i
- Widget top;
- XtSetLanguageProc(NULL, NULL, NULL);
- top = XtOpenApplication(...);
- ...
-.De
-
-.NH 2
-Loading the Resource Database
-.XS
-\fB\*(SN Loading the Resource Database\fP
-.XE
-.LP
-The
-.PN XtDisplayInitialize
-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:
-
-.IP \(bu 5
-Application command line (\fIargc\fP, \fIargv\fP).
-.IP \(bu 5
-Per-host user environment resource file on the local host.
-.IP \(bu 5
-Per-screen resource specifications from the server.
-.IP \(bu 5
-Per-display resource specifications from the server or from
-.br
-the user preference file on the local host.
-.IP \(bu 5
-Application-specific user resource file on the local host.
-.IP \(bu 5
-Application-specific class resource file on the local host.
-
-.LP
-When the resource database for a particular screen on the display
-is needed (either internally, or when
-.PN XtScreenDatabase
-is called),
-it is created in the following manner using the sources listed
-above in the same order:
-
-.IP \(bu 5
-A temporary database, the ``server resource database'', is
-created from the string returned by
-.PN XResourceManagerString
-or, if
-.PN 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/\fB.Xdefaults\fP.
-.IN ".Xdefaults" "" "@DEF@"
-
-.IP \(bu 5
-If a language procedure has been set,
-.PN XtDisplayInitialize
-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,
-.PN XtDisplayInitialize
-queries the server resource database (which is assumed to be entirely
-in XPCS) for the resource
-\fIname\fP\fB.xnlLanguage\fP, class \fIClass\fP\fB.XnlLanguage\fP
-where \fIname\fP
-.IN "xnlLanguage" "" "@DEF@"
-.IN "Resources" "xnlLanguage"
-and \fIClass\fP are the \fIapplication_name\fP and
-\fIapplication_class\fP specified to
-.PN XtDisplayInitialize .
-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 \*(xI that require the per-display language string.
-
-.IP \(bu 5
-The screen resource database is initialized by parsing the command
-line in the manner specified by Section 2.4.
-
-.IP \(bu 5
-If a language procedure has not been set,
-the initial database is then queried for the resource
-\fIname\fP\fB.xnlLanguage\fP, class \fIClass\fP\fB.XnlLanguage\fP
-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
-.PN \s-1LANG\s+1
-environment variable. If no language string is
-found, the empty string is used.
-This language string is saved for all future references in the \*(xI
-that require the per-display language string.
-
-.IP \(bu 5
-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
-.PN \s-1XENVIRONMENT\s+1
-environment variable.
-If this environment variable does not exist, the user's home directory
-is searched for a file named
-.PN \&.Xdefaults-\fIhost\fP ,
-where \fIhost\fP is the host name of the machine on which the
-application is running.
-
-.IP \(bu 5
-The per-screen resource specifications are then merged into the screen
-resource database, if they exist. These specifications are the string
-returned by
-.PN XScreenResourceString
-for the respective screen and are owned entirely by the user.
-
-.IP \(bu 5
-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.
-
-.IP \(bu 5
-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
-.PN XrmSetDatabase
-with the current screen resource database, after preserving the
-original display-associated database, then calling
-.PN XtResolvePathname
-with the parameters
-(\fIdisplay\fP, NULL, NULL, NULL, \fIpath\fP, NULL, 0, NULL),
-where \fIpath\fP is defined in an operating-system-specific way.
-On POSIX-based systems, \fIpath\fP is defined to be the value
-of the environment variable
-.PN \s-1XUSERFILESEARCHPATH\s+1
-if this is defined. If
-.PN \s-1XUSERFILESEARCHPATH\s+1
-is not defined, an implementation-dependent default value is used.
-This default value is constrained in the following manner:
-
-.RS
-.IP \- 3
-If the environment variable
-.PN \s-1XAPPLRESDIR\s+1
-is not defined, the default
-.PN \s-1XUSERFILESEARCHPATH\s+1
-must contain at least six entries. These entries must contain
-.IN "XUSERFILESEARCHPATH" "" "@DEF@"
-.IN "XAPPLRESDIR" "" "@DEF@"
-.IN "$HOME"
-$HOME as the directory prefix, plus the following substitutions:
-
-.nf
-.ta .3i 1.5i 2i
-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
-.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 are
-implementation-dependent.
-
-.IP \- 3
-If
-.PN \s-1XAPPLRESDIR\s+1
-is defined, the default
-.PN \s-1XUSERFILESEARCHPATH\s+1
-must contain at least seven entries. These entries must contain the
-following directory prefixes and substitutions:
-
-.ne 1.1
-.nf
-.ta .3i 1.6i 2.2i 3.3i 3.7i
-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
-.fi
-
-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.
-.RE
-
-.IP \(bu 5
-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
-.PN XtResolvePathname
-with the parameters
-(\fIdisplay\fP, ``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
-.PN XtAppSetFallbackResources .
-Note that the customization substitution string is retrieved
-dynamically by
-.PN XtResolvePathname
-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
-.PN XtResolvePathname ,
-the original display-associated database is restored.
-.sp
-.LP
-To obtain the resource database for a particular screen, use
-.PN XtScreenDatabase .
-.LP
-.IN "XtScreenDatabase" "" "@DEF@"
-.sM
-.FD 0
-XrmDatabase XtScreenDatabase(\fIscreen\fP)
-.br
- Screen *\fIscreen\fP;
-.FN
-.IP \fIscreen\fP 1i
-Specifies the screen whose resource database is to be returned.
-.LP
-.eM
-The
-.PN XtScreenDatabase
-function returns the fully merged resource database as specified above,
-associated with the specified screen. If the specified \fIscreen\fP
-does not belong to a
-.PN Display
-initialized by
-.PN XtDisplayInitialize ,
-the results are undefined.
-.sp
-.LP
-To obtain the default resource database associated with a particular display, use
-.PN XtDatabase .
-.LP
-.IN "XtDatabase" "" "@DEF@"
-.sM
-.FD 0
-XrmDatabase XtDatabase(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display.
-.LP
-.eM
-The
-.PN XtDatabase
-function is equivalent to
-.PN XrmGetDatabase .
-It returns the database associated with the specified display, or
-NULL if a database has not been set.
-.sp
-.LP
-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
-.PN XtAppSetFallbackResources .
-.LP
-.IN "XtAppSetFallbackResources" "" "@DEF@"
-.sM
-.FD 0
-void XtAppSetFallbackResources(\fIapp_context\fP, \fIspecification_list\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String *\fIspecification_list\fP;
-.FN
-.IP \fIapp_context\fP 1.25i
-Specifies the application context in which
-the fallback specifications will be used.
-.IP \fIspecification_list\fP 1.25i
-Specifies a NULL-terminated list of
-resource specifications to preload
-the database, or NULL.
-.LP
-.eM
-Each entry in \fIspecification_list\fP points to a string in the format of
-.PN XrmPutLineResource .
-Following a call to
-.PN XtAppSetFallbackResources ,
-when a resource database is being created for a particular screen and
-the \*(xI are not able
-to find or read an application-specific class resource file according to the
-rules given above and if \fIspecification_list\fP is not NULL, the
-resource specifications in \fIspecification_list\fP will be merged
-into the screen resource database in place of the application-specific
-class resource file.
-.PN XtAppSetFallbackResources
-is not
-required to copy \fIspecification_list\fP; 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
-.PN 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.
-
-.NH 2
-Parsing the Command Line
-.XS
-\fB\*(SN Parsing the Command Line\fP
-.XE
-.LP
-The
-.PN XtOpenDisplay
-function first parses the command line for the following options:
-.IP \-display 1i
-Specifies the display name for
-.PN XOpenDisplay .
-.IP \-name 1i
-Sets the resource name prefix,
-which overrides the application name passed to
-.PN XtOpenDisplay .
-.IP \-xnllanguage 1i
-Specifies the initial language string for establishing locale
-and for finding application class resource files.
-.LP
-.PN XtDisplayInitialize
-has a table of standard command line options that are passed to
-.PN XrmParseCommand
-for adding resources to the resource database,
-and it takes as a parameter additional
-application-specific resource abbreviations.
-.IN "XrmOptionDescRec" "" "@DEF@"
-The format of this table is described in Section 15.9 in \fI\*(xL\fP.
-.LP
-.sM
-.Ds 0
-.TA .5i 2.75i
-.ta .5i 2.75i
-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;
-
-.De
-.LP
-.eM
-The standard table contains the following entries:
-.TS H
-l l l l .
-_
-.sp 6p
-.TH
-Option String Resource Name Argument Kind Resource Value
-.sp 6p
-_
-.sp 6p
-\-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
-.sp 6p
-_
-.TE
-.LP
-Note that any unique abbreviation for an option name in the standard table
-or in the application table is accepted.
-.LP
-If reverseVideo is
-.PN True ,
-the values of
-.PN XtDefaultForeground
-and
-.PN XtDefaultBackground
-are exchanged for all screens on the Display.
-.LP
-.IN "synchronous" "" "@DEF@"
-.IN "Resources" "synchronous"
-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,
-.PN XtDisplayInitialize
-makes a call to
-.PN 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.
-.LP
-.IN "selectionTimeout" "" "@DEF@"
-.IN "Resources" "selectionTimeout"
-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.
-.LP
-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
-.PN xmh ,
-you can start it up as
-.LP
-.Ds
-xmh \-xrm 'xmh*Command.background: red'
-.DE
-.LP
-When it parses the command line,
-.PN XtDisplayInitialize
-merges the application option table with the standard option table
-before calling the Xlib
-.PN 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 \*(xI reserve all option names
-beginning with the characters ``-xt'' for future standard uses.
-
-.NH 2
-Creating Widgets
-.XS
-\fB\*(SN Creating Widgets\fP
-.XE
-.LP
-The creation of widget instances is a three-phase process:
-.IP 1. 5
-The widgets are allocated and initialized with resources
-and are optionally added to the managed subset of their parent.
-.IP 2. 5
-All composite widgets are notified of their managed children
-in a bottom-up traversal of the widget tree.
-.IP 3. 5
-The widgets create X windows, which then are mapped.
-.LP
-.EQ
-delim $$
-.EN
-To start the first phase,
-the application calls
-.PN XtCreateWidget
-for all its widgets and adds some (usually, most or all) of its widgets
-to their respective parents' managed set by calling
-.PN XtManageChild .
-To avoid an $O( n sup 2 )$ 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.
-.EQ
-delim off
-.EN
-.LP
-After all widgets have been created,
-the application calls
-.PN XtRealizeWidget
-with the top-level widget to execute the second and third phases.
-.PN XtRealizeWidget
-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.
-.LP
-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.
-.LP
-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.
-.LP
-Finally,
-.PN XtRealizeWidget
-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.
-
-.NH 3
-Creating and Merging Argument Lists
-.XS
-\fB\*(SN Creating and Merging Argument Lists\fP
-.XE
-.LP
-Many \*(xI functions may be passed pairs of resource names and
-values.
-These are passed as an arglist, a pointer to an array of
-.PN Arg
-structures, which contains
-.IN "ArgList" "" "@DEF@"
-.IN "Arg" "" "@DEF@"
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String name;
- XtArgVal value;
-} Arg, *ArgList;
-.De
-.LP
-.eM
-where
-.PN XtArgVal
-is as defined in Section 1.5.
-.LP
-If the size of the resource is less than or equal to the size of an
-.PN XtArgVal ,
-the resource value is stored directly in \fIvalue\fP;
-otherwise, a pointer to it is stored in \fIvalue\fP.
-.LP
-To set values in an
-.PN ArgList ,
-use
-.PN XtSetArg .
-.LP
-.IN "XtSetArg" "" "@DEF@"
-.sM
-.FD 0
-void XtSetArg(\fIarg\fP, \fIname\fP, \fIvalue\fP)
-.br
- Arg \fIarg\fP;
-.br
- String \fIname\fP;
-.br
- XtArgVal \fIvalue\fP;
-.FN
-.IP \fIarg\fP 1i
-Specifies the \fIname/value\fP pair to set.
-.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
-.PN XtArgVal ,
-else the address.
-.LP
-.eM
-The
-.PN XtSetArg
-function is usually used in a highly stylized manner to
-minimize the probability of making a mistake; for example:
-.LP
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-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
-.PN XtNumber :
-.LP
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-static Args args[] = {
- {XtNheight, (XtArgVal) 100},
- {XtNwidth, (XtArgVal) 200},
-};
-XtSetValues(Widget, args, XtNumber(args));
-.De
-.LP
-Note that you should not use expressions with side effects such as
-auto-increment or auto-decrement
-within the first argument to
-.PN XtSetArg .
-.PN XtSetArg
-can be implemented as a macro that evaluates the first argument twice.
-.sp
-.LP
-To merge two
-arglist arrays, use
-.PN XtMergeArgLists .
-.LP
-.IN "XtMergeArgLists" "" "@DEF@"
-.sM
-.FD 0
-ArgList XtMergeArgLists(\fIargs1\fP, \fInum_args1\fP, \fIargs2\fP, \
-\fInum_args2\fP)
-.br
- ArgList \fIargs1\fP;
-.br
- Cardinal \fInum_args1\fP;
-.br
- ArgList \fIargs2\fP;
-.br
- Cardinal \fInum_args2\fP;
-.FN
-.IP \fIargs1\fP 1i
-Specifies the first argument list.
-.IP \fInum_args1\fP 1i
-Specifies the number of entries in the first argument list.
-.IP \fIargs2\fP 1i
-Specifies the second argument list.
-.IP \fInum_args2\fP 1i
-Specifies the number of entries in the second argument list.
-.LP
-.eM
-The
-.PN XtMergeArgLists
-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
-.PN XtFree .
-.sp
-.LP
-.IN "varargs" "" "@DEF@"
-All \*(xI interfaces that require
-.PN 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
-.PN ArgList
-procedure; e.g.,
-.PN XtVaCreateWidget .
-Each procedure named \fBXtVa\fP\fIsomething\fP takes as its
-last arguments, in place of the corresponding
-.PN ArgList /
-.PN Cardinal
-parameters, a variable parameter list of resource name and
-value pairs where each name is of type
-.PN String
-and each value is of type
-.PN XtArgVal .
-The end of the list is identified by a \fIname\fP 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
-.PN ArgList
-and varargs forms interchangeably.
-.LP
-Two special names are defined for use only in varargs lists:
-.PN XtVaTypedArg
-and
-.PN XtVaNestedList .
-.sp
-.LP
-.IN "XtVaTypedArg" "" "@DEF@"
-.sM
-.Ds 0
-#define XtVaTypedArg "XtVaTypedArg"
-.De
-.LP
-.eM
-If the name
-.PN XtVaTypedArg
-is specified in place of a resource
-name, then the following four arguments are interpreted as a
-\fIname/type/value/size\fP tuple \fIwhere\fP name is of type
-.PN String ,
-\fItype\fP is of type
-.PN String ,
-\fIvalue\fP is of type
-.PN XtArgVal ,
-and \fIsize\fP is of type int. When a varargs list containing
-.PN XtVaTypedArg
-is processed, a resource type
-conversion (see Section 9.6) is performed if necessary to convert the
-value into the format required by the associated resource. If \fItype\fP is
-XtRString, then \fIvalue\fP contains a pointer to the string and \fIsize\fP
-contains the number of bytes allocated, including the trailing null
-byte. If \fItype\fP is not XtRString, then \fIif\fP size is
-less than or equal to
-\fBsizeof\fP(\fBXtArgVal\fP), the value should be the data cast to the type
-.PN XtArgVal ,
-otherwise \fIvalue\fP 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.
-.sp
-.LP
-.IN "XtVaNestedList" "" "@DEF@"
-.sM
-.Ds 0
-#define XtVaNestedList "XtVaNestedList"
-.De
-.LP
-.eM
-If the name
-.PN XtVaNestedList
-is specified in place of a resource name,
-then the following argument is interpreted as an
-.PN 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.
-.sp
-.LP
-To dynamically allocate a varargs list for use with
-.PN XtVaNestedList
-in multiple calls, use
-.PN XtVaCreateArgsList .
-.IN "XtVaCreateArgsList" "" "@DEF@"
-.sp
-.LP
-.sM
-.Ds 0
-typedef XtPointer XtVarArgsList;
-.De
-.LP
-.FD 0
-XtVarArgsList XtVaCreateArgsList(\fIunused\fP, ...)
-.br
- XtPointer \fIunused\fP;
-.FN
-.IP \fIunused\fP 1i
-This argument is not currently used and must be specified as NULL.
-.IP ... 1i
-Specifies a variable parameter list of resource
-name and value pairs.
-.LP
-.eM
-The
-.PN XtVaCreateArgsList
-function allocates memory and copies its arguments into a
-single list pointer, which may be used with
-.PN XtVaNestedList .
-The end of
-both lists is identified by a \fIname\fP entry containing NULL. Any entries
-of type
-.PN 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
-.PN XtFree
-when no longer needed.
-.LP
-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.
-
-.NH 3
-Creating a Widget Instance
-.XS
-\fB\*(SN Creating a Widget Instance\fP
-.XE
-.LP
-To create an instance of a widget, use
-.PN XtCreateWidget .
-.LP
-.IN "XtCreateWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtCreateWidget(\fIname\fP, \fIobject_class\fP, \fIparent\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIobject_class\fP;
-.br
- Widget \fIparent\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1i
-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.
-.IP \fIobject_class\fP 1i
-Specifies the widget class pointer for the created object. \*(oC
-.IP \fIparent\fP 1i
-Specifies the parent widget. \*(oI
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtCreateWidget
-function performs all the boilerplate operations of widget
-creation, doing the following in order:
-.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
-If the specified class is not
-.PN coreWidgetClass
-or a subclass thereof,
-and the parent's class is a subclass of
-.PN compositeWidgetClass
-and either no extension record in
-the parent's composite class part extension field exists with the
-\fIrecord_type\fP
-.PN \s-1NULLQUARK\s+1
-or the \fIaccepts_objects\fP field in the extension
-record is
-.PN False ,
-.PN XtCreateWidget
-issues a fatal error; see Section 3.1 and Chapter 12.
-.IP \(bu 5
-If the specified class contains an extension record in the object class
-part \fIextension\fP field with \fIrecord_type\fP
-.PN \s-1NULLQUARK\s+1
-and the \fIallocate\fP field is not NULL,
-the procedure is invoked to allocate memory
-for the widget instance. If the parent is a member of the class
-.PN constraintWidgetClass ,
-the procedure also allocates memory for the
-parent's constraints and stores the address of this memory into the
-\fIconstraints\fP field. If no allocate procedure is found, the \*(xI
-allocate memory for the widget and, when applicable, the constraints,
-and initializes the \fIconstraints\fP field.
-.IP \(bu 5
-Initializes the Core nonresource data fields
-\fIself\fP, \fIparent\fP, \fIwidget_class\fP, \fIbeing_destroyed\fP,
-\fIname\fP, \fImanaged\fP, \fIwindow\fP, \fIvisible\fP,
-\fIpopup_list\fP, and \fInum_popups\fP.
-.IP \(bu 5
-Initializes the resource fields (for example, \fIbackground_pixel\fP)
-by using the
-.PN CoreClassPart
-resource lists specified for this class and all superclasses.
-.IP \(bu 5
-If the parent is a member of the class
-.PN constraintWidgetClass ,
-initializes the resource fields of the constraints record
-by using the
-.PN ConstraintClassPart
-resource lists specified for the parent's class
-and all superclasses up to
-.PN constraintWidgetClass .
-.IP \(bu 5
-Calls the initialize procedures for the widget starting at the
-Object
-initialize procedure on down to the widget's initialize procedure.
-.IP \(bu 5
-If the parent is a member of the class
-.PN constraintWidgetClass ,
-calls the
-.PN ConstraintClassPart
-initialize procedures,
-starting at
-.PN constraintWidgetClass
-on down to the parent's
-.PN ConstraintClassPart
-initialize procedure.
-.IP \(bu 5
-If the parent is a member of the class
-.PN compositeWidgetClass ,
-puts the widget into its parent's children list by calling its parent's
-insert_child procedure.
-For further information,
-see Section 3.1.
-.sp
-.LP
-To create an instance of a widget using varargs lists, use
-.PN XtVaCreateWidget .
-.LP
-.IN "XtVaCreateWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaCreateWidget(\fIname\fP, \fIobject_class\fP, \fIparent\fP, ...)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIobject_class\fP;
-.br
- Widget \fIparent\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the resource name for the created widget.
-.IP \fIobject_class\fP 1i
-Specifies the widget class pointer for the created object. \*(oC
-.IP \fIparent\fP 1i
-Specifies the parent widget. \*(oI
-.IP ... 1i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-The
-.PN XtVaCreateWidget
-procedure is identical in function to
-.PN XtCreateWidget
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list,
-as described
-in Section 2.5.1.
-
-.NH 3
-Creating an Application Shell Instance
-.XS
-\fB\*(SN Creating an Application Shell Instance\fP
-.XE
-.LP
-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
-.PN XtAppCreateShell
-to create independent widget trees.
-.LP
-.IN "XtAppCreateShell" "" "@DEF@"
-.sM
-.FD 0
-Widget XtAppCreateShell(\fIname\fP, \
-\fIapplication_class\fP, \fIwidget_class\fP, \fIdisplay\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- String \fIapplication_class\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Display *\fIdisplay\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1.25i
-Specifies the instance name of the shell widget.
-If \fIname\fP is NULL,
-the application name passed to
-.PN XtDisplayInitialize
-is used.
-.IP \fIapplication_class\fP 1.25i
-Specifies the resource class string to be used in
-place of the widget \fIclass_name\fP string when
-\fIwidget_class\fP is
-.PN applicationShellWidgetClass
-or a subclass thereof.
-.IP \fIwidget_class\fP 1.25i
-Specifies the widget class for the top-level widget (e.g.,
-.PN applicationShellWidgetClass ).
-.IP \fIdisplay\fP 1.25i
-Specifies the display for the default screen
-and for the resource database used to retrieve
-the shell widget resources.
-.IP \fIargs\fP 1.25i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1.25i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtAppCreateShell
-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
-\fIargs\fP 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 \fIname\fP.screen,
-class \fIClass\fP.Screen where \fIClass\fP is the specified
-\fIapplication_class\fP if \fIwidget_class\fP is
-.PN applicationShellWidgetClass
-or a subclass thereof. If \fIwidget_class\fP is not
-.PN application\%Shell\%Widget\%Class
-or a subclass, \fIClass\fP is the \fIclass_name\fP
-field from the
-.PN CoreClassPart
-of the specified \fIwidget_class\fP.
-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
-\fIargs\fP. The widget name and \fIClass\fP as determined above are
-used as the leftmost (i.e., root) components in all fully qualified
-resource names for objects within this widget tree.
-
-.LP
-If the specified widget class is a subclass of WMShell, the name and
-\fIClass\fP as determined above will be stored into the
-.PN \s-1WM_CLASS\s+1
-property on the widget's window when it becomes realized.
-If the specified \fIwidget_class\fP is
-.PN applicationShellWidgetClass
-or a subclass thereof, the
-.PN \s-1WM_COMMAND\s+1
-property will also be set from the values of the XtNargv and
-XtNargc resources.
-
-.LP
-To create multiple top-level shells within a single (logical)
-application,
-you can use one of two methods:
-.IP \(bu 5
-Designate one shell as the real top-level shell and
-create the others as pop-up children of it by using
-.PN XtCreatePopupShell .
-.IP \(bu 5
-Have all shells as pop-up children of an unrealized top-level shell.
-.LP
-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:
-.LP
-.Ds
-.TA 2i
-.ta 2i
-xmail.geometry:... (the main window)
-xmail.read.geometry:... (the read window)
-xmail.compose.geometry:... (the compose window)
-.De
-.LP
-The second method,
-which is best if there is no main window,
-leads to resource specifications like the following:
-.LP
-.Ds
-.TA 2i
-.ta 2i
-xmail.headers.geometry:... (the headers window)
-xmail.read.geometry:... (the read window)
-xmail.compose.geometry:... (the compose window)
-.De
-.sp
-.LP
-To create a top-level widget that is the root of a widget tree using
-varargs lists, use
-.PN XtVaAppCreateShell .
-.LP
-.IN "XtVaAppCreateShell" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaAppCreateShell(\fIname\fP, \fIapplication_class\fP, \
-\fIwidget_class\fP, \fIdisplay\fP, ...)
-.br
- String \fIname\fP;
-.br
- String \fIapplication_class\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIname\fP 1.5i
-Specifies the instance name of the shell widget.
-If \fIname\fP is NULL,
-the application name passed to
-.PN XtDisplayInitialize
-is used.
-.IP \fIapplication_class\fP 1.5i
-Specifies the resource class string to be used in
-place of the widget \fIclass_name\fP string when
-\fIwidget_class\fP is
-.PN applicationShellWidgetClass
-or a subclass thereof.
-.IP \fIwidget_class\fP 1.5i
-Specifies the widget class for the top-level widget.
-.IP \fIdisplay\fP 1.5i
-Specifies the display for the default screen
-and for the resource database used to retrieve
-the shell widget resources.
-.IP ... 1.5i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-The
-.PN XtVaAppCreateShell
-procedure is identical in function to
-.PN XtAppCreateShell
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as
-described in Section 2.5.1.
-
-.NH 3
-Convenience Procedure to Initialize an Application
-.XS
-\fB\*(SN Convenience Procedure to Initialize an Application\fP
-.XE
-.LP
-To initialize the \*(xI internals, create an application context,
-open and initialize a display, and create the initial root shell
-instance, an application may use
-.PN XtOpenApplication
-or
-.PN XtVaOpenApplication .
-.LP
-.IN "XtOpenApplication" "" "@DEF@"
-.sM
-.FD 0
-Widget XtOpenApplication(\fIapp_context_return\fP, \fIapplication_class\fP, \
-\fIoptions\fP, \fInum_options\fP,
-.br
- \fIargc_in_out\fP, \fIargv_in_out\fP, \
-\fIfallback_resources\fP, \fIwidget_class\fP, \fIargs\fP, \fInum_args\fP)
-.br
- XtAppContext *\fIapp_context_return\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescList \fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc_in_out\fP;
-.br
- String *\fIargv_in_out\fP;
-.br
- String *\fIfallback_resources\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIapp_context_return\fP 1.5i
-Returns the application context, if non-NULL.
-.IP \fIapplication_class\fP 1.5i
-Specifies the class name of the application.
-.IP \fIoptions\fP 1.5i
-Specifies the command line options table.
-.IP \fInum_options\fP 1.5i
-Specifies the number of entries in \fIoptions\fP.
-.IP \fIargc_in_out\fP 1.5i
-Specifies a pointer to the number of command line arguments.
-.IP \fIargv_in_out\fP 1.5i
-Specifies a pointer to the command line arguments.
-.IP \fIfallback_resources\fP 1.5i
-Specifies resource values to be used if the application class resource
-file cannot be opened or read, or NULL.
-.IP \fIwidget_class\fP 1.5i
-Specifies the class of the widget to be created. Must be shellWidgetClass
-or a subclass.
-.br
-.IP \fIargs\fP 1.5i
-Specifies the argument list to override any
-other resource specifications for the created shell widget.
-.IP \fInum_args\fP 1.5i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtOpenApplication
-function calls
-.PN XtToolkitInitialize
-followed by
-.PN XtCreateApplicationContext ,
-then calls
-.PN XtOpenDisplay
-with \fIdisplay_string\fP NULL and
-\fIapplication_name\fP NULL, and finally calls
-.PN XtAppCreateShell
-with \fIname\fP NULL, the specified \fIwidget_class\fP,
-an argument list and count,
-and returns the created shell.
-The recommended \fIwidget_class\fP is
-.PN sessionShellWidgetClass .
-The argument list and count are created by merging
-the specified \fIargs\fP and \fInum_args\fP with a list
-containing the specified \fIargc\fP and \fIargv\fP.
-The modified \fIargc\fP and \fIargv\fP returned by
-.PN 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
-.PN XtOpenApplication
-terminates the application. If \fIfallback_resources\fP is non-NULL,
-.PN XtAppSetFallbackResources
-is called with the value prior to calling
-.PN XtOpenDisplay .
-.sp
-.LP
-.IN "XtVaOpenApplication" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaOpenApplication(\fIapp_context_return\fP, \fIapplication_class\fP, \
-\fIoptions\fP, \fInum_options\fP,
-.br
- \fIargc_in_out\fP, \fIargv_in_out\fP, \
-\fIfallback_resources\fP, \fIwidget_class\fP, ...)
-.br
- XtAppContext *\fIapp_context_return\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescList \fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc_in_out\fP;
-.br
- String *\fIargv_in_out\fP;
-.br
- String *\fIfallback_resources\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.FN
-.IP \fIapp_context_return\fP 1.5i
-Returns the application context, if non-NULL.
-.IP \fIapplication_class\fP 1.5i
-Specifies the class name of the application.
-.IP \fIoptions\fP 1.5i
-Specifies the command line options table.
-.IP \fInum_options\fP 1.5i
-Specifies the number of entries in \fIoptions\fP.
-.IP \fIargc_in_out\fP 1.5i
-Specifies a pointer to the number of command line arguments.
-.IP \fIargv_in_out\fP 1.5i
-Specifies the command line arguments array.
-.IP \fIfallback_resources\fP 1.5i
-Specifies resource values to be used if the application class
-resource file cannot be opened, or NULL.
-.IP \fIwidget_class\fP 1.5i
-Specifies the class of the widget to be created. Must be shellWidgetClass
-or a subclass.
-.IP ... 1.5i
-Specifies the variable argument list to override any other
-resource specifications for the created shell.
-.LP
-.eM
-The
-.PN XtVaOpenApplication
-procedure is identical in function to
-.PN XtOpenApplication
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list,
-as described
-in Section 2.5.1.
-
-.NH 3
-Widget Instance Allocation: The allocate Procedure
-.XS
-\*(SN Widget Instance Allocation: The allocate Procedure
-.XE
-.IN "Widget Allocation"
-.LP
-A widget class may optionally provide an instance allocation procedure
-in the
-.PN ObjectClassExtension
-record.
-.LP
-When the call to create a widget includes a varargs list containing
-.PN XtVaTypedArg ,
-these arguments will be passed to the allocation procedure in an
-.PN XtTypedArgList .
-.LP
-.IN "XtTypedArgList" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String name;
- String type;
- XtArgVal value;
- int size;
-} XtTypedArg, *XtTypedArgList;
-.De
-.LP
-.eM
-.IN "allocate procedure" "" "@DEF@"
-The allocate procedure pointer in the
-.PN ObjectClassExtension
-record is of type
-.PN XtAllocateProc .
-.LP
-.IN "XtAllocateProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtAllocateProc)(WidgetClass, Cardinal*, Cardinal*, ArgList, \
-Cardinal*,
- XtTypedArgList, Cardinal*, \
-Widget*, XtPointer*);
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Cardinal* \fIconstraint_size\fP;
-.br
- Cardinal* \fImore_bytes\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal* \fInum_args\fP;
-.br
- XtTypedArgList \fItyped_args\fP,
-.br
- Cardinal* \fInum_typed_args\fP;
-.br
- Widget* \fInew_return\fP;
-.br
- XtPointer* \fImore_bytes_return\fP;
-.FN
-.IP \fIwidget_class\fP 1.5i
-Specifies the widget class of the instance to allocate.
-.IP \fIconstraint_size\fP 1.5i
-Specifies the size of the constraint record to allocate, or 0.
-.IP \fImore_bytes\fP 1.5i
-Specifies the number of auxiliary bytes of memory to allocate.
-.IP \fIargs\fP 1.5i
-Specifies the argument list as given in the call to create the widget.
-.IP \fInum_args\fP 1.5i
-Specifies the number of arguments.
-.IP \fItyped_args\fP 1.5i
-Specifies the list of typed arguments given in the call to create the widget.
-.IP \fInum_typed_args\fP 1.5i
-Specifies the number of typed arguments.
-.IP \fInew_return\fP 1.5i
-Returns a pointer to the newly allocated instance, or NULL in case of error.
-.IP \fImore_bytes_return\fP 1.5i
-Returns the auxiliary memory if it was requested, or NULL
-if requested and an error occurred; otherwise, unchanged.
-.LP
-.eM
-At widget allocation time, if an extension record with \fIrecord_type\fP
-equal to
-.PN \s-1NULLQUARK\s+1
-is located through the object class part \fIextension\fP field
-and the \fIallocate\fP field is not NULL, the
-.PN XtAllocateProc
-will be invoked to allocate memory for the widget. If no ObjectClassPart
-extension record is declared with \fIrecord_type equal\fP to
-.PN \s-1NULLQUARK\s+1 ,
-then
-.PN XtInheritAllocate
-and
-.PN XtInheritDeallocate
-are assumed.
-If no
-.PN XtAllocateProc
-is found, the \*(xI will allocate memory for the widget.
-.LP
-An
-.PN XtAllocateProc
-must perform the following:
-.IP \(bu 5
-Allocate memory for the widget instance and return it in \fInew_return\fP.
-The memory must be at least \fIwc->core_class.widget_size\fP bytes in length,
-double-word aligned.
-.IP \(bu 5
-Initialize the \fIcore.constraints\fP field in the instance record to NULL
-or to point to a constraint record. If \fIconstraint_size\fP
-is not 0, the procedure must allocate memory for the constraint record.
-The memory must be double-word aligned.
-.IP \(bu 5
-If \fImore_bytes\fP is not 0, then the address of a block of memory
-at least \fImore_bytes\fP in size, double-word aligned, must be
-returned in the \fImore_bytes_return\fP parameter,
-or NULL to indicate an error.
-.LP
-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.
-
-.NH 3
-Widget Instance Initialization: The initialize Procedure
-.XS
-\*(SN Widget Instance Initialization: The initialize Procedure
-.XE
-.IN "Initialization"
-.IN "Chaining"
-.IN "Superclass Chaining"
-.IN "Inheritance"
-.LP
-The initialize procedure pointer in a widget class is of type
-.PN XtInitProc .
-.LP
-.IN "XtInitProc" "" "@DEF@"
-.IN "initialize procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtInitProc)(Widget, Widget, ArgList, Cardinal*);
-.br
- Widget \fIrequest\fP;
-.br
- Widget \fInew\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIrequest\fP 1i
-Specifies a copy of the widget with resource values as requested by the
-argument list, the resource database, and the widget defaults.
-.IP \fInew\fP 1i
-Specifies the widget with the new values, both resource and nonresource,
-that are actually allowed.
-.IP \fIargs\fP 1i
-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
-.PN XtVaTypedArg
-are converted to the widget representation and the list is transformed
-into the
-.PN ArgList
-format.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-An initialization procedure performs the following:
-.IP \(bu 5
-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
-.PN 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.
-.NT
-It is not necessary to allocate space for or to copy callback lists.
-.NE
-.IP \(bu 5
-Computes values for unspecified resource fields.
-For example, if \fIwidth\fP and \fIheight\fP are zero,
-the widget should compute an appropriate width and height
-based on its other resources.
-.NT
-A widget may directly assign only
-its own \fIwidth\fP and \fIheight\fP within the initialize, initialize_hook,
-set_values, and
-set_values_hook procedures; see Chapter 6.
-.NE
-.IP \(bu 5
-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.
-.LP
-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.
-.LP
-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
-\fIargs\fP and \fInum_args\fP
-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.
-.LP
-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 \fIinitialize\fP field in the class record.
-.LP
-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.
-.LP
-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.
-.LP
-The \fIrequest\fP and \fInew\fP 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 \fIrequest\fP widget is a copy of the widget as initialized by the
-arglist and resource database.
-The \fInew\fP 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.
-.LP
-In the above example,
-the subclass with the visual surround can see
-if the \fIwidth\fP and \fIheight\fP in the \fIrequest\fP widget are zero.
-If so,
-it adds its surround size to the \fIwidth\fP and \fIheight\fP
-fields in the \fInew\fP widget.
-If not, it must make do with the size originally specified.
-.LP
-The \fInew\fP widget will become the actual widget instance record.
-Therefore,
-the initialization procedure should do all its work on the \fInew\fP widget;
-the \fIrequest\fP widget should never be modified.
-If the initialize procedure
-needs to call any routines that operate on a widget,
-it should specify \fInew\fP as the widget instance.
-
-.NH 3
-Constraint Instance Initialization: The ConstraintClassPart initialize Procedure
-.XS
-\*(SN Constraint Instance Initialization: The ConstraintClassPart initialize Procedure
-.XE
-.IN "Initialization"
-.IN "XtInitProc"
-.IN "initialize procedure"
-.IN "Chaining"
-.IN "Superclass Chaining"
-.IN "Inheritance"
-.LP
-The constraint initialization procedure pointer, found in the
-.PN ConstraintClassPart
-\fIinitialize\fP field of the widget class record, is of type
-.PN XtInitProc .
-The values passed to the parent constraint initialization procedures
-are the same as those passed to the child's class widget initialization
-procedures.
-.LP
-The \fIconstraints\fP field of the \fIrequest\fP widget points to a copy of the
-constraints record as initialized by the arglist and resource database.
-.LP
-The constraint initialization procedure should compute any constraint fields
-derived from constraint resources.
-It can make further changes to the \fInew\fP widget to make the widget
-and any other constraint fields
-conform to the specified constraints, for example,
-changing the widget's size or position.
-.LP
-If a constraint class does not need a constraint initialization procedure,
-it can specify NULL for the \fIinitialize\fP field of the
-.PN ConstraintClassPart
-in the class record.
-
-.NH 3
-Nonwidget Data Initialization: The initialize_hook Procedure
-.XS
-\*(SN Nonwidget Data Initialization: The initialize_hook Procedure
-.XE
-.IN "Initialization"
-.LP
-.NT
-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.
-.NE
-.LP
-The initialize_hook procedure pointer is of type
-.PN XtArgsProc :
-.LP
-.IN "initialize_hook procedure" "" "@DEF@"
-.IN "XtArgsProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtArgsProc)(Widget, ArgList, Cardinal*);
-.br
- Widget \fIw\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIargs\fP 1i
-Specifies the argument list passed by the client.
-If the client created the widget using a varargs form, any resources
-specified via
-.PN XtVaTypedArg
-are converted to the widget representation and the list is transformed
-into the
-.PN ArgList
-format.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-If this procedure is not NULL,
-it is called immediately after the corresponding initialize
-procedure or in its place if the \fIinitialize\fP field is NULL.
-.LP
-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.
-
-.NH 2
-Realizing Widgets
-.XS
-\fB\*(SN Realizing Widgets\fP
-.XE
-.LP
-To realize a widget instance, use
-.PN XtRealizeWidget .
-.LP
-.IN "XtRealizeWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtRealizeWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.eM
-.LP
-If the widget is already realized,
-.PN 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 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.
-.IP \(bu 5
-Constructs an
-.PN 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.
-.IP \(bu 5
-If the widget is
-not a subclass of
-.PN compositeWidgetClass ,
-.PN 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 \fImapped_when_managed\fP
-.PN True .
-If a widget is managed but \fImapped_when_managed\fP is
-.PN False ,
-the widget is allocated visual space but is not displayed.
-.RE
-.LP
-If the widget is a top-level shell widget (that is, it has no parent), and
-\fImapped_when_managed\fP is
-.PN True ,
-.PN XtRealizeWidget
-maps the widget window.
-.LP
-.PN XtCreateWidget ,
-.PN XtVaCreateWidget ,
-.PN XtRealizeWidget ,
-.PN XtManageChildren ,
-.PN XtUnmanage\%Children ,
-.PN XtUnrealizeWidget ,
-.PN XtSetMappedWhenManaged ,
-and
-.PN XtDestroy\%Widget
-maintain the following invariants:
-.IP \(bu 5
-If a composite widget is realized, then all its managed children are realized.
-.IP \(bu 5
-If a composite widget is realized, then all its managed children that have
-\fImapped_when_managed\fP
-.PN True
-are mapped.
-.LP
-All \*(xI 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,
-.PN XtRealizeWidget
-calls the procedures in reverse order of
-appearance in the
-.PN CompositePart
-\fIchildren\fP 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.
-.sp
-.LP
-To check whether or not a widget has been realized, use
-.PN XtIsRealized .
-.LP
-.IN "XtIsRealized" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtIsRealized(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-The
-.PN XtIsRealized
-function returns
-.PN 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.
-.LP
-Some widget procedures (for example, set_values) might wish to
-operate differently
-after the widget has been realized.
-
-.NH 3
-Widget Instance Window Creation: The realize Procedure
-.XS
-\*(SN Widget Instance Window Creation: The realize Procedure
-.XE
-.LP
-The realize procedure pointer in a widget class is of type
-.PN XtRealizeProc .
-.LP
-.IN "XtRealizeProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtRealizeProc)(Widget, XtValueMask*, XSetWindowAttributes*);
-.br
- Widget \fIw\fP;
-.br
- XtValueMask *\fIvalue_mask\fP;
-.br
- XSetWindowAttributes *\fIattributes\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIvalue_mask\fP 1i
-Specifies which fields in the \fIattributes\fP structure are used.
-.IP \fIattributes\fP 1i
-Specifies the window attributes to use in the
-.PN XCreateWindow
-call.
-.LP
-.eM
-The realize procedure must create the widget's window.
-.LP
-Before calling the class realize procedure, the generic
-.PN XtRealizeWidget
-function fills in a mask and a corresponding
-.PN XSetWindowAttributes
-structure.
-It sets the following fields in \fIattributes\fP and
-corresponding bits in \fIvalue_mask\fP
-based on information in the widget
-core
-structure:
-.IP \(bu 5
-The \fIbackground_pixmap\fP (or \fIbackground_pixel\fP if \fIbackground_pixmap\fP is
-.PN XtUnspecifiedPixmap )
-is filled in from the corresponding field.
-.IP \(bu 5
-The \fIborder_pixmap\fP (or \fIborder_pixel\fP if \fIborder_pixmap\fP is
-.PN XtUnspecifiedPixmap )
-is filled in from the corresponding field.
-.IP \(bu 5
-The \fIcolormap\fP is filled in from the corresponding field.
-.IP \(bu 5
-The \fIevent_mask\fP is filled in based on the event handlers registered,
-the event translations specified, whether the \fIexpose\fP field is non-NULL,
-and whether \fIvisible_interest\fP is
-.PN True .
-.IP \(bu 5
-The \fIbit_gravity\fP is set to
-.PN NorthWestGravity
-if the \fIexpose\fP field is NULL.
-.LP
-These or any other fields in attributes and the corresponding bits in
-\fIvalue_mask\fP can be set by the realize procedure.
-.LP
-Note that because realize is not a chained operation,
-the widget class realize procedure must update the
-.PN XSetWindowAttributes
-structure with all the appropriate fields from
-non-Core
-superclasses.
-.LP
-.IN "Inheritance"
-A widget class can inherit its realize procedure from its superclass
-during class initialization.
-The realize procedure defined for
-.PN coreWidgetClass
-calls
-.PN XtCreateWindow
-with the passed \fIvalue_mask\fP and \fIattributes\fP
-and with \fIwindow_class\fP and \fIvisual\fP set to
-.PN CopyFromParent .
-Both
-.PN compositeWidgetClass
-and
-.PN constraintWidgetClass
-inherit this realize procedure, and most new widget subclasses
-can do the same (see Section 1.6.10).
-.LP
-The most common noninherited realize procedures set \fIbit_gravity\fP in the mask
-and attributes to the appropriate value and then create the window.
-For example, depending on its justification, Label might set \fIbit_gravity\fP to
-.PN WestGravity ,
-.PN CenterGravity ,
-or
-.PN EastGravity .
-Consequently, shrinking it would just move the bits appropriately,
-and no
-exposure
-event is needed for repainting.
-.LP
-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
-.PN XtRealizeWidget
-on its children itself in the appropriate order from within its own
-realize procedure.
-.LP
-Widgets that have children and whose class is not a subclass of
-.PN compositeWidgetClass
-are responsible for calling
-.PN XtRealizeWidget
-on their children, usually from within the realize procedure.
-.LP
-Realize procedures cannot manage or unmanage their descendants.
-
-.NH 3
-Window Creation Convenience Routine
-.XS
-\*(SN Window Creation Convenience Routine
-.XE
-.LP
-Rather than call the Xlib
-.PN XCreateWindow
-.IN "realize procedure"
-function explicitly, a realize procedure should normally call the \*(xI analog
-.PN XtCreateWindow ,
-which simplifies the creation of windows for widgets.
-.LP
-.IN "XtCreateWindow" "" "@DEF@"
-.sM
-.FD 0
-void XtCreateWindow(\fIw\fP, \fIwindow_class\fP, \fIvisual\fP, \
-\fIvalue_mask\fP, \fIattributes\fP)
-.br
- Widget \fIw\fP;
-.br
- unsigned int \fIwindow_class\fP;
-.br
- Visual *\fIvisual\fP;
-.br
- XtValueMask \fIvalue_mask\fP;
-.br
- XSetWindowAttributes *\fIattributes\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that defines the additional window attributed. \*(cI
-.IP \fIwindow_class\fP 1i
-Specifies the Xlib window class (for example,
-.PN InputOutput ,
-.PN InputOnly ,
-or
-.PN CopyFromParent ).
-.IP \fIvisual\fP 1i
-Specifies the visual type (usually
-.PN CopyFromParent ).
-.ds Vm attribute fields to use
-.IP \fIvalue_mask\fP 1i
-Specifies which fields in the \fIattributes\fP structure are used.
-.IP \fIattributes\fP 1i
-Specifies the window attributes to use in the
-.PN XCreateWindow
-call.
-.LP
-.eM
-The
-.PN XtCreateWindow
-function calls the Xlib
-.PN XCreateWindow
-function with values from the widget structure and the passed parameters.
-Then, it assigns the created window to the widget's \fIwindow\fP field.
-.LP
-.PN XtCreateWindow
-evaluates the following fields of the widget core
-structure: \fIdepth\fP, \fIscreen\fP, \fIparent->core.window\fP, \fIx\fP,
-\fIy\fP, \fIwidth\fP, \fIheight\fP, and
-\fIborder_width\fP.
-
-.NH 2
-Obtaining Window Information from a Widget
-.XS
-\fB\*(SN Obtaining Window Information from a Widget\fP
-.XE
-.LP
-The
-Core
-widget class definition contains the screen and window ids.
-The \fIwindow\fP field may be NULL for a while
-(see Sections 2.5 and 2.6).
-.LP
-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.
-.LP
-.IN "XtDisplay" "" "@DEF@"
-.sM
-.FD 0
-Display *XtDisplay(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-.PN XtDisplay
-returns the display pointer for the specified widget.
-.sp
-.LP
-.IN "XtParent" "" "@DEF@"
-.sM
-.FD 0
-Widget XtParent(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-.PN XtParent
-returns the parent object for the specified widget. The returned object
-will be of class Object or a subclass.
-.sp
-.LP
-.IN "XtScreen" "" "@DEF@"
-.sM
-.FD 0
-Screen *XtScreen(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-.PN XtScreen
-returns the screen pointer for the specified widget.
-.sp
-.LP
-.IN "XtWindow" "" "@DEF@"
-.sM
-.FD 0
-Window XtWindow(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-.PN XtWindow
-returns the window of the specified widget.
-.sp
-.LP
-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
-.PN XtDisplayOfObject ,
-.PN XtScreenOfObject ,
-and
-.PN XtWindowOfObject .
-.IN "XtDisplayOfObject" "" "@DEF@"
-.sp
-.LP
-.sM
-.FD 0
-Display *XtDisplayOfObject(\fIobject\fP)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object. \*(oI
-.LP
-.eM
-.PN XtDisplayOfObject
-is identical in function to
-.PN XtDisplay
-if the object is a widget; otherwise
-.PN XtDisplayOfObject
-returns the display
-pointer for the nearest ancestor of \fIobject\fP that is of class
-Widget or a subclass thereof.
-.LP
-.IN "XtScreenOfObject" "" "@DEF@"
-.sM
-.FD 0
-Screen *XtScreenOfObject(\fIobject\fP)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object. \*(oI
-.LP
-.eM
-.PN XtScreenOfObject
-is identical in function to
-.PN XtScreen
-if the object is a widget; otherwise
-.PN XtScreenOfObject
-returns the screen pointer
-for the nearest ancestor of \fIobject\fP that is of class
-Widget or a subclass thereof.
-.LP
-.IN "XtWindowOfObject" "" "@DEF@"
-.sM
-.FD 0
-Window XtWindowOfObject(\fIobject\fP)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object. \*(oI
-.LP
-.eM
-.PN XtWindowOfObject
-is identical in function to
-.PN XtWindow
-if the object is a widget; otherwise
-.PN XtWindowOfObject
-returns the window for the nearest ancestor of \fIobject\fP that is of class
-Widget or a subclass thereof.
-.sp
-.LP
-To retrieve the instance name of an object, use
-.PN XtName .
-.LP
-.IN "XtName" "" "@DEF@"
-.sM
-.FD 0
-String XtName(\fIobject\fP)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object whose name is desired. \*(oI
-.LP
-.eM
-.PN XtName
-returns a pointer to the instance name of the specified object.
-The storage is owned by the \*(xI and must not be modified. The
-name is not qualified by the names of any of the object's ancestors.
-.LP
-Several window attributes are locally cached in the widget instance.
-Thus, they can be set by the resource manager and
-.PN XtSetValues
-as well as used by routines that derive structures from these values
-(for example, \fIdepth\fP for deriving pixmaps,
-\fIbackground_pixel\fP for deriving GCs, and so on) or in the
-.PN XtCreateWindow
-call.
-.LP
-The \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, and \fIborder_width\fP
-window attributes are available to
-geometry managers.
-These fields are maintained synchronously inside the \*(xI.
-When an
-.PN XConfigureWindow
-is issued by the \*(xI 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
-.PN ConfigureNotify
-event.
-(In fact, most widgets do not select
-.PN 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
-.PN 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 Chapter 6).
-
-.NH 3
-Unrealizing Widgets
-.XS
-\fB\*(SN Unrealizing Widgets\fP
-.XE
-.LP
-To destroy the windows associated with a widget and its
-non-pop-up descendants, use
-.PN XtUnrealizeWidget .
-.LP
-.IN "XtUnrealizeWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtUnrealizeWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-If the widget is currently unrealized,
-.PN XtUnrealizeWidget
-simply returns. Otherwise it performs the following:
-.IP \(bu 5
-Unmanages the widget if the widget is managed.
-.IP \(bu 5
-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
-.IN XtNunrealizeCallback
-XtNunrealizeCallback
-list.
-.IN "unrealizeCallback" "" "@DEF@"
-.IP \(bu 5
-Destroys the widget's window and any subwindows by calling
-.PN XDestroyWindow
-with the specified widget's \fIwindow\fP field.
-.LP
-Any events in the queue or which arrive following a call to
-.PN XtUnrealizeWidget
-will be dispatched as if the window(s) of the
-unrealized widget(s) had never existed.
-
-.NH 2
-Destroying Widgets
-.XS
-\fB\*(SN Destroying Widgets\fP
-.XE
-.LP
-The \*(xI provide support
-.IP \(bu 5
-To destroy all the pop-up children of the widget being destroyed
-and destroy all children of composite widgets.
-.IP \(bu 5
-To remove (and unmap) the widget from its parent.
-.IP \(bu 5
-To call the callback procedures that have been registered to trigger
-when the widget is destroyed.
-.IP \(bu 5
-To minimize the number of things a widget has to deallocate when destroyed.
-.IP \(bu 5
-To minimize the number of
-.PN XDestroyWindow
-calls when destroying a widget tree.
-.sp
-.LP
-To destroy a widget instance, use
-.PN XtDestroyWidget .
-.LP
-.IN "XtDestroyWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtDestroyWidget(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-The
-.PN 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 1,
-.PN XtDestroyWidget
-performs the following:
-.IP \(bu 5
-If the \fIbeing_destroyed\fP field of the widget is
-.PN True ,
-it returns immediately.
-.IP \(bu 5
-Recursively descends the widget tree and
-sets the \fIbeing_destroyed\fP field to
-.PN True
-for the widget and all normal and pop-up 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,
-either normal or pop-up, of w1.
-.LP
-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
-.PN XtDispatchEvent
-is about to return, or immediately if not in
-.PN XtDispatchEvent .
-.LP
-In phase 2,
-.PN XtDestroyWidget
-performs the following on each entry in the destroy list in the order
-specified:
-.IP \(bu 5
-If the widget is not a pop-up child and the widget's parent is a subclass of
-.PN composite\%WidgetClass ,
-and if the parent is not being destroyed,
-it calls
-.PN XtUnmanageChild
-on the widget and then calls the widget's parent's delete_child procedure
-(see Section 3.3).
-.IP \(bu 5
-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).
-.LP
-The
-.PN XtDestroyWidget
-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:
-.IP \(bu 5
-If the widget is not a pop-up child and the widget's parent is a subclass of
-.PN constraint\%WidgetClass ,
-it calls the
-.PN ConstraintClassPart
-destroy procedure for the parent,
-then for the parent's superclass,
-until finally it calls the
-.PN ConstraintClassPart
-destroy procedure for
-.PN constraintWidgetClass .
-.IP \(bu 5
-Calls the
-.PN 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.
-.IP \(bu 5
-If the widget class object class part contains an
-.PN ObjectClassExtension
-record with the record_type
-.PN \s-1NULLQUARK\s+1
-and the \fIdeallocate\fP field is not NULL,
-calls the deallocate procedure to deallocate the instance and if one
-exists, the constraint record. Otherwise, the \*(xI will deallocate
-the widget instance record and if one exists, the constraint record.
-.IP \(bu 5
-Calls
-.PN 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.)
-
-.NH 3
-Adding and Removing Destroy Callbacks
-.XS
-\fB\*(SN Adding and Removing Destroy Callbacks\fP
-.XE
-.LP
-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 Chapter 8.
-.IN "Destroy Callbacks"
-The destroy callback list is identified by the resource name
-XtNdestroyCallback.
-.LP
-For example, the following adds an application-supplied destroy callback
-procedure \fIClientDestroy\fP with client data to a widget by calling
-.PN XtAddCallback .
-.IN "XtAddCallback"
-.Ds
-XtAddCallback(\fIw\fP, XtNdestroyCallback, \fIClientDestroy\fP, \fIclient_data\fP)
-.De
-.LP
-Similarly, the following removes the application-supplied destroy callback
-procedure \fIClientDestroy\fP by calling
-.PN XtRemoveCallback .
-.IN "XtRemoveCallback"
-.Ds
-XtRemoveCallback(\fIw\fP, XtNdestroyCallback, \fIClientDestroy\fP, \fIclient_data\fP)
-.De
-.LP
-The \fIClientDestroy\fP argument is of type
-.PN XtCallbackProc ;
-see Section 8.1.
-
-.NH 3
-Dynamic Data Deallocation: The destroy Procedure
-.XS
-\*(SN Dynamic Data Deallocation: The destroy Procedure
-.XE
-.LP
-.IN "destroy procedure" "" "@DEF@"
-The destroy procedure pointers in the
-.PN ObjectClassPart ,
-.PN RectObjClassPart ,
-and
-.PN CoreClassPart
-structures are of type
-.PN XtWidgetProc .
-.LP
-.IN "XtWidgetProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtWidgetProc)(Widget);
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget being destroyed.
-.LP
-.eM
-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.
-.LP
-Deallocating storage includes, but is not limited to,
-the following steps:
-.IP \(bu 5
-Calling
-.PN XtFree
-on dynamic storage allocated with
-.PN XtMalloc ,
-.PN XtCalloc ,
-and so on.
-.IP \(bu 5
-Calling
-.PN XFreePixmap
-on pixmaps created with direct X calls.
-.IP \(bu 5
-Calling
-.PN XtReleaseGC
-on GCs allocated with
-.PN XtGetGC .
-.IP \(bu 5
-Calling
-.PN XFreeGC
-on GCs allocated with direct X calls.
-.IP \(bu 5
-Calling
-.PN XtRemoveEventHandler
-on event handlers added to other widgets.
-.IP \(bu 5
-Calling
-.PN XtRemoveTimeOut
-on timers created with
-.PN XtAppAddTimeOut .
-.IP \(bu 5
-Calling
-.PN XtDestroyWidget
-for each child if the widget has children
-and is not a subclass of
-.PN compositeWidgetClass .
-.LP
-During destroy phase 2 for each widget, the \*(xI 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.
-
-.NH 3
-Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure
-.XS
-\*(SN Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure
-.XE
-.LP
-The constraint destroy procedure identified in the
-.PN ConstraintClassPart
-structure is called for a widget whose parent is a subclass of
-.PN constraintWidgetClass .
-This constraint destroy procedure pointer is of type
-.PN XtWidgetProc .
-The constraint destroy procedures are called in subclass-to-superclass order,
-starting at the class of the widget's parent and ending at
-.PN 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.
-.LP
-If a parent does not need to deallocate any constraint storage,
-the constraint destroy procedure entry
-in its class record can be NULL.
-
-.NH 3
-Widget Instance Deallocation: The deallocate Procedure
-.XS
-\*(SN Widget Instance Deallocation: The deallocate Procedure
-.XE
-.LP
-.IN "deallocate procedure" "" "@DEF@"
-The deallocate procedure pointer in the
-.PN ObjectClassExtension
-record is of type
-.PN XtDeallocateProc .
-.LP
-.IN "XtDeallocateProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtDeallocateProc)(Widget, XtPointer);
-.br
- Widget \fIwidget\fP;
-.br
- XtPointer \fImore_bytes\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget being destroyed.
-.IP \fImore_bytes\fP 1i
-Specifies the auxiliary memory received from the corresponding allocator
-along with the widget, or NULL.
-.LP
-.eM
-When a widget is destroyed, if an
-.PN ObjectClassExtension
-record exists in the object class part \fIextension\fP field
-with \fIrecord_type\fP
-.PN \s-1NULLQUARK\s+1
-and the \fIdeallocate\fP field is not NULL, the
-.PN XtDeallocateProc
-will be called.
-If no ObjectClassPart extension record is declared with \fIrecord_type\fP
-equal to
-.PN \s-1NULLQUARK\s+1 ,
-then
-.PN XtInheritAllocate
-and
-.PN XtInheritDeallocate
-are assumed.
-The responsibilities of the deallocate procedure are to deallocate the
-memory specified by \fImore_bytes\fP if it is not NULL,
-to deallocate the constraints record as specified by the
-widget's \fIcore.constraints\fP field if it is
-not NULL, and to deallocate the widget instance itself.
-.LP
-If no
-.PN XtDeallocateProc
-is found, it is assumed that the \*(xI
-originally allocated the memory and is responsible for freeing it.
-
-.NH 2
-Exiting from an Application
-.XS
-\fB\*(SN Exiting from an Application\fP
-.XE
-.LP
-All \*(tk applications should terminate
-by calling
-.PN XtDestroyApplicationContext
-and then exiting
-using the
-standard method for their operating system (typically, by calling
-.PN exit
-for POSIX-based systems).
-The quickest way to make the windows disappear while exiting is to call
-.PN XtUnmapWidget
-on each top-level shell widget.
-The \*(xI 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.
-.LP
-Depending upon the widget set in use, it may be necessary to explicitly
-destroy individual widgets or widget trees with
-.PN XtDestroyWidget
-before calling
-.PN XtDestroyApplicationContext
-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 Section 4.2), then the client may wish to resign from the session
-before exiting. See Section 4.2.4 for details.
-.bp
diff --git a/libXt/specs/CH02.xml b/libXt/specs/CH02.xml
new file mode 100644
index 000000000..9cfd4479f
--- /dev/null
+++ b/libXt/specs/CH02.xml
@@ -0,0 +1,4538 @@
+<chapter id='Widget_Instantiation'>
+<title>Widget Instantiation</title>
+<para>
+A hierarchy of widget instances constitutes a widget tree.
+The shell widget returned by
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+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 <xref linkend='Pop_Up_Widgets' />),
+this widget tree instance defines the associated X Window tree.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+Composite widgets, that is, members of the class
+<function>compositeWidgetClass</function>,
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+A widget tree is manipulated by several Intrinsics functions.
+For example,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+traverses the tree downward and recursively realizes all
+pop-up widgets and children of composite widgets.
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+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.
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+traverses the tree up one level and calls the geometry manager
+that is responsible for a widget child's geometry.
+</para>
+
+<para>
+To facilitate upward traversal of the widget tree,
+each widget has a pointer to its parent widget.
+The
+Shell
+widget that
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+returns has a <emphasis remap='I'>parent</emphasis> pointer of NULL.
+</para>
+
+<para>
+To facilitate downward traversal of the widget tree,
+the <emphasis remap='I'>children</emphasis> 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.
+</para>
+
+<sect1 id="Initializing_the_tk">
+<title>Initializing the X Toolkit</title>
+<para>
+Before an application can call any Intrinsics function
+other than
+<function>XtSetLanguageProc</function>
+and
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>,
+it must initialize the Intrinsics by using
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>,
+which initializes the Intrinsics internals
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>,
+which initializes the per-application state
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+or
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>,
+which initializes the per-display state
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
+which creates the root of a widget tree
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+Or an application can call the convenience procedure
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>,
+which combines the functions of the preceding procedures.
+An application wishing to use the ANSI C locale mechanism should call
+<function>XtSetLanguageProc</function>
+prior to calling
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>,
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>,
+or
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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
+<function>Display</function>
+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
+<function>XtAppContext</function>
+is opaque to clients.
+</para>
+
+<para>
+To initialize the Intrinsics internals, use
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtToolkitInitialize'>
+<funcprototype>
+ <funcdef>void <function>XtToolkitInitialize</function></funcdef>
+ <paramdef> <parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+If
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>
+was previously called, it returns immediately.
+When
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>
+is called before
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>,
+the latter is protected against
+simultaneous activation by multiple threads.
+</para>
+
+<para>
+To create an application context, use
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreateApplicationContext'>
+<funcprototype>
+ <funcdef>XtAppContext <function>XtCreateApplicationContext</function></funcdef>
+ <paramdef> <parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<para>
+The
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>
+function returns an application context,
+which is an opaque type.
+Every application must have at least one application context.
+</para>
+
+<para>
+To destroy an application context and close any
+remaining display connections in it, use
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDestroyApplicationContext'>
+<funcprototype>
+ <funcdef>void <function>XtDestroyApplicationContext</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>
+function destroys the specified application context.
+If called from within an event dispatch (for example, in a callback procedure),
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>
+does not destroy the application context until the dispatch is complete.
+</para>
+
+<para>
+To get the application context in which a given widget was created, use
+<xref linkend='XtWidgetToApplicationContext' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWidgetToApplicationContext'>
+<funcprototype>
+ <funcdef>XtAppContext <function>XtWidgetToApplicationContext</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which you want the application context. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtWidgetToApplicationContext' xrefstyle='select: title'/>
+function returns the application context for the specified widget.
+</para>
+
+<para>
+To initialize a display and add it to an application context, use
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDisplayInitialize'>
+<funcprototype>
+ <funcdef>void <function>XtDisplayInitialize</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>Display * <parameter>display</parameter></paramdef>
+ <paramdef>String <parameter>application_name</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescRec * <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int * <parameter>argc</parameter></paramdef>
+ <paramdef>String * <parameter>argv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a previously opened display connection. Note that a single
+display connection can be in at most one application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the application instance.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of this application,
+which is usually the generic name for all instances of this application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to parse the command line for any application-specific resources.
+The <emphasis remap='I'>options</emphasis> argument is passed as a parameter to
+<function>XrmParseCommand</function>.
+For further information,
+see <olink targetdoc='libX11' targetptr='Parsing_Command_Line_Options'>Parsing Command Line Options</olink> in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink> and <xref linkend='Parsing_the_Command_Line' /> of this specification.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the options list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+function retrieves the language string to be
+used for the specified display (see <xref linkend='Finding_File_Names' />),
+calls the language procedure (if set) with that language string,
+builds the resource database for the default screen, calls the Xlib
+<function>XrmParseCommand</function>
+function to parse the command line,
+and performs other per-display initialization.
+After
+<function>XrmParseCommand</function>
+has been called,
+<emphasis remap='I'>argc</emphasis> and <emphasis remap='I'>argv</emphasis> contain only those parameters that
+were not in the standard option table or in the table specified by the
+<emphasis remap='I'>options</emphasis> argument.
+If the modified <emphasis remap='I'>argc</emphasis> is not zero,
+most applications simply print out the modified <emphasis remap='I'>argv</emphasis> along with a message
+listing the allowable options.
+On POSIX-based systems,
+the application name is usually the final component of <emphasis remap='I'>argv</emphasis>[0].
+If the synchronous resource is
+<function>True</function>,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+calls the Xlib
+<function>XSynchronize</function>
+function to put Xlib into synchronous mode for this display connection
+and any others currently open in the application context.
+See <xref linkend='Loading_the_Resource_Database' />
+and <xref linkend='Parsing_the_Command_Line' />
+for details on the <emphasis remap='I'>application_name</emphasis>,
+<emphasis remap='I'>application_class</emphasis>, <emphasis remap='I'>options</emphasis>, and <emphasis remap='I'>num_options</emphasis> arguments.
+</para>
+
+<para>
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+calls
+<function>XrmSetDatabase</function>
+to associate the resource database of the default screen with the
+display before returning.
+</para>
+
+<para>
+To open a display, initialize it, and then
+add it to an application context, use
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOpenDisplay'>
+<funcprototype>
+ <funcdef>Display <function>*XtOpenDisplay</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>display_string</parameter></paramdef>
+ <paramdef>String <parameter>application_name</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescRec * <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int * <parameter>argc</parameter></paramdef>
+ <paramdef>String * <parameter>argv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display_string</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display string, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the application instance, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of this application,
+which is usually the generic name for all instances of this application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to parse the command line for any application-specific resources.
+The options argument is passed as a parameter to
+<function>XrmParseCommand</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the options list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+function calls
+<function>XOpenDisplay</function>
+with the specified <emphasis remap='I'>display_string</emphasis>.
+If <emphasis remap='I'>display_string</emphasis> is NULL,
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+uses the current value of the \-display option specified in <emphasis remap='I'>argv</emphasis>.
+If no display is specified in <emphasis remap='I'>argv</emphasis>,
+the user's default display is retrieved from the environment.
+On POSIX-based systems,
+this is the value of the
+<emphasis role='strong'>DISPLAY</emphasis>
+environment variable.
+</para>
+
+<para>
+If this succeeds,
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+then calls
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+and passes it the opened display and
+the value of the \-name option specified in <emphasis remap='I'>argv</emphasis> as the application name.
+If no \-name option is specified
+and <emphasis remap='I'>application_name</emphasis> is
+non-NULL, <emphasis remap='I'>application_name</emphasis> is passed to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+If <emphasis remap='I'>application_name</emphasis> is NULL and if the environment variable
+<emphasis role='strong'>RESOURCE_NAME</emphasis>
+is set, the value of
+<emphasis role='strong'>RESOURCE_NAME</emphasis>
+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 <emphasis remap='I'>argv</emphasis>[0] less any directory and file type components, that is, the
+final component of <emphasis remap='I'>argv</emphasis>[0], if specified. If <emphasis remap='I'>argv</emphasis>[0] does not exist or
+is the empty string, the application name is ``main''.
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+returns the newly opened display or NULL if it failed.
+</para>
+
+<para>
+See <xref linkend='Using_the_Intrinsics_in_a_Multi_Threaded_Environment' />
+for information regarding the use of
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+
+<para>
+To close a display and remove it from an application context, use
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCloseDisplay'>
+<funcprototype>
+ <funcdef>void <function>XtCloseDisplay</function></funcdef>
+ <paramdef>Display * <parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+function calls
+<function>XCloseDisplay</function>
+with the specified <emphasis remap='I'>display</emphasis> as soon as it is safe to do so.
+If called from within an event dispatch (for example, a callback procedure),
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+does not close the display until the dispatch is complete.
+Note that applications need only call
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+if they are to continue executing after closing the display;
+otherwise, they should call
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>.
+</para>
+
+<para>
+See <xref linkend='Using_the_Intrinsics_in_a_Multi_Threaded_Environment' />
+for information regarding the use of
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+</sect1>
+
+<sect1 id="Establishing_the_Locale">
+<title>Establishing the Locale</title>
+<para>
+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.
+</para>
+
+<para>
+The callout procedure provided by the application is of type
+<function>XtLanguageProc</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>typedef String <function>(*XtLanguageProc)</function></funcdef>
+ <paramdef>Display <parameter>display</parameter></paramdef>
+ <paramdef>String <parameter>language</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>language</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the initial language value obtained from the command line
+or server per-display resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the additional client data specified in the call to
+<function>XtSetLanguageProc</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<para>
+The language procedure allows an application to set the locale to
+the value of the language resource determined by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+The function returns a new language string that
+will be subsequently used by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+to establish the path for loading resource files. The returned
+string will be copied by the Intrinsics into new memory.
+</para>
+
+<para>
+Initially, no language procedure is set by the Intrinsics.
+To set the language procedure for use by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>,
+use
+<function>XtSetLanguageProc</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>XtLanguageProc <function>XtSetLanguageProc</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtLanguageProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context in which the language procedure is
+to be used, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the language procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional client data to be passed to the language
+procedure when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<function>XtSetLanguageProc</function>
+sets the language procedure that will be called from
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+for all subsequent Displays initialized in the specified application
+context. If <emphasis remap='I'>app_context</emphasis> 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 <emphasis remap='I'>proc</emphasis> is NULL, a default language procedure is
+registered.
+<function>XtSetLanguageProc</function>
+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
+<function>XtSetLanguageProc</function>,
+it will cause the default language procedure to be registered.
+</para>
+
+<para>
+The default language procedure does the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Sets the locale according to the environment. On ANSI C-based
+systems this is done by calling
+<function>setlocale</function>(
+<function>LC_ALL</function>,
+<emphasis remap='I'>language</emphasis> ).
+If an error is encountered, a warning message is issued with
+<xref linkend='XtWarning' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<function>XSupportsLocale</function>
+to verify that the current locale is supported.
+If the locale is not supported, a warning message is issued with
+<xref linkend='XtWarning' xrefstyle='select: title'/>
+and the locale is set to ``C''.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<function>XSetLocaleModifiers</function>
+specifying the empty string.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Returns the value of the current locale. On ANSI C-based systems this
+is the return value from a final call to
+<function>setlocale</function>(
+<function>LC_ALL</function>,
+NULL ).
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+A client wishing to use this mechanism to establish locale can do so
+by calling
+<function>XtSetLanguageProc</function>
+prior to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>,
+as in the following example.
+</para>
+<literallayout>
+ Widget top;
+ XtSetLanguageProc(NULL, NULL, NULL);
+ top = XtOpenApplication(...);
+ ...
+</literallayout>
+</sect1>
+
+<sect1 id="Loading_the_Resource_Database">
+<title>Loading the Resource Database</title>
+<para>
+The
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Application command line (<emphasis remap='I'>argc</emphasis>, <emphasis remap='I'>argv</emphasis>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Per-host user environment resource file on the local host.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Per-screen resource specifications from the server.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Per-display resource specifications from the server or from
+the user preference file on the local host.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Application-specific user resource file on the local host.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Application-specific class resource file on the local host.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+When the resource database for a particular screen on the display
+is needed (either internally, or when
+<xref linkend='XtScreenDatabase' xrefstyle='select: title'/>
+is called),
+it is created in the following manner using the sources listed
+above in the same order:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A temporary database, the ``server resource database'', is
+created from the string returned by
+<function>XResourceManagerString</function>
+or, if
+<function>XResourceManagerString</function>
+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/<function>.Xdefaults</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If a language procedure has been set,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+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,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+queries the server resource database (which is assumed to be entirely
+in XPCS) for the resource
+<emphasis remap='I'>name</emphasis><function>.xnlLanguage</function>, class <emphasis remap='I'>Class</emphasis><function>.XnlLanguage</function>
+where <emphasis remap='I'>name</emphasis>
+and <emphasis remap='I'>Class</emphasis> are the <emphasis remap='I'>application_name</emphasis> and
+<emphasis remap='I'>application_class</emphasis> specified to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The screen resource database is initialized by parsing the command
+line in the manner specified by Section 2.4.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If a language procedure has not been set,
+the initial database is then queried for the resource
+<emphasis remap='I'>name</emphasis><function>.xnlLanguage</function>, class <emphasis remap='I'>Class</emphasis><function>.XnlLanguage</function>
+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
+<emphasis role='strong'>LANG</emphasis>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<emphasis role='strong'>XENVIRONMENT</emphasis>
+environment variable.
+If this environment variable does not exist, the user's home directory
+is searched for a file named
+<function>.Xdefaults-</function><emphasis>host</emphasis>,
+where <emphasis remap='I'>host</emphasis> is the host name of the machine on which the
+application is running.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The per-screen resource specifications are then merged into the screen
+resource database, if they exist. These specifications are the string
+returned by
+<function>XScreenResourceString</function>
+for the respective screen and are owned entirely by the user.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<function>XrmSetDatabase</function>
+with the current screen resource database, after preserving the
+original display-associated database, then calling
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+with the parameters
+(<emphasis remap='I'>display</emphasis>, NULL, NULL, NULL, <emphasis remap='I'>path</emphasis>, NULL, 0, NULL),
+where <emphasis remap='I'>path</emphasis> is defined in an operating-system-specific way.
+On POSIX-based systems, <emphasis remap='I'>path</emphasis> is defined to be the value
+of the environment variable
+<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis>
+if this is defined. If
+<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis>
+is not defined, an implementation-dependent default value is used.
+This default value is constrained in the following manner:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the environment variable
+<emphasis role='strong'>XAPPLRESDIR</emphasis>
+is not defined, the default
+<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis>
+must contain at least six entries. These entries must contain
+$HOME as the directory prefix, plus the following substitutions:
+ </para>
+<literallayout>
+ 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
+</literallayout>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para> If
+<emphasis role='strong'>XAPPLRESDIR</emphasis>
+is defined, the default
+<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis>
+must contain at least seven entries. These entries must contain the
+following directory prefixes and substitutions:
+ </para>
+<literallayout>
+ 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
+</literallayout>
+ <para>
+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.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+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
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+with the parameters
+(<emphasis remap='I'>display</emphasis>, ``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
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>.
+Note that the customization substitution string is retrieved
+dynamically by
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+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
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>,
+the original display-associated database is restored.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+To obtain the resource database for a particular screen, use
+<xref linkend='XtScreenDatabase' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtScreenDatabase'>
+<funcprototype>
+ <funcdef>XrmDatabase <function>XtScreenDatabase</function></funcdef>
+ <paramdef>Screen * <parameter>screen</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>screen</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the screen whose resource database is to be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtScreenDatabase' xrefstyle='select: title'/>
+function returns the fully merged resource database as specified above,
+associated with the specified screen. If the specified <emphasis remap='I'>screen</emphasis>
+does not belong to a
+<function>Display</function>
+initialized by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>,
+the results are undefined.
+</para>
+
+<para>
+To obtain the default resource database associated with a particular display, use
+<xref linkend='XtDatabase' xrefstyle='select: title'/>.
+</para>
+
+
+<funcsynopsis id='XtDatabase'>
+<funcprototype>
+ <funcdef>XrmDatabase <function>XtDatabase</function></funcdef>
+ <paramdef>Display * <parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDatabase' xrefstyle='select: title'/>
+function is equivalent to
+<function>XrmGetDatabase</function>.
+It returns the database associated with the specified display, or
+NULL if a database has not been set.
+</para>
+
+<para>
+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
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetFallbackResources'>
+<funcprototype>
+ <funcdef>void <function>XtAppSetFallbackResources</function></funcdef>
+ <paramdef>XtAppContext * <parameter>app_context</parameter></paramdef>
+ <paramdef>String * <parameter>specification_list</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context in which
+the fallback specifications will be used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>specification_list</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a NULL-terminated list of
+resource specifications to preload
+the database, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Each entry in <emphasis remap='I'>specification_list</emphasis> points to a string in the format of
+<function>XrmPutLineResource</function>.
+Following a call to
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>,
+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 <emphasis remap='I'>specification_list</emphasis> is not NULL, the
+resource specifications in <emphasis remap='I'>specification_list</emphasis> will be merged
+into the screen resource database in place of the application-specific
+class resource file.
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>
+is not
+required to copy <emphasis remap='I'>specification_list</emphasis>; 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
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>
+is called again. The value NULL for
+<emphasis remap='I'>specification_list</emphasis> 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.
+</para>
+</sect1>
+
+<sect1 id="Parsing_the_Command_Line">
+<title>Parsing the Command Line</title>
+<para>
+The
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+function first parses the command line for the following options:
+<variablelist>
+ <varlistentry>
+ <term>-display</term>
+ <listitem>
+ <para>
+Specifies the display name for
+<function>XOpenDisplay</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>-name</term>
+ <listitem>
+ <para>
+Sets the resource name prefix,
+which overrides the application name passed to
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>-xnllanguage</term>
+ <listitem>
+ <para>
+Specifies the initial language string for establishing locale
+and for finding application class resource files.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+
+<para>
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+has a table of standard command line options that are passed to
+<function>XrmParseCommand</function>
+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 <emphasis remap='I'>Xlib — C Language X Interface</emphasis>.
+</para>
+<literallayout>
+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;
+</literallayout>
+<para>The standard table contains the following entries:</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='4' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <colspec colwidth='1.0*' colname='c4'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Option String</entry>
+ <entry>Resource Name</entry>
+ <entry>Argument Kind</entry>
+ <entry>Resource Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>−background</entry>
+ <entry>*background</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−bd</entry>
+ <entry>*borderColor</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−bg</entry>
+ <entry>*background</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−borderwidth</entry>
+ <entry>.borderWidth</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−bordercolor</entry>
+ <entry>*borderColor</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−bw</entry>
+ <entry>.borderWidth</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−display</entry>
+ <entry>.display</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−fg</entry>
+ <entry>*foreground</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−fn</entry>
+ <entry>*font</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−font</entry>
+ <entry>*font</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−foreground</entry>
+ <entry>*foreground</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−geometry</entry>
+ <entry>.geometry</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−iconic</entry>
+ <entry>.iconic</entry>
+ <entry>NoArg</entry>
+ <entry>"true"</entry>
+ </row>
+ <row>
+ <entry>−name</entry>
+ <entry>.name</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−reverse</entry>
+ <entry>.reverseVideo</entry>
+ <entry>NoArg</entry>
+ <entry>"on"</entry>
+ </row>
+ <row>
+ <entry>−rv</entry>
+ <entry>.reverseVideo</entry>
+ <entry>NoArg</entry>
+ <entry>"on"</entry>
+ </row>
+ <row>
+ <entry>+rv</entry>
+ <entry>.reverseVideo</entry>
+ <entry>NoArg</entry>
+ <entry>"off"</entry>
+ </row>
+ <row>
+ <entry>−selectionTimeout</entry>
+ <entry>.selectionTimeout</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−synchronous</entry>
+ <entry>.synchronous</entry>
+ <entry>NoArg</entry>
+ <entry>"on"</entry>
+ </row>
+ <row>
+ <entry>+synchronous</entry>
+ <entry>.synchronous</entry>
+ <entry>NoArg</entry>
+ <entry>"off"</entry>
+ </row>
+ <row>
+ <entry>−title</entry>
+ <entry>.title</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−xnllanguage</entry>
+ <entry>.xnlLanguage</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−xrm</entry>
+ <entry>next argument</entry>
+ <entry>ResArg</entry>
+ <entry>next argument</entry>
+ </row>
+ <row>
+ <entry>−xtsessionID</entry>
+ <entry>.sessionID</entry>
+ <entry>SepArg</entry>
+ <entry>next argument</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+Note that any unique abbreviation for an option name in the standard table
+or in the application table is accepted.
+</para>
+
+<para>
+If reverseVideo is
+<function>True</function>,
+the values of
+<function>XtDefaultForeground</function>
+and
+<function>XtDefaultBackground</function>
+are exchanged for all screens on the Display.
+</para>
+
+<para>
+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,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+makes a call to
+<function>XSynchronize</function>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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
+<function>xmh</function>,
+you can start it up as
+</para>
+<literallayout>
+xmh -xrm 'xmh*Command.background: red'
+</literallayout>
+<para>
+When it parses the command line,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+merges the application option table with the standard option table
+before calling the Xlib
+<function>XrmParseCommand</function>
+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.
+</para>
+</sect1>
+
+<sect1 id="Creating_Widgets">
+<title>Creating Widgets</title>
+<para>
+The creation of widget instances is a three-phase process:
+</para>
+
+<orderedlist>
+ <listitem>
+ <para>
+The widgets are allocated and initialized with resources
+and are optionally added to the managed subset of their parent.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+All composite widgets are notified of their managed children
+in a bottom-up traversal of the widget tree.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The widgets create X windows, which then are mapped.
+ </para>
+ </listitem>
+</orderedlist>
+<para>
+To start the first phase,
+the application calls
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+for all its widgets and adds some (usually, most or all) of its widgets
+to their respective parents' managed set by calling
+<xref linkend='XtManageChild' xrefstyle='select: title'/>.
+To avoid an O(n<superscript>2</superscript>) 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.
+</para>
+
+<para>
+After all widgets have been created,
+the application calls
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+with the top-level widget to execute the second and third phases.
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+Finally,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<sect2 id="Creating_and_Merging_Argument_Lists">
+<title>Creating and Merging Argument Lists</title>
+<para>
+Many Intrinsics functions may be passed pairs of resource names and
+values.
+These are passed as an arglist, a pointer to an array of
+<function>Arg</function>
+structures, which contains
+</para>
+<literallayout>
+typedef struct {
+ String name;
+ XtArgVal value;
+} Arg, *ArgList;
+</literallayout>
+<para>
+where
+<function>XtArgVal</function>
+is as defined in Section 1.5.
+</para>
+
+<para>
+If the size of the resource is less than or equal to the size of an
+<function>XtArgVal</function>,
+the resource value is stored directly in <emphasis remap='I'>value</emphasis>;
+otherwise, a pointer to it is stored in <emphasis remap='I'>value</emphasis>.
+</para>
+
+<para>
+To set values in an
+<function>ArgList</function>,
+use
+<xref linkend='XtSetArg' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetArg'>
+<funcprototype>
+ <funcdef>void <function>XtSetArg</function></funcdef>
+ <paramdef>Arg <parameter>arg</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>XtArgVal <parameter>value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>arg</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the <emphasis remap='I'>name/value</emphasis> pair to set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the resource.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value of the resource if it will fit in an
+<function>XtArgVal</function>,
+else the address.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetArg' xrefstyle='select: title'/>
+function is usually used in a highly stylized manner to
+minimize the probability of making a mistake; for example:
+</para>
+<literallayout>
+Arg args[20];
+int n;
+n = 0;
+XtSetArg(args[n], XtNheight, 100); n++;
+XtSetArg(args[n], XtNwidth, 200); n++;
+XtSetValues(widget, args, n);
+</literallayout>
+<para>
+Alternatively, an application can statically declare the argument list
+and use
+<xref linkend='XtNumber' xrefstyle='select: title'/>:
+</para>
+<literallayout>
+static Args args[] = {
+ {XtNheight, (XtArgVal) 100},
+ {XtNwidth, (XtArgVal) 200},
+};
+XtSetValues(Widget, args, XtNumber(args));
+</literallayout>
+<para>
+Note that you should not use expressions with side effects such as
+auto-increment or auto-decrement
+within the first argument to
+<xref linkend='XtSetArg' xrefstyle='select: title'/>.
+<xref linkend='XtSetArg' xrefstyle='select: title'/>
+can be implemented as a macro that evaluates the first argument twice.
+</para>
+
+<para>
+To merge two
+arglist arrays, use
+<xref linkend='XtMergeArgLists' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMergeArgLists'>
+<funcprototype>
+ <funcdef>ArgList <function>XtMergeArgLists</function></funcdef>
+ <paramdef>ArgList <parameter>args1</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args1</parameter></paramdef>
+ <paramdef>ArgList <parameter>args2</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args2</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args1</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the first argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args1</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the first argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args2</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the second argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args2</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the second argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtMergeArgLists' xrefstyle='select: title'/>
+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
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+
+<para>
+All Intrinsics interfaces that require
+<function>ArgList</function>
+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
+<function>ArgList</function>
+procedure; e.g.,
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>.
+Each procedure named <function>XtVa</function><emphasis remap='I'>something</emphasis> takes as its
+last arguments, in place of the corresponding
+<function>ArgList</function>/
+<function>Cardinal</function>
+parameters, a variable parameter list of resource name and
+value pairs where each name is of type
+<function>String</function>
+and each value is of type
+<function>XtArgVal</function>.
+The end of the list is identified by a <emphasis remap='I'>name</emphasis> 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
+<function>ArgList</function>
+and varargs forms interchangeably.
+</para>
+
+<para>
+Two special names are defined for use only in varargs lists:
+<function>XtVaTypedArg</function>
+and
+<function>XtVaNestedList</function>.
+</para>
+<literallayout>
+#define XtVaTypedArg "XtVaTypedArg"
+</literallayout>
+<para>
+If the name
+<function>XtVaTypedArg</function>
+is specified in place of a resource
+name, then the following four arguments are interpreted as a
+<emphasis remap='I'>name/type/value/size</emphasis> tuple <emphasis remap='I'>where</emphasis> name is of type
+<function>String</function>,
+<emphasis remap='I'>type</emphasis> is of type
+<function>String</function>,
+<emphasis remap='I'>value</emphasis> is of type
+<function>XtArgVal</function>,
+and <emphasis remap='I'>size</emphasis> is of type int. When a varargs list containing
+<function>XtVaTypedArg</function>
+is processed, a resource type
+conversion (see <xref linkend='Resource_Conversions' />) is performed if necessary to convert the
+value into the format required by the associated resource. If <emphasis remap='I'>type</emphasis> is
+XtRString, then <emphasis remap='I'>value</emphasis> contains a pointer to the string and <emphasis remap='I'>size</emphasis>
+contains the number of bytes allocated, including the trailing null
+byte. If <emphasis remap='I'>type</emphasis> is not XtRString, then <emphasis remap='I'>if</emphasis> size is
+less than or equal to
+<function>sizeof</function>(<function>XtArgVal</function>), the value should be the data cast to the type
+<function>XtArgVal</function>,
+otherwise <emphasis remap='I'>value</emphasis> 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.
+</para>
+<literallayout>
+#define XtVaNestedList "XtVaNestedList"
+</literallayout>
+<para>
+If the name
+<function>XtVaNestedList</function>
+is specified in place of a resource name,
+then the following argument is interpreted as an
+<function>XtVarArgsList</function>
+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.
+</para>
+
+<para>
+To dynamically allocate a varargs list for use with
+<function>XtVaNestedList</function>
+in multiple calls, use
+<xref linkend='XtVaCreateArgsList' xrefstyle='select: title'/>.
+</para>
+<literallayout>
+typedef XtPointer XtVarArgsList;
+</literallayout>
+
+<funcsynopsis id='XtVaCreateArgsList'>
+<funcprototype>
+ <funcdef>XtVarArgsList <function>XtVaCreateArgsList</function></funcdef>
+ <paramdef>XtPointer <parameter>unused</parameter></paramdef>
+ <paramdef> <parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>unused</emphasis>
+ </term>
+ <listitem>
+ <para>
+This argument is not currently used and must be specified as NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies a variable parameter list of resource
+name and value pairs.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtVaCreateArgsList' xrefstyle='select: title'/>
+function allocates memory and copies its arguments into a
+single list pointer, which may be used with
+<function>XtVaNestedList</function>.
+The end of
+both lists is identified by a <emphasis remap='I'>name</emphasis> entry containing NULL. Any entries
+of type
+<function>XtVaTypedArg</function>
+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
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when no longer needed.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Creating_a_Widget_Instance">
+<title>Creating a Widget Instance</title>
+<para>
+To create an instance of a widget, use
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreateWidget'>
+<funcprototype>
+ <funcdef>Widget <function>XtCreateWidget</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>object_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created object. Must be <emphasis role='strong'>objectClass</emphasis> or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+function performs all the boilerplate operations of widget
+creation, doing the following in order:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the specified class is not
+<function>coreWidgetClass</function>
+or a subclass thereof,
+and the parent's class is a subclass of
+<function>compositeWidgetClass</function>
+and either no extension record in
+the parent's composite class part extension field exists with the
+<emphasis remap='I'>record_type</emphasis>
+<emphasis role='strong'>NULLQUARK</emphasis>
+or the <emphasis remap='I'>accepts_objects</emphasis> field in the extension
+record is
+<function>False</function>,
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+issues a fatal error; see <xref linkend='Addition_of_Children_to_a_Composite_Widget_The_insert_child_Procedure' /> and <xref linkend='Nonwidget_Objects' />.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the specified class contains an extension record in the object class
+part <emphasis remap='I'>extension</emphasis> field with <emphasis remap='I'>record_type</emphasis>
+<emphasis role='strong'>NULLQUARK</emphasis>
+and the <emphasis remap='I'>allocate</emphasis> field is not NULL,
+the procedure is invoked to allocate memory
+for the widget instance. If the parent is a member of the class
+<function>constraintWidgetClass</function>,
+the procedure also allocates memory for the
+parent's constraints and stores the address of this memory into the
+<emphasis remap='I'>constraints</emphasis> field. If no allocate procedure is found, the Intrinsics
+allocate memory for the widget and, when applicable, the constraints,
+and initializes the <emphasis remap='I'>constraints</emphasis> field.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Initializes the Core nonresource data fields
+<emphasis remap='I'>self</emphasis>, <emphasis remap='I'>parent</emphasis>, <emphasis remap='I'>widget_class</emphasis>, <emphasis remap='I'>being_destroyed</emphasis>,
+<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>managed</emphasis>, <emphasis remap='I'>window</emphasis>, <emphasis remap='I'>visible</emphasis>,
+<emphasis remap='I'>popup_list</emphasis>, and <emphasis remap='I'>num_popups</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Initializes the resource fields (for example, <emphasis remap='I'>background_pixel</emphasis>)
+by using the
+<function>CoreClassPart</function>
+resource lists specified for this class and all superclasses.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent is a member of the class
+<function>constraintWidgetClass</function>,
+initializes the resource fields of the constraints record
+by using the
+<function>ConstraintClassPart</function>
+resource lists specified for the parent's class
+and all superclasses up to
+<function>constraintWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls the initialize procedures for the widget starting at the
+Object
+initialize procedure on down to the widget's initialize procedure.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent is a member of the class
+<function>constraintWidgetClass</function>,
+calls the
+<function>ConstraintClassPart</function>
+initialize procedures,
+starting at
+<function>constraintWidgetClass</function>
+on down to the parent's
+<function>ConstraintClassPart</function>
+initialize procedure.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent is a member of the class
+<function>compositeWidgetClass</function>,
+puts the widget into its parent's children list by calling its parent's
+insert_child procedure.
+For further information,
+see <xref linkend='Addition_of_Children_to_a_Composite_Widget_The_insert_child_Procedure' />.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To create an instance of a widget using varargs lists, use
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaCreateWidget'>
+<funcprototype>
+ <funcdef>Widget <function>XtVaCreateWidget</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>object_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+ <paramdef> <parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource name for the created widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created object. Must be <emphasis role='strong'>objectClass</emphasis> or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>
+procedure is identical in function to
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list,
+as described
+in Section 2.5.1.
+</para>
+</sect2>
+
+<sect2 id="Creating_an_Application_Shell_Instance">
+<title>Creating an Application Shell Instance</title>
+<para>
+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
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+to create independent widget trees.
+</para>
+
+<funcsynopsis id='XtAppCreateShell'>
+<funcprototype>
+ <funcdef>Widget <function>XtAppCreateShell</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Display * <parameter>display</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the instance name of the shell widget.
+If <emphasis remap='I'>name</emphasis> is NULL,
+the application name passed to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+is used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class string to be used in
+place of the widget <emphasis remap='I'>class_name</emphasis> string when
+<emphasis remap='I'>widget_class</emphasis> is
+<function>applicationShellWidgetClass</function>
+or a subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class for the top-level widget (e.g.,
+<function>applicationShellWidgetClass ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display for the default screen
+and for the resource database used to retrieve
+the shell widget resources.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+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
+<emphasis remap='I'>args</emphasis> 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 <emphasis remap='I'>name</emphasis>.screen,
+class <emphasis remap='I'>Class</emphasis>.Screen where <emphasis remap='I'>Class</emphasis> is the specified
+<emphasis remap='I'>application_class</emphasis> if <emphasis remap='I'>widget_class</emphasis> is
+<function>applicationShellWidgetClass</function>
+or a subclass thereof. If <emphasis remap='I'>widget_class</emphasis> is not
+<function>application\%Shell\%Widget\%Class</function>
+or a subclass, <emphasis remap='I'>Class</emphasis> is the <emphasis remap='I'>class_name</emphasis>
+field from the
+<function>CoreClassPart</function>
+of the specified <emphasis remap='I'>widget_class</emphasis>.
+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
+<emphasis remap='I'>args</emphasis>. The widget name and <emphasis remap='I'>Class</emphasis> as determined above are
+used as the leftmost (i.e., root) components in all fully qualified
+resource names for objects within this widget tree.
+</para>
+
+<para>
+If the specified widget class is a subclass of WMShell, the name and
+<emphasis remap='I'>Class</emphasis> as determined above will be stored into the
+<emphasis role='strong'>WM_CLASS</emphasis>
+property on the widget's window when it becomes realized.
+If the specified <emphasis remap='I'>widget_class</emphasis> is
+<function>applicationShellWidgetClass</function>
+or a subclass thereof, the
+<emphasis role='strong'>WM_COMMAND</emphasis>
+property will also be set from the values of the XtNargv and
+XtNargc resources.
+</para>
+
+<para>
+To create multiple top-level shells within a single (logical)
+application,
+you can use one of two methods:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Designate one shell as the real top-level shell and
+create the others as pop-up children of it by using
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Have all shells as pop-up children of an unrealized top-level shell.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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:
+</para>
+<literallayout>
+xmail.geometry:... (the main window)
+xmail.read.geometry:... (the read window)
+xmail.compose.geometry:... (the compose window)
+</literallayout>
+<para>
+The second method,
+which is best if there is no main window,
+leads to resource specifications like the following:
+</para>
+<literallayout>
+xmail.headers.geometry:... (the headers window)
+xmail.read.geometry:... (the read window)
+xmail.compose.geometry:... (the compose window)
+</literallayout>
+<para>
+To create a top-level widget that is the root of a widget tree using
+varargs lists, use
+<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaAppCreateShell'>
+<funcprototype>
+ <funcdef>Widget <function>XtVaAppCreateShell</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Display * <parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the instance name of the shell widget.
+If <emphasis remap='I'>name</emphasis> is NULL,
+the application name passed to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+is used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class string to be used in
+place of the widget <emphasis remap='I'>class_name</emphasis> string when
+<emphasis remap='I'>widget_class</emphasis> is
+<function>applicationShellWidgetClass</function>
+or a subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class for the top-level widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display for the default screen
+and for the resource database used to retrieve
+the shell widget resources.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>
+procedure is identical in function to
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list, as
+described in Section 2.5.1.
+</para>
+</sect2>
+
+<sect2 id="Convenience_Procedure_to_Initialize_an_Application">
+<title>Convenience Procedure to Initialize an Application</title>
+<para>
+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
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
+or
+<xref linkend='XtVaOpenApplication' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOpenApplication'>
+<funcprototype>
+ <funcdef>Widget <function>XtOpenApplication</function></funcdef>
+ <paramdef>XtAppContext * <parameter>app_context_return</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescList <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int * <parameter>argc_in_out</parameter></paramdef>
+ <paramdef>String * <parameter>argv_in_out</parameter></paramdef>
+ <paramdef>String * <parameter>fallback_resources</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application context, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line options table.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>options</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fallback_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies resource values to be used if the application class resource
+file cannot be opened or read, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class of the widget to be created. Must be shellWidgetClass
+or a subclass.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any
+other resource specifications for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
+function calls
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>
+followed by
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>,
+then calls
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+with <emphasis remap='I'>display_string</emphasis> NULL and
+<emphasis remap='I'>application_name</emphasis> NULL, and finally calls
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+with <emphasis remap='I'>name</emphasis> NULL, the specified <emphasis remap='I'>widget_class</emphasis>,
+an argument list and count,
+and returns the created shell.
+The recommended <emphasis remap='I'>widget_class</emphasis> is
+<function>sessionShellWidgetClass</function>.
+The argument list and count are created by merging
+the specified <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> with a list
+containing the specified <emphasis remap='I'>argc</emphasis> and <emphasis remap='I'>argv</emphasis>.
+The modified <emphasis remap='I'>argc</emphasis> and <emphasis remap='I'>argv</emphasis> returned by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+are returned in <emphasis remap='I'>argc_in_out</emphasis> and <emphasis remap='I'>argv_in_out</emphasis>. If
+<emphasis remap='I'>app_context_return</emphasis> 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
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
+terminates the application. If <emphasis remap='I'>fallback_resources</emphasis> is non-NULL,
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>
+is called with the value prior to calling
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaOpenApplication'>
+<funcprototype>
+ <funcdef>Widget <function>XtVaOpenApplication</function></funcdef>
+ <paramdef>XtAppContext * <parameter>app_context_return</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescList <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int * <parameter>argc_in_out</parameter></paramdef>
+ <paramdef>String * <parameter>argv_in_out</parameter></paramdef>
+ <paramdef>String * <parameter>fallback_resources</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application context, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line options table.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>options</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line arguments array.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fallback_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies resource values to be used if the application class
+resource file cannot be opened, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class of the widget to be created. Must be shellWidgetClass
+or a subclass.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications for the created shell.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtVaOpenApplication' xrefstyle='select: title'/>
+procedure is identical in function to
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list,
+as described
+in Section 2.5.1.
+</para>
+</sect2>
+
+<sect2 id="Widget_Instance_Allocation_The_allocate_Procedure">
+<title>Widget Instance Allocation: The allocate Procedure</title>
+<para>
+A widget class may optionally provide an instance allocation procedure
+in the
+<function>ObjectClassExtension</function>
+record.
+</para>
+
+<para>
+When the call to create a widget includes a varargs list containing
+<function>XtVaTypedArg</function>,
+these arguments will be passed to the allocation procedure in an
+<function>XtTypedArgList</function>.
+</para>
+<literallayout>
+typedef struct {
+ String name;
+ String type;
+ XtArgVal value;
+ int size;
+} XtTypedArg, *XtTypedArgList;
+</literallayout>
+<para>
+The allocate procedure pointer in the
+<function>ObjectClassExtension</function>
+record is of type
+<xref linkend='XtAllocateProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAllocateProc'>
+<funcprototype>
+ <funcdef>typedef void <function>(*AllocateProc)</function></funcdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Cardinal* <parameter>constraint_size</parameter></paramdef>
+ <paramdef>Cardinal* <parameter>more_bytes</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal* <parameter>num_args</parameter></paramdef>
+ <paramdef>XtTypedArgList <parameter>typed_args</parameter></paramdef>
+ <paramdef>Cardinal* <parameter>num_typed_args</parameter></paramdef>
+ <paramdef>Widget* <parameter>new_return</parameter></paramdef>
+ <paramdef>XtPointer* <parameter>more_bytes_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class of the instance to allocate.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>constraint_size</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size of the constraint record to allocate, or 0.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>more_bytes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of auxiliary bytes of memory to allocate.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list as given in the call to create the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>typed_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of typed arguments given in the call to create the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_typed_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of typed arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>new_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a pointer to the newly allocated instance, or NULL in case of error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>more_bytes_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the auxiliary memory if it was requested, or NULL
+if requested and an error occurred; otherwise, unchanged.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+At widget allocation time, if an extension record with <emphasis remap='I'>record_type</emphasis>
+equal to
+<emphasis role='strong'>NULLQUARK</emphasis>
+is located through the object class part <emphasis remap='I'>extension</emphasis> field
+and the <emphasis remap='I'>allocate</emphasis> field is not NULL, the
+<xref linkend='XtAllocateProc' xrefstyle='select: title'/>
+will be invoked to allocate memory for the widget. If no ObjectClassPart
+extension record is declared with <emphasis remap='I'>record_type equal</emphasis> to
+<emphasis role='strong'>NULLQUARK</emphasis>,
+then
+<function>XtInheritAllocate</function>
+and
+<function>XtInheritDeallocate</function>
+are assumed.
+If no
+<xref linkend='XtAllocateProc' xrefstyle='select: title'/>
+is found, the Intrinsics will allocate memory for the widget.
+</para>
+
+<para>
+An
+<xref linkend='XtAllocateProc' xrefstyle='select: title'/>
+must perform the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Allocate memory for the widget instance and return it in <emphasis remap='I'>new_return</emphasis>.
+The memory must be at least <emphasis remap='I'>wc-&gt;core_class.widget_size</emphasis> bytes in length,
+double-word aligned.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Initialize the <emphasis remap='I'>core.constraints</emphasis> field in the instance record to NULL
+or to point to a constraint record. If <emphasis remap='I'>constraint_size</emphasis>
+is not 0, the procedure must allocate memory for the constraint record.
+The memory must be double-word aligned.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If <emphasis remap='I'>more_bytes</emphasis> is not 0, then the address of a block of memory
+at least <emphasis remap='I'>more_bytes</emphasis> in size, double-word aligned, must be
+returned in the <emphasis remap='I'>more_bytes_return</emphasis> parameter,
+or NULL to indicate an error.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Widget_Instance_Initialization_The_initialize_Procedure">
+<title>Widget Instance Initialization: The initialize Procedure</title>
+<para>
+The initialize procedure pointer in a widget class is of type
+<xref linkend='XtInitProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInitProc'>
+<funcprototype>
+ <funcdef>typedef void <function>(*XtInitProc)</function></funcdef>
+ <paramdef>Widget <parameter>request</parameter></paramdef>
+ <paramdef>Widget <parameter>new</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal * <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a copy of the widget with resource values as requested by the
+argument list, the resource database, and the widget defaults.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>new</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget with the new values, both resource and nonresource,
+that are actually allowed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>XtVaTypedArg</function>
+are converted to the widget representation and the list is transformed
+into the
+<function>ArgList</function>
+format.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+An initialization procedure performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+<function>String</function>,
+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.
+<note><para>
+It is not necessary to allocate space for or to copy callback lists.
+</para></note>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Computes values for unspecified resource fields.
+For example, if <emphasis remap='I'>width</emphasis> and <emphasis remap='I'>height</emphasis> are zero,
+the widget should compute an appropriate width and height
+based on its other resources.
+<note><para>
+A widget may directly assign only
+its own <emphasis remap='I'>width</emphasis> and <emphasis remap='I'>height</emphasis> within the initialize, initialize_hook,
+set_values, and
+set_values_hook procedures; see <xref linkend='Geometry_Management' />.
+</para></note>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+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
+<emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis>
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>initialize</emphasis> field in the class record.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+The <emphasis remap='I'>request</emphasis> and <emphasis remap='I'>new</emphasis> 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 <emphasis remap='I'>request</emphasis> widget is a copy of the widget as initialized by the
+arglist and resource database.
+The <emphasis remap='I'>new</emphasis> 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.
+</para>
+
+<para>
+In the above example,
+the subclass with the visual surround can see
+if the <emphasis remap='I'>width</emphasis> and <emphasis remap='I'>height</emphasis> in the <emphasis remap='I'>request</emphasis> widget are zero.
+If so,
+it adds its surround size to the <emphasis remap='I'>width</emphasis> and <emphasis remap='I'>height</emphasis>
+fields in the <emphasis remap='I'>new</emphasis> widget.
+If not, it must make do with the size originally specified.
+</para>
+
+<para>
+The <emphasis remap='I'>new</emphasis> widget will become the actual widget instance record.
+Therefore,
+the initialization procedure should do all its work on the <emphasis remap='I'>new</emphasis> widget;
+the <emphasis remap='I'>request</emphasis> widget should never be modified.
+If the initialize procedure
+needs to call any routines that operate on a widget,
+it should specify <emphasis remap='I'>new</emphasis> as the widget instance.
+</para>
+</sect2>
+
+<sect2 id="Constraint_Instance_Initialization_The_ConstraintClassPart_initialize_Procedure">
+<title>Constraint Instance Initialization: The ConstraintClassPart initialize Procedure</title>
+<para>
+The constraint initialization procedure pointer, found in the
+<function>ConstraintClassPart</function>
+<emphasis remap='I'>initialize</emphasis> field of the widget class record, is of type
+<xref linkend='XtInitProc' xrefstyle='select: title'/>.
+The values passed to the parent constraint initialization procedures
+are the same as those passed to the child's class widget initialization
+procedures.
+</para>
+
+<para>
+The <emphasis remap='I'>constraints</emphasis> field of the <emphasis remap='I'>request</emphasis> widget points to a copy of the
+constraints record as initialized by the arglist and resource database.
+</para>
+
+<para>
+The constraint initialization procedure should compute any constraint fields
+derived from constraint resources.
+It can make further changes to the <emphasis remap='I'>new</emphasis> widget to make the widget
+and any other constraint fields
+conform to the specified constraints, for example,
+changing the widget's size or position.
+</para>
+
+<para>
+If a constraint class does not need a constraint initialization procedure,
+it can specify NULL for the <emphasis remap='I'>initialize</emphasis> field of the
+<function>ConstraintClassPart</function>
+in the class record.
+</para>
+</sect2>
+
+<sect2 id="Nonwidget_Data_Initialization_The_initialize_hook_Procedure">
+<title>Nonwidget Data Initialization: The initialize_hook Procedure</title>
+<note>
+<para>
+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.
+</para>
+</note>
+
+<para>
+The initialize_hook procedure pointer is of type
+<xref linkend='XtArgsProc' xrefstyle='select: title'/>:
+</para>
+
+<funcsynopsis id='XtArgsProc'>
+<funcprototype>
+ <funcdef>typedef void<function>(*XtArgsProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal * <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list passed by the client.
+If the client created the widget using a varargs form, any resources
+specified via
+<function>XtVaTypedArg</function>
+are converted to the widget representation and the list is transformed
+into the
+<function>ArgList</function>
+format.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If this procedure is not NULL,
+it is called immediately after the corresponding initialize
+procedure or in its place if the <emphasis remap='I'>initialize</emphasis> field is NULL.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Realizing_Widgets">
+<title>Realizing Widgets</title>
+<para>
+To realize a widget instance, use
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRealizeWidget'>
+<funcprototype>
+ <funcdef>void <function>XtRealizeWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the widget is already realized,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+simply returns.
+Otherwise it performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Binds all action names in the widget's
+translation table to procedures (see <xref linkend='Action_Names_to_Procedure_Translations' />).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Constructs an
+<function>XSetWindowAttributes</function>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the widget is
+not a subclass of
+<function>compositeWidgetClass</function>,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+returns; otherwise it continues and performs the following:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Maps all of the managed children windows that have <emphasis remap='I'>mapped_when_managed</emphasis>
+<function>True</function>.
+If a widget is managed but <emphasis remap='I'>mapped_when_managed</emphasis> is
+<function>False</function>,
+the widget is allocated visual space but is not displayed.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+If the widget is a top-level shell widget (that is, it has no parent), and
+<emphasis remap='I'>mapped_when_managed</emphasis> is
+<function>True</function>,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+maps the widget window.
+</para>
+
+<para>
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>,
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
+<function>XtUnmanage\%Children</function>,
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>,
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>,
+and
+<function>XtDestroy\%Widget</function>
+maintain the following invariants:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If a composite widget is realized, then all its managed children are realized.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If a composite widget is realized, then all its managed children that have
+<emphasis remap='I'>mapped_when_managed</emphasis>
+<function>True</function>
+are mapped.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+calls the procedures in reverse order of
+appearance in the
+<function>CompositePart</function>
+<emphasis remap='I'>children</emphasis> 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.
+</para>
+
+<para>
+To check whether or not a widget has been realized, use
+<xref linkend='XtIsRealized' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtIsRealized'>
+<funcprototype>
+ <funcdef>Boolean <function>XtIsRealized</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtIsRealized' xrefstyle='select: title'/>
+function returns
+<function>True</function>
+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.
+</para>
+
+<para>
+Some widget procedures (for example, set_values) might wish to
+operate differently
+after the widget has been realized.
+</para>
+<sect2 id="Widget_Instance_Window_Creation_The_realize_Procedure">
+<title>Widget Instance Window Creation: The realize Procedure</title>
+<para>
+The realize procedure pointer in a widget class is of type
+<xref linkend='XtRealizeProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRealizeProc'>
+<funcprototype>
+ <funcdef>typedef void <function>(*XtRealizeProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtValueMask <parameter>value_mask</parameter></paramdef>
+ <paramdef>XSetWindowAttributes <parameter>attributes</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies which fields in the <emphasis remap='I'>attributes</emphasis> structure are used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>attributes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the window attributes to use in the
+<function>XCreateWindow</function>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The realize procedure must create the widget's window.
+</para>
+
+<para>
+Before calling the class realize procedure, the generic
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+function fills in a mask and a corresponding
+<function>XSetWindowAttributes</function>
+structure.
+It sets the following fields in <emphasis remap='I'>attributes</emphasis> and
+corresponding bits in <emphasis remap='I'>value_mask</emphasis>
+based on information in the widget
+core
+structure:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+The <emphasis remap='I'>background_pixmap</emphasis> (or <emphasis remap='I'>background_pixel</emphasis> if <emphasis remap='I'>background_pixmap</emphasis> is
+<function>XtUnspecifiedPixmap</function>)
+is filled in from the corresponding field.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The <emphasis remap='I'>border_pixmap</emphasis> (or <emphasis remap='I'>border_pixel</emphasis> if <emphasis remap='I'>border_pixmap</emphasis> is
+<function>XtUnspecifiedPixmap</function>)
+is filled in from the corresponding field.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The <emphasis remap='I'>colormap</emphasis> is filled in from the corresponding field.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The <emphasis remap='I'>event_mask</emphasis> is filled in based on the event handlers registered,
+the event translations specified, whether the <emphasis remap='I'>expose</emphasis> field is non-NULL,
+and whether <emphasis remap='I'>visible_interest</emphasis> is
+<function>True</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The <emphasis remap='I'>bit_gravity</emphasis> is set to
+<function>NorthWestGravity</function>
+if the <emphasis remap='I'>expose</emphasis> field is NULL.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+These or any other fields in attributes and the corresponding bits in
+<emphasis remap='I'>value_mask</emphasis> can be set by the realize procedure.
+</para>
+
+<para>
+Note that because realize is not a chained operation,
+the widget class realize procedure must update the
+<function>XSetWindowAttributes</function>
+structure with all the appropriate fields from
+non-Core
+superclasses.
+</para>
+
+<para>
+A widget class can inherit its realize procedure from its superclass
+during class initialization.
+The realize procedure defined for
+<function>coreWidgetClass</function>
+calls
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>
+with the passed <emphasis remap='I'>value_mask</emphasis> and <emphasis remap='I'>attributes</emphasis>
+and with <emphasis remap='I'>window_class</emphasis> and <emphasis remap='I'>visual</emphasis> set to
+<function>CopyFromParent</function>.
+Both
+<function>compositeWidgetClass</function>
+and
+<function>constraintWidgetClass</function>
+inherit this realize procedure, and most new widget subclasses
+can do the same (see <xref linkend='Inheritance_of_Superclass_Operations' />).
+</para>
+
+<para>
+The most common noninherited realize procedures set <emphasis remap='I'>bit_gravity</emphasis> in the mask
+and attributes to the appropriate value and then create the window.
+For example, depending on its justification, Label might set <emphasis remap='I'>bit_gravity</emphasis> to
+<function>WestGravity</function>,
+<function>CenterGravity</function>,
+or
+<function>EastGravity</function>.
+Consequently, shrinking it would just move the bits appropriately,
+and no
+exposure
+event is needed for repainting.
+</para>
+
+<para>
+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
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+on its children itself in the appropriate order from within its own
+realize procedure.
+</para>
+
+<para>
+Widgets that have children and whose class is not a subclass of
+<function>compositeWidgetClass</function>
+are responsible for calling
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+on their children, usually from within the realize procedure.
+</para>
+
+<para>
+Realize procedures cannot manage or unmanage their descendants.
+</para>
+</sect2>
+
+<sect2 id="Window_Creation_Convenience_Routine">
+<title>Window Creation Convenience Routine</title>
+<para>
+Rather than call the Xlib
+<function>XCreateWindow</function>
+function explicitly, a realize procedure should normally call the Intrinsics analog
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>,
+which simplifies the creation of windows for widgets.
+</para>
+
+<funcsynopsis id='XtCreateWindow'>
+<funcprototype>
+ <funcdef>void <function>XtCreateWindow</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>unsigned int <parameter>window_class</parameter></paramdef>
+ <paramdef>Visual * <parameter>visual</parameter></paramdef>
+ <paramdef>XtValueMask <parameter>value_mask</parameter></paramdef>
+ <paramdef>XSetWindowAttributes <parameter>attributes</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that defines the additional window attributed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>window_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Xlib window class (for example,
+<function>InputOutput</function>,
+<function>InputOnly</function>,
+or
+<function>CopyFromParent ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>visual</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the visual type (usually
+<function>CopyFromParent ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies which fields in the <emphasis remap='I'>attributes</emphasis> structure are used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>attributes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the window attributes to use in the
+<function>XCreateWindow</function>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>
+function calls the Xlib
+<function>XCreateWindow</function>
+function with values from the widget structure and the passed parameters.
+Then, it assigns the created window to the widget's <emphasis remap='I'>window</emphasis> field.
+</para>
+
+<para>
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>
+evaluates the following fields of the widget core
+structure: <emphasis remap='I'>depth</emphasis>, <emphasis remap='I'>screen</emphasis>, <emphasis remap='I'>parent-&gt;core.window</emphasis>, <emphasis remap='I'>x</emphasis>,
+<emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, and
+<emphasis remap='I'>border_width</emphasis>.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Obtaining_Window_Information_from_a_Widget">
+<title>Obtaining Window Information from a Widget</title>
+<para>
+The
+Core
+widget class definition contains the screen and window ids.
+The <emphasis remap='I'>window</emphasis> field may be NULL for a while
+(see <xref linkend='Creating_Widgets' /> and <xref linkend='Realizing_Widgets' />).
+</para>
+
+<para>
+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.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Display <function>XtDisplay</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<function>XtDisplay</function>
+returns the display pointer for the specified widget.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>Widget <function>XtParent</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<function>XtParent</function>
+returns the parent object for the specified widget. The returned object
+will be of class Object or a subclass.
+</para>
+
+<funcsynopsis id='XtScreen'>
+<funcprototype>
+ <funcdef>Screen <function>*XtScreen</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtScreen' xrefstyle='select: title'/>
+returns the screen pointer for the specified widget.
+</para>
+
+<funcsynopsis id='XtWindow'>
+<funcprototype>
+ <funcdef>Window <function>XtWindow</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtWindow' xrefstyle='select: title'/>
+returns the window of the specified widget.
+</para>
+
+<para>
+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
+<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>,
+<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>,
+and
+<xref linkend='XtWindowOfObject' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDisplayOfObject'>
+<funcprototype>
+ <funcdef>Display <function>*XtDisplayOfObject</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>
+is identical in function to
+<function>XtDisplay</function>
+if the object is a widget; otherwise
+<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>
+returns the display
+pointer for the nearest ancestor of <emphasis remap='I'>object</emphasis> that is of class
+Widget or a subclass thereof.
+</para>
+
+<funcsynopsis id='XtScreenOfObject'>
+<funcprototype>
+ <funcdef>Screen <function>*XtScreenOfObject</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtScreen' xrefstyle='select: title'/>
+if the object is a widget; otherwise
+<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>
+returns the screen pointer
+for the nearest ancestor of <emphasis remap='I'>object</emphasis> that is of class
+Widget or a subclass thereof.
+</para>
+
+<funcsynopsis id='XtWindowOfObject'>
+<funcprototype>
+ <funcdef>Window <function>XtWindowOfObject</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtWindowOfObject' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtWindow' xrefstyle='select: title'/>
+if the object is a widget; otherwise
+<xref linkend='XtWindowOfObject' xrefstyle='select: title'/>
+returns the window for the nearest ancestor of <emphasis remap='I'>object</emphasis> that is of class
+Widget or a subclass thereof.
+</para>
+
+<para>
+To retrieve the instance name of an object, use
+<xref linkend='XtName' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtName'>
+<funcprototype>
+ <funcdef>String <function>XtName</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object whose name is desired. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtName' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+Several window attributes are locally cached in the widget instance.
+Thus, they can be set by the resource manager and
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+as well as used by routines that derive structures from these values
+(for example, <emphasis remap='I'>depth</emphasis> for deriving pixmaps,
+<emphasis remap='I'>background_pixel</emphasis> for deriving GCs, and so on) or in the
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>
+call.
+</para>
+
+<para>
+The <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, and <emphasis remap='I'>border_width</emphasis>
+window attributes are available to
+geometry managers.
+These fields are maintained synchronously inside the Intrinsics.
+When an
+<function>XConfigureWindow</function>
+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
+<function>ConfigureNotify</function>
+event.
+(In fact, most widgets do not select
+<function>SubstructureNotify</function>
+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
+<function>ConfigureNotify</function>
+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 <xref linkend='Geometry_Management' />).
+</para>
+<sect2 id="Unrealizing_Widgets">
+<title>Unrealizing Widgets</title>
+<para>
+To destroy the windows associated with a widget and its
+non-pop-up descendants, use
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUnrealizeWidget'>
+<funcprototype>
+ <funcdef>void <function>XtUnrealizeWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the widget is currently unrealized,
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>
+simply returns. Otherwise it performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Unmanages the widget if the widget is managed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Destroys the widget's window and any subwindows by calling
+<function>XDestroyWindow</function>
+with the specified widget's <emphasis remap='I'>window</emphasis> field.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+Any events in the queue or which arrive following a call to
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>
+will be dispatched as if the window(s) of the
+unrealized widget(s) had never existed.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Destroying_Widgets">
+<title>Destroying Widgets</title>
+<para>
+The Intrinsics provide support
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+To destroy all the pop-up children of the widget being destroyed
+and destroy all children of composite widgets.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+To remove (and unmap) the widget from its parent.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+To call the callback procedures that have been registered to trigger
+when the widget is destroyed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+To minimize the number of things a widget has to deallocate when destroyed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+To minimize the number of
+<function>XDestroyWindow</function>
+calls when destroying a widget tree.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To destroy a widget instance, use
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>.
+</para>
+
+
+<funcsynopsis id='XtDestroyWidget'>
+<funcprototype>
+ <funcdef>void <function>XtDestroyWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+In phase 1,
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the <emphasis remap='I'>being_destroyed</emphasis> field of the widget is
+<function>True</function>,
+it returns immediately.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Recursively descends the widget tree and
+sets the <emphasis remap='I'>being_destroyed</emphasis> field to
+<function>True</function>
+for the widget and all normal and pop-up children.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Adds the widget to a list of widgets (the destroy list) that should be
+destroyed when it is safe to do so.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+is about to return, or immediately if not in
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
+</para>
+
+<para>
+In phase 2,
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+performs the following on each entry in the destroy list in the order
+specified:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the widget is not a pop-up child and the widget's parent is a subclass of
+<function>composite\%WidgetClass</function>,
+and if the parent is not being destroyed,
+it calls
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>
+on the widget and then calls the widget's parent's delete_child procedure
+(see <xref linkend='Deletion_of_Children_The_delete_child_Procedure' />).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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).
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the widget is not a pop-up child and the widget's parent is a subclass of
+<function>constraint\%WidgetClass</function>,
+it calls the
+<function>ConstraintClassPart</function>
+destroy procedure for the parent,
+then for the parent's superclass,
+until finally it calls the
+<function>ConstraintClassPart</function>
+destroy procedure for
+<function>constraintWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls the
+<function>CoreClassPart</function>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the widget class object class part contains an
+<function>ObjectClassExtension</function>
+record with the record_type
+<emphasis role='strong'>NULLQUARK</emphasis>
+and the <emphasis remap='I'>deallocate</emphasis> 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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<function>XDestroyWindow</function>
+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.)
+ </para>
+ </listitem>
+</itemizedlist>
+<sect2 id="Adding_and_Removing_Destroy_Callbacks">
+<title>Adding and Removing Destroy Callbacks</title>
+<para>
+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
+<xref linkend='Callbacks' />.
+The destroy callback list is identified by the resource name
+XtNdestroyCallback.
+</para>
+
+<para>
+For example, the following adds an application-supplied destroy callback
+procedure <emphasis remap='I'>ClientDestroy</emphasis> with client data to a widget by calling
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>.
+</para>
+
+<literallayout>
+XtAddCallback(<emphasis remap='I'>w</emphasis>, XtNdestroyCallback, <emphasis remap='I'>ClientDestroy</emphasis>, <emphasis remap='I'>client_data</emphasis>)
+</literallayout>
+
+<para>
+Similarly, the following removes the application-supplied destroy callback
+procedure <emphasis remap='I'>ClientDestroy</emphasis> by calling
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>.
+</para>
+
+<literallayout>
+XtRemoveCallback(<emphasis remap='I'>w</emphasis>, XtNdestroyCallback, <emphasis remap='I'>ClientDestroy</emphasis>, <emphasis remap='I'>client_data</emphasis>)
+</literallayout>
+<para>
+The <emphasis remap='I'>ClientDestroy</emphasis> argument is of type
+<xref linkend='XtCallbackProc' xrefstyle='select: title'/>;
+see <xref linkend='Using_Callback_Procedure_and_Callback_List_Definitions' />.
+</para>
+</sect2>
+
+<sect2 id="Dynamic_Data_Deallocation_The_destroy_Procedure">
+<title>Dynamic Data Deallocation: The destroy Procedure</title>
+<para>
+The destroy procedure pointers in the
+<function>ObjectClassPart</function>,
+<function>RectObjClassPart</function>,
+and
+<function>CoreClassPart</function>
+structures are of type
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWidgetProc'>
+<funcprototype>
+ <funcdef>typedef void <function>XtWidgetProc</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget being destroyed.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+</para>
+
+<para>
+Deallocating storage includes, but is not limited to,
+the following steps:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Calling
+<xref linkend='XtFree' xrefstyle='select: title'/>
+on dynamic storage allocated with
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+and so on.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<function>XFreePixmap</function>
+on pixmaps created with direct X calls.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<xref linkend='XtReleaseGC' xrefstyle='select: title'/>
+on GCs allocated with
+<xref linkend='XtGetGC' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<function>XFreeGC</function>
+on GCs allocated with direct X calls.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>
+on event handlers added to other widgets.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<xref linkend='XtRemoveTimeOut' xrefstyle='select: title'/>
+on timers created with
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calling
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+for each child if the widget has children
+and is not a subclass of
+<function>compositeWidgetClass</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Dynamic_Constraint_Data_Deallocation_The_ConstraintClassPart_destroy_Procedure">
+<title>Dynamic Constraint Data Deallocation: The ConstraintClassPart destroy Procedure</title>
+<para>
+The constraint destroy procedure identified in the
+<function>ConstraintClassPart</function>
+<function>constraintWidgetClass</function>.
+This constraint destroy procedure pointer is of type
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+The constraint destroy procedures are called in subclass-to-superclass order,
+starting at the class of the widget's parent and ending at
+<function>constraint\%WidgetClass</function>.
+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.
+</para>
+
+<para>
+If a parent does not need to deallocate any constraint storage,
+the constraint destroy procedure entry
+in its class record can be NULL.
+</para>
+</sect2>
+
+<sect2 id="Widget_Instance_Deallocation_The_deallocate_Procedure">
+<title>Widget Instance Deallocation: The deallocate Procedure</title>
+<para>
+The deallocate procedure pointer in the
+<function>ObjectClassExtension</function>
+record is of type
+<function>XtDeallocateProc</function>.
+</para>
+
+<funcsynopsis>
+<funcprototype>
+ <funcdef>typedef void <function>(*XtDeallocateProc)</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>XtPointer <parameter>more_bytes</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget being destroyed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>more_bytes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the auxiliary memory received from the corresponding allocator
+along with the widget, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+When a widget is destroyed, if an
+<function>ObjectClassExtension</function>
+record exists in the object class part <emphasis remap='I'>extension</emphasis> field
+with <emphasis remap='I'>record_type</emphasis>
+<emphasis role='strong'>NULLQUARK</emphasis>
+and the <emphasis remap='I'>deallocate</emphasis> field is not NULL, the
+<function>XtDeallocateProc</function>
+will be called.
+If no ObjectClassPart extension record is declared with <emphasis remap='I'>record_type</emphasis>
+equal to
+<emphasis role='strong'>NULLQUARK</emphasis>,
+then
+<function>XtInheritAllocate</function>
+and
+<function>XtInheritDeallocate</function>
+are assumed.
+The responsibilities of the deallocate procedure are to deallocate the
+memory specified by <emphasis remap='I'>more_bytes</emphasis> if it is not NULL,
+to deallocate the constraints record as specified by the
+widget's <emphasis remap='I'>core.constraints</emphasis> field if it is
+not NULL, and to deallocate the widget instance itself.
+</para>
+
+<para>
+If no
+<function>XtDeallocateProc</function>
+is found, it is assumed that the Intrinsics
+originally allocated the memory and is responsible for freeing it.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Exiting_from_an_Application">
+<title>Exiting from an Application</title>
+<para>
+All X Toolkit applications should terminate
+by calling
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>
+and then exiting
+using the
+standard method for their operating system (typically, by calling
+<function>exit</function>
+for POSIX-based systems).
+The quickest way to make the windows disappear while exiting is to call
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+Depending upon the widget set in use, it may be necessary to explicitly
+destroy individual widgets or widget trees with
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+before calling
+<xref linkend='XtDestroyApplicationContext' xrefstyle='select: title'/>
+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 <xref linkend='Session_Participation' />), then the client may wish to resign from the session
+before exiting. See <xref linkend='Resigning_from_a_Session' /> for details.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH03 b/libXt/specs/CH03
deleted file mode 100644
index f96a79781..000000000
--- a/libXt/specs/CH03
+++ /dev/null
@@ -1,1031 +0,0 @@
-.\" $Xorg: CH03,v 1.3 2000/08/17 19:42:44 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 3\fP\s-1
-
-\s+1\fBComposite Widgets and Their Children\fP\s-1
-.sp 2
-.nr H1 3
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 3 \(em Composite Widgets and Their Children
-.XE
-.IN "Composite widgets"
-Composite widgets (widgets whose class is a subclass of
-.PN 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 \*(xI functions) include:
-.IP \(bu 5
-Overall management of children from creation to destruction.
-.IP \(bu 5
-Destruction of descendants when the composite widget is destroyed.
-.IP \(bu 5
-Physical arrangement (geometry management) of a displayable subset of
-children (that is, the managed children).
-.IP \(bu 5
-Mapping and unmapping of a subset of the managed children.
-.LP
-Overall management is handled by the generic procedures
-.PN XtCreateWidget
-and
-.PN XtDestroyWidget .
-.PN XtCreateWidget
-adds children to their parent by calling the parent's insert_child
-procedure.
-.PN XtDestroyWidget
-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.
-.LP
-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 \*(xI.
-.LP
-Children are added to and removed from their parent's managed set by using
-.PN XtManageChild ,
-.PN XtManageChildren ,
-.PN XtUnmanageChild ,
-.PN XtUnmanageChildren ,
-and
-.PN XtChangeManagedSet ,
-which notify the parent to recalculate the physical layout of its children
-by calling the parent's change_managed procedure.
-The
-.PN XtCreateManagedWidget
-convenience function calls
-.PN XtCreateWidget
-and
-.PN XtManageChild
-on the result.
-.LP
-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 \fImap_when_managed\fP field is
-.PN False .
-The default is
-.PN True
-and is changed by using
-.PN XtSetMappedWhenManaged .
-.LP
-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:
-.IP "Fixed boxes" 1.6i
-Fixed boxes have a fixed number of children created by the parent.
-All these children are managed,
-and none ever makes geometry manager requests.
-.IP "Homogeneous boxes" 1.6i
-Homogeneous boxes treat all children equally and apply the same geometry
-constraints to each child.
-Many clients insert and delete widgets freely.
-.IP "Heterogeneous boxes" 1.6i
-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.
-.IP "Shell boxes" 1.6i
-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
-.PN ConfigureNotify
-events when the window size is changed by the window manager.
-
-.NH 2
-Addition of Children to a Composite Widget: The insert_child Procedure
-.XS
-\*(SN Addition of Children to a Composite Widget: The insert_child Procedure
-.XE
-.LP
-.IN "insert_child procedure"
-To add a child to
-the parent's list of children, the
-.PN XtCreateWidget
-function calls the parent's class routine insert_child.
-The insert_child procedure pointer in a composite widget is of type
-.PN XtWidgetProc .
-.LP
-.IN "insert_child procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtWidgetProc)(Widget);
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Passes the newly created child.
-.LP
-.eM
-Most composite widgets inherit their superclass's operation.
-The insert_child routine in
-.PN CompositeWidgetClass calls the insert_position procedure
-and inserts the child at the specified position
-in the \fIchildren\fP list, expanding it if necessary.
-.LP
-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 Chapter 12) must specify a
-.PN CompositeClassExtension
-extension record as described
-in Section 1.4.2.1 and set the \fIaccepts_objects\fP field in this record to
-.PN True .
-If the
-.PN CompositeClassExtension
-record is not specified or the
-\fIaccepts_objects\fP field is
-.PN 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.
-.LP
-If there is not enough room to insert a new child in the \fIchildren\fP array
-(that is, \fInum_children\fP is equal to \fInum_slots\fP),
-the insert_child procedure must first reallocate the array
-and update \fInum_slots\fP.
-The insert_child procedure then places the child at the appropriate position
-in the array and increments the \fInum_children\fP field.
-
-.NH 2
-Insertion Order of Children: The insert_position Procedure
-.XS
-\fB\*(SN Insertion Order of Children: The insert_position Procedure\fP
-.XE
-.LP
-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.
-.LP
-An application controls the presentation order of a set of children by
-supplying an
-.IN XtNinsertPosition
-XtNinsertPosition
-resource.
-The insert_position procedure pointer in a composite widget instance is of type
-.PN XtOrderProc .
-.LP
-.IN "XtOrderProc" "" "@DEF@"
-.sM
-.FD 0
-typedef Cardinal (*XtOrderProc)(Widget);
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Passes the newly created widget.
-.LP
-.eM
-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 \fIchildren\fP 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.
-.LP
-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 \fInum_children\fP indicates that it should go after all other children.
-The default insert_position function returns \fInum_children\fP
-and can be overridden by a specific composite widget's resource list
-or by the argument list provided when the composite widget is created.
-
-.NH 2
-Deletion of Children: The delete_child Procedure
-.XS
-\*(SN Deletion of Children: The delete_child Procedure
-.XE
-.LP
-.IN "delete_child procedure"
-.LP
-To remove the child from the parent's \fIchildren\fP list, the
-.PN XtDestroyWidget
-function eventually causes a call to the Composite parent's class delete_child
-procedure.
-The delete_child procedure pointer is of type
-.PN XtWidgetProc .
-.LP
-.IN "delete_child procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtWidgetProc)(Widget);
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP
-Passes the child being deleted.
-.LP
-.eM
-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.
-
-.NH 2
-Adding and Removing Children from the Managed Set
-.XS
-\fB\*(SN Adding and Removing Children from the Managed Set\fP
-.XE
-.LP
-The \*(xI 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.
-.IN "change_managed procedure"
-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
-.PN XtWidgetProc .
-The widget argument specifies the composite widget whose managed child
-set has been modified.
-
-.NH 3
-Managing Children
-.XS
-\fB\*(SN Managing Children\fP
-.XE
-.LP
-To add a list of widgets to the geometry-managed (and hence displayable)
-subset of their Composite parent, use
-.PN XtManageChildren .
-.LP
-.IN "XtManageChildren" "" "@DEF@"
-.sM
-.FD 0
-typedef Widget *WidgetList;
-.sp
-void XtManageChildren(\fIchildren\fP, \fInum_children\fP)
-.br
- WidgetList \fIchildren\fP;
-.br
- Cardinal \fInum_children\fP;
-.FN
-.IP \fIchildren\fP 1i
-Specifies a list of child widgets. Each child must be of class
-RectObj or any subclass thereof.
-.IP \fInum_children\fP 1i
-Specifies the number of children in the list.
-.LP
-.eM
-The
-.PN 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's class is not a subclass of
-.PN compositeWidgetClass .
-.IP \(bu 5
-Returns immediately if the common parent is being destroyed;
-otherwise, for each unique child on the list,
-.PN 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
-.PN XtRealizeWidget
-on each previously unmanaged child that is unrealized.
-.IP \- 5
-Maps each previously unmanaged child that has \fImap_when_managed\fP
-.PN 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 \fImanaged\fP field is
-.PN True
-and should ignore all other children.
-Note that some composite widgets, especially fixed boxes, call
-.PN 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
-.PN XtMoveWidget ,
-which first updates the \fIx\fP and \fIy\fP fields and which then calls
-.PN XMoveWindow .
-.LP
-If the composite widget wishes to change the size or border width of any of
-its children, it calls
-.PN XtResizeWidget ,
-which first updates the
-\fIwidth\fP, \fIheight\fP, and \fIborder_width\fP
-fields and then calls
-.PN XConfigureWindow .
-Simultaneous repositioning and resizing may be done with
-.PN XtConfigureWidget ;
-see Section 6.6.
-.sp
-.LP
-To add a single child to its parent widget's set of managed children, use
-.PN XtManageChild .
-.LP
-.IN "XtManageChild" "" "@DEF@"
-.sM
-.FD 0
-void XtManageChild(\fIchild\fP)
-.br
- Widget \fIchild\fP;
-.FN
-.IP \fIchild\fP 1i
-Specifies the child. \*(rI
-.LP
-.eM
-The
-.PN XtManageChild
-function constructs a
-.PN WidgetList
-of length 1 and calls
-.PN XtManageChildren .
-.sp
-.LP
-To create and manage a child widget in a single procedure, use
-.PN XtCreateManagedWidget
-or
-.PN XtVaCreateManagedWidget .
-.LP
-.IN "XtCreateManagedWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Widget \fIparent\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the resource instance name for the created widget.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created widget. \*(rC
-.IP \fIparent\fP 1i
-Specifies the parent widget. Must be of class Composite or any
-subclass thereof.
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtCreateManagedWidget
-function is a convenience routine that calls
-.PN XtCreateWidget
-and
-.PN XtManageChild .
-.sp
-.LP
-.IN "XtVaCreateManagedWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaCreateManagedWidget(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, ...)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Widget \fIparent\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the resource instance name for the created widget.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created widget. \*(rC
-.IP \fIparent\fP 1i
-Specifies the parent widget. Must be of class Composite or any
-subclass thereof.
-.IP ... 1i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-.PN XtVaCreateManagedWidget
-is identical in function to
-.PN XtCreateManagedWidget
-with the \fIargs\fP and \fInum_args\fP parameters replaced
-by a varargs list, as described in Section 2.5.1.
-
-.NH 3
-Unmanaging Children
-.XS
-\fB\*(SN Unmanaging Children\fP
-.XE
-.LP
-To remove a list of children from a parent widget's managed list, use
-.PN XtUnmanageChildren .
-.LP
-.IN "XtUnmanageChildren" "" "@DEF@"
-.sM
-.FD 0
-void XtUnmanageChildren(\fIchildren\fP, \fInum_children\fP)
-.br
- WidgetList \fIchildren\fP;
-.br
- Cardinal \fInum_children\fP;
-.FN
-.IP \fIchildren\fP 1i
-Specifies a list of child widgets. Each child must be of class
-RectObj or any subclass thereof.
-.IP \fInum_children\fP 1i
-Specifies the number of children.
-.LP
-.eM
-The
-.PN XtUnmanageChildren
-function performs the following:
-.IP \(bu 5
-Returns immediately if the common parent is being destroyed.
-.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
-.PN compositeWidgetClass .
-.IP \(bu 5
-For each unique child on the list,
-.PN XtUnmanageChildren
-ignores the child if it is unmanaged; otherwise it performs the following:
-.RS
-.IP \- 5
-Marks the child as unmanaged.
-.IP \- 5
-If the child is realized and the \fImap_when_managed\fP field is
-.PN True ,
-it is unmapped.
-.RE
-.IP \(bu 5
-If the parent is realized and if any children have become unmanaged,
-calls the change_managed routine of the widgets' parent.
-.LP
-.PN XtUnmanageChildren
-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,
-.PN XtDestroyWidget
-should be called instead;
-see Section 2.9.
-.sp
-.LP
-To remove a single child from its parent widget's managed set, use
-.PN XtUnmanageChild .
-.LP
-.IN "XtUnmanageChild" "" "@DEF@"
-.sM
-.FD 0
-void XtUnmanageChild(\fIchild\fP)
-.br
- Widget \fIchild\fP;
-.FN
-.IP \fIchild\fP 1i
-Specifies the child. \*(rI
-.LP
-.eM
-The
-.PN XtUnmanageChild
-function constructs a widget list
-of length 1 and calls
-.PN XtUnmanageChildren .
-.LP
-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.
-
-.NH 3
-Bundling Changes to the Managed Set
-.XS
-\fB\*(SN Bundling Changes to the Managed Set\fP
-.XE
-.LP
-A client may simultaneously unmanage and manage children
-with a single call to the \*(xI. 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.
-.\" .LP
-.\" The composite widget class specifies how its change_managed method
-.\" should be invoked by declaring a
-.\" .PN CompositeClassExtension
-.\" structure as described in section 1.4.2.1. If the
-.\" \fIallows_change_managed_set\fP field in the
-.\" .PN CompositeClassExtension
-.\" record is
-.\" .PN False ,
-.\" the change_managed method will be invoked twice; once before any
-.\" geometry changes are requested by the client callback and once
-.\" after. If the \fIallows_change_managed_set\fP field is
-.\" .PN True ,
-.\" the change_managed method will be invoked just once after the
-.\" specified children have been marked as unmanaged or managed and
-.\" the client's callback has been invoked.
-.\" If no
-.\" .PN CompositeClassExtension
-.\" record is found in the extension field of the
-.\" composite class part with record type
-.\" .PN \s-1NULLQUARK\s+1
-.\" and version greater
-.\" than 1 and if
-.\" .PN XtInheritChangeManaged
-.\" was specified in the class record during class initialization, the
-.\" value of the \fIallows_change_managed_set\fP
-.\" field will be inherited from the superclass.
-.LP
-To simultaneously remove from and add to the geometry-managed
-set of children of a composite parent, use
-.PN XtChangeManagedSet .
-.LP
-.IN "XtChangeManagedSet" "" "@DEF@"
-.sM
-.FD 0
-void XtChangeManagedSet(\fIunmanage_children\fP, \fInum_unmanage_children\fP,
- \fIdo_change_proc\fP, \fIclient_data\fP,
- \fImanage_children\fP, \fInum_manage_children\fP)
-.br
- WidgetList \fIunmanage_children\fP;
-.br
- Cardinal \fInum_unmanage_children\fP;
-.br
- XtDoChangeProc \fIdo_change_proc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- WidgetList \fImanage_children\fP;
-.br
- Cardinal \fInum_manage_children\fP;
-.FN
-.IP \fIunmanage_children\fP 1.8i
-Specifies the list of widget children to initially remove from the managed set.
-.IP \fInum_unmanage_children\fP 1.8i
-Specifies the number of entries in the \fIunmanage_children\fP list.
-.IP \fIdo_change_proc\fP 1.8i
-Specifies a procedure to invoke between unmanaging
-and managing the children, or NULL.
-.IP \fIclient_data\fP 1.8i
-Specifies client data to be passed to the do_change_proc.
-.IP \fImanage_children\fP 1.8i
-Specifies the list of widget children to finally add to the managed set.
-.IP \fInum_manage_children\fP 1.8i
-Specifies the number of entries in the \fImanage_children\fP list.
-.LP
-.eM
-The
-.PN XtChangeManagedSet
-function performs the following:
-.IP \(bu 5
-Returns immediately if \fInum_unmanage_children\fP and
-\fInum_manage_children\fP are both 0.
-.IP \(bu 5
-Issues a warning and returns if the widgets specified in the
-\fImanage_children\fP and
-the \fIunmanage_children\fP lists do not all have the same parent or if
-that parent is not a subclass of
-.PN compositeWidgetClass .
-.IP \(bu 5
-Returns immediately if the common parent is being destroyed.
-.IP \(bu 5
-If \fIdo_change_proc\fP is not NULL and the parent's
-.PN CompositeClassExtension
-\fIallows_change_managed_set\fP field is
-.PN False ,
-then
-.PN XtChangeManagedSet
-performs the following:
-.RS
-.IP \- 5
-Calls
-.PN XtUnmanageChildren
-(\fIunmanage_children\fP, \fInum_unmanage_children\fP).
-.IP \- 5
-Calls the \fIdo_change_proc\fP.
-.IP \- 5
-Calls
-.PN XtManageChildren
-(\fImanage_children\fP, \fInum_manage_children\fP).
-.RE
-.IP \(bu 5
-Otherwise, the following is performed:
-.RS
-.IP \- 5
-For each child on the \fIunmanage_children\fP list; if the child is
-already unmanaged it is ignored, otherwise it is marked as unmanaged,
-and if it is realized and its \fImap_when_managed\fP field is
-.PN True ,
-it is unmapped.
-.IP \- 5
-If \fIdo_change_proc\fP is non-NULL, the procedure is invoked.
-.IP \- 5
-For each child on the \fImanage_children\fP list; if the child is already
-managed or is being destroyed, it is ignored; otherwise it is
-marked as managed.
-.IP \- 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 calling
-.PN XtRealizeWidget
-on each previously unmanaged child that is unrealized and
-mapping each previously unmanaged child that has \fImap_when_managed\fP
-.PN True .
-.RE
-.LP
-If no
-.PN CompositeClassExtension
-record is found in the parent's composite class part \fIextension\fP field
-with record type
-.PN \s-1NULLQUARK\s+1
-and version greater than 1, and if
-.PN XtInheritChangeManaged
-was specified in the parent's class record during class initialization,
-the value of the \fIallows_change_managed_set\fP
-field is inherited from the superclass. The value inherited from
-.PN compositeWidgetClass
-for the \fIallows_change_managed_set\fP field is
-.PN False .
-.LP
-It is not an error to include a child in both the \fIunmanage_children\fP
-and the \fImanage_children\fP lists. The effect of such a call is that
-the child remains managed following the call, but the \fIdo_change_proc\fP is
-able to affect the child while it is in an unmanaged state.
-.sp
-.LP
-The \fIdo_change_proc\fP is of type
-.PN XtDoChangeProc .
-.LP
-.IN "XtDoChangeProc" "" "@DEF"
-.sM
-.FD 0
-typedef void (*XtDoChangeProc)(Widget, WidgetList, Cardinal*, WidgetList, Cardinal*, XtPointer);
-.br
- Widget \fIcomposite_parent\fP;
-.br
- WidgetList \fIunmange_children\fP;
-.br
- Cardinal *\fInum_unmanage_children\fP;
-.br
- WidgetList \fImanage_children\fP;
-.br
- Cardinal *\fInum_manage_children\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIcomposite_parent\fP 1.8i
-Passes the composite parent whose managed set is being altered.
-.IP \fIunmanage_children\fP 1.8i
-Passes the list of children just removed from the managed set.
-.IP \fInum_unmanage_children\fP 1.8i
-Passes the number of entries in the \fIunmanage_children\fP list.
-.IP \fImanage_children\fP 1.8i
-Passes the list of children about to be added to the managed set.
-.IP \fInum_manage_children\fP 1.8i
-Passes the number of entries in the \fImanage_children\fP list.
-.IP \fIclient_data\fP 1.8i
-Passes the client data passed to
-.PN XtChangeManagedSet .
-.LP
-.eM
-The \fIdo_change_proc\fP procedure is used by the caller of
-.PN XtChangeManagedSet
-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
-.PN XtChangeManagedSet
-may take advantage of the fact that the \*(xI internally grant
-geometry requests made by unmanaged children without invoking
-the parent's geometry manager. To achieve this advantage, if
-the \fIdo_change_proc\fP procedure
-changes the geometry of a child or of a descendant of a child, then
-that child should be included in the \fIunmanage_children\fP and
-\fImanage_children\fP lists.
-
-.NH 3
-Determining if a Widget Is Managed
-.XS
-\fB\*(SN Determining if a Widget Is Managed\fP
-.XE
-.LP
-To determine the managed state of a given child widget, use
-.PN XtIsManaged .
-.LP
-.IN "XtIsManaged" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtIsManaged(\fIw\fP)
-.br
- Widget \fIw\fP\^;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.LP
-.eM
-The
-.PN XtIsManaged
-function returns
-.PN True
-if the specified widget is of class RectObj or any subclass thereof
-and is managed, or
-.PN False
-otherwise.
-
-.NH 2
-Controlling When Widgets Get Mapped
-.XS
-\fB\*(SN Controlling When Widgets Get Mapped\fP
-.XE
-.LP
-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 \fImap_when_managed\fP field to
-.PN False .
-.sp
-.LP
-To change the value of a given widget's \fImap_when_managed\fP field, use
-.PN XtSetMappedWhenManaged .
-.LP
-.IN "XtSetMappedWhenManaged" "" "@DEF@"
-.sM
-.FD 0
-void XtSetMappedWhenManaged(\fIw\fP, \fImap_when_managed\fP)
-.br
- Widget \fIw\fP;
-.br
- Boolean \fImap_when_managed\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.IP \fImap_when_managed\fP 1i
-Specifies a Boolean value that indicates the new value
-that is stored into the widget's \fImap_when_managed\fP
-field.
-.LP
-.eM
-If the widget is realized and managed,
-and if \fImap_when_managed\fP is
-.PN True ,
-.PN XtSetMappedWhenManaged
-maps the window.
-If the widget is realized and managed,
-and if \fImap_when_managed\fP is
-.PN False ,
-it unmaps the window.
-.PN XtSetMappedWhenManaged
-is a convenience function that is equivalent to (but slightly faster than)
-calling
-.PN XtSetValues
-and setting the new value for the XtNmappedWhenManaged resource
-then mapping the widget as appropriate.
-As an alternative to using
-.PN XtSetMappedWhenManaged
-to control mapping,
-a client may set \fImapped_when_managed\fP to
-.PN False
-and use
-.PN XtMapWidget
-and
-.PN XtUnmapWidget
-explicitly.
-.sp
-.LP
-To map a widget explicitly, use
-.PN XtMapWidget .
-.LP
-.IN "XtMapWidget" "" "@DEF@"
-.sM
-.FD 0
-XtMapWidget(\fIw\fP)
-.br
- Widget \fIw\fP\^;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-To unmap a widget explicitly, use
-.PN XtUnmapWidget .
-.LP
-.IN "XtUnmapWidget" "" "@DEF@"
-.sM
-.FD 0
-XtUnmapWidget(\fIw\fP)
-.br
- Widget \fIw\fP\^;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-
-.NH 2
-Constrained Composite Widgets
-.XS
-\*(SN Constrained Composite Widgets
-.XE
-.LP
-The Constraint
-widget class is a subclass of
-.PN 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.
-.LP
-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.
-.LP
-To make it easy for widgets and the \*(xI to keep track of the
-constraints associated with a child,
-every widget has a \fIconstraints\fP 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
-.PN constraintWidgetClass ,
-then the child's \fIconstraints\fP field is NULL.
-.LP
-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:
-.LP
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- Dimension max_width, max_height;
-} MaxConstraintPart;
-
-typedef struct {
- MaxConstraintPart max;
-} MaxConstraintRecord, *MaxConstraint;
-.De
-.LP
-A subclass of this widget class that also needs to maintain a minimum size would
-define its constraint record as follows:
-.LP
-.Ds
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- Dimension min_width, min_height;
-} MinConstraintPart;
-
-typedef struct {
- MaxConstraintPart max;
- MinConstraintPart min;
-} MaxMinConstraintRecord, *MaxMinConstraint;
-.De
-.LP
-Constraints are allocated, initialized, deallocated, and otherwise maintained
-insofar as possible by the \*(xI.
-The Constraint class record part has several entries that facilitate this.
-All entries in
-.PN 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.
-.LP
-The
-.PN XtCreateWidget
-function uses the \fIconstraint_size\fP field in the parent's class record
-to allocate a constraint record when a child is created.
-.PN XtCreateWidget
-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.
-.LP
-When the
-.PN XtGetValues
-and
-.PN XtSetValues
-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.
-.PN XtSetValues
-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
-.PN ConstraintClassExtension
-record in the
-.PN ConstraintClassPart
-\fIextension\fP
-fields with a record type of
-.PN \s-1NULLQUARK\s+1
-and the \fIget_values_hook\fP field in
-.IN "get_values_hook procedure"
-.IN "Constraint" "get_values_hook"
-the extension record is non-NULL,
-.PN XtGetValues
-calls the get_values_hook
-procedure(s) to allow the parent to return derived constraint fields.
-.LP
-The
-.PN XtDestroyWidget
-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;
-.PN XtDestroyWidget
-does this automatically.
-.bp
diff --git a/libXt/specs/CH03.xml b/libXt/specs/CH03.xml
new file mode 100644
index 000000000..2b2e1d730
--- /dev/null
+++ b/libXt/specs/CH03.xml
@@ -0,0 +1,1406 @@
+<chapter id='Composite_Widgets_and_Their_Children'>
+<title>Composite Widgets and Their Children</title>
+<para>
+Composite widgets (widgets whose class is a subclass of
+<function>compositeWidgetClass</function>)
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Overall management of children from creation to destruction.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Destruction of descendants when the composite widget is destroyed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Physical arrangement (geometry management) of a displayable subset of
+children (that is, the managed children).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Mapping and unmapping of a subset of the managed children.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+Overall management is handled by the generic procedures
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+and
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>.
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+adds children to their parent by calling the parent's insert_child
+procedure.
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+Children are added to and removed from their parent's managed set by using
+<xref linkend='XtManageChild' xrefstyle='select: title'/>,
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>,
+and
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>,
+which notify the parent to recalculate the physical layout of its children
+by calling the parent's change_managed procedure.
+The
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
+convenience function calls
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+and
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+on the result.
+</para>
+
+<para>
+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 <emphasis remap='I'>map_when_managed</emphasis> field is
+<function>False</function>.
+The default is
+<function>True</function>
+and is changed by using
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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:
+<variablelist>
+ <varlistentry>
+ <term>Fixed boxes</term>
+ <listitem>
+ <para>
+Fixed boxes have a fixed number of children created by the parent.
+All these children are managed,
+and none ever makes geometry manager requests.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Homogeneous boxes</term>
+ <listitem>
+ <para>
+Homogeneous boxes treat all children equally and apply the same geometry
+constraints to each child.
+Many clients insert and delete widgets freely.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Heterogeneous boxes</term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Shell boxes</term>
+ <listitem>
+ <para>
+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
+<function>ConfigureNotify</function>
+events when the window size is changed by the window manager.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+<sect1 id="Addition_of_Children_to_a_Composite_Widget_The_insert_child_Procedure">
+<title>Addition of Children to a Composite Widget: The insert_child Procedure</title>
+<para>
+To add a child to
+the parent's list of children, the
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+function calls the parent's class routine insert_child.
+The insert_child procedure pointer in a composite widget is of type
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWidgetProc_2'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtWidgetProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the newly created child.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most composite widgets inherit their superclass's operation.
+The insert_child routine in
+<function>CompositeWidgetClass calls the insert_position procedure</function>
+and inserts the child at the specified position
+in the <emphasis remap='I'>children</emphasis> list, expanding it if necessary.
+</para>
+
+<para>
+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 <xref linkend='Nonwidget_Objects' />) must specify a
+<function>CompositeClassExtension</function>
+extension record as described
+in <xref linkend='CompositeClassPart_Structure' />
+and set the <emphasis remap='I'>accepts_objects</emphasis> field in this record to
+<function>True</function>.
+If the
+<function>CompositeClassExtension</function>
+record is not specified or the
+<emphasis remap='I'>accepts_objects</emphasis> field is
+<function>False</function>,
+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.
+</para>
+
+<para>
+If there is not enough room to insert a new child in the <emphasis remap='I'>children</emphasis> array
+(that is, <emphasis remap='I'>num_children</emphasis> is equal to <emphasis remap='I'>num_slots</emphasis>),
+the insert_child procedure must first reallocate the array
+and update <emphasis remap='I'>num_slots</emphasis>.
+The insert_child procedure then places the child at the appropriate position
+in the array and increments the <emphasis remap='I'>num_children</emphasis> field.
+</para>
+</sect1>
+
+<sect1 id="Insertion_Order_of_Children_The_insert_position_Procedure">
+<title>Insertion Order of Children: The insert_position Procedure</title>
+<para>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtOrderProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOrderProc'>
+<funcprototype>
+<funcdef>typedef Cardinal <function>(*XtOrderProc)</function></funcdef>
+
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the newly created widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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 <emphasis remap='I'>children</emphasis> 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.
+</para>
+
+<para>
+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 <emphasis remap='I'>num_children</emphasis> indicates that it should go after all other children.
+The default insert_position function returns <emphasis remap='I'>num_children</emphasis>
+and can be overridden by a specific composite widget's resource list
+or by the argument list provided when the composite widget is created.
+</para>
+</sect1>
+
+<sect1 id="Deletion_of_Children_The_delete_child_Procedure">
+<title>Deletion of Children: The delete_child Procedure</title>
+
+<para>
+To remove the child from the parent's <emphasis remap='I'>children</emphasis> list, the
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+function eventually causes a call to the Composite parent's class delete_child
+procedure.
+The delete_child procedure pointer is of type
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='_XtWidgetProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtWidgetProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the child being deleted.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Adding_and_Removing_Children_from_the_Managed_Set">
+<title>Adding and Removing Children from the Managed Set</title>
+<para>
+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
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+The widget argument specifies the composite widget whose managed child
+set has been modified.
+</para>
+
+<sect2 id="Managing_Children">
+<title>Managing Children</title>
+<para>
+To add a list of widgets to the geometry-managed (and hence displayable)
+subset of their Composite parent, use
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>.
+</para>
+
+<para>typedef Widget *WidgetList;</para>
+
+<funcsynopsis id='XtManageChildren'>
+<funcprototype>
+<funcdef>void <function>XtManageChildren</function></funcdef>
+ <paramdef>WidgetList <parameter>children</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_children</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of child widgets. Each child must be of class
+RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of children in the list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>
+function performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Issues an error if the children do not all have the same parent or
+if the parent's class is not a subclass of
+<function>compositeWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Returns immediately if the common parent is being destroyed;
+otherwise, for each unique child on the list,
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>
+ignores the child if it already is managed or is being destroyed,
+and marks it if not.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent is realized and after all children have been marked,
+it makes some of the newly managed children viewable:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Calls the change_managed routine of the widgets' parent.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+on each previously unmanaged child that is unrealized.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Maps each previously unmanaged child that has <emphasis remap='I'>map_when_managed</emphasis>
+<function>True</function>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+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 <emphasis remap='I'>managed</emphasis> field is
+<function>True</function>
+and should ignore all other children.
+Note that some composite widgets, especially fixed boxes, call
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+from their insert_child procedure.
+</para>
+
+<para>
+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
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>,
+which first updates the <emphasis remap='I'>x</emphasis> and <emphasis remap='I'>y</emphasis> fields and which then calls
+<function>XMoveWindow</function>.
+</para>
+
+<para>
+If the composite widget wishes to change the size or border width of any of
+its children, it calls
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>,
+which first updates the
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, and <emphasis remap='I'>border_width</emphasis>
+fields and then calls
+<function>XConfigureWindow</function>.
+Simultaneous repositioning and resizing may be done with
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>;
+see <xref linkend='Widget_Placement_and_Sizing' />.
+</para>
+
+<para>
+To add a single child to its parent widget's set of managed children, use
+<xref linkend='XtManageChild' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtManageChild'>
+<funcprototype>
+<funcdef>void <function>XtManageChild</function></funcdef>
+ <paramdef>Widget <parameter>child</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>child</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the child. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+function constructs a
+<function>WidgetList</function>
+of length 1 and calls
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To create and manage a child widget in a single procedure, use
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
+or
+<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreateManagedWidget'>
+<funcprototype>
+<funcdef>Widget <function>XtCreateManagedWidget</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource instance name for the created widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created widget. (rC
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Composite or any
+subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
+function is a convenience routine that calls
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+and
+<xref linkend='XtManageChild' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaCreateManagedWidget'>
+<funcprototype>
+<funcdef>Widget <function>XtVaCreateManagedWidget</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource instance name for the created widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created widget. (rC
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Composite or any
+subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced
+by a varargs list, as described in Section 2.5.1.
+</para>
+</sect2>
+
+<sect2 id="Unmanaging_Children">
+<title>Unmanaging Children</title>
+<para>
+To remove a list of children from a parent widget's managed list, use
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUnmanageChildren'>
+<funcprototype>
+<funcdef>void <function>XtUnmanageChildren</function></funcdef>
+ <paramdef>WidgetList <parameter>children</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_children</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of child widgets. Each child must be of class
+RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of children.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+function performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Returns immediately if the common parent is being destroyed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Issues an error if the children do not all have the same parent
+or if the parent is not a subclass of
+<function>compositeWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+For each unique child on the list,
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+ignores the child if it is unmanaged; otherwise it performs the following:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Marks the child as unmanaged.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the child is realized and the <emphasis remap='I'>map_when_managed</emphasis> field is
+<function>True</function>,
+it is unmapped.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+If the parent is realized and if any children have become unmanaged,
+calls the change_managed routine of the widgets' parent.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+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,
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+should be called instead;
+see <xref linkend='Exiting_from_an_Application' />.
+</para>
+
+<para>
+To remove a single child from its parent widget's managed set, use
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUnmanageChild'>
+<funcprototype>
+<funcdef>void <function>XtUnmanageChild</function></funcdef>
+ <paramdef>Widget <parameter>child</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>child</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the child. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>
+function constructs a widget list
+of length 1 and calls
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Bundling_Changes_to_the_Managed_Set">
+<title>Bundling Changes to the Managed Set</title>
+<para>
+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.
+</para>
+
+<para>
+To simultaneously remove from and add to the geometry-managed
+set of children of a composite parent, use
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtChangeManagedSet'>
+<funcprototype>
+<funcdef>void <function>XtChangeManagedSet</function></funcdef>
+ <paramdef>WidgetList <parameter>unmanage_children</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_unmanage_children</parameter></paramdef>
+ <paramdef>XtDoChangeProc <parameter>do_change_proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>WidgetList <parameter>manage_children</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_manage_children</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>unmanage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of widget children to initially remove from the managed set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_unmanage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the <emphasis remap='I'>unmanage_children</emphasis> list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>do_change_proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a procedure to invoke between unmanaging
+and managing the children, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies client data to be passed to the do_change_proc.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>manage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of widget children to finally add to the managed set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_manage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the <emphasis remap='I'>manage_children</emphasis> list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
+function performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Returns immediately if <emphasis remap='I'>num_unmanage_children</emphasis> and
+<emphasis remap='I'>num_manage_children</emphasis> are both 0.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Issues a warning and returns if the widgets specified in the
+<emphasis remap='I'>manage_children</emphasis> and
+the <emphasis remap='I'>unmanage_children</emphasis> lists do not all have the same parent or if
+that parent is not a subclass of
+<function>compositeWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Returns immediately if the common parent is being destroyed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If <emphasis remap='I'>do_change_proc</emphasis> is not NULL and the parent's
+<function>CompositeClassExtension</function>
+<emphasis remap='I'>allows_change_managed_set</emphasis> field is
+<function>False</function>,
+then
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
+performs the following:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+(<emphasis remap='I'>unmanage_children</emphasis>, <emphasis remap='I'>num_unmanage_children</emphasis>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls the <emphasis remap='I'>do_change_proc</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>
+(<emphasis remap='I'>manage_children</emphasis>, <emphasis remap='I'>num_manage_children</emphasis>).
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+Otherwise, the following is performed:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+For each child on the <emphasis remap='I'>unmanage_children</emphasis> list; if the child is
+already unmanaged it is ignored, otherwise it is marked as unmanaged,
+and if it is realized and its <emphasis remap='I'>map_when_managed</emphasis> field is
+<function>True</function>,
+it is unmapped.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If <emphasis remap='I'>do_change_proc</emphasis> is non-NULL, the procedure is invoked.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+For each child on the <emphasis remap='I'>manage_children</emphasis> list; if the child is already
+managed or is being destroyed, it is ignored; otherwise it is
+marked as managed.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+on each previously unmanaged child that is unrealized and
+mapping each previously unmanaged child that has <emphasis remap='I'>map_when_managed</emphasis>
+<function>True</function>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+If no
+<function>CompositeClassExtension</function>
+record is found in the parent's composite class part <emphasis remap='I'>extension</emphasis> field
+with record type
+<emphasis role='strong'>NULLQUARK</emphasis>
+and version greater than 1, and if
+<function>XtInheritChangeManaged</function>
+was specified in the parent's class record during class initialization,
+the value of the <emphasis remap='I'>allows_change_managed_set</emphasis>
+field is inherited from the superclass. The value inherited from
+<function>compositeWidgetClass</function>
+for the <emphasis remap='I'>allows_change_managed_set</emphasis> field is
+<function>False</function>.
+</para>
+
+<para>
+It is not an error to include a child in both the <emphasis remap='I'>unmanage_children</emphasis>
+and the <emphasis remap='I'>manage_children</emphasis> lists. The effect of such a call is that
+the child remains managed following the call, but the <emphasis remap='I'>do_change_proc</emphasis> is
+able to affect the child while it is in an unmanaged state.
+</para>
+
+<para>
+The <emphasis remap='I'>do_change_proc</emphasis> is of type
+<xref linkend='XtDoChangeProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDoChangeProc'>
+<funcprototype>
+<funcdef>typedef void <function>*XtDoChangeProc</function></funcdef>
+
+ <paramdef>Widget <parameter>composite_parent</parameter></paramdef>
+ <paramdef>WidgetList <parameter>unmange_children</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_unmanage_children</parameter></paramdef>
+ <paramdef>WidgetList <parameter>manage_children</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_manage_children</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>composite_parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the composite parent whose managed set is being altered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>unmanage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the list of children just removed from the managed set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_unmanage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the number of entries in the <emphasis remap='I'>unmanage_children</emphasis> list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>manage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the list of children about to be added to the managed set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_manage_children</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the number of entries in the <emphasis remap='I'>manage_children</emphasis> list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data passed to
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>do_change_proc</emphasis> procedure is used by the caller of
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
+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
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
+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 <emphasis remap='I'>do_change_proc</emphasis> procedure
+changes the geometry of a child or of a descendant of a child, then
+that child should be included in the <emphasis remap='I'>unmanage_children</emphasis> and
+<emphasis remap='I'>manage_children</emphasis> lists.
+</para>
+</sect2>
+
+<sect2 id="Determining_if_a_Widget_Is_Managed">
+<title>Determining if a Widget Is Managed</title>
+<para>
+To determine the managed state of a given child widget, use
+<xref linkend='XtIsManaged' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtIsManaged'>
+<funcprototype>
+<funcdef>Boolean <function>XtIsManaged</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtIsManaged' xrefstyle='select: title'/>
+function returns
+<function>True</function>
+if the specified widget is of class RectObj or any subclass thereof
+and is managed, or
+<function>False</function>
+otherwise.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Controlling_When_Widgets_Get_Mapped">
+<title>Controlling When Widgets Get Mapped</title>
+<para>
+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 <emphasis remap='I'>map_when_managed</emphasis> field to
+<function>False</function>.
+</para>
+
+<para>
+To change the value of a given widget's <emphasis remap='I'>map_when_managed</emphasis> field, use
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetMappedWhenManaged'>
+<funcprototype>
+<funcdef>void <function>XtSetMappedWhenManaged</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Boolean <parameter>map_when_managed</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>map_when_managed</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a Boolean value that indicates the new value
+that is stored into the widget's <emphasis remap='I'>map_when_managed</emphasis>
+field.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the widget is realized and managed,
+and if <emphasis remap='I'>map_when_managed</emphasis> is
+<function>True</function>,
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>
+maps the window.
+If the widget is realized and managed,
+and if <emphasis remap='I'>map_when_managed</emphasis> is
+<function>False</function>,
+it unmaps the window.
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>
+is a convenience function that is equivalent to (but slightly faster than)
+calling
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+and setting the new value for the XtNmappedWhenManaged resource
+then mapping the widget as appropriate.
+As an alternative to using
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>
+to control mapping,
+a client may set <emphasis remap='I'>mapped_when_managed</emphasis> to
+<function>False</function>
+and use
+<xref linkend='XtMapWidget' xrefstyle='select: title'/>
+and
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>
+explicitly.
+</para>
+
+<para>
+To map a widget explicitly, use
+<xref linkend='XtMapWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMapWidget'>
+<funcprototype>
+<funcdef> <function>XtMapWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To unmap a widget explicitly, use
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUnmapWidget'>
+<funcprototype>
+<funcdef> <function>XtUnmapWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+</sect1>
+
+<sect1 id="Constrained_Composite_Widgets">
+<title>Constrained Composite Widgets</title>
+<para>
+The Constraint
+widget class is a subclass of
+<function>compositeWidgetClass</function>.
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+To make it easy for widgets and the Intrinsics to keep track of the
+constraints associated with a child,
+every widget has a <emphasis remap='I'>constraints</emphasis> 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
+<function>constraintWidgetClass</function>,
+then the child's <emphasis remap='I'>constraints</emphasis> field is NULL.
+</para>
+
+<para>
+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:
+</para>
+<literallayout >
+typedef struct {
+ Dimension max_width, max_height;
+} MaxConstraintPart;
+typedef struct {
+ MaxConstraintPart max;
+} MaxConstraintRecord, *MaxConstraint;
+</literallayout>
+<para>
+A subclass of this widget class that also needs to maintain a minimum size would
+define its constraint record as follows:
+</para>
+<literallayout >
+typedef struct {
+ Dimension min_width, min_height;
+} MinConstraintPart;
+typedef struct {
+ MaxConstraintPart max;
+ MinConstraintPart min;
+} MaxMinConstraintRecord, *MaxMinConstraint;
+</literallayout>
+<para>
+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
+<function>ConstraintClassPart</function>
+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.
+</para>
+
+<para>
+The
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+function uses the <emphasis remap='I'>constraint_size</emphasis> field in the parent's class record
+to allocate a constraint record when a child is created.
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+When the
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+and
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+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.
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+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
+<function>ConstraintClassExtension</function>
+record in the
+<function>ConstraintClassPart</function>
+<emphasis remap='I'>extension</emphasis>
+fields with a record type of
+<emphasis role='strong'>NULLQUARK</emphasis>
+and the <emphasis remap='I'>get_values_hook</emphasis> field in
+the extension record is non-NULL,
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+calls the get_values_hook
+procedure(s) to allow the parent to return derived constraint fields.
+</para>
+
+<para>
+The
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+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;
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+does this automatically.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH04 b/libXt/specs/CH04
deleted file mode 100644
index 0291aa333..000000000
--- a/libXt/specs/CH04
+++ /dev/null
@@ -1,1998 +0,0 @@
-.\" $Xorg: CH04,v 1.3 2000/08/17 19:42:44 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 4\fP\s-1
-
-\s+1\fBShell Widgets\fP\s-1
-.sp 2
-.nr H1 4
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 4 \(em Shell Widgets
-.XE
-.IN "Shell" "" "@DEF@"
-.LP
-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.
-.LP
-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.
-.LP
-The five types of public shells are:
-.TS
-lw(1.5i) lw(4.25i).
-T{
-.PN OverrideShell
-T} T{
-Used for shell windows that completely bypass the window manager
-(for example, pop-up menu shells).
-T}
-.sp
-T{
-.PN TransientShell
-T} T{
-Used for shell windows that have the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-property set. The effect of this property is dependent upon the
-window manager being used.
-T}
-.sp
-T{
-.PN TopLevelShell
-T} T{
-Used for normal top-level windows
-(for example, any additional top-level widgets an application needs).
-T}
-.sp
-T{
-.PN ApplicationShell
-T} T{
-Formerly used for the single main top-level window that
-the window manager identifies as an application instance and
-made obsolete by SessionShell.
-T}
-.IN "ApplicationShell" "" "@DEF@"
-.sp
-T{
-.PN SessionShell
-T} T{
-Used for the single main top-level window that
-the window manager identifies as an application instance and
-that interacts with the session manager.
-T}
-.IN "SessionShell" "" "@DEF@"
-.TE
-
-.NH 2
-Shell Widget Definitions
-.XS
-\*(SN Shell Widget Definitions
-.XE
-.LP
-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.
-.LP
-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.
-.LP
-The eight different types of shells are:
-.TS
-lw(1.5i) lw(4.5i).
-T{
-.PN Shell
-T} T{
-The base class for shell widgets; provides the
-fields needed for all types of shells.
-Shell
-is a direct subclass of
-.PN compositeWidgetClass .
-T}
-.sp 6p
-T{
-.PN OverrideShell
-T} T{
-A subclass of Shell; used for shell windows that completely
-bypass the window manager.
-T}
-.sp 6p
-T{
-.PN WMShell
-T} T{
-A subclass of Shell; contains fields needed by the
-common window manager protocol.
-T}
-.sp 6p
-T{
-.PN VendorShell
-T} T{
-A subclass of WMShell; contains fields used by
-vendor-specific window managers.
-T}
-.sp 6p
-T{
-.PN TransientShell
-T} T{
-A subclass of VendorShell; used for shell windows that
-desire the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-property.
-T}
-.sp 6p
-T{
-.PN TopLevelShell
-T} T{
-A subclass of VendorShell; used for normal top-level windows.
-T}
-.sp 6p
-T{
-.PN ApplicationShell
-T} T{
-A subclass of TopLevelShell; may be used for an application's additional
-root windows.
-T}
-.sp 6p
-T{
-.PN SessionShell
-T} T{
-A subclass of ApplicationShell; used for an application's
-main root window.
-T}
-.TE
-.LP
-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.
-
-.NH 3
-ShellClassPart Definitions
-.XS
-\*(SN ShellClassPart Definitions
-.XE
-.LP
-Only the
-Shell
-class has additional class fields, which are all contained in the
-.PN ShellClassExtensionRec .
-None of the other Shell classes have any additional class fields:
-.LP
-.KS
-.sM
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- XtPointer extension;
-} ShellClassPart, OverrideShellClassPart,
-WMShellClassPart, VendorShellClassPart, TransientShellClassPart,
-TopLevelShellClassPart, ApplicationShellClassPart, SessionShellClassPart;
-.De
-.LP
-.eM
-.KE
-The full Shell class record definitions are:
-.IN "ShellClassExtension" "" "@DEF@"
-.IN "ShellClassExtensionRec" "" "@DEF@"
-.LP
-.KS
-.sM
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct _ShellClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ShellClassPart shell_class;
-} ShellClassRec;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- XtPointer next_extension; See Section 1.6.12
- XrmQuark record_type; See Section 1.6.12
- long version; See Section 1.6.12
- Cardinal record_size; See Section 1.6.12
- XtGeometryHandler root_geometry_manager; See below
-} ShellClassExtensionRec, *ShellClassExtension;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct _OverrideShellClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ShellClassPart shell_class;
- OverrideShellClassPart override_shell_class;
-} OverrideShellClassRec;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct _WMShellClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ShellClassPart shell_class;
- WMShellClassPart wm_shell_class;
-} WMShellClassRec;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct _VendorShellClassRec {
- CoreClassPart core_class;
- CompositeClassPart composite_class;
- ShellClassPart shell_class;
- WMShellClassPart wm_shell_class;
- VendorShellClassPart vendor_shell_class;
-} VendorShellClassRec;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.LP
-.eM
-.KE
-.KS
-The single occurrences of the class records and pointers for creating
-instances of shells are:
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-extern ShellClassRec shellClassRec;
-extern OverrideShellClassRec overrideShellClassRec;
-extern WMShellClassRec wmShellClassRec;
-extern VendorShellClassRec vendorShellClassRec;
-extern TransientShellClassRec transientShellClassRec;
-extern TopLevelShellClassRec topLevelShellClassRec;
-extern ApplicationShellClassRec applicationShellClassRec;
-extern SessionShellClassRec sessionShellClassRec;
-.sp
-extern WidgetClass shellWidgetClass;
-extern WidgetClass overrideShellWidgetClass;
-extern WidgetClass wmShellWidgetClass;
-extern WidgetClass vendorShellWidgetClass;
-extern WidgetClass transientShellWidgetClass;
-extern WidgetClass topLevelShellWidgetClass;
-extern WidgetClass applicationShellWidgetClass;
-extern WidgetClass sessionShellWidgetClass;
-.De
-.LP
-.eM
-.KE
-.KS
-The following opaque types and opaque variables are defined
-for generic operations on widgets whose class is a subclass of
-Shell.
-.TS
-lw(2.75i) lw(2.75i).
-_
-.sp 6p
-Types Variables
-.sp 6p
-_
-.sp 6p
-T{
-.PN ShellWidget
-T} T{
-.PN shellWidgetClass
-T}
-T{
-.PN OverrideShellWidget
-T} T{
-.PN overrideShellWidgetClass
-T}
-T{
-.PN WMShellWidget
-T} T{
-.PN wmShellWidgetClass
-T}
-T{
-.PN VendorShellWidget
-T} T{
-.PN vendorShellWidgetClass
-T}
-T{
-.PN TransientShellWidget
-T} T{
-.PN transientShellWidgetClass
-T}
-T{
-.PN TopLevelShellWidget
-T} T{
-.PN topLevelShellWidgetClass
-T}
-T{
-.PN ApplicationShellWidget
-T} T{
-.PN applicationShellWidgetClass
-T}
-T{
-.PN SessionShellWidget
-T} T{
-.PN sessionShellWidgetClass
-T}
-.PN ShellWidgetClass
-.PN OverrideShellWidgetClass
-.PN WMShellWidgetClass
-.PN VendorShellWidgetClass
-.PN TransientShellWidgetClass
-.PN TopLevelShellWidgetClass
-.PN ApplicationShellWidgetClass
-.PN SessionShellWidgetClass
-.sp 6p
-_
-.TE
-.KE
-.LP
-The declarations for all Intrinsics-defined shells except
-VendorShell appear in
-.PN Shell.h
-and
-.PN ShellP.h .
-VendorShell has separate public and private .h files which are included by
-.PN Shell.h
-and
-.PN ShellP.h .
-.LP
-.PN 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.
-.LP
-The symbolic constant for the
-.PN ShellClassExtension
-version identifier is
-.PN XtShellExtensionVersion
-(see Section 1.6.12).
-.IN "XtShellExtensionVersion" "" "@DEF@"
-.LP
-.IN "Shell" "root_geometry_manager"
-.IN "root_geometry_manager procedure"
-The root_geometry_manager procedure acts as
-the parent geometry manager for geometry requests made by shell
-widgets. When a shell widget calls either
-.PN XtMakeGeometryRequest
-or
-.PN XtMakeResizeRequest ,
-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
-.PN XtGeometryYes ;
-if the window manager denies the geometry
-request or does not change the window geometry within some timeout
-interval (equal to \fIwm_timeout\fP in the case of WMShells), the
-.IN "Shell" "wm_timeout" "@DEF@"
-.IN "wm_timeout" "" "@DEF@"
-root_geometry_manager procedure should return
-.PN XtGeometryNo .
-If the window manager makes some alternative geometry change, the
-root_geometry_manager procedure may return either
-.PN XtGeometryNo
-and handle the new geometry as a resize or
-.PN 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.
-.LP
-If no
-.PN ShellClassPart
-extension record is declared with \fIrecord_type\fP
-equal to
-.PN \s-1NULLQUARK\s+1 ,
-then
-.PN XtInheritRootGeometryManager
-is assumed.
-
-.NH 3
-ShellPart Definition
-.XS
-\*(SN ShellPart Definition
-.XE
-.LP
-The various shell widgets have the following additional instance
-fields defined in
-their widget records:
-.LP
-.IN "ShellPart" "" "@DEF@"
-.KS
-.sM
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.KE
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- int empty;
-} OverrideShellPart;
-.De
-.Ds 0
-.TA .5i 1i 1.5i 2.5i
-.ta .5i 1i 1.5i 2.5i
-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;
-.De
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- int vendor_specific;
-} VendorShellPart;
-.De
-.KE
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- Widget transient_for;
-} TransientShellPart;
-
-typedef struct {
- String icon_name;
- Boolean iconic;
- Atom icon_name_encoding;
-} TopLevelShellPart;
-.De
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- char * class;
- XrmClass xrm_class;
- int argc;
- char ** argv;
-} ApplicationShellPart;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-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;
-.De
-.LP
-.eM
-.KE
-.KS
-The full shell widget instance record definitions are:
-.LP
-.IN "ShellWidget" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
-} ShellRec, *ShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- OverrideShellPart override;
-} OverrideShellRec, *OverrideShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
-} WMShellRec, *WMShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
- VendorShellPart vendor;
-} VendorShellRec, *VendorShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
- VendorShellPart vendor;
- TransientShellPart transient;
-} TransientShellRec, *TransientShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
- VendorShellPart vendor;
- TopLevelShellPart topLevel;
-} TopLevelShellRec, *TopLevelShellWidget;
-.De
-.KE
-.KS
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-.IN "ApplicationShellWidget" "" "@DEF@"
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
- VendorShellPart vendor;
- TopLevelShellPart topLevel;
- ApplicationShellPart application;
-} ApplicationShellRec, *ApplicationShellWidget;
-.De
-.KE
-.KS
-.IN "SessionShellWidget" "" "@DEF@"
-.Ds 0
-.TA .5i 2.5i 4.5i
-.ta .5i 2.5i 4.5i
-typedef struct {
- CorePart core;
- CompositePart composite;
- ShellPart shell;
- WMShellPart wm;
- VendorShellPart vendor;
- TopLevelShellPart topLevel;
- ApplicationShellPart application;
- SessionShellPart session;
-} SessionShellRec, *SessionShellWidget;
-.De
-.LP
-.eM
-.KE
-
-.NH 3
-Shell Resources
-.XS
-\fB\*(SN Shell Resources\fP
-.XE
-.LP
-.IN "ShellWidget" "Resources"
-The resource names, classes, and representation types specified in
-the
-.PN shellClassRec
-resource list are:
-.LP
-.TS
-lw(1.7i) lw(1.7i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNallowShellResize XtCAllowShellResize XtRBoolean
-XtNcreatePopupChildProc XtCCreatePopupChildProc XtRFunction
-XtNgeometry XtCGeometry XtRString
-XtNoverrideRedirect XtCOverrideRedirect XtRBoolean
-XtNpopdownCallback XtCCallback XtRCallback
-XtNpopupCallback XtCCallback XtRCallback
-XtNsaveUnder XtCSaveUnder XtRBoolean
-XtNvisual XtCVisual XtRVisual
-.sp 6p
-_
-.TE
-.LP
-OverrideShell
-declares no additional resources beyond those defined by
-Shell.
-.LP
-The resource names, classes, and representation types specified in
-the
-.PN wmShellClassRec
-.IN "WMShell" "resources"
-resource list are:
-.LP
-.TS
-lw(2.1i) lw(2.1i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-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
-.sp 6p
-_
-.TE
-.LP
-The class resource list for
-VendorShell
-is implementation-defined.
-.LP
-The resource names, classes, and representation types that are specified in the
-.PN transient\%ShellClassRec
-.IN "TransientShell" "resources"
-resource list are:
-.LP
-.TS
-lw(1.7i) lw(1.7i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNtransientFor XtCTransientFor XtRWidget
-.sp 6p
-_
-.TE
-.LP
-The resource names, classes, and representation types that are specified in the
-.PN topLevelShellClassRec
-.IN "TopLevelShell" "resources"
-resource list are:
-.LP
-.TS
-lw(1.7i) lw(1.7i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNiconName XtCIconName XtRString
-XtNiconNameEncoding XtCIconNameEncoding XtRAtom
-XtNiconic XtCIconic XtRBoolean
-.sp 6p
-_
-.TE
-.LP
-The resource names, classes, and representation types that are specified in the
-.PN application\%ShellClassRec
-resource list are:
-.LP
-.TS
-lw(1.7i) lw(1.7i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNargc XtCArgc XtRInt
-XtNargv XtCArgv XtRStringArray
-.sp 6p
-_
-.TE
-.LP
-.KS
-The resource names, classes, and representation types that are specified
-in the
-.PN sessionShellClassRec
-resource list are:
-.LP
-.TS
-lw(1.7i) lw(1.7i) lw(1.2i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-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
-.sp 6p
-_
-.TE
-.KE
-.NH 3
-ShellPart Default Values
-.XS
-\fB\*(SN ShellPart Default Values\fP
-.XE
-.LP
-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:
-.TS
-lw(1.75i) lw(3i).
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-geometry NULL
-create_popup_child_proc NULL
-grab_kind (none)
-spring_loaded (none)
-popped_up T{
-.PN False
-T}
-allow_shell_resize T{
-.PN False
-T}
-client_specified (internal)
-save_under T{
-.PN True
-for
-OverrideShell
-and
-TransientShell,
-.PN False
-otherwise
-T}
-override_redirect T{
-.PN True
-for
-OverrideShell,
-.PN False
-otherwise
-T}
-popup_callback NULL
-popdown_callback NULL
-visual T{
-.PN CopyFromParent
-T}
-.sp 6p
-_
-.TE
-.LP
-The \fIgeometry\fP field specifies the size and position
-and is usually given only on a command line or in a defaults file.
-If the \fIgeometry\fP field is non-NULL when
-a widget of class WMShell
-is realized, the geometry specification is parsed using
-.PN XWMGeometry
-with a default geometry
-string constructed from the values of \fIx\fP, \fIy\fP, \fIwidth\fP,
-\fIheight\fP, \fIwidth_inc\fP,
-and \fIheight_inc\fP and the size and position flags in the window manager
-size hints are set. If the geometry specifies an x or y position,
-then
-.PN USPosition
-is set. If the geometry specifies a width or height, then
-.PN USSize
-is set. Any fields in the geometry specification
-override the corresponding values in the
-Core \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP fields.
-If \fIgeometry\fP is NULL or contains only a partial specification, then the
-Core \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP fields are used and
-.PN PPosition
-and
-.PN PSize
-are set as appropriate.
-The geometry string is not copied by any of the \*(xI
-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 Section 16.4
-in \fI\*(xL\fP.
-.LP
-The \fIcreate_popup_child_proc\fP procedure is called by the
-.PN XtPopup
-procedure and may remain NULL.
-The \fIgrab_kind\fP, \fIspring_loaded\fP,
-and \fIpopped_up\fP fields maintain widget
-state information as described under
-.PN XtPopup ,
-.PN XtMenuPopup ,
-.PN XtPopdown ,
-and
-.PN XtMenuPopdown .
-.IN "allowShellResize" "" "@DEF@"
-The \fIallow_shell_resize\fP field controls whether the widget contained
-by the shell is allowed to try to resize itself.
-If allow_shell_resize is
-.PN False ,
-any geometry requests made by the child will always return
-.PN XtGeometryNo
-without interacting with the window manager.
-Setting \fIsave_under\fP
-.PN 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 \fIoverride_redirect\fP
-.PN True
-determines
-whether the window manager can intercede when the shell window
-is mapped.
-For further information on override_redirect,
-see Section 3.2 in \fI\*(xL\fP and Sections 4.1.10 and 4.2.2 in the
-\fI\*(xC\fP.
-The pop-up and pop-down callbacks are called during
-.PN XtPopup
-and
-.PN XtPopdown .
-The default value of the \fIvisual\fP resource is the symbolic value
-.PN CopyFromParent .
-The \*(xI do not need to query the parent's visual type when the
-default value is used; if a client using
-.PN XtGetValues
-to examine the visual type receives the value
-.PN CopyFromParent ,
-it must then use
-.PN XGetWindowAttributes
-if it needs the actual visual type.
-
-.LP
-The default values for Shell fields in
-WMShell
-and its subclasses are:
-.LP
-.IN "XtUnspecifiedShellInt" "" "@DEF@"
-.IN "XtUnspecifiedWindow"
-.TS
-lw(1i) lw(4i).
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-title T{
-Icon name, if specified, otherwise the application's name
-T}
-wm_timeout Five seconds, in units of milliseconds
-wait_for_wm T{
-.PN True
-T}
-transient T{
-.PN True
-for
-TransientShell,
-.PN False
-otherwise
-T}
-urgency T{
-.PN False
-T}
-client_leader NULL
-window_role NULL
-min_width \fBXtUnspecifiedShellInt\fP
-min_height \fBXtUnspecifiedShellInt\fP
-max_width \fBXtUnspecifiedShellInt\fP
-max_height \fBXtUnspecifiedShellInt\fP
-width_inc \fBXtUnspecifiedShellInt\fP
-height_inc \fBXtUnspecifiedShellInt\fP
-min_aspect_x \fBXtUnspecifiedShellInt\fP
-min_aspect_y \fBXtUnspecifiedShellInt\fP
-max_aspect_x \fBXtUnspecifiedShellInt\fP
-max_aspect_y \fBXtUnspecifiedShellInt\fP
-input T{
-.PN False
-T}
-initial_state Normal
-icon_pixmap None
-icon_window None
-icon_x \fBXtUnspecifiedShellInt\fP
-icon_y \fBXtUnspecifiedShellInt\fP
-icon_mask None
-window_group \fBXtUnspecifiedWindow\fP
-base_width \fBXtUnspecifiedShellInt\fP
-base_height \fBXtUnspecifiedShellInt\fP
-win_gravity \fBXtUnspecifiedShellInt\fP
-title_encoding See text
-.sp 6p
-_
-.TE
-.LP
-The \fItitle\fP and
-\fItitle_encoding\fP fields are stored in the
-.PN \s-1WM_NAME\s+1
-property on the shell's window by the WMShell realize procedure.
-If the \fItitle_encoding\fP field is
-.PN None ,
-the \fItitle\fP string is assumed to be in the encoding of the current
-locale and the encoding of the
-.PN \s-1WM_NAME\s+1
-property is set to
-.PN XStdICCTextStyle .
-If a language procedure has not been set
-the default value of \fItitle_encoding\fP is
-\fB\s-1XA_STRING\s+1\fP, otherwise the default value is
-.PN None .
-The \fIwm_timeout\fP 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 \fIwait_for_wm\fP to
-.PN False
-(later events may reset this value).
-When \fIwait_for_wm\fP is
-.PN False ,
-the shell does not wait for a response, but relies on asynchronous
-notification.
-If \fItransient\fP is
-.PN True ,
-the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-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 \fI\*(xC\fP for more details.
-.LP
-The realize and set_values procedures of WMShell store the
-.PN \s-1WM_CLIENT_LEADER\s+1
-property on the shell window.
-When \fIclient_leader\fP 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 \fIclient_leader\fP is NULL and the shell widget has a NULL parent,
-the widget's window is used as the value of the
-property.
-When \fIclient_leader\fP is NULL and the shell widget has a non-NULL parent,
-a search is made for the closest shell ancestor
-with a non-NULL \fIclient_leader\fP,
-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.
-.LP
-When the value of \fIwindow_role\fP is not NULL, the
-realize and set_values procedures store the
-.PN \s-1WM_WINDOW_ROLE\s+1
-property on the shell's window with the value of the resource.
-.LP
-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
-.PN XtUnspecifiedShellInt ,
-the value of the field is modified as follows:
-.br
-.sp
-.TS
-lw(2i) lw(3i).
-_
-.sp 6p
-Field Replacement
-.sp 6p
-_
-.sp 6p
-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 T{
-Value returned by
-.PN XWMGeometry
-if called,
-else \fBNorthWestGravity\fP
-T}
-.sp 6p
-_
-.TE
-
-.IN "XWMGeometry"
-.LP
-If the shell widget has a non-NULL parent, then the
-realize and set_values procedures replace the value
-.PN XtUnspecifiedWindow
-.IN "XtUnspecifiedWindow" "" "@DEF@"
-in the \fIwindow_group\fP field with the window id of the root widget
-of the widget tree if the
-root widget is realized. The symbolic constant
-.PN XtUnspecifiedWindowGroup
-.IN "XtUnspecifiedWindowGroup" "" "@DEF@"
-may be used to indicate that the \fIwindow_group\fP hint flag bit is not
-to be set. If \fItransient\fP is
-.PN True ,
-the shell's class is not a subclass of
-TransientShell,
-and \fIwindow_group\fP is not
-.PN XtUnspecifiedWindowGroup ,
-the WMShell realize and set_values procedures then store the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-property with the value of \fIwindow_group\fP.
-.LP
-.KS
-Transient
-shells have the following additional resource:
-.TS
-l l.
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-transient_for NULL
-.sp 6p
-_
-.TE
-.KE
-.LP
-The realize and set_values procedures of
-TransientShell
-store the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-property on the shell window if \fItransient\fP is
-.PN True .
-If \fItransient_for\fP is non-NULL and the widget specified by
-\fItransient_for\fP is realized, then its window is used as the value of the
-.PN \s-1WM_TRANSIENT_FOR\s+1
-property; otherwise, the value of \fIwindow_group\fP is used.
-.LP
-.PN TopLevel
-shells have the the following additional resources:
-.TS
-l l.
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-icon_name Shell widget's name
-iconic T{
-.PN False
-T}
-icon_name_encoding See text
-.sp 6p
-_
-.TE
-.LP
-The \fIicon_name\fP
-and \fIicon_name_encoding\fP fields are stored in the
-.PN \s-1WM_ICON_NAME\s+1
-property on the shell's window by the TopLevelShell realize
-procedure.
-If the \fIicon_name_encoding\fP field is
-.PN None ,
-the \fIicon_name\fP string is assumed to be in the encoding of the
-current locale and the encoding of the
-.PN \s-1WM_ICON_NAME\s+1
-property is set to
-.PN XStdICCTextStyle .
-If a language procedure has not been set,
-the default value of \fIicon_name_encoding\fP is
-\fB\s-1XA_STRING\s+1\fP, otherwise the default value is
-.PN None .
-The \fIiconic\fP 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
-.PN \s-1WM_CHANGE_STATE\s+1
-message (as specified by the \fI\*(xC\fP)
-if this resource is changed from
-.PN False
-to
-.PN True
-and will call
-.PN XtPopup
-specifying \fIgrab_kind\fP as
-.PN XtGrabNone
-if \fIiconic\fP is changed from
-.PN True
-to
-.PN 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 \fIinitial_state\fP to
-.PN IconicState
-if \fIiconic\fP is
-.PN True .
-.LP
-Application
-shells have the following additional resources:
-.br
-.ne 4
-.TS
-l l.
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-argc 0
-argv NULL
-.sp 6p
-_
-.TE
-.LP
-The \fIargc\fP and \fIargv\fP fields are used to initialize
-the standard property
-.PN \s-1WM_COMMAND\s+1 .
-See the \fI\*(xC\fP for more information.
-.LP
-The default values for the SessionShell instance fields,
-which are filled in from the resource lists and by the
-initialize procedure, are
-.TS
-l l.
-_
-.sp 6p
-Field Default Value
-.sp 6p
-_
-.sp 6p
-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 T{
-.PN True
-T}
-program_path See text
-resign_command NULL
-restart_command See text
-restart_style T{
-.PN SmRestartIfRunning
-T}
-save_callbacks NULL
-save_complete_callbacks NULL
-session_id NULL
-shutdown_command NULL
-.sp 6p
-_
-.TE
-.LP
-The \fIconnection\fP field contains the session connection object or NULL
-if a session connection is not being managed by this widget.
-.LP
-The \fIsession_id\fP is an identification assigned to the session
-participant by the session manager.
-The \fIsession_id\fP 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 \fIsession_id\fP field.
-When not NULL, the \fIsession_id\fP 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
-.PN \s-1SM_CLIENT_ID\s+1
-property on the client leader's window.
-.LP
-If \fIjoin_session\fP is
-.PN False ,
-the widget will not attempt to establish a
-connection to the session manager at shell creation time.
-See Sections 4.2.1 and 4.2.4
-for more information on the functionality of this resource.
-.LP
-The \fIrestart_command\fP, \fIclone_command\fP, \fIdiscard_command\fP,
-\fIresign_command\fP, \fIshutdown_command\fP, \fIenvironment\fP,
-\fIcurrent_dir\fP, \fIprogram_path\fP, and
-\fIrestart_style\fP fields contain standard session properties.
-.LP
-When a session connection is established or newly managed by the shell,
-the shell initialize and set_values methods check the values of the
-\fIrestart_command\fP, \fIclone_command\fP, and \fIprogram_path\fP
-resources. At that time, if \fIrestart_command\fP is NULL, the value
-of the \fIargv\fP resource will be copied to \fIrestart_command\fP.
-Whether or not \fIrestart_command\fP was NULL,
-if \*Q\fR-xtsessionID\fP\*U \*Q\fR<session id>\*U does not
-already appear in the \fIrestart_command\fP, it will be added by the
-initialize and set_values methods at the beginning of the command arguments;
-if the \*Q\fR-xtsessionID\fP\*U argument already appears with an incorrect
-\fRsession id\fP in the following argument, that argument
-will be replaced with the current \fRsession id\fP.
-.LP
-After this, the shell initialize and set_values procedures check the
-\fIclone_command\fP. If \fIclone_command\fP is NULL,
-\fIrestart_command\fP will be copied to \fIclone_command\fP,
-except the \*Q\fR-xtsessionID\fP\*U and following argument will not be copied.
-.LP
-Finally, the shell initialize and set_values procedures check the
-\fIprogram_path\fP. If \fIprogram_path\fP is NULL, the
-first element of \fIrestart_command\fP is copied to \fIprogram_path\fP.
-.LP
-The possible values of \fIrestart_style\fP are
-.PN SmRestartIfRunning ,
-.PN SmRestartAnyway ,
-.PN SmRestartImmediately ,
-and
-.PN SmRestartNever .
-A resource converter is registered for this resource;
-for the strings that it recognizes,
-see Section 9.6.1.
-.LP
-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.
-
-.NH 2
-Session Participation
-.XS
-\fB\*(SN Session Participation\fP
-.XE
-.LP
-Applications can participate in a user's session, exchanging messages
-with the session manager as described in the \fIX Session Management
-Protocol\fP and the \fIX Session Management Library\fP.
-.LP
-When a widget of
-.PN 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.
-
-.NH 3
-Joining a Session
-.XS
-\fB\*(SN Joining a Session\fP
-.XE
-.LP
-When a Session shell is created,
-if \fIconnection\fP is NULL,
-and if \fIjoin_session\fP is
-.PN True ,
-and if \fIargv\fP or \fIrestart_command\fP is not NULL,
-and if in POSIX environments the
-.PN \s-1SESSION_MANAGER\s+1
-environment variable is defined,
-the shell will attempt to establish a new connection with the session manager.
-.LP
-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 \fIconnection\fP 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.
-.LP
-In the Session shell set_values procedure,
-if \fIjoin_session\fP changes from
-.PN False
-to
-.PN True
-and \fIconnection\fP is NULL and when in POSIX environments the
-.PN \s-1SESSION_MANAGER\s+1
-environment variable is defined,
-the shell will attempt to open a connection to the session manager.
-If \fIconnection\fP changes from NULL to non-NULL, the
-Session shell
-will take over management of that session connection and will set
-\fIjoin_session\fP to
-.PN True .
-If \fIjoin_session\fP changes from
-.PN False
-to
-.PN True
-and \fIconnection\fP is not NULL, the
-Session shell will take over management of the session connection.
-.LP
-When a successful connection has been established, \fIconnection\fP
-contains the session connection ID for the session participant.
-When the shell begins to manage the connection, it will call
-.PN XtAppAddInput
-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 \fIconnection\fP is set to NULL.
-.LP
-While the connection is being managed, if a
-.PN SaveYourself ,
-.PN SaveYourselfPhase2 ,
-.PN Interact ,
-.PN ShutdownCancelled ,
-.PN SaveComplete ,
-or
-.PN 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
-.PN SaveYourselfPhase2Request ,
-.PN InteractRequest ,
-.PN InteractDone ,
-.PN SaveYourselfDone ,
-and
-.PN 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
-.PN SetProperties
-or a
-.PN 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.
-
-.NH 3
-Saving Application State
-.XS
-\fB\*(SN Saving Application State\fP
-.XE
-.LP
-The session manager instigates an application checkpoint by sending a
-.PN SaveYourself
-request.
-Applications are responsible for saving their state in response to the
-request.
-.LP
-When the
-.PN 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 \fIcall_data\fP parameter.
-.sp
-.LP
-.KS
-The checkpoint token in the \fIcall_data\fP parameter is of type
-.PN XtCheckpointToken .
-.LP
-.IN "XtCheckpointToken" "" "@DEF@"
-.IN "XtCheckpointTokenRec" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 2i 4i
-.ta .5i 2i 4i
-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;
-.De
-.LP
-.eM
-.KE
-The \fIsave_type\fP, \fIinteract_style\fP, \fIshutdown\fP, and \fIfast\fP
-fields of the token contain the parameters of the
-.PN SaveYourself
-message.
-The possible values of \fIsave_type\fP are
-.PN SmSaveLocal ,
-.PN SmSaveGlobal ,
-and
-.PN SmSaveBoth ;
-these indicate the type of information to be saved.
-The possible values of \fIinteract_style\fP are
-.PN SmInteractStyleNone ,
-.PN SmInteractStyleErrors ,
-and
-.PN SmInteractStyleAny ;
-these indicate whether user interaction would be permitted
-and, if so, what kind of interaction.
-If \fIshutdown\fP is
-.PN True ,
-the checkpoint is being performed in preparation for the end of the session.
-If \fIfast\fP is
-.PN True ,
-the client should perform the checkpoint as quickly as possible.
-If \fIcancel_shutdown\fP is
-.PN True ,
-a
-.PN ShutdownCancelled
-message has been received for the current save operation. (See Section 4.4.4.)
-The \fIphase\fP is used by manager clients, such as a window manager,
-to distinguish between the first and second phase of a save operation.
-The \fIphase\fP will be either 1 or 2.
-The remaining fields in the checkpoint token structure are provided for
-the application to communicate with the shell.
-.LP
-Upon entry to the first application save callback procedure, the return
-fields in the token have the following initial values:
-\fIinteract_dialog_type\fP is
-.PN SmDialogNormal ;
-\fIrequest_cancel\fP is
-.PN False ;
-\fIrequest_next_phase\fP is
-.PN False ;
-and \fIsave_success\fP is
-.PN 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.
-.LP
-The purpose of the token's \fIsave_success\fP field is to
-indicate the outcome of the entire operation to the
-session manager and ultimately, to the user.
-Returning
-.PN False
-indicates some portion of the application state
-could not be successfully saved. If any token is returned
-to the shell with \fIsave_success\fP
-.PN False ,
-tokens subsequently received
-by the application for the current save operation will show
-\fIsave_success\fP as
-.PN 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 \fIsave_success\fP
-.PN False .
-.LP
-Session participants that manage and save the state of other clients
-should structure their save or interact callbacks to
-set \fIrequest_next_phase\fP to
-.PN True
-when phase is 1, which will cause the shell to send the
-.PN SaveYourselfPhase2Request
-when the first phase is complete. When the
-.PN SaveYourselfPhase2
-message is received, the shell will invoke the save callbacks a
-second time with \fIphase\fP equal to 2.
-Manager clients should save the state of other clients
-when the callbacks are invoked the second time and \fIphase\fP equal to 2.
-.LP
-The application may request additional tokens while a checkpoint is under way,
-and these additional tokens must be returned by an explicit call.
-.sp
-.LP
-.KS
-To request an additional token for a save callback response that has a
-deferred outcome, use
-.PN XtSessionGetToken .
-.LP
-.IN "XtSessionGetToken" "" "@DEF@"
-.sM
-.FD 0
-XtCheckpointToken XtSessionGetToken(\fIwidget\fP)
-.br
- Widget \fIwidget\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the Session shell widget which manages session participation.
-.LP
-.eM
-The
-.PN XtSessionGetToken
-function will return NULL if no checkpoint operation is currently under way.
-.KE
-.sp
-.LP
-.KS
-To indicate the completion of checkpoint processing including user
-interaction, the application must signal the Session shell
-by returning all tokens.
-(See Sections 4.2.2.2 and 4.2.2.4).
-To return a token, use
-.PN XtSessionReturnToken .
-.LP
-.IN "XtSessionReturnToken" "" "@DEF@"
-.sM
-.FD 0
-void XtSessionReturnToken(\fItoken\fP)
-.br
- XtCheckpointToken \fItoken\fP;
-.FN
-.IP \fItoken\fP 1i
-Specifies a token that was received as the \fIcall_data\fP by a procedure
-on the interact callback list or a token that was received by a call to
-.PN XtSessionGetToken .
-.LP
-.eM
-.KE
-.LP
-Tokens passed as \fIcall_data\fP to save callbacks are implicitly
-returned when the save callback procedure returns.
-A save callback procedure should not call
-.PN XtSessionReturnToken
-on the token passed in its \fIcall_data\fP.
-
-.NH 4
-Requesting Interaction
-.XS
-\fB\*(SN Requesting Interaction\fP
-.XE
-.LP
-When the token \fIinteract_style\fP 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
-.PN XtSessionGetToken
-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
-.PN InteractRequest
-to the session manager when an interact request is not already outstanding
-for the application.
-.LP
-The type of interaction dialog that will be requested is specified by
-the \fIinteract_dialog_type\fP field in the checkpoint token.
-The possible values for \fIinteract_dialog_type\fP are
-.PN SmDialogError
-and
-.PN SmDialogNormal .
-If a token is returned with \fIinteract_dialog_type\fP containing
-.PN 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.
-.LP
-When a token is returned with \fIsave_success\fP
-.PN False
-or \fIinteract_dialog_type\fP
-.PN SmDialogError ,
-tokens subsequently passed to callbacks during the same active
-.PN SaveYourself
-response will reflect these changed values, indicating that
-an error condition has occurred during the checkpoint.
-.LP
-The \fIrequest_cancel\fP 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 \fIrequest_cancel\fP field is not examined by the shell.
-This is also true of tokens received through a call to
-.PN XtSessionGetToken .
-
-.NH 4
-Interacting with the User during a Checkpoint
-.XS
-\fB\*(SN Interacting with the User during a Checkpoint\fP
-.XE
-.LP
-When the session manager grants the application's request for user interaction,
-the Session shell receives an
-.PN 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 \fIcall_data\fP.
-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
-.PN XtSessionReturnToken .
-Returning the token completes the current step and triggers the next step
-in the sequence.
-.LP
-During interaction the client may request cancellation of a shutdown.
-When a token passed as \fIcall_data\fP to an interact procedure is returned,
-if \fIshutdown\fP is
-.PN True
-and \fIcancel_shutdown\fP is
-.PN False ,
-\fIrequest_cancel\fP indicates whether the
-application requests that the pending shutdown be cancelled.
-If \fIrequest_cancel\fP is
-.PN True ,
-the field will also be
-.PN 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
-.PN InteractDone
-message is sent to the session manager, indicating whether
-a pending session shutdown is requested to be cancelled.
-
-.NH 4
-Responding to a Shutdown Cancellation
-.XS
-\fB\*(SN Responding to a Shutdown Cancellation\fP
-.XE
-.LP
-Callbacks registered on the cancel callback list are invoked when the
-Session shell processes a
-.PN 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
-.PN SaveComplete
-or a
-.PN Die
-message.
-The \fIcall_data\fP for these callbacks is NULL.
-.LP
-When the shell notices that a pending shutdown has been cancelled,
-the token \fIcancel_shutdown\fP field will be
-.PN True
-in tokens subsequently given to the application.
-.LP
-Receiving notice of a shutdown cancellation does not cancel the
-pending execution of save callbacks or interact callbacks.
-After the cancel callbacks execute, if \fIinteract_style\fP is not
-.PN SmInteractStyleNone
-and the interact list is not empty,
-the procedures on the interact callback list will be executed
-and passed a token with \fIinteract_style\fP
-.PN SmInteractStyleNone .
-The application should not interact with the user, and the Session shell
-will not send an
-.PN InteractDone
-message.
-
-.NH 4
-Completing a Save
-.XS
-\fB\*(SN Completing a Save\fP
-.XE
-.LP
-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
-.PN XtSessionGetToken
-have been returned by corresponding calls to
-.PN XtSessionReturnToken .
-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
-.PN XtSessionReturnToken .
-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.
-.br
-.LP
-When the application has finished saving state,
-the Session shell will report the result to the session manager by
-sending the
-.PN SaveYourselfDone
-message.
-If the session is continuing, the shell will receive the
-.PN 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 \fIcall_data\fP for these callbacks is NULL.
-
-.NH 3
-Responding to a Shutdown
-.XS
-\fB\*(SN Responding to a Shutdown\fP
-.XE
-.LP
-Callbacks registered on the die callback list are invoked when the
-session manager sends a
-.PN 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 \fIcall_data\fP for these callbacks is NULL.
-
-.NH 3
-Resigning from a Session
-.XS
-\fB\*(SN Resigning from a Session\fP
-.XE
-.LP
-When the Session shell widget is destroyed, the destroy method will
-close the connection to the session manager by sending a
-.PN ConnectionClosed
-protocol message and will remove the input callback
-that was watching for session protocol messages.
-.LP
-When
-.PN XtSetValues
-is used to set \fIjoin_session\fP to
-.PN False ,
-the set_values method of the Session shell will close the
-connection to the session manager if one exists by sending a
-.PN ConnectionClosed
-message, and \fIconnection\fP will be set to NULL.
-.LP
-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 \fIjoin_session\fP to
-.PN False
-before exiting.
-.LP
-When
-.PN XtSetValues
-is used to set \fIconnection\fP to NULL,
-the Session shell will stop managing the connection, if one exists.
-However, that session connection will not be closed.
-.LP
-Applications that wish to ensure continuation of a session connection
-beyond the destruction of the shell should first retrieve the
-\fIconnection\fP resource value,
-then set the \fIconnection\fP resource to NULL,
-and then they may safely destroy the widget without losing control
-of the session connection.
-.LP
-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 \fIconnection\fP to NULL,
-remove the input callback, and
-call the procedures registered on the error callback list.
-The \fIcall_data\fP for these callbacks is NULL.
-.bp
diff --git a/libXt/specs/CH04.xml b/libXt/specs/CH04.xml
new file mode 100644
index 000000000..d01fe6eae
--- /dev/null
+++ b/libXt/specs/CH04.xml
@@ -0,0 +1,2498 @@
+<chapter id='Shell_Widgets'>
+<title>Shell Widgets</title>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>The five types of public shells are:</para>
+<variablelist>
+ <varlistentry>
+ <term>OverrideShell</term>
+ <listitem>
+ <para>
+ Used for shell windows that completely bypass the window manager
+ (for example, pop-up menu shells).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TransientShell</term>
+ <listitem>
+ <para>Used for shell windows that have the
+ <emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+ property set. The effect of this property is dependent upon the
+ window manager being used.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TopLevelShell</term>
+ <listitem>
+ <para>Used for normal top-level windows
+ (for example, any additional top-level widgets an application needs).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ApplicationShell</term>
+ <listitem>
+ <para>Formerly used for the single main top-level window that
+ the window manager identifies as an application instance and
+ made obsolete by SessionShell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SessionShell</term>
+ <listitem>
+ <para>
+ Used for the single main top-level window that
+ the window manager identifies as an application instance and
+ that interacts with the session manager.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<sect1 id="Shell_Widget_Definitions">
+<title>Shell Widget Definitions</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>The eight different types of shells are:</para>
+<variablelist>
+ <varlistentry>
+ <term>Shell</term>
+ <listitem>
+ <para>The base class for shell widgets; provides the
+ fields needed for all types of shells. Shell
+ is a direct subclass of
+ <emphasis role='strong'>compositeWidgetClass</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>OverrideShell</term>
+ <listitem>
+ <para>A subclass of Shell; used for shell windows that completely
+ bypass the window manager.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>WMShell</term>
+ <listitem>
+ <para>A subclass of Shell; contains fields needed by the
+ common window manager protocol.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>VendorShell</term>
+ <listitem>
+ <para>A subclass of WMShell; contains fields used by
+ vendor-specific window managers.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TransientShell</term>
+ <listitem>
+ <para>A subclass of VendorShell; used for shell windows that
+ desire the <emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+ property.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>TopLevelShell</term>
+ <listitem>
+ <para>A subclass of VendorShell; used for normal top-level windows.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>ApplicationShell</term>
+ <listitem>
+ <para>A subclass of TopLevelShell; may be used for an application's additional
+ root windows.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>SessionShell</term>
+ <listitem>
+ <para>A subclass of ApplicationShell; used for an application's
+ main root window.</para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+</para>
+
+<sect2 id="ShellClassPart_Definitions">
+<title>ShellClassPart Definitions</title>
+<para>
+Only the Shell
+class has additional class fields, which are all contained in the
+<function>ShellClassExtensionRec</function>.
+None of the other Shell classes have any additional class fields:
+</para>
+
+<literallayout >
+typedef struct {
+ XtPointer extension;
+} ShellClassPart, OverrideShellClassPart,
+WMShellClassPart, VendorShellClassPart, TransientShellClassPart,
+TopLevelShellClassPart, ApplicationShellClassPart, SessionShellClassPart;
+</literallayout>
+
+<para>The full Shell class record definitions are:</para>
+
+<literallayout >
+typedef struct _ShellClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ShellClassPart shell_class;
+} ShellClassRec;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ XtPointer next_extension; See <xref linkend='Class_Extension_Records' />
+ XrmQuark record_type; See <xref linkend='Class_Extension_Records' />
+ long version; See <xref linkend='Class_Extension_Records' />
+ Cardinal record_size; See <xref linkend='Class_Extension_Records' />
+ XtGeometryHandler root_geometry_manager; See below
+} ShellClassExtensionRec, *ShellClassExtension;
+</literallayout>
+
+<literallayout >
+typedef struct _OverrideShellClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ShellClassPart shell_class;
+ OverrideShellClassPart override_shell_class;
+} OverrideShellClassRec;
+</literallayout>
+
+<literallayout >
+typedef struct _WMShellClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ShellClassPart shell_class;
+ WMShellClassPart wm_shell_class;
+} WMShellClassRec;
+</literallayout>
+
+<literallayout >
+typedef struct _VendorShellClassRec {
+ CoreClassPart core_class;
+ CompositeClassPart composite_class;
+ ShellClassPart shell_class;
+ WMShellClassPart wm_shell_class;
+ VendorShellClassPart vendor_shell_class;
+} VendorShellClassRec;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<para>
+The single occurrences of the class records and pointers for creating
+instances of shells are:
+</para>
+
+<literallayout >
+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;
+</literallayout>
+
+<para>
+The following opaque types and opaque variables are defined
+for generic operations on widgets whose class is a subclass of
+Shell.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Types</entry>
+ <entry>Variables</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><emphasis role='strong'>ShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>shellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>OverrideShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>overrideShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>WMShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>wmShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>VendorShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>vendorShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>TransientShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>transientShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>TopLevelShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>topLevelShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>ApplicationShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>applicationShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>SessionShellWidget</emphasis></entry>
+ <entry><emphasis role='strong'>sessionShellWidgetClass</emphasis></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>ShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>OverrideShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>WMShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>VendorShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>TransientShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>TopLevelShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>ApplicationShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><emphasis role='strong'>SessionShellWidgetClass</emphasis></entry>
+ <entry></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The declarations for all Intrinsics-defined shells except
+VendorShell appear in
+<function>Shell.h</function>
+and
+<function>ShellP.h</function>.
+VendorShell has separate public and private .h files which are included by
+<function>Shell.h</function>
+and
+<function>ShellP.h</function>.
+</para>
+
+<para>
+<function>Shell.h</function>
+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.
+</para>
+
+<para>
+The symbolic constant for the
+<function>ShellClassExtension</function>
+version identifier is
+<function>XtShellExtensionVersion</function>
+(see <xref linkend='Class_Extension_Records' />).
+</para>
+
+<para>
+The root_geometry_manager procedure acts as
+the parent geometry manager for geometry requests made by shell
+widgets. When a shell widget calls either
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+or
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>,
+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
+<function>XtGeometryYes</function>;
+if the window manager denies the geometry
+request or does not change the window geometry within some timeout
+interval (equal to <emphasis remap='I'>wm_timeout</emphasis> in the case of WMShells), the
+root_geometry_manager procedure should return
+<function>XtGeometryNo</function>.
+If the window manager makes some alternative geometry change, the
+root_geometry_manager procedure may return either
+<function>XtGeometryNo</function>
+and handle the new geometry as a resize or
+<function>XtGeometryAlmost</function>
+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.
+</para>
+
+<para>
+If no
+<function>ShellClassPart</function>
+extension record is declared with <emphasis remap='I'>record_type</emphasis>
+equal to
+<emphasis role='strong'>NULLQUARK</emphasis>,
+then
+<function>XtInheritRootGeometryManager</function>
+is assumed.
+</para>
+</sect2>
+
+<sect2 id="ShellPart_Definition">
+<title>ShellPart Definition</title>
+<para>
+The various shell widgets have the following additional instance
+fields defined in
+their widget records:
+</para>
+
+<literallayout >
+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;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ int empty;
+} OverrideShellPart;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ int vendor_specific;
+} VendorShellPart;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ Widget transient_for;
+} TransientShellPart;
+typedef struct {
+ String icon_name;
+ Boolean iconic;
+ Atom icon_name_encoding;
+} TopLevelShellPart;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ char * class;
+ XrmClass xrm_class;
+ int argc;
+ char ** argv;
+} ApplicationShellPart;
+</literallayout>
+
+<literallayout >
+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;
+</literallayout>
+
+<para>
+The full shell widget instance record definitions are:
+</para>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+} ShellRec, *ShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ OverrideShellPart override;
+} OverrideShellRec, *OverrideShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+} WMShellRec, *WMShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+ VendorShellPart vendor;
+} VendorShellRec, *VendorShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+ VendorShellPart vendor;
+ TransientShellPart transient;
+} TransientShellRec, *TransientShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+ VendorShellPart vendor;
+ TopLevelShellPart topLevel;
+} TopLevelShellRec, *TopLevelShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+ VendorShellPart vendor;
+ TopLevelShellPart topLevel;
+ ApplicationShellPart application;
+} ApplicationShellRec, *ApplicationShellWidget;
+</literallayout>
+
+<literallayout >
+typedef struct {
+ CorePart core;
+ CompositePart composite;
+ ShellPart shell;
+ WMShellPart wm;
+ VendorShellPart vendor;
+ TopLevelShellPart topLevel;
+ ApplicationShellPart application;
+ SessionShellPart session;
+} SessionShellRec, *SessionShellWidget;
+</literallayout>
+
+</sect2>
+
+<sect2 id="Shell_Resources">
+<title>Shell Resources</title>
+<para>
+The resource names, classes, and representation types specified in
+the
+<function>shellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNallowShellResize</entry>
+ <entry>XtCAllowShellResize</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNcreatePopupChildProc</entry>
+ <entry>XtCCreatePopupChildProc</entry>
+ <entry>XtRFunction</entry>
+ </row>
+ <row>
+ <entry>XtNgeometry</entry>
+ <entry>XtCGeometry</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNoverrideRedirect</entry>
+ <entry>XtCOverrideRedirect</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNpopdownCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNpopupCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNsaveUnder</entry>
+ <entry>XtCSaveUnder</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNvisual</entry>
+ <entry>XtCVisual</entry>
+ <entry>XtRVisual</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+OverrideShell
+declares no additional resources beyond those defined by
+Shell.
+</para>
+
+<para>
+The resource names, classes, and representation types specified in
+the
+<function>wmShellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNbaseHeight</entry>
+ <entry>XtCBaseHeight</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNbaseWidth</entry>
+ <entry>XtCBaseWidth</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNclientLeader</entry>
+ <entry>XtCClientLeader</entry>
+ <entry>XtRWidget</entry>
+ </row>
+ <row>
+ <entry>XtNheightInc</entry>
+ <entry>XtCHeightInc</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNiconMask</entry>
+ <entry>XtCIconMask</entry>
+ <entry>XtRBitmap</entry>
+ </row>
+ <row>
+ <entry>XtNiconPixmap</entry>
+ <entry>XtCIconPixmap</entry>
+ <entry>XtRBitmap</entry>
+ </row>
+ <row>
+ <entry>XtNiconWindow</entry>
+ <entry>XtCIconWindow</entry>
+ <entry>XtRWindow</entry>
+ </row>
+ <row>
+ <entry>XtNiconX</entry>
+ <entry>XtCIconX</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNiconY</entry>
+ <entry>XtCIconY</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNinitialState</entry>
+ <entry>XtCInitialState</entry>
+ <entry>XtRInitialState</entry>
+ </row>
+ <row>
+ <entry>XtNinput</entry>
+ <entry>XtCInput</entry>
+ <entry>XtRBool</entry>
+ </row>
+ <row>
+ <entry>XtNmaxAspectX</entry>
+ <entry>XtCMaxAspectX</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNmaxAspectY</entry>
+ <entry>XtCMaxAspectY</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNmaxHeight</entry>
+ <entry>XtCMaxHeight</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNmaxWidth</entry>
+ <entry>XtCMaxWidth</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNminAspectX</entry>
+ <entry>XtCMinAspectX</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNminAspectY</entry>
+ <entry>XtCMinAspectY</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNminHeight</entry>
+ <entry>XtCMinHeight</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNminWidth</entry>
+ <entry>XtCMinWidth</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNtitle</entry>
+ <entry>XtCTitle</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNtitleEncoding</entry>
+ <entry>XtCTitleEncoding</entry>
+ <entry>XtRAtom</entry>
+ </row>
+ <row>
+ <entry>XtNtransient</entry>
+ <entry>XtCTransient</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNwaitforwm, XtNwaitForWm</entry>
+ <entry>XtCWaitforwm, XtCWaitForWm</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNwidthInc</entry>
+ <entry>XtCWidthInc</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNwindowRole</entry>
+ <entry>XtCWindowRole</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNwinGravity</entry>
+ <entry>XtCWinGravity</entry>
+ <entry>XtRGravity</entry>
+ </row>
+ <row>
+ <entry>XtNwindowGroup</entry>
+ <entry>XtCWindowGroup</entry>
+ <entry>XtRWindow</entry>
+ </row>
+ <row>
+ <entry>XtNwmTimeout</entry>
+ <entry>XtCWmTimeout</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNurgency</entry>
+ <entry>XtCUrgency</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>_</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The class resource list for
+VendorShell
+is implementation-defined.
+</para>
+
+<para>
+The resource names, classes, and representation types that are specified in the
+<function>transient\%ShellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNtransientFor</entry>
+ <entry>XtCTransientFor</entry>
+ <entry>XtRWidget</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The resource names, classes, and representation types that are specified in the
+<function>topLevelShellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNiconName</entry>
+ <entry>XtCIconName</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNiconNameEncoding</entry>
+ <entry>XtCIconNameEncoding</entry>
+ <entry>XtRAtom</entry>
+ </row>
+ <row>
+ <entry>XtNiconic</entry>
+ <entry>XtCIconic</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The resource names, classes, and representation types that are specified in the
+<function>application\%ShellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNargc</entry>
+ <entry>XtCArgc</entry>
+ <entry>XtRInt</entry>
+ </row>
+ <row>
+ <entry>XtNargv</entry>
+ <entry>XtCArgv</entry>
+ <entry>XtRStringArray</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The resource names, classes, and representation types that are specified
+in the
+<function>sessionShellClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNcancelCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNcloneCommand</entry>
+ <entry>XtCCloneCommand</entry>
+ <entry>XtRCommandArgArray</entry>
+ </row>
+ <row>
+ <entry>XtNconnection</entry>
+ <entry>XtCConnection</entry>
+ <entry>XtRSmcConn</entry>
+ </row>
+ <row>
+ <entry>XtNcurrentDirectory</entry>
+ <entry>XtCCurrentDirectory</entry>
+ <entry>XtRDirectoryString</entry>
+ </row>
+ <row>
+ <entry>XtNdieCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNdiscardCommand</entry>
+ <entry>XtCDiscardCommand</entry>
+ <entry>XtRCommandArgArray</entry>
+ </row>
+ <row>
+ <entry>XtNenvironment</entry>
+ <entry>XtCEnvironment</entry>
+ <entry>XtREnvironmentArray</entry>
+ </row>
+ <row>
+ <entry>XtNerrorCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNinteractCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNjoinSession</entry>
+ <entry>XtCJoinSession</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNprogramPath</entry>
+ <entry>XtCProgramPath</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNresignCommand</entry>
+ <entry>XtCResignCommand</entry>
+ <entry>XtRCommandArgArray</entry>
+ </row>
+ <row>
+ <entry>XtNrestartCommand</entry>
+ <entry>XtCRestartCommand</entry>
+ <entry>XtRCommandArgArray</entry>
+ </row>
+ <row>
+ <entry>XtNrestartStyle</entry>
+ <entry>XtCRestartStyle</entry>
+ <entry>XtRRestartStyle</entry>
+ </row>
+ <row>
+ <entry>XtNsaveCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNsaveCompleteCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNsessionID</entry>
+ <entry>XtCSessionID</entry>
+ <entry>XtRString</entry>
+ </row>
+ <row>
+ <entry>XtNshutdownCommand</entry>
+ <entry>XtCShutdownCommand</entry>
+ <entry>XtRCommandArgArray</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+</sect2>
+
+<sect2 id="ShellPart_Default_Values">
+<title>ShellPart Default Values</title>
+<para>
+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:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>geometry</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>create_popup_child_proc</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>grab_kind</entry>
+ <entry>(none)</entry>
+ </row>
+ <row>
+ <entry>spring_loaded</entry>
+ <entry>(none)</entry>
+ </row>
+ <row>
+ <entry>popped_up</entry>
+ <entry><function>False</function></entry>
+ </row>
+ <row>
+ <entry>allow_shell_resize</entry>
+ <entry><function>False</function></entry>
+ </row>
+ <row>
+ <entry>client_specified</entry>
+ <entry>(internal)</entry>
+ </row>
+ <row>
+ <entry>save_under</entry>
+ <entry><function>True</function>
+ for OverrideShell and TransientShell,
+ <emphasis role='strong'>False</emphasis>
+ otherwise</entry>
+ </row>
+ <row>
+ <entry>override_redirect</entry>
+ <entry><function>True</function>
+ for OverrideShell,
+ <function>False</function>
+ otherwise</entry>
+ </row>
+ <row>
+ <entry>popup_callback</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>popdown_callback</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>visual</entry>
+ <entry><function>CopyFromParent</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>geometry</emphasis> field specifies the size and position
+and is usually given only on a command line or in a defaults file.
+If the <emphasis remap='I'>geometry</emphasis> field is non-NULL when
+a widget of class WMShell
+is realized, the geometry specification is parsed using
+<function>XWMGeometry</function>
+with a default geometry
+string constructed from the values of <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>,
+<emphasis remap='I'>height</emphasis>, <emphasis remap='I'>width_inc</emphasis>,
+and <emphasis remap='I'>height_inc</emphasis> and the size and position flags in the window manager
+size hints are set. If the geometry specifies an x or y position,
+then
+<function>USPosition</function>
+is set. If the geometry specifies a width or height, then
+<function>USSize</function>
+is set. Any fields in the geometry specification
+override the corresponding values in the
+Core <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, and <emphasis remap='I'>height</emphasis> fields.
+If <emphasis remap='I'>geometry</emphasis> is NULL or contains only a partial specification, then the
+Core <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, and <emphasis remap='I'>height</emphasis> fields are used and
+<function>PPosition</function>
+and
+<function>PSize</function>
+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
+<olink targetdoc='libX11' targetptr='Parsing_the_Window_Geometry' />
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+</para>
+
+<para>
+The <emphasis remap='I'>create_popup_child_proc</emphasis> procedure is called by the
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+procedure and may remain NULL.
+The <emphasis remap='I'>grab_kind</emphasis>, <emphasis remap='I'>spring_loaded</emphasis>,
+and <emphasis remap='I'>popped_up</emphasis> fields maintain widget
+state information as described under
+<xref linkend='XtPopup' xrefstyle='select: title'/>,
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>,
+<xref linkend='XtPopdown' xrefstyle='select: title'/>,
+and
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>.
+The <emphasis remap='I'>allow_shell_resize</emphasis> field controls whether the widget contained
+by the shell is allowed to try to resize itself.
+If allow_shell_resize is
+<function>False</function>,
+any geometry requests made by the child will always return
+<function>XtGeometryNo</function>
+without interacting with the window manager.
+Setting <emphasis remap='I'>save_under</emphasis>
+<function>True</function>
+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 <emphasis remap='I'>override_redirect</emphasis>
+<function>True</function>
+determines
+whether the window manager can intercede when the shell window
+is mapped.
+For further information on override_redirect,
+see <olink targetdoc='libX11' targetptr='Window_Attributes' /> in
+<olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>
+and
+<olink targetdoc='icccm' targetptr='Pop_up_Windows' /> and
+<olink targetdoc='icccm' targetptr='Redirection_of_Operations' /> in the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual</olink>.
+The pop-up and pop-down callbacks are called during
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+and
+<xref linkend='XtPopdown' xrefstyle='select: title'/>.
+The default value of the <emphasis remap='I'>visual</emphasis> resource is the symbolic value
+<function>CopyFromParent</function>.
+The Intrinsics do not need to query the parent's visual type when the
+default value is used; if a client using
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+to examine the visual type receives the value
+<function>CopyFromParent</function>,
+it must then use
+<function>XGetWindowAttributes</function>
+if it needs the actual visual type.
+</para>
+
+<para>
+The default values for Shell fields in
+WMShell
+and its subclasses are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>title</entry>
+ <entry>Icon name, if specified, otherwise the application's name</entry>
+ </row>
+ <row>
+ <entry>wm_timeout</entry>
+ <entry>Five seconds, in units of milliseconds</entry>
+ </row>
+ <row>
+ <entry>wait_for_wm</entry>
+ <entry><function>True</function></entry>
+ </row>
+ <row>
+ <entry>transient</entry>
+ <entry><function>True</function>
+ for TransientShell,
+ <function>False</function>
+ otherwise</entry>
+ </row>
+ <row>
+ <entry>urgency</entry>
+ <entry><function>False</function></entry>
+ </row>
+ <row>
+ <entry>client_leader</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>window_role</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>min_width</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>min_height</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>max_width</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>max_height</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>width_inc</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>height_inc</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>min_aspect_x</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>min_aspect_y</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>max_aspect_x</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>max_aspect_y</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>input</entry>
+ <entry><function>False</function></entry>
+ </row>
+ <row>
+ <entry>initial_state</entry>
+ <entry>Normal</entry>
+ </row>
+ <row>
+ <entry>icon_pixmap</entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>icon_window</entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>icon_x</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>icon_y</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>icon_mask</entry>
+ <entry>None</entry>
+ </row>
+ <row>
+ <entry>window_group</entry>
+ <entry><function>XtUnspecifiedWindow</function></entry>
+ </row>
+ <row>
+ <entry>base_width</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>base_height</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>win_gravity</entry>
+ <entry><function>XtUnspecifiedShellInt</function></entry>
+ </row>
+ <row>
+ <entry>title_encoding</entry>
+ <entry>See text</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>title</emphasis> and
+<emphasis remap='I'>title_encoding</emphasis> fields are stored in the
+<emphasis role='strong'>WM_NAME</emphasis>
+property on the shell's window by the WMShell realize procedure.
+If the <emphasis remap='I'>title_encoding</emphasis> field is
+<function>None</function>,
+the <emphasis remap='I'>title</emphasis> string is assumed to be in the encoding of the current
+locale and the encoding of the
+<emphasis role='strong'>WM_NAME</emphasis>
+property is set to
+<function>XStdICCTextStyle</function>.
+If a language procedure has not been set
+the default value of <emphasis remap='I'>title_encoding</emphasis> is
+<emphasis role='strong'>XA_STRING</emphasis>, otherwise the default value is
+<function>None</function>.
+The <emphasis remap='I'>wm_timeout</emphasis> 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 <emphasis remap='I'>wait_for_wm</emphasis> to
+<function>False</function>
+(later events may reset this value).
+When <emphasis remap='I'>wait_for_wm</emphasis> is
+<function>False</function>,
+the shell does not wait for a response, but relies on asynchronous
+notification.
+If <emphasis remap='I'>transient</emphasis> is
+<function>True</function>,
+the
+<emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+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
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual</olink>
+for more details.
+</para>
+
+<para>
+The realize and set_values procedures of WMShell store the
+<emphasis role='strong'>WM_CLIENT_LEADER</emphasis>
+property on the shell window.
+When <emphasis remap='I'>client_leader</emphasis> 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 <emphasis remap='I'>client_leader</emphasis> is NULL and the shell widget has a NULL parent,
+the widget's window is used as the value of the
+property.
+When <emphasis remap='I'>client_leader</emphasis> is NULL and the shell widget has a non-NULL parent,
+a search is made for the closest shell ancestor
+with a non-NULL <emphasis remap='I'>client_leader</emphasis>,
+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.
+</para>
+
+<para>
+When the value of <emphasis remap='I'>window_role</emphasis> is not NULL, the
+realize and set_values procedures store the
+<emphasis role='strong'>WM_WINDOW_ROLE</emphasis>
+property on the shell's window with the value of the resource.
+</para>
+
+<para>
+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
+<function>XtUnspecifiedShellInt</function>,
+the value of the field is modified as follows:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Replacement</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>base_width, base_height</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>width_inc, height_inc</entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>max_width, max_height</entry>
+ <entry>32767</entry>
+ </row>
+ <row>
+ <entry>min_width, min_height</entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>min_aspect_x, min_aspect_y</entry>
+ <entry>-1</entry>
+ </row>
+ <row>
+ <entry>max_aspect_x, max_aspect_y</entry>
+ <entry>-1</entry>
+ </row>
+ <row>
+ <entry>icon_x, icon_y</entry>
+ <entry>-1</entry>
+ </row>
+ <row>
+ <entry>win_gravity</entry>
+ <entry>Value returned by
+ <function>XWMGeometry</function>
+ if called,
+ else <function>NorthWestGravity</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+If the shell widget has a non-NULL parent, then the
+realize and set_values procedures replace the value
+<function>XtUnspecifiedWindow</function>
+in the <emphasis remap='I'>window_group</emphasis> field with the window id of the root widget
+of the widget tree if the
+root widget is realized. The symbolic constant
+<function>XtUnspecifiedWindowGroup</function>
+may be used to indicate that the <emphasis remap='I'>window_group</emphasis> hint flag bit is not
+to be set. If <emphasis remap='I'>transient</emphasis> is
+<function>True</function>,
+the shell's class is not a subclass of
+TransientShell,
+and <emphasis remap='I'>window_group</emphasis> is not
+<function>XtUnspecifiedWindowGroup</function>,
+the WMShell realize and set_values procedures then store the
+<emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+property with the value of <emphasis remap='I'>window_group</emphasis>.
+</para>
+
+<para>
+Transient
+shells have the following additional resource:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Replacement</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>transient_for</entry>
+ <entry>NULL</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The realize and set_values procedures of
+TransientShell
+store the
+<emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+property on the shell window if <emphasis remap='I'>transient</emphasis> is
+<function>True</function>.
+If <emphasis remap='I'>transient_for</emphasis> is non-NULL and the widget specified by
+<emphasis remap='I'>transient_for</emphasis> is realized, then its window is used as the value of the
+<emphasis role='strong'>WM_TRANSIENT_FOR</emphasis>
+property; otherwise, the value of <emphasis remap='I'>window_group</emphasis> is used.
+</para>
+
+<para>
+<function>TopLevel</function>
+shells have the the following additional resources:
+</para>
+
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>icon_name</entry>
+ <entry>Shell widget's name</entry>
+ </row>
+ <row>
+ <entry>iconic</entry>
+ <entry><emphasis role='strong'>False</emphasis></entry>
+ </row>
+ <row>
+ <entry>icon_name_encoding</entry>
+ <entry>See text</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>icon_name</emphasis>
+and <emphasis remap='I'>icon_name_encoding</emphasis> fields are stored in the
+<emphasis role='strong'>WM_ICON_NAME</emphasis>
+property on the shell's window by the TopLevelShell realize
+procedure.
+If the <emphasis remap='I'>icon_name_encoding</emphasis> field is
+<function>None</function>,
+the <emphasis remap='I'>icon_name</emphasis> string is assumed to be in the encoding of the
+current locale and the encoding of the
+<emphasis role='strong'>WM_ICON_NAME</emphasis>
+property is set to
+<function>XStdICCTextStyle</function>.
+If a language procedure has not been set,
+the default value of <emphasis remap='I'>icon_name_encoding</emphasis> is
+<emphasis role='strong'>XA_STRING</emphasis>, otherwise the default value is
+<function>None</function>.
+The <emphasis remap='I'>iconic</emphasis> 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
+<emphasis role='strong'>WM_CHANGE_STATE</emphasis>
+message (as specified by the <emphasis remap='I'>Inter-Client Communication Conventions Manual</emphasis>)
+if this resource is changed from
+<function>False</function>
+to
+<function>True</function>
+and will call
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+specifying <emphasis remap='I'>grab_kind</emphasis> as
+<function>XtGrabNone</function>
+if <emphasis remap='I'>iconic</emphasis> is changed from
+<function>True</function>
+to
+<function>False</function>.
+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 <emphasis remap='I'>initial_state</emphasis> to
+<function>IconicState</function>
+if <emphasis remap='I'>iconic</emphasis> is
+<function>True</function>.
+</para>
+
+<para>
+Application
+shells have the following additional resources:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>argc</entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>argv</entry>
+ <entry>NULL</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>argc</emphasis> and <emphasis remap='I'>argv</emphasis> fields are used to initialize
+the standard property
+<emphasis role='strong'>WM_COMMAND</emphasis>. See the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual</olink>
+for more information.
+</para>
+
+<para>
+The default values for the SessionShell instance fields,
+which are filled in from the resource lists and by the
+initialize procedure, are
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Field</entry>
+ <entry>Default Value</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>cancel_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>clone_command</entry>
+ <entry>See text</entry>
+ </row>
+ <row>
+ <entry>connection</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>current_dir</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>die_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>discard_command</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>environment</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>error_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>interact_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>join_session</entry>
+ <entry><emphasis role='strong'>True</emphasis></entry>
+ </row>
+ <row>
+ <entry>program_path</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>resign_command</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>restart_command</entry>
+ <entry>See text</entry>
+ </row>
+ <row>
+ <entry>restart_style</entry>
+ <entry><emphasis role='strong'>SmRestartIfRunning</emphasis></entry>
+ </row>
+ <row>
+ <entry>save_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>save_complete_callbacks</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>session_id</entry>
+ <entry>NULL</entry>
+ </row>
+ <row>
+ <entry>shutdown_command</entry>
+ <entry>NULL</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>connection</emphasis> field contains the session connection object or NULL
+if a session connection is not being managed by this widget.
+</para>
+
+<para>
+The <emphasis remap='I'>session_id</emphasis> is an identification assigned to the session
+participant by the session manager.
+The <emphasis remap='I'>session_id</emphasis> 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 <emphasis remap='I'>session_id</emphasis> field.
+When not NULL, the <emphasis remap='I'>session_id</emphasis> 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
+<emphasis role='strong'>SM_CLIENT_ID</emphasis>
+property on the client leader's window.
+</para>
+
+<para>
+If <emphasis remap='I'>join_session</emphasis> is
+<function>False</function>,
+the widget will not attempt to establish a
+connection to the session manager at shell creation time.
+See <xref linkend='Joining_a_Session' /> and
+<xref linkend='Resigning_from_a_Session' />
+for more information on the functionality of this resource.
+</para>
+
+<para>
+The <emphasis remap='I'>restart_command</emphasis>, <emphasis remap='I'>clone_command</emphasis>, <emphasis remap='I'>discard_command</emphasis>,
+<emphasis remap='I'>resign_command</emphasis>, <emphasis remap='I'>shutdown_command</emphasis>, <emphasis remap='I'>environment</emphasis>,
+<emphasis remap='I'>current_dir</emphasis>, <emphasis remap='I'>program_path</emphasis>, and
+<emphasis remap='I'>restart_style</emphasis> fields contain standard session properties.
+</para>
+
+<para>
+When a session connection is established or newly managed by the shell,
+the shell initialize and set_values methods check the values of the
+<emphasis remap='I'>restart_command</emphasis>,
+<emphasis remap='I'>clone_command</emphasis>,
+and <emphasis remap='I'>program_path</emphasis>
+resources. At that time, if <emphasis remap='I'>restart_command</emphasis> is NULL, the value
+of the <emphasis remap='I'>argv</emphasis> resource will be copied to <emphasis remap='I'>restart_command</emphasis>.
+Whether or not <emphasis remap='I'>restart_command</emphasis> was NULL,
+if "<emphasis>-xtsessionID</emphasis>" "<emphasis>&lt;session id&gt;</emphasis>" does not
+already appear in the <emphasis remap='I'>restart_command</emphasis>, it will be added by the
+initialize and set_values methods at the beginning of the command arguments;
+if the "<emphasis>-xtsessionID</emphasis>" argument already appears with an incorrect
+<emphasis>session id</emphasis> in the following argument, that argument
+will be replaced with the current <emphasis>session id</emphasis>.
+</para>
+
+<para>
+After this, the shell initialize and set_values procedures check the
+<emphasis remap='I'>clone_command</emphasis>. If <emphasis remap='I'>clone_command</emphasis> is NULL,
+<emphasis remap='I'>restart_command</emphasis> will be copied to <emphasis remap='I'>clone_command</emphasis>,
+except the "<emphasis>-xtsessionID</emphasis>" and following argument will not be copied.
+</para>
+
+<para>
+Finally, the shell initialize and set_values procedures check the
+<emphasis remap='I'>program_path</emphasis>. If <emphasis remap='I'>program_path</emphasis> is NULL, the
+first element of <emphasis remap='I'>restart_command</emphasis> is copied to <emphasis remap='I'>program_path</emphasis>.
+</para>
+
+<para>
+The possible values of <emphasis remap='I'>restart_style</emphasis> are
+<function>SmRestartIfRunning</function>,
+<function>SmRestartAnyway</function>,
+<function>SmRestartImmediately</function>,
+and
+<function>SmRestartNever</function>.
+A resource converter is registered for this resource;
+for the strings that it recognizes,
+see <xref linkend='Predefined_Resource_Converters' />.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Session_Participation">
+<title>Session Participation</title>
+<para>
+Applications can participate in a user's session, exchanging messages
+with the session manager as described in the
+<emphasis>X Session Management Protocol</emphasis> and the
+<emphasis remap='I'>X Session Management Library</emphasis>.
+</para>
+
+<para>
+When a widget of
+<function>sessionShellWidgetClass</function>
+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.
+</para>
+
+<sect2 id="Joining_a_Session">
+<title>Joining a Session</title>
+<para>
+When a Session shell is created,
+if <emphasis remap='I'>connection</emphasis> is NULL,
+and if <emphasis remap='I'>join_session</emphasis> is
+<function>True</function>,
+and if <emphasis remap='I'>argv</emphasis> or <emphasis remap='I'>restart_command</emphasis> is not NULL,
+and if in POSIX environments the
+<emphasis role='strong'>SESSION_MANAGER</emphasis>
+environment variable is defined,
+the shell will attempt to establish a new connection with the session manager.
+</para>
+
+<para>
+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 <emphasis remap='I'>connection</emphasis> 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.
+</para>
+
+<para>
+In the Session shell set_values procedure,
+if <emphasis remap='I'>join_session</emphasis> changes from
+<function>False</function>
+to
+<function>True</function>
+and <emphasis remap='I'>connection</emphasis> is NULL and when in POSIX environments the
+<emphasis role='strong'>SESSION_MANAGER</emphasis>
+environment variable is defined,
+the shell will attempt to open a connection to the session manager.
+If <emphasis remap='I'>connection</emphasis> changes from NULL to non-NULL, the
+Session shell
+will take over management of that session connection and will set
+<emphasis remap='I'>join_session</emphasis> to
+<function>True</function>.
+If <emphasis remap='I'>join_session</emphasis> changes from
+<function>False</function>
+to
+<function>True</function>
+and <emphasis remap='I'>connection</emphasis> is not NULL, the
+Session shell will take over management of the session connection.
+</para>
+
+<para>
+When a successful connection has been established, <emphasis remap='I'>connection</emphasis>
+contains the session connection ID for the session participant.
+When the shell begins to manage the connection, it will call
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+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 <emphasis remap='I'>connection</emphasis> is set to NULL.
+</para>
+
+<para>
+While the connection is being managed, if a
+<function>SaveYourself</function>,
+<function>SaveYourselfPhase2</function>,
+<function>Interact</function>,
+<function>ShutdownCancelled</function>,
+<function>SaveComplete</function>,
+or
+<function>Die</function>
+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
+<function>SaveYourselfPhase2Request</function>,
+<function>InteractRequest</function>,
+<function>InteractDone</function>,
+<function>SaveYourselfDone</function>,
+and
+<function>ConnectionClosed</function>
+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
+<function>SetProperties</function>
+or a
+<function>DeleteProperties</function>
+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.
+</para>
+</sect2>
+
+<sect2 id="Saving_Application_State">
+<title>Saving Application State</title>
+<para>
+The session manager instigates an application checkpoint by sending a
+<function>SaveYourself</function>
+request.
+Applications are responsible for saving their state in response to the
+request.
+</para>
+
+<para>
+When the
+<function>SaveYourself</function>
+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 <emphasis remap='I'>call_data</emphasis> parameter.
+</para>
+
+<para>
+The checkpoint token in the <emphasis remap='I'>call_data</emphasis> parameter is of type
+<function>XtCheckpointToken</function>.
+</para>
+
+<literallayout >
+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;
+</literallayout>
+
+<para>
+The <emphasis remap='I'>save_type</emphasis>, <emphasis remap='I'>interact_style</emphasis>, <emphasis remap='I'>shutdown</emphasis>, and <emphasis remap='I'>fast</emphasis>
+fields of the token contain the parameters of the
+<function>SaveYourself</function>
+message.
+The possible values of <emphasis remap='I'>save_type</emphasis> are
+<function>SmSaveLocal</function>,
+<function>SmSaveGlobal</function>,
+and
+<function>SmSaveBoth</function>;
+these indicate the type of information to be saved.
+The possible values of <emphasis remap='I'>interact_style</emphasis> are
+<function>SmInteractStyleNone</function>,
+<function>SmInteractStyleErrors</function>,
+and
+<function>SmInteractStyleAny</function>;
+these indicate whether user interaction would be permitted
+and, if so, what kind of interaction.
+If <emphasis remap='I'>shutdown</emphasis> is
+<function>True</function>,
+the checkpoint is being performed in preparation for the end of the session.
+If <emphasis remap='I'>fast</emphasis> is
+<function>True</function>,
+the client should perform the checkpoint as quickly as possible.
+If <emphasis remap='I'>cancel_shutdown</emphasis> is
+<function>True</function>,
+a
+<function>ShutdownCancelled</function>
+message has been received for the current save operation.
+(See <xref linkend='Resigning_from_a_Session' />.)
+The <emphasis remap='I'>phase</emphasis> is used by manager clients, such as a window manager,
+to distinguish between the first and second phase of a save operation.
+The <emphasis remap='I'>phase</emphasis> will be either 1 or 2.
+The remaining fields in the checkpoint token structure are provided for
+the application to communicate with the shell.
+</para>
+
+<para>
+Upon entry to the first application save callback procedure, the return
+fields in the token have the following initial values:
+<emphasis remap='I'>interact_dialog_type</emphasis> is
+<function>SmDialogNormal</function>;
+<emphasis remap='I'>request_cancel</emphasis> is
+<function>False</function>;
+<emphasis remap='I'>request_next_phase</emphasis> is
+<function>False</function>;
+and <emphasis remap='I'>save_success</emphasis> is
+<function>True</function>.
+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.
+</para>
+
+<para>
+The purpose of the token's <emphasis remap='I'>save_success</emphasis> field is to
+indicate the outcome of the entire operation to the
+session manager and ultimately, to the user.
+Returning
+<function>False</function>
+indicates some portion of the application state
+could not be successfully saved. If any token is returned
+to the shell with <emphasis remap='I'>save_success</emphasis>
+<function>False</function>,
+tokens subsequently received
+by the application for the current save operation will show
+<emphasis remap='I'>save_success</emphasis> as
+<function>False</function>.
+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 <emphasis remap='I'>save_success</emphasis>
+<function>False</function>.
+</para>
+
+<para>
+Session participants that manage and save the state of other clients
+should structure their save or interact callbacks to
+set <emphasis remap='I'>request_next_phase</emphasis> to
+<function>True</function>
+when phase is 1, which will cause the shell to send the
+<function>SaveYourselfPhase2Request</function>
+when the first phase is complete. When the
+<function>SaveYourselfPhase2</function>
+message is received, the shell will invoke the save callbacks a
+second time with <emphasis remap='I'>phase</emphasis> equal to 2.
+Manager clients should save the state of other clients
+when the callbacks are invoked the second time and <emphasis remap='I'>phase</emphasis> equal to 2.
+</para>
+
+<para>
+The application may request additional tokens while a checkpoint is under way,
+and these additional tokens must be returned by an explicit call.
+</para>
+
+<para>
+To request an additional token for a save callback response that has a
+deferred outcome, use
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSessionGetToken'>
+<funcprototype>
+<funcdef>XtCheckpointToken <function>XtSessionGetToken</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the Session shell widget which manages session participation.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+The
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>
+function will return NULL if no checkpoint operation is currently under way.
+</para>
+
+<para>
+To indicate the completion of checkpoint processing including user
+interaction, the application must signal the Session shell
+by returning all tokens.
+(See <xref linkend='Interacting_with_the_User_during_a_Checkpoint' /> and
+<xref linkend='Completing_a_Save' />).
+To return a token, use
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSessionReturnToken'>
+<funcprototype>
+<funcdef>void <function>XtSessionReturnToken</function></funcdef>
+ <paramdef>XtCheckpointToken <parameter>token</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>token</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a token that was received as the <emphasis remap='I'>call_data</emphasis> by a procedure
+on the interact callback list or a token that was received by a call to
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+Tokens passed as <emphasis remap='I'>call_data</emphasis> to save callbacks are implicitly
+returned when the save callback procedure returns.
+A save callback procedure should not call
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>
+on the token passed in its <emphasis remap='I'>call_data</emphasis>.
+</para>
+
+<sect3 id="Requesting_Interaction">
+<title>Requesting Interaction</title>
+<para>
+When the token <emphasis remap='I'>interact_style</emphasis> 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
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>
+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
+<function>InteractRequest</function>
+to the session manager when an interact request is not already outstanding
+for the application.
+</para>
+
+<para>
+The type of interaction dialog that will be requested is specified by
+the <emphasis remap='I'>interact_dialog_type</emphasis> field in the checkpoint token.
+The possible values for <emphasis remap='I'>interact_dialog_type</emphasis> are
+<function>SmDialogError</function>
+and
+<function>SmDialogNormal</function>.
+If a token is returned with <emphasis remap='I'>interact_dialog_type</emphasis> containing
+<function>SmDialogError</function>,
+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.
+</para>
+
+<para>
+When a token is returned with <emphasis remap='I'>save_success</emphasis>
+<function>False</function>
+or <emphasis remap='I'>interact_dialog_type</emphasis>
+<function>SmDialogError</function>,
+tokens subsequently passed to callbacks during the same active
+<function>SaveYourself</function>
+response will reflect these changed values, indicating that
+an error condition has occurred during the checkpoint.
+</para>
+
+<para>
+The <emphasis remap='I'>request_cancel</emphasis> 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 <emphasis remap='I'>request_cancel</emphasis> field is not examined by the shell.
+This is also true of tokens received through a call to
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>.
+</para>
+</sect3>
+
+<sect3 id="Interacting_with_the_User_during_a_Checkpoint">
+<title>Interacting with the User during a Checkpoint</title>
+<para>
+When the session manager grants the application's request for user interaction,
+the Session shell receives an
+<function>Interact</function>
+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 <emphasis remap='I'>call_data</emphasis>.
+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
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>.
+Returning the token completes the current step and triggers the next step
+in the sequence.
+</para>
+
+<para>
+During interaction the client may request cancellation of a shutdown.
+When a token passed as <emphasis remap='I'>call_data</emphasis> to an interact procedure is returned,
+if <emphasis remap='I'>shutdown</emphasis> is
+<function>True</function>
+and <emphasis remap='I'>cancel_shutdown</emphasis> is
+<function>False</function>,
+<emphasis remap='I'>request_cancel</emphasis> indicates whether the
+application requests that the pending shutdown be cancelled.
+If <emphasis remap='I'>request_cancel</emphasis> is
+<function>True</function>,
+the field will also be
+<function>True</function>
+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
+<function>InteractDone</function>
+message is sent to the session manager, indicating whether
+a pending session shutdown is requested to be cancelled.
+</para>
+</sect3>
+
+<sect3 id="Responding_to_a_Shutdown_Cancellation">
+<title>Responding to a Shutdown Cancellation</title>
+<para>
+Callbacks registered on the cancel callback list are invoked when the
+Session shell processes a
+<function>ShutdownCancelled</function>
+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
+<function>SaveComplete</function>
+or a
+<function>Die</function>
+message.
+The <emphasis remap='I'>call_data</emphasis> for these callbacks is NULL.
+</para>
+
+<para>
+When the shell notices that a pending shutdown has been cancelled,
+the token <emphasis remap='I'>cancel_shutdown</emphasis> field will be
+<function>True</function>
+in tokens subsequently given to the application.
+</para>
+
+<para>
+Receiving notice of a shutdown cancellation does not cancel the
+pending execution of save callbacks or interact callbacks.
+After the cancel callbacks execute, if <emphasis remap='I'>interact_style</emphasis> is not
+<function>SmInteractStyleNone</function>
+and the interact list is not empty,
+the procedures on the interact callback list will be executed
+and passed a token with <emphasis remap='I'>interact_style</emphasis>
+<function>SmInteractStyleNone</function>.
+The application should not interact with the user, and the Session shell
+will not send an
+<function>InteractDone</function>
+message.
+</para>
+</sect3>
+
+<sect3 id="Completing_a_Save">
+<title>Completing a Save</title>
+<para>
+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
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>
+have been returned by corresponding calls to
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>.
+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
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>.
+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.
+</para>
+
+<para>
+When the application has finished saving state,
+the Session shell will report the result to the session manager by
+sending the
+<function>SaveYourselfDone</function>
+message.
+If the session is continuing, the shell will receive the
+<function>SaveComplete</function>
+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 <emphasis remap='I'>call_data</emphasis> for these callbacks is NULL.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Responding_to_a_Shutdown">
+<title>Responding to a Shutdown</title>
+<para>
+Callbacks registered on the die callback list are invoked when the
+session manager sends a
+<function>Die</function>
+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 <emphasis remap='I'>call_data</emphasis> for these callbacks is NULL.
+</para>
+</sect2>
+
+<sect2 id="Resigning_from_a_Session">
+<title>Resigning from a Session</title>
+<para>
+When the Session shell widget is destroyed, the destroy method will
+close the connection to the session manager by sending a
+<function>ConnectionClosed</function>
+protocol message and will remove the input callback
+that was watching for session protocol messages.
+</para>
+
+<para>
+When
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+is used to set <emphasis remap='I'>join_session</emphasis> to
+<function>False</function>,
+the set_values method of the Session shell will close the
+connection to the session manager if one exists by sending a
+<function>ConnectionClosed</function>
+message, and <emphasis remap='I'>connection</emphasis> will be set to NULL.
+</para>
+
+<para>
+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 <emphasis remap='I'>join_session</emphasis> to
+<function>False</function>
+before exiting.
+</para>
+
+<para>
+When
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+is used to set <emphasis remap='I'>connection</emphasis> to NULL,
+the Session shell will stop managing the connection, if one exists.
+However, that session connection will not be closed.
+</para>
+
+<para>
+Applications that wish to ensure continuation of a session connection
+beyond the destruction of the shell should first retrieve the
+<emphasis remap='I'>connection</emphasis> resource value,
+then set the <emphasis remap='I'>connection</emphasis> resource to NULL,
+and then they may safely destroy the widget without losing control
+of the session connection.
+</para>
+
+<para>
+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 <emphasis remap='I'>connection</emphasis> to NULL,
+remove the input callback, and
+call the procedures registered on the error callback list.
+The <emphasis remap='I'>call_data</emphasis> for these callbacks is NULL.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH05 b/libXt/specs/CH05
deleted file mode 100644
index 4f15beab0..000000000
--- a/libXt/specs/CH05
+++ /dev/null
@@ -1,783 +0,0 @@
-.\" $Xorg: CH05,v 1.3 2000/08/17 19:42:44 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 5\fP\s-1
-
-\s+1\fBPop-Up Widgets\fP\s-1
-.sp 2
-.nr H1 5
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 5 \(em Pop-Up Widgets
-.XE
-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.
-.\"One thing that all pop-ups in common is that they break
-.\"the widget/window hierarchy.
-.\"Pop-ups windows are not geometry constrained by their parent widget.
-.\"Instead, they are window children of the root.
-Therefore, pop-ups are created and attached differently to their widget parent
-than normal widget children.
-.LP
-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 \fIpopup_list\fP field in the
-.PN 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
-.PN XtDestroyWidget
-to look for all extant children.
-.LP
-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 \fIchild\fP always refers to a normal, geometry-managed widget
-on the composite widget's list of children, and the term
-\fIpop-up child\fP always refers to a
-widget on the pop-up list.
-.IN "pop-up" "" "@DEF@"
-.IN "pop-up" "list"
-.IN "pop-up" "child"
-
-.NH 2
-Pop-Up Widget Types
-.LP
-.XS
-\fB\*(SN Pop-Up Widget Types\fP
-.XE
-There are three kinds of pop-up widgets:
-.IP \(bu 5
-Modeless pop-ups
-.IP
-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.
-.IP \(bu 5
-Modal pop-ups
-.IP
-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.
-.IP \(bu 5
-Spring-loaded pop-ups
-.IP
-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.
-.LP
-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 \*(xI.
-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.
-.LP
-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.
-.LP
-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.
-
-.NH 2
-Creating a Pop-Up Shell
-.XS
-\fB\*(SN Creating a Pop-Up Shell\fP
-.XE
-.LP
-.IN "pop-up" "shell"
-.IN "pop-up" "child"
-For a widget to be popped up,
-it must be the child of a pop-up shell widget.
-None of the \*(xI-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.
-.sp
-.LP
-To create a pop-up shell, use
-.PN XtCreatePopupShell .
-.LP
-.IN "XtCreatePopupShell" "" "@DEF@"
-.sM
-.FD 0
-Widget XtCreatePopupShell(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Widget \fIparent\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the instance name for the created shell widget.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created shell widget.
-.IP \fIparent\fP 1i
-Specifies the parent widget. \*(cI
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtCreatePopupShell
-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
-.IN "insert_child procedure"
-\fIchildren\fP list,
-attaches the shell to the parent's \fIpopup_list\fP directly.
-.LP
-The screen resource for this widget is determined by first scanning
-\fIargs\fP for the XtNscreen argument. If no XtNscreen argument is
-found, the resource database associated with the parent's screen
-is queried for the resource \fIname\fP.screen, class
-\fIClass\fP.Screen where \fIClass\fP is the \fIclass_name\fP
-field from the
-.PN CoreClassPart
-of the specified \fIwidget_class\fP.
-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
-\fIargs\fP.
-
-.LP
-A spring-loaded pop-up invoked from a translation table via
-.PN XtMenuPopup
-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.
-.sp
-.LP
-To create a pop-up shell using varargs lists, use
-.PN XtVaCreatePopupShell .
-.LP
-.IN "XtVaCreatePopupShell" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaCreatePopupShell(\fIname\fP, \fIwidget_class\fP, \fIparent\fP, ...)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- Widget \fIparent\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the instance name for the created shell widget.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created shell widget.
-.IP \fIparent\fP 1i
-Specifies the parent widget. \*(cI
-.IP ... 1i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-.PN XtVaCreatePopupShell
-is identical in function to
-.PN XtCreatePopupShell
-with \fIthe\fP args and \fInum_args\fP parameters replaced by a varargs list as
-described in Section 2.5.1.
-
-.NH 2
-Creating Pop-Up Children
-.XS
-\fB\*(SN Creating Pop-Up Children\fP
-.XE
-.LP
-Once a pop-up shell is created,
-the single child of the pop-up shell can be created
-either statically or dynamically.
-.LP
-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
-.PN XtSetSensitive
-(or, in general,
-.PN XtSetValues )
-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
-.PN XtRealizeWidget
-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.
-.LP
-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.
-.LP
-Pop-up child creation does not map the pop-up,
-even if you create the child and call
-.PN XtRealizeWidget
-on the pop-up shell.
-.LP
-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.
-
-.NH 2
-Mapping a Pop-Up Widget
-.XS
-\fB\*(SN Mapping a Pop-Up Widget\fP
-.XE
-.LP
-Pop-ups can be popped up through several mechanisms:
-.IP \(bu 5
-A call to
-.PN XtPopup
-or
-.PN XtPopupSpringLoaded .
-.IP \(bu 5
-One of the supplied callback procedures
-.PN XtCallbackNone ,
-.PN XtCallbackNonexclusive ,
-or
-.PN XtCallbackExclusive .
-.IP \(bu 5
-The standard translation action
-.PN XtMenuPopup .
-.LP
-Some of these routines take an argument of type
-.PN XtGrabKind ,
-which is defined as
-.sp
-.sM
-.Ds 0
-typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind;
-.De
-.sp
-.eM
-.LP
-The create_popup_child_proc procedure pointer
-in the shell widget instance record is of type
-.PN XtCreatePopupChildProc .
-.LP
-.IN "create_popup_child_proc"
-.IN "Shell" "create_popup_child_proc"
-.IN "XtCreatePopupChildProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtCreatePopupChildProc)(Widget);
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the shell widget being popped up.
-.LP
-.eM
-To map a pop-up from within an application, use
-.PN XtPopup .
-.LP
-.IN "XtPopup" "" "@DEF@"
-.sM
-.FD 0
-void XtPopup(\fIpopup_shell\fP, \fIgrab_kind\fP)
-.br
- Widget \fIpopup_shell\fP;
-.br
- XtGrabKind \fIgrab_kind\fP;
-.FN
-.IP \fIpopup_shell\fP 1i
-Specifies the shell widget.
-.IP \fIgrab_kind\fP 1i
-Specifies the way in which user events should be constrained.
-.LP
-.eM
-The
-.PN XtPopup
-function performs the following:
-.IP \(bu 5
-Calls
-.PN XtCheckSubclass
-to ensure \fIpopup_shell\fP's class is a subclass of
-.PN shellWidgetClass .
-.IP \(bu 5
-Raises the window and returns if the shell's \fIpopped_up\fP field is already
-.PN True .
-.IP \(bu 5
-Calls the callback procedures on the shell's \fIpopup_callback\fP list,
-specifying a pointer to the value of \fIgrab_kind\fP as the \fIcall_data\fP
-argument.
-.IP \(bu 5
-Sets the shell \fIpopped_up\fP field to
-.PN True ,
-the shell \fIspring_loaded\fP field to
-.PN False ,
-and the shell \fIgrab_kind\fP field from \fIgrab_kind\fP.
-.IP \(bu 5
-If the shell's \fIcreate_popup_child_proc\fP field is non-NULL,
-.PN XtPopup
-calls it with \fIpopup_shell\fP as the parameter.
-.IP \(bu 5
-If \fIgrab_kind\fP is either
-.PN XtGrabNonexclusive
-or
-.PN XtGrabExclusive ,
-it calls
-.LP
-.Ds
-XtAddGrab(\fIpopup_shell\fP, (\fIgrab_kind\fP == XtGrabExclusive), False)
-.De
-.IP \(bu 5
-Calls
-.PN XtRealizeWidget
-with \fIpopup_shell\fP specified.
-.IP \(bu 5
-Calls
-.PN XMapRaised
-with the window of \fIpopup_shell\fP.
-.sp
-.LP
-To map a spring-loaded pop-up from within an application, use
-.PN XtPopupSpringLoaded .
-.LP
-.IN "XtPopupSpringLoaded" "" @DEF@"
-.sM
-.FD 0
-void XtPopupSpringLoaded(\fIpopup_shell\fP)
-.br
- Widget \fIpopup_shell\fP;
-.FN
-.IP \fIpopup_shell\fP 1i
-Specifies the shell widget to be popped up.
-.LP
-.eM
-The
-.PN XtPopupSpringLoaded
-function performs exactly as
-.PN XtPopup
-except that it sets the shell \fIspring_loaded\fP field to
-.PN True
-and always calls
-.PN XtAddGrab
-with \fIexclusive\fP
-.PN True
-and \fIspring-loaded\fP
-.PN True .
-.sp
-.LP
-To map a pop-up from a given widget's callback list,
-you also can register one of the
-.PN XtCallbackNone ,
-.PN XtCallbackNonexclusive ,
-or
-.PN XtCallbackExclusive
-convenience routines as callbacks, using the pop-up shell widget as the
-client data.
-.LP
-.IN "XtCallbackNone" "" "@DEF@"
-.sM
-.FD 0
-void XtCallbackNone(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIclient_data\fP 1i
-Specifies the pop-up shell.
-.IP \fIcall_data\fP 1i
-Specifies the callback data argument,
-which is not used by this procedure.
-.sp
-.LP
-.IN "XtCallbackNonexclusive" "" "@DEF@"
-.FD 0
-void XtCallbackNonexclusive(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIclient_data\fP 1i
-Specifies the pop-up shell.
-.IP \fIcall_data\fP 1i
-Specifies the callback data argument,
-which is not used by this procedure.
-.sp
-.LP
-.IN "XtCallbackExclusive" "" "@DEF@"
-.FD 0
-void XtCallbackExclusive(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIclient_data\fP 1i
-Specifies the pop-up shell.
-.IP \fIcall_data\fP 1i
-Specifies the callback data argument,
-which is not used by this procedure.
-.LP
-.eM
-The
-.PN XtCallbackNone ,
-.PN XtCallbackNonexclusive ,
-and
-.PN XtCallbackExclusive
-functions call
-.PN XtPopup
-with the shell specified by the \fIclient_data\fP argument
-and \fIgrab_kind\fP set as the name specifies.
-.PN XtCallbackNone ,
-.PN XtCallbackNonexclusive ,
-and
-.PN XtCallbackExclusive
-specify
-.PN XtGrabNone ,
-.PN XtGrabNonexclusive ,
-and
-.PN XtGrabExclusive ,
-respectively.
-Each function then sets the widget that executed the callback list
-to be insensitive by calling
-.PN 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.
-.sp
-.LP
-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
-.PN XtMenuPopup ,
-or its synonym,
-.PN MenuPopup .
-From a translation writer's point of view,
-the definition for this translation action is
-.LP
-.IN "MenuPopup" "" "@DEF@"
-.IN "XtMenuPopup" "" "@DEF@"
-.sM
-.FD 0
-void XtMenuPopup(\fIshell_name\fP)
-.br
- String \fIshell_name\fP;
-.FN
-.IP \fIshell_name\fP 1i
-Specifies the name of the shell widget to pop up.
-.LP
-.eM
-.PN XtMenuPopup
-is known to the translation manager,
-which registers the corresponding built-in action procedure
-.PN XtMenuPopupAction
-using
-.PN XtRegisterGrabAction
-specifying \fIowner_events\fP
-.PN True ,
-\fIevent_mask\fP
-.PN ButtonPressMask
-\fB|\fP
-.PN ButtonReleaseMask ,
-and \fIpointer_mode\fP and \fIkeyboard_mode\fP
-.PN GrabModeAsync .
-.LP
-If
-.PN XtMenuPopup
-is invoked on
-.PN ButtonPress ,
-it calls
-.PN XtPopupSpringLoaded
-on the specified shell widget.
-If
-.PN XtMenuPopup
-is invoked on
-.PN KeyPress
-or
-.PN EnterWindow ,
-it calls
-.PN XtPopup
-on the specified shell widget with \fIgrab_kind\fP set to
-.PN XtGrabNonexclusive .
-Otherwise, the translation manager generates a
-warning message and ignores the action.
-.LP
-.PN XtMenuPopup
-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
-.PN XtMenuPopup
-gets to the application top-level shell widget and has not
-found a matching shell, it generates a warning and returns immediately.
-
-.NH 2
-Unmapping a Pop-Up Widget
-.XS
-\fB\*(SN Unmapping a Pop-Up Widget\fP
-.XE
-.LP
-Pop-ups can be popped down through several mechanisms:
-.IP \(bu 5
-A call to
-.PN XtPopdown
-.IP \(bu 5
-The supplied callback procedure
-.PN XtCallbackPopdown
-.IP \(bu 5
-The standard translation action
-.PN XtMenuPopdown
-.sp
-.LP
-To unmap a pop-up from within an application, use
-.PN XtPopdown .
-.LP
-.IN "XtPopdown" "" "@DEF@"
-.sM
-.FD 0
-void XtPopdown(\fIpopup_shell\fP)
-.br
- Widget \fIpopup_shell\fP;
-.FN
-.IP \fIpopup_shell\fP 1i
-Specifies the shell widget to pop down.
-.LP
-.eM
-The
-.PN XtPopdown
-function performs the following:
-.IP \(bu 5
-Calls
-.PN XtCheckSubclass
-.\".PN XtCheckSubclass(popup_shell, popupShellWidgetClass)
-to ensure \fIpopup_shell\fP's class is a subclass of
-.PN shellWidgetClass .
-.IP \(bu 5
-Checks that the \fIpopped_up\fP field of \fIpopup_shell\fP is
-.PN True ;
-otherwise, it returns immediately.
-.IP \(bu 5
-Unmaps \fIpopup_shell\fP's window and, if \fIoverride_redirect\fP is
-.PN False ,
-sends a synthetic
-.PN UnmapNotify
-event as specified by the \fI\*(xC\fP.
-.IP \(bu 5
-If \fIpopup_shell\fP's \fIgrab_kind\fP is either
-.PN XtGrabNonexclusive
-or
-.PN XtGrabExclusive ,
-it calls
-.PN XtRemoveGrab .
-.\".PN XtRemoveGrab(popup_shell)
-.IP \(bu 5
-Sets \fIpopup_shell\fP's \fIpopped_up\fP field to
-.PN False .
-.IP \(bu 5
-Calls the callback procedures on the shell's \fIpopdown_callback\fP list,
-specifying a pointer to the value of the shell's \fIgrab_kind\fP field
-as the \fIcall_data\fP argument.
-.sp
-.LP
-To pop down a pop-up from a callback list, you may use the callback
-.PN XtCallbackPopdown .
-.LP
-.IN "XtCallbackPopdown" "" "@DEF@"
-.sM
-.FD 0
-void XtCallbackPopdown(\fIw\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fIclient_data\fP 1i
-Specifies a pointer to the
-.PN XtPopdownID
-structure.
-.IP \fIcall_data\fP 1i
-Specifies the callback data argument,
-which is not used by this procedure.
-.LP
-.eM
-The
-.PN XtCallbackPopdown
-function casts the \fIclient_data\fP parameter to a pointer of type
-.PN XtPopdownID .
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- Widget shell_widget;
- Widget enable_widget;
-} XtPopdownIDRec, *XtPopdownID;
-.De
-.LP
-.eM
-The \fIshell_widget\fP is the pop-up shell to pop down,
-and the \fIenable_widget\fP is usually the widget that was used to pop it up
-in one of the pop-up callback convenience procedures.
-.LP
-.PN XtCallbackPopdown
-calls
-.PN XtPopdown
-with the specified \fIshell_widget\fP
-and then calls
-.PN XtSetSensitive
-to resensitize \fIenable_widget\fP.
-.sp
-.LP
-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
-.PN XtMenuPopdown
-or its synonym,
-.PN MenuPopdown .
-From a translation writer's point of view,
-the definition for this translation action is
-.LP
-.IN "XtMenuPopdown" "" "@DEF@"
-.IN "MenuPopdown" "" "@DEF@"
-.sM
-.FD 0
-void XtMenuPopdown(\fIshell_name\fP)
-.br
- String \fIshell_name\fP;
-.FN
-.IP \fIshell_name\fP 1i
-Specifies the name of the shell widget to pop down.
-.LP
-.eM
-If a shell name is not given,
-.PN XtMenuPopdown
-calls
-.PN XtPopdown
-with the widget for which the translation is specified.
-If \fIshell_name\fP is specified in the translation table,
-.PN XtMenuPopdown
-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
-.PN XtMenuPopdown
-gets to the application top-level shell widget
-and cannot find a matching shell,
-it generates a warning and returns immediately.
-.bp
diff --git a/libXt/specs/CH05.xml b/libXt/specs/CH05.xml
new file mode 100644
index 000000000..2c09455ed
--- /dev/null
+++ b/libXt/specs/CH05.xml
@@ -0,0 +1,1063 @@
+<chapter id='Pop_Up_Widgets'>
+<title>Pop-Up Widgets</title>
+<para>
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>popup_list</emphasis> field in the
+<function>CorePart</function>
+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
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+to look for all extant children.
+</para>
+
+<para>
+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 <emphasis remap='I'>child</emphasis> always refers to a normal, geometry-managed widget
+on the composite widget's list of children, and the term
+<emphasis remap='I'>pop-up child</emphasis> always refers to a
+widget on the pop-up list.
+</para>
+
+<sect1 id="Pop_Up_Widget_Types">
+<title>Pop-Up Widget Types</title>
+<para>
+There are three kinds of pop-up widgets:
+</para>
+
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Modeless pop-ups
+ </para>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Modal pop-ups
+ </para>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Spring-loaded pop-ups
+ </para>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Creating_a_Pop_Up_Shell">
+<title>Creating a Pop-Up Shell</title>
+<para>
+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.
+</para>
+
+<para>
+To create a pop-up shell, use
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreatePopupShell'>
+<funcprototype>
+<funcdef>Widget <function>XtCreatePopupShell</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the instance name for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>
+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
+<emphasis remap='I'>children</emphasis> list,
+attaches the shell to the parent's <emphasis remap='I'>popup_list</emphasis> directly.
+</para>
+
+<para>
+The screen resource for this widget is determined by first scanning
+<emphasis remap='I'>args</emphasis> for the XtNscreen argument. If no XtNscreen argument is
+found, the resource database associated with the parent's screen
+is queried for the resource <emphasis remap='I'>name</emphasis>.screen, class
+<emphasis remap='I'>Class</emphasis>.Screen where <emphasis remap='I'>Class</emphasis> is the <emphasis remap='I'>class_name</emphasis>
+field from the
+<function>CoreClassPart</function>
+of the specified <emphasis remap='I'>widget_class</emphasis>.
+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
+<emphasis remap='I'>args</emphasis>.
+</para>
+
+<para>
+A spring-loaded pop-up invoked from a translation table via
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To create a pop-up shell using varargs lists, use
+<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaCreatePopupShell'>
+<funcprototype>
+<funcdef>Widget <function>XtVaCreatePopupShell</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>Widget <parameter>parent</parameter></paramdef>
+ <paramdef><parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the instance name for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>parent</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parent widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>...</term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>
+with <emphasis remap='I'>the</emphasis> args and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list as
+described in Section 2.5.1.
+</para>
+</sect1>
+
+<sect1 id="Creating_Pop_Up_Children">
+<title>Creating Pop-Up Children</title>
+<para>
+Once a pop-up shell is created,
+the single child of the pop-up shell can be created
+either statically or dynamically.
+</para>
+
+<para>
+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
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+(or, in general,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>)
+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
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+Pop-up child creation does not map the pop-up,
+even if you create the child and call
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+on the pop-up shell.
+</para>
+
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Mapping_a_Pop_Up_Widget">
+<title>Mapping a Pop-Up Widget</title>
+<para>
+Pop-ups can be popped up through several mechanisms:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A call to
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+or
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+One of the supplied callback procedures
+<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
+or
+<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The standard translation action
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+Some of these routines take an argument of type
+<function>XtGrabKind</function>,
+which is defined as
+</para>
+<literallayout >
+typedef enum {XtGrabNone, XtGrabNonexclusive, XtGrabExclusive} XtGrabKind;
+</literallayout>
+
+<para>
+The create_popup_child_proc procedure pointer
+in the shell widget instance record is of type
+<xref linkend='XtCreatePopupChildProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreatePopupChildProc'>
+<funcprototype>
+<funcdef>void <function>*XtCreatePopupChildProc</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shell widget being popped up.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+To map a pop-up from within an application, use
+<xref linkend='XtPopup' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtPopup'>
+<funcprototype>
+<funcdef>void <function>XtPopup</function></funcdef>
+ <paramdef>Widget <parameter>popup_shell</parameter></paramdef>
+ <paramdef>XtGrabKind <parameter>grab_kind</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>popup_shell</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>grab_kind</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the way in which user events should be constrained.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+function performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+to ensure <emphasis remap='I'>popup_shell</emphasis>'s class is a subclass of
+<function>shellWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Raises the window and returns if the shell's <emphasis remap='I'>popped_up</emphasis> field is already
+<function>True</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls the callback procedures on the shell's <emphasis remap='I'>popup_callback</emphasis> list,
+specifying a pointer to the value of <emphasis remap='I'>grab_kind</emphasis> as the <emphasis remap='I'>call_data</emphasis>
+argument.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Sets the shell <emphasis remap='I'>popped_up</emphasis> field to
+<function>True</function>,
+the shell <emphasis remap='I'>spring_loaded</emphasis> field to
+<function>False</function>,
+and the shell <emphasis remap='I'>grab_kind</emphasis> field from <emphasis remap='I'>grab_kind</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the shell's <emphasis remap='I'>create_popup_child_proc</emphasis> field is non-NULL,
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+calls it with <emphasis remap='I'>popup_shell</emphasis> as the parameter.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If <emphasis remap='I'>grab_kind</emphasis> is either
+<function>XtGrabNonexclusive</function>
+or
+<function>XtGrabExclusive</function>,
+it calls
+ </para>
+<literallayout >
+XtAddGrab(<emphasis remap='I'>popup_shell</emphasis>, (<emphasis remap='I'>grab_kind</emphasis> == XtGrabExclusive), False)
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+with <emphasis remap='I'>popup_shell</emphasis> specified.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls
+<function>XMapRaised</function>
+with the window of <emphasis remap='I'>popup_shell</emphasis>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To map a spring-loaded pop-up from within an application, use
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtPopupSpringLoaded'>
+<funcprototype>
+<funcdef>void <function>XtPopupSpringLoaded</function></funcdef>
+ <paramdef>Widget <parameter>popup_shell</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>popup_shell</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shell widget to be popped up.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>
+function performs exactly as
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+except that it sets the shell <emphasis remap='I'>spring_loaded</emphasis> field to
+<function>True</function>
+and always calls
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>
+with <emphasis remap='I'>exclusive</emphasis>
+<function>True</function>
+and <emphasis remap='I'>spring-loaded</emphasis>
+<function>True</function>.
+</para>
+
+<para>
+To map a pop-up from a given widget's callback list,
+you also can register one of the
+<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
+or
+<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>
+convenience routines as callbacks, using the pop-up shell widget as the
+client data.
+</para>
+
+<funcsynopsis id='XtCallbackNone'>
+<funcprototype>
+<funcdef>void <function>XtCallbackNone</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the pop-up shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback data argument,
+which is not used by this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<funcsynopsis id='XtCallbackNonexclusive'>
+<funcprototype>
+<funcdef>void <function>XtCallbackNonexclusive</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the pop-up shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback data argument,
+which is not used by this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<funcsynopsis id='XtCallbackExclusive'>
+<funcprototype>
+<funcdef>void <function>XtCallbackExclusive</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the pop-up shell.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback data argument,
+which is not used by this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
+and
+<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>
+functions call
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+with the shell specified by the <emphasis remap='I'>client_data</emphasis> argument
+and <emphasis remap='I'>grab_kind</emphasis> set as the name specifies.
+<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
+and
+<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>
+specify
+<function>XtGrabNone</function>,
+<function>XtGrabNonexclusive</function>,
+and
+<function>XtGrabExclusive</function>,
+respectively.
+Each function then sets the widget that executed the callback list
+to be insensitive by calling
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>.
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>,
+or its synonym,
+<function>MenuPopup</function>.
+From a translation writer's point of view,
+the definition for this translation action is
+</para>
+
+<funcsynopsis id='XtMenuPopup'>
+<funcprototype>
+<funcdef>void <function>XtMenuPopup</function></funcdef>
+ <paramdef>String <parameter>shell_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>shell_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the shell widget to pop up.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+is known to the translation manager,
+which registers the corresponding built-in action procedure
+<function>XtMenuPopupAction</function>
+using
+<xref linkend='XtRegisterGrabAction' xrefstyle='select: title'/>
+specifying <emphasis remap='I'>owner_events</emphasis>
+<function>True</function>,
+<emphasis remap='I'>event_mask</emphasis>
+<function>ButtonPressMask</function>
+<function>|</function>
+<function>ButtonReleaseMask</function>,
+and <emphasis remap='I'>pointer_mode</emphasis> and <emphasis remap='I'>keyboard_mode</emphasis>
+<function>GrabModeAsync</function>.
+</para>
+
+<para>
+If
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+is invoked on
+<function>ButtonPress</function>,
+it calls
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>
+on the specified shell widget.
+If
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+is invoked on
+<function>KeyPress</function>
+or
+<function>EnterWindow</function>,
+it calls
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+on the specified shell widget with <emphasis remap='I'>grab_kind</emphasis> set to
+<function>XtGrabNonexclusive</function>.
+Otherwise, the translation manager generates a
+warning message and ignores the action.
+</para>
+
+<para>
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+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
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+gets to the application top-level shell widget and has not
+found a matching shell, it generates a warning and returns immediately.
+</para>
+</sect1>
+
+<sect1 id="Unmapping_a_Pop_Up_Widget">
+<title>Unmapping a Pop-Up Widget</title>
+<para>
+Pop-ups can be popped down through several mechanisms:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A call to
+<xref linkend='XtPopdown' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The supplied callback procedure
+<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The standard translation action
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To unmap a pop-up from within an application, use
+<xref linkend='XtPopdown' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtPopdown'>
+<funcprototype>
+<funcdef>void <function>XtPopdown</function></funcdef>
+ <paramdef>Widget <parameter>popup_shell</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>popup_shell</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shell widget to pop down.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtPopdown' xrefstyle='select: title'/>
+function performs the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Calls
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>
+to ensure <emphasis remap='I'>popup_shell</emphasis>'s class is a subclass of
+<function>shellWidgetClass</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Checks that the <emphasis remap='I'>popped_up</emphasis> field of <emphasis remap='I'>popup_shell</emphasis> is
+<function>True</function>;
+otherwise, it returns immediately.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Unmaps <emphasis remap='I'>popup_shell</emphasis>'s window and, if <emphasis remap='I'>override_redirect</emphasis> is
+<function>False</function>,
+sends a synthetic
+<function>UnmapNotify</function>
+event as specified by the <emphasis remap='I'>Inter-Client Communication Conventions Manual</emphasis>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If <emphasis remap='I'>popup_shell</emphasis>'s <emphasis remap='I'>grab_kind</emphasis> is either
+<function>XtGrabNonexclusive</function>
+or
+<function>XtGrabExclusive</function>,
+it calls
+<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Sets <emphasis remap='I'>popup_shell</emphasis>'s <emphasis remap='I'>popped_up</emphasis> field to
+<function>False</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Calls the callback procedures on the shell's <emphasis remap='I'>popdown_callback</emphasis> list,
+specifying a pointer to the value of the shell's <emphasis remap='I'>grab_kind</emphasis> field
+as the <emphasis remap='I'>call_data</emphasis> argument.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To pop down a pop-up from a callback list, you may use the callback
+<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallbackPopdown'>
+<funcprototype>
+<funcdef>void <function>XtCallbackPopdown</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the
+<function>XtPopdownID</function>
+structure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback data argument,
+which is not used by this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>
+function casts the <emphasis remap='I'>client_data</emphasis> parameter to a pointer of type
+<function>XtPopdownID</function>.
+</para>
+<literallayout >
+typedef struct {
+ Widget shell_widget;
+ Widget enable_widget;
+} XtPopdownIDRec, *XtPopdownID;
+</literallayout>
+<para>
+The <emphasis remap='I'>shell_widget</emphasis> is the pop-up shell to pop down,
+and the <emphasis remap='I'>enable_widget</emphasis> is usually the widget that was used to pop it up
+in one of the pop-up callback convenience procedures.
+</para>
+
+<para>
+<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>
+calls
+<xref linkend='XtPopdown' xrefstyle='select: title'/>
+with the specified <emphasis remap='I'>shell_widget</emphasis>
+and then calls
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+to resensitize <emphasis remap='I'>enable_widget</emphasis>.
+</para>
+
+<para>
+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
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+or its synonym,
+<function>MenuPopdown</function>.
+From a translation writer's point of view,
+the definition for this translation action is
+</para>
+
+<funcsynopsis id='XtMenuPopdown'>
+<funcprototype>
+<funcdef>void <function>XtMenuPopdown</function></funcdef>
+ <paramdef>String <parameter>shell_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>shell_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the shell widget to pop down.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If a shell name is not given,
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+calls
+<xref linkend='XtPopdown' xrefstyle='select: title'/>
+with the widget for which the translation is specified.
+If <emphasis remap='I'>shell_name</emphasis> is specified in the translation table,
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+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
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+gets to the application top-level shell widget
+and cannot find a matching shell,
+it generates a warning and returns immediately.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH06 b/libXt/specs/CH06
deleted file mode 100644
index 34c2861b0..000000000
--- a/libXt/specs/CH06
+++ /dev/null
@@ -1,1110 +0,0 @@
-.\" $Xorg: CH06,v 1.3 2000/08/17 19:42:45 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 6\fP\s-1
-
-\s+1\fBGeometry Management\fP\s-1
-.sp 2
-.nr H1 6
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 6 \(em Geometry Management
-.XE
-.LP
-.IN "geometry_manager procedure"
-.IN "Geometry Management"
-.IN "Configure Window"
-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.
-.LP
-To resolve physical layout conflicts between sibling widgets and between
-a widget and its parent, the \*(xI provide the geometry management mechanism.
-Almost all
-composite
-widgets have a geometry manager specified in the \fIgeometry_manager\fP 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.
-
-.NH 2
-Initiating Geometry Changes
-.LP
-.XS
-\*(SN Initiating Geometry Changes
-.XE
-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
-.PN XtMove\%Widget ,
-.PN XtResizeWidget ,
-or
-.PN XtConfigureWidget .
-A child must ask its parent for a geometry change by calling
-.PN XtMakeGeometryRequest
-or
-.PN XtMakeResizeRequest .
-An application or other client code initiates a geometry change by calling
-.PN XtSetValues
-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.
-.LP
-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.
-.LP
-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
-.PN XtMoveWidget .
-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
-.PN XtResizeWidget .
-The requesting child may be given special treatment; see Section 6.5.
-It can simultaneously move and resize a child with a single call to
-.PN XtConfigureWidget .
-.LP
-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.
-.LP
-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 Sections 2.5 and 2.6.
-.NT Notes
-.IP 1. 5
-The \*(xI 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
-.PN XtSetValues
-that will generate a stacking geometry request.
-.IP 2. 5
-After a successful geometry request (one that returned
-.PN 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.
-.NE
-
-.NH 2
-General Geometry Manager Requests
-.XS
-\*(SN General Geometry Manager Requests
-.XE
-.LP
-When making a geometry request, the child specifies an
-.PN XtWidgetGeometry
-structure.
-.LP
-.IN "XtGeometryMask"
-.KS
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef unsigned long XtGeometryMask;
-
-typedef struct {
- XtGeometryMask request_mode;
- Position x, y;
- Dimension width, height;
- Dimension border_width;
- Widget sibling;
- int stack_mode;
-} XtWidgetGeometry;
-.De
-.eM
-.KE
-.LP
-To make a general geometry manager request from a widget, use
-.PN XtMakeGeometryRequest .
-.LP
-.IN "XtMakeGeometryRequest" "" "@DEF@"
-.sM
-.FD 0
-XtGeometryResult XtMakeGeometryRequest(\fIw\fP, \fIrequest\fP, \
-\fIreply_return\fP)
-.br
- Widget \fIw\fP;
-.br
- XtWidgetGeometry *\fIrequest\fP;
-.br
- XtWidgetGeometry *\fIreply_return\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(rI
-.IP \fIrequest\fP 1i
-Specifies the desired widget geometry (size, position, border width,
-and stacking order).
-.IP \fIreply_return\fP 1i
-Returns the allowed widget size, or may be NULL
-if the requesting widget is not interested in handling
-.PN XtGeometryAlmost .
-.LP
-.eM
-Depending on the condition,
-.PN 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
-.PN XtGeometryYes .
-.IP \(bu 5
-If the parent's class is not a subclass of
-.PN compositeWidgetClass
-or the parent's \fIgeometry_manager\fP field is NULL,
-it issues an error.
-.IP \(bu 5
-If the widget's \fIbeing_destroyed\fP field is
-.PN True ,
-it returns
-.PN XtGeometryNo .
-.IP \(bu 5
-If the widget \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, and
-\fIborder_width\fP fields are
-all equal to the requested values,
-it returns
-.PN XtGeometryYes ;
-otherwise, it calls the parent's geometry_manager procedure
-with the given parameters.
-.IP \(bu 5
-If the parent's geometry manager returns
-.PN XtGeometryYes
-and if
-.PN XtCWQueryOnly
-is not set in \fIrequest->request_mode\fP
-and if the widget is realized,
-.PN XtMakeGeometryRequest
-calls the
-.PN 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
-.PN XtGeometryDone ,
-the change has been approved and actually has been done.
-In this case,
-.PN XtMakeGeometryRequest
-does no configuring and returns
-.PN XtGeometryYes .
-.PN XtMakeGeometryRequest
-never returns
-.PN XtGeometryDone .
-.IP \(bu 5
-Otherwise,
-.PN XtMakeGeometryRequest
-just returns the resulting value from the parent's geometry manager.
-.LP
-Children of primitive widgets are always unmanaged; therefore,
-.PN XtMakeGeometryRequest
-always returns
-.PN XtGeometryYes
-when called by a child of a primitive widget.
-.LP
-The return codes from geometry managers are
-.IN "XtGeometryResult"
-.LP
-.KS
-.sM
-.Ds 0
-.TA .5i 1.75i
-.ta .5i 1.75i
-typedef enum {
- XtGeometryYes,
- XtGeometryNo,
- XtGeometryAlmost,
- XtGeometryDone
-} XtGeometryResult;
-.De
-.eM
-.KE
-.LP
-The \fIrequest_mode\fP definitions are from
-.Pn < X11/X.h >.
-.LP
-.sM
-.TS
-lw(.5i) lw(2.5i) lw(.75i).
-T{
-#define
-T} T{
-.PN CWX
-T} T{
-(1<<0)
-T}
-T{
-#define
-T} T{
-.PN CWY
-T} T{
-(1<<1)
-T}
-T{
-#define
-T} T{
-.PN CWWidth
-T} T{
-(1<<2)
-T}
-T{
-#define
-T} T{
-.PN CWHeight
-T} T{
-(1<<3)
-T}
-T{
-#define
-T} T{
-.PN CWBorderWidth
-T} T{
-(1<<4)
-T}
-T{
-#define
-T} T{
-.PN CWSibling
-T} T{
-(1<<5)
-T}
-T{
-#define
-T} T{
-.PN CWStackMode
-T} T{
-(1<<6)
-T}
-.TE
-.LP
-.eM
-The \*(xI also support the following value.
-.LP
-.sM
-.TS
-lw(.5i) lw(2.5i) lw(.75i).
-T{
-#define
-T} T{
-.PN XtCWQueryOnly
-T} T{
-(1<<7)
-T}
-.TE
-.LP
-.eM
-.PN 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.
-.LP
-.PN XtMakeGeometryRequest ,
-like the
-.PN XConfigureWindow
-Xlib function, uses \fIrequest_mode\fP to determine which fields in the
-.PN XtWidgetGeometry
-structure the caller wants to specify.
-.LP
-The \fIstack_mode\fP definitions are from
-.Pn < X11/X.h >:
-.LP
-.sM
-.TS
-lw(.5i) lw(2.5i) lw(.75i).
-T{
-#define
-T} T{
-.PN Above
-T} T{
-0
-T}
-T{
-#define
-T} T{
-.PN Below
-T} T{
-1
-T}
-T{
-#define
-T} T{
-.PN TopIf
-T} T{
-2
-T}
-T{
-#define
-T} T{
-.PN BottomIf
-T} T{
-3
-T}
-T{
-#define
-T} T{
-.PN Opposite
-T} T{
-4
-T}
-.TE
-.LP
-.eM
-The \*(xI also support the following value.
-.LP
-.sM
-.TS
-lw(.5i) lw(2.5i) lw(.75i).
-T{
-#define
-T} T{
-.PN XtSMDontChange
-T} T{
-5
-T}
-.TE
-.LP
-.eM
-For definition and behavior of
-.PN Above ,
-.PN Below ,
-.PN TopIf ,
-.PN BottomIf ,
-and
-.PN Opposite ,
-see Section 3.7 in \fI\*(xL\fP.
-.PN XtSMDontChange
-indicates that the widget wants its current stacking order preserved.
-
-.NH 2
-Resize Requests
-.XS
-\*(SN Resize Requests
-.XE
-.LP
-To make a simple resize request from a widget, you can use
-.PN XtMakeResizeRequest
-as an alternative to
-.PN XtMakeGeometryRequest .
-.LP
-.IN "XtMakeResizeRequest" "" "@DEF@"
-.sM
-.FD 0
-XtGeometryResult XtMakeResizeRequest(\fIw\fP, \fIwidth\fP, \fIheight\fP, \
-\fIwidth_return\fP, \fIheight_return\fP)
-.br
- Widget \fIw\fP;
-.br
- Dimension \fIwidth\fP, \fIheight\fP;
-.br
- Dimension *\fIwidth_return\fP, *\fIheight_return\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(rI
-.IP \fIwidth\fP 1i
-Specify the desired widget width and height.
-.br
-.ns
-.IP \fIheight\fP 1i
-.IP \fIwidth_return\fP 1i
-Return the allowed widget width and height.
-.br
-.ns
-.IP \fIheight_return\fP 1i
-.LP
-.eM
-The
-.PN XtMakeResizeRequest
-function, a simple interface to
-.PN XtMakeGeometryRequest ,
-creates an
-.PN XtWidgetGeometry
-structure and specifies that width and height should change
-by setting \fIrequest_mode\fP to
-.PN CWWidth
-\fB|\fP
-.PN 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
-.PN XtGeometryAlmost ,
-\fIwidth_return\fP and \fIheight_return\fP contain a compromise width and height.
-If these are acceptable,
-the widget should immediately call
-.PN XtMakeResizeRequest
-again and request that the compromise width and height be applied.
-If the widget is not interested in
-.PN XtGeometryAlmost
-replies,
-it can pass NULL for \fIwidth_return\fP and \fIheight_return\fP.
-
-.NH 2
-Potential Geometry Changes
-.XS
-\*(SN Potential Geometry Changes
-.XE
-.LP
-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
-.PN XtCWQueryOnly
-in the intermediate request.
-.LP
-When
-.PN 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
-.PN XtGeometryAlmost ,
-the geometry manager needs to cache the entire
-reply geometry in the event the child accepts the parent's compromise.
-.LP
-If the grandparent's response was
-.PN XtGeometryAlmost ,
-it may also be necessary to cache the entire reply geometry from
-the grandparent when
-.PN 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.
-.LP
-Note that a compromise geometry returned with
-.PN XtGeometryAlmost
-is guaranteed only for the next call to the same widget;
-therefore, a cache of size 1 is sufficient.
-
-.NH 2
-Child Geometry Management: The geometry_manager Procedure
-.XS
-\*(SN Child Geometry Management: The geometry_manager Procedure
-.XE
-.LP
-The geometry_manager procedure pointer in a composite widget class is of type
-.PN XtGeometryHandler .
-.LP
-.IN "XtGeometryHandler" "" "@DEF@"
-.sM
-.FD 0
-typedef XtGeometryResult (*XtGeometryHandler)(Widget, XtWidgetGeometry*, \
-XtWidgetGeometry*);
-.br
- Widget \fIw\fP;
-.br
- XtWidgetGeometry *\fIrequest\fP;
-.br
- XtWidgetGeometry *\fIgeometry_return\fP;
-.FN
-.IP \fIw\fP 1.2i
-Passes the widget making the request.
-.IP \fIrequest\fP 1.2i
-Passes the new geometry the child desires.
-.IP \fIgeometry_return\fP 1.2i
-Passes a geometry structure in which the geometry manager may store a
-compromise.
-.LP
-.eM
-A class can inherit its superclass's geometry manager during class
-initialization.
-.LP
-A bit set to zero in the request's \fIrequest_mode\fP
-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.
-.LP
-If the geometry manager can satisfy all changes requested
-and if
-.PN XtCWQueryOnly
-is not specified,
-it updates the widget's \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP,
-and \fIborder_width\fP fields
-appropriately.
-Then, it returns
-.PN XtGeometryYes ,
-and the values pointed to by the \fIgeometry_return\fP argument are undefined.
-The widget's window is moved and resized automatically by
-.PN XtMakeGeometryRequest .
-.LP
-Homogeneous composite widgets often find it convenient to treat the widget
-making the request the same as any other widget, including reconfiguring
-it using
-.PN XtConfigureWidget
-or
-.PN XtResizeWidget
-as part of its layout process, unless
-.PN XtCWQueryOnly
-is specified.
-If it does this,
-it should return
-.PN XtGeometryDone
-to inform
-.PN XtMakeGeometryRequest
-that it does not need to do the configuration itself.
-.NT
-To remain
-compatible with layout techniques used in older widgets (before
-.PN XtGeometryDone
-was added to the \*(xI), a geometry manager should avoid using
-.PN XtResizeWidget
-or
-.PN XtConfigureWidget
-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.
-.NE
-.LP
-Although
-.PN XtMakeGeometryRequest
-resizes the widget's window
-(if the geometry
-manager returns
-.PN XtGeometryYes ),
-it does not call the widget class's resize procedure.
-The requesting widget must perform whatever
-resizing calculations are needed explicitly.
-.LP
-If the geometry manager disallows the request,
-the widget cannot change its geometry.
-The values pointed to by \fIgeometry_return\fP are undefined,
-and the geometry manager returns
-.PN XtGeometryNo .
-.LP
-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
-\fIgeometry_return\fP with the actual changes
-it is willing to make, including an appropriate \fIrequest_mode\fP mask, and returns
-.PN XtGeometryAlmost .
-If a bit in \fIgeometry_return->request_mode\fP is zero,
-the geometry manager agrees not to change the corresponding value
-if \fIgeometry_return\fP is used immediately
-in a new request.
-If a bit is 1,
-the geometry manager does change that element to the corresponding
-value in \fIgeometry_return\fP.
-More bits may be set in \fIgeometry_return->request_mode\fP
-than in the original request if
-the geometry manager intends to change other fields should the
-child accept the compromise.
-.LP
-When
-.PN XtGeometryAlmost
-is returned,
-the widget must decide if the compromise suggested in \fIgeometry_return\fP
-is acceptable.
-If it is, the widget must not change its geometry directly;
-rather, it must make another call to
-.PN XtMakeGeometryRequest .
-.LP
-If the next geometry request from this child uses the
-\fIgeometry_return\fP values filled in by the geometry manager with an
-.PN 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
-.PN XtGeometryYes .
-However,
-dynamic behavior in
-the user's window manager may affect the final outcome.
-.LP
-To return
-.PN XtGeometryYes ,
-the geometry manager frequently rearranges the position of other managed
-children by calling
-.PN XtMoveWidget .
-However, a few geometry managers may sometimes change the
-size of other managed children by calling
-.PN XtResizeWidget
-or
-.PN XtConfigureWidget .
-If
-.PN 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.
-.LP
-Geometry managers must not assume that the \fIrequest\fP
-and \fIgeometry_return\fP 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.
-
-.NH 2
-Widget Placement and Sizing
-.XS
-\*(SN Widget Placement and Sizing
-.XE
-.LP
-To move a sibling widget of the child making the geometry request,
-the parent uses
-.PN XtMoveWidget .
-.LP
-.IN "XtMoveWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtMoveWidget(\fIw\fP, \fIx\fP, \fIy\fP)
-.br
- Widget \fIw\fP;
-.br
- Position \fIx\fP;
-.br
- Position \fIy\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(rI
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the new widget x and y coordinates.
-.LP
-.eM
-The
-.PN XtMoveWidget
-function returns immediately if the specified geometry fields
-are the same as the old values.
-Otherwise,
-.PN XtMoveWidget
-writes the new \fIx\fP and \fIy\fP values into the object
-and, if the object is a widget and is realized, issues an Xlib
-.PN XMoveWindow
-call on the widget's window.
-.sp
-.LP
-To resize a sibling widget of the child making the geometry request,
-the parent uses
-.PN XtResizeWidget .
-.LP
-.IN "XtResizeWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtResizeWidget(\fIw\fP, \fIwidth\fP, \fIheight\fP, \fIborder_width\fP)
-.br
- Widget \fIw\fP;
-.br
- Dimension \fIwidth\fP;
-.br
- Dimension \fIheight\fP;
-.br
- Dimension \fIborder_width\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(rI
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-.br
-.ns
-.IP \fIborder_width\fP 1i
-Specify the new widget size.
-.LP
-.eM
-The
-.PN XtResizeWidget
-function returns immediately if the specified geometry fields
-are the same as the old values.
-Otherwise,
-.PN XtResizeWidget
-writes the new \fIwidth\fP, \fIheight\fP, and \fIborder_width\fP values into
-the object and, if the object is a widget and is realized, issues an
-.PN XConfigureWindow
-call on the widget's window.
-.LP
-If the new width or height is different from the old values,
-.PN XtResizeWidget
-calls the object's resize procedure to notify it of the size change.
-.sp
-.LP
-To move and resize the sibling widget of the child making the geometry request,
-the parent uses
-.PN XtConfigureWidget .
-.LP
-.IN "XtConfigureWidget" "" "@DEF@"
-.sM
-.FD 0
-void XtConfigureWidget(\fIw\fP, \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP, \
-\fIborder_width\fP)
-.br
- Widget \fIw\fP;
-.br
- Position \fIx\fP;
-.br
- Position \fIy\fP;
-.br
- Dimension \fIwidth\fP;
-.br
- Dimension \fIheight\fP;
-.br
- Dimension \fIborder_width\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(rI
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the new widget x and y coordinates.
-.IP \fIwidth\fP 1i
-.br
-.ns
-.IP \fIheight\fP 1i
-.br
-.ns
-.IP \fIborder_width\fP 1i
-Specify the new widget size.
-.LP
-.eM
-The
-.PN XtConfigureWidget
-function returns immediately if the specified new geometry fields
-are all equal to the current values.
-Otherwise,
-.PN XtConfigureWidget
-writes the new \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP,
-and \fIborder_width\fP values
-into the object and, if the object is a widget and is realized, makes an Xlib
-.PN XConfigureWindow
-call on the widget's window.
-.LP
-If the new width or height is different from its old value,
-.PN XtConfigureWidget
-calls the object's resize procedure to notify it of the size change;
-otherwise, it simply returns.
-.sp
-.LP
-To resize a child widget that already has the new values of its width,
-height, and border width, the parent uses
-.PN XtResizeWindow .
-.LP
-.IN "XtResizeWindow" "" "@DEF@"
-.sM
-.FD 0
-void XtResizeWindow(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-The
-.PN XtResizeWindow
-function calls the
-.PN 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.
-.LP
-There are very few times to use
-.PN XtResizeWindow ;
-instead, the parent should use
-.PN XtResizeWidget .
-
-.NH 2
-Preferred Geometry
-.XS
-\*(SN Preferred Geometry
-.XE
-.LP
-Some parents may be willing to adjust their layouts to accommodate the
-preferred geometries of their children.
-They can use
-.PN XtQueryGeometry
-to obtain the preferred geometry
-and, as they see fit, can use or ignore any portion of the response.
-.sp
-.LP
-To query a child widget's preferred geometry, use
-.PN XtQueryGeometry .
-.LP
-.IN "XtQueryGeometry" "" "@DEF@"
-.sM
-.FD 0
-XtGeometryResult XtQueryGeometry(\fIw\fP, \fIintended\fP, \
-\fIpreferred_return\fP)
-.br
- Widget \fIw\fP;
-.br
- XtWidgetGeometry *\fIintended\fP;
-.br
- XtWidgetGeometry *\fIpreferred_return\fP;
-.FN
-.IP \fIw\fP 1.1i
-Specifies the widget. \*(rI
-.IP \fIintended\fP 1.1i
-Specifies the new geometry the parent plans to give to the child, or
-NULL.
-.IP \fIpreferred_return\fP 1.1i
-Returns the child widget's preferred geometry.
-.LP
-.eM
-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 \fIintended.request_mode\fP,
-and calls
-.PN XtQueryGeometry .
-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.
-.LP
-.PN XtQueryGeometry
-clears all bits in the \fIpreferred_return->request_mode\fP
-field and checks the
-\fIquery_geometry\fP field of the specified widget's class record.
-If \fIquery_geometry\fP is not NULL,
-.PN XtQueryGeometry
-calls the query_geometry procedure and passes as arguments the
-specified widget, \fIintended\fP, and \fIpreferred_return\fP structures.
-If the \fIintended\fP argument is NULL,
-.PN XtQueryGeometry
-replaces it with a pointer to an
-.PN XtWidgetGeometry
-structure with \fIrequest_mode\fP equal to zero before calling the
-query_geometry procedure.
-.NT
-If
-.PN XtQueryGeometry
-is called from within a geometry_manager
-procedure for the widget that issued
-.PN XtMakeGeometryRequest
-or
-.PN XtMakeResizeRequest ,
-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.
-.NE
-.sp
-.LP
-The query_geometry procedure pointer is of type
-.PN XtGeometryHandler .
-.LP
-.IN "query_geometry procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef XtGeometryResult (*XtGeometryHandler)(Widget, XtWidgetGeometry*, \
-XtWidgetGeometry*);
-.br
- Widget \fIw\fP;
-.br
- XtWidgetGeometry *\fIrequest\fP;
-.br
- XtWidgetGeometry *\fIpreferred_return\fP;
-.FN
-.IP \fIw\fP 1.2i
-Passes the child widget whose preferred geometry is required.
-.IP \fIrequest\fP 1.2i
-Passes the geometry changes that the parent plans to make.
-.IP \fIpreferred_return\fP 1.2i
-Passes a structure in which the child returns its preferred geometry.
-.LP
-.eM
-.IN "query_geometry procedure"
-The query_geometry procedure is expected to examine the bits set in
-\fIrequest->request_mode\fP, evaluate the preferred geometry of the widget,
-and store the result in \fIpreferred_return\fP
-(setting the bits in \fIpreferred_return->request_mode\fP corresponding
-to those geometry fields that it cares about).
-If the proposed geometry change is acceptable without modification,
-the query_geometry procedure should return
-.PN XtGeometryYes .
-If at least one field in \fIpreferred_return\fP
-with a bit set in \fIpreferred_return->request_mode\fP
-is different
-from the corresponding field in \fIrequest\fP
-or if a bit was set in \fIpreferred_return->request_mode\fP
-that was not set in the request,
-the query_geometry procedure should return
-.PN XtGeometryAlmost .
-If the preferred geometry is identical to the current geometry,
-the query_geometry procedure should return
-.PN XtGeometryNo .
-.NT
-The query_geometry procedure may assume
-that no
-.PN XtMakeResizeRequest
-or
-.PN XtMakeGeometryRequest
-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.
-.NE
-.LP
-After calling the query_geometry procedure
-or if the \fIquery_geometry\fP field is NULL,
-.PN XtQueryGeometry
-examines all the unset bits in \fIpreferred_return->request_mode\fP
-and sets the corresponding fields in \fIpreferred_return\fP
-to the current values from the widget instance.
-If
-.PN CWStackMode
-is not set,
-the \fIstack_mode\fP field is set to
-.PN XtSMDontChange .
-.PN XtQueryGeometry
-returns the value returned by the query_geometry procedure or
-.PN XtGeometryYes
-if the \fIquery_geometry\fP field is NULL.
-.LP
-Therefore, the caller can interpret a return of
-.PN XtGeometryYes
-as not needing to evaluate the contents of the reply and, more important,
-not needing to modify its layout plans.
-A return of
-.PN 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
-.PN 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 \fIpreferred_return\fP structure contains complete
-geometry information for the child.
-.LP
-Parents are expected to call
-.PN XtQueryGeometry
-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.
-
-.NH 2
-Size Change Management: The resize Procedure
-.XS
-\*(SN Size Change Management: The resize Procedure
-.XE
-.LP
-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
-.PN XtResizeWidget ,
-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
-.PN XtWidgetProc .
-.IN "resize procedure" "" "@DEF@"
-.LP
-If a class need not recalculate anything when a widget is resized,
-it can specify NULL for the \fIresize\fP 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 \fIx\fP, \fIy\fP, \fIwidth\fP, \fIheight\fP,
-and \fIborder_width\fP 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
-.PN XtMakeGeometryRequest
-or
-.PN XtMakeResizeRequest
-call from its resize procedure.
-.bp
diff --git a/libXt/specs/CH06.xml b/libXt/specs/CH06.xml
new file mode 100644
index 000000000..7ff51bfb4
--- /dev/null
+++ b/libXt/specs/CH06.xml
@@ -0,0 +1,1369 @@
+<chapter id='Geometry_Management'>
+<title>Geometry Management</title>
+
+<para>
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>geometry_manager</emphasis> 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.
+</para>
+
+<sect1 id="Initiating_Geometry_Changes">
+<title>Initiating Geometry Changes</title>
+
+<para>
+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
+<function>XtMove\%Widget</function>,
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>,
+or
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>.
+A child must ask its parent for a geometry change by calling
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+or
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>.
+An application or other client code initiates a geometry change by calling
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>.
+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
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>.
+The requesting child may be given special treatment; see
+<xref linkend='Child_Geometry_Management_The_geometry_manager_Procedure' />.
+It can simultaneously move and resize a child with a single call to
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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 <xref linkend='Creating_Widgets' /> and
+<xref linkend='Realizing_Widgets' />.
+</para>
+
+<note>
+<orderedlist>
+ <listitem>
+ <para>
+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
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+that will generate a stacking geometry request.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+After a successful geometry request (one that returned
+<function>XtGeometryYes</function>),
+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.
+ </para>
+ </listitem>
+</orderedlist>
+</note>
+</sect1>
+
+<sect1 id="General_Geometry_Manager_Requests">
+<title>General Geometry Manager Requests</title>
+<para>
+When making a geometry request, the child specifies an
+<function>XtWidgetGeometry</function>
+structure.
+</para>
+
+<literallayout >
+typedef unsigned long XtGeometryMask;
+typedef struct {
+ XtGeometryMask request_mode;
+ Position x, y;
+ Dimension width, height;
+ Dimension border_width;
+ Widget sibling;
+ int stack_mode;
+} XtWidgetGeometry;
+</literallayout>
+
+<para>
+To make a general geometry manager request from a widget, use
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMakeGeometryRequest'>
+<funcprototype>
+<funcdef>XtGeometryResult <function>XtMakeGeometryRequest</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>request</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>reply_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the desired widget geometry (size, position, border width,
+and stacking order).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>reply_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the allowed widget size, or may be NULL
+if the requesting widget is not interested in handling
+<function>XtGeometryAlmost</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+Depending on the condition,
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+performs the following:
+</para>
+
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the widget is unmanaged or the widget's parent is not realized,
+it makes the changes and returns
+<function>XtGeometryYes</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent's class is not a subclass of
+<function>compositeWidgetClass</function>
+or the parent's <emphasis remap='I'>geometry_manager</emphasis> field is NULL,
+it issues an error.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the widget's <emphasis remap='I'>being_destroyed</emphasis> field is
+<function>True</function>,
+it returns
+<function>XtGeometryNo</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the widget <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, and
+<emphasis remap='I'>border_width</emphasis> fields are
+all equal to the requested values,
+it returns
+<function>XtGeometryYes</function>;
+otherwise, it calls the parent's geometry_manager procedure
+with the given parameters.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the parent's geometry manager returns
+<function>XtGeometryYes</function>
+and if
+<function>XtCWQueryOnly</function>
+is not set in <emphasis remap='I'>request-&gt;request_mode</emphasis>
+and if the widget is realized,
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+calls the
+<function>XConfigureWindow</function>
+Xlib function to reconfigure the widget's window (set its size, location,
+and stacking order as appropriate).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If the geometry manager returns
+<function>XtGeometryDone</function>,
+the change has been approved and actually has been done.
+In this case,
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+does no configuring and returns
+<function>XtGeometryYes</function>.
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+never returns
+<function>XtGeometryDone</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Otherwise,
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+just returns the resulting value from the parent's geometry manager.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+Children of primitive widgets are always unmanaged; therefore,
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+always returns
+<function>XtGeometryYes</function>
+when called by a child of a primitive widget.
+</para>
+
+<para>
+The return codes from geometry managers are
+</para>
+
+<literallayout >
+typedef enum {
+ XtGeometryYes,
+ XtGeometryNo,
+ XtGeometryAlmost,
+ XtGeometryDone
+} XtGeometryResult;
+</literallayout>
+
+<para>
+The <emphasis remap='I'>request_mode</emphasis> definitions are from
+<function>&lt;X11/X.h&gt;</function>.
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <tbody>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWX</function></entry>
+ <entry>(1&lt;&lt;0)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWY</function></entry>
+ <entry>(1&lt;&lt;1)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWWidth</function></entry>
+ <entry>(1&lt;&lt;2)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWHeight</function></entry>
+ <entry>(1&lt;&lt;3)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWBorderWidth</function></entry>
+ <entry>(1&lt;&lt;4)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWSibling</function></entry>
+ <entry>(1&lt;&lt;5)</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>CWStackMode</function></entry>
+ <entry>(1&lt;&lt;6)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The Intrinsics also support the following value.
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <tbody>
+ <row>
+ <entry>#define</entry>
+ <entry><function>XtCWQueryOnly</function></entry>
+ <entry>(1&lt;&lt;7)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+<function>XtCWQueryOnly</function>
+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.
+</para>
+
+<para>
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>,
+like the
+<function>XConfigureWindow</function>
+Xlib function, uses <emphasis remap='I'>request_mode</emphasis> to determine which fields in the
+<function>XtWidgetGeometry</function>
+structure the caller wants to specify.
+</para>
+
+<para>
+The <emphasis remap='I'>stack_mode</emphasis> definitions are from
+<function>&lt;X11/X.h&gt;</function>:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <tbody>
+ <row>
+ <entry>#define</entry>
+ <entry><function>Above</function></entry>
+ <entry>0</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>Below</function></entry>
+ <entry>1</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>TopIf</function></entry>
+ <entry>2</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>BottomIf</function></entry>
+ <entry>3</entry>
+ </row>
+ <row>
+ <entry>#define</entry>
+ <entry><function>Opposite</function></entry>
+ <entry>4</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The Intrinsics also support the following value.
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <tbody>
+ <row>
+ <entry>#define</entry>
+ <entry><function>XtSMDontChange</function></entry>
+ <entry>5</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+For definition and behavior of
+<function>Above</function>,
+<function>Below</function>,
+<function>TopIf</function>,
+<function>BottomIf</function>,
+and
+<function>Opposite</function>,
+<olink targetdoc='libX11' targetptr='Configuring_Windows' >BLAH</olink>
+in <olink targetptr='libX11' targetdoc='libX11'>Xlib — C Language X Interface.</olink>.
+<function>XtSMDontChange</function>
+indicates that the widget wants its current stacking order preserved.
+</para>
+</sect1>
+
+<sect1 id="Resize_Requests">
+<title>Resize Requests</title>
+<para>
+To make a simple resize request from a widget, you can use
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+as an alternative to
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMakeResizeRequest'>
+<funcprototype>
+<funcdef>typedef XtGeometryResult <function>XtMakeResizeRequest</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Dimension <parameter>width</parameter></paramdef>
+ <paramdef>Dimension *<parameter>width_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the desired widget width and height.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Return the allowed widget width and height.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height_return</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+The
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+function, a simple interface to
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>,
+creates an
+<function>XtWidgetGeometry</function>
+structure and specifies that width and height should change
+by setting <emphasis remap='I'>request_mode</emphasis> to
+<function>CWWidth</function>
+<function>|</function>
+<function>CWHeight</function>.
+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
+<function>XtGeometryAlmost</function>,
+<emphasis remap='I'>width_return</emphasis> and <emphasis remap='I'>height_return</emphasis> contain a compromise width and height.
+If these are acceptable,
+the widget should immediately call
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+again and request that the compromise width and height be applied.
+If the widget is not interested in
+<function>XtGeometryAlmost</function>
+replies,
+it can pass NULL for <emphasis remap='I'>width_return</emphasis> and <emphasis remap='I'>height_return</emphasis>.
+</para>
+</sect1>
+
+<sect1 id="Potential_Geometry_Changes">
+<title>Potential Geometry Changes</title>
+<para>
+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
+<function>XtCWQueryOnly</function>
+in the intermediate request.
+</para>
+
+<para>
+When
+<function>XtCWQueryOnly</function>
+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
+<function>XtGeometryAlmost</function>,
+the geometry manager needs to cache the entire
+reply geometry in the event the child accepts the parent's compromise.
+</para>
+
+<para>
+If the grandparent's response was
+<function>XtGeometryAlmost</function>,
+it may also be necessary to cache the entire reply geometry from
+the grandparent when
+<function>XtCWQueryOnly</function>
+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.
+</para>
+
+<para>
+Note that a compromise geometry returned with
+<function>XtGeometryAlmost</function>
+is guaranteed only for the next call to the same widget;
+therefore, a cache of size 1 is sufficient.
+</para>
+</sect1>
+
+<sect1 id="Child_Geometry_Management_The_geometry_manager_Procedure">
+<title>Child Geometry Management: The geometry_manager Procedure</title>
+<para>
+The geometry_manager procedure pointer in a composite widget class is of type
+<xref linkend='XtGeometryHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGeometryHandler'>
+<funcprototype>
+<funcdef>XtGeometryResult <function>*XtGeometryHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>request</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>geometry_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the widget making the request.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the new geometry the child desires.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>geometry_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes a geometry structure in which the geometry manager may store a
+compromise.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+A class can inherit its superclass's geometry manager during class
+initialization.
+</para>
+
+<para>
+A bit set to zero in the request's <emphasis remap='I'>request_mode</emphasis>
+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.
+</para>
+
+<para>
+If the geometry manager can satisfy all changes requested
+and if
+<function>XtCWQueryOnly</function>
+is not specified,
+it updates the widget's <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>,
+and <emphasis remap='I'>border_width</emphasis> fields
+appropriately.
+Then, it returns
+<function>XtGeometryYes</function>,
+and the values pointed to by the <emphasis remap='I'>geometry_return</emphasis> argument are undefined.
+The widget's window is moved and resized automatically by
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>.
+</para>
+
+<para>
+Homogeneous composite widgets often find it convenient to treat the widget
+making the request the same as any other widget, including reconfiguring
+it using
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+or
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+as part of its layout process, unless
+<function>XtCWQueryOnly</function>
+is specified.
+If it does this,
+it should return
+<function>XtGeometryDone</function>
+to inform
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+that it does not need to do the configuration itself.
+</para>
+
+<note>
+<para>
+To remain
+compatible with layout techniques used in older widgets (before
+<function>XtGeometryDone</function>
+was added to the Intrinsics), a geometry manager should avoid using
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+or
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+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.
+</para>
+</note>
+
+<para>
+Although
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+resizes the widget's window
+(if the geometry
+manager returns
+<function>XtGeometryYes ),</function>
+it does not call the widget class's resize procedure.
+The requesting widget must perform whatever
+resizing calculations are needed explicitly.
+</para>
+
+<para>
+If the geometry manager disallows the request,
+the widget cannot change its geometry.
+The values pointed to by <emphasis remap='I'>geometry_return</emphasis> are undefined,
+and the geometry manager returns
+<function>XtGeometryNo</function>.
+</para>
+
+<para>
+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
+<emphasis remap='I'>geometry_return</emphasis> with the actual changes
+it is willing to make, including an appropriate <emphasis remap='I'>request_mode</emphasis> mask, and returns
+<function>XtGeometryAlmost</function>.
+If a bit in <emphasis remap='I'>geometry_return-&gt;request_mode</emphasis> is zero,
+the geometry manager agrees not to change the corresponding value
+if <emphasis remap='I'>geometry_return</emphasis> is used immediately
+in a new request.
+If a bit is 1,
+the geometry manager does change that element to the corresponding
+value in <emphasis remap='I'>geometry_return</emphasis>.
+More bits may be set in <emphasis remap='I'>geometry_return-&gt;request_mode</emphasis>
+than in the original request if
+the geometry manager intends to change other fields should the
+child accept the compromise.
+</para>
+
+<para>
+When
+<function>XtGeometryAlmost</function>
+is returned,
+the widget must decide if the compromise suggested in <emphasis remap='I'>geometry_return</emphasis>
+is acceptable.
+If it is, the widget must not change its geometry directly;
+rather, it must make another call to
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>.
+</para>
+
+<para>
+If the next geometry request from this child uses the
+<emphasis remap='I'>geometry_return</emphasis> values filled in by the geometry manager with an
+<function>XtGeometryAlmost</function>
+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
+<function>XtGeometryYes</function>.
+However,
+dynamic behavior in
+the user's window manager may affect the final outcome.
+</para>
+
+<para>
+To return
+<function>XtGeometryYes</function>,
+the geometry manager frequently rearranges the position of other managed
+children by calling
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>.
+However, a few geometry managers may sometimes change the
+size of other managed children by calling
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+or
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>.
+If
+<function>XtCWQueryOnly</function>
+is specified,
+the geometry manager must return data describing
+how it would react to this geometry
+request without actually moving or resizing any widgets.
+</para>
+
+<para>
+Geometry managers must not assume that the <emphasis remap='I'>request</emphasis>
+and <emphasis remap='I'>geometry_return</emphasis> 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.
+</para>
+</sect1>
+
+<sect1 id="Widget_Placement_and_Sizing">
+<title>Widget Placement and Sizing</title>
+<para>
+To move a sibling widget of the child making the geometry request,
+the parent uses
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMoveWidget'>
+<funcprototype>
+<funcdef>void <function>XtMoveWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Position <parameter>x</parameter></paramdef>
+ <paramdef>Position <parameter>y</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the new widget x and y coordinates.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>
+function returns immediately if the specified geometry fields
+are the same as the old values.
+Otherwise,
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>
+writes the new <emphasis remap='I'>x</emphasis> and <emphasis remap='I'>y</emphasis> values into the object
+and, if the object is a widget and is realized, issues an Xlib
+<function>XMoveWindow</function>
+call on the widget's window.
+</para>
+
+<para>
+To resize a sibling widget of the child making the geometry request,
+the parent uses
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtResizeWidget'>
+<funcprototype>
+<funcdef>void <function>XtResizeWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Dimension <parameter>width</parameter></paramdef>
+ <paramdef>Dimension <parameter>height</parameter></paramdef>
+ <paramdef>Dimension <parameter>border_width</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>border_width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the new widget size.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+function returns immediately if the specified geometry fields
+are the same as the old values.
+Otherwise,
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+writes the new <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>, and <emphasis remap='I'>border_width</emphasis> values into
+the object and, if the object is a widget and is realized, issues an
+<function>XConfigureWindow</function>
+call on the widget's window.
+</para>
+
+<para>
+If the new width or height is different from the old values,
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+calls the object's resize procedure to notify it of the size change.
+</para>
+
+<para>
+To move and resize the sibling widget of the child making the geometry request,
+the parent uses
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConfigureWidget'>
+<funcprototype>
+<funcdef>void <function>XtConfigureWidget</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Position <parameter>x</parameter></paramdef>
+ <paramdef>Position <parameter>y</parameter></paramdef>
+ <paramdef>Dimension <parameter>width</parameter></paramdef>
+ <paramdef>Dimension <parameter>height</parameter></paramdef>
+ <paramdef>Dimension <parameter>border_width</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the new widget x and y coordinates.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>width</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>height</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>border_width</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the new widget size.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+function returns immediately if the specified new geometry fields
+are all equal to the current values.
+Otherwise,
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+writes the new <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>,
+and <emphasis remap='I'>border_width</emphasis> values
+into the object and, if the object is a widget and is realized, makes an Xlib
+<function>XConfigureWindow</function>
+call on the widget's window.
+</para>
+
+<para>
+If the new width or height is different from its old value,
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+calls the object's resize procedure to notify it of the size change;
+otherwise, it simply returns.
+</para>
+
+<para>
+To resize a child widget that already has the new values of its width,
+height, and border width, the parent uses
+<xref linkend='XtResizeWindow' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtResizeWindow'>
+<funcprototype>
+<funcdef>void <function>XtResizeWindow</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtResizeWindow' xrefstyle='select: title'/>
+function calls the
+<function>XConfigureWindow</function>
+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.
+</para>
+
+<para>
+There are very few times to use
+<xref linkend='XtResizeWindow' xrefstyle='select: title'/>;
+instead, the parent should use
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Preferred_Geometry">
+<title>Preferred Geometry</title>
+<para>
+Some parents may be willing to adjust their layouts to accommodate the
+preferred geometries of their children.
+They can use
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+to obtain the preferred geometry
+and, as they see fit, can use or ignore any portion of the response.
+</para>
+
+<para>
+To query a child widget's preferred geometry, use
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtQueryGeometry'>
+<funcprototype>
+<funcdef>XtGeometryResult <function>XtQueryGeometry</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>intended</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>preferred_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>intended</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new geometry the parent plans to give to the child, or
+NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>preferred_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the child widget's preferred geometry.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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 <emphasis remap='I'>intended.request_mode</emphasis>,
+and calls
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>.
+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.
+</para>
+
+<para>
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+clears all bits in the <emphasis remap='I'>preferred_return-&gt;request_mode</emphasis>
+field and checks the
+<emphasis remap='I'>query_geometry</emphasis> field of the specified widget's class record.
+If <emphasis remap='I'>query_geometry</emphasis> is not NULL,
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+calls the query_geometry procedure and passes as arguments the
+specified widget, <emphasis remap='I'>intended</emphasis>, and <emphasis remap='I'>preferred_return</emphasis> structures.
+If the <emphasis remap='I'>intended</emphasis> argument is NULL,
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+replaces it with a pointer to an
+<function>XtWidgetGeometry</function>
+structure with <emphasis remap='I'>request_mode</emphasis> equal to zero before calling the
+query_geometry procedure.
+</para>
+
+<note>
+<para>
+If
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+is called from within a geometry_manager
+procedure for the widget that issued
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+or
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>,
+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.
+</para>
+</note>
+
+<para>
+The query_geometry procedure pointer is of type
+<xref linkend='XtGeometryHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='_XtGeometryHandler'>
+<funcprototype>
+<funcdef>typedef XtGeometryResult <function>(*XtGeometryHandler)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>request</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>preferred_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the child widget whose preferred geometry is required.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the geometry changes that the parent plans to make.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>preferred_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes a structure in which the child returns its preferred geometry.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The query_geometry procedure is expected to examine the bits set in
+<emphasis remap='I'>request-&gt;request_mode</emphasis>, evaluate the preferred geometry of the widget,
+and store the result in <emphasis remap='I'>preferred_return</emphasis>
+(setting the bits in <emphasis remap='I'>preferred_return-&gt;request_mode</emphasis> corresponding
+to those geometry fields that it cares about).
+If the proposed geometry change is acceptable without modification,
+the query_geometry procedure should return
+<function>XtGeometryYes</function>.
+If at least one field in <emphasis remap='I'>preferred_return</emphasis>
+with a bit set in <emphasis remap='I'>preferred_return-&gt;request_mode</emphasis>
+is different
+from the corresponding field in <emphasis remap='I'>request</emphasis>
+or if a bit was set in <emphasis remap='I'>preferred_return-&gt;request_mode</emphasis>
+that was not set in the request,
+the query_geometry procedure should return
+<function>XtGeometryAlmost</function>.
+If the preferred geometry is identical to the current geometry,
+the query_geometry procedure should return
+<function>XtGeometryNo</function>.
+</para>
+
+<note><para>
+The query_geometry procedure may assume
+that no
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+or
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+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.
+</para></note>
+
+<para>
+After calling the query_geometry procedure
+or if the <emphasis remap='I'>query_geometry</emphasis> field is NULL,
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+examines all the unset bits in <emphasis remap='I'>preferred_return-&gt;request_mode</emphasis>
+and sets the corresponding fields in <emphasis remap='I'>preferred_return</emphasis>
+to the current values from the widget instance.
+If
+<function>CWStackMode</function>
+is not set,
+the <emphasis remap='I'>stack_mode</emphasis> field is set to
+<function>XtSMDontChange</function>.
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+returns the value returned by the query_geometry procedure or
+<function>XtGeometryYes</function>
+if the <emphasis remap='I'>query_geometry</emphasis> field is NULL.
+</para>
+
+<para>
+Therefore, the caller can interpret a return of
+<function>XtGeometryYes</function>
+as not needing to evaluate the contents of the reply and, more important,
+not needing to modify its layout plans.
+A return of
+<function>XtGeometryAlmost</function>
+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
+<function>XtGeometryNo</function>
+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 <emphasis remap='I'>preferred_return</emphasis> structure contains complete
+geometry information for the child.
+</para>
+
+<para>
+Parents are expected to call
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+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.
+</para>
+</sect1>
+
+<sect1 id="Size_Change_Management_The_resize_Procedure">
+<title>Size Change Management: The resize Procedure</title>
+<para>
+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
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>,
+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
+<xref linkend='XtWidgetProc' xrefstyle='select: title'/>.
+</para>
+
+<para>
+If a class need not recalculate anything when a widget is resized,
+it can specify NULL for the <emphasis remap='I'>resize</emphasis> 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 <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>,
+and <emphasis remap='I'>border_width</emphasis> 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
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+or
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+call from its resize procedure.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH07 b/libXt/specs/CH07
deleted file mode 100644
index 07b36746b..000000000
--- a/libXt/specs/CH07
+++ /dev/null
@@ -1,3555 +0,0 @@
-.\" $Xorg: CH07,v 1.4 2000/08/17 19:42:45 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 7\fP\s-1
-
-\s+1\fBEvent Management\fP\s-1
-.sp 2
-.nr H1 7
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 7 \(em Event Management
-.XE
-While Xlib allows the reading and processing of events anywhere in an application,
-widgets in the \*(tk 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.
-.LP
-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 \*(xI is
-.PN XtAppMainLoop .
-.LP
-The event manager is a collection of functions to perform the following tasks:
-.IP \(bu 5
-Add or remove event sources other than X server events (in particular,
-timer interrupts, file input, or POSIX signals).
-.IP \(bu 5
-Query the status of event sources.
-.IP \(bu 5
-Add or remove procedures to be called when an event occurs for a particular
-widget.
-.IP \(bu 5
-Enable and
-disable the dispatching of user-initiated events (keyboard and pointer events)
-for a particular widget.
-.IP \(bu 5
-Constrain the dispatching of events to a cascade of pop-up widgets.
-.IP \(bu 5
-Register procedures to be called when specific events arrive.
-.IP \(bu 5
-Register procedures to be called when the \*(xI will block.
-.IP \(bu 5
-Enable safe operation in a multi-threaded environment.
-.LP
-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
-.PN XtAppMainLoop .
-
-.NH 2
-Adding and Deleting Additional Event Sources
-.XS
-\fB\*(SN Adding and Deleting Additional Event Sources\fP
-.XE
-.LP
-While most applications are driven only by X events,
-some applications need to incorporate other sources of input
-into the \*(xI event-handling mechanism.
-The event manager provides routines to integrate notification of timer events
-and file data pending into this mechanism.
-.LP
-The next section describes functions that provide input gathering from files.
-The application registers the files with the \*(xI read routine.
-When input is pending on one of the files,
-the registered callback procedures are invoked.
-
-.NH 3
-Adding and Removing Input Sources
-.XS
-\fB\*(SN Adding and Removing Input Sources\fP
-.XE
-.LP
-To register a new file as an input source for a given application context, use
-.PN XtAppAddInput .
-.LP
-.IN "XtAppAddInput" "" "@DEF@"
-.sM
-.FD 0
-XtInputId XtAppAddInput(\fIapp_context\fP, \fIsource\fP, \fIcondition\fP, \
-\fIproc\fP, \fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- int \fIsource\fP;
-.br
- XtPointer \fIcondition\fP;
-.br
- XtInputCallbackProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIsource\fP 1i
-Specifies the source file descriptor on a POSIX-based system
-or other operating-system-dependent device specification.
-.IP \fIcondition\fP 1i
-Specifies the mask that indicates a read, write, or exception condition
-or some other operating-system-dependent condition.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called when the condition is found.
-.IP \fIclient_data\fP 1i
-Specifies an argument passed to the specified procedure
-when it is called.
-.LP
-.eM
-The
-.PN 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 \fIfile\fP should be loosely interpreted to mean any sink
-or source of data.
-.PN XtAppAddInput
-also specifies the conditions under which the source can generate events.
-When an event is pending on this source,
-the callback procedure is called.
-.LP
-The legal values for the \fIcondition\fP argument are operating-system-dependent.
-On a POSIX-based system,
-\fIsource\fP is a file number and the condition is some union of the following:
-.IN "XtInputReadMask" "" "@DEF@"
-.IP \fBXtInputReadMask\fR 1.5i
-Specifies that \fIproc\fP is to be called when \fIsource\fP has data to be read.
-.IN "XtInputWriteMask" "" "@DEF@"
-.IP \fBXtInputWriteMask\fR 1.5i
-Specifies that \fIproc\fP is to be called when \fIsource\fP is ready
-for writing.
-.IN "XtInputExceptMask" "" "@DEF@"
-.IP \fBXtInputExceptMask\fR 1.5i
-Specifies that \fIproc\fP is to be called when \fIsource\fP has
-exception data.
-.LP
-Callback procedure pointers used to handle file events are of
-type
-.PN XtInputCallbackProc .
-.LP
-.IN "XtInputCallbackProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtInputCallbackProc)(XtPointer, int*, XtInputId*);
-.br
- XtPointer \fIclient_data\fP;
-.br
- int *\fIsource\fP;
-.br
- XtInputId *\fIid\fP;
-.FN
-.IP \fIclient_data\fP 1i
-Passes the client data argument that was registered for this procedure in
-.PN XtApp\%AddInput .
-.IP \fIsource\fP 1i
-Passes the source file descriptor generating the event.
-.IP \fIid\fP 1i
-Passes the id returned from the corresponding
-.PN XtAppAddInput
-call.
-.LP
-.eM
-See Section 7.12 for information regarding the use of
-.PN XtAppAddInput
-in multiple threads.
-.sp
-.LP
-To discontinue a source of input, use
-.PN XtRemoveInput .
-.LP
-.IN "XtRemoveInput" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveInput(\fIid\fP)
-.br
- XtInputId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies the id returned from the corresponding
-.PN XtAppAddInput
-call.
-.LP
-.eM
-The
-.PN XtRemoveInput
-function causes the \*(xI read routine to stop watching for events
-from the file source specified by \fIid\fP.
-.LP
-See Section 7.12 for information regarding the use of
-.PN XtRemoveInput
-in multiple threads.
-
-.NH 3
-Adding and Removing Blocking Notifications
-.XS
-\fB\*(SN Adding and Removing Blocking Notifications\fP
-.XE
-.LP
-Occasionally it is desirable for an application to receive notification
-when the \*(xI 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.
-.sp
-.LP
-To register a hook that is called immediately prior to event blocking, use
-.PN XtAppAddBlockHook .
-.LP
-.IN "XtAppAddBlockHook" "" "@DEF@"
-.sM
-.FD 0
-XtBlockHookId XtAppAddBlockHook(\fIapp_context\fP, \fIproc\fP, \
-\fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtBlockHookProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called before blocking.
-.IP \fIclient_data\fP 1i
-Specifies an argument passed to the specified procedure when it is called.
-.LP
-.eM
-The
-.PN XtAppAddBlockHook
-function registers the specified procedure and returns an identifier for it.
-The hook procedure \fIproc\fP is called at any time in the future when
-the \*(xI are about to block pending some input.
-.LP
-The procedure pointers used to provide notification of event blocking
-are of type
-.PN XtBlockHookProc .
-.LP
-.IN "XtBlockHookProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtBlockHookProc)(XtPointer);
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIclient_data\fP 1i
-Passes the client data argument that was registered for this procedure in
-.PN XtApp\%AddBlockHook .
-.LP
-.eM
-To discontinue the use of a procedure for blocking notification, use
-.PN XtRemoveBlockHook .
-.LP
-.IN "XtRemoveBlockHook" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveBlockHook(\fIid\fP)
-.br
- XtBlockHookId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies the identifier returned from the corresponding call to
-.PN XtAppAddBlockHook .
-.LP
-.eM
-The
-.PN XtRemoveBlockHook
-function removes the specified procedure from the list of procedures
-that are called by the \*(xI read routine before blocking on event sources.
-
-.NH 3
-Adding and Removing Timeouts
-.XS
-\fB\*(SN Adding and Removing Timeouts\fP
-.XE
-.LP
-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.
-.sp
-.LP
-To register a timeout callback, use
-.PN XtAppAddTimeOut .
-.LP
-.IN "XtAppAddTimeOut" "" "@DEF@"
-.sM
-.FD 0
-XtIntervalId XtAppAddTimeOut(\fIapp_context\fP, \fIinterval\fP, \fIproc\fP, \
-\fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- unsigned long \fIinterval\fP;
-.br
- XtTimerCallbackProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context for which the timer is to be set.
-.IP \fIinterval\fP 1i
-Specifies the time interval in milliseconds.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called when the time expires.
-.IP \fIclient_data\fP 1i
-Specifies an argument passed to the specified procedure
-when it is called.
-.LP
-.eM
-The
-.PN XtAppAddTimeOut
-function creates a timeout and returns an identifier for it.
-The timeout value is set to \fIinterval\fP.
-The callback procedure \fIproc\fP is called when
-.PN XtAppNextEvent
-or
-.PN XtAppProcessEvent
-is next called after the time interval elapses,
-and then the timeout is removed.
-.LP
-Callback procedure pointers used with timeouts are of
-type
-.PN XtTimerCallbackProc .
-.LP
-.IN "XtTimerCallbackProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtTimerCallbackProc)(XtPointer, XtIntervalId*);
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtIntervalId *\fItimer\fP;
-.FN
-.IP \fIclient_data\fP 1i
-Passes the client data argument that was registered for this procedure in
-.PN XtApp\%AddTimeOut .
-.IP \fItimer\fP 1i
-Passes the id returned from the corresponding
-.PN XtAppAddTimeOut
-call.
-.LP
-.eM
-See Section 7.12 for information regarding the use of
-.PN XtAppAddTimeOut
-in multiple threads.
-.sp
-.LP
-To clear a timeout value, use
-.PN XtRemoveTimeOut .
-.LP
-.IN "XtRemoveTimeOut" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveTimeOut(\fItimer\fP)
-.br
- XtIntervalId \fItimer\fP;
-.FN
-.IP \fItimer\fP 1i
-Specifies the id for the timeout request to be cleared.
-.LP
-.eM
-The
-.PN XtRemoveTimeOut
-function removes the pending timeout.
-Note that timeouts are automatically removed once they trigger.
-.LP
-Please refer to Section 7.12 for information regarding the use of
-.PN XtRemoveTimeOut
-in multiple threads.
-
-.NH 3
-Adding and Removing Signal Callbacks
-.XS
-\fB\*(SN Adding and Removing Signal Callbacks\fP
-.XE
-.LP
-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.
-.sp
-.LP
-Prior to establishing a signal handler, the application or widget should
-call
-.PN XtAppAddSignal
-and store the resulting identifier in a place accessible to the signal
-handler. When a signal arrives, the signal handler should call
-.PN XtNoticeSignal
-to notify the \*(xI that a signal has occured. To register a signal
-callback use
-.PN XtAppAddSignal .
-.LP
-.IN "XtAppAddSignal" "" "@DEF@"
-.sM
-.FD 0
-XtSignalId XtAppAddSignal(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtSignalCallbackProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called when the signal is noticed.
-.IP \fIclient_data\fP 1i
-Specifies an argument passed to the specified procedure when it is called.
-.LP
-.eM
-The callback procedure pointers used to handle signal events are of type
-.PN XtSignalCallbackProc .
-.LP
-.IN "XtSignalCallbackProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtSignalCallbackProc)(XtPointer, XtSignalId*);
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtSignalId *\fIid\fP;
-.FN
-.IP \fIclient_data\fP 1i
-Passes the client data argument that was registered for this procedure in
-.PN XtAppAddSignal .
-.IP \fIid\fP 1i
-Passes the id returned from the corresponding
-.PN XtAppAddSignal
-call.
-.LP
-.eM
-To notify the \*(xI that a signal has occured, use
-.PN XtNoticeSignal .
-.LP
-.IN "XtNoticeSignal" "" "@DEF@"
-.sp
-.sM
-.FD 0
-void XtNoticeSignal(\fIid\fP)
-.br
- XtSignalId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies the id returned from the corresponding
-.PN XtAppAddSignal
-call.
-.LP
-.eM
-On a POSIX-based system,
-.PN XtNoticeSignal
-is the only \*(xI function that can safely be called from a signal handler.
-If
-.PN XtNoticeSignal
-is invoked multiple times before the \*(xI are able to invoke the
-registered callback, the callback is only called once.
-Logically, the \*(xI maintain ``pending'' flag for each registered callback.
-This flag is initially
-.PN False
-and is set to
-.PN True
-by
-.PN XtNoticeSignal .
-When
-.PN XtAppNextEvent
-or
-.PN XtAppProcessEvent
-(with a mask including
-.PN XtIMSignal )
-is called, all registered callbacks with ``pending''
-.PN True
-are invoked and the flags are reset to
-.PN False .
-.LP
-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 \*(xI never block signals from being raised, so if a given
-signal can be raised multiple times before the \*(xI 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 \*(xI
-sets the pending flag to
-.PN False
-but before the callback can get control, in which case the pending flag
-will still be
-.PN True
-after the callback returns, and the \*(xI 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.
-.LP
-To remove a registered signal callback, call
-.PN XtRemoveSignal .
-.LP
-.IN "XtRemoveSignal" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveSignal(\fIid\fP)
-.br
- XtSignalId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies the id returned by the corresponding call to
-.PN XtAppAddSignal .
-.LP
-.eM
-The client should typically disable the source of the signal before calling
-.PN XtRemoveSignal .
-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
-.PN XtRemoveSignal
-the client can test for signals with
-.PN XtAppPending
-and process them by calling
-.PN XtAppProcessEvent
-with the mask
-.PN XtIMSignal .
-
-.NH 2
-Constraining Events to a Cascade of Widgets
-.XS
-\fB\*(SN Constraining Events to a Cascade of Widgets\fP
-.XE
-.LP
-.IN "Grabbing Input"
-.IN "Input Grabbing"
-Modal widgets are widgets that, except for the input directed to them,
-lock out user input to the application.
-.LP
-When a modal menu or modal dialog box is popped up using
-.PN XtPopup ,
-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.
-.LP
-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.
-.LP
-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
-.PN KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-and
-.PN ButtonRelease .
-The user events ignored when they occur outside the cascade are
-.PN MotionNotify
-and
-.PN EnterNotify .
-All other events are delivered normally.
-In particular, note that this is one
-way in which widgets can receive
-.PN LeaveNotify
-events without first receiving
-.PN EnterNotify
-events; they should be prepared to deal with
-this, typically by ignoring any unmatched
-.PN LeaveNotify
-events.
-.LP
-.PN XtPopup
-uses the
-.PN XtAddGrab
-and
-.PN XtRemoveGrab
-functions to constrain user events to a modal cascade
-and subsequently to remove a grab when the modal widget is popped down.
-
-.sp
-.LP
-To constrain or redirect user input to a modal widget, use
-.PN XtAddGrab .
-.LP
-.IN "XtAddGrab" "" "@DEF@"
-.sM
-.FD 0
-void XtAddGrab(\fIw\fP, \fIexclusive\fP, \fIspring_loaded\fP)
-.br
- Widget \fIw\fP;
-.br
- Boolean \fIexclusive\fP;
-.br
- Boolean \fIspring_loaded\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget to add to the modal cascade. \*(cI
-.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.
-.LP
-.eM
-The
-.PN XtAddGrab
-function appends the widget to the modal cascade
-and checks that \fIexclusive\fP is
-.PN True
-if \fIspring_loaded\fP is
-.PN True .
-If this condition is not met,
-.PN XtAddGrab
-generates a warning message.
-.LP
-The modal cascade is used by
-.PN XtDispatchEvent
-when it tries to dispatch a user event.
-When at least one modal widget is in the widget cascade,
-.PN 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 \fIexclusive\fP parameter
-.PN 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 \fIexclusive\fP
-.PN 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 \fIexclusive\fP
-.PN 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 in the application they occur,
-remap events are always delivered to the most recent widget in the active
-subset of the cascade registered with \fIspring_loaded\fP
-.PN 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 \*(xI do not modify
-the contents of the event.
-.sp
-.LP
-To remove the redirection of user input to a modal widget, use
-.PN XtRemoveGrab .
-.LP
-.IN "XtRemoveGrab" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveGrab(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget to remove from the modal cascade.
-.LP
-.eM
-The
-.PN XtRemoveGrab
-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.
-
-.NH 3
-Requesting Key and Button Grabs
-.XS
-\fB\*(SN Requesting Key and Button Grabs\fP
-.XE
-.LP
-The \*(xI provide a set of key and button grab interfaces that
-are parallel to those provided by Xlib and that allow the \*(xI
-to modify event dispatching when necessary. \*(tk applications and
-widgets that need to passively grab keys or buttons or actively grab
-the keyboard or pointer should use the
-following \*(xI routines rather than the corresponding Xlib
-routines.
-.sp
-.LP
-To passively grab a single key of the keyboard, use
-.PN XtGrabKey .
-.LP
-.IN "XtGrabKey" "" "@DEF@"
-.sM
-.FD 0
-void XtGrabKey(\fIwidget\fP, \fIkeycode\fP, \fImodifiers\fP, \
-\fIowner_events\fP, \fIpointer_mode\fP, \fIkeyboard_mode\fP)
-.br
- Widget \fIwidget\fP;
-.br
- KeyCode \fIkeycode\fP;
-.br
- Modifiers \fImodifiers\fP;
-.br
- Boolean \fIowner_events\fP;
-.br
- int \fIpointer_mode\fP, \fIkeyboard_mode\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget in whose window the key is to be grabbed. \*(cI
-.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 1i
-Specify arguments to
-.PN XGrabKey ;
-see Section 12.2 in \fI\*(xL\fP.
-.LP
-.eM
-.PN XtGrabKey
-calls
-.PN XGrabKey
-specifying the widget's window as the grab
-window if the widget is realized. The remaining arguments are exactly
-as for
-.PN XGrabKey .
-If the widget is not realized, or is later unrealized, the call to
-.PN XGrabKey
-is performed (again) when
-the widget is realized and its window becomes mapped. In the future,
-if
-.PN XtDispatchEvent
-is called with a
-.PN KeyPress
-event matching the specified keycode and modifiers (which may be
-.PN AnyKey
-or
-.PN AnyModifier ,
-respectively) for the
-widget's window, the \*(xI will call
-.PN XtUngrabKeyboard
-with the timestamp from the
-.PN 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
-.PN XFilterEvent
-returns
-.PN True .
-
-.sp
-.LP
-To cancel a passive key grab, use
-.PN XtUngrabKey .
-.LP
-.IN "XtUngrabKey" "" "@DEF@"
-.sM
-.FD 0
-void XtUngrabKey(\fIwidget\fP, \fIkeycode\fP\fI, modifiers\fP)
-.br
- Widget \fIwidget\fP;
-.br
- KeyCode \fIkeycode\fP;
-.br
- Modifiers \fImodifiers\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget in whose window the key was grabbed.
-.sp 6p
-.IP \fIkeycode\fP
-.br
-.ns
-.IP \fImodifiers\fP 1i
-Specify arguments to
-.PN XUngrabKey ;
-see Section 12.2 in \fI\*(xL\fP.
-.LP
-.eM
-The
-.PN XtUngrabKey
-procedure calls
-.PN XUngrabKey
-specifying the widget's
-window as the ungrab window if the widget is realized. The remaining
-arguments are exactly as for
-.PN XUngrabKey .
-If the widget is not realized,
-.PN XtUngrabKey
-removes a deferred
-.PN XtGrabKey
-request, if any, for the specified widget, keycode, and modifiers.
-.sp
-.LP
-To actively grab the keyboard, use
-.PN XtGrabKeyboard .
-.LP
-.IN "XtGrabKeyboard" "" "@DEF@"
-.sM
-.FD 0
-int XtGrabKeyboard(\fIwidget\fP, \fIowner_events\fP, \fIpointer_mode\fP, \
-\fIkeyboard_mode\fP, \fItime\fP)
-.br
- Widget \fIwidget\fP;
-.br
- Boolean \fIowner_events\fP;
-.br
- int \fIpointer_mode\fP, \fIkeyboard_mode\fP;
-.br
- Time \fItime\fP;
-.br
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget for whose window the keyboard is to be grabbed.
-\*(cI
-.sp 6p
-.IP \fIowner_events\fP
-.br
-.ns
-.IP \fIpointer_mode\fP
-.br
-.ns
-.IP \fIkeyboard_mode\fP
-.br
-.ns
-.IP \fItime\fP 1i
-Specify arguments to
-.PN XGrabKeyboard ;
-see Section 12.2 in \fI\*(xL\fP.
-.LP
-.eM
-If the specified widget is realized,
-.PN XtGrabKeyboard
-calls
-.PN XGrabKeyboard
-specifying the widget's window as the grab window. The remaining
-arguments and return value are exactly as for
-.PN XGrabKeyboard .
-If the widget is not realized,
-.PN XtGrabKeyboard
-immediately returns
-.PN GrabNotViewable .
-No future automatic ungrab is implied by
-.PN XtGrabKeyboard .
-.sp
-.LP
-To cancel an active keyboard grab, use
-.PN XtUngrabKeyboard .
-.LP
-.IN "XtUngrabKeyboard" "" "@DEF@"
-.sM
-.FD 0
-void XtUngrabKeyboard(\fIwidget\fP, \fItime\fP)
-.br
- Widget \fIwidget\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget that has the active keyboard grab.
-.IP \fItime\fP 1i
-Specifies the additional argument to
-.PN XUngrabKeyboard ;
-see Section 12.2 in \fI\*(xL\fP.
-.LP
-.eM
-.PN XtUngrabKeyboard
-calls
-.PN XUngrabKeyboard
-with the specified time.
-.sp
-.LP
-To passively grab a single pointer button, use
-.PN XtGrabButton .
-.LP
-.IN "XtGrabButton" "" "@DEF@"
-.sM
-.FD 0
-void XtGrabButton(\fIwidget\fP, \fIbutton\fP, \fImodifiers\fP, \
-\fIowner_events\fP, \fIevent_mask\fP, \fIpointer_mode\fP,
- \fIkeyboard_mode\fP, \fIconfine_to\fP, \fIcursor\fP)
-.br
- Widget \fIwidget\fP;
-.br
- int \fIbutton\fP;
-.br
- Modifiers \fImodifiers\fP;
-.br
- Boolean \fIowner_events\fP;
-.br
- unsigned int \fIevent_mask\fP;
-.br
- int \fIpointer_mode\fP, \fIkeyboard_mode\fP;
-.br
- Window \fIconfine_to\fP;
-.br
- Cursor \fIcursor\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget in whose window the button is to be grabbed. \*(cI
-.sp 6p
-.IP \fIbutton\fP
-.br
-.ns
-.IP \fImodifiers\fP
-.br
-.ns
-.IP \fIowner_events\fP
-.br
-.ns
-.IP \fIevent_mask\fP
-.br
-.ns
-.IP \fIpointer_mode\fP
-.br
-.ns
-.IP \fIkeyboard_mode\fP
-.br
-.ns
-.IP \fIconfine_to\fP
-.br
-.ns
-.IP \fIcursor\fP 1i
-Specify arguments to
-.PN XGrabButton ;
-see Section 12.1 in \fI\*(xL\fP.
-.LP
-.eM
-.PN XtGrabButton
-calls
-.PN XGrabButton
-specifying the widget's window as the
-grab window if the widget is realized. The remaining arguments are
-exactly as for
-.PN XGrabButton .
-If the widget is not realized, or is later unrealized, the call to
-.PN XGrabButton
-is performed (again)
-when the widget is realized and its window becomes mapped. In the
-future, if
-.PN XtDispatchEvent
-is called with a
-.PN ButtonPress
-event matching the specified button and modifiers (which may be
-.PN AnyButton
-or
-.PN AnyModifier ,
-respectively)
-for the widget's window, the \*(xI will call
-.PN XtUngrabPointer
-with the timestamp from the
-.PN 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
-.PN XFilterEvent
-returns
-.PN True .
-
-.sp
-.LP
-To cancel a passive button grab, use
-.PN XtUngrabButton .
-.LP
-.IN "XtUngrabButton" "" "@DEF@"
-.sM
-.FD 0
-void XtUngrabButton(\fIwidget\fP, \fIbutton\fP, \fImodifiers\fP)
-.br
- Widget \fIwidget\fP;
-.br
- unsigned int \fIbutton\fP;
-.br
- Modifiers \fImodifiers\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget in whose window the button was grabbed.
-.IP \fIbutton\fP
-.br
-.ns
-.IP \fImodifiers\fP 1i
-Specify arguments to
-.PN XUngrabButton ;
-see Section 12.1 in \fI\*(xL\fP.
-.LP
-.eM
-The
-.PN XtUngrabButton
-procedure calls
-.PN XUngrabButton
-specifying the
-widget's window as the ungrab window if the widget is realized. The
-remaining arguments are exactly as for
-.PN XUngrabButton .
-If the widget is not realized,
-.PN XtUngrabButton
-removes a deferred
-.PN XtGrabButton
-request, if any, for the specified widget, button, and modifiers.
-.sp
-.LP
-To actively grab the pointer, use
-.PN XtGrabPointer .
-.LP
-.IN "XtGrabPointer" "" "@DEF@"
-.sM
-.FD 0
-int XtGrabPointer(\fIwidget\fP, \fIowner_events\fP, \fIevent_mask\fP, \
-\fIpointer_mode\fP, \fIkeyboard_mode\fP,
- \fIconfine_to\fP, \fIcursor\fP, \fItime\fP)
-.br
- Widget \fIwidget\fP;
-.br
- Boolean \fIowner_events\fP;
-.br
- unsigned int \fIevent_mask\fP;
-.br
- int \fIpointer_mode\fP, \fIkeyboard_mode\fP;
-.br
- Window \fIconfine_to\fP;
-.br
- Cursor \fIcursor\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget for whose window the pointer is to be grabbed. \*(cI
-.sp 6p
-.IP \fIowner_events\fP
-.br
-.ns
-.IP \fIevent_mask\fP
-.br
-.ns
-.IP \fIpointer_mode\fP
-.br
-.ns
-.IP \fIkeyboard_mode\fP
-.br
-.ns
-.IP \fIconfine_to\fP
-.br
-.ns
-.IP \fIcursor\fP
-.br
-.ns
-.IP \fItime\fP 1i
-Specify arguments to
-.PN XGrabPointer ;
-see Section 12.1 in \fI\*(xL\fP.
-.LP
-.eM
-If the specified widget is realized,
-.PN XtGrabPointer
-calls
-.PN XGrabPointer ,
-specifying the widget's window as the grab window. The remaining
-arguments and return value are exactly as for
-.PN XGrabPointer .
-If the widget is not realized,
-.PN XtGrabPointer
-immediately returns
-.PN GrabNotViewable .
-No future automatic ungrab is implied by
-.PN XtGrabPointer .
-.sp
-.LP
-To cancel an active pointer grab, use
-.PN XtUngrabPointer .
-.LP
-.IN "XtUngrabPointer" "" "@DEF@"
-.sM
-.FD 0
-void XtUngrabPointer(\fIwidget\fP, \fItime\fP)
-.br
- Widget \fIwidget\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget that has the active pointer grab.
-.IP \fItime\fP 1i
-Specifies the time argument to
-.PN XUngrabPointer ;
-see Section 12.1 in \fI\*(xL\fP.
-.LP
-.eM
-.PN XtUngrabPointer
-calls
-.PN XUngrabPointer
-with the specified time.
-
-.NH 2
-Focusing Events on a Child
-.XS
-\fB\*(SN Focusing Events on a Child\fP
-.XE
-.LP
-To redirect keyboard input to a normal descendant of a
-widget without calling
-.PN XSetInputFocus ,
-use
-.PN XtSetKeyboardFocus .
-.LP
-.IN "XtSetKeyboardFocus" "" "@DEF@"
-.sM
-.FD 0
-void XtSetKeyboardFocus(\fIsubtree\fP\, \fIdescendant\fP)
-.br
- Widget \fIsubtree\fP, \fIdescendant\fP;
-.FN
-.IP \fIsubtree\fP 1i
-Specifies the subtree of the hierarchy for which the keyboard focus is
-to be set. \*(cI
-.IP \fIdescendant\fP 1i
-Specifies either the normal (non-pop-up) descendant of \fIsubtree\fP to which
-keyboard events are logically directed, or
-.PN None .
-It is not an error to specify
-.PN None
-when no input focus was previously set. \*(oI
-.LP
-.eM
-.PN XtSetKeyboardFocus
-causes
-.PN XtDispatchEvent
-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.
-.LP
-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).
-.IP \(bu 3
-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
-.PN XtGrabKey
-with any value of \fIowner_events\fP, or
-if the keyboard is actively grabbed by E with \fIowner_events\fP
-.PN False
-via
-.PN XtGrabKeyboard
-or
-.PN XtGrabKey
-on a previous key press, the event is dispatched to E.
-.IP \(bu 3
-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.
-.RS
-.IP \- 3
-If E is the final focus target widget F or a descendant of F, the
-event is dispatched to E.
-.IP \- 3
-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
-.PN XtGrabKey
-for E,
-.PN XtUngrabKeyboard
-is called.
-.IP \- 3
-If E is an ancestor of F, and the event is a key press, and either
-.RS
-.IP + 3
-E has grabbed the key with
-.PN XtGrabKey
-and \fIowner_events\fP
-.PN False ,
-or
-.IP + 3
-E has grabbed the key with
-.PN XtGrabKey
-and \fIowner_events\fP
-.PN True ,
-and the coordinates of the event are outside the rectangle specified
-by E's geometry,
-.RE
-then the event is dispatched to E.
-.IP \- 3
-Otherwise, define A as the closest common ancestor of E and F:
-.RS
-.IP + 3
-If there is an active keyboard grab for any widget via either
-.PN XtGrabKeyboard
-or
-.PN XtGrabKey
-on a previous key press, or
-if no widget between F and A (noninclusive) has grabbed
-the key and modifier combination with
-.PN XtGrabKey
-and any value of \fIowner_events\fP, the event is dispatched to F.
-.IP + 3
-Else, the event is dispatched to the ancestor of F closest to A
-that has grabbed the key and modifier combination with
-.PN XtGrabKey .
-.RE
-.RE
-.LP
-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 \*(xI do not modify
-the contents of the event.
-.LP
-When \fIsubtree\fP 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
-.PN FocusIn
-event is generated for the descendant if
-.PN FocusChange
-events have been selected by the descendant.
-Similarly, when \fIsubtree\fP loses the X input focus
-or the keyboard focus for one of its ancestors, a
-.PN FocusOut
-event is generated for descendant if
-.PN FocusChange
-events have been selected by the descendant.
-.sp
-.LP
-A widget tree may also actively manage the X server input focus. To
-do so, a widget class specifies an accept_focus procedure.
-.LP
-.IN "accept_focus procedure"
-The accept_focus procedure pointer is of type
-.PN XtAcceptFocusProc .
-.LP
-.IN "XtAcceptFocusProc" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtAcceptFocusProc)(Widget, Time*);
-.br
- Widget \fIw\fP;
-.br
- Time *\fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget.
-.IP \fItime\fP 1i
-Specifies the X time of the event causing the accept focus.
-.LP
-.eM
-Widgets that need the input focus can call
-.PN XSetInputFocus
-explicitly, pursuant to the restrictions of the \fI\*(xC\fP.
-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
-.PN FocusIn
-and
-.PN FocusOut
-events).
-Widgets classes that never want the input focus should set the
-\fIaccept_focus\fP field to NULL.
-.sp
-.LP
-To call a widget's accept_focus procedure, use
-.PN XtCallAcceptFocus .
-.LP
-.IN "XtCallAcceptFocus" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtCallAcceptFocus(\fIw\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Time *\fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.IP \fItime\fP 1i
-Specifies the X time of the event that is causing the focus change.
-.LP
-.eM
-The
-.PN 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 \fIaccept_focus\fP is NULL,
-.PN XtCallAcceptFocus
-returns
-.PN False .
-
-.NH 3
-Events for Drawables That Are Not a Widget's Window
-.XS
-\fB\*(SN Events for Drawables That Are Not a Widget's Window\fP
-.XE
-.LP
-Sometimes an application must handle events for drawables that are not
-associated with widgets in its widget tree. Examples include handling
-.PN GraphicsExpose
-and
-.PN NoExpose
-events on Pixmaps, and handling
-.PN PropertyNotify
-events on the root window.
-.LP
-To register a drawable with the \*(xI event dispatching, use
-.PN XtRegisterDrawable .
-.LP
-.IN "XtRegisterDrawable" "" "@DEF@"
-.sM
-.FD 0
-void XtRegisterDrawable(\fIdisplay\fP, \fIdrawable\fP, \fIwidget\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- Drawable \fIdrawable\fP;
-.br
- Widget \fIwidget\fP;
-.FN
-.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.
-.LP
-.eM
-.PN XtRegisterDrawable
-associates the specified drawable with the specified widget
-so that future calls to
-.PN XtWindowToWidget
-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.
-.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
-.PN XtRegisterDrawable
-are undefined.
-
-.LP
-To unregister a drawable with the Intrinsics event dispatching, use
-.PN XtUnregisterDrawable .
-.LP
-.IN "XtUnregisterDrawable" "" "@DEF@"
-.sM
-.FD 0
-void XtUnregisterDrawable(\fIdisplay\fP, \fIdrawable\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- Drawable \fIdrawable\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the drawable's display.
-.IP \fIdrawable\fP 1i
-Specifies the drawable to unregister.
-.LP
-.eM
-.PN XtUnregisterDrawable
-removes an association created with
-.PN XtRegisterDrawable .
-If the drawable is the window of a widget in the client's widget tree
-the results of calling
-.PN XtUnregisterDrawable
-are undefined.
-
-.NH 2
-Querying Event Sources
-.XS
-\fB\*(SN Querying Event Sources\fP
-.XE
-.LP
-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 \*(xI equivalents of the
-.PN XPending ,
-.PN XPeekEvent ,
-and
-.PN XNextEvent
-Xlib calls.
-.sp
-.LP
-.IN "Events"
-To determine if there are any events on the input queue for a given application,
-use
-.PN XtAppPending .
-.LP
-.IN "XtAppPending" "" "@DEF@"
-.sM
-.FD 0
-XtInputMask XtAppPending(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application to check.
-.LP
-.eM
-The
-.PN XtAppPending
-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
-.PN XtIMXEvent ,
-.PN XtIMTimer ,
-.PN XtIMAlternateInput ,
-and
-.PN XtIMSignal
-(see
-.PN XtAppProcessEvent ).
-If there are no events pending,
-.PN XtAppPending
-flushes the output buffers of each Display in the application context
-and returns zero.
-.sp
-.LP
-To return the event from the head of a given application's input queue
-without removing input from the queue, use
-.PN XtAppPeekEvent .
-.LP
-.IN "XtAppPeekEvent" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtAppPeekEvent(\fIapp_context\fP, \fIevent_return\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XEvent *\fIevent_return\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIevent_return\fP 1i
-Returns the event information to the specified event structure.
-.LP
-.eM
-If there is an X event in the queue,
-.PN XtAppPeekEvent
-copies it into \fIevent_return\fP and returns
-.PN True .
-If no X input is on the queue,
-.PN XtAppPeekEvent
-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,
-.PN XtAppPeekEvent
-fills in \fIevent_return\fP and returns
-.PN True .
-Otherwise, the input is for an input source
-registered with
-.PN XtAppAddInput ,
-and
-.PN XtAppPeekEvent
-returns
-.PN False .
-.FS
-The sample implementations provides XtAppPeekEvent as described. Timeout callbacks
-are called while blocking for input. If some input for an input source is
-available,
-.PN XtAppPeekEvent
-will return
-.PN True
-without returning an event.
-.FE
-.sp
-.LP
-To remove and return the event
-from the head of a given application's X event queue,
-use
-.PN XtAppNextEvent .
-.LP
-.IN "XtAppNextEvent" "" "@DEF@"
-.sM
-.FD 0
-void XtAppNextEvent(\fIapp_context\fP, \fIevent_return\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XEvent *\fIevent_return\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIevent_return\fP 1i
-Returns the event information to the specified event structure.
-.LP
-.eM
-If the X event queue is empty,
-.PN XtAppNextEvent
-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 Section 7.8.
-
-.NH 2
-Dispatching Events
-.XS
-\fB\*(SN Dispatching Events\fP
-.XE
-.LP
-The \*(xI provide functions that dispatch events
-to widgets or other application code.
-Every client interested in X events on a widget uses
-.PN XtAddEventHandler
-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 Chapter 10.
-.sp
-.LP
-Applications that need direct control of the processing of different types
-of input should use
-.PN XtAppProcessEvent .
-.LP
-.IN "XtAppProcessEvent" "" "@DEF@"
-.sM
-.FD 0
-void XtAppProcessEvent(\fIapp_context\fP, \fImask\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtInputMask \fImask\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the
-application for which to process input.
-.IP \fImask\fP 1i
-Specifies what types of events to process.
-The mask is the bitwise inclusive OR of any combination of
-.PN XtIMXEvent ,
-.PN XtIMTimer ,
-.PN XtIMAlternateInput ,
-and
-.PN XtIMSignal .
-As a convenience,
-.PN Intrinsic.h
-defines the symbolic name
-.PN XtIMAll
-to be the bitwise inclusive OR of these four event types.
-.LP
-.eM
-The
-.PN XtAppProcessEvent
-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
-.PN XtAppProcessEvent
-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
-.PN XtAppMainLoop .
-.PN XtAppProcessEvent
-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
-.PN XtDispatchEvent .
-.LP
-When an X event is received,
-it is passed to
-.PN XtDispatchEvent ,
-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.
-
-.sp
-.LP
-To dispatch an event returned by
-.PN XtAppNextEvent ,
-retrieved directly from the Xlib queue, or synthetically constructed,
-to any registered event filters or event handlers, call
-.PN XtDispatchEvent .
-.LP
-.IN "XtDispatchEvent" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtDispatchEvent(\fIevent\fP)
-.br
- XEvent *\fIevent\fP;
-.FN
-.IP \fIevent\fP 1i
-Specifies a pointer to the event structure to be dispatched
-to the appropriate event handlers.
-.LP
-.eM
-The
-.PN XtDispatchEvent
-function first calls
-.PN XFilterEvent
-with the \fIevent\fP and the window of the widget to which the
-\*(xI intend to dispatch the event, or the event window if
-the \*(xI would not dispatch the event to any handlers.
-If
-.PN XFilterEvent
-returns
-.PN True
-and the event activated a server grab as identified
-by a previous call to
-.PN XtGrabKey
-or
-.PN XtGrabButton ,
-.PN XtDispatchEvent
-calls
-.PN XtUngrabKeyboard
-or
-.PN XtUngrabPointer
-with the timestamp from the event and immediately returns
-.PN True .
-If
-.PN XFilterEvent
-returns
-.PN True
-and a grab was not activated,
-.PN XtDispatchEvent
-just immediately returns
-.PN True .
-Otherwise,
-.PN XtDispatchEvent
-sends the event to the event handler functions that
-have been previously registered with the dispatch routine.
-.PN XtDispatchEvent
-returns
-.PN True
-if
-.PN XFilterEvent
-returned
-.PN True ,
-or if the event was dispatched to some handler, and
-.PN False
-if it found no handler to which to dispatch the event.
-.PN XtDispatchEvent
-records the last timestamp in any event that
-contains a timestamp (see
-.PN XtLastTimestampProcessed ),
-regardless of whether it was filtered or dispatched.
-If a modal cascade is active with \fIspring_loaded\fP
-.PN True ,
-and if the event is a remap event as defined by
-.PN XtAddGrab ,
-.PN XtDispatchEvent
-may dispatch the event a second time. If it does so,
-.PN XtDispatchEvent
-will call
-.PN XFilterEvent
-again with the window of the spring-loaded widget prior to the second
-dispatch, and if
-.PN XFilterEvent
-returns
-.PN True ,
-the second dispatch will not be performed.
-
-.NH 2
-The Application Input Loop
-.XS
-\fB\*(SN The Application Input Loop\fP
-.XE
-.LP
-To process all input from a given application in a continuous loop,
-use the convenience procedure
-.PN XtAppMainLoop .
-.LP
-.IN "XtAppMainLoop" "" "@DEF@"
-.sM
-.FD 0
-void XtAppMainLoop(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.LP
-.eM
-The
-.PN XtAppMainLoop
-function first reads the next incoming X event by calling
-.PN XtAppNextEvent
-and then dispatches the event to the appropriate registered procedure
-by calling
-.PN XtDispatchEvent .
-This constitutes the main loop of \*(tk applications.
-There is nothing special about
-.PN XtAppMainLoop ;
-it simply calls
-.PN XtAppNextEvent
-and then
-.PN XtDispatchEvent
-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
-.PN XtAppLock
-and
-.PN XtAppUnlock .
-.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
-.PN XtAppNextEvent .
-
-.NH 2
-Setting and Checking the Sensitivity State of a Widget
-.XS
-\fB\*(SN Setting and Checking the Sensitivity State of a Widget\fP
-.XE
-.LP
-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.
-.LP
-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
-.PN KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-.PN ButtonRelease ,
-.PN MotionNotify ,
-.PN EnterNotify ,
-.PN LeaveNotify ,
-.PN FocusIn ,
-or
-.PN FocusOut .
-.LP
-A widget can be insensitive because its \fIsensitive\fP field is
-.PN False
-or because one of its ancestors is insensitive and thus the widget's
-\fIancestor_sensitive\fP field also is
-.PN False .
-A widget can but does not need to distinguish these two cases visually.
-.NT
-Pop-up shells will have
-\fIancestor_sensitive\fP
-.PN False
-if the parent was insensitive when the shell
-was created. Since
-.PN XtSetSensitive
-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.
-.NE
-.sp
-.LP
-To set the sensitivity state of a widget, use
-.PN XtSetSensitive .
-.LP
-.IN "XtSetSensitive" "" "@DEF@"
-.sM
-.FD 0
-void XtSetSensitive(\fIw\fP, \fIsensitive\fP)
-.br
- Widget \fIw\fP;
-.br
- Boolean \fIsensitive\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(rI
-.IP \fIsensitive\fP 1i
-Specifies whether the widget should receive
-keyboard, pointer, and focus events.
-.LP
-.eM
-The
-.PN XtSetSensitive
-function first calls
-.PN XtSetValues
-on the current widget with an argument list specifying the
-XtNsensitive resource and the new value.
-If \fIsensitive\fP is
-.PN False
-and the widget's class is a subclass of
-Composite,
-.PN XtSetSensitive
-recursively propagates the new value
-down the child tree by calling
-.PN XtSetValues
-on each child to set \fIancestor_sensitive\fP to
-.PN False .
-If \fIsensitive\fP is
-.PN True
-and the widget's class is a subclass of
-Composite
-and the widget's \fIancestor_sensitive\fP field is
-.PN True ,
-.PN XtSetSensitive
-sets the \fIancestor_sensitive\fP of each child to
-.PN True
-and then recursively calls
-.PN XtSetValues
-on each normal descendant that is now sensitive to set
-\fIancestor_sensitive\fP to
-.PN True .
-.LP
-.PN XtSetSensitive
-calls
-.PN XtSetValues
-to change the \fIsensitive\fP and \fIancestor_sensitive\fP 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).
-.LP
-.PN XtSetSensitive
-maintains the invariant that, if the parent has either \fIsensitive\fP
-or \fIancestor_sensitive\fP
-.PN False ,
-then all children have \fIancestor_sensitive\fP
-.PN False .
-.sp
-.LP
-To check the current sensitivity state of a widget,
-use
-.PN XtIsSensitive .
-.LP
-.IN "XtIsSensitive" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtIsSensitive(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the object. \*(oI
-.LP
-.eM
-The
-.PN XtIsSensitive
-function returns
-.PN True
-or
-.PN False
-to indicate whether user input events are being dispatched.
-If object's class is a subclass of RectObj and
-both \fIsensitive\fP and \fIancestor_sensitive\fP are
-.PN True ,
-.PN XtIsSensitive
-returns
-.PN True ;
-otherwise, it returns
-.PN False .
-
-.NH 2
-Adding Background Work Procedures
-.XS
-\fB\*(SN Adding Background Work Procedures\fP
-.XE
-.LP
-The \*(xI 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
-.PN XtAppNextEvent
-or
-.PN XtAppProcessEvent .
-Work procedure pointers are of type
-.PN XtWorkProc .
-.LP
-.IN "XtWorkProc" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtWorkProc)(XtPointer);
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIclient_data\fP 1i
-Passes the client data specified when the work procedure was registered.
-.LP
-.eM
-This procedure should return
-.PN True
-when it is done to indicate that it
-should be removed.
-If the procedure returns
-.PN 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.
-.sp
-.LP
-To register a work procedure for a given application, use
-.PN XtAppAddWorkProc .
-.LP
-.IN "XtAppAddWorkProc" "" "@DEF@"
-.sM
-.FD 0
-XtWorkProcId XtAppAddWorkProc(\fIapp_context\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtWorkProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that identifies the application.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called when the application is idle.
-.IP \fIclient_data\fP 1i
-Specifies the argument passed to the specified procedure
-when it is called.
-.LP
-.eM
-The
-.PN XtAppAddWorkProc
-function adds the specified work procedure for the application identified
-by \fIapp_context\fP
-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.
-.sp
-.LP
-To remove a work procedure, either return
-.PN True
-from the procedure when it is called or use
-.PN XtRemoveWorkProc
-outside of the procedure.
-.LP
-.IN "XtRemoveWorkProc" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveWorkProc(\fIid\fP)
-.br
- XtWorkProcId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies which work procedure to remove.
-.LP
-.eM
-The
-.PN XtRemoveWorkProc
-function explicitly removes the specified background work procedure.
-
-.NH 2
-X Event Filters
-.XS
-\*(SN X Event Filters
-.XE
-.LP
-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.
-
-.NH 3
-Pointer Motion Compression
-.XS
-\*(SN Pointer Motion Compression
-.XE
-.LP
-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 \fIcompress_motion\fP should be
-.PN True .
-.IN "compress_motion field"
-When a request for an event would return a motion event,
-the \*(xI 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.
-
-.NH 3
-Enter/Leave Compression
-.XS
-\*(SN Enter/Leave Compression
-.XE
-.LP
-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 \fIcompress_enterleave\fP should be
-.PN True .
-.IN "compress_enterleave field"
-These enter and leave events are not delivered to the client
-if they are found together in the input queue.
-
-.NH 3
-Exposure Compression
-.XS
-\*(SN Exposure Compression
-.XE
-.LP
-.IN "compress_expose field"
-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.
-.LP
-In either case, these widgets do not care about getting partial exposure events.
-The \fIcompress_exposure\fP 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:
-.sp
-.sM
-.Ds 0
-.TA 3i
-.ta 3i
-#define XtExposeNoCompress ((XtEnum)False)
-#define XtExposeCompressSeries ((XtEnum)True)
-#define XtExposeCompressMultiple <implementation-defined>
-#define XtExposeCompressMaximal <implementation-defined>
-.De
-.LP
-.eM
-optionally ORed with any combination of the following flags (all with
-implementation-defined values):
-.PN XtExposeGraphicsExpose ,
-.PN XtExposeGraphicsExposeMerged ,
-.PN XtExposeNoExpose ,
-and
-.PN XtExposeNoRegion .
-
-.LP
-If the \fIcompress_exposure\fP field in the widget class structure does not
-specify
-.PN XtExposeNoCompress ,
-the event manager calls the widget's expose procedure only
-once for a series of exposure events.
-In this case, all
-.PN Expose
-or
-.PN 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
-.PN XtExposeNoRegion
-is specified) the region.
-For more information on regions, see Section 16.5 in \fI\*(xL\fP.)
-.LP
-The values have the following interpretation:
-.sp
-.LP
-.PN XtExposeNoCompress
-.IN "XtExposeNoCompress" "" "@DEF@"
-.IP
-No exposure compression is performed; every selected event is
-individually dispatched to the expose procedure with a \fIregion\fP
-argument of NULL.
-.sp
-.LP
-.PN XtExposeCompressSeries
-.IN "XtExposeCompressSeries" "" "@DEF@"
-.IP
-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.
-.sp
-.LP
-.PN XtExposeCompressMultiple
-.IN "XtExposeCompressMultiple" "" "@DEF@"
-.IP
-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.
-.sp
-.LP
-.PN XtExposeCompressMaximal
-.IN "XtExposeCompressMaximal" "" "@DEF"
-.IP
-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 \*(xI will
-block until the end of the series is received.
-.sp
-.LP
-The additional flags have the following meaning:
-.sp
-.LP
-.PN XtExposeGraphicsExpose
-.IN "XtExposeGraphicsExpose" "" "@DEF@"
-.IP
-Specifies that
-.PN GraphicsExpose
-events are also to be dispatched to
-the expose procedure.
-.PN GraphicsExpose
-events are compressed, if specified, in the same manner as
-.PN Expose
-events.
-.sp
-.LP
-.PN XtExposeGraphicsExposeMerged
-.IN "XtExposeGraphicsExposeMerged" "" "@DEF@"
-.IP
-Specifies in the case of
-.PN XtExposeCompressMultiple
-and
-.PN XtExposeCompressMaximal
-that series of
-.PN GraphicsExpose
-and
-.PN 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
-.PN XtExposeGraphicsExpose .
-.sp
-.LP
-.PN XtExposeNoExpose
-.IN "XtExposeNoExpose" "" "@DEF@"
-.IP
-Specifies that
-.PN NoExpose
-events are also to be dispatched to the expose procedure.
-.PN NoExpose
-events are never coalesced with
-other exposure events or with each other.
-.sp
-.LP
-.PN XtExposeNoRegion
-.IN "XtExposeNoRegion" "" "@DEF"
-.IP
-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.
-
-.NH 2
-Widget Exposure and Visibility
-.XS
-\*(SN Widget Exposure and Visibility
-.XE
-.LP
-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.
-
-.NH 3
-Redisplay of a Widget: The expose Procedure
-.XS
-\*(SN Redisplay of a Widget: The expose Procedure
-.XE
-.IN "expose procedure"
-.LP
-The expose procedure pointer in a widget class is of type
-.PN XtExposeProc .
-.LP
-.IN "XtExposeProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtExposeProc)(Widget, XEvent*, Region);
-.br
- Widget \fIw\fP;
-.br
- XEvent *\fIevent\fP;
-.br
- Region \fIregion\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget instance requiring redisplay.
-.IP \fIevent\fP 1i
-Specifies the exposure event giving the rectangle requiring redisplay.
-.IP \fIregion\fP 1i
-Specifies the union of all rectangles in this exposure sequence.
-.LP
-.eM
-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 \fIexpose\fP field.
-Many composite widgets serve only as containers for their children
-and have no expose procedure.
-.NT
-If the \fIexpose\fP procedure is NULL,
-.PN XtRealizeWidget
-fills in a default bit gravity of
-.PN NorthWestGravity
-before it calls the widget's realize procedure.
-.NE
-.LP
-If the widget's \fIcompress_exposure\fP class field specifies
-.PN XtExposeNoCompress
-or
-.PN XtExposeNoRegion ,
-or if the event type is
-.PN NoExpose
-(see Section 7.9.3),
-\fIregion\fP is NULL. If
-.PN XtExposeNoCompress
-is not specified and the event type is not
-.PN NoExpose ,
-the event is the final event in the compressed series
-but \fIx\fP, \fIy\fP, \fIwidth\fP, and \fIheight\fP contain
-the bounding box for all the compressed events.
-The region is created and destroyed by the \*(xI, but
-the widget is permitted to modify the region contents.
-.LP
-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.
-.LP
-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
-.LP
-.DS
-Boolean invert;
-Boolean highlight;
-Dimension highlight_width;
-.DE
-Label would have \fIinvert\fP and \fIhighlight\fP always
-.PN False
-and \fIhighlight_width\fP zero.
-Pushbutton would dynamically set \fIhighlight\fP and \fIhighlight_width\fP,
-but it would leave \fIinvert\fP always
-.PN 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 Section 1.6.10.
-
-.NH 3
-Widget Visibility
-.XS
-\*(SN Widget Visibility
-.XE
-.LP
-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.
-.LP
-.IN "Visibility"
-The \fIvisible\fP 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
-.PN True
-by the time an
-exposure
-event is processed if any part of the widget is visible,
-but is
-.PN False
-if the widget is fully obscured.
-.LP
-Widgets can use or ignore the \fIvisible\fP hint.
-If they ignore it,
-they should have \fIvisible_interest\fP in their widget class record set
-.PN False .
-In such cases,
-the \fIvisible\fP field is initialized
-.PN True
-and never changes.
-If \fIvisible_interest\fP is
-.PN True ,
-the event manager asks for
-.PN VisibilityNotify
-events for the widget and sets \fIvisible\fP to
-.PN True
-on
-.PN VisibilityUnobscured
-or
-.PN VisibilityPartiallyObscured
-.IN VisibilityNotify
-events and
-.PN False
-on
-.PN VisibilityFullyObscured
-events.
-
-.NH 2
-X Event Handlers
-.XS
-\*(SN X Event Handlers
-.XE
-.LP
-Event handlers are procedures called when specified events
-occur in a widget.
-Most widgets need not use event handlers explicitly.
-Instead, they use the \*(xI translation manager.
-Event handler procedure pointers are of the type
-.PN XtEventHandler .
-.LP
-.IN "XtEventHandler" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtEventHandler)(Widget, XtPointer, XEvent*, Boolean*);
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XEvent *\fIevent\fP;
-.br
- Boolean *\fIcontinue_to_dispatch\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which the event arrived.
-.IP \fIclient_data\fP 1i
-Specifies any client-specific information registered with the event handler.
-.IP \fIevent\fP 1i
-Specifies the triggering event.
-.IP \fIcontinue_to_dispatch\fP 1i
-Specifies whether the remaining event
-handlers registered for the current event
-should be called.
-.LP
-.eM
-After receiving an event and before calling any event handlers, the
-Boolean pointed to by \fIcontinue_to_dispatch\fP is initialized to
-.PN True .
-When an event handler is called, it may decide that further processing
-of the event is not desirable and may store
-.PN False
-in this Boolean, in
-which case any handlers remaining to be called for the event are
-ignored.
-.LP
-The circumstances under which the \*(xI may add event handlers
-to a widget are currently implementation-dependent. Clients must
-therefore be aware that storing
-.PN False
-into the \fIcontinue_to_dispatch\fP argument can lead to portability problems.
-
-.NH 3
-Event Handlers That Select Events
-.XS
-\*(SN Event Handlers That Select Events
-.XE
-.LP
-To register an event handler procedure with the dispatch mechanism, use
-.PN XtAddEventHandler .
-.LP
-.IN "XtAddEventHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtAddEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this event handler is being registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to call this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-called on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be called.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the event handler.
-.LP
-.eM
-The
-.PN 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.
-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 \fIclient_data\fP
-value,
-the specified mask augments the existing mask.
-If the widget is realized,
-.PN XtAddEventHandler
-calls
-.PN XSelectInput ,
-if necessary.
-The order in which this procedure is called relative to other handlers
-registered for the same event is not defined.
-.sp
-.LP
-To remove a previously registered event handler, use
-.PN XtRemoveEventHandler .
-.LP
-.IN "XtRemoveEventHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this procedure is registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to unregister this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-removed on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be removed.
-.IP \fIclient_data\fP 1i
-Specifies the registered client data.
-.LP
-.eM
-The
-.PN XtRemoveEventHandler
-function unregisters an event handler registered with
-.PN XtAddEventHandler
-or
-.PN XtInsertEventHandler
-for the specified events.
-The request is ignored if \fIclient_data\fP does not match the value given
-when the handler was registered.
-If the widget is realized and no other event handler requires the event,
-.PN XtRemoveEventHandler
-calls
-.PN XSelectInput .
-If the specified procedure has not been registered
-or if it has been registered with a different value of \fIclient_data\fP,
-.PN XtRemoveEventHandler
-returns without reporting an error.
-.LP
-To stop a procedure registered with
-.PN XtAddEventHandler
-or
-.PN XtInsertEventHandler
-from receiving all selected events, call
-.PN XtRemoveEventHandler
-with an \fIevent_mask\fP of
-.PN XtAllEvents
-and \fInonmaskable\fP
-.PN True .
-The procedure will continue to receive any events
-that have been specified in calls to
-.PN XtAddRawEventHandler
-or
-.PN XtInsertRawEventHandler .
-.sp
-.LP
-To register an event handler procedure that receives events before or
-after all previously registered event handlers, use
-.PN XtInsertEventHandler .
-.LP
-.IN "XtListPosition" "" "@DEF@"
-.IN "XtInsertEventHandler" "" "@DEF@"
-.sM
-.Ds 0
-typedef enum {XtListHead, XtListTail} XtListPosition;
-.De
-.LP
-.FD 0
-void XtInsertEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP, \fIposition\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtListPosition \fIposition\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this event handler is being registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to call this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-called on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be called.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the client's event handler.
-.IP \fIposition\fP 1i
-Specifies when the event handler is to be called
-relative to other previously registered handlers.
-.LP
-.eM
-.PN XtInsertEventHandler
-is identical to
-.PN XtAddEventHandler
-with the additional \fIposition\fP argument. If \fIposition\fP is
-.PN XtListHead ,
-the event
-handler is registered so that it is called before any event
-handlers that were previously registered for the same widget. If
-\fIposition\fP is
-.PN 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.
-
-.NH 3
-Event Handlers That Do Not Select Events
-.XS
-\*(SN Event Handlers That Do Not Select Events
-.XE
-.LP
-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
-.PN XtAddRawEventHandler .
-.LP
-.IN "XtAddRawEventHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtAddRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this event handler is being registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to call this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-called on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be called.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the client's event handler.
-.LP
-.eM
-The
-.PN XtAddRawEventHandler
-function is similar to
-.PN XtAddEventHandler
-except that it does not affect the widget's event mask and never causes an
-.PN 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 \fIclient_data\fP,
-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.
-.sp
-.LP
-To remove a previously registered raw event handler, use
-.PN XtRemoveRawEventHandler .
-.LP
-.IN "XtRemoveRawEventHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this procedure is registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to unregister this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-removed on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be registered.
-.IP \fIclient_data\fP 1i
-Specifies the registered client data.
-.LP
-.eM
-The
-.PN XtRemoveRawEventHandler
-function unregisters an event handler registered with
-.PN XtAddRawEventHandler
-or
-.PN XtInsertRawEventHandler
-for the specified events without changing
-the window event mask.
-The request is ignored if \fIclient_data\fP 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 \fIclient_data\fP,
-.PN XtRemoveRawEventHandler
-returns without reporting an error.
-.LP
-To stop a procedure
-registered with
-.PN XtAddRawEventHandler
-or
-.PN XtInsertRawEventHandler
-from receiving all nonselected events, call
-.PN XtRemoveRawEventHandler
-with an \fIevent_mask\fP of
-.PN XtAllEvents
-and \fInonmaskable\fP
-.PN True .
-The procedure
-will continue to receive any events that have been specified in calls to
-.PN XtAddEventHandler
-or
-.PN XtInsertEventHandler .
-.sp
-.LP
-To register an event handler procedure that receives events before or
-after all previously registered event handlers without selecting for
-the events, use
-.PN XtInsertRawEventHandler .
-.LP
-.IN "XtInsertRawEventHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtInsertRawEventHandler(\fIw\fP, \fIevent_mask\fP, \fInonmaskable\fP, \
-\fIproc\fP, \fIclient_data\fP, \fIposition\fP)
-.br
- Widget \fIw\fP;
-.br
- EventMask \fIevent_mask\fP;
-.br
- Boolean \fInonmaskable\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtListPosition \fIposition\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget for which this event handler is being registered. \*(cI
-.IP \fIevent_mask\fP 1i
-Specifies the event mask for which to call this procedure.
-.IP \fInonmaskable\fP 1i
-Specifies whether this procedure should be
-called on the nonmaskable events
-.Pn ( GraphicsExpose ,
-.PN NoExpose ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-.PN ClientMessage ,
-and
-.PN MappingNotify ).
-.IP \fIproc\fP 1i
-Specifies the procedure to be registered.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the client's event handler.
-.IP \fIposition\fP 1i
-Specifies when the event handler is to be called
-relative to other previously registered handlers.
-.LP
-.eM
-The
-.PN XtInsertRawEventHandler
-function is similar to
-.PN XtInsertEventHandler
-except that it does not modify the widget's event
-mask and never causes an
-.PN 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.
-
-.NH 3
-Current Event Mask
-.XS
-\*(SN Current Event Mask
-.XE
-.LP
-To retrieve the event mask for a given widget, use
-.PN XtBuildEventMask .
-.LP
-.IN "XtBuildEventMask" "" "@DEF@"
-.sM
-.FD 0
-EventMask XtBuildEventMask(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(cI
-.LP
-.eM
-The
-.PN XtBuildEventMask
-function returns the event mask representing the logical OR
-of all event masks for event handlers registered on the widget with
-.PN XtAddEventHandler
-and
-.PN XtInsertEventHandler
-and all event translations, including accelerators,
-installed on the widget.
-This is the same event mask stored into the
-.PN XSetWindowAttributes
-structure by
-.PN XtRealizeWidget
-and sent to the server when event handlers and translations are installed or
-removed on the realized widget.
-
-.NH 3
-Event Handlers for X11 Protocol Extensions
-.XS
-\fB\*(SN Event Handlers for X11 Protocol Extensions\fP
-.XE
-.LP
-To register an event handler procedure with the \*(xI dispatch
-mechanism according to an event type, use
-.PN XtInsertEventTypeHandler .
-.LP
-.IN "XtInsertEventTypeHandler" "" "@DEF"
-.sM
-.FD 0
-void XtInsertEventTypeHandler(\fIwidget\fP, \fIevent_type\fP, \
-\fIselect_data\fP, \fIproc\fP, \fIclient_data\fP, \fIposition\fP)
-.br
- Widget \fIwidget\fP;
-.br
- int \fIevent_type\fP;
-.br
- XtPointer \fIselect_data\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtListPosition \fIposition\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget for which this event handler is being registered. \*(cI
-.IP \fIevent_type\fP 1i
-Specifies the event type for which to call this event handler.
-.IP \fIselect_data\fP 1i
-Specifies data used to request events of the specified type from the server,
-or NULL.
-.IP \fIproc\fP 1i
-Specifies the event handler to be called.
-.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.
-.LP
-.eM
-.PN XtInsertEventTypeHandler
-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 specifies one of the core X protocol events, then
-\fIselect_data\fP must be a pointer to a value of type
-.PN EventMask ,
-indicating
-the event mask to be used to select for the desired event. This event
-mask is included in the value returned by
-.PN XtBuildEventMask .
-If the widget is realized,
-.PN XtInsertEventTypeHandler
-calls
-.PN 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
-.PN 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 \*(xI 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
-invocation of event handlers registered for the same event type. If
-the client does not care about the order, it should normally specify
-.PN XtListTail ,
-which registers this event handler after any previously
-registered handlers for this event type.
-.LP
-Each widget has a single registered event handler list, which will
-contain any procedure/client_data pair exactly once if it is
-registered with
-.PN XtInsertEventTypeHandler ,
-regardless of the manner
-in which it is registered and regardless of the value(s)
-of \fIselect_data\fP. 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.
-.sp
-.LP
-To remove an event handler registered with
-.PN XtInsertEventTypeHandler ,
-use
-.PN XtRemoveEventTypeHandler .
-.LP
-.IN "XtRemoveEventTypeHandler" "" "@DEF"
-.sM
-.FD 0
-void XtRemoveEventTypeHandler(\fIwidget\fP, \fIevent_type\fP, \
-\fIselect_data\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- Widget \fIwidget\fP;
-.br
- int \fIevent_type\fP;
-.br
- XtPointer \fIselect_data\fP;
-.br
- XtEventHandler \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget for which the event handler was registered. \*(cI
-.IP \fIevent_type\fP 1i
-Specifies the event type for which the handler was registered.
-.IP \fIselect_data\fP 1i
-Specifies data used to deselect events of the specified type
-from the server, or NULL.
-.IP \fIproc\fP 1i
-Specifies the event handler to be removed.
-.IP \fIclient_data\fP 1i
-Specifies the additional client data with which the procedure was registered.
-.LP
-.eM
-The
-.PN XtRemoveEventTypeHandler
-function unregisters an event handler
-registered with
-.PN XtInsertEventTypeHandler
-for the specified event type.
-The request is ignored if \fIclient_data\fP does not match the value given
-when the handler was registered.
-.LP
-If \fIevent_type\fP specifies one of the core X protocol events,
-\fIselect_data\fP must be a pointer to a value of type
-.PN EventMask, indicating the event
-mask to be used to deselect for the appropriate event. If the widget
-is realized,
-.PN XtRemoveEventTypeHandler
-calls
-.PN 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
-.PN 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.
-.sp
-.LP
-To register a procedure to select extension events for a widget, use
-.PN XtRegisterExtensionSelector .
-.LP
-.IN "XtRegisterExtensionSelector" "" "@DEF@"
-.sM
-.FD 0
-void XtRegisterExtensionSelector(\fIdisplay\fP, \fImin_event_type\fP, \
-\fImax_event_type\fP, \fIproc\fP,
- \fIclient_data\fP)
-.br
- Display \fI*display\fP;
-.br
- int \fImin_event_type\fP;
-.br
- int \fImax_event_type\fP;
-.br
- XtExtensionSelectProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIdisplay\fP 1.5i
-Specifies the display for which the extension selector is to be registered.
-.IP \fImin_event_type\fP
-.IP \fImax_event_type\fP 1.5i
-Specifies the range of event types for the extension.
-.IP \fIproc\fP 1.5i
-Specifies the extension selector procedure.
-.IP \fIclient_data\fP 1.5i
-Specifies additional data to be passed to the extension selector.
-.LP
-.eM
-The
-.PN 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
-.PN XtRegisterExtensionSelector
-for the same \fIdisplay\fP, then \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
-When a widget is realized,
-after the \fIcore.realize\fP method is called,
-the \*(xI check to see if any event
-handler specifies an event type within the range of a registered
-extension selector. If so, the \*(xI call each such selector.
-If an event type handler is added or removed, the \*(xI 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 \*(xI
-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.
-.sp
-.LP
-An extension selector is of type
-.PN XtExtensionSelectProc .
-.LP
-.IN "XtExtensionSelectProc" "" "@DEF"
-.sM
-.FD 0
-typedef void (*XtExtensionSelectProc)(Widget, int *, XtPointer *, int, \
-XtPointer);
-.br
- Widget \fIwidget\fP;
-.br
- int *\fIevent_types\fP;
-.br
- XtPointer *\fIselect_data\fP;
-.br
- int \fIcount\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget that is being realized or is having
-an event handler added or removed.
-.IP \fIevent_types\fP 1i
-Specifies a list of event types that the widget has
-registered event handlers for.
-.IP \fIselect_data\fP 1i
-Specifies a list of the select_data parameters specified in
-.PN XtInsertEventTypeHandler .
-.IP \fIcount\fP 1i
-Specifies the number of entries in the \fIevent_types\fP and \fIselect_data\fP
-lists.
-.IP \fIclient_data\fP 1i
-Specifies the additional client data with which the procedure was registered.
-.LP
-.eM
-The \fIevent_types\fP and \fIselect_data\fP lists will always have the
-same number of elements, specified by \fIcount\fP.
-Each event type/select data pair represents one call to
-.PN XtInsertEventTypeHandler .
-.sp
-.LP
-To register a procedure to dispatch events of a specific type within
-.PN XtDispatchEvent ,
-use
-.PN XtSetEventDispatcher .
-.LP
-.IN "XtSetEventDispatcher" "" "@DEF@"
-.sM
-.FD 0
-XtEventDispatchProc XtSetEventDispatcher(\fIdisplay\fP, \fIevent_type\fP, \
-\fIproc\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- int \fIevent_type\fP;
-.br
- XtEventDispatchProc \fIproc\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display for which the event dispatcher is to be registered.
-.IP \fIevent_type\fP 1i
-Specifies the event type for which the dispatcher should be invoked.
-.IP \fIproc\fP 1i
-Specifies the event dispatcher procedure.
-.LP
-.eM
-The
-.PN 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
-.PN XtDispatchEvent
-is called with an event type of \fIevent_type\fP, the specified \fIproc\fP
-(or the default dispatcher) is invoked to determine a widget
-to which to dispatch the event.
-.LP
-The default dispatcher handles the \*(xI modal cascade and keyboard
-focus mechanisms, handles the semantics of \fIcompress_enterleave\fP
-and \fIcompress_motion\fP, and discards all extension events.
-.sp
-.LP
-An event dispatcher procedure pointer is of type
-.PN XtEventDispatchProc .
-.LP
-.IN "XtEventDispatchProc" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtEventDispatchProc)(XEvent*)
-.br
- XEvent *\fIevent\fP;
-.FN
-.IP \fIevent\fP 1i
-Passes the event to be dispatched.
-.LP
-.eM
-The event dispatcher procedure should determine whether this event is of
-a type that should be dispatched to a widget.
-.LP
-If the event should be dispatched to a widget, the event dispatcher
-procedure should determine the appropriate widget to receive the
-event, call
-.PN XFilterEvent
-with the window of this widget, or
-.PN None
-if the event is to be discarded, and if
-.PN XFilterEvent
-returns
-.PN False ,
-dispatch the event to the widget using
-.PN XtDispatchEventToWidget .
-The procedure should return
-.PN True
-if either
-.PN XFilterEvent
-or
-.PN XtDispatchEventToWidget
-returned
-.PN True
-and
-.PN False
-otherwise.
-.LP
-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
-.PN True
-if it successfully dispatched the event and
-.PN False
-otherwise.
-.sp
-.LP
-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
-.PN XtGetKeyboardFocusWidget .
-.LP
-.IN "XtGetKeyboardFocusWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtGetKeyboardFocusWidget(\fIwidget\fP)
-.br
- Widget \fIwidget\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget to get forwarding information for.
-.LP
-.eM
-The
-.PN XtGetKeyboardFocusWidget
-function returns the widget that would be the end result of keyboard
-event forwarding for a keyboard event for the specified widget.
-.sp
-.LP
-To dispatch an event to a specified widget, use
-.PN XtDispatchEventToWidget .
-.LP
-.IN "XtDispatchEventToWidget" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtDispatchEventToWidget(\fIwidget\fP, \fIevent\fP)
-.br
- Widget \fIwidget\fP;
-.br
- XEvent *\fIevent\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget to which to dispatch the event.
-.IP \fIevent\fP 1i
-Specifies a pointer to the event to be dispatched.
-.LP
-.eM
-The
-.PN 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 \*(xI behave as if event handlers were registered at the head
-of the list for
-.PN Expose ,
-.PN NoExpose ,
-.PN GraphicsExpose ,
-and
-.PN 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
-.PN True .
-These internal event handlers never set \fIcontinue_to_dispatch\fP to
-.PN False .
-.LP
-.PN XtDispatchEventToWidget
-returns
-.PN True
-if any event handler was called and
-.PN False
-otherwise.
-
-.NH 2
-Using the \*(xI in a Multi-Threaded Environment
-.XS
-\*(SN Using the \*(xI in a Multi-Threaded Environment
-.XE
-.LP
-The \*(xI may be used in environments that offer multiple threads
-of execution within the context of a single process. A multi-threaded
-application using the \*(xI must explicitly initialize the toolkit
-for mutually exclusive access by calling
-.PN XtToolkitThreadInitialize .
-
-.NH 3
-Initializing a Multi-Threaded \*(xI Application
-.XS
-\fB\*(SN Initializing a Multi-Threaded \*(xI Application\fP
-.XE
-.LP
-To test and initialize \*(xI support for mutually exclusive thread
-access, call
-.PN XtToolkitThreadInitialize .
-.LP
-.IN "XtToolkitThreadInitialize" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtToolkitThreadInitialize()
-.FN
-.LP
-.eM
-.PN XtToolkitThreadInitialize
-returns \fBTrue\fP if the \*(xI support mutually exclusive thread
-access, otherwise it returns \fBFalse\fP. \fBXtToolkitThreadInitialize\fP
-must be called before
-.PN XtCreateApplicationContext ,
-.PN XtAppInitialize ,
-.PN XtOpenApplication ,
-or
-.PN XtSetLanguageProc
-is called. \fBXtToolkitThreadInitialize\fP may be called more than once;
-however, the application writer must ensure that it is not called
-simultaneously by two or more threads.
-
-.NH 3
-Locking \*(tk Data Structures
-.XS
-\fB\*(SN Locking \*(tk Data Structures\fP
-.XE
-.LP
-The \*(xI 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 \*(xI process
-global data.
-.LP
-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.
-.LP
-Most application writers will have little need to use locking as the
-\*(xI 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:
-.LP
-.KS
-.Ds
-.TA .5i 2i
-.ta .5i 2i
- ...
- XtAppLock(app_context);
- XtCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret);
- XtAppUnlock(app_context);
- ...
-.De
-.KE
-.LP
-When the application relies upon
-.PN XtConvertAndStore
-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.
-.LP
-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:
-.LP
-.KS
-.Ds
-.TA .5i 2i
-.ta .5i 2i
-#include <X11/CoreP.h>
-Boolean BeingDestroyed (widget)
- Widget widget;
-{
- Boolean ret;
- XtAppLock(XtWidgetToApplicationContext(widget));
- ret = widget->core.being_destroyed;
- XtAppUnlock(XtWidgetToApplicationContext(widget));
- return ret;
-}
-.De
-.KE
-A client that wishes to atomically call two or more \*(xI functions
-must lock the application context. For example:
-.LP
-.KS
-.Ds
-.TA .5i 2i
-.ta .5i 2i
- ...
- XtAppLock(XtWidgetToApplicationContext(widget));
- XtUnmanageChild (widget1);
- XtManageChild (widget2);
- XtAppUnlock(XtWidgetToApplicationContext(widget));
- ...
-.De
-.KE
-
-.NH 4
-Locking the Application Context
-.XS
-\fB\*(SN Locking the Application Context\fP
-.XE
-.LP
-To ensure mutual exclusion of application context, display, or
-widget internal state, use
-.PN XtAppLock.
-.LP
-.IN "XtAppLock" "" "@DEF@"
-.sM
-.FD 0
-void XtAppLock(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context to lock.
-.LP
-.eM
-\fBXtAppLock\fP 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.
-.LP
-To unlock a locked application context, use
-.PN XtAppUnlock.
-.LP
-.IN "XtAppUnlock" "" "@DEF@"
-.sM
-.FD 0
-void XtAppUnlock(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context that was previously locked.
-.LP
-.eM
-
-.NH 4
-Locking the Process
-.XS
-\*(SN Locking the Process
-.XE
-.LP
-To ensure mutual exclusion of \*(tk process global data, a
-widget writer must use
-.PN XtProcessLock.
-.LP
-.IN "XtProcessLock" "" "@DEF@"
-.sM
-.FD 0
-void XtProcessLock()
-.FN
-.LP
-.eM
-\fBXtProcessLock\fP blocks until it is able to acquire the lock.
-Widget writers may use XtProcessLock to guarantee mutually exclusive
-access to widget static data.
-.LP
-To unlock a locked process, use
-.PN XtProcessUnlock .
-.LP
-.IN "XtProcessUnlock" "" "@DEF@"
-.sM
-.FD 0
-void XtProcessUnlock()
-.FN
-.LP
-.eM
-To lock both an application context and the process at the same
-time, call
-.PN XtAppLock
-first and then
-.PN XtProcessLock .
-To release both locks, call
-.PN XtProcessUnlock
-first and then
-.PN XtAppUnlock .
-The order is important to avoid deadlock.
-
-.NH 3
-Event Management in a Multi-Threaded Environment
-.XS
-\fB\*(SN Event Management in a Multi-Threaded Environment\fP
-.XE
-.LP
-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.
-.LP
-To indicate that the event loop should terminate after the current
-event dispatch has completed, use
-.PN XtAppSetExitFlag .
-.LP
-.IN "XtAppSetExitFlag" "" "@DEF@"
-.sM
-.FD 0
-void XtAppSetExitFlag(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.LP
-.eM
-.PN XtAppMainLoop
-tests the value of the flag and will return if the flag is \fBTrue\fP.
-.LP
-Application writers who implement their own main loop may test the
-value of the exit flag with
-.PN XtAppGetExitFlag .
-.LP
-.IN "XtAppGetExitFlag" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtAppGetExitFlag(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.LP
-.eM
-.PN XtAppGetExitFlag
-will normally return \fBFalse\fP, indicating that event processing
-may continue. When
-.PN XtAppGetExitFlag
-returns \fBTrue\fP, the loop must terminate and return to the caller,
-which might then destroy the application context.
-.LP
-Application writers should be aware that, if a thread is blocked in
-.PN XtAppNextEvent ,
-.PN XtAppPeekEvent ,
-or
-.PN XtAppProcessEvent
-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.
-.LP
-The \*(xI manage access to events on a last-in, first-out basis. If
-multiple threads in the same application context block in
-.PN XtAppNextEvent ,
-.PN XtAppPeekEvent ,
-or
-.PN XtAppProcessEvent ,
-the last thread to call one of these functions is the first
-thread to return.
-.bp
diff --git a/libXt/specs/CH07.xml b/libXt/specs/CH07.xml
new file mode 100644
index 000000000..7ea72596e
--- /dev/null
+++ b/libXt/specs/CH07.xml
@@ -0,0 +1,4989 @@
+<chapter id='Event_Management'>
+<title>Event Management</title>
+<para>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>.
+</para>
+
+<para>
+The event manager is a collection of functions to perform the following tasks:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Add or remove event sources other than X server events (in particular,
+timer interrupts, file input, or POSIX signals).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Query the status of event sources.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Add or remove procedures to be called when an event occurs for a particular
+widget.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Enable and
+disable the dispatching of user-initiated events (keyboard and pointer events)
+for a particular widget.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Constrain the dispatching of events to a cascade of pop-up widgets.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Register procedures to be called when specific events arrive.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Register procedures to be called when the Intrinsics will block.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Enable safe operation in a multi-threaded environment.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>.
+</para>
+<sect1 id="Adding_and_Deleting_Additional_Event_Sources">
+<title>Adding and Deleting Additional Event Sources</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+<sect2 id="Adding_and_Removing_Input_Sources">
+<title>Adding and Removing Input Sources</title>
+<para>
+To register a new file as an input source for a given application context, use
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddInput'>
+<funcprototype>
+<funcdef>XtInputId <function>XtAppAddInput</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>int <parameter>source</parameter></paramdef>
+ <paramdef>XtPointer <parameter>condition</parameter></paramdef>
+ <paramdef>XtInputCallbackProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source file descriptor on a POSIX-based system
+or other operating-system-dependent device specification.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>condition</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the mask that indicates a read, write, or exception condition
+or some other operating-system-dependent condition.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called when the condition is found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an argument passed to the specified procedure
+when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+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 <emphasis remap='I'>file</emphasis> should be loosely interpreted to mean any sink
+or source of data.
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+also specifies the conditions under which the source can generate events.
+When an event is pending on this source,
+the callback procedure is called.
+</para>
+
+<para>
+The legal values for the <emphasis remap='I'>condition</emphasis> argument are operating-system-dependent.
+On a POSIX-based system,
+<emphasis remap='I'>source</emphasis> is a file number and the condition is some union of the following:
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtInputReadMask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies that <emphasis remap='I'>proc</emphasis> is to be called when <emphasis remap='I'>source</emphasis> has data to be read.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtInputWriteMask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies that <emphasis remap='I'>proc</emphasis> is to be called when <emphasis remap='I'>source</emphasis> is ready
+for writing.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis role='strong'>XtInputExceptMask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies that <emphasis remap='I'>proc</emphasis> is to be called when <emphasis remap='I'>source</emphasis> has
+exception data.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+</para>
+
+<para>
+Callback procedure pointers used to handle file events are of
+type
+<xref linkend='XtInputCallbackProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInputCallbackProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtInputCallbackProc)</function></funcdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>int *<parameter>source</parameter></paramdef>
+ <paramdef>XtInputId *<parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data argument that was registered for this procedure in
+<function>XtApp\%AddInput</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the source file descriptor generating the event.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the id returned from the corresponding
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+See <xref linkend='Using_the_Intrinsics_in_a_Multi_Threaded_Environment' />
+for information regarding the use of
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+
+<para>
+To discontinue a source of input, use
+<xref linkend='XtRemoveInput' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveInput'>
+<funcprototype>
+<funcdef>void <function>XtRemoveInput</function></funcdef>
+ <paramdef>XtInputId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the id returned from the corresponding
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveInput' xrefstyle='select: title'/>
+function causes the Intrinsics read routine to stop watching for events
+from the file source specified by <emphasis remap='I'>id</emphasis>.
+</para>
+
+<para>
+See <xref linkend='Using_the_Intrinsics_in_a_Multi_Threaded_Environment' />
+for information regarding the use of
+<xref linkend='XtRemoveInput' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+</sect2>
+
+<sect2 id="Adding_and_Removing_Blocking_Notifications">
+<title>Adding and Removing Blocking Notifications</title>
+<para>
+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.
+</para>
+
+<para>
+To register a hook that is called immediately prior to event blocking, use
+<xref linkend='XtAppAddBlockHook' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddBlockHook'>
+<funcprototype>
+<funcdef>XtBlockHookId <function>XtAppAddBlockHook</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtBlockHookProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called before blocking.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an argument passed to the specified procedure when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppAddBlockHook' xrefstyle='select: title'/>
+function registers the specified procedure and returns an identifier for it.
+The hook procedure <emphasis remap='I'>proc</emphasis> is called at any time in the future when
+the Intrinsics are about to block pending some input.
+</para>
+
+<para>
+The procedure pointers used to provide notification of event blocking
+are of type
+<xref linkend='XtBlockHookProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtBlockHookProc'>
+<funcprototype>
+<funcdef>void <function>*XtBlockHookProc</function></funcdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data argument that was registered for this procedure in
+<function>XtApp\%AddBlockHook</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To discontinue the use of a procedure for blocking notification, use
+<xref linkend='XtRemoveBlockHook' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveBlockHook'>
+<funcprototype>
+<funcdef>void <function>XtRemoveBlockHook</function></funcdef>
+ <paramdef>XtBlockHookId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the identifier returned from the corresponding call to
+<xref linkend='XtAppAddBlockHook' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveBlockHook' xrefstyle='select: title'/>
+function removes the specified procedure from the list of procedures
+that are called by the Intrinsics read routine before blocking on event sources.
+</para>
+</sect2>
+
+<sect2 id="Adding_and_Removing_Timeouts">
+<title>Adding and Removing Timeouts</title>
+<para>
+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.
+</para>
+
+<para>
+To register a timeout callback, use
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddTimeOut'>
+<funcprototype>
+<funcdef>XtIntervalId <function>XtAppAddTimeOut</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>unsigned long <parameter>interval</parameter></paramdef>
+ <paramdef>XtTimerCallbackProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context for which the timer is to be set.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>interval</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the time interval in milliseconds.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called when the time expires.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an argument passed to the specified procedure
+when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>
+function creates a timeout and returns an identifier for it.
+The timeout value is set to <emphasis remap='I'>interval</emphasis>.
+The callback procedure <emphasis remap='I'>proc</emphasis> is called when
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+is next called after the time interval elapses,
+and then the timeout is removed.
+</para>
+
+<para>
+Callback procedure pointers used with timeouts are of
+type
+<xref linkend='XtTimerCallbackProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtTimerCallbackProc'>
+<funcprototype>
+<funcdef>void <function>*XtTimerCallbackProc</function></funcdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtIntervalId *<parameter>timer</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data argument that was registered for this procedure in
+<function>XtApp\%AddTimeOut</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>timer</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the id returned from the corresponding
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+See <xref linkend='Using_the_Intrinsics_in_a_Multi_Threaded_Environment' />
+for information regarding the use of
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+
+<para>
+To clear a timeout value, use
+<xref linkend='XtRemoveTimeOut' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveTimeOut'>
+<funcprototype>
+<funcdef>void <function>XtRemoveTimeOut</function></funcdef>
+ <paramdef>XtIntervalId <parameter>timer</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>timer</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the id for the timeout request to be cleared.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveTimeOut' xrefstyle='select: title'/>
+function removes the pending timeout.
+Note that timeouts are automatically removed once they trigger.
+</para>
+
+<para>
+Please refer to Section 7.12 for information regarding the use of
+<xref linkend='XtRemoveTimeOut' xrefstyle='select: title'/>
+in multiple threads.
+</para>
+</sect2>
+
+<sect2 id="Adding_and_Removing_Signal_Callbacks">
+<title>Adding and Removing Signal Callbacks</title>
+<para>
+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.
+</para>
+
+<para>
+Prior to establishing a signal handler, the application or widget should
+call
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>
+and store the resulting identifier in a place accessible to the signal
+handler. When a signal arrives, the signal handler should call
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>
+to notify the Intrinsics that a signal has occured. To register a signal
+callback use
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddSignal'>
+<funcprototype>
+<funcdef>XtSignalId <function>XtAppAddSignal</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtSignalCallbackProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called when the signal is noticed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an argument passed to the specified procedure when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The callback procedure pointers used to handle signal events are of type
+<xref linkend='XtSignalCallbackProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSignalCallbackProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtSignalCallbackProc)</function></funcdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtSignalId *<parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data argument that was registered for this procedure in
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the id returned from the corresponding
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To notify the Intrinsics that a signal has occured, use
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtNoticeSignal'>
+<funcprototype>
+<funcdef>void <function>XtNoticeSignal</function></funcdef>
+ <paramdef>XtSignalId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the id returned from the corresponding
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+On a POSIX-based system,
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>
+is the only Intrinsics function that can safely be called from a signal handler.
+If
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>
+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
+<function>False</function>
+and is set to
+<function>True</function>
+by
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>.
+When
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+(with a mask including
+<function>XtIMSignal</function>)
+is called, all registered callbacks with ``pending''
+<function>True</function>
+are invoked and the flags are reset to
+<function>False</function>.
+</para>
+
+<para>
+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
+<function>False</function>
+but before the callback can get control, in which case the pending flag
+will still be
+<function>True</function>
+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.
+</para>
+
+<para>
+To remove a registered signal callback, call
+<xref linkend='XtRemoveSignal' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveSignal'>
+<funcprototype>
+<funcdef>void <function>XtRemoveSignal</function></funcdef>
+ <paramdef>XtSignalId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the id returned by the corresponding call to
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The client should typically disable the source of the signal before calling
+<xref linkend='XtRemoveSignal' xrefstyle='select: title'/>.
+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
+<xref linkend='XtRemoveSignal' xrefstyle='select: title'/>
+the client can test for signals with
+<xref linkend='XtAppPending' xrefstyle='select: title'/>
+and process them by calling
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+with the mask
+<function>XtIMSignal</function>.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Constraining_Events_to_a_Cascade_of_Widgets">
+<title>Constraining Events to a Cascade of Widgets</title>
+<para>
+Modal widgets are widgets that, except for the input directed to them,
+lock out user input to the application.
+</para>
+
+<para>
+When a modal menu or modal dialog box is popped up using
+<xref linkend='XtPopup' xrefstyle='select: title'/>,
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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
+<function>KeyPress</function>,
+<function>KeyRelease</function>,
+<function>ButtonPress</function>,
+and
+<function>ButtonRelease</function>.
+The user events ignored when they occur outside the cascade are
+<function>MotionNotify</function>
+and
+<function>EnterNotify</function>.
+All other events are delivered normally.
+In particular, note that this is one
+way in which widgets can receive
+<function>LeaveNotify</function>
+events without first receiving
+<function>EnterNotify</function>
+events; they should be prepared to deal with
+this, typically by ignoring any unmatched
+<function>LeaveNotify</function>
+events.
+</para>
+
+<para>
+<xref linkend='XtPopup' xrefstyle='select: title'/>
+uses the
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>
+and
+<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>
+functions to constrain user events to a modal cascade
+and subsequently to remove a grab when the modal widget is popped down.
+</para>
+
+<para>
+To constrain or redirect user input to a modal widget, use
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddGrab'>
+<funcprototype>
+<funcdef>void <function>XtAddGrab</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Boolean <parameter>exclusive</parameter></paramdef>
+ <paramdef>Boolean <parameter>spring_loaded</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to add to the modal cascade. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>exclusive</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether user events should be dispatched exclusively to this widget
+or also to previous widgets in the cascade.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>spring_loaded</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this widget was popped up because the user pressed
+a pointer button.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>
+function appends the widget to the modal cascade
+and checks that <emphasis remap='I'>exclusive</emphasis> is
+<function>True</function>
+if <emphasis remap='I'>spring_loaded</emphasis> is
+<function>True</function>.
+If this condition is not met,
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>
+generates a warning message.
+</para>
+
+<para>
+The modal cascade is used by
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+when it tries to dispatch a user event.
+When at least one modal widget is in the widget cascade,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+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 <emphasis remap='I'>exclusive</emphasis> parameter
+<function>True</function>.
+</para>
+
+<para>
+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 <emphasis remap='I'>exclusive</emphasis>
+<function>False</function>.
+Modal dialog boxes that need to restrict user input to the most deeply nested
+dialog box add a subdialog widget to the cascade with <emphasis remap='I'>exclusive</emphasis>
+<function>True</function>.
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>spring_loaded</emphasis>
+<function>True</function>,
+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.
+</para>
+
+<para>
+To remove the redirection of user input to a modal widget, use
+<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveGrab'>
+<funcprototype>
+<funcdef>void <function>XtRemoveGrab</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to remove from the modal cascade.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>
+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.
+</para>
+<sect2 id="Requesting_Key_and_Button_Grabs">
+<title>Requesting Key and Button Grabs</title>
+<para>
+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.
+</para>
+
+<para>
+To passively grab a single key of the keyboard, use
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGrabKey'>
+<funcprototype>
+<funcdef>void <function>XtGrabKey</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>KeyCode <parameter>keycode</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+ <paramdef>Boolean <parameter>owner_events</parameter></paramdef>
+ <paramdef>int <parameter>pointer_mode</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget in whose window the key is to be grabbed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>owner_events</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>pointer_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>keyboard_mode</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XGrabKey</function>;
+see <olink targetdoc='libX11' targetptr='Keyboard_Grabbing'>Section 12.2</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+calls
+<function>XGrabKey</function>
+specifying the widget's window as the grab
+window if the widget is realized. The remaining arguments are exactly
+as for
+<function>XGrabKey</function>.
+If the widget is not realized, or is later unrealized, the call to
+<function>XGrabKey</function>
+is performed (again) when
+the widget is realized and its window becomes mapped. In the future,
+if
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+is called with a
+<function>KeyPress</function>
+event matching the specified keycode and modifiers (which may be
+<function>AnyKey</function>
+or
+<function>AnyModifier</function>,
+respectively) for the
+widget's window, the Intrinsics will call
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>
+with the timestamp from the
+<function>KeyPress</function>
+event if either of the following conditions is true:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XFilterEvent</function>
+returns
+<function>True</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To cancel a passive key grab, use
+<xref linkend='XtUngrabKey' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUngrabKey'>
+<funcprototype>
+<funcdef>void <function>XtUngrabKey</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>KeyCode <parameter>keycode</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget in whose window the key was grabbed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XUngrabKey</function>;
+see <olink targetdoc='libX11' targetptr='Keyboard_Grabbing'>Section 12.2</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtUngrabKey' xrefstyle='select: title'/>
+procedure calls
+<function>XUngrabKey</function>
+specifying the widget's
+window as the ungrab window if the widget is realized. The remaining
+arguments are exactly as for
+<function>XUngrabKey</function>.
+If the widget is not realized,
+<xref linkend='XtUngrabKey' xrefstyle='select: title'/>
+removes a deferred
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+request, if any, for the specified widget, keycode, and modifiers.
+</para>
+
+<para>
+To actively grab the keyboard, use
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGrabKeyboard'>
+<funcprototype>
+<funcdef>int <function>XtGrabKeyboard</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>Boolean <parameter>owner_events</parameter></paramdef>
+ <paramdef>int <parameter>pointer_mode</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for whose window the keyboard is to be grabbed.
+Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>owner_events</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>pointer_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>keyboard_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XGrabKeyboard</function>;
+see <olink targetdoc='libX11' targetptr='Keyboard_Grabbing'>Section 12.2</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the specified widget is realized,
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>
+calls
+<function>XGrabKeyboard</function>
+specifying the widget's window as the grab window. The remaining
+arguments and return value are exactly as for
+<function>XGrabKeyboard</function>.
+If the widget is not realized,
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>
+immediately returns
+<function>GrabNotViewable</function>.
+No future automatic ungrab is implied by
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To cancel an active keyboard grab, use
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUngrabKeyboard'>
+<funcprototype>
+<funcdef>void <function>XtUngrabKeyboard</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that has the active keyboard grab.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional argument to
+<function>XUngrabKeyboard</function>;
+see <olink targetdoc='libX11' targetptr='Keyboard_Grabbing'>Section 12.2</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>
+calls
+<function>XUngrabKeyboard</function>
+with the specified time.
+</para>
+
+<para>
+To passively grab a single pointer button, use
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGrabButton'>
+<funcprototype>
+<funcdef>void <function>XtGrabButton</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>int <parameter>button</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+ <paramdef>Boolean <parameter>owner_events</parameter></paramdef>
+ <paramdef>unsigned int <parameter>event_mask</parameter></paramdef>
+ <paramdef>int <parameter>pointer_mode</parameter></paramdef>
+ <paramdef>Window <parameter>confine_to</parameter></paramdef>
+ <paramdef>Cursor <parameter>cursor</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget in whose window the button is to be grabbed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>button</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>owner_events</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>pointer_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>keyboard_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>confine_to</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>cursor</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XGrabButton</function>;
+see <olink targetdoc='libX11' targetptr='Pointer_Grabbing'>Section 12.1</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>
+calls
+<function>XGrabButton</function>
+specifying the widget's window as the
+grab window if the widget is realized. The remaining arguments are
+exactly as for
+<function>XGrabButton</function>.
+If the widget is not realized, or is later unrealized, the call to
+<function>XGrabButton</function>
+is performed (again)
+when the widget is realized and its window becomes mapped. In the
+future, if
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+is called with a
+<function>ButtonPress</function>
+event matching the specified button and modifiers (which may be
+<function>AnyButton</function>
+or
+<function>AnyModifier</function>,
+respectively)
+for the widget's window, the Intrinsics will call
+<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>
+with the timestamp from the
+<function>ButtonPress</function>
+event if either of the following conditions is true:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XFilterEvent</function>
+returns
+<function>True</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+To cancel a passive button grab, use
+<xref linkend='XtUngrabButton' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUngrabButton'>
+<funcprototype>
+<funcdef>void <function>XtUngrabButton</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>unsigned int <parameter>button</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget in whose window the button was grabbed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>button</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XUngrabButton</function>;
+see <olink targetdoc='libX11' targetptr='Pointer_Grabbing'>Section 12.1</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtUngrabButton' xrefstyle='select: title'/>
+procedure calls
+<function>XUngrabButton</function>
+specifying the
+widget's window as the ungrab window if the widget is realized. The
+remaining arguments are exactly as for
+<function>XUngrabButton</function>.
+If the widget is not realized,
+<xref linkend='XtUngrabButton' xrefstyle='select: title'/>
+removes a deferred
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>
+request, if any, for the specified widget, button, and modifiers.
+</para>
+
+<para>
+To actively grab the pointer, use
+<xref linkend='XtGrabPointer' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGrabPointer'>
+<funcprototype>
+<funcdef>int <function>XtGrabPointer</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>Boolean <parameter>owner_events</parameter></paramdef>
+ <paramdef>unsigned int <parameter>event_mask</parameter></paramdef>
+ <paramdef>int <parameter>pointer_mode</parameter></paramdef>
+ <paramdef>Window <parameter>confine_to</parameter></paramdef>
+ <paramdef>Cursor <parameter>cursor</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for whose window the pointer is to be grabbed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>owner_events</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>pointer_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>keyboard_mode</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>confine_to</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>cursor</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<function>XGrabPointer</function>;
+see <olink targetdoc='libX11' targetptr='Pointer_Grabbing'>Section 12.1</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the specified widget is realized,
+<xref linkend='XtGrabPointer' xrefstyle='select: title'/>
+calls
+<function>XGrabPointer</function>,
+specifying the widget's window as the grab window. The remaining
+arguments and return value are exactly as for
+<function>XGrabPointer</function>.
+If the widget is not realized,
+<xref linkend='XtGrabPointer' xrefstyle='select: title'/>
+immediately returns
+<function>GrabNotViewable</function>.
+No future automatic ungrab is implied by
+<xref linkend='XtGrabPointer' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To cancel an active pointer grab, use
+<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUngrabPointer'>
+<funcprototype>
+<funcdef>void <function>XtUngrabPointer</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that has the active pointer grab.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the time argument to
+<function>XUngrabPointer</function>;
+see <olink targetdoc='libX11' targetptr='Pointer_Grabbing'>Section 12.1</olink>
+in <olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface</olink>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>
+calls
+<function>XUngrabPointer</function>
+with the specified time.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Focusing_Events_on_a_Child">
+<title>Focusing Events on a Child</title>
+<para>
+To redirect keyboard input to a normal descendant of a
+widget without calling
+<function>XSetInputFocus</function>,
+use
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetKeyboardFocus'>
+<funcprototype>
+<funcdef>void <function>XtSetKeyboardFocus</function></funcdef>
+ <paramdef>Widget <parameter>subtree</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>subtree</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the subtree of the hierarchy for which the keyboard focus is
+to be set. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>descendant</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies either the normal (non-pop-up) descendant of <emphasis remap='I'>subtree</emphasis> to which
+keyboard events are logically directed, or
+<function>None</function>.
+It is not an error to specify
+<function>None</function>
+when no input focus was previously set. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>
+causes
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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).
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+with any value of <emphasis remap='I'>owner_events</emphasis>, or
+if the keyboard is actively grabbed by E with <emphasis remap='I'>owner_events</emphasis>
+<function>False</function>
+via
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+on a previous key press, the event is dispatched to E.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If E is the final focus target widget F or a descendant of F, the
+event is dispatched to E.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+for E,
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>
+is called.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If E is an ancestor of F, and the event is a key press, and either
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+E has grabbed the key with
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+and <emphasis remap='I'>owner_events</emphasis>
+<function>False</function>,
+or
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+E has grabbed the key with
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+and <emphasis remap='I'>owner_events</emphasis>
+<function>True</function>,
+and the coordinates of the event are outside the rectangle specified
+by E's geometry,
+then the event is dispatched to E.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+Otherwise, define A as the closest common ancestor of E and F:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If there is an active keyboard grab for any widget via either
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+on a previous key press, or
+if no widget between F and A (noninclusive) has grabbed
+the key and modifier combination with
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+and any value of <emphasis remap='I'>owner_events</emphasis>, the event is dispatched to F.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Else, the event is dispatched to the ancestor of F closest to A
+that has grabbed the key and modifier combination with
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+When <emphasis remap='I'>subtree</emphasis> 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
+<function>FocusIn</function>
+event is generated for the descendant if
+<function>FocusChange</function>
+events have been selected by the descendant.
+Similarly, when <emphasis remap='I'>subtree</emphasis> loses the X input focus
+or the keyboard focus for one of its ancestors, a
+<function>FocusOut</function>
+event is generated for descendant if
+<function>FocusChange</function>
+events have been selected by the descendant.
+</para>
+
+<para>
+A widget tree may also actively manage the X server input focus. To
+do so, a widget class specifies an accept_focus procedure.
+</para>
+
+<para>
+The accept_focus procedure pointer is of type
+<xref linkend='XtAcceptFocusProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAcceptFocusProc'>
+<funcprototype>
+<funcdef>Boolean <function>*XtAcceptFocusProc</function></funcdef>
+
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Time *<parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the X time of the event causing the accept focus.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Widgets that need the input focus can call
+<function>XSetInputFocus</function>
+explicitly, pursuant to the restrictions of the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>.
+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
+<function>FocusIn</function>
+and
+<function>FocusOut</function>
+events).
+Widgets classes that never want the input focus should set the
+<emphasis remap='I'>accept_focus</emphasis> field to NULL.
+</para>
+
+<para>
+To call a widget's accept_focus procedure, use
+<xref linkend='XtCallAcceptFocus' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallAcceptFocus'>
+<funcprototype>
+<funcdef>Boolean <function>XtCallAcceptFocus</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Time *<parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the X time of the event that is causing the focus change.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCallAcceptFocus' xrefstyle='select: title'/>
+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 <emphasis remap='I'>accept_focus</emphasis> is NULL,
+<xref linkend='XtCallAcceptFocus' xrefstyle='select: title'/>
+returns
+<function>False</function>.
+</para>
+<sect2 id="Events_for_Drawables_That_Are_Not_a_Widget_s_Window">
+<title>Events for Drawables That Are Not a Widget's Window</title>
+<para>
+Sometimes an application must handle events for drawables that are not
+associated with widgets in its widget tree. Examples include handling
+<function>GraphicsExpose</function>
+and
+<function>NoExpose</function>
+events on Pixmaps, and handling
+<function>PropertyNotify</function>
+events on the root window.
+</para>
+
+<para>
+To register a drawable with the Intrinsics event dispatching, use
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRegisterDrawable'>
+<funcprototype>
+<funcdef>void <function>XtRegisterDrawable</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>Drawable <parameter>drawable</parameter></paramdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the drawable's display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>drawable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the drawable to register.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to register the drawable for.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>
+associates the specified drawable with the specified widget
+so that future calls to
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>
+are undefined.
+</para>
+
+<para>
+To unregister a drawable with the Intrinsics event dispatching, use
+<xref linkend='XtUnregisterDrawable' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUnregisterDrawable'>
+<funcprototype>
+<funcdef>void <function>XtUnregisterDrawable</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>Drawable <parameter>drawable</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the drawable's display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>drawable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the drawable to unregister.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtUnregisterDrawable' xrefstyle='select: title'/>
+removes an association created with
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>.
+If the drawable is the window of a widget in the client's widget tree
+the results of calling
+<xref linkend='XtUnregisterDrawable' xrefstyle='select: title'/>
+are undefined.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Querying_Event_Sources">
+<title>Querying Event Sources</title>
+<para>
+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
+<function>XPending</function>,
+<function>XPeekEvent</function>,
+and
+<function>XNextEvent</function>
+Xlib calls.
+</para>
+
+<para>
+To determine if there are any events on the input queue for a given application,
+use
+<xref linkend='XtAppPending' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppPending'>
+<funcprototype>
+<funcdef>XtInputMask <function>XtAppPending</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application to check.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppPending' xrefstyle='select: title'/>
+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
+<function>XtIMXEvent</function>,
+<function>XtIMTimer</function>,
+<function>XtIMAlternateInput</function>,
+and
+<function>XtIMSignal</function>
+(see
+<function>XtAppProcessEvent ).</function>
+If there are no events pending,
+<xref linkend='XtAppPending' xrefstyle='select: title'/>
+flushes the output buffers of each Display in the application context
+and returns zero.
+</para>
+
+<para>
+To return the event from the head of a given application's input queue
+without removing input from the queue, use
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppPeekEvent'>
+<funcprototype>
+<funcdef>Boolean <function>XtAppPeekEvent</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the event information to the specified event structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If there is an X event in the queue,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>
+copies it into <emphasis remap='I'>event_return</emphasis> and returns
+<function>True</function>.
+If no X input is on the queue,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>
+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,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>
+fills in <emphasis remap='I'>event_return</emphasis> and returns
+<function>True</function>.
+Otherwise, the input is for an input source
+registered with
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>,
+and
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>
+returns
+<function>False</function>.
+The sample implementations provides XtAppPeekEvent as described. Timeout callbacks
+are called while blocking for input. If some input for an input source is
+available,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>
+will return
+<function>True</function>
+without returning an event.
+</para>
+
+<para>
+To remove and return the event
+from the head of a given application's X event queue,
+use
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppNextEvent'>
+<funcprototype>
+<funcdef>void <function>XtAppNextEvent</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the event information to the specified event structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If the X event queue is empty,
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+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 <xref linkend='Adding_Background_Work_Procedures' />.
+</para>
+</sect1>
+
+<sect1 id="Dispatching_Events">
+<title>Dispatching Events</title>
+<para>
+The Intrinsics provide functions that dispatch events
+to widgets or other application code.
+Every client interested in X events on a widget uses
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+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 <xref linkend='Translation_Management' />.
+</para>
+
+<para>
+Applications that need direct control of the processing of different types
+of input should use
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppProcessEvent'>
+<funcprototype>
+<funcdef>void <function>XtAppProcessEvent</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtInputMask <parameter>mask</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the
+application for which to process input.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies what types of events to process.
+The mask is the bitwise inclusive OR of any combination of
+<function>XtIMXEvent</function>,
+<function>XtIMTimer</function>,
+<function>XtIMAlternateInput</function>,
+and
+<function>XtIMSignal</function>.
+As a convenience,
+<function>Intrinsic.h</function>
+defines the symbolic name
+<function>XtIMAll</function>
+to be the bitwise inclusive OR of these four event types.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>.
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+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
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
+</para>
+
+<para>
+When an X event is received,
+it is passed to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>,
+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.
+</para>
+
+<para>
+To dispatch an event returned by
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>,
+retrieved directly from the Xlib queue, or synthetically constructed,
+to any registered event filters or event handlers, call
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDispatchEvent'>
+<funcprototype>
+<funcdef>Boolean <function>XtDispatchEvent</function></funcdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the event structure to be dispatched
+to the appropriate event handlers.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+function first calls
+<function>XFilterEvent</function>
+with the <emphasis remap='I'>event</emphasis> 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
+<function>XFilterEvent</function>
+returns
+<function>True</function>
+and the event activated a server grab as identified
+by a previous call to
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+calls
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>
+or
+<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>
+with the timestamp from the event and immediately returns
+<function>True</function>.
+If
+<function>XFilterEvent</function>
+returns
+<function>True</function>
+and a grab was not activated,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+just immediately returns
+<function>True</function>.
+Otherwise,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+sends the event to the event handler functions that
+have been previously registered with the dispatch routine.
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+returns
+<function>True</function>
+if
+<function>XFilterEvent</function>
+returned
+<function>True</function>,
+or if the event was dispatched to some handler, and
+<function>False</function>
+if it found no handler to which to dispatch the event.
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+records the last timestamp in any event that
+contains a timestamp (see
+<function>XtLastTimestampProcessed ),</function>
+regardless of whether it was filtered or dispatched.
+If a modal cascade is active with <emphasis remap='I'>spring_loaded</emphasis>
+<function>True</function>,
+and if the event is a remap event as defined by
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+may dispatch the event a second time. If it does so,
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+will call
+<function>XFilterEvent</function>
+again with the window of the spring-loaded widget prior to the second
+dispatch, and if
+<function>XFilterEvent</function>
+returns
+<function>True</function>,
+the second dispatch will not be performed.
+</para>
+</sect1>
+
+<sect1 id="The_Application_Input_Loop">
+<title>The Application Input Loop</title>
+<para>
+To process all input from a given application in a continuous loop,
+use the convenience procedure
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppMainLoop'>
+<funcprototype>
+<funcdef>void <function>XtAppMainLoop</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>
+function first reads the next incoming X event by calling
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+and then dispatches the event to the appropriate registered procedure
+by calling
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
+This constitutes the main loop of X Toolkit applications.
+There is nothing special about
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>;
+it simply calls
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+and then
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppLock' xrefstyle='select: title'/>
+and
+<xref linkend='XtAppUnlock' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Setting_and_Checking_the_Sensitivity_State_of_a_Widget">
+<title>Setting and Checking the Sensitivity State of a Widget</title>
+<para>
+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.
+</para>
+
+<para>
+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
+<function>KeyPress</function>,
+<function>KeyRelease</function>,
+<function>ButtonPress</function>,
+<function>ButtonRelease</function>,
+<function>MotionNotify</function>,
+<function>EnterNotify</function>,
+<function>LeaveNotify</function>,
+<function>FocusIn</function>,
+or
+<function>FocusOut</function>.
+</para>
+
+<para>
+A widget can be insensitive because its <emphasis remap='I'>sensitive</emphasis> field is
+<function>False</function>
+or because one of its ancestors is insensitive and thus the widget's
+<emphasis remap='I'>ancestor_sensitive</emphasis> field also is
+<function>False</function>.
+A widget can but does not need to distinguish these two cases visually.
+</para>
+
+<note>
+<para>
+Pop-up shells will have
+<emphasis remap='I'>ancestor_sensitive</emphasis>
+<function>False</function>
+if the parent was insensitive when the shell
+was created. Since
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+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.
+</para>
+</note>
+
+<para>
+To set the sensitivity state of a widget, use
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetSensitive'>
+<funcprototype>
+<funcdef>void <function>XtSetSensitive</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Boolean <parameter>sensitive</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>sensitive</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the widget should receive
+keyboard, pointer, and focus events.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+function first calls
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+on the current widget with an argument list specifying the
+XtNsensitive resource and the new value.
+If <emphasis remap='I'>sensitive</emphasis> is
+<function>False</function>
+and the widget's class is a subclass of
+Composite,
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+recursively propagates the new value
+down the child tree by calling
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+on each child to set <emphasis remap='I'>ancestor_sensitive</emphasis> to
+<function>False</function>.
+If <emphasis remap='I'>sensitive</emphasis> is
+<function>True</function>
+and the widget's class is a subclass of
+Composite
+and the widget's <emphasis remap='I'>ancestor_sensitive</emphasis> field is
+<function>True</function>,
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+sets the <emphasis remap='I'>ancestor_sensitive</emphasis> of each child to
+<function>True</function>
+and then recursively calls
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+on each normal descendant that is now sensitive to set
+<emphasis remap='I'>ancestor_sensitive</emphasis> to
+<function>True</function>.
+</para>
+
+<para>
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+calls
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+to change the <emphasis remap='I'>sensitive</emphasis> and <emphasis remap='I'>ancestor_sensitive</emphasis> 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).
+</para>
+
+<para>
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+maintains the invariant that, if the parent has either <emphasis remap='I'>sensitive</emphasis>
+or <emphasis remap='I'>ancestor_sensitive</emphasis>
+<function>False</function>,
+then all children have <emphasis remap='I'>ancestor_sensitive</emphasis>
+<function>False</function>.
+</para>
+
+<para>
+To check the current sensitivity state of a widget,
+use
+<xref linkend='XtIsSensitive' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtIsSensitive'>
+<funcprototype>
+<funcdef>Boolean <function>XtIsSensitive</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtIsSensitive' xrefstyle='select: title'/>
+function returns
+<function>True</function>
+or
+<function>False</function>
+to indicate whether user input events are being dispatched.
+If object's class is a subclass of RectObj and
+both <emphasis remap='I'>sensitive</emphasis> and <emphasis remap='I'>ancestor_sensitive</emphasis> are
+<function>True</function>,
+<xref linkend='XtIsSensitive' xrefstyle='select: title'/>
+returns
+<function>True</function>;
+otherwise, it returns
+<function>False</function>.
+</para>
+</sect1>
+
+<sect1 id="Adding_Background_Work_Procedures">
+<title>Adding Background Work Procedures</title>
+<para>
+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
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>.
+Work procedure pointers are of type
+<xref linkend='XtWorkProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWorkProc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtWorkProc)</function></funcdef>
+
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the client data specified when the work procedure was registered.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This procedure should return
+<function>True</function>
+when it is done to indicate that it
+should be removed.
+If the procedure returns
+<function>False</function>,
+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.
+</para>
+
+<para>
+To register a work procedure for a given application, use
+<xref linkend='XtAppAddWorkProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddWorkProc'>
+<funcprototype>
+<funcdef>XtWorkProcId <function>XtAppAddWorkProc</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtWorkProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that identifies the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called when the application is idle.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument passed to the specified procedure
+when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppAddWorkProc' xrefstyle='select: title'/>
+function adds the specified work procedure for the application identified
+by <emphasis remap='I'>app_context</emphasis>
+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.
+</para>
+
+<para>
+To remove a work procedure, either return
+<function>True</function>
+from the procedure when it is called or use
+<xref linkend='XtRemoveWorkProc' xrefstyle='select: title'/>
+outside of the procedure.
+</para>
+
+<funcsynopsis id='XtRemoveWorkProc'>
+<funcprototype>
+<funcdef>void <function>XtRemoveWorkProc</function></funcdef>
+ <paramdef>XtWorkProcId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies which work procedure to remove.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveWorkProc' xrefstyle='select: title'/>
+function explicitly removes the specified background work procedure.
+</para>
+</sect1>
+
+<sect1 id="X_Event_Filters">
+<title>X Event Filters</title>
+<para>
+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.
+</para>
+<sect2 id="Pointer_Motion_Compression">
+<title>Pointer Motion Compression</title>
+<para>
+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 <emphasis remap='I'>compress_motion</emphasis> should be
+<function>True</function>.
+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.
+</para>
+</sect2>
+
+<sect2 id="Enter_Leave_Compression">
+<title>Enter/Leave Compression</title>
+<para>
+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 <emphasis remap='I'>compress_enterleave</emphasis> should be
+<function>True</function>.
+These enter and leave events are not delivered to the client
+if they are found together in the input queue.
+</para>
+</sect2>
+
+<sect2 id="Exposure_Compression">
+<title>Exposure Compression</title>
+<para>
+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.
+</para>
+
+<para>
+In either case, these widgets do not care about getting partial exposure events.
+The <emphasis remap='I'>compress_exposure</emphasis> 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:
+</para>
+
+<literallayout >
+#define XtExposeNoCompress ((XtEnum)False)
+#define XtExposeCompressSeries ((XtEnum)True)
+#define XtExposeCompressMultiple &lt;implementation-defined&gt;
+#define XtExposeCompressMaximal &lt;implementation-defined&gt;
+</literallayout>
+
+<para>
+optionally ORed with any combination of the following flags (all with
+implementation-defined values):
+<function>XtExposeGraphicsExpose</function>,
+<function>XtExposeGraphicsExposeMerged</function>,
+<function>XtExposeNoExpose</function>,
+and
+<function>XtExposeNoRegion</function>.
+</para>
+
+<para>
+If the <emphasis remap='I'>compress_exposure</emphasis> field in the widget class structure does not
+specify
+<function>XtExposeNoCompress</function>,
+the event manager calls the widget's expose procedure only
+once for a series of exposure events.
+In this case, all
+<function>Expose</function>
+or
+<function>GraphicsExpose</function>
+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
+<function>XtExposeNoRegion</function>
+is specified) the region.
+For more information on regions, see
+<olink targetdoc='libX11' targetptr='Manipulating_Regions'>Section 16.5</olink> in
+<olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface.</olink>.)
+</para>
+
+<para>
+The values have the following interpretation:
+</para>
+
+<para>
+<function>XtExposeNoCompress</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+No exposure compression is performed; every selected event is
+individually dispatched to the expose procedure with a <emphasis remap='I'>region</emphasis>
+argument of NULL.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeCompressSeries</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeCompressMultiple</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeCompressMaximal</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The additional flags have the following meaning:
+</para>
+
+<para>
+<function>XtExposeGraphicsExpose</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Specifies that
+<function>GraphicsExpose</function>
+events are also to be dispatched to
+the expose procedure.
+<function>GraphicsExpose</function>
+events are compressed, if specified, in the same manner as
+<function>Expose</function>
+events.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeGraphicsExposeMerged</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Specifies in the case of
+<function>XtExposeCompressMultiple</function>
+and
+<function>XtExposeCompressMaximal</function>
+that series of
+<function>GraphicsExpose</function>
+and
+<function>Expose</function>
+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
+<function>XtExposeGraphicsExpose</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeNoExpose</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Specifies that
+<function>NoExpose</function>
+events are also to be dispatched to the expose procedure.
+<function>NoExpose</function>
+events are never coalesced with
+other exposure events or with each other.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtExposeNoRegion</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+</sect1>
+
+<sect1 id="Widget_Exposure_and_Visibility">
+<title>Widget Exposure and Visibility</title>
+<para>
+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.
+</para>
+
+<sect2 id="Redisplay_of_a_Widget_The_expose_Procedure">
+<title>Redisplay of a Widget: The expose Procedure</title>
+<para>
+The expose procedure pointer in a widget class is of type
+<xref linkend='XtExposeProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtExposeProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtExposeProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>Region <parameter>region</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget instance requiring redisplay.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the exposure event giving the rectangle requiring redisplay.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>region</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the union of all rectangles in this exposure sequence.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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 <emphasis remap='I'>expose</emphasis> field.
+Many composite widgets serve only as containers for their children
+and have no expose procedure.
+</para>
+
+<note>
+<para>
+If the <emphasis remap='I'>expose</emphasis> procedure is NULL,
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+fills in a default bit gravity of
+<function>NorthWestGravity</function>
+before it calls the widget's realize procedure.
+</para>
+</note>
+
+<para>
+If the widget's <emphasis remap='I'>compress_exposure</emphasis> class field specifies
+<function>XtExposeNoCompress</function>
+or
+<function>XtExposeNoRegion</function>,
+or if the event type is
+<function>NoExpose</function>
+(see <xref linkend='Exposure_Compression' />),
+<emphasis remap='I'>region</emphasis> is NULL. If
+<function>XtExposeNoCompress</function>
+is not specified and the event type is not
+<function>NoExpose</function>,
+the event is the final event in the compressed series
+but <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>, <emphasis remap='I'>width</emphasis>, and <emphasis remap='I'>height</emphasis> 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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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
+</para>
+<literallayout >
+Boolean invert;
+Boolean highlight;
+Dimension highlight_width;
+</literallayout>
+<para>
+Label would have <emphasis remap='I'>invert</emphasis> and <emphasis remap='I'>highlight</emphasis> always
+<function>False</function>
+and <emphasis remap='I'>highlight_width</emphasis> zero.
+Pushbutton would dynamically set <emphasis remap='I'>highlight</emphasis> and <emphasis remap='I'>highlight_width</emphasis>,
+but it would leave <emphasis remap='I'>invert</emphasis> always
+<function>False</function>.
+Finally, Toggle would dynamically set all three.
+In this case,
+the expose procedures for Pushbutton and Toggle inherit
+their superclass's expose procedure;
+see <xref linkend='Inheritance_of_Superclass_Operations' />.
+</para>
+</sect2>
+
+<sect2 id="Widget_Visibility">
+<title>Widget Visibility</title>
+<para>
+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.
+</para>
+
+<para>
+The <emphasis remap='I'>visible</emphasis> 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
+<function>True</function>
+by the time an
+exposure
+event is processed if any part of the widget is visible,
+but is
+<function>False</function>
+if the widget is fully obscured.
+</para>
+
+<para>
+Widgets can use or ignore the <emphasis remap='I'>visible</emphasis> hint.
+If they ignore it,
+they should have <emphasis remap='I'>visible_interest</emphasis> in their widget class record set
+<function>False</function>.
+In such cases,
+the <emphasis remap='I'>visible</emphasis> field is initialized
+<function>True</function>
+and never changes.
+If <emphasis remap='I'>visible_interest</emphasis> is
+<function>True</function>,
+the event manager asks for
+<function>VisibilityNotify</function>
+events for the widget and sets <emphasis remap='I'>visible</emphasis> to
+<function>True</function>
+on
+<function>VisibilityUnobscured</function>
+or
+<function>VisibilityPartiallyObscured</function>
+events and
+<function>False</function>
+on
+<function>VisibilityFullyObscured</function>
+events.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="X_Event_Handlers">
+<title>X Event Handlers</title>
+<para>
+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
+<xref linkend='XtEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtEventHandler'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtEventHandler)</function></funcdef>
+
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>Boolean *<parameter>continue_to_dispatch</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which the event arrived.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any client-specific information registered with the event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the triggering event.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>continue_to_dispatch</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether the remaining event
+handlers registered for the current event
+should be called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+After receiving an event and before calling any event handlers, the
+Boolean pointed to by <emphasis remap='I'>continue_to_dispatch</emphasis> is initialized to
+<function>True</function>.
+When an event handler is called, it may decide that further processing
+of the event is not desirable and may store
+<function>False</function>
+in this Boolean, in
+which case any handlers remaining to be called for the event are
+ignored.
+</para>
+
+<para>
+The circumstances under which the Intrinsics may add event handlers
+to a widget are currently implementation-dependent. Clients must
+therefore be aware that storing
+<function>False</function>
+into the <emphasis remap='I'>continue_to_dispatch</emphasis> argument can lead to portability problems.
+</para>
+<sect2 id="Event_Handlers_That_Select_Events">
+<title>Event Handlers That Select Events</title>
+<para>
+To register an event handler procedure with the dispatch mechanism, use
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtAddEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to call this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+called on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+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 <emphasis remap='I'>client_data</emphasis>
+value,
+the specified mask augments the existing mask.
+If the widget is realized,
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+calls
+<function>XSelectInput</function>,
+if necessary.
+The order in which this procedure is called relative to other handlers
+registered for the same event is not defined.
+</para>
+
+<para>
+To remove a previously registered event handler, use
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtRemoveEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this procedure is registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to unregister this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+removed on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be removed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the registered client data.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>
+function unregisters an event handler registered with
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>
+for the specified events.
+The request is ignored if <emphasis remap='I'>client_data</emphasis> does not match the value given
+when the handler was registered.
+If the widget is realized and no other event handler requires the event,
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>
+calls
+<function>XSelectInput</function>.
+If the specified procedure has not been registered
+or if it has been registered with a different value of <emphasis remap='I'>client_data</emphasis>,
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>
+returns without reporting an error.
+</para>
+
+<para>
+To stop a procedure registered with
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>
+from receiving all selected events, call
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>
+with an <emphasis remap='I'>event_mask</emphasis> of
+<function>XtAllEvents</function>
+and <emphasis remap='I'>nonmaskable</emphasis>
+<function>True</function>.
+The procedure will continue to receive any events
+that have been specified in calls to
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register an event handler procedure that receives events before or
+after all previously registered event handlers, use
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>.
+</para>
+<literallayout >
+typedef enum {XtListHead, XtListTail} XtListPosition;
+</literallayout>
+
+<funcsynopsis id='XtInsertEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtInsertEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtListPosition <parameter>position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to call this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+called on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the client's event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies when the event handler is to be called
+relative to other previously registered handlers.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>
+is identical to
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+with the additional <emphasis remap='I'>position</emphasis> argument. If <emphasis remap='I'>position</emphasis> is
+<function>XtListHead</function>,
+the event
+handler is registered so that it is called before any event
+handlers that were previously registered for the same widget. If
+<emphasis remap='I'>position</emphasis> is
+<function>XtListTail</function>,
+the event handler is registered to be called
+after any previously registered event handlers. If the procedure is
+already registered with the same <emphasis remap='I'>client_data</emphasis> value, the specified mask
+augments the existing mask and the procedure is repositioned in
+the list.
+</para>
+</sect2>
+
+<sect2 id="Event_Handlers_That_Do_Not_Select_Events">
+<title>Event Handlers That Do Not Select Events</title>
+<para>
+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
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddRawEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtAddRawEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to call this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+called on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the client's event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>
+function is similar to
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+except that it does not affect the widget's event mask and never causes an
+<function>XSelectInput</function>
+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 <emphasis remap='I'>client_data</emphasis>,
+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.
+</para>
+
+<para>
+To remove a previously registered raw event handler, use
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveRawEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtRemoveRawEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this procedure is registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to unregister this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+removed on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the registered client data.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>
+function unregisters an event handler registered with
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
+for the specified events without changing
+the window event mask.
+The request is ignored if <emphasis remap='I'>client_data</emphasis> 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 <emphasis remap='I'>client_data</emphasis>,
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>
+returns without reporting an error.
+</para>
+
+<para>
+To stop a procedure
+registered with
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
+from receiving all nonselected events, call
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>
+with an <emphasis remap='I'>event_mask</emphasis> of
+<function>XtAllEvents</function>
+and <emphasis remap='I'>nonmaskable</emphasis>
+<function>True</function>.
+The procedure
+will continue to receive any events that have been specified in calls to
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+or
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register an event handler procedure that receives events before or
+after all previously registered event handlers without selecting for
+the events, use
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInsertRawEventHandler'>
+<funcprototype>
+<funcdef>void <function>XtInsertRawEventHandler</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>EventMask <parameter>event_mask</parameter></paramdef>
+ <paramdef>Boolean <parameter>nonmaskable</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtListPosition <parameter>position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event mask for which to call this procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nonmaskable</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether this procedure should be
+called on the nonmaskable events
+<function>( GraphicsExpose</function>,
+<function>NoExpose</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+<function>ClientMessage</function>,
+and
+<function>MappingNotify ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the client's event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies when the event handler is to be called
+relative to other previously registered handlers.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
+function is similar to
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>
+except that it does not modify the widget's event
+mask and never causes an
+<function>XSelectInput</function>
+for the specified events. If
+the procedure is already registered with the same <emphasis remap='I'>client_data</emphasis>
+value, the
+specified mask augments the existing mask and the procedure is
+repositioned in the list.
+</para>
+</sect2>
+
+<sect2 id="Current_Event_Mask">
+<title>Current Event Mask</title>
+<para>
+To retrieve the event mask for a given widget, use
+<xref linkend='XtBuildEventMask' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtBuildEventMask'>
+<funcprototype>
+<funcdef>EventMask <function>XtBuildEventMask</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtBuildEventMask' xrefstyle='select: title'/>
+function returns the event mask representing the logical OR
+of all event masks for event handlers registered on the widget with
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>
+and
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>
+and all event translations, including accelerators,
+installed on the widget.
+This is the same event mask stored into the
+<function>XSetWindowAttributes</function>
+structure by
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>
+and sent to the server when event handlers and translations are installed or
+removed on the realized widget.
+</para>
+</sect2>
+
+<sect2 id="Event_Handlers_for_X_Protocol_Extensions">
+<title>Event Handlers for X11 Protocol Extensions</title>
+<para>
+To register an event handler procedure with the Intrinsics dispatch
+mechanism according to an event type, use
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInsertEventTypeHandler'>
+<funcprototype>
+<funcdef>void <function>XtInsertEventTypeHandler</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>int <parameter>event_type</parameter></paramdef>
+ <paramdef>XtPointer <parameter>select_data</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtListPosition <parameter>position</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which this event handler is being registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event type for which to call this event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>select_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies data used to request events of the specified type from the server,
+or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event handler to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the event handler.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>position</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies when the event handler is to be called relative to other
+previously registered handlers.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>
+registers a procedure with the
+dispatch mechanism that is to be called when an event that matches the
+specified <emphasis remap='I'>event_type</emphasis> is dispatched to the specified <emphasis remap='I'>widget</emphasis>.
+</para>
+
+<para>
+If <emphasis remap='I'>event_type</emphasis> specifies one of the core X protocol events, then
+<emphasis remap='I'>select_data</emphasis> must be a pointer to a value of type
+<function>EventMask</function>,
+indicating
+the event mask to be used to select for the desired event. This event
+mask is included in the value returned by
+<xref linkend='XtBuildEventMask' xrefstyle='select: title'/>.
+If the widget is realized,
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>
+calls
+<function>XSelectInput</function>
+if necessary. Specifying NULL for <emphasis remap='I'>select_data</emphasis> is equivalent to
+specifying a pointer to an event mask containing 0. This is similar
+to the
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
+function.
+</para>
+
+<para>
+If <emphasis remap='I'>event_type</emphasis> specifies an extension event type, then the semantics of
+the data pointed to by <emphasis remap='I'>select_data</emphasis> are defined by the extension
+selector registered for the specified event type.
+</para>
+
+<para>
+In either case the Intrinsics are not required to copy the data
+pointed to by <emphasis remap='I'>select_data</emphasis>, so the caller must ensure that it remains
+valid as long as the event handler remains registered with this value
+of <emphasis remap='I'>select_data</emphasis>.
+</para>
+
+<para>
+The <emphasis remap='I'>position</emphasis> 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
+<function>XtListTail</function>,
+which registers this event handler after any previously
+registered handlers for this event type.
+</para>
+
+<para>
+Each widget has a single registered event handler list, which will
+contain any procedure/client_data pair exactly once if it is
+registered with
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>,
+regardless of the manner
+in which it is registered and regardless of the value(s)
+of <emphasis remap='I'>select_data</emphasis>. If the procedure is already registered with the
+same <emphasis remap='I'>client_data</emphasis> value, the specified mask augments the existing
+mask and the procedure is repositioned in the list.
+</para>
+
+<para>
+To remove an event handler registered with
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>,
+use
+<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveEventTypeHandler'>
+<funcprototype>
+<funcdef>void <function>XtRemoveEventTypeHandler</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>int <parameter>event_type</parameter></paramdef>
+ <paramdef>XtPointer <parameter>select_data</parameter></paramdef>
+ <paramdef>XtEventHandler <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget for which the event handler was registered. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event type for which the handler was registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>select_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies data used to deselect events of the specified type
+from the server, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event handler to be removed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional client data with which the procedure was registered.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>
+function unregisters an event handler
+registered with
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>
+for the specified event type.
+The request is ignored if <emphasis remap='I'>client_data</emphasis> does not match the value given
+when the handler was registered.
+</para>
+
+<para>
+If <emphasis remap='I'>event_type</emphasis> specifies one of the core X protocol events,
+<emphasis remap='I'>select_data</emphasis> must be a pointer to a value of type
+<function>EventMask, indicating the event</function>
+mask to be used to deselect for the appropriate event. If the widget
+is realized,
+<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>
+calls
+<function>XSelectInput</function>
+if necessary.
+Specifying NULL for <emphasis remap='I'>select_data</emphasis> is equivalent to specifying a pointer
+to an event mask containing 0. This is similar to the
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>
+function.
+</para>
+
+<para>
+If <emphasis remap='I'>event_type</emphasis> specifies an extension event type, then the semantics of
+the data pointed to by <emphasis remap='I'>select_data</emphasis> are defined by the extension
+selector registered for the specified event type.
+</para>
+
+<para>
+To register a procedure to select extension events for a widget, use
+<xref linkend='XtRegisterExtensionSelector' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRegisterExtensionSelector'>
+<funcprototype>
+<funcdef>void <function>XtRegisterExtensionSelector</function></funcdef>
+ <paramdef>Display <parameter>*display</parameter></paramdef>
+ <paramdef>int <parameter>min_event_type</parameter></paramdef>
+ <paramdef>int <parameter>max_event_type</parameter></paramdef>
+ <paramdef>XtExtensionSelectProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display for which the extension selector is to be registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>min_event_type</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>max_event_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the range of event types for the extension.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the extension selector procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the extension selector.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRegisterExtensionSelector' xrefstyle='select: title'/>
+function registers a procedure to arrange
+for the delivery of extension events to widgets.
+</para>
+
+<para>
+If <emphasis remap='I'>min_event_type</emphasis> and <emphasis remap='I'>max_event_type</emphasis> match the parameters
+to a previous call to
+<xref linkend='XtRegisterExtensionSelector' xrefstyle='select: title'/>
+for the same <emphasis remap='I'>display</emphasis>, then <emphasis remap='I'>proc</emphasis> and <emphasis remap='I'>client_data</emphasis>
+replace the previously
+registered values. If the range specified by <emphasis remap='I'>min_event_type</emphasis>
+and <emphasis remap='I'>max_event_type</emphasis> overlaps the range of the parameters to a
+previous call for the same display in any other way, an error results.
+</para>
+
+<para>
+When a widget is realized,
+after the <emphasis remap='I'>core.realize</emphasis> 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.
+</para>
+
+<para>
+An extension selector is of type
+<xref linkend='XtExtensionSelectProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtExtensionSelectProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtExtensionSelectProc)</function></funcdef>
+
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>int *<parameter>event_types</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>select_data</parameter></paramdef>
+ <paramdef>int <parameter>count</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that is being realized or is having
+an event handler added or removed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_types</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of event types that the widget has
+registered event handlers for.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>select_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of the select_data parameters specified in
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>count</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the <emphasis remap='I'>event_types</emphasis> and <emphasis remap='I'>select_data</emphasis>
+lists.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional client data with which the procedure was registered.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>event_types</emphasis> and <emphasis remap='I'>select_data</emphasis> lists will always have the
+same number of elements, specified by <emphasis remap='I'>count</emphasis>.
+Each event type/select data pair represents one call to
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register a procedure to dispatch events of a specific type within
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>,
+use
+<xref linkend='XtSetEventDispatcher' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetEventDispatcher'>
+<funcprototype>
+<funcdef>XtEventDispatchProc <function>XtSetEventDispatcher</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>int <parameter>event_type</parameter></paramdef>
+ <paramdef>XtEventDispatchProc <parameter>proc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display for which the event dispatcher is to be registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event type for which the dispatcher should be invoked.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event dispatcher procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetEventDispatcher' xrefstyle='select: title'/>
+function registers the event dispatcher procedure specified by <emphasis remap='I'>proc</emphasis>
+for events with the type <emphasis remap='I'>event_type</emphasis>. The previously registered
+dispatcher (or the default dispatcher if there was no previously registered
+dispatcher) is returned. If <emphasis remap='I'>proc</emphasis> is NULL, the default procedure is
+restored for the specified type.
+</para>
+
+<para>
+In the future, when
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+is called with an event type of <emphasis remap='I'>event_type</emphasis>, the specified <emphasis remap='I'>proc</emphasis>
+(or the default dispatcher) is invoked to determine a widget
+to which to dispatch the event.
+</para>
+
+<para>
+The default dispatcher handles the Intrinsics modal cascade and keyboard
+focus mechanisms, handles the semantics of <emphasis remap='I'>compress_enterleave</emphasis>
+and <emphasis remap='I'>compress_motion</emphasis>, and discards all extension events.
+</para>
+
+<para>
+An event dispatcher procedure pointer is of type
+<xref linkend='XtEventDispatchProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtEventDispatchProc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtEventDispatchProc)</function></funcdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Passes the event to be dispatched.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The event dispatcher procedure should determine whether this event is of
+a type that should be dispatched to a widget.
+</para>
+
+<para>
+If the event should be dispatched to a widget, the event dispatcher
+procedure should determine the appropriate widget to receive the
+event, call
+<function>XFilterEvent</function>
+with the window of this widget, or
+<function>None</function>
+if the event is to be discarded, and if
+<function>XFilterEvent</function>
+returns
+<function>False</function>,
+dispatch the event to the widget using
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>.
+The procedure should return
+<function>True</function>
+if either
+<function>XFilterEvent</function>
+or
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
+returned
+<function>True</function>
+and
+<function>False</function>
+otherwise.
+</para>
+
+<para>
+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
+<function>True</function>
+if it successfully dispatched the event and
+<function>False</function>
+otherwise.
+</para>
+
+<para>
+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
+<xref linkend='XtGetKeyboardFocusWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetKeyboardFocusWidget'>
+<funcprototype>
+<funcdef>Widget <function>XtGetKeyboardFocusWidget</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to get forwarding information for.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetKeyboardFocusWidget' xrefstyle='select: title'/>
+function returns the widget that would be the end result of keyboard
+event forwarding for a keyboard event for the specified widget.
+</para>
+
+<para>
+To dispatch an event to a specified widget, use
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDispatchEventToWidget'>
+<funcprototype>
+<funcdef>Boolean <function>XtDispatchEventToWidget</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to which to dispatch the event.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the event to be dispatched.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
+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 <emphasis remap='I'>continue_to_dispatch</emphasis>
+value returned by each handler.
+The Intrinsics behave as if event handlers were registered at the head
+of the list for
+<function>Expose</function>,
+<function>NoExpose</function>,
+<function>GraphicsExpose</function>,
+and
+<function>VisibilityNotify</function>
+events to invoke the widget's expose procedure according to the exposure
+compression rules and to update the widget's <emphasis remap='I'>visible</emphasis> field
+if <emphasis remap='I'>visible_interest</emphasis> is
+<function>True</function>.
+These internal event handlers never set <emphasis remap='I'>continue_to_dispatch</emphasis> to
+<function>False</function>.
+</para>
+
+<para>
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
+returns
+<function>True</function>
+if any event handler was called and
+<function>False</function>
+otherwise.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Using_the_Intrinsics_in_a_Multi_Threaded_Environment">
+<title>Using the Intrinsics in a Multi-Threaded Environment</title>
+<para>
+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
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>.
+</para>
+<sect2 id="Initializing_a_Multi_Threaded_Intrinsics_Application">
+<title>Initializing a Multi-Threaded Intrinsics Application</title>
+<para>
+To test and initialize Intrinsics support for mutually exclusive thread
+access, call
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtToolkitThreadInitialize'>
+<funcprototype>
+<funcdef>Boolean <function>XtToolkitThreadInitialize</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>
+returns <function>True</function> if the Intrinsics support mutually exclusive thread
+access, otherwise it returns <function>False</function>. <xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>
+must be called before
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>,
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>,
+or
+<function>XtSetLanguageProc</function>
+is called. <xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/> may be called more than once;
+however, the application writer must ensure that it is not called
+simultaneously by two or more threads.
+</para>
+</sect2>
+
+<sect2 id="Locking_tk_Data_Structures">
+<title>Locking X Toolkit Data Structures</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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:
+</para>
+<literallayout >
+ ...
+ XtAppLock(app_context);
+ XtCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret);
+ XtAppUnlock(app_context);
+ ...
+</literallayout>
+<para>
+When the application relies upon
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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:
+</para>
+<literallayout >
+#include &lt;X11/CoreP.h&gt;
+Boolean BeingDestroyed (widget)
+ Widget widget;
+{
+ Boolean ret;
+ XtAppLock(XtWidgetToApplicationContext(widget));
+ ret = widget-&gt;core.being_destroyed;
+ XtAppUnlock(XtWidgetToApplicationContext(widget));
+ return ret;
+}
+</literallayout>
+<para>
+A client that wishes to atomically call two or more Intrinsics functions
+must lock the application context. For example:
+</para>
+<literallayout >
+ ...
+ XtAppLock(XtWidgetToApplicationContext(widget));
+ XtUnmanageChild (widget1);
+ XtManageChild (widget2);
+ XtAppUnlock(XtWidgetToApplicationContext(widget));
+ ...
+</literallayout>
+<sect3 id="Locking_the_Application_Context">
+<title>Locking the Application Context</title>
+<para>
+To ensure mutual exclusion of application context, display, or
+widget internal state, use
+<function>XtAppLock.</function>
+</para>
+
+<funcsynopsis id='XtAppLock'>
+<funcprototype>
+<funcdef>void <function>XtAppLock</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context to lock.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppLock' xrefstyle='select: title'/> 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.
+</para>
+
+<para>
+To unlock a locked application context, use
+<function>XtAppUnlock.</function>
+</para>
+
+<funcsynopsis id='XtAppUnlock'>
+<funcprototype>
+<funcdef>void <function>XtAppUnlock</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context that was previously locked.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+</sect3>
+<sect3 id="Locking_the_Process">
+<title>Locking the Process</title>
+<para>
+To ensure mutual exclusion of X Toolkit process global data, a
+widget writer must use
+<function>XtProcessLock.</function>
+</para>
+
+<funcsynopsis id='XtProcessLock'>
+<funcprototype>
+<funcdef>void <function>XtProcessLock</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<xref linkend='XtProcessLock' xrefstyle='select: title'/> blocks until it is able to acquire the lock.
+Widget writers may use XtProcessLock to guarantee mutually exclusive
+access to widget static data.
+</para>
+
+<para>
+To unlock a locked process, use
+<xref linkend='XtProcessUnlock' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtProcessUnlock'>
+<funcprototype>
+<funcdef>void <function>XtProcessUnlock</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+To lock both an application context and the process at the same
+time, call
+<xref linkend='XtAppLock' xrefstyle='select: title'/>
+first and then
+<xref linkend='XtProcessLock' xrefstyle='select: title'/>.
+To release both locks, call
+<xref linkend='XtProcessUnlock' xrefstyle='select: title'/>
+first and then
+<xref linkend='XtAppUnlock' xrefstyle='select: title'/>.
+The order is important to avoid deadlock.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Event_Management_in_a_Multi_Threaded_Environment">
+<title>Event Management in a Multi-Threaded Environment</title>
+<para>
+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.
+</para>
+
+<para>
+To indicate that the event loop should terminate after the current
+event dispatch has completed, use
+<xref linkend='XtAppSetExitFlag' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetExitFlag'>
+<funcprototype>
+<funcdef>void <function>XtAppSetExitFlag</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>
+tests the value of the flag and will return if the flag is <function>True</function>.
+</para>
+
+<para>
+Application writers who implement their own main loop may test the
+value of the exit flag with
+<xref linkend='XtAppGetExitFlag' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppGetExitFlag'>
+<funcprototype>
+<funcdef>Boolean <function>XtAppGetExitFlag</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppGetExitFlag' xrefstyle='select: title'/>
+will normally return <function>False</function>, indicating that event processing
+may continue. When
+<xref linkend='XtAppGetExitFlag' xrefstyle='select: title'/>
+returns <function>True</function>, the loop must terminate and return to the caller,
+which might then destroy the application context.
+</para>
+
+<para>
+Application writers should be aware that, if a thread is blocked in
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>,
+or
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+The Intrinsics manage access to events on a last-in, first-out basis. If
+multiple threads in the same application context block in
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>,
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>,
+or
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>,
+the last thread to call one of these functions is the first
+thread to return.
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH08 b/libXt/specs/CH08
deleted file mode 100644
index 6dfb5290b..000000000
--- a/libXt/specs/CH08
+++ /dev/null
@@ -1,452 +0,0 @@
-.\" $Xorg: CH08,v 1.3 2000/08/17 19:42:46 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 8\fP\s-1
-
-\s+1\fBCallbacks\fP\s-1
-.sp 2
-.nr H1 8
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 8 \(em Callbacks
-.XE
-.IN "Destroy 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 \fIdestroy_callbacks\fP
-list is called to notify clients of the widget's impending doom.
-.LP
-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.
-.LP
-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.
-
-.NH 2
-Using Callback Procedure and Callback List Definitions
-.XS
-\fB\*(SN Using Callback Procedure and Callback List Definitions\fP
-.XE
-.IN "XtCallbackList"
-.IN "XtCallbackProc"
-.LP
-Callback procedure pointers for use in callback lists are of type
-.PN XtCallbackProc .
-.LP
-.IN "XtCallbackProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtCallbackProc)(Widget, XtPointer, XtPointer);
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget owning the list in which the callback is registered.
-.IP \fIclient_data\fP 1i
-Specifies additional data supplied by the client when the procedure
-was registered.
-.IP \fIcall_data\fP 1i
-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.
-.LP
-.eM
-The \fIclient_data\fP 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 \fIclient_data\fP value may be NULL
-if all necessary information is in the widget.
-The \fIcall_data\fP argument is a convenience to avoid having simple
-cases where the client could otherwise always call
-.PN XtGetValues
-or a widget-specific function to retrieve data from the widget.
-Widgets should generally avoid putting complex state information
-in \fIcall_data\fP.
-The client can use the more general data retrieval methods, if necessary.
-.LP
-Whenever a client wants to pass a callback list as an argument in an
-.PN XtCreateWidget ,
-.PN XtSetValues ,
-or
-.PN XtGetValues
-call, it should specify the address
-of a NULL-terminated array of type
-.PN XtCallbackList .
-.IN "XtCallbackList" "" "@DEF@"
-.IN "XtCallbackRec" "" "@DEF@"
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- XtCallbackProc callback;
- XtPointer closure;
-} XtCallbackRec, *XtCallbackList;
-.De
-.LP
-.eM
-For example, the callback list for procedures A and B with client data
-clientDataA and clientDataB, respectively, is
-.LP
-.KS
-.Ds 5
-.TA .5i 3i
-.ta .5i 3i
-static XtCallbackRec callbacks[] = {
- {A, (XtPointer) clientDataA},
- {B, (XtPointer) clientDataB},
- {(XtCallbackProc) NULL, (XtPointer) NULL}
-};
-.De
-.KE
-.LP
-Although callback lists are passed by address in arglists
-and varargs lists,
-the \*(xI 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 \*(xI automatically do this,
-potentially using a different structure for their
-internal representation.
-
-.NH 2
-Identifying Callback Lists
-.XS
-\fB\*(SN Identifying Callback Lists\fP
-.XE
-.LP
-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
-.PN XtCallCallbackList
-check
-to see that the requested callback list is indeed implemented by the widget.
-.LP
-For the \*(xI to find and correctly handle callback lists,
-they must be declared with a resource type of
-.PN 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
-.PN XtCallbackStatus
-.PN XtCallbackHasNone ),
-access to callback list resources must be made
-through other \*(xI procedures.
-
-.NH 2
-Adding Callback Procedures
-.XS
-\fB\*(SN Adding Callback Procedures\fP
-.XE
-.LP
-To add a callback procedure to a widget's callback list, use
-.PN XtAddCallback .
-.LP
-.IN "XtAddCallback" "" "@DEF@"
-.sM
-.FD 0
-void XtAddCallback(\fIw\fP, \fIcallback_name, \fP\fIcallback\fP, \
-\fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.br
- XtCallbackProc \fIcallback\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list to which the procedure is to be appended.
-.IP \fIcallback\fP 1i
-Specifies the callback procedure.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the specified procedure
-when it is invoked,
-or NULL.
-.LP
-.eM
-A callback will be invoked as many times as it occurs in the callback list.
-.sp
-.LP
-To add a list of callback procedures to a given widget's callback list, use
-.PN XtAddCallbacks .
-.LP
-.IN "XtAddCallbacks" "" "@DEF@"
-.sM
-.FD 0
-void XtAddCallbacks(\fIw\fP, \fIcallback_name, \fP\fIcallbacks\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.br
- XtCallbackList \fIcallbacks\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list to which the procedures are to be appended.
-.IP \fIcallbacks\fP 1i
-Specifies the null-terminated list of callback procedures and corresponding
-client data.
-.LP
-.eM
-.NH 2
-Removing Callback Procedures
-.XS
-\fB\*(SN Removing Callback Procedures\fP
-.XE
-.LP
-To delete a callback procedure from a widget's callback list, use
-.PN XtRemoveCallback .
-.LP
-.IN "XtRemoveCallback" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveCallback(\fIw\fP, \fIcallback_name\fP, \fIcallback\fP, \
-\fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.br
- XtCallbackProc \fIcallback\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list from which the procedure is to be deleted.
-.IP \fIcallback\fP 1i
-Specifies the callback procedure.
-.IP \fIclient_data\fP 1i
-Specifies the client data to match with the registered callback entry.
-.LP
-.eM
-The
-.PN XtRemoveCallback
-function removes a callback only if both the procedure and the client
-data match.
-.sp
-.LP
-To delete a list of callback procedures from a given widget's callback list, use
-.PN XtRemoveCallbacks .
-.LP
-.IN "XtRemoveCallbacks" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcallbacks\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.br
- XtCallbackList \fIcallbacks\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list from which the procedures are to be deleted.
-.IP \fIcallbacks\fP 1i
-Specifies the null-terminated list of callback procedures and corresponding
-client data.
-.LP
-.eM
-To delete all callback procedures from a given widget's callback list
-and free all storage associated with the callback list, use
-.PN XtRemoveAllCallbacks .
-.LP
-.IN "XtRemoveAllCallbacks" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveAllCallbacks(\fIw\fP, \fIcallback_name\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list to be cleared.
-.LP
-.eM
-.NH 2
-Executing Callback Procedures
-.XS
-\*(SN Executing Callback Procedures
-.XE
-.LP
-To execute the procedures in a given widget's callback list,
-specifying the callback list by resource name, use
-.PN XtCallCallbacks .
-.LP
-.IN "XtCallCallbacks" "" "@DEF@"
-.sM
-.FD 0
-void XtCallCallbacks(\fIw\fP, \fIcallback_name\fP, \fIcall_data\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list to be executed.
-.IP \fIcall_data\fP 1i
-Specifies a callback-list-specific data value to pass to each of the callback
-procedure in the list, or NULL.
-.LP
-.eM
-.LP
-.PN XtCallCallbacks
-calls each of the callback procedures in the list
-named by \fIcallback_name\fP in the specified widget, passing the client
-data registered with the procedure and \fIcall-data\fP.
-.sp
-.LP
-To execute the procedures in a callback list, specifying the callback
-list by address, use
-.PN XtCallCallbackList .
-.LP
-.IN "XtCallCallbackList" "" "@DEF@"
-.sM
-.FD 0
-void XtCallCallbackList(\fIwidget\fP, \fIcallbacks\fP, \fIcall_data\fP)
-.br
- Widget \fIwidget\fP;
-.br
- XtCallbackList \fIcallbacks\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget instance that contains the callback list. \*(oI
-.IP \fIcallbacks\fP 1i
-Specifies the callback list to be executed.
-.IP \fIcall_data\fP 1i
-Specifies a callback-list-specific data value to pass
-to each of the callback procedures in the list, or NULL.
-.LP
-.eM
-The \fIcallbacks\fP parameter must specify the contents of a widget or
-object resource declared with representation type
-.PN XtRCallback .
-If \fIcallbacks\fP is NULL,
-.PN XtCallCallbackList
-returns immediately; otherwise it calls each of the callback
-procedures in the list, passing the client data and \fIcall_data\fP.
-
-.NH 2
-Checking the Status of a Callback List
-.XS
-\*(SN Checking the Status of a Callback List
-.XE
-.LP
-To find out the status of a given widget's callback list, use
-.PN XtHasCallbacks .
-.LP
-.IN "XtHasCallbacks" "" "@DEF@"
-.sp
-.sM
-.FD 0
-typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} \
-XtCallbackStatus;
-.sp
-XtCallbackStatus XtHasCallbacks(\fIw\fP, \fIcallback_name\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIcallback_name\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(oI
-.IP \fIcallback_name\fP 1i
-Specifies the callback list to be checked.
-.LP
-.eM
-The
-.PN XtHasCallbacks
-function first checks to see if the widget has a callback list identified
-by \fIcallback_name\fP.
-If the callback list does not exist,
-.PN XtHasCallbacks
-returns
-.PN XtCallbackNoList .
-If the callback list exists but is empty,
-it returns
-.PN XtCallbackHasNone .
-If the callback list exists and has at least one callback registered,
-it returns
-.PN XtCallbackHasSome .
-.bp
diff --git a/libXt/specs/CH08.xml b/libXt/specs/CH08.xml
new file mode 100644
index 000000000..2f24e6555
--- /dev/null
+++ b/libXt/specs/CH08.xml
@@ -0,0 +1,613 @@
+<chapter id='Callbacks'>
+<title>Callbacks</title>
+<para>
+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 <emphasis remap='I'>destroy_callbacks</emphasis>
+list is called to notify clients of the widget's impending doom.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+<sect1 id="Using_Callback_Procedure_and_Callback_List_Definitions">
+<title>Using Callback Procedure and Callback List Definitions</title>
+<para>
+Callback procedure pointers for use in callback lists are of type
+<xref linkend='XtCallbackProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallbackProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtCallbackProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget owning the list in which the callback is registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data supplied by the client when the procedure
+was registered.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>client_data</emphasis> 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 <emphasis remap='I'>client_data</emphasis> value may be NULL
+if all necessary information is in the widget.
+The <emphasis remap='I'>call_data</emphasis> argument is a convenience to avoid having simple
+cases where the client could otherwise always call
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+or a widget-specific function to retrieve data from the widget.
+Widgets should generally avoid putting complex state information
+in <emphasis remap='I'>call_data</emphasis>.
+The client can use the more general data retrieval methods, if necessary.
+</para>
+
+<para>
+Whenever a client wants to pass a callback list as an argument in an
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>,
+or
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+call, it should specify the address
+of a NULL-terminated array of type
+<function>XtCallbackList</function>.
+</para>
+<literallayout >
+typedef struct {
+ XtCallbackProc callback;
+ XtPointer closure;
+} XtCallbackRec, *XtCallbackList;
+</literallayout>
+<para>
+For example, the callback list for procedures A and B with client data
+clientDataA and clientDataB, respectively, is
+</para>
+<literallayout >
+static XtCallbackRec callbacks[] = {
+ {A, (XtPointer) clientDataA},
+ {B, (XtPointer) clientDataB},
+ {(XtCallbackProc) NULL, (XtPointer) NULL}
+};
+</literallayout>
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Identifying_Callback_Lists">
+<title>Identifying Callback Lists</title>
+<para>
+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
+<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>
+check
+to see that the requested callback list is indeed implemented by the widget.
+</para>
+
+<para>
+For the Intrinsics to find and correctly handle callback lists,
+they must be declared with a resource type of
+<function>XtRCallback</function>.
+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
+<function>XtCallbackStatus</function>
+<function>XtCallbackHasNone ),</function>
+access to callback list resources must be made
+through other Intrinsics procedures.
+</para>
+</sect1>
+
+<sect1 id="Adding_Callback_Procedures">
+<title>Adding Callback Procedures</title>
+<para>
+To add a callback procedure to a widget's callback list, use
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddCallback'>
+<funcprototype>
+<funcdef>void <function>XtAddCallback</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+ <paramdef>XtCallbackProc <parameter>callback</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to which the procedure is to be appended.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the specified procedure
+when it is invoked,
+or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+A callback will be invoked as many times as it occurs in the callback list.
+</para>
+
+<para>
+To add a list of callback procedures to a given widget's callback list, use
+<xref linkend='XtAddCallbacks' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddCallbacks'>
+<funcprototype>
+<funcdef>void <function>XtAddCallbacks</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+ <paramdef>XtCallbackList <parameter>callbacks</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to which the procedures are to be appended.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callbacks</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the null-terminated list of callback procedures and corresponding
+client data.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+</sect1>
+
+<sect1 id="Removing_Callback_Procedures">
+<title>Removing Callback Procedures</title>
+<para>
+To delete a callback procedure from a widget's callback list, use
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveCallback'>
+<funcprototype>
+<funcdef>void <function>XtRemoveCallback</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+ <paramdef>XtCallbackProc <parameter>callback</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list from which the procedure is to be deleted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the client data to match with the registered callback entry.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>
+function removes a callback only if both the procedure and the client
+data match.
+</para>
+
+<para>
+To delete a list of callback procedures from a given widget's callback list, use
+<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveCallbacks'>
+<funcprototype>
+<funcdef>void <function>XtRemoveCallbacks</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+ <paramdef>XtCallbackList <parameter>callbacks</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list from which the procedures are to be deleted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callbacks</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the null-terminated list of callback procedures and corresponding
+client data.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To delete all callback procedures from a given widget's callback list
+and free all storage associated with the callback list, use
+<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveAllCallbacks'>
+<funcprototype>
+<funcdef>void <function>XtRemoveAllCallbacks</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to be cleared.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+</sect1>
+
+<sect1 id="Executing_Callback_Procedures">
+<title>Executing Callback Procedures</title>
+<para>
+To execute the procedures in a given widget's callback list,
+specifying the callback list by resource name, use
+<xref linkend='XtCallCallbacks' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallCallbacks'>
+<funcprototype>
+<funcdef>void <function>XtCallCallbacks</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to be executed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a callback-list-specific data value to pass to each of the callback
+procedure in the list, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+<xref linkend='XtCallCallbacks' xrefstyle='select: title'/>
+calls each of the callback procedures in the list
+named by <emphasis remap='I'>callback_name</emphasis> in the specified widget, passing the client
+data registered with the procedure and <emphasis remap='I'>call-data</emphasis>.
+</para>
+
+<para>
+To execute the procedures in a callback list, specifying the callback
+list by address, use
+<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallCallbackList'>
+<funcprototype>
+<funcdef>void <function>XtCallCallbackList</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>XtCallbackList <parameter>callbacks</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget instance that contains the callback list. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callbacks</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to be executed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a callback-list-specific data value to pass
+to each of the callback procedures in the list, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>callbacks</emphasis> parameter must specify the contents of a widget or
+object resource declared with representation type
+<function>XtRCallback</function>.
+If <emphasis remap='I'>callbacks</emphasis> is NULL,
+<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>
+returns immediately; otherwise it calls each of the callback
+procedures in the list, passing the client data and <emphasis remap='I'>call_data</emphasis>.
+</para>
+</sect1>
+
+<sect1 id="Checking_the_Status_of_a_Callback_List">
+<title>Checking the Status of a Callback List</title>
+<para>
+To find out the status of a given widget's callback list, use
+<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>.
+</para>
+
+<para>
+typedef enum {XtCallbackNoList, XtCallbackHasNone, XtCallbackHasSome} XtCallbackStatus;
+</para>
+
+<funcsynopsis id='XtHasCallbacks'>
+<funcprototype>
+<funcdef>XtCallbackStatus <function>XtHasCallbacks</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>callback_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback list to be checked.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>
+function first checks to see if the widget has a callback list identified
+by <emphasis remap='I'>callback_name</emphasis>.
+If the callback list does not exist,
+<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>
+returns
+<function>XtCallbackNoList</function>.
+If the callback list exists but is empty,
+it returns
+<function>XtCallbackHasNone</function>.
+If the callback list exists and has at least one callback registered,
+it returns
+<function>XtCallbackHasSome</function>.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH09 b/libXt/specs/CH09
deleted file mode 100644
index 9538651bc..000000000
--- a/libXt/specs/CH09
+++ /dev/null
@@ -1,3211 +0,0 @@
-.\" $Xorg: CH09,v 1.3 2000/08/17 19:42:46 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 9\fP\s-1
-
-\s+1\fBResource Management\fP\s-1
-.sp 2
-.nr H1 9
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 9 \(em Resource Management
-.XE
-A resource is a field in the widget record with a corresponding
-resource entry in the \fIresources\fP list of the widget or any of its
-superclasses.
-This means that the field is
-settable by
-.PN XtCreateWidget
-(by naming the field in the argument list), by an
-entry in a resource file (by using either the name or class), and by
-.PN XtSetValues .
-In addition, it is readable by
-.PN XtGetValues .
-Not all fields in a widget record are resources.
-Some are for bookkeeping use by the
-generic routines (like \fImanaged\fP and \fIbeing_destroyed\fP).
-Others can be for local bookkeeping,
-and still others are derived from resources
-(many graphics contexts and pixmaps).
-.LP
-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
-.PN XtCreateWidget ,
-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.
-
-.NH 2
-Resource Lists
-.XS
-\*(SN Resource Lists
-.XE
-.LP
-.IN "Resource Management"
-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
-.PN XtResource
-structure is
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.IN "XtResourceList"
-.eM
-
-.LP
-When the resource list is specified as the
-.PN CoreClassPart ,
-.PN ObjectClassPart ,
-.PN RectObjClassPart ,
-or
-.PN ConstraintClassPart
-\fIresources\fP field, the strings pointed to by \fIresource_name\fP,
-\fIresource_class\fP, \fIresource_type\fP, and \fIdefault_type\fP must
-be permanently allocated prior to or during the execution of the class
-initialization procedure and must not be subsequently deallocated.
-
-.LP
-The \fIresource_name\fP 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 \*(xI 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 \*(xI are named in
-.Pn < X11/StringDefs.h >.
-The \*(xI's symbolic resource names begin with
-``XtN''
-and are followed by the string name (for example, XtNbackgroundPixel
-for backgroundPixel).
-
-.LP
-The \fIresource_class\fP field contains the class string used in resource
-specification files to identify the field.
-A resource class provides two functions:
-.IP \(bu 5
-It isolates an application from different representations that widgets
-can use for a similar resource.
-.IP \(bu 5
-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.
-.LP
-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.
-.LP
-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:
-.LP
-.Ds 5
-.TA .5i 1.5i
-.ta .5i 1.5i
-*Background: ivory
-*Foreground: darkblue
-.De
-.LP
-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:
-.LP
-.Ds 5
-.TA .5i 3i
-.ta .5i 3i
-*Font: 6x13
-.De
-.LP
-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).
-.LP
-The \fIresource_type\fP 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
-.PN String )
-or the format of the resource default value
-(almost anything, but often
-.PN String )
-to the desired
-physical representation (see Section 9.6).
-The \*(xI define the following resource types:
-.TS H
-lw(2.5i) lw(2.5i).
-_
-.sp 6p
-Resource Type Structure or Field Type
-.sp 6p
-_
-.sp 6p
-.TH
-.R
-T{
-.PN XtRAcceleratorTable
-T} XtAccelerators
-T{
-.PN XtRAtom
-T} Atom
-T{
-.PN XtRBitmap
-T} Pixmap, depth=1
-T{
-.PN XtRBoolean
-T} Boolean
-T{
-.PN XtRBool
-T} Bool
-T{
-.PN XtRCallback
-T} XtCallbackList
-T{
-.PN XtRCardinal
-T} Cardinal
-T{
-.PN XtRColor
-T} XColor
-T{
-.PN XtRColormap
-T} Colormap
-T{
-.PN XtRCommandArgArray
-T} String*
-T{
-.PN XtRCursor
-T} Cursor
-T{
-.PN XtRDimension
-T} Dimension
-T{
-.PN XtRDirectoryString
-T} String
-T{
-.PN XtRDisplay
-T} Display*
-T{
-.PN XtREnum
-T} XtEnum
-T{
-.PN XtREnvironmentArray
-T} String*
-T{
-.PN XtRFile
-T} FILE*
-T{
-.PN XtRFloat
-T} float
-T{
-.PN XtRFont
-T} Font
-T{
-.PN XtRFontSet
-T} XFontSet
-T{
-.PN XtRFontStruct
-T} XFontStruct*
-T{
-.PN XtRFunction
-T} (*)()
-T{
-.PN XtRGeometry
-T} T{
-char*, format as defined by
-.PN XParseGeometry
-T}
-T{
-.PN XtRGravity
-T} int
-T{
-.PN XtRInitialState
-T} int
-T{
-.PN XtRInt
-T} int
-T{
-.PN XtRLongBoolean
-T} long
-T{
-.PN XtRObject
-T} Object
-T{
-.PN XtRPixel
-T} Pixel
-T{
-.PN XtRPixmap
-T} Pixmap
-T{
-.PN XtRPointer
-T} XtPointer
-T{
-.PN XtRPosition
-T} Position
-T{
-.PN XtRRestartStyle
-T} unsigned char
-T{
-.PN XtRScreen
-T} Screen*
-T{
-.PN XtRShort
-T} short
-T{
-.PN XtRSmcConn
-T} XtPointer
-T{
-.PN XtRString
-T} String
-T{
-.PN XtRStringArray
-T} String*
-T{
-.PN XtRStringTable
-T} String*
-T{
-.PN XtRTranslationTable
-T} XtTranslations
-T{
-.PN XtRUnsignedChar
-T} unsigned char
-T{
-.PN XtRVisual
-T} Visual*
-T{
-.PN XtRWidget
-T} Widget
-T{
-.PN XtRWidgetClass
-T} WidgetClass
-T{
-.PN XtRWidgetList
-T} WidgetList
-T{
-.PN XtRWindow
-T} Window
-.sp 6p
-_
-.TE
-.sp
-.LP
-.Pn < X11/StringDefs.h >
-also defines the following resource types as a
-convenience for widgets, although they do not have any corresponding
-data type assigned:
-.PN XtREditMode ,
-.PN XtRJustify ,
-and
-.PN XtROrientation .
-.LP
-The \fIresource_size\fP field is the size of the physical representation in bytes;
-you should specify it as
-.PN sizeof (\fItype\fP)
-so that the
-compiler fills in the value.
-The \fIresource_offset\fP field is the offset in bytes of the field
-within the widget.
-You should use the
-.PN XtOffsetOf
-macro to retrieve this value.
-The \fIdefault_type\fP field is the representation type of the default
-resource value.
-If \fIdefault_type\fP is different from \fIresource_type\fP and the default value
-is needed,
-the resource manager invokes a conversion procedure from \fIdefault_type\fP
-to \fIresource_type\fP.
-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,
-.PN XtDefaultForeground
-for a pixel resource).
-The \fIdefault_addr\fP field specifies the address of the default resource value.
-As a special case, if \fIdefault_type\fP is
-.PN XtRString ,
-then the value in the \fIdefault_addr\fP 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).
-.LP
-Two special representation types
-(XtRImmediate
-and
-XtRCallProc)
-are usable only as default resource types.
-XtRImmediate
-indicates that the value in the \fIdefault_addr\fP 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
-.PN XtPointer .
-No conversion is possible, since there is no source representation type.
-XtRCallProc
-indicates that the value in the \fIdefault_addr\fP field is a procedure
-pointer.
-This procedure is automatically invoked with the widget,
-\fIresource_offset\fP, and a pointer to an
-.PN XrmValue
-in which to store the result.
-XtRCallProc
-procedure pointers are of type
-.PN XtResourceDefaultProc .
-.LP
-.sM
-.FD 0
-typedef void (*XtResourceDefaultProc)(Widget, int, XrmValue*);
-.br
- Widget \fIw\fP;
-.br
- int \fIoffset\fP;
-.br
- XrmValue *\fIvalue\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget whose resource value is to be obtained.
-.IP \fIoffset\fP 1i
-Specifies the offset of the field in the widget record.
-.IP \fIvalue\fP 1i
-Specifies the resource value descriptor to return.
-.LP
-.eM
-The
-.PN XtResourceDefaultProc
-procedure should fill in the \fIvalue->addr\fP field with a pointer
-to the resource value in its correct representation type.
-.sp
-.LP
-To get the resource list structure for a particular class, use
-.PN XtGetResourceList .
-.LP
-.IN "XtGetResourceList" "" "@DEF@"
-.sM
-.FD 0
-void XtGetResourceList(\fIclass\fP, \fIresources_return\fP, \fInum_resources_return\fP);
-.br
- WidgetClass \fIclass\fP;
-.br
- XtResourceList *\fIresources_return\fP;
-.br
- Cardinal *\fInum_resources_return\fP;
-.FN
-.IP \fIclass\fP 1.5i
-Specifies the object class to be queried. It must be
-.PN objectClass
-or any subclass thereof.
-.IP \fIresources_return\fP 1.5i
-Returns the resource list.
-.IP \fInum_resources_return\fP 1.5i
-Returns the number of entries in the resource list.
-.LP
-.eM
-If
-.PN XtGetResourceList
-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,
-.PN XtGetResourceList
-returns a merged resource list that includes the resources
-for all superclasses.
-The list returned by
-.PN XtGetResourceList
-should be freed using
-.PN XtFree
-when it is no longer needed.
-.sp
-.LP
-To get the constraint resource list structure for a particular widget
-class, use
-.PN XtGetConstraintResourceList .
-.LP
-.IN "XtGetConstraintResourceList" "" "@DEF@"
-.sM
-.FD 0
-void XtGetConstraintResourceList(\fIclass\fP, \fIresources_return\fP, \
-\fInum_resources_return\fP)
-.br
- WidgetClass \fIclass\fP;
-.br
- XtResourceList *\fIresources_return\fP;
-.br
- Cardinal *\fInum_resources_return\fP;
-.FN
-.IP \fIclass\fP 1.5i
-Specifies the object class to be queried. It must be
-.PN objectClass
-or any subclass thereof.
-.IP \fIresources_return\fP 1.5i
-Returns the constraint resource list.
-.IP \fInum_resources_return\fP 1.5i
-Returns the number of entries in the constraint resource list.
-.LP
-.eM
-If
-.PN XtGetConstraintResourceList
-is called before the widget class is
-initialized, the resource list as specified in the widget
-class Constraint part is returned. If
-.PN XtGetConstraintResourceList
-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
-.PN constraintWidgetClass ,
-*\fIresources_return\fP is set to NULL
-and *\fInum_resources_return\fP is set to zero.
-The list returned by
-.PN XtGetConstraintResourceList
-should be freed using
-.PN XtFree
-when it is no longer needed.
-.sp
-.LP
-The routines
-.PN XtSetValues
-and
-.PN XtGetValues
-also use the resource list to set and get widget state;
-see Sections 9.7.1 and 9.7.2.
-.LP
-Here is an abbreviated version of a possible resource list for a Label widget:
-.LP
-.Ds
-.TA .5i 1.5i 3i
-.ta .5i 1.5i 3i
-/* 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},
- .
- .
- .
-}
-.De
-.LP
-The complete resource name for a field of a widget instance is the
-concatenation of the application shell name (from
-.PN 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
-.PN 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.
-
-.NH 2
-Byte Offset Calculations
-.XS
-\*(SN Byte Offset Calculations
-.XE
-.LP
-To determine the byte offset of a field within a structure type, use
-.PN XtOffsetOf .
-.LP
-.IN "XtOffsetOf" "" "@DEF@"
-.sM
-.FD 0
-Cardinal XtOffsetOf(\fIstructure_type\fP, \fIfield_name\fP)
-.br
- \fIType structure_type\fP;
-.br
- \fIField field_name\fP;
-.FN
-.IP \fIstructure_type\fP 1i
-Specifies a type that is declared as a structure.
-.IP \fIfield_name\fP 1i
-Specifies the name of a member within the structure.
-.LP
-.eM
-The
-.PN 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
-.PN XtOffset ,
-which serves the same function.
-
-.LP
-To determine the byte offset of a field within a structure pointer type, use
-.PN XtOffset .
-.LP
-.IN "XtOffset" "" "@DEF@"
-.sM
-.FD 0
-Cardinal XtOffset(\fIpointer_type\fP, \fIfield_name\fP)
-.br
- \fIType pointer_type\fP;
-.br
- \fIField field_name\fP;
-.FN
-.IP \fIpointer_type\fP 1i
-Specifies a type that is declared as a pointer to a structure.
-.IP \fIfield_name\fP 1i
-Specifies the name of a member within the structure.
-.LP
-.eM
-The
-.PN XtOffset
-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.
-.PN XtOffset
-is less portable than
-.PN XtOffsetOf .
-
-.NH 2
-Superclass-to-Subclass Chaining of Resource Lists
-.XS
-\*(SN Superclass-to-Subclass Chaining of Resource Lists
-.XE
-.LP
-.IN "Inheritance"
-.IN "Superclass Chaining"
-.IN "Chaining"
-The
-.PN XtCreateWidget
-function gets resources as a superclass-to-subclass chained operation.
-That is, the resources specified in the
-.PN objectClass
-resource list are fetched,
-then those in
-.PN 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.
-.LP
-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 \fIbackground_pixel\fP.
-Consequently,
-the implementation of Label need not also have a resource entry
-for \fIbackground_pixel\fP.
-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.
-.LP
-.IN "class_initialize procedure"
-.IN "Widget" "class initialization"
-Also at class initialization time, the \*(xI produce an
-internal representation of the resource list to optimize access time
-when creating widgets. In order to save memory, the \*(xI 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.
-
-.NH 2
-Subresources
-.XS
-\*(SN Subresources
-.XE
-.LP
-A widget does not do anything to retrieve its own resources;
-instead,
-.PN XtCreateWidget
-does this automatically before calling the class initialize procedure.
-.LP
-Some widgets have subparts that are not widgets but for which the widget
-would like to fetch resources.
-Such widgets call
-.PN XtGetSubresources
-to accomplish this.
-.LP
-.IN "XtGetSubresources" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSubresources(\fIw\fP, \fIbase\fP, \fIname\fP, \fIclass\fP, \
-\fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIbase\fP;
-.br
- String \fIname\fP;
-.br
- String \fIclass\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the object used to qualify the subpart resource name and
-class. \*(oI
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure into which the
-resources will be written.
-.IP \fIname\fP 1i
-Specifies the name of the subpart.
-.IP \fIclass\fP 1i
-Specifies the class of the subpart.
-.IP \fIresources\fP 1i
-Specifies the resource list for the subpart.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtGetSubresources
-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 \fIname\fP and \fIclass\fP 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 \fIargs\fP is NULL,
-\fInum_args\fP must be zero.
-However, if \fInum_args\fP is zero,
-the argument list is not referenced.
-.LP
-.PN XtGetSubresources
-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
-.PN XtGetSubresources
-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.
-.sp
-.LP
-To fetch resources for widget subparts using varargs lists, use
-.PN XtVaGetSubresources .
-.LP
-.IN "XtVaGetSubresources" "" "@DEF@"
-.sM
-.FD 0
-void XtVaGetSubresources(\fIw\fP, \fIbase\fP, \fIname\fP, \fIclass\fP, \
-\fIresources\fP, \fInum_resources\fP, ...)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIbase\fP;
-.br
- String \fIname\fP;
-.br
- String \fIclass\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the object used to qualify the subpart resource name and
-class. \*(oI
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure into which the
-resources will be written.
-.IP \fIname\fP 1i
-Specifies the name of the subpart.
-.IP \fIclass\fP 1i
-Specifies the class of the subpart.
-.IP \fIresources\fP 1i
-Specifies the resource list for the subpart.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP ... 1i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-.PN XtVaGetSubresources
-is identical in function to
-.PN XtGetSubresources
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as
-described in Section 2.5.1.
-
-.NH 2
-Obtaining Application Resources
-.XS
-\fB\*(SN Obtaining Application Resources\fP
-.XE
-.LP
-To retrieve resources that are not specific to a widget
-but apply to the overall application, use
-.PN XtGetApplicationResources .
-.LP
-.IN "XtGetApplicationResources" "" "@DEF@"
-.sM
-.FD 0
-void XtGetApplicationResources(\fIw\fP, \fIbase\fP, \fIresources\fP, \
-\fInum_resources\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the object that identifies the resource database to search
-(the database is that associated with the display for this object). \*(oI
-.IP \fIbase\fP 1i
-Specifies the base address into which
-the resource values will be written.
-.IP \fIresources\fP 1i
-Specifies the resource list.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtGetApplicationResources
-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,
-.PN XtGetApplicationResources
-copies the resources into the addresses
-obtained by adding \fIbase\fP to each \fIoffset\fP in the resource list.
-If \fIargs\fP is NULL,
-\fInum_args\fP must be zero.
-However, if \fInum_args\fP 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 \fIbase\fP argument.
-.LP
-.PN XtGetApplicationResources
-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
-.PN XtGetApplicationResources
-will not be freed from the resource cache until the display is closed.
-.sp
-.LP
-To retrieve resources for the overall application using varargs lists, use
-.PN XtVaGetApplicationResources .
-.LP
-.IN "XtVaGetApplicationResources" "" "@DEF@"
-.sM
-.FD 0
-void XtVaGetApplicationResources(\fIw\fP, \fIbase\fP, \fIresources\fP, \
-\fInum_resources\fP, ...)
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the object that identifies the resource database to search
-(the database is that associated with the display for this object). \*(oI
-.IP \fIbase\fP 1i
-Specifies the base address into which
-the resource values will be written.
-.IP \fIresources\fP 1i
-Specifies the resource list for the subpart.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP ... 1i
-Specifies the variable argument list to override any other
-resource specifications.
-.LP
-.eM
-.PN XtVaGetApplicationResources
-is identical in function to
-.PN XtGetApplicationResources
-with the \fIargs\fP and \fInum_args\fP parameters
-replaced by a varargs list, as described in Section 2.5.1.
-
-.NH 2
-Resource Conversions
-.XS
-\*(SN Resource Conversions
-.XE
-.LP
-The \*(xI provide a mechanism for registering representation converters that
-are automatically invoked by the resource-fetching routines.
-The \*(xI additionally provide and register several commonly used converters.
-This resource conversion mechanism serves several purposes:
-.IP \(bu 5
-It permits user and application resource files to contain textual
-representations of nontextual values.
-.IP \(bu 5
-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.
-.IP \(bu 5
-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.
-
-.NH 3
-Predefined Resource Converters
-.XS
-\*(SN Predefined Resource Converters
-.XE
-.LP
-The \*(xI define all the representations used in the
-Object,
-RectObj,
-Core,
-Composite,
-Constraint,
-and
-Shell
-widget classes.
-The \*(xI register the following resource converters that accept
-input values of representation type
-.PN XtRString .
-.LP
-.TS
-lw(1.7i) lw(2.4i) lw(1.5i) .
-_
-.sp 6p
-Target Representation Converter Name Additional Args
-.sp 6p
-_
-.sp 6p
-T{
-.PN XtRAcceleratorTable
-T} T{
-.PN XtCvtStringToAcceleratorTable
-T}
-T{
-.PN XtRAtom
-T} T{
-.PN XtCvtStringToAtom
-T} Display*
-T{
-.PN XtRBoolean
-T} T{
-.PN XtCvtStringToBoolean
-T}
-T{
-.PN XtRBool
-T} T{
-.PN XtCvtStringToBool
-T}
-T{
-.PN XtRCommandArgArray
-T} T{
-.PN XtCvtStringToCommandArgArray
-T}
-T{
-.PN XtRCursor
-T} T{
-.PN XtCvtStringToCursor
-T} Display*
-T{
-.PN XtRDimension
-T} T{
-.PN XtCvtStringToDimension
-T}
-T{
-.PN XtRDirectoryString
-T} T{
-.PN XtCvtStringToDirectoryString
-T}
-T{
-.PN XtRDisplay
-T} T{
-.PN XtCvtStringToDisplay
-T}
-T{
-.PN XtRFile
-T} T{
-.PN XtCvtStringToFile
-T}
-T{
-.PN XtRFloat
-T} T{
-.PN XtCvtStringToFloat
-T}
-T{
-.PN XtRFont
-T} T{
-.PN XtCvtStringToFont
-T} Display*
-T{
-.PN XtRFontSet
-T} T{
-.PN XtCvtStringToFontSet
-T} Display*, String \fIlocale\fP
-T{
-.PN XtRFontStruct
-T} T{
-.PN XtCvtStringToFontStruct
-T} Display*
-T{
-.PN XtRGravity
-T} T{
-.PN XtCvtStringToGravity
-T}
-T{
-.PN XtRInitialState
-T} T{
-.PN XtCvtStringToInitialState
-T}
-T{
-.PN XtRInt
-T} T{
-.PN XtCvtStringToInt
-T}
-T{
-.PN XtRPixel
-T} T{
-.PN XtCvtStringToPixel
-T} T{
-.PN colorConvertArgs
-T}
-T{
-.PN XtRPosition
-T} T{
-.PN XtCvtStringToPosition
-T}
-T{
-.PN XtRRestartStyle
-T} T{
-.PN XtCvtStringToRestartStyle
-T}
-T{
-.PN XtRShort
-T} T{
-.PN XtCvtStringToShort
-T}
-T{
-.PN XtRTranslationTable
-T} T{
-.PN XtCvtStringToTranslationTable
-T}
-T{
-.PN XtRUnsignedChar
-T} T{
-.PN XtCvtStringToUnsignedChar
-T}
-T{
-.PN XtRVisual
-T} T{
-.PN XtCvtStringToVisual
-T} Screen*, Cardinal \fIdepth\fP
-.sp 6p
-_
-.TE
-
-.LP
-The String-to-Pixel conversion has two predefined constants that are
-guaranteed to work and contrast with each other:
-.PN XtDefaultForeground
-and
-.PN XtDefaultBackground .
-.IN "XtDefaultBackground" "" "@DEF@"
-.IN "XtDefaultForeground" "" "@DEF@"
-They evaluate to the black and white pixel values of the widget's screen,
-respectively.
-.IN "Resources" "reverseVideo"
-If the application resource reverseVideo is
-.PN 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
-.PN XtDefaultFont
-.IN "XtDefaultFont" "" "@DEF@"
-.IN "Resources" "xtDefaultFont"
-and evaluate this in the following manner:
-.IP \(bu 5
-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
-.PN XtRString
-value returned as the font name or a type
-.PN XtRFont
-or
-.PN XtRFontStruct
-value directly as the resource value.
-.IP \(bu 5
-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
-.PN 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".)
-.IP \(bu 5
-If no suitable ISO8859-1 font can be found, issue a warning message
-and return
-.PN False .
-.LP
-The String-to-FontSet converter recognizes the constant
-.PN XtDefaultFontSet
-.IN "XtDefaultFontSet" "" "@DEF@"
-.IN "Resources" "xtDefaultFontSet"
-and evaluate this in the following manner:
-.IP \(bu 5
-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
-.PN XtRString
-value returned as the base font name list or a type
-.PN XtRFontSet
-value directly as the resource value.
-.IP \(bu 5
-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
-.PN 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-*-*-*-*".)
-.IP \(bu 5
-If no suitable font set can be created, issue a warning message
-and return
-.PN False .
-.LP
-If a font set is created but \fImissing_charset_list\fP is not
-empty, a warning is issued and the partial font set is returned.
-The \*(xI 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.
-.LP
-The String-to-Gravity conversion accepts string values that are the
-names of window and bit gravities and their numerical equivalents,
-as defined in \fI\*(xL\fP:
-.PN ForgetGravity ,
-.PN UnmapGravity ,
-.PN NorthWestGravity ,
-.PN NorthGravity ,
-.PN NorthEastGravity ,
-.PN WestGravity ,
-.PN CenterGravity ,
-.PN EastGravity ,
-.PN SouthWestGravity ,
-.PN SouthGravity ,
-.PN SouthEastGravity ,
-and
-.PN StaticGravity .
-Alphabetic case is not significant in the conversion.
-.LP
-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.
-.LP
-.IN "XtCurrentDirectory" "" "@DEF@"
-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.
-.LP
-The String-to-RestartStyle conversion accepts the values
-.PN RestartIfRunning ,
-.PN RestartAnyway ,
-.PN RestartImmediately ,
-and
-.PN RestartNever
-as defined by the \fIX Session Management Protocol\fP.
-.LP
-The String-to-InitialState conversion accepts the values
-.PN NormalState
-or
-.PN IconicState
-as defined by the \fI\*(xC\fP.
-.LP
-The String-to-Visual conversion calls
-.PN XMatchVisualInfo
-using the
-\fIscreen\fP and \fIdepth\fP 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
-.PN XtRVisual
-after the depth resource.
-The allowed string values are the visual class names defined in \fI\*(xP\fP,
-Section 8;
-.PN StaticGray ,
-.PN StaticColor ,
-.PN TrueColor ,
-.PN GrayScale ,
-.PN PseudoColor ,
-and
-.PN DirectColor .
-
-.LP
-The \*(xI register the following resource converter that accepts
-an input value of representation type
-.PN XtRColor .
-.LP
-.TS
-lw(1.5i) lw(2.25i) lw(1.5i) .
-_
-.sp 6p
-Target Representation Converter Name Additional Args
-.sp 6p
-_
-.sp 6p
-T{
-.PN XtRPixel
-T} T{
-.PN XtCvtColorToPixel
-T}
-.sp 6p
-_
-.TE
-
-.LP
-The \*(xI register the following resource converters that accept
-input values of representation type
-.PN XtRInt .
-.LP
-.TS
-lw(1.5i) lw(2.25i) lw(1.5i) .
-_
-.sp 6p
-Target Representation Converter Name Additional Args
-.sp 6p
-_
-.sp 6p
-T{
-.PN XtRBoolean
-T} T{
-.PN XtCvtIntToBoolean
-T}
-T{
-.PN XtRBool
-T} T{
-.PN XtCvtIntToBool
-T}
-T{
-.PN XtRColor
-T} T{
-.PN XtCvtIntToColor
-T} T{
-.PN colorConvertArgs
-T}
-T{
-.PN XtRDimension
-T} T{
-.PN XtCvtIntToDimension
-T}
-T{
-.PN XtRFloat
-T} T{
-.PN XtCvtIntToFloat
-T}
-T{
-.PN XtRFont
-T} T{
-.PN XtCvtIntToFont
-T}
-T{
-.PN XtRPixel
-T} T{
-.PN XtCvtIntToPixel
-T}
-T{
-.PN XtRPixmap
-T} T{
-.PN XtCvtIntToPixmap
-T}
-T{
-.PN XtRPosition
-T} T{
-.PN XtCvtIntToPosition
-T}
-T{
-.PN XtRShort
-T} T{
-.PN XtCvtIntToShort
-T}
-T{
-.PN XtRUnsignedChar
-T} T{
-.PN XtCvtIntToUnsignedChar
-T}
-.sp 6p
-_
-.TE
-
-.LP
-The \*(xI register the following resource converter that accepts
-an input value of representation type
-.PN XtRPixel .
-.LP
-.TS
-lw(1.5i) lw(2.25i) lw(1.5i) .
-_
-.sp 6p
-Target Representation Converter Name Additional Args
-.sp 6p
-_
-.sp 6p
-T{
-.PN XtRColor
-T} T{
-.PN XtCvtPixelToColor
-T}
-.sp 6p
-_
-.TE
-
-.NH 3
-New Resource Converters
-.XS
-\*(SN New Resource Converters
-.XE
-.LP
-Type converters use pointers to
-.PN XrmValue
-structures (defined in
-.Pn < X11/Xresource.h >;
-see Section 15.4 in \fI\*(xL\fP)
-for input and output values.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- unsigned int size;
- XPointer addr;
-} XrmValue, *XrmValuePtr;
-.De
-.LP
-.eM
-The \fIaddr\fP field specifies the address of the data, and the \fIsize\fP
-field gives the total number of significant bytes in the data.
-For values of type
-.PN String ,
-\fIaddr\fP is the address of the first character and \fIsize\fP
-includes the NULL-terminating byte.
-.LP
-A resource converter procedure pointer is of type
-.PN XtTypeConverter .
-.LP
-.IN "XtTypeConverter" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtTypeConverter)(Display*, XrmValue*, Cardinal*,
- XrmValue*, XrmValue*, XtPointer*);
-.br
- Display *\fIdisplay\fP;
-.br
- XrmValue *\fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.br
- XrmValue *\fIfrom\fP;
-.br
- XrmValue *\fIto\fP;
-.br
- XtPointer *\fIconverter_data\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display connection with which this conversion is associated.
-.IP \fIargs\fP 1i
-Specifies a list of additional
-.PN 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 \fIdisplay\fP,
-and the String-to-Pixel converter needs the widget's \fIscreen\fP and \fIcolormap\fP.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIargs\fP.
-.IP \fIfrom\fP 1i
-Specifies the value to convert.
-.IP \fIto\fP 1i
-Specifies a descriptor for a location into which to store the converted value.
-.IP \fIconverter_data\fP 1i
-Specifies a location into which the converter may
-store converter-specific data associated
-with this conversion.
-.LP
-.eM
-The \fIdisplay\fP argument is normally used only when generating error
-messages, to identify the application context (with the function
-.PN XtDisplayToApplicationContext ).
-.LP
-The \fIto\fP argument specifies the size and location into which the
-converter should store the converted value. If the \fIaddr\fP field is NULL,
-the converter should allocate appropriate storage and store the size
-and location into the \fIto\fP 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
-\fIaddr\fP field is not NULL, the converter must check the \fIsize\fP field to
-ensure that sufficient space has been allocated before storing the
-converted value. If insufficient space is specified, the converter
-should update the \fIsize\fP field with the number of bytes required and
-return
-.PN False
-without modifying the data at the specified location.
-If sufficient space was allocated by the caller, the converter should
-update the \fIsize\fP field with the number of bytes actually occupied by the
-converted value. For converted values of type
-.PN XtRString ,
-the size should
-include the NULL-terminating byte, if any.
-The converter may store any value in the location specified
-in \fIconverter_data\fP; this value will be passed to the destructor, if any,
-when the resource is freed by the \*(xI.
-.LP
-The converter must return
-.PN True
-if the conversion was successful and
-.PN False
-otherwise. If the conversion cannot be performed because of an
-improper source value, a warning message should also be issued with
-.PN XtAppWarningMsg .
-
-.LP
-Most type converters just take the data described by the specified \fIfrom\fP
-argument and return data by writing into the location specified in
-the \fIto\fP argument.
-A few need other information, which is available in \fIargs\fP.
-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.
-.LP
-Note that if an address is written into \fIto->addr\fP, 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,
-.PN XtGetApplicationResources ,
-or
-.PN XtGetSubresources
-in an implementation-defined manner; however, insertion of new entries
-or changes to existing entries is allowed and will not directly cause
-an error.
-
-.LP
-The following is an example of a converter that takes a
-.PN string
-and converts it to a
-.PN Pixel .
-Note that the \fIdisplay\fP parameter is
-used only to generate error messages; the
-.PN Screen
-conversion argument is
-still required to inform the \*(xI that the converted value is
-a function of the particular display (and colormap).
-.LP
-.Ds 0
-.TA .3i .7i 1i 1.3i 1.7i 2i 4i
-.ta .3i .7i 1i 1.3i 1.7i 2i 4i
-
-#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);
- }
-}
-.De
-.LP
-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
-.PN XtDefaultForeground ,
-.PN XtDefaultBackground ,
-and
-.PN XtDefaultFont .
-.sp
-.LP
-To allow the \*(xI to deallocate resources produced by type
-converters, a resource destructor procedure may also be provided.
-.LP
-A resource destructor procedure pointer is of type
-.PN XtDestructor .
-.LP
-.IN "XtDestructor" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtDestructor) (XtAppContext, XrmValue*, XtPointer, XrmValue*, \
-Cardinal*);
-.br
- XtAppContext \fIapp\fP;
-.br
- XrmValue *\fIto\fP;
-.br
- XtPointer \fIconverter_data\fP;
-.br
- XrmValue *\fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIapp\fP 1i
-Specifies an application context in which the resource is being freed.
-.IP \fIto\fP 1i
-Specifies a descriptor for the resource produced by the type converter.
-.IP \fIconverter_data\fP 1i
-Specifies the converter-specific data returned by the type converter.
-.IP \fIargs\fP 1i
-Specifies the additional converter arguments as passed
-to the type converter when the conversion was performed.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIargs\fP.
-.LP
-.eM
-The destructor procedure is responsible for freeing the resource
-specified by the \fIto\fP argument, including any auxiliary storage
-associated with that resource, but not the memory directly addressed
-by the size and location in the \fIto\fP argument or the memory specified
-by \fIargs\fP.
-
-.NH 3
-Issuing Conversion Warnings
-.XS
-\*(SN Issuing Conversion Warnings
-.XE
-.LP
-The
-.PN XtDisplayStringConversionWarning
-procedure is a convenience routine for resource type converters
-that convert from string values.
-.LP
-.IN "XtDisplayStringConversionWarning" "" "@DEF@"
-.sM
-.FD 0
-void XtDisplayStringConversionWarning(\fIdisplay\fP, \fIfrom_value\fP, \
-\fIto_type\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- String \fIfrom_value\fP, \fIto_type\fP;
-.FN
-.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.
-.LP
-.eM
-The
-.PN XtDisplayStringConversionWarning
-procedure issues a warning message using
-.PN XtAppWarningMsg
-with \fIname\fP ``conversionError'',
-\fItype\fP ``string'', \fIclass\fP ``XtToolkitError'', and the default message
-``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
-.PN XtAppWarningMsg
-or
-.PN XtAppErrorMsg .
-.sp
-.LP
-To retrieve the application context associated with a given
-display connection, use
-.PN XtDisplayToApplicationContext .
-.LP
-.IN "XtDisplayToApplicationContext" "" "@DEF@"
-.sM
-.FD 0
-XtAppContext XtDisplayToApplicationContext( \fIdisplay\fP )
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies an open and initialized display connection.
-.LP
-.eM
-The
-.PN XtDisplayToApplicationContext
-function returns the application
-context in which the specified \fIdisplay\fP was initialized. If the
-display is not known to the \*(xI, an error message is issued.
-
-.NH 3
-Registering a New Resource Converter
-.XS
-\fB\*(SN Registering a New Resource Converter\fP
-.XE
-.LP
-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
-.PN XtCacheType
-.LP
-.IN "XtCacheType" "" "@DEF@"
-argument.
-.sM
-.Ds 0
-typedef int XtCacheType;
-.De
-.LP
-.eM
-An
-.PN XtCacheType
-field may contain one of the following values:
-.br
-.sp
-.LP
-.PN XtCacheNone
-.IN "XtCacheNone" "" "@DEF@"
-.IP
-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.
-.br
-.sp
-.LP
-.PN XtCacheAll
-.IN "XtCacheAll" "" "@DEF@"
-.IP
-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.
-.br
-.sp
-.LP
-.PN XtCacheByDisplay
-.IN "XtCacheByDisplay" "" "@DEF@"
-.IP
-Specifies that the results of a previous conversion
-should be used as for
-.PN XtCacheAll
-but the destructor will be called, if specified, if
-.PN XtCloseDisplay
-is called
-for the display connection associated with the converted value, and
-the value will be removed from the conversion cache.
-.LP
-The qualifier
-.PN XtCacheRefCount
-.IN "XtCacheRefCount" "" "@DEF@"
-may be ORed with any of the above values. If
-.PN XtCacheRefCount
-is specified, calls to
-.PN XtCreateWidget ,
-.PN XtCreateManagedWidget ,
-.PN XtGetApplicationResources ,
-and
-.PN XtGetSubresources
-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.
-
-.LP
-To register a type converter for all application contexts in a
-process, use
-.PN XtSetTypeConverter ,
-and to register a type converter in a single application context, use
-.PN XtAppSetTypeConverter .
-.LP
-.IN "XtSetTypeConverter" "" "@DEF@"
-.sM
-.FD 0
-void XtSetTypeConverter(\fIfrom_type\fP, \fIto_type\fP, \fIconverter\fP, \
-\fIconvert_args\fP, \fInum_args\fP,
- \fIcache_type\fP, \fIdestructor\fP)
-.br
- String \fIfrom_type\fP;
-.br
- String \fIto_type\fP;
-.br
- XtTypeConverter \fIconverter\fP;
-.br
- XtConvertArgList \fIconvert_args\fP;
-.br
- Cardinal \fInum_args\fP;
-.br
- XtCacheType \fIcache_type\fP;
-.br
- XtDestructor \fIdestructor\fP;
-.FN
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.IP \fIconverter\fP 1i
-Specifies the resource type converter procedure.
-.IP \fIconvert_args\fP 1i
-Specifies additional conversion arguments, or NULL.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIconvert_args\fP.
-.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.
-.LP
-.IN "XtAppSetTypeConverter" "" "@DEF@"
-.FD 0
-void XtAppSetTypeConverter(\fIapp_context\fP, \fIfrom_type\fP, \fIto_type\fP, \
-\fIconverter\fP, \fIconvert_args\fP,
- \fInum_args\fP, \fIcache_type\fP, \fIdestructor\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIfrom_type\fP;
-.br
- String \fIto_type\fP;
-.br
- XtTypeConverter \fIconverter\fP;
-.br
- XtConvertArgList \fIconvert_args\fP;
-.br
- Cardinal \fInum_args\fP;
-.br
- XtCacheType \fIcache_type\fP;
-.br
- XtDestructor \fIdestructor\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.IP \fIconverter\fP 1i
-Specifies the resource type converter procedure.
-.IP \fIconvert_args\fP 1i
-Specifies additional conversion arguments, or NULL.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIconvert_args\fP.
-.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.
-.LP
-.eM
-.PN 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.
-.PN 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.
-.sp
-.LP
-For the few type converters that need additional arguments,
-the \*(xI conversion mechanism provides a method of specifying
-how these arguments should be computed.
-The enumerated type
-.PN XtAddressMode
-and the structure
-.PN XtConvertArgRec
-specify how each argument is derived.
-These are defined in
-.Pn < X11/Intrinsic.h >.
-.LP
-.sM
-.Ds 0
-.TA .5i 2.5i
-.ta .5i 2.5i
-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;
-.sp
-typedef struct {
- XtAddressMode address_mode;
- XtPointer address_id;
- Cardinal size;
-} XtConvertArgRec, *XtConvertArgList;
-.De
-.eM
-.LP
-The \fIsize\fP field specifies the length of the data in bytes.
-The \fIaddress_mode\fP field specifies how the \fIaddress_id\fP field should be
-interpreted.
-.PN XtAddress
-.IN "XtAddress" "" "@DEF@"
-causes \fIaddress_id\fP to be interpreted as the address of the data.
-.PN XtBaseOffset
-.IN "XtBaseOffset" "" "@DEF@"
-causes \fIaddress_id\fP to be interpreted as the offset from the widget base.
-.PN XtImmediate
-.IN "XtImmediate" "" "@DEF@"
-causes \fIaddress_id\fP to be interpreted as a constant.
-.PN XtResourceString
-.IN "XtResourceString" "" "@DEF@"
-causes \fIaddress_id\fP to be interpreted as the name of a resource
-that is to be converted into an offset from the widget base.
-.PN XtResourceQuark
-.IN "XtResourceQuark" "" "@DEF@"
-causes \fIaddress_id\fP to be interpreted as the result of an
-.PN XrmStringToQuark
-conversion on the name of a resource,
-which is to be converted into an offset from the widget base.
-.PN XtWidgetBaseOffset
-.IN "XtWidgetBaseOffset" "" "@DEF@"
-is similar to
-.PN XtBaseOffset
-except that it
-searches for the closest windowed ancestor if the object is not
-of a subclass of
-Core
-(see Chapter 12).
-.PN XtProcedureArg
-.IN "XtProcedureArg" "" "@DEF@"
-specifies that \fIaddress_id\fP is a pointer to a procedure to
-be invoked to return the conversion argument. If
-.PN XtProcedureArg
-is specified, \fIaddress_id\fP must contain
-the address of a function of type
-.PN XtConvertArgProc .
-.LP
-.IN "XtConvertArgProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtConvertArgProc)(Widget, Cardinal*, XrmValue*);
-.br
- Widget \fIobject\fP;
-.br
- Cardinal *\fIsize\fP;
-.br
- XrmValue *\fIvalue\fP;
-.FN
-.IP \fIobject\fP 1i
-Passes the object for which the resource is being
-converted, or NULL if the converter was invoked by
-.PN XtCallConverter
-or
-.PN XtDirectConvert .
-.IP \fIsize\fP 1i
-Passes a pointer to the \fIsize\fP field from the
-.PN XtConvertArgRec .
-.IP \fIvalue\fP 1i
-Passes a pointer to a descriptor into which the procedure
-must store the conversion argument.
-.LP
-.eM
-When invoked, the
-.PN XtConvertArgProc
-procedure must derive a conversion
-argument and store the address and size of the argument in the location
-pointed to by \fIvalue\fP.
-.LP
-In order to permit reentrancy, the
-.PN XtConvertArgProc
-should return the address of storage whose lifetime is no shorter than the
-lifetime of \fIobject\fP. If \fIobject\fP is NULL, the lifetime of the conversion
-argument must be no shorter than the lifetime of the resource with
-which the conversion argument is associated. The \*(xI do not
-guarantee to copy this storage but do guarantee not to reference it if
-the resource is removed from the conversion cache.
-.LP
-The following example illustrates how to register the CvtStringToPixel
-routine given earlier:
-.LP
-.Ds
-.TA .2i 3i
-.ta .2i 3i
-static XtConvertArgRec colorConvertArgs[] = {
- {XtWidgetBaseOffset, (XtPointer)XtOffset(Widget, core.screen), sizeof(Screen*)},
- {XtWidgetBaseOffset, (XtPointer)XtOffset(Widget, core.colormap),sizeof(Colormap)}
-};
-
-XtSetTypeConverter(XtRString, XtRPixel, CvtStringToPixel,
- colorConvertArgs, XtNumber(colorConvertArgs), XtCacheByDisplay, NULL);
-.De
-.LP
-The conversion argument descriptors
-.PN colorConvertArgs
-and
-.PN screenConvertArg
-are predefined by the \*(xI. Both take the
-values from the closest windowed ancestor if the object is not of a
-subclass of
-Core.
-The
-.PN screenConvertArg
-descriptor puts the widget's \fIscreen\fP field into \fIargs\fP[0]. The
-.PN colorConvertArgs
-descriptor puts the widget's \fIscreen\fP field into \fIargs\fP[0],
-and the widget's \fIcolormap\fP field into \fIargs\fP[1].
-.LP
-Conversion routines should not just put a descriptor for the address of the
-base of the widget into \fIargs\fP[0], and use that in the routine.
-They should pass in the actual values on which the conversion depends.
-By keeping the dependencies of the conversion procedure specific,
-it is more likely that subsequent conversions will find what they need
-in the conversion cache.
-This way the cache is smaller and has fewer and more widely applicable entries.
-.LP
-If any conversion arguments of type
-.PN XtBaseOffset ,
-.PN XtResourceString ,
-.PN XtResourceQuark ,
-and
-.PN XtWidgetBaseOffset
-are specified for conversions performed by
-.PN XtGetApplicationResources ,
-.PN XtGetSubresources ,
-.PN XtVaGetApplicationResources ,
-or
-.PN XtVaGetSubresources ,
-the arguments are
-computed with respect to the specified widget, not the base address or
-resource list specified in the call.
-.LP
-If the
-.PN XtConvertArgProc
-modifies the resource database,
-the changes affect any in-progress widget creation,
-.PN XtGetApplicationResources ,
-or
-.PN XtGetSubresources
-in an implementation-defined manner; however, insertion of new entries
-or changes to existing entries are allowed and will not directly cause
-an error.
-
-.NH 3
-Resource Converter Invocation
-.XS
-\fB\*(SN Resource Converter Invocation\fP
-.XE
-.LP
-All resource-fetching routines (for example,
-.PN XtGetSubresources ,
-.PN XtGetApplicationResources ,
-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.
-.sp
-.LP
-To invoke explicit resource conversions, use
-.PN XtConvertAndStore
-or
-.PN XtCallConverter .
-.LP
-.sM
-.Ds 0
-typedef XtPointer XtCacheRef;
-.De
-.IN "XtCallConverter" "" "@DEF@"
-.FD 0
-Boolean XtCallConverter(\fIdisplay\fP, \fIconverter\fP, \
-\fIconversion_args\fP, \fInum_args\fP, \fIfrom\fP, \fIto_in_out\fP,
- \fIcache_ref_return\fP)
-.br
- Display* \fIdisplay\fP;
-.br
- XtTypeConverter \fIconverter\fP;
-.br
- XrmValuePtr \fIconversion_args\fP;
-.br
- Cardinal \fInum_args\fP;
-.br
- XrmValuePtr \fIfrom\fP;
-.br
- XrmValuePtr \fIto_in_out\fP;
-.br
- XtCacheRef *\fIcache_ref_return\fP;
-.FN
-.IP \fIdisplay\fP 1.5i
-Specifies the display with which the conversion is to be associated.
-.IP \fIconverter\fP 1.5i
-Specifies the conversion procedure to be called.
-.IP \fIconversion_args\fP 1.5i
-Specifies the additional conversion arguments needed
-to perform the conversion, or NULL.
-.IP \fInum_args\fP 1.5i
-Specifies the number of entries in \fIconversion_args\fP.
-.IP \fIfrom\fP 1.5i
-Specifies a descriptor for the source value.
-.IP \fIto_in_out\fP 1.5i
-Returns the converted value.
-.IP \fIcache_ref_return\fP 1.5i
-Returns a conversion cache id.
-.LP
-.eM
-The
-.PN 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
-.PN XtCacheAll
-or
-.PN 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,
-.PN XtCallConverter
-returns
-.PN 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
-.PN True .
-If the size specified in the \fIto\fP argument is smaller than the size stored
-in the cache,
-.PN XtCallConverter
-copies the cache size into \fIto->size\fP and returns
-.PN False .
-If the converter was registered with cache type
-.PN XtCacheNone
-or no value was found in the conversion cache,
-.PN XtCallConverter
-calls the converter, and if it was not registered with cache type
-.PN XtCacheNone ,
-enters the result in the cache.
-.PN 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
-.PN XtCacheRefCount
-modifier and if the value returned
-in \fIcache_ref_return\fP is non-NULL, then the caller 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.
-.sp
-.LP
-To explicitly decrement the reference counts for resources obtained
-from
-.PN XtCallConverter ,
-use
-.PN XtAppReleaseCacheRefs .
-.LP
-.IN "XtAppReleaseCacheRefs" "" "@DEF@"
-.sM
-.FD 0
-void XtAppReleaseCacheRefs(\fIapp_context\fP, \fIrefs\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtCacheRef *\fIrefs\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIrefs\fP 1i
-Specifies the list of cache references to be released.
-.LP
-.eM
-.PN 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
-.PN XtCacheRef
-values. If any reference
-count reaches zero, the destructor, if any, will be called and
-the resource removed from the conversion cache.
-.sp
-.LP
-As a convenience to clients needing to explicitly decrement reference
-counts via a callback function, the \*(xI define two callback
-procedures,
-.PN XtCallbackReleaseCacheRef
-and
-.PN XtCallbackReleaseCacheRefList .
-.LP
-.IN "XtCallbackReleaseCacheRef" "" "@DEF@"
-.sM
-.FD 0
-void XtCallbackReleaseCacheRef(\fIobject\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIobject\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object with which the resource is associated.
-.IP \fIclient_data\fP 1i
-Specifies the conversion cache entry to be released.
-.IP \fIcall_data\fP 1i
-Is ignored.
-.LP
-.eM
-This callback procedure may be added to a callback list to release a
-previously returned
-.PN XtCacheRef
-value. When adding the callback, the
-callback \fIclient_data\fP argument must be specified as the value of the
-.PN XtCacheRef
-data cast to type
-.PN XtPointer .
-.LP
-.IN "XtCallbackReleaseCacheRefList" "" "@DEF@"
-.sM
-.FD 0
-void XtCallbackReleaseCacheRefList(\fIobject\fP, \fIclient_data\fP, \fIcall_data\fP)
-.br
- Widget \fIobject\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtPointer \fIcall_data\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object with which the resources are associated.
-.IP \fIclient_data\fP 1i
-Specifies the conversion cache entries to be released.
-.IP \fIcall_data\fP 1i
-Is ignored.
-.LP
-.eM
-This callback procedure may be added to a callback list to release a
-list of previously returned
-.PN XtCacheRef
-values. When adding the
-callback, the callback \fIclient_data\fP argument must be specified as a
-pointer to a NULL-terminated list of
-.PN XtCacheRef
-values.
-.sp
-.LP
-To lookup and call a resource converter, copy the resulting value,
-and free a cached resource when a widget is destroyed, use
-.PN XtConvertAndStore .
-.LP
-.IN "XtConvertAndStore" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtConvertAndStore(\fIobject\fP, \fIfrom_type\fP, \fIfrom\fP, \
-\fIto_type\fP, \fIto_in_out\fP)
-.br
- Widget \fIobject\fP;
-.br
- String \fIfrom_type\fP;
-.br
- XrmValuePtr \fIfrom\fP;
-.br
- String \fIto_type\fP;
-.br
- XrmValuePtr \fIto_in_out\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object to use for additional arguments, if any are needed,
-and the destroy callback list. \*(oI
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIfrom\fP 1i
-Specifies the value to be converted.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.IP \fIto_in_out\fP 1i
-Specifies a descriptor for storage into which the converted value
-will be returned.
-.LP
-.eM
-The
-.PN XtConvertAndStore
-function looks up the type converter registered
-to convert \fIfrom_type\fP to \fIto_type\fP, computes any additional arguments
-needed, and then calls
-.PN XtCallConverter
-(or
-.PN XtDirectConvert
-if an old-style converter was registered with
-.PN XtAddConverter
-or
-.PN XtAppAddConverter ;
-see Appendix C) with the \fIfrom\fP and \fIto_in_out\fP arguments. The
-\fIto_in_out\fP 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 \fIsize\fP field will be modified on return to indicate the actual
-size of the converted data.
-If the conversion succeeds,
-.PN XtConvertAndStore
-returns
-.PN True ;
-otherwise, it returns
-.PN False .
-.LP
-.PN XtConvertAndStore
-adds
-.PN XtCallbackReleaseCacheRef
-.IN "destroyCallback"
-to the destroyCallback list of the specified object if the conversion
-returns an
-.PN XtCacheRef
-value. The resulting resource should not be referenced
-after the object has been destroyed.
-.LP
-.PN XtCreateWidget
-performs processing equivalent to
-.PN XtConvertAndStore
-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.
-.LP
-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
-.PN Boolean
-resource
-XtNinitialResourcesPersistent,
-.IN "XtNinitialResourcesPersistent" "" "@DEF@"
-class
-XtCInitialResourcesPersistent.
-.LP
-When
-.PN XtCreateWidget
-is called, if this resource is not specified as
-.PN 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
-.PN True ;
-thus clients that expect to destroy one or
-more objects and want resources deallocated must explicitly specify
-.PN False
-for
-.IN XtNinitialResourcesPersistent
-XtNinitialResourcesPersistent.
-.LP
-The resources are still freed and destructors called when
-.PN XtCloseDisplay
-is called if the conversion was registered as
-.PN XtCacheByDisplay .
-
-.NH 2
-Reading and Writing Widget State
-.XS
-\fB\*(SN Reading and Writing Widget State\fP
-.XE
-.LP
-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.
-
-.NH 3
-Obtaining Widget State
-.XS
-\fB\*(SN Obtaining Widget State\fP
-.XE
-.LP
-To retrieve the current values of resources associated with a
-widget instance, use
-.PN XtGetValues .
-.LP
-.IN "XtGetValues" "" "@DEF@"
-.sM
-.FD 0
-void XtGetValues(\fIobject\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIobject\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object whose resource values are to be returned. \*(oI
-.IP \fIargs\fP 1i
-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.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtGetValues
-function starts with the resources specified for the Object class
-and proceeds down the subclass chain to the class of the object.
-The \fIvalue\fP 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
-\*(xI-defined resources, the following lifetimes apply:
-.IP \(bu 3
-Not valid following any operation that modifies the resource:
-.RS
-.IP \- 3
-XtNchildren resource of composite widgets.
-.IP \- 3
-All resources of representation type XtRCallback.
-.RE
-.IP \(bu 3
-Remain valid at least until the widget is destroyed:
-.RS
-.IP \- 3
-XtNaccelerators, XtNtranslations.
-.RE
-.IP \(bu 3
-Remain valid until the Display is closed:
-.RS
-.IP \- 3
-XtNscreen.
-.RE
-.LP
-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.
-.LP
-If the class of the object's parent is a subclass of
-.PN constraintWidgetClass ,
-.PN XtGetValues
-then fetches the values for any constraint resources requested.
-It starts with the constraint resources specified for
-.PN 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.
-.IN "get_values_hook procedure"
-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
-.PN XtGetValues .
-Finally, if the object's parent is a
-subclass of
-.PN constraintWidgetClass ,
-and if any of the parent's class or
-superclass records have declared
-.PN ConstraintClassExtension
-records in
-the Constraint class part \fIextension\fP field with a record type of
-.PN \s-1NULLQUARK\s+1 ,
-and if the \fIget_values_hook\fP field in the extension record is non-NULL,
-.PN XtGetValues
-calls the get_values_hook procedures in superclass-to-subclass order.
-This permits a Constraint parent to provide
-nonresource data via
-.PN XtGetValues .
-.LP
-Get_values_hook procedures may modify the data stored at the
-location addressed by the \fIvalue\fP field, including (but not
-limited to) making a copy of data whose resource representation is a
-pointer. None of the \*(xI-defined object classes copy
-data in this manner. Any operation that modifies the queried
-object resource may invalidate the pointed-to data.
-
-.sp
-.LP
-To retrieve the current values of resources associated with a widget
-instance using varargs lists, use
-.PN XtVaGetValues .
-.LP
-.IN "XtVaGetValues" "" "@DEF@"
-.sM
-.FD 0
-void XtVaGetValues(\fIobject\fP, ...)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object whose resource values are to be returned. \*(oI
-.IP ... 1i
-Specifies the variable argument list for the resources to
-be returned.
-.LP
-.eM
-.PN XtVaGetValues
-is identical in function to
-.PN XtGetValues
-with the \fIargs\fP
-and \fInum_args\fP 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
-.PN XtVaTypedArg
-is specified, the \fItype\fP argument
-specifies the representation desired by the caller and \fIthe\fP 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.
-
-.NH 4
-Widget Subpart Resource Data: The get_values_hook Procedure
-.XS
-\*(SN Widget Subpart Resource Data: The get_values_hook Procedure
-.XE
-.LP
-Widgets that have subparts can return resource values from them through
-.PN XtGetValues
-by supplying a get_values_hook procedure.
-The get_values_hook procedure pointer is of type
-.PN XtArgsProc .
-.LP
-.IN "get_values_hook procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtArgsProc)(Widget, ArgList, Cardinal*);
-.br
- Widget \fIw\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget whose subpart resource values are to be retrieved.
-.IP \fIargs\fP 1i
-Specifies the argument list that was passed to
-.PN XtGetValues
-or the transformed varargs list passed to
-.PN XtVaGetValues .
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The widget with subpart resources should call
-.PN XtGetSubvalues
-in the get_values_hook procedure
-and pass in its subresource list and the \fIargs\fP and \fInum_args\fP parameters.
-
-.NH 4
-Widget Subpart State
-.XS
-\*(SN Widget Subpart State
-.XE
-.LP
-To retrieve the current values of subpart resource data associated with a
-widget instance, use
-.PN XtGetSubvalues .
-For a discussion of subpart resources,
-see Section 9.4.
-.LP
-.IN "XtGetSubvalues" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure for which the
-resources should be retrieved.
-.IP \fIresources\fP 1i
-Specifies the subpart resource list.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP \fIargs\fP 1i
-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.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtGetSubvalues
-function obtains resource values from the structure identified by \fIbase\fP.
-The \fIvalue\fP 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.
-
-.sp
-.LP
-To retrieve the current values of subpart resources associated with
-a widget instance using varargs lists, use
-.PN XtVaGetSubvalues .
-.LP
-.IN "XtVaGetSubvalues" "" "@DEF@"
-.sM
-.FD 0
-void XtVaGetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, ...)
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.FN
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure for which the
-resources should be retrieved.
-.IP \fIresources\fP 1i
-Specifies the subpart resource list.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP ... 1i
-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.
-.LP
-.eM
-.PN XtVaGetSubvalues
-is identical in function to
-.PN XtGetSubvalues
-with the
-\fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as described
-in Section 2.5.1.
-.PN XtVaTypedArg
-is not supported for
-.PN XtVaGetSubvalues .
-If
-.PN XtVaTypedArg
-is specified in the list, a warning message is issued
-and the entry is then ignored.
-
-.NH 3
-Setting Widget State
-.XS
-\fB\*(SN Setting Widget State\fP
-.XE
-.LP
-To modify the current values of resources associated with a widget
-instance, use
-.PN XtSetValues .
-.LP
-.IN "XtSetValues" "" "@DEF@"
-.sM
-.FD 0
-void XtSetValues(\fIobject\fP, \fIargs\fP, \fInum_args\fP)
-.br
- Widget \fIobject\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object whose resources are to be modified. \*(oI
-.IP \fIargs\fP 1i
-Specifies the argument list of name/value pairs that contain the
-resources to be modified and their new values.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtSetValues
-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 \fIobject\fP resource fields with any values
-specified in the argument list.
-.PN XtSetValues
-then calls the set_values procedures for the object in superclass-to-subclass
-order.
-.IN "set_values_hook procedure"
-If the object has any non-NULL \fIset_values_hook\fP fields,
-these are called immediately after the
-corresponding set_values procedure.
-This procedure permits subclasses to set subpart data via
-.PN XtSetValues .
-.LP
-If the class of the object's parent is a subclass of
-.PN constraintWidgetClass ,
-.PN XtSetValues
-also updates the object's constraints.
-It starts with the constraint resources specified for
-.PN 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
-.PN 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.
-.LP
-If the object is of a subclass of
-RectObj,
-.PN XtSetValues
-determines if a geometry request is needed by comparing the old object to
-the new object.
-If any geometry changes are required,
-.PN XtSetValues
-restores the original geometry and makes the request on behalf of the widget.
-If the geometry manager returns
-.PN XtGeometryYes ,
-.PN XtSetValues
-calls the object's resize procedure.
-If the geometry manager returns
-.PN XtGeometryDone ,
-.PN XtSetValues
-continues, as the object's resize procedure should have been called
-by the geometry manager.
-If the geometry manager returns
-.PN XtGeometryNo ,
-.PN XtSetValues
-ignores the geometry request and continues.
-If the geometry manager returns
-.PN XtGeometryAlmost ,
-.PN XtSetValues
-calls the set_values_almost procedure,
-which determines what should be done.
-.PN 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
-.PN True ,
-and the widget is realized,
-.PN XtSetValues
-causes the widget's expose procedure to be invoked by calling
-.PN XClearArea
-on the widget's window.
-.sp
-.LP
-To modify the current values of resources associated with a widget
-instance using varargs lists, use
-.PN XtVaSetValues .
-.LP
-.IN "XtVaSetValues" "" "@DEF@"
-.sM
-.FD 0
-void XtVaSetValues(\fIobject\fP, ...)
-.br
- Widget \fIobject\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies the object whose resources are to be modified. \*(oI
-.IP ... 1i
-Specifies the variable argument list of name/value pairs that
-contain the resources to be modified and their new values.
-.LP
-.eM
-.PN XtVaSetValues
-is identical in function to
-.PN XtSetValues
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as
-described in Section 2.5.1.
-
-.NH 4
-Widget State: The set_values Procedure
-.XS
-\*(SN Widget State: The set_values Procedure
-.XE
-.LP
-The set_values procedure pointer in a widget class is of type
-.PN XtSetValuesFunc .
-.LP
-.IN "XtSetValuesFunc" "" "@DEF@"
-.IN "set_values procedure" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtSetValuesFunc)(Widget, Widget, Widget, ArgList, Cardinal*);
-.br
- Widget \fIcurrent\fP;
-.br
- Widget \fIrequest\fP;
-.br
- Widget \fInew\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIcurrent\fP 1i
-Specifies a copy of the widget as it was before the
-.PN XtSetValues
-call.
-.IP \fIrequest\fP 1i
-Specifies a copy of the widget with all values changed as asked for by the
-.PN XtSetValues
-call before any class set_values procedures have been called.
-.IP \fInew\fP 1i
-Specifies the widget with the new values that are actually allowed.
-.IP \fIargs\fP 1i
-Specifies the argument list passed to
-.PN XtSetValues
-or the transformed argument list passed to
-.PN XtVaSetValues .
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-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 \fIset_values\fP field in the class record.
-.LP
-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.
-.LP
-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.
-.LP
-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?
-.LP
-The \fIrequest\fP and \fInew\fP parameters provide the necessary information.
-The \fIrequest\fP widget is a copy of the widget, updated as originally requested.
-The \fInew\fP 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 \fIrequest\fP widget
-unless it must resolve conflicts between the \fIcurrent\fP and \fInew\fP widgets.
-Any changes the widget needs to make, including geometry changes,
-should be made in the \fInew\fP widget.
-.LP
-In the above example,
-the subclass with the visual surround can see
-if the \fIwidth\fP and \fIheight\fP in the \fIrequest\fP widget are zero.
-If so,
-it adds its surround size to the \fIwidth\fP and
-\fIheight\fP fields in the \fInew\fP 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.
-.LP
-The \fInew\fP widget is the actual widget instance record.
-Therefore,
-the set_values procedure should do all its work on the \fInew\fP widget;
-the \fIrequest\fP widget should never be modified.
-If the set_values procedure needs to call any routines that operate on
-a widget, it should specify \fInew\fP as the widget instance.
-.LP
-Before calling the set_values procedures, the \*(xI modify the
-resources of the \fIrequest\fP 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 \fIargs\fP.
-.LP
-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
-.PN True ;
-the X server will eventually generate an
-.PN Expose
-event, if necessary.
-After calling all the set_values procedures,
-.PN XtSetValues
-forces a redisplay by calling
-.PN XClearArea
-if any of the set_values procedures returned
-.PN True .
-Therefore, a set_values procedure should not try to do its own redisplaying.
-.LP
-Set_values procedures should not do any work in response to changes in
-geometry because
-.PN XtSetValues
-eventually will perform a geometry request, and that request might be denied.
-If the widget actually changes size in response to a
-call to
-.PN XtSetValues ,
-its resize procedure is called.
-Widgets should do any geometry-related work in their resize procedure.
-.LP
-Note that it is permissible to call
-.PN XtSetValues
-before a widget is realized.
-Therefore, the set_values procedure must not assume that the widget is realized.
-
-.NH 4
-Widget State: The set_values_almost Procedure
-.XS
-\*(SN Widget State: The set_values_almost Procedure
-.XE
-.LP
-The set_values_almost procedure pointer in the widget class record is of type
-.PN XtAlmostProc .
-.LP
-.IN "set_values_almost procedure" "" "@DEF@"
-.IN "XtAlmostProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtAlmostProc)(Widget, Widget, XtWidgetGeometry*, \
-XtWidgetGeometry*);
-.br
- Widget \fIold\fP;
-.br
- Widget \fInew\fP;
-.br
- XtWidgetGeometry *\fIrequest\fP;
-.br
- XtWidgetGeometry *\fIreply\fP;
-.FN
-.IP \fIold\fP 1i
-Specifies a copy of the object as it was before the
-.PN XtSetValues
-call.
-.IP \fInew\fP 1i
-Specifies the object instance record.
-.IP \fIrequest\fP 1i
-Specifies the original geometry request that was sent to the geometry
-manager that caused
-.PN XtGeometryAlmost
-to be returned.
-.IP \fIreply\fP 1i
-Specifies the compromise geometry that was returned by the geometry
-manager with
-.PN XtGeometryAlmost .
-.LP
-.eM
-Most classes inherit the set_values_almost procedure from their superclass by
-specifying
-.PN XtInheritSetValuesAlmost
-in the class initialization.
-The
-set_values_almost procedure in
-.PN rectObjClass
-accepts the compromise suggested.
-.LP
-The set_values_almost procedure is called when a client tries to set a widget's
-geometry by means of a call to
-.PN XtSetValues
-and the geometry manager cannot
-satisfy the request but instead returns
-.PN XtGeometryNo
-or
-.PN XtGeometryAlmost
-and a compromise geometry.
-The \fInew\fP object is the actual instance record. The \fIx\fP, \fIy\fP,
-\fIwidth\fP, \fIheight\fP,
-and \fIborder_width\fP fields contain the original values as they were
-before the
-.PN XtSetValues
-call, and all other fields contain the new
-values. The \fIrequest\fP parameter contains the new geometry request that
-was made to the parent. The \fIreply\fP parameter contains
-\fIreply->request_mode\fP equal to zero if the parent returned
-.PN 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 \fIrequest\fP 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 \fIreply\fP geometry into the \fIrequest\fP geometry; to attempt an
-alternative geometry, the procedure may modify any part of the \fIrequest\fP
-argument; to terminate the geometry negotiation and retain the
-original geometry, the procedure must set \fIrequest->request_mode\fP to
-zero. The geometry fields of the \fIold\fP and \fInew\fP instances must not be modified
-directly.
-
-.NH 4
-Widget State: The ConstraintClassPart set_values Procedure
-.XS
-\*(SN Widget State: The ConstraintClassPart set_values Procedure
-.XE
-.IN "set_values procedure"
-.LP
-The constraint set_values procedure pointer is of type
-.PN XtSetValuesFunc .
-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 \fIset_values\fP field of the
-.PN ConstraintPart
-if it need not compute anything.
-.LP
-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 \fIheight\fP field in the
-widget.
-
-.NH 4
-Widget Subpart State
-.XS
-\*(SN Widget Subpart State
-.XE
-.LP
-To set the current values of subpart resources associated with a
-widget instance, use
-.PN XtSetSubvalues .
-For a discussion of subpart resources,
-see Section 9.4.
-.LP
-.IN "XtSetSubvalues" "" "@DEF@"
-.sM
-.FD 0
-void XtSetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \
-\fIargs\fP, \fInum_args\fP)
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure into which the
-resources should be written.
-.IP \fIresources\fP 1i
-Specifies the subpart resource list.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP \fIargs\fP 1i
-Specifies the argument list of name/value pairs that contain the
-resources to be modified and their new values.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtSetSubvalues
-function updates the resource fields of the structure identified by
-\fIbase\fP. Any specified arguments that do not match an entry in the
-resource list are silently ignored.
-.sp
-.LP
-To set the current values of subpart resources associated with
-a widget instance using varargs lists, use
-.PN XtVaSetSubvalues .
-.LP
-.IN "XtVaSetSubvalues" "" "@DEF@"
-.sM
-.FD 0
-void XtVaSetSubvalues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, ...)
-.br
- XtPointer \fIbase\fP;
-.br
- XtResourceList \fIresources\fP;
-.br
- Cardinal \fInum_resources\fP;
-.FN
-.IP \fIbase\fP 1i
-Specifies the base address of the subpart data structure into which the
-resources should be written.
-.IP \fIresources\fP 1i
-Specifies the subpart resource list.
-.IP \fInum_resources\fP 1i
-Specifies the number of entries in the resource list.
-.IP ... 1i
-Specifies the variable argument list of name/value pairs that
-contain the resources to be modified and their new values.
-.LP
-.eM
-.PN XtVaSetSubvalues
-is identical in function to
-.PN XtSetSubvalues
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list, as
-described in Section 2.5.1.
-.PN XtVaTypedArg
-is not supported for
-.PN XtVaSetSubvalues .
-If an entry containing
-.PN XtVaTypedArg
-is specified in the list, a warning message is issued
-and the entry is ignored.
-
-.NH 4
-Widget Subpart Resource Data: The set_values_hook Procedure
-.XS
-\*(SN Widget Subpart Resource Data: The set_values_hook Procedure
-.XE
-.IN "set_values_hook procedure"
-.NT
-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.
-.NE
-.LP
-Widgets that have a subpart can set the subpart resource values through
-.PN XtSetValues
-by supplying a set_values_hook procedure.
-The set_values_hook procedure pointer in a widget class is of type
-.PN XtArgsFunc .
-.LP
-.IN "set_values_hook procedure" "" "@DEF@"
-.IN "XtArgsFunc" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtArgsFunc)(Widget, Arglist, Cardinal*);
-.br
- Widget \fIw\fP;
-.br
- Arglist \fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget whose subpart resource values are to be changed.
-.IP \fIargs\fP 1i
-Specifies the argument list that was passed to
-.PN XtSetValues
-or the transformed varargs list passed to
-.PN XtVaSetValues .
-.IP \fInum_args\fP 1i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The widget with subpart resources may call
-.PN XtSetValues
-from the set_values_hook procedure
-and pass in its subresource list and the
-\fIargs\fP and \fInum_args\fP parameters.
-.bp
diff --git a/libXt/specs/CH09.xml b/libXt/specs/CH09.xml
new file mode 100644
index 000000000..1f64de593
--- /dev/null
+++ b/libXt/specs/CH09.xml
@@ -0,0 +1,4326 @@
+<chapter id='Resource_Management'>
+<title>Resource Management</title>
+<para>
+A resource is a field in the widget record with a corresponding
+resource entry in the <emphasis remap='I'>resources</emphasis> list of the widget or any of its
+superclasses.
+This means that the field is
+settable by
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+(by naming the field in the argument list), by an
+entry in a resource file (by using either the name or class), and by
+<xref linkend='XtSetValues' xrefstyle='select: title'/>.
+In addition, it is readable by
+<xref linkend='XtGetValues' xrefstyle='select: title'/>.
+Not all fields in a widget record are resources.
+Some are for bookkeeping use by the
+generic routines (like <emphasis remap='I'>managed</emphasis> and <emphasis remap='I'>being_destroyed</emphasis>).
+Others can be for local bookkeeping,
+and still others are derived from resources
+(many graphics contexts and pixmaps).
+</para>
+
+<para>
+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
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+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.
+</para>
+<sect1 id="Resource_Lists">
+<title>Resource Lists</title>
+<para>
+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
+<function>XtResource</function>
+structure is
+</para>
+<literallayout >
+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;
+</literallayout>
+<para>
+When the resource list is specified as the
+<function>CoreClassPart</function>,
+<function>ObjectClassPart</function>,
+<function>RectObjClassPart</function>,
+or
+<function>ConstraintClassPart</function>
+<emphasis remap='I'>resources</emphasis> field, the strings pointed to by <emphasis remap='I'>resource_name</emphasis>,
+<emphasis remap='I'>resource_class</emphasis>, <emphasis remap='I'>resource_type</emphasis>, and <emphasis remap='I'>default_type</emphasis> must
+be permanently allocated prior to or during the execution of the class
+initialization procedure and must not be subsequently deallocated.
+</para>
+
+<para>
+The <emphasis remap='I'>resource_name</emphasis> 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
+<function>&lt;X11/StringDefs.h&gt;</function>.
+The Intrinsics's symbolic resource names begin with
+``XtN''
+and are followed by the string name (for example, XtNbackgroundPixel
+for backgroundPixel).
+</para>
+
+<para>
+The <emphasis remap='I'>resource_class</emphasis> field contains the class string used in resource
+specification files to identify the field.
+A resource class provides two functions:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+It isolates an application from different representations that widgets
+can use for a similar resource.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+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:
+</para>
+<literallayout >
+*Background: ivory
+*Foreground: darkblue
+</literallayout>
+<para>
+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:
+</para>
+<literallayout >
+*Font: 6x13
+</literallayout>
+<para>
+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).
+</para>
+
+<para>
+The <emphasis remap='I'>resource_type</emphasis> 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
+<function>String</function>)
+or the format of the resource default value
+(almost anything, but often
+<function>String</function>)
+to the desired
+physical representation (see <xref linkend='Resource_Conversions' />).
+The Intrinsics define the following resource types:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Resource Type</entry>
+ <entry>Structure or Field Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><function>XtRAcceleratorTable</function></entry>
+ <entry>XtAccelerators</entry>
+ </row>
+ <row>
+ <entry><function>XtRAtom</function></entry>
+ <entry>Atom</entry>
+ </row>
+ <row>
+ <entry><function>XtRBitmap</function></entry>
+ <entry>Pixmap, depth=1</entry>
+ </row>
+ <row>
+ <entry><function>XtRBoolean</function></entry>
+ <entry>Boolean</entry>
+ </row>
+ <row>
+ <entry><function>XtRBool</function></entry>
+ <entry>Bool</entry>
+ </row>
+ <row>
+ <entry><function>XtRCallback</function></entry>
+ <entry>XtCallbackList</entry>
+ </row>
+ <row>
+ <entry><function>XtRCardinal</function></entry>
+ <entry>Cardinal</entry>
+ </row>
+ <row>
+ <entry><function>XtRColor</function></entry>
+ <entry>XColor</entry>
+ </row>
+ <row>
+ <entry><function>XtRColormap</function></entry>
+ <entry>Colormap</entry>
+ </row>
+ <row>
+ <entry><function>XtRCommandArgArray</function></entry>
+ <entry>String*</entry>
+ </row>
+ <row>
+ <entry><function>XtRCursor</function></entry>
+ <entry>Cursor</entry>
+ </row>
+ <row>
+ <entry><function>XtRDimension</function></entry>
+ <entry>Dimension</entry>
+ </row>
+ <row>
+ <entry><function>XtRDirectoryString</function></entry>
+ <entry>String</entry>
+ </row>
+ <row>
+ <entry><function>XtRDisplay</function></entry>
+ <entry>Display*</entry>
+ </row>
+ <row>
+ <entry><function>XtREnum</function></entry>
+ <entry>XtEnum</entry>
+ </row>
+ <row>
+ <entry><function>XtREnvironmentArray</function></entry>
+ <entry>String*</entry>
+ </row>
+ <row>
+ <entry><function>XtRFile</function></entry>
+ <entry>FILE*</entry>
+ </row>
+ <row>
+ <entry><function>XtRFloat</function></entry>
+ <entry>float</entry>
+ </row>
+ <row>
+ <entry><function>XtRFont</function></entry>
+ <entry>Font</entry>
+ </row>
+ <row>
+ <entry><function>XtRFontSet</function></entry>
+ <entry>XFontSet</entry>
+ </row>
+ <row>
+ <entry><function>XtRFontStruct</function></entry>
+ <entry>XFontStruct*</entry>
+ </row>
+ <row>
+ <entry><function>XtRFunction</function></entry>
+ <entry>(*)()</entry>
+ </row>
+ <row>
+ <entry><function>XtRGeometry</function></entry>
+ <entry>char*, format as defined by
+ <function>XParseGeometry</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRGravity</function></entry>
+ <entry>int</entry>
+ </row>
+ <row>
+ <entry><function>XtRInitialState</function></entry>
+ <entry>int</entry>
+ </row>
+ <row>
+ <entry><function>XtRInt</function></entry>
+ <entry>int</entry>
+ </row>
+ <row>
+ <entry><function>XtRLongBoolean</function></entry>
+ <entry>long</entry>
+ </row>
+ <row>
+ <entry><function>XtRObject</function></entry>
+ <entry>Object</entry>
+ </row>
+ <row>
+ <entry><function>XtRPixel</function></entry>
+ <entry>Pixel</entry>
+ </row>
+ <row>
+ <entry><function>XtRPixmap</function></entry>
+ <entry>Pixmap</entry>
+ </row>
+ <row>
+ <entry><function>XtRPointer</function></entry>
+ <entry>XtPointer</entry>
+ </row>
+ <row>
+ <entry><function>XtRPosition</function></entry>
+ <entry>Position</entry>
+ </row>
+ <row>
+ <entry><function>XtRRestartStyle</function></entry>
+ <entry>unsigned char</entry>
+ </row>
+ <row>
+ <entry><function>XtRScreen</function></entry>
+ <entry>Screen*</entry>
+ </row>
+ <row>
+ <entry><function>XtRShort</function></entry>
+ <entry>short</entry>
+ </row>
+ <row>
+ <entry><function>XtRSmcConn</function></entry>
+ <entry>XtPointer</entry>
+ </row>
+ <row>
+ <entry><function>XtRString</function></entry>
+ <entry>String</entry>
+ </row>
+ <row>
+ <entry><function>XtRStringArray</function></entry>
+ <entry>String*</entry>
+ </row>
+ <row>
+ <entry><function>XtRStringTable</function></entry>
+ <entry>String*</entry>
+ </row>
+ <row>
+ <entry><function>XtRTranslationTable</function></entry>
+ <entry>XtTranslations</entry>
+ </row>
+ <row>
+ <entry><function>XtRUnsignedChar</function></entry>
+ <entry>unsigned char</entry>
+ </row>
+ <row>
+ <entry><function>XtRVisual</function></entry>
+ <entry>Visual*</entry>
+ </row>
+ <row>
+ <entry><function>XtRWidget</function></entry>
+ <entry>Widget</entry>
+ </row>
+ <row>
+ <entry><function>XtRWidgetClass</function></entry>
+ <entry>WidgetClass</entry>
+ </row>
+ <row>
+ <entry><function>XtRWidgetList</function></entry>
+ <entry>WidgetList</entry>
+ </row>
+ <row>
+ <entry><function>XtRWindow</function></entry>
+ <entry>Window</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+<function>&lt;X11/StringDefs.h&gt;</function>
+also defines the following resource types as a
+convenience for widgets, although they do not have any corresponding
+data type assigned:
+<function>XtREditMode</function>,
+<function>XtRJustify</function>,
+and
+<function>XtROrientation</function>.
+</para>
+
+<para>
+The <emphasis remap='I'>resource_size</emphasis> field is the size of the physical representation in bytes;
+you should specify it as
+<function>sizeof</function>(type) so that the
+compiler fills in the value.
+The <emphasis remap='I'>resource_offset</emphasis> field is the offset in bytes of the field
+within the widget.
+You should use the
+<xref linkend='XtOffsetOf' xrefstyle='select: title'/>
+macro to retrieve this value.
+The <emphasis remap='I'>default_type</emphasis> field is the representation type of the default
+resource value.
+If <emphasis remap='I'>default_type</emphasis> is different from <emphasis remap='I'>resource_type</emphasis> and the default value
+is needed,
+the resource manager invokes a conversion procedure from <emphasis remap='I'>default_type</emphasis>
+to <emphasis remap='I'>resource_type</emphasis>.
+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,
+<function>XtDefaultForeground</function>
+for a pixel resource).
+The <emphasis remap='I'>default_addr</emphasis> field specifies the address of the default resource value.
+As a special case, if <emphasis remap='I'>default_type</emphasis> is
+<function>XtRString</function>,
+then the value in the <emphasis remap='I'>default_addr</emphasis> 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).
+</para>
+
+<para>
+Two special representation types
+(XtRImmediate
+and
+XtRCallProc)
+are usable only as default resource types.
+XtRImmediate
+indicates that the value in the <emphasis remap='I'>default_addr</emphasis> 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
+<function>XtPointer</function>.
+No conversion is possible, since there is no source representation type.
+XtRCallProc
+indicates that the value in the <emphasis remap='I'>default_addr</emphasis> field is a procedure
+pointer.
+This procedure is automatically invoked with the widget,
+<emphasis remap='I'>resource_offset</emphasis>, and a pointer to an
+<function>XrmValue</function>
+in which to store the result.
+XtRCallProc
+procedure pointers are of type
+<xref linkend='XtResourceDefaultProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtResourceDefaultProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtResourceDefaultProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>int <parameter>offset</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget whose resource value is to be obtained.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>offset</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the offset of the field in the widget record.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource value descriptor to return.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtResourceDefaultProc' xrefstyle='select: title'/>
+procedure should fill in the <emphasis remap='I'>value-&gt;addr</emphasis> field with a pointer
+to the resource value in its correct representation type.
+</para>
+
+<para>
+To get the resource list structure for a particular class, use
+<xref linkend='XtGetResourceList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetResourceList'>
+<funcprototype>
+<funcdef>void <function>XtGetResourceList</function></funcdef>
+
+ <paramdef>WidgetClass <parameter>class</parameter></paramdef>
+ <paramdef>XtResourceList *<parameter>resources_return</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_resources_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object class to be queried. It must be
+<function>objectClass</function>
+or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If
+<xref linkend='XtGetResourceList' xrefstyle='select: title'/>
+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,
+<xref linkend='XtGetResourceList' xrefstyle='select: title'/>
+returns a merged resource list that includes the resources
+for all superclasses.
+The list returned by
+<xref linkend='XtGetResourceList' xrefstyle='select: title'/>
+should be freed using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer needed.
+</para>
+
+<para>
+To get the constraint resource list structure for a particular widget
+class, use
+<xref linkend='XtGetConstraintResourceList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetConstraintResourceList'>
+<funcprototype>
+<funcdef>void <function>XtGetConstraintResourceList</function></funcdef>
+ <paramdef>WidgetClass <parameter>class</parameter></paramdef>
+ <paramdef>XtResourceList *<parameter>resources_return</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_resources_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object class to be queried. It must be
+<function>objectClass</function>
+or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the constraint resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the number of entries in the constraint resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If
+<xref linkend='XtGetConstraintResourceList' xrefstyle='select: title'/>
+is called before the widget class is
+initialized, the resource list as specified in the widget
+class Constraint part is returned. If
+<xref linkend='XtGetConstraintResourceList' xrefstyle='select: title'/>
+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
+<function>constraintWidgetClass</function>,
+*<emphasis remap='I'>resources_return</emphasis> is set to NULL
+and *<emphasis remap='I'>num_resources_return</emphasis> is set to zero.
+The list returned by
+<xref linkend='XtGetConstraintResourceList' xrefstyle='select: title'/>
+should be freed using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer needed.
+</para>
+
+<para>
+The routines
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+and
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+also use the resource list to set and get widget state;
+see <xref linkend='Obtaining_Widget_State' /> and
+<xref linkend='Setting_Widget_State' />.
+</para>
+
+<para>
+Here is an abbreviated version of a possible resource list for a Label widget:
+</para>
+<literallayout >
+/* 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},
+ .
+ .
+ .
+}
+</literallayout>
+<para>
+The complete resource name for a field of a widget instance is the
+concatenation of the application shell name (from
+<function>XtAppCreateShell ),</function>
+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
+<function>XtAppCreateShell ),</function>
+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.
+</para>
+</sect1>
+
+<sect1 id="Byte_Offset_Calculations">
+<title>Byte Offset Calculations</title>
+<para>
+To determine the byte offset of a field within a structure type, use
+<xref linkend='XtOffsetOf' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOffsetOf'>
+<funcprototype>
+<funcdef>Cardinal <function>XtOffsetOf</function></funcdef>
+ <paramdef>Type <parameter>structure_type</parameter></paramdef>
+ <paramdef>Field <parameter>field_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>structure_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a type that is declared as a structure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>field_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of a member within the structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOffsetOf' xrefstyle='select: title'/>
+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
+<xref linkend='XtOffset' xrefstyle='select: title'/>,
+which serves the same function.
+</para>
+
+<para>
+To determine the byte offset of a field within a structure pointer type, use
+<xref linkend='XtOffset' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOffset'>
+<funcprototype>
+<funcdef>Cardinal <function>XtOffset</function></funcdef>
+ <paramdef>Type <parameter> pointer_type</parameter></paramdef>
+ <paramdef>Field <parameter> field_name</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pointer_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a type that is declared as a pointer to a structure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>field_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of a member within the structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOffset' xrefstyle='select: title'/>
+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.
+<xref linkend='XtOffset' xrefstyle='select: title'/>
+is less portable than
+<xref linkend='XtOffsetOf' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Superclass_to_Subclass_Chaining_of_Resource_Lists">
+<title>Superclass-to-Subclass Chaining of Resource Lists</title>
+<para>
+The
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+function gets resources as a superclass-to-subclass chained operation.
+That is, the resources specified in the
+<function>objectClass</function>
+resource list are fetched,
+then those in
+<function>rectObjClass</function>,
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>background_pixel</emphasis>.
+Consequently,
+the implementation of Label need not also have a resource entry
+for <emphasis remap='I'>background_pixel</emphasis>.
+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.
+</para>
+
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Subresources">
+<title>Subresources</title>
+<para>
+A widget does not do anything to retrieve its own resources;
+instead,
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+does this automatically before calling the class initialize procedure.
+</para>
+
+<para>
+Some widgets have subparts that are not widgets but for which the widget
+would like to fetch resources.
+Such widgets call
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+to accomplish this.
+</para>
+
+<funcsynopsis id='XtGetSubresources'>
+<funcprototype>
+<funcdef>void <function>XtGetSubresources</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object used to qualify the subpart resource name and
+class. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure into which the
+resources will be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class of the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource list for the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+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 <emphasis remap='I'>name</emphasis> and <emphasis remap='I'>class</emphasis> 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 <emphasis remap='I'>args</emphasis> is NULL,
+<emphasis remap='I'>num_args</emphasis> must be zero.
+However, if <emphasis remap='I'>num_args</emphasis> is zero,
+the argument list is not referenced.
+</para>
+
+<para>
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+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
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To fetch resources for widget subparts using varargs lists, use
+<xref linkend='XtVaGetSubresources' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaGetSubresources'>
+<funcprototype>
+<funcdef>void <function>XtVaGetSubresources</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object used to qualify the subpart resource name and
+class. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure into which the
+resources will be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class of the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource list for the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaGetSubresources' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list, as
+described in Section 2.5.1.
+</para>
+</sect1>
+
+<sect1 id="Obtaining_Application_Resources">
+<title>Obtaining Application Resources</title>
+<para>
+To retrieve resources that are not specific to a widget
+but apply to the overall application, use
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetApplicationResources'>
+<funcprototype>
+<funcdef>void <function>XtGetApplicationResources</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address into which
+the resource values will be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>
+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,
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>
+copies the resources into the addresses
+obtained by adding <emphasis remap='I'>base</emphasis> to each <emphasis remap='I'>offset</emphasis> in the resource list.
+If <emphasis remap='I'>args</emphasis> is NULL,
+<emphasis remap='I'>num_args</emphasis> must be zero.
+However, if <emphasis remap='I'>num_args</emphasis> 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 <emphasis remap='I'>base</emphasis> argument.
+</para>
+
+<para>
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>
+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
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>
+will not be freed from the resource cache until the display is closed.
+</para>
+
+<para>
+To retrieve resources for the overall application using varargs lists, use
+<xref linkend='XtVaGetApplicationResources' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaGetApplicationResources'>
+<funcprototype>
+<funcdef>void <function>XtVaGetApplicationResources</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address into which
+the resource values will be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource list for the subpart.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaGetApplicationResources' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters
+replaced by a varargs list, as described in Section 2.5.1.
+</para>
+</sect1>
+
+<sect1 id="Resource_Conversions">
+<title>Resource Conversions</title>
+<para>
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+It permits user and application resource files to contain textual
+representations of nontextual values.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<sect2 id="Predefined_Resource_Converters">
+<title>Predefined Resource Converters</title>
+<para>
+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
+<function>XtRString</function>.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='0.7*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='0.6*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Target Representation</entry>
+ <entry>Converter Name</entry>
+ <entry>Additional Args</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><function>XtRAcceleratorTable</function></entry>
+ <entry><function>XtCvtStringToAcceleratorTable</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRAtom</function></entry>
+ <entry><function>XtCvtStringToAtom</function></entry>
+ <entry>Display*</entry>
+ </row>
+ <row>
+ <entry><function>XtRBoolean</function></entry>
+ <entry><function>XtCvtStringToBoolean</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRBool</function></entry>
+ <entry><function>XtCvtStringToBool</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRCommandArgArray</function></entry>
+ <entry><function>XtCvtStringToCommandArgArray</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRCursor</function></entry>
+ <entry><function>XtCvtStringToCursor</function></entry>
+ <entry>Display*</entry>
+ </row>
+ <row>
+ <entry><function>XtRDimension</function></entry>
+ <entry><function>XtCvtStringToDimension</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRDirectoryString</function></entry>
+ <entry><function>XtCvtStringToDirectoryString</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRDisplay</function></entry>
+ <entry><function>XtCvtStringToDisplay</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRFile</function></entry>
+ <entry><function>XtCvtStringToFile</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRFloat</function></entry>
+ <entry><function>XtCvtStringToFloat</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRFont</function></entry>
+ <entry><function>XtCvtStringToFont</function></entry>
+ <entry>Display*</entry>
+ </row>
+ <row>
+ <entry><function>XtRFontSet</function></entry>
+ <entry><function>XtCvtStringToFontSet</function></entry>
+ <entry>Display*, String <emphasis remap='I'>locale</emphasis></entry>
+ </row>
+ <row>
+ <entry><function>XtRFontStruct</function></entry>
+ <entry><function>XtCvtStringToFontStruct</function></entry>
+ <entry>Display*</entry>
+ </row>
+ <row>
+ <entry><function>XtRGravity</function></entry>
+ <entry><function>XtCvtStringToGravity</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRInitialState</function></entry>
+ <entry><function>XtCvtStringToInitialState</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRInt</function></entry>
+ <entry><function>XtCvtStringToInt</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRPixel</function></entry>
+ <entry><function>XtCvtStringToPixel</function></entry>
+ <entry><function>colorConvertArgs</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRPosition</function></entry>
+ <entry><function>XtCvtStringToPosition</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRRestartStyle</function></entry>
+ <entry><function>XtCvtStringToRestartStyle</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRShort</function></entry>
+ <entry><function>XtCvtStringToShort</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRTranslationTable</function></entry>
+ <entry><function>XtCvtStringToTranslationTable</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRUnsignedChar</function></entry>
+ <entry><function>XtCvtStringToUnsignedChar</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRVisual</function></entry>
+ <entry><function>XtCvtStringToVisual</function></entry>
+ <entry>Screen*, Cardinal <emphasis remap='I'>depth</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The String-to-Pixel conversion has two predefined constants that are
+guaranteed to work and contrast with each other:
+<function>XtDefaultForeground</function>
+and
+<function>XtDefaultBackground</function>.
+They evaluate to the black and white pixel values of the widget's screen,
+respectively.
+If the application resource reverseVideo is
+<function>True</function>,
+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
+<function>XtDefaultFont</function>
+and evaluate this in the following manner:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+<function>XtRString</function>
+value returned as the font name or a type
+<function>XtRFont</function>
+or
+<function>XtRFontStruct</function>
+value directly as the resource value.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<function>XListFonts</function>
+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".)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If no suitable ISO8859-1 font can be found, issue a warning message
+and return
+<function>False</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The String-to-FontSet converter recognizes the constant
+<function>XtDefaultFontSet</function>
+and evaluate this in the following manner:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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
+<function>XtRString</function>
+value returned as the base font name list or a type
+<function>XtRFontSet</function>
+value directly as the resource value.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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
+<function>XCreateFontSet</function>
+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-*-*-*-*".)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If no suitable font set can be created, issue a warning message
+and return
+<function>False</function>.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+If a font set is created but <emphasis remap='I'>missing_charset_list</emphasis> 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.
+</para>
+
+<para>
+The String-to-Gravity conversion accepts string values that are the
+names of window and bit gravities and their numerical equivalents,
+as defined in <emphasis remap='I'>Xlib — C Language X Interface.</emphasis>:
+<function>ForgetGravity</function>,
+<function>UnmapGravity</function>,
+<function>NorthWestGravity</function>,
+<function>NorthGravity</function>,
+<function>NorthEastGravity</function>,
+<function>WestGravity</function>,
+<function>CenterGravity</function>,
+<function>EastGravity</function>,
+<function>SouthWestGravity</function>,
+<function>SouthGravity</function>,
+<function>SouthEastGravity</function>,
+and
+<function>StaticGravity</function>.
+Alphabetic case is not significant in the conversion.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+The String-to-RestartStyle conversion accepts the values
+<function>RestartIfRunning</function>,
+<function>RestartAnyway</function>,
+<function>RestartImmediately</function>,
+and
+<function>RestartNever</function>
+as defined by the <emphasis remap='I'>X Session Management Protocol</emphasis>.
+</para>
+
+<para>
+The String-to-InitialState conversion accepts the values
+<function>NormalState</function>
+or
+<function>IconicState</function>
+as defined by the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>.
+</para>
+
+<para>
+The String-to-Visual conversion calls
+<function>XMatchVisualInfo</function>
+using the
+<emphasis remap='I'>screen</emphasis> and <emphasis remap='I'>depth</emphasis> 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
+<function>XtRVisual</function>
+after the depth resource.
+The allowed string values are the visual class names defined in <emphasis remap='I'>X Window System Protocol</emphasis>,
+Section 8;
+<function>StaticGray</function>,
+<function>StaticColor</function>,
+<function>TrueColor</function>,
+<function>GrayScale</function>,
+<function>PseudoColor</function>,
+and
+<function>DirectColor</function>.
+</para>
+
+<para>
+The Intrinsics register the following resource converter that accepts
+an input value of representation type
+<function>XtRColor</function>.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Target Representation</entry>
+ <entry>Converter Name</entry>
+ <entry>Additional Args</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><function>XtRPixel</function></entry>
+ <entry><function>XtCvtColorToPixel</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The Intrinsics register the following resource converters that accept
+input values of representation type
+<function>XtRInt</function>.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Target Representation</entry>
+ <entry>Converter Name</entry>
+ <entry>Additional Args</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><function>XtRBoolean</function></entry>
+ <entry><function>XtCvtIntToBoolean</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRBool</function></entry>
+ <entry><function>XtCvtIntToBool</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRColor</function></entry>
+ <entry><function>XtCvtIntToColor</function></entry>
+ <entry><function>colorConvertArgs</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRDimension</function></entry>
+ <entry><function>XtCvtIntToDimension</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRFloat</function></entry>
+ <entry><function>XtCvtIntToFloat</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRFont</function></entry>
+ <entry><function>XtCvtIntToFont</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRPixel</function></entry>
+ <entry><function>XtCvtIntToPixel</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRPixmap</function></entry>
+ <entry><function>XtCvtIntToPixmap</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRPosition</function></entry>
+ <entry><function>XtCvtIntToPosition</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRShort</function></entry>
+ <entry><function>XtCvtIntToShort</function></entry>
+ </row>
+ <row>
+ <entry><function>XtRUnsignedChar</function></entry>
+ <entry><function>XtCvtIntToUnsignedChar</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The Intrinsics register the following resource converter that accepts
+an input value of representation type
+<function>XtRPixel</function>.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Target Representation</entry>
+ <entry>Converter Name</entry>
+ <entry>Additional Args</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><function>XtRColor</function></entry>
+ <entry><function>XtCvtPixelToColor</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</sect2>
+
+<sect2 id="New_Resource_Converters">
+<title>New Resource Converters</title>
+<para>
+Type converters use pointers to
+<function>XrmValue</function>
+structures (defined in
+<function>&lt;X11/Xresource.h&gt;;</function>
+see <olink targetdoc='libX11' targetptr='Creating_and_Storing_Databases'>Section 15.4</olink> in
+<olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface.</olink>)
+for input and output values.
+</para>
+<literallayout >
+typedef struct {
+ unsigned int size;
+ XPointer addr;
+} XrmValue, *XrmValuePtr;
+</literallayout>
+<para>
+The <emphasis remap='I'>addr</emphasis> field specifies the address of the data, and the <emphasis remap='I'>size</emphasis>
+field gives the total number of significant bytes in the data.
+For values of type
+<function>String</function>,
+<emphasis remap='I'>addr</emphasis> is the address of the first character and <emphasis remap='I'>size</emphasis>
+includes the NULL-terminating byte.
+</para>
+
+<para>
+A resource converter procedure pointer is of type
+<xref linkend='XtTypeConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtTypeConverter'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtTypeConverter)</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>from</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>to</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>converter_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection with which this conversion is associated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of additional
+<function>XrmValue</function>
+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 <emphasis remap='I'>display</emphasis>,
+and the String-to-Pixel converter needs the widget's <emphasis remap='I'>screen</emphasis> and <emphasis remap='I'>colormap</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value to convert.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a descriptor for a location into which to store the converted value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a location into which the converter may
+store converter-specific data associated
+with this conversion.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>display</emphasis> argument is normally used only when generating error
+messages, to identify the application context (with the function
+<function>XtDisplayToApplicationContext ).</function>
+</para>
+
+<para>
+The <emphasis remap='I'>to</emphasis> argument specifies the size and location into which the
+converter should store the converted value. If the <emphasis remap='I'>addr</emphasis> field is NULL,
+the converter should allocate appropriate storage and store the size
+and location into the <emphasis remap='I'>to</emphasis> 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
+<emphasis remap='I'>addr</emphasis> field is not NULL, the converter must check the <emphasis remap='I'>size</emphasis> field to
+ensure that sufficient space has been allocated before storing the
+converted value. If insufficient space is specified, the converter
+should update the <emphasis remap='I'>size</emphasis> field with the number of bytes required and
+return
+<function>False</function>
+without modifying the data at the specified location.
+If sufficient space was allocated by the caller, the converter should
+update the <emphasis remap='I'>size</emphasis> field with the number of bytes actually occupied by the
+converted value. For converted values of type
+<function>XtRString</function>,
+the size should
+include the NULL-terminating byte, if any.
+The converter may store any value in the location specified
+in <emphasis remap='I'>converter_data</emphasis>; this value will be passed to the destructor, if any,
+when the resource is freed by the Intrinsics.
+</para>
+
+<para>
+The converter must return
+<function>True</function>
+if the conversion was successful and
+<function>False</function>
+otherwise. If the conversion cannot be performed because of an
+improper source value, a warning message should also be issued with
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>.
+</para>
+
+<para>
+Most type converters just take the data described by the specified <emphasis remap='I'>from</emphasis>
+argument and return data by writing into the location specified in
+the <emphasis remap='I'>to</emphasis> argument.
+A few need other information, which is available in <emphasis remap='I'>args</emphasis>.
+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.
+</para>
+
+<para>
+Note that if an address is written into <emphasis remap='I'>to-&gt;addr</emphasis>, 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,
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>,
+or
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+in an implementation-defined manner; however, insertion of new entries
+or changes to existing entries is allowed and will not directly cause
+an error.
+</para>
+
+<para>
+The following is an example of a converter that takes a
+<function>string</function>
+and converts it to a
+<function>Pixel</function>.
+Note that the <emphasis remap='I'>display</emphasis> parameter is
+used only to generate error messages; the
+<function>Screen</function>
+conversion argument is
+still required to inform the Intrinsics that the converted value is
+a function of the particular display (and colormap).
+</para>
+
+<literallayout >
+#define done(type, value) \\
+ { \\
+ if (toVal-&gt;addr != NULL) { \\
+ if (toVal-&gt;size &lt; sizeof(type)) { \\
+ toVal-&gt;size = sizeof(type); \\
+ return False; \\
+ } \\
+ *(type*)(toVal-&gt;addr) = (value); \\
+ } \\
+ else { \\
+ static type static_val; \\
+ static_val = (value); \\
+ toVal-&gt;addr = (XPointer)&amp;static_val; \\
+ } \\
+ toVal-&gt;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-&gt;addr,
+ &amp;screenColor, &amp;exactColor);
+ if (status == 0) {
+ String params[1];
+ Cardinal num_params = 1;
+ params[0] = (String)fromVal-&gt;addr;
+ XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
+ "noColormap", "cvtStringToPixel", "XtToolkitError",
+ "Cannot allocate colormap entry for \\"%s\\"", params,\
+ &amp;num_params);
+ *converter_data = (char *) False;
+ return False;
+ } else {
+ *converter_data = (char *) True;
+ done(Pixel, &amp;screenColor.pixel);
+ }
+}
+</literallayout>
+
+<para>
+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
+<function>XtDefaultForeground</function>,
+<function>XtDefaultBackground</function>,
+and
+<function>XtDefaultFont</function>.
+</para>
+
+<para>
+To allow the Intrinsics to deallocate resources produced by type
+converters, a resource destructor procedure may also be provided.
+</para>
+
+<para>
+A resource destructor procedure pointer is of type
+<xref linkend='XtDestructor' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDestructor'>
+<funcprototype>
+ <funcdef>typedef void <function>(*XtDestructor)</function></funcdef>
+ <paramdef>XtAppContext <parameter>app</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>to</parameter></paramdef>
+ <paramdef>XtPointer <parameter>converter_data</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an application context in which the resource is being freed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a descriptor for the resource produced by the type converter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the converter-specific data returned by the type converter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional converter arguments as passed
+to the type converter when the conversion was performed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The destructor procedure is responsible for freeing the resource
+specified by the <emphasis remap='I'>to</emphasis> argument, including any auxiliary storage
+associated with that resource, but not the memory directly addressed
+by the size and location in the <emphasis remap='I'>to</emphasis> argument or the memory specified
+by <emphasis remap='I'>args</emphasis>.
+</para>
+</sect2>
+
+<sect2 id="Issuing_Conversion_Warnings">
+<title>Issuing Conversion Warnings</title>
+<para>
+The
+<xref linkend='XtDisplayStringConversionWarning' xrefstyle='select: title'/>
+procedure is a convenience routine for resource type converters
+that convert from string values.
+</para>
+
+<funcsynopsis id='XtDisplayStringConversionWarning'>
+<funcprototype>
+<funcdef>void <function>XtDisplayStringConversionWarning</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>String <parameter>from_value</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection with which the conversion is associated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_value</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the string that could not be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the target representation type requested.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDisplayStringConversionWarning' xrefstyle='select: title'/>
+procedure issues a warning message using
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>
+with <emphasis remap='I'>name</emphasis> ``conversionError'',
+<emphasis remap='I'>type</emphasis> ``string'', <emphasis remap='I'>class</emphasis> ``XtToolkitError'', and the default message
+``Cannot convert "<emphasis remap='I'>from_value</emphasis>" to type <emphasis remap='I'>to_type</emphasis>''.
+</para>
+
+<para>
+To issue other types of warning or error messages, the type converter
+should use
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppErrorMsg' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To retrieve the application context associated with a given
+display connection, use
+<xref linkend='XtDisplayToApplicationContext' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDisplayToApplicationContext'>
+<funcprototype>
+<funcdef>XtAppContext <function>XtDisplayToApplicationContext</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an open and initialized display connection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDisplayToApplicationContext' xrefstyle='select: title'/>
+function returns the application
+context in which the specified <emphasis remap='I'>display</emphasis> was initialized. If the
+display is not known to the Intrinsics, an error message is issued.
+</para>
+</sect2>
+
+<sect2 id="Registering_a_New_Resource_Converter">
+<title>Registering a New Resource Converter</title>
+<para>
+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 <function>XtCacheType</function>
+argument. </para>
+
+<literallayout >
+typedef int XtCacheType;
+</literallayout>
+
+<para>
+An <function>XtCacheType</function>
+field may contain one of the following values:
+</para>
+
+<para>
+<function>XtCacheNone</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtCacheAll</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+<function>XtCacheByDisplay</function>
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Specifies that the results of a previous conversion
+should be used as for
+<function>XtCacheAll</function>
+but the destructor will be called, if specified, if
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+is called
+for the display connection associated with the converted value, and
+the value will be removed from the conversion cache.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The qualifier
+<function>XtCacheRefCount</function>
+may be ORed with any of the above values. If
+<function>XtCacheRefCount</function>
+is specified, calls to
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>,
+and
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To register a type converter for all application contexts in a
+process, use
+<xref linkend='XtSetTypeConverter' xrefstyle='select: title'/>,
+and to register a type converter in a single application context, use
+<xref linkend='XtAppSetTypeConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetTypeConverter'>
+<funcprototype>
+<funcdef>void <function>XtSetTypeConverter</function></funcdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XtTypeConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XtConvertArgList <parameter>convert_args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+ <paramdef>XtCacheType <parameter>cache_type</parameter></paramdef>
+ <paramdef>XtDestructor <parameter>destructor</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource type converter procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional conversion arguments, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>convert_args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>cache_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not resources produced by this
+converter are sharable or display-specific and when
+they should be freed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>destructor</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<funcsynopsis id='XtAppSetTypeConverter'>
+<funcprototype>
+<funcdef> <function>XtAppSetTypeConverter</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XtTypeConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XtConvertArgList <parameter>convert_args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+ <paramdef>XtCacheType <parameter>cache_type</parameter></paramdef>
+ <paramdef>XtDestructor <parameter>destructor</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource type converter procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional conversion arguments, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>convert_args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>cache_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies whether or not resources produced by this
+converter are sharable or display-specific and when
+they should be freed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>destructor</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtSetTypeConverter' xrefstyle='select: title'/>
+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.
+<xref linkend='XtAppSetTypeConverter' xrefstyle='select: title'/>
+registers the specified type converter in the
+single application context specified. If the same <emphasis remap='I'>from_type</emphasis> and
+<emphasis remap='I'>to_type</emphasis> are specified in multiple calls to either function, the most
+recent overrides the previous ones.
+</para>
+
+<para>
+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
+<function>XtAddressMode</function>
+and the structure
+<function>XtConvertArgRec</function>
+specify how each argument is derived.
+These are defined in
+<function>&lt;X11/Intrinsic.h&gt;</function>.
+</para>
+<literallayout >
+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;
+</literallayout>
+<para>
+The <emphasis remap='I'>size</emphasis> field specifies the length of the data in bytes.
+The <emphasis remap='I'>address_mode</emphasis> field specifies how the <emphasis remap='I'>address_id</emphasis> field should be
+interpreted.
+<function>XtAddress</function>
+causes <emphasis remap='I'>address_id</emphasis> to be interpreted as the address of the data.
+<function>XtBaseOffset</function>
+causes <emphasis remap='I'>address_id</emphasis> to be interpreted as the offset from the widget base.
+<function>XtImmediate</function>
+causes <emphasis remap='I'>address_id</emphasis> to be interpreted as a constant.
+<function>XtResourceString</function>
+causes <emphasis remap='I'>address_id</emphasis> to be interpreted as the name of a resource
+that is to be converted into an offset from the widget base.
+<function>XtResourceQuark</function>
+causes <emphasis remap='I'>address_id</emphasis> to be interpreted as the result of an
+<function>XrmStringToQuark</function>
+conversion on the name of a resource,
+which is to be converted into an offset from the widget base.
+<function>XtWidgetBaseOffset</function>
+is similar to
+<function>XtBaseOffset</function>
+except that it
+searches for the closest windowed ancestor if the object is not
+of a subclass of
+Core
+(see <xref linkend='Nonwidget_Objects' />).
+<function>XtProcedureArg</function>
+specifies that <emphasis remap='I'>address_id</emphasis> is a pointer to a procedure to
+be invoked to return the conversion argument. If
+<function>XtProcedureArg</function>
+is specified, <emphasis remap='I'>address_id</emphasis> must contain
+the address of a function of type
+<xref linkend='XtConvertArgProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConvertArgProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtConvertArgProc)</function></funcdef>
+ <paramdef>XtAppContext <parameter>app</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>to</parameter></paramdef>
+ <paramdef>XtPointer <parameter>converter_data</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an application context in which the resource is being freed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a descriptor for the resource produced by the type converter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the converter-specific data returned by the type converter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional converter arguments as passed
+to the type converter when the conversion was performed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The destructor procedure is responsible for freeing the resource
+specified by the <emphasis remap='I'>to</emphasis> argument, including any auxiliary storage
+associated with that resource, but not the memory directly addressed
+by the size and location in the <emphasis remap='I'>to</emphasis> argument or the memory specified
+by <emphasis remap='I'>args</emphasis>.
+</para>
+</sect2>
+
+<sect2 id="Resource_Converter_Invocation">
+<title>Resource Converter Invocation</title>
+<para>
+All resource-fetching routines (for example,
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>,
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>,
+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.
+</para>
+
+<para>
+To invoke explicit resource conversions, use
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+or
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>.
+</para>
+<literallayout >
+typedef XtPointer XtCacheRef;
+</literallayout>
+
+<funcsynopsis id='XtCallConverter'>
+<funcprototype>
+<funcdef>Boolean <function>XtCallConverter</function></funcdef>
+ <paramdef>Display* <parameter>display</parameter></paramdef>
+ <paramdef>XtTypeConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>conversion_args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>from</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>to_in_out</parameter></paramdef>
+ <paramdef>XtCacheRef *<parameter>cache_ref_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display with which the conversion is to be associated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the conversion procedure to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>conversion_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the additional conversion arguments needed
+to perform the conversion, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>conversion_args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a descriptor for the source value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the converted value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>cache_ref_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a conversion cache id.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+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
+<function>XtCacheAll</function>
+or
+<function>XtCacheByDisplay</function>,
+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,
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+returns
+<function>False</function>
+immediately;
+otherwise it checks the size specified in the <emphasis remap='I'>to</emphasis> 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
+<emphasis remap='I'>to-&gt;addr</emphasis>, stores the cache size into <emphasis remap='I'>to-&gt;size</emphasis>, and returns
+<function>True</function>.
+If the size specified in the <emphasis remap='I'>to</emphasis> argument is smaller than the size stored
+in the cache,
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+copies the cache size into <emphasis remap='I'>to-&gt;size</emphasis> and returns
+<function>False</function>.
+If the converter was registered with cache type
+<function>XtCacheNone</function>
+or no value was found in the conversion cache,
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+calls the converter, and if it was not registered with cache type
+<function>XtCacheNone</function>,
+enters the result in the cache.
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+then returns what the converter returned.
+</para>
+
+<para>
+The <emphasis remap='I'>cache_ref_return</emphasis> field specifies storage allocated by the caller in which
+an opaque value will be stored. If the type converter has been
+registered with the
+<function>XtCacheRefCount</function>
+modifier and if the value returned
+in <emphasis remap='I'>cache_ref_return</emphasis> is non-NULL, then the caller should store the
+<emphasis remap='I'>cache_ref_return</emphasis> value in order to decrement the reference count when
+the converted value is no longer required. The <emphasis remap='I'>cache_ref_return</emphasis>
+argument should be
+NULL if the caller is unwilling or unable to store the
+value.
+</para>
+
+<para>
+To explicitly decrement the reference counts for resources obtained
+from
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>,
+use
+<xref linkend='XtAppReleaseCacheRefs' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppReleaseCacheRefs'>
+<funcprototype>
+<funcdef>void <function>XtAppReleaseCacheRefs</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtCacheRef *<parameter>refs</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>refs</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of cache references to be released.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppReleaseCacheRefs' xrefstyle='select: title'/>
+decrements the reference count for the
+conversion entries identified by the <emphasis remap='I'>refs</emphasis> argument.
+This argument is a
+pointer to a NULL-terminated list of
+<function>XtCacheRef</function>
+values. If any reference
+count reaches zero, the destructor, if any, will be called and
+the resource removed from the conversion cache.
+</para>
+
+<para>
+As a convenience to clients needing to explicitly decrement reference
+counts via a callback function, the Intrinsics define two callback
+procedures,
+<xref linkend='XtCallbackReleaseCacheRef' xrefstyle='select: title'/>
+and
+<xref linkend='XtCallbackReleaseCacheRefList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallbackReleaseCacheRef'>
+<funcprototype>
+<funcdef>void <function>XtCallbackReleaseCacheRef</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object with which the resource is associated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the conversion cache entry to be released.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Is ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This callback procedure may be added to a callback list to release a
+previously returned
+<function>XtCacheRef</function>
+value. When adding the callback, the
+callback <emphasis remap='I'>client_data</emphasis> argument must be specified as the value of the
+<function>XtCacheRef</function>
+data cast to type
+<function>XtPointer</function>.
+</para>
+
+<funcsynopsis id='XtCallbackReleaseCacheRefList'>
+<funcprototype>
+<funcdef>void <function>XtCallbackReleaseCacheRefList</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtPointer <parameter>call_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object with which the resources are associated.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the conversion cache entries to be released.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>call_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Is ignored.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This callback procedure may be added to a callback list to release a
+list of previously returned
+<function>XtCacheRef</function>
+values. When adding the
+callback, the callback <emphasis remap='I'>client_data</emphasis> argument must be specified as a
+pointer to a NULL-terminated list of
+<function>XtCacheRef</function>
+values.
+</para>
+
+<para>
+To lookup and call a resource converter, copy the resulting value,
+and free a cached resource when a widget is destroyed, use
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConvertAndStore'>
+<funcprototype>
+<funcdef>Boolean <function>XtConvertAndStore</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>from</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>to_in_out</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value to be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a descriptor for storage into which the converted value
+will be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+function looks up the type converter registered
+to convert <emphasis remap='I'>from_type</emphasis> to <emphasis remap='I'>to_type</emphasis>, computes any additional arguments
+needed, and then calls
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>
+(or
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>
+if an old-style converter was registered with
+<xref linkend='XtAddConverter' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppAddConverter' xrefstyle='select: title'/>;
+see Appendix C) with the <emphasis remap='I'>from</emphasis> and <emphasis remap='I'>to_in_out</emphasis> arguments. The
+<emphasis remap='I'>to_in_out</emphasis> 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 <emphasis remap='I'>size</emphasis> field will be modified on return to indicate the actual
+size of the converted data.
+If the conversion succeeds,
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+returns
+<function>True</function>;
+otherwise, it returns
+<function>False</function>.
+</para>
+
+<para>
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+adds
+<xref linkend='XtCallbackReleaseCacheRef' xrefstyle='select: title'/>
+to the destroyCallback list of the specified object if the conversion
+returns an
+<function>XtCacheRef</function>
+value. The resulting resource should not be referenced
+after the object has been destroyed.
+</para>
+
+<para>
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+performs processing equivalent to
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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
+<function>Boolean</function>
+resource
+XtNinitialResourcesPersistent,
+class
+XtCInitialResourcesPersistent.
+</para>
+
+<para>
+When
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+is called, if this resource is not specified as
+<function>False</function>
+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
+<function>True</function>;
+thus clients that expect to destroy one or
+more objects and want resources deallocated must explicitly specify
+<function>False</function>
+for
+XtNinitialResourcesPersistent.
+</para>
+
+<para>
+The resources are still freed and destructors called when
+<xref linkend='XtCloseDisplay' xrefstyle='select: title'/>
+is called if the conversion was registered as
+<function>XtCacheByDisplay</function>.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Reading_and_Writing_Widget_State">
+<title>Reading and Writing Widget State</title>
+<para>
+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.
+</para>
+<sect2 id="Obtaining_Widget_State">
+<title>Obtaining Widget State</title>
+<para>
+To retrieve the current values of resources associated with a
+widget instance, use
+<xref linkend='XtGetValues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetValues'>
+<funcprototype>
+<funcdef>void <function>XtGetValues</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object whose resource values are to be returned. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+function starts with the resources specified for the Object class
+and proceeds down the subclass chain to the class of the object.
+The <emphasis remap='I'>value</emphasis> 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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Not valid following any operation that modifies the resource:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+XtNchildren resource of composite widgets.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+All resources of representation type XtRCallback.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+Remain valid at least until the widget is destroyed:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+XtNaccelerators, XtNtranslations.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem>
+ <para>
+Remain valid until the Display is closed:
+ </para>
+ </listitem>
+ <listitem>
+ <itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+XtNscreen.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+If the class of the object's parent is a subclass of
+<function>constraintWidgetClass</function>,
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+then fetches the values for any constraint resources requested.
+It starts with the constraint resources specified for
+<function>constraintWidgetClass</function>
+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
+<xref linkend='XtGetValues' xrefstyle='select: title'/>.
+Finally, if the object's parent is a
+subclass of
+<function>constraintWidgetClass</function>,
+and if any of the parent's class or
+superclass records have declared
+<function>ConstraintClassExtension</function>
+records in
+the Constraint class part <emphasis remap='I'>extension</emphasis> field with a record type of
+<emphasis role='strong'>NULLQUARK</emphasis>,
+and if the <emphasis remap='I'>get_values_hook</emphasis> field in the extension record is non-NULL,
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+calls the get_values_hook procedures in superclass-to-subclass order.
+This permits a Constraint parent to provide
+nonresource data via
+<xref linkend='XtGetValues' xrefstyle='select: title'/>.
+</para>
+
+<para>
+Get_values_hook procedures may modify the data stored at the
+location addressed by the <emphasis remap='I'>value</emphasis> 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.
+</para>
+
+<para>
+To retrieve the current values of resources associated with a widget
+instance using varargs lists, use
+<xref linkend='XtVaGetValues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaGetValues'>
+<funcprototype>
+<funcdef>void <function>XtVaGetValues</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef><parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object whose resource values are to be returned. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list for the resources to
+be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaGetValues' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis>
+and <emphasis remap='I'>num_args</emphasis> 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
+<function>XtVaTypedArg</function>
+is specified, the <emphasis remap='I'>type</emphasis> argument
+specifies the representation desired by the caller and <emphasis remap='I'>the</emphasis> 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.
+</para>
+<sect3 id="Widget_Subpart_Resource_Data_The_get_values_hook_Procedure">
+<title>Widget Subpart Resource Data: The get_values_hook Procedure</title>
+<para>
+Widgets that have subparts can return resource values from them through
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+by supplying a get_values_hook procedure.
+The get_values_hook procedure pointer is of type
+<xref linkend='XtArgsProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='_XtArgsProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtArgsProc)</function></funcdef>
+
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget whose subpart resource values are to be retrieved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list that was passed to
+<xref linkend='XtGetValues' xrefstyle='select: title'/>
+or the transformed varargs list passed to
+<xref linkend='XtVaGetValues' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The widget with subpart resources should call
+<xref linkend='XtGetSubvalues' xrefstyle='select: title'/>
+in the get_values_hook procedure
+and pass in its subresource list and the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters.
+</para>
+</sect3>
+<sect3 id="Widget_Subpart_State">
+<title>Widget Subpart State</title>
+<para>
+To retrieve the current values of subpart resource data associated with a
+widget instance, use
+<xref linkend='XtGetSubvalues' xrefstyle='select: title'/>.
+For a discussion of subpart resources,
+see <xref linkend='Subresources' />.
+</para>
+
+<funcsynopsis id='XtGetSubvalues'>
+<funcprototype>
+<funcdef>void <function>XtGetSubvalues</function></funcdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure for which the
+resources should be retrieved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the subpart resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSubvalues' xrefstyle='select: title'/>
+function obtains resource values from the structure identified by <emphasis remap='I'>base</emphasis>.
+The <emphasis remap='I'>value</emphasis> 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.
+</para>
+
+<para>
+To retrieve the current values of subpart resources associated with
+a widget instance using varargs lists, use
+<xref linkend='XtVaGetSubvalues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaGetSubvalues'>
+<funcprototype>
+<funcdef>void <function>XtVaGetSubvalues</function></funcdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+ <paramdef> <parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure for which the
+resources should be retrieved.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the subpart resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaGetSubvalues' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtGetSubvalues' xrefstyle='select: title'/>
+with the
+<emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list, as described
+in Section 2.5.1.
+<function>XtVaTypedArg</function>
+is not supported for
+<xref linkend='XtVaGetSubvalues' xrefstyle='select: title'/>.
+If
+<function>XtVaTypedArg</function>
+is specified in the list, a warning message is issued
+and the entry is then ignored.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Setting_Widget_State">
+<title>Setting Widget State</title>
+<para>
+To modify the current values of resources associated with a widget
+instance, use
+<xref linkend='XtSetValues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetValues'>
+<funcprototype>
+<funcdef>void <function>XtSetValues</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object whose resources are to be modified. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list of name/value pairs that contain the
+resources to be modified and their new values.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+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 <emphasis remap='I'>object</emphasis> resource fields with any values
+specified in the argument list.
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+then calls the set_values procedures for the object in superclass-to-subclass
+order.
+If the object has any non-NULL <emphasis remap='I'>set_values_hook</emphasis> fields,
+these are called immediately after the
+corresponding set_values procedure.
+This procedure permits subclasses to set subpart data via
+<xref linkend='XtSetValues' xrefstyle='select: title'/>.
+</para>
+
+<para>
+If the class of the object's parent is a subclass of
+<function>constraintWidgetClass</function>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+also updates the object's constraints.
+It starts with the constraint resources specified for
+<function>constraintWidgetClass</function>
+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
+<function>constraintWidgetClass</function>
+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.
+</para>
+
+<para>
+If the object is of a subclass of
+RectObj,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+determines if a geometry request is needed by comparing the old object to
+the new object.
+If any geometry changes are required,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+restores the original geometry and makes the request on behalf of the widget.
+If the geometry manager returns
+<function>XtGeometryYes</function>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+calls the object's resize procedure.
+If the geometry manager returns
+<function>XtGeometryDone</function>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+continues, as the object's resize procedure should have been called
+by the geometry manager.
+If the geometry manager returns
+<function>XtGeometryNo</function>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+ignores the geometry request and continues.
+If the geometry manager returns
+<function>XtGeometryAlmost</function>,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+calls the set_values_almost procedure,
+which determines what should be done.
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+then repeats this process,
+deciding once more whether the geometry manager should be called.
+</para>
+
+<para>
+Finally, if any of the set_values procedures returned
+<function>True</function>,
+and the widget is realized,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+causes the widget's expose procedure to be invoked by calling
+<function>XClearArea</function>
+on the widget's window.
+</para>
+
+<para>
+To modify the current values of resources associated with a widget
+instance using varargs lists, use
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaSetValues'>
+<funcprototype>
+<funcdef>void <function>XtVaSetValues</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef> <parameter>...</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object whose resources are to be modified. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list of name/value pairs that
+contain the resources to be modified and their new values.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list, as
+described in Section 2.5.1.
+</para>
+<sect3 id="Widget_State_The_set_values_Procedure">
+<title>Widget State: The set_values Procedure</title>
+<para>
+The set_values procedure pointer in a widget class is of type
+<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetValuesFunc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtSetValuesFunc)</function></funcdef>
+
+ <paramdef>Widget <parameter>current</parameter></paramdef>
+ <paramdef>Widget <parameter>request</parameter></paramdef>
+ <paramdef>Widget <parameter>new</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>current</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a copy of the widget as it was before the
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a copy of the widget with all values changed as asked for by the
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+call before any class set_values procedures have been called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>new</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget with the new values that are actually allowed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list passed to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+or the transformed argument list passed to
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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 <emphasis remap='I'>set_values</emphasis> field in the class record.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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?
+</para>
+
+<para>
+The <emphasis remap='I'>request</emphasis> and <emphasis remap='I'>new</emphasis> parameters provide the necessary information.
+The <emphasis remap='I'>request</emphasis> widget is a copy of the widget, updated as originally requested.
+The <emphasis remap='I'>new</emphasis> 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 <emphasis remap='I'>request</emphasis> widget
+unless it must resolve conflicts between the <emphasis remap='I'>current</emphasis> and <emphasis remap='I'>new</emphasis> widgets.
+Any changes the widget needs to make, including geometry changes,
+should be made in the <emphasis remap='I'>new</emphasis> widget.
+</para>
+
+<para>
+In the above example,
+the subclass with the visual surround can see
+if the <emphasis remap='I'>width</emphasis> and <emphasis remap='I'>height</emphasis> in the <emphasis remap='I'>request</emphasis> widget are zero.
+If so,
+it adds its surround size to the <emphasis remap='I'>width</emphasis> and
+<emphasis remap='I'>height</emphasis> fields in the <emphasis remap='I'>new</emphasis> 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.
+</para>
+
+<para>
+The <emphasis remap='I'>new</emphasis> widget is the actual widget instance record.
+Therefore,
+the set_values procedure should do all its work on the <emphasis remap='I'>new</emphasis> widget;
+the <emphasis remap='I'>request</emphasis> widget should never be modified.
+If the set_values procedure needs to call any routines that operate on
+a widget, it should specify <emphasis remap='I'>new</emphasis> as the widget instance.
+</para>
+
+<para>
+Before calling the set_values procedures, the Intrinsics modify the
+resources of the <emphasis remap='I'>request</emphasis> 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 <emphasis remap='I'>args</emphasis>.
+</para>
+
+<para>
+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
+<function>True</function>;
+the X server will eventually generate an
+<function>Expose</function>
+event, if necessary.
+After calling all the set_values procedures,
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+forces a redisplay by calling
+<function>XClearArea</function>
+if any of the set_values procedures returned
+<function>True</function>.
+Therefore, a set_values procedure should not try to do its own redisplaying.
+</para>
+
+<para>
+Set_values procedures should not do any work in response to changes in
+geometry because
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+eventually will perform a geometry request, and that request might be denied.
+If the widget actually changes size in response to a
+call to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>,
+its resize procedure is called.
+Widgets should do any geometry-related work in their resize procedure.
+</para>
+
+<para>
+Note that it is permissible to call
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+before a widget is realized.
+Therefore, the set_values procedure must not assume that the widget is realized.
+</para>
+</sect3>
+<sect3 id="Widget_State_The_set_values_almost_Procedure">
+<title>Widget State: The set_values_almost Procedure</title>
+<para>
+The set_values_almost procedure pointer in the widget class record is of type
+<xref linkend='XtAlmostProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAlmostProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtAlmostProc)</function></funcdef>
+
+ <paramdef>Widget <parameter>old</parameter></paramdef>
+ <paramdef>Widget <parameter>new</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>request</parameter></paramdef>
+ <paramdef>XtWidgetGeometry *<parameter>reply</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>old</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a copy of the object as it was before the
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+call.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>new</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the object instance record.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the original geometry request that was sent to the geometry
+manager that caused
+<function>XtGeometryAlmost</function>
+to be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>reply</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the compromise geometry that was returned by the geometry
+manager with
+<function>XtGeometryAlmost</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most classes inherit the set_values_almost procedure from their superclass by
+specifying
+<function>XtInheritSetValuesAlmost</function>
+in the class initialization.
+The
+set_values_almost procedure in
+<function>rectObjClass</function>
+accepts the compromise suggested.
+</para>
+
+<para>
+The set_values_almost procedure is called when a client tries to set a widget's
+geometry by means of a call to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+and the geometry manager cannot
+satisfy the request but instead returns
+<function>XtGeometryNo</function>
+or
+<function>XtGeometryAlmost</function>
+and a compromise geometry.
+The <emphasis remap='I'>new</emphasis> object is the actual instance record. The <emphasis remap='I'>x</emphasis>, <emphasis remap='I'>y</emphasis>,
+<emphasis remap='I'>width</emphasis>, <emphasis remap='I'>height</emphasis>,
+and <emphasis remap='I'>border_width</emphasis> fields contain the original values as they were
+before the
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+call, and all other fields contain the new
+values. The <emphasis remap='I'>request</emphasis> parameter contains the new geometry request that
+was made to the parent. The <emphasis remap='I'>reply</emphasis> parameter contains
+<emphasis remap='I'>reply-&gt;request_mode</emphasis> equal to zero if the parent returned
+<function>XtGeometryNo</function>
+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 <emphasis remap='I'>request</emphasis> 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 <emphasis remap='I'>reply</emphasis> geometry into the <emphasis remap='I'>request</emphasis> geometry; to attempt an
+alternative geometry, the procedure may modify any part of the <emphasis remap='I'>request</emphasis>
+argument; to terminate the geometry negotiation and retain the
+original geometry, the procedure must set <emphasis remap='I'>request-&gt;request_mode</emphasis> to
+zero. The geometry fields of the <emphasis remap='I'>old</emphasis> and <emphasis remap='I'>new</emphasis> instances must not be modified
+directly.
+</para>
+</sect3>
+<sect3 id="Widget_State_The_ConstraintClassPart_set_values_Procedure">
+<title>Widget State: The ConstraintClassPart set_values Procedure</title>
+<para>
+The constraint set_values procedure pointer is of type
+<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/>.
+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 <emphasis remap='I'>set_values</emphasis> field of the
+<function>ConstraintPart</function>
+if it need not compute anything.
+</para>
+
+<para>
+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 <emphasis remap='I'>height</emphasis> field in the
+widget.
+</para>
+</sect3>
+<sect3 id='Widget_Subpart_State_2'>
+<title>Widget Subpart State</title>
+<para>
+To set the current values of subpart resources associated with a
+widget instance, use
+<xref linkend='XtSetSubvalues' xrefstyle='select: title'/>.
+For a discussion of subpart resources,
+see <xref linkend='Subresources' />.
+</para>
+
+<funcsynopsis id='XtSetSubvalues'>
+<funcprototype>
+<funcdef>void <function>XtSetSubvalues</function></funcdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure into which the
+resources should be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the subpart resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list of name/value pairs that contain the
+resources to be modified and their new values.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetSubvalues' xrefstyle='select: title'/>
+function updates the resource fields of the structure identified by
+<emphasis remap='I'>base</emphasis>. Any specified arguments that do not match an entry in the
+resource list are silently ignored.
+</para>
+
+<para>
+To set the current values of subpart resources associated with
+a widget instance using varargs lists, use
+<xref linkend='XtVaSetSubvalues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaSetSubvalues'>
+<funcprototype>
+<funcdef>void <function>XtVaSetSubvalues</function></funcdef>
+ <paramdef>XtPointer <parameter>base</parameter></paramdef>
+ <paramdef>XtResourceList <parameter>resources</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_resources</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>base</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the base address of the subpart data structure into which the
+resources should be written.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the subpart resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the resource list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list of name/value pairs that
+contain the resources to be modified and their new values.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtVaSetSubvalues' xrefstyle='select: title'/>
+is identical in function to
+<xref linkend='XtSetSubvalues' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list, as
+described in Section 2.5.1.
+<function>XtVaTypedArg</function>
+is not supported for
+<xref linkend='XtVaSetSubvalues' xrefstyle='select: title'/>.
+If an entry containing
+<function>XtVaTypedArg</function>
+is specified in the list, a warning message is issued
+and the entry is ignored.
+</para>
+</sect3>
+
+<sect3 id='Widget_Subpart_Resource_Data_The_set_values_hook_Procedure'>
+<title>Widget Subpart Resource Data: The set_values_hook Procedure</title>
+<note><para>
+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.
+</para>
+</note>
+<para>
+Widgets that have a subpart can set the subpart resource values through
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+by supplying a set_values_hook procedure.
+The set_values_hook procedure pointer in a widget class is of type
+<xref linkend='XtArgsFunc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtArgsFunc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtArgsFunc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Arglist <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget whose subpart resource values are to be changed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list that was passed to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+or the transformed varargs list passed to
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The widget with subpart resources may call
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+from the set_values_hook procedure
+and pass in its subresource list and the
+<emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters.
+</para>
+</sect3>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH10 b/libXt/specs/CH10
deleted file mode 100644
index b7c0139ca..000000000
--- a/libXt/specs/CH10
+++ /dev/null
@@ -1,1521 +0,0 @@
-.\" $Xorg: CH10,v 1.3 2000/08/17 19:42:46 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 10\fP\s-1
-
-\s+1\fBTranslation Management\s-1
-.sp 2
-.nr H1 10
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 10 \(em Translation Management
-.XE
-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.
-.LP
-The translation manager provides an interface to specify and manage the
-mapping of X event sequences into widget-supplied functionality,
-for example, calling procedure \fIAbc\fP when the \fIy\fP key
-is pressed.
-.LP
-The translation manager uses two kinds of tables to perform translations:
-.IP \(bu 5
-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.
-.IP \(bu 5
-A translation table, which is in the widget class structure,
-specifies the mapping of event sequences to procedure name strings.
-.LP
-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 Section 10.3.
-
-.NH 2
-Action Tables
-.XS
-\fB\*(SN Action Tables\fP
-.XE
-.LP
-All widget class records contain an action table,
-an array of
-.PN 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
-.PN XtActionProc .
-.LP
-.IN "action_proc procedure" "" "@DEF@"
-.IN "XtActionProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtActionProc)(Widget, XEvent*, String*, Cardinal*);
-.br
- Widget \fIw\fP;
-.br
- XEvent *\fIevent\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that caused the action to be called.
-.IP \fIevent\fP 1i
-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.
-.IP \fIparams\fP 1i
-Specifies a pointer to the list of strings that were specified
-in the translation table as arguments to the action, or NULL.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.IN "XtActionsRec"
-.IN "XtActionList"
-.LP
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _XtActionsRec {
- String string;
- XtActionProc proc;
-} XtActionsRec, *XtActionList;
-.De
-.LP
-.eM
-The \fIstring\fP field is the name used in translation tables to access
-the procedure.
-The \fIproc\fP field is a pointer to a procedure that implements
-the functionality.
-.LP
-When the action list is specified as the
-.PN CoreClassPart
-\fIactions\fP field, the string pointed to by \fIstring\fP must be
-permanently allocated prior to or during the execution of the class
-initialization procedure and must not be subsequently deallocated.
-.LP
-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.
-.LP
-For example, a Pushbutton widget has procedures to take the following actions:
-.IP \(bu 5
-Set the button to indicate it is activated.
-.IP \(bu 5
-Unset the button back to its normal mode.
-.IP \(bu 5
-Highlight the button borders.
-.IP \(bu 5
-Unhighlight the button borders.
-.IP \(bu 5
-Notify any callbacks that the button has been activated.
-.LP
-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:
-.LP
-.IN "Action Table"
-.Ds
-.TA .5i 1.5i
-.ta .5i 1.5i
-XtActionsRec actionTable[] = {
- {"Set", Set},
- {"Unset", Unset},
- {"Highlight", Highlight},
- {"Unhighlight", Unhighlight}
- {"Notify", Notify},
-};
-.De
-.LP
-The \*(xI 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 \*(xI functions.
-
-.NH 3
-Action Table Registration
-.XS
-\fB\*(SN Action Table Registration\fP
-.XE
-.LP
-.IN "actions"
-The \fIactions\fP and \fInum_actions\fP fields of
-.PN CoreClassPart
-specify the actions implemented by a widget class. These are
-automatically registered with the \*(xI 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 \*(xI may overwrite the storage in order to compile the
-list into an internal representation.
-.sp
-.LP
-To declare an action table within an application
-and register it with the translation manager, use
-.PN XtAppAddActions .
-.LP
-.IN "XtAppAddActions" "" "@DEF@"
-.sM
-.FD 0
-void XtAppAddActions(\fIapp_context\fP, \fIactions\fP, \fInum_actions\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtActionList \fIactions\fP;
-.br
- Cardinal \fInum_actions\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIactions\fP 1i
-Specifies the action table to register.
-.IP \fInum_actions\fP 1i
-Specifies the number of entries in this action table.
-.LP
-.eM
-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 \*(xI register an action table containing
-.PN XtMenuPopup
-and
-.PN XtMenuPopdown
-as part of
-.PN XtCreateApplicationContext .
-
-.NH 3
-Action Names to Procedure Translations
-.XS
-\fB\*(SN Action Names to Procedure Translations\fP
-.XE
-.LP
-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:
-.IP \(bu 5
-The widget's class and all superclass action tables, in subclass-to-superclass
-order.
-.IP \(bu 5
-The parent's class and all superclass action tables, in subclass-to-superclass
-order, then on up the ancestor tree.
-.IP \(bu 5
-The action tables registered with
-.PN XtAppAddActions
-and
-.PN XtAddActions
-from the most recently added table to the oldest table.
-.LP
-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.
-
-.NH 3
-Action Hook Registration
-.XS
-\fB\*(SN Action Hook Registration\fP
-.XE
-.LP
-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
-.PN XtActionHookProc .
-.LP
-.IN "XtActionHookProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtActionHookProc)(Widget, XtPointer, String, XEvent*, \
-String*, Cardinal*);
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- String \fIaction_name\fP;
-.br
- XEvent* \fIevent\fP;
-.br
- String* \fIparams\fP;
-.br
- Cardinal* \fInum_params\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget whose action is about to be dispatched.
-.IP \fIclient_data\fP 1i
-Specifies the application-specific closure that was passed to
-.PN XtAppAddActionHook.
-.IP \fIaction_name\fP 1i
-Specifies the name of the action to be dispatched.
-.IP \fIevent\fP 1i
-Specifies the event argument that will be passed to the action routine.
-.IP \fIparams\fP 1i
-Specifies the action parameters that will be passed to the action routine.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-Action hooks should not modify any of the data pointed to by the
-arguments other than the \fIclient_data\fP argument.
-.sp
-.LP
-To add an action hook, use
-.PN XtAppAddActionHook .
-.LP
-.IN "XtAppAddActionHook" "" "@DEF@"
-.sM
-.FD 0
-XtActionHookId XtAppAddActionHook(\fIapp\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- XtAppContext \fIapp\fP;
-.br
- XtActionHookProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIapp\fP 1i
-Specifies the application context.
-.IP \fIproc\fP 1i
-Specifies the action hook procedure.
-.IP \fIclient_data\fP 1i
-Specifies application-specific data to be passed to the action hook.
-.LP
-.eM
-.PN 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
-.PN XtCallActionProc ,
-the action hook procedures will be called in reverse
-order of registration just prior to invoking the action routine.
-.LP
-Action hook procedures are removed automatically and the
-.PN XtActionHookId is
-destroyed when the application context in which
-they were added is destroyed.
-.sp
-.LP
-To remove an action hook procedure without destroying the application
-context, use
-.PN XtRemoveActionHook .
-.LP
-.IN "XtRemoveActionHook" "" "@DEF@"
-.sM
-.FD 0
-void XtRemoveActionHook(\fIid\fP)
-.br
- XtActionHookId \fIid\fP;
-.FN
-.IP \fIid\fP 1i
-Specifies the action hook id returned by
-.PN XtAppAddActionHook .
-.LP
-.eM
-.PN XtRemoveActionHook
-removes the specified action hook procedure from
-the list in which it was registered.
-
-.NH 2
-Translation Tables
-.XS
-\fB\*(SN Translation Tables\fP
-.XE
-.LP
-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.
-.LP
-As an example, the default behavior of Pushbutton is
-.IP \(bu 5
-Highlight on enter window.
-.IP \(bu 5
-Unhighlight on exit window.
-.IP \(bu 5
-Invert on left button down.
-.IP \(bu 5
-Call callbacks and reinvert on left button up.
-.LP
-The following illustrates Pushbutton's default translation table:
-.LP
-.IN "Translation tables"
-.Ds
-.TA .5i 1.5i
-.ta .5i 1.5i
-static String defaultTranslations =
- "<EnterWindow>: Highlight()\\n\\
- <LeaveWindow>: Unhighlight()\\n\\
- <Btn1Down>: Set()\\n\\
- <Btn1Up>: Notify() Unset()";
-.De
-.LP
-The \fItm_table\fP field of the
-.PN 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
-.PN XtInheritTranslations
-into \fItm_table\fP.
-In Core's class part initialization procedure,
-the \*(xI 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 Section 10.3.
-.LP
-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
-.PN XtParseTranslationTable .
-.LP
-The \*(xI 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.
-
-.NH 3
-Event Sequences
-.XS
-\fB\*(SN Event Sequences\fP
-.XE
-.LP
-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.
-.LP
-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.
-
-.NH 3
-Action Sequences
-.XS
-\fB\*(SN Action Sequences\fP
-.XE
-.LP
-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.
-
-.NH 3
-Multi-Click Time
-.XS
-\fB\*(SN Multi-Click Time\fP
-.XE
-.LP
-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
-.IN "multiClickTime" "" "@DEF@"
-.IN "Resources" "multiClickTime"
-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
-.PN XtDisplayInitialize .
-If no value is specified, the initial value is 200 milliseconds.
-.sp
-.LP
-To set the multi-click time dynamically, use
-.PN XtSetMultiClickTime .
-.LP
-.IN "XtSetMultiClickTime" "" "@DEF@"
-.sM
-.FD 0
-void XtSetMultiClickTime(\fIdisplay\fP, \fItime\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- int \fItime\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display connection.
-.IP \fItime\fP 1i
-Specifies the multi-click time in milliseconds.
-.LP
-.eM
-.PN XtSetMultiClickTime
-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
-.PN ButtonPress
-events) must be less than the
-multi-click time in order for the translation actions to be taken.
-.sp
-.LP
-To read the multi-click time, use
-.PN XtGetMultiClickTime .
-.LP
-.IN "XtGetMultiClickTime" "" "@DEF@"
-.sM
-.FD 0
-int XtGetMultiClickTime(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display connection.
-.LP
-.eM
-.PN 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.
-
-.NH 2
-Translation Table Management
-.XS
-\fB\*(SN Translation Table Management\fP
-.XE
-.LP
-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.
-.LP
-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.
-.LP
-Three \*(xI functions support this merging:
-.TS
-lw(2i) lw(3.75i).
-T{
-.PN XtParseTranslationTable
-T} T{
-Compiles a translation table.
-T}
-.sp
-T{
-.PN XtAugmentTranslations
-T} T{
-Merges a compiled translation table into a widget's
-compiled translation table, ignoring any new translations that
-conflict with existing translations.
-T}
-.sp
-T{
-.PN XtOverrideTranslations
-T} T{
-Merges a compiled translation table into a widget's
-compiled translation table, replacing any existing translations that
-conflict with new translations.
-T}
-.TE
-.sp
-.LP
-To compile a translation table, use
-.PN XtParseTranslationTable .
-.LP
-.IN "XtParseTranslationTable" "" "@DEF@"
-.sM
-.FD 0
-XtTranslations XtParseTranslationTable(\fItable\fP)
-.br
- String \fItable\fP;
-.FN
-.IP \fItable\fP 1i
-Specifies the translation table to compile.
-.LP
-.eM
-The
-.PN XtParseTranslationTable
-function compiles the translation table, provided in the format given
-in Appendix B, into an opaque internal representation
-of type
-.PN XtTranslations .
-Note that if an empty translation table is required for any purpose,
-one can be obtained by calling
-.PN XtParseTranslationTable
-and passing an empty string.
-.sp
-.LP
-To merge additional translations into an existing translation table, use
-.PN XtAugmentTranslations .
-.LP
-.IN "XtAugmentTranslations" "" "@DEF@"
-.sM
-.FD 0
-void XtAugmentTranslations(\fIw\fP, \fItranslations\fP)
-.br
- Widget \fIw\fP;
-.br
- XtTranslations \fItranslations\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget into which the new translations are to be merged. \*(cI
-.IP \fItranslations\fP 1i
-Specifies the compiled translation table to merge in.
-.LP
-.eM
-The
-.PN XtAugmentTranslations
-function merges the new translations into the existing widget
-translations, ignoring any
-.PN #replace ,
-.PN #augment ,
-or
-.PN #override
-directive that may have been specified
-in the translation string. The translation table specified by
-\fItranslations\fP is not altered by this process.
-.PN XtAugmentTranslations
-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.
-.sp
-.LP
-To overwrite existing translations with new translations, use
-.PN XtOverrideTranslations .
-.LP
-.IN "XtOverrideTranslations" "" "@DEF@"
-.sM
-.FD 0
-void XtOverrideTranslations(\fIw\fP, \fItranslations\fP)
-.br
- Widget \fIw\fP;
-.br
- XtTranslations \fItranslations\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget into which the new translations are to be merged. \*(cI
-.IP \fItranslations\fP 1i
-Specifies the compiled translation table to merge in.
-.LP
-.eM
-The
-.PN XtOverrideTranslations
-function merges the new translations into the existing widget
-translations, ignoring any
-.PN #replace ,
-.PN #augment ,
-or
-.PN #override
-directive that may have been
-specified in the translation string. The translation table
-specified by \fItranslations\fP is not altered by this process.
-.PN XtOverrideTranslations
-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.
-.LP
-To replace a widget's translations completely, use
-.PN XtSetValues
-on the XtNtranslations resource and specify a compiled translation table
-as the value.
-.sp
-.LP
-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.
-.LP
-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 \fItranslations\fP 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 \fItranslations\fP 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.
-.sp
-.LP
-To completely remove existing translations, use
-.PN XtUninstallTranslations .
-.LP
-.IN "XtUninstallTranslations" "" "@DEF@"
-.sM
-.FD 0
-void XtUninstallTranslations(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget from which the translations are to be removed. \*(cI
-.LP
-.eM
-The
-.PN XtUninstallTranslations
-function causes the entire translation table for the widget to be removed.
-
-.NH 2
-Using Accelerators
-.XS
-\fB\*(SN Using Accelerators\fP
-.XE
-.LP
-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 \*(xI provide a facility, called accelerators, that lets you
-accomplish this.
-.IN "Accelerator" "" "@DEF@"
-An accelerator table is a translation table that is bound with its
-actions in the context of a particular widget, the \fIsource\fP widget.
-The accelerator table can then be installed on one or more \fIdestination\fP 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.
-.LP
-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
-.PN XtStringProc .
-.LP
-.IN "display_accelerator procedure" "" "@DEF@"
-.IN "XtStringProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtStringProc)(Widget, String);
-.br
- Widget \fIw\fP;
-.br
- String \fIstring\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the source widget that supplied the accelerators.
-.IP \fIstring\fP 1i
-Specifies the string representation of the accelerators for this widget.
-.LP
-.eM
-Accelerators can be specified in resource files,
-and the string representation is the same as for a translation table.
-However,
-the interpretation of the
-.PN #augment
-and
-.PN #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
-.PN #augment ,
-which means that the accelerator translations have lower priority
-than the destination translations.
-The
-.PN #replace
-directive is ignored for accelerator tables.
-.sp
-.LP
-To parse an accelerator table, use
-.PN XtParseAcceleratorTable .
-.LP
-.IN "XtParseAcceleratorTable" "" "@DEF@"
-.sM
-.FD 0
-XtAccelerators XtParseAcceleratorTable(\fIsource\fP)
-.br
- String \fIsource\fP;
-.FN
-.IP \fIsource\fP 1i
-Specifies the accelerator table to compile.
-.LP
-.eM
-The
-.PN XtParseAcceleratorTable
-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.
-.sp
-.LP
-To install accelerators from a widget on another widget, use
-.PN XtInstallAccelerators .
-.LP
-.IN "XtInstallAccelerators" "" "@DEF@"
-.sM
-.FD 0
-void XtInstallAccelerators(\fIdestination\fP, \fIsource\fP)
-.br
- Widget \fIdestination\fP;
-.br
- Widget \fIsource\fP;
-.FN
-.IP \fIdestination\fP 1i
-Specifies the widget on which the accelerators are to be installed. \*(cI
-.IP \fIsource\fP 1i
-Specifies the widget from which the accelerators are to come. \*(cI
-.LP
-.eM
-The
-.PN XtInstallAccelerators
-function installs the \fIaccelerators\fP resource value from
-\fIsource\fP onto \fIdestination\fP
-by merging the source accelerators into the destination translations.
-If the source \fIdisplay_accelerator\fP field is non-NULL,
-.PN 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.
-.sp
-.LP
-As a convenience for installing all accelerators from a widget and all its
-descendants onto one destination, use
-.PN XtInstallAllAccelerators .
-.LP
-.IN "XtInstallAllAccelerators" "" "@DEF@"
-.sM
-.FD 0
-void XtInstallAllAccelerators(\fIdestination\fP, \fIsource\fP)
-.br
- Widget \fIdestination\fP;
-.br
- Widget \fIsource\fP;
-.FN
-.IP \fIdestination\fP 1i
-Specifies the widget on which the accelerators are to be installed. \*(cI
-.IP \fIsource\fP 1i
-Specifies the root widget of the widget tree
-from which the accelerators are to come. \*(cI
-.LP
-.eM
-The
-.PN XtInstallAllAccelerators
-function recursively descends the widget tree rooted at \fIsource\fP
-and installs the accelerators resource value
-of each widget encountered onto \fIdestination\fP.
-A common use is to call
-.PN XtInstallAllAccelerators
-and pass the application main window as the source.
-
-.NH 2
-KeyCode-to-KeySym Conversions
-.XS
-\*(SN KeyCode-to-KeySym Conversions
-.XE
-.LP
-The translation manager provides support for automatically translating
-KeyCodes in incoming key events into KeySyms.
-KeyCode-to-KeySym translator procedure pointers are of type
-.PN XtKeyProc .
-.LP
-.IN "XtKeyProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtKeyProc)(Display*, KeyCode, Modifiers, Modifiers*, \
-KeySym*);
-.br
- Display *\fIdisplay\fP;
-.br
- KeyCode \fIkeycode\fP;
-.br
- Modifiers \fImodifiers\fP;
-.br
- Modifiers *\fImodifiers_return\fP;
-.br
- KeySym *\fIkeysym_return\fP;
-.FN
-.IP \fIdisplay\fP 1.1i
-Specifies the display that the KeyCode is from.
-.IP \fIkeycode\fP 1.1i
-Specifies the KeyCode to translate.
-.IP \fImodifiers\fP 1.1i
-Specifies the modifiers to the KeyCode.
-.IP \fImodifiers_return\fP 1.1i
-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.
-.IP \fIkeysym_return\fP 1.1i
-Specifies a location in which to store the resulting KeySym.
-.LP
-.eM
-This procedure takes a KeyCode and modifiers and produces a KeySym.
-For any given key translator function and keyboard encoding,
-\fImodifiers_return\fP will be a constant per KeyCode that indicates
-the subset of all modifiers that are examined by the key translator
-for that KeyCode.
-.LP
-The KeyCode-to-KeySym translator procedure
-must be implemented such that multiple calls with the same
-\fIdisplay\fP, \fIkeycode\fP, and \fImodifiers\fP return the same
-result until either a new case converter, an
-.PN XtCaseProc ,
-is installed or a
-.PN MappingNotify
-event is received.
-
-.sp
-.LP
-The \*(xI 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.
-.LP
-To return a pointer to the KeySym-to-KeyCode mapping table for a
-particular display, use
-.PN XtGetKeysymTable .
-.LP
-.IN "XtGetKeysymTable" "" "@DEF@"
-.sM
-.FD 0
-KeySym *XtGetKeysymTable(\fIdisplay\fP, \fImin_keycode_return\fP, \
-\fIkeysyms_per_keycode_return\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- KeyCode *\fImin_keycode_return\fP;
-.br
- int *\fIkeysyms_per_keycode_return\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display whose table is required.
-.IP \fImin_keycode_return\fP 1i
-Returns the minimum KeyCode valid for the display.
-.IP \fIkeysyms_per_keycode_return\fP 1i
-Returns the number of KeySyms stored for each KeyCode.
-.LP
-.eM
-.PN XtGetKeysymTable
-returns a pointer to the \*(xI' copy of the
-server's KeyCode-to-KeySym table. This table must not be modified.
-There are \fIkeysyms_per_keycode_return\fP KeySyms associated with each
-KeyCode, located in the table with indices starting at index
-.IP
- (test_keycode - min_keycode_return) * keysyms_per_keycode_return
-.LP
-for KeyCode \fItest_keycode\fP. Any entries that have no KeySyms associated
-with them contain the value
-.PN NoSymbol .
-Clients should not cache the KeySym table but should call
-.PN XtGetKeysymTable
-each time the value is
-needed, as the table may change prior to dispatching each event.
-.LP
-For more information on this table, see Section 12.7 in \fI\*(xL\fP.
-.sp
-.LP
-To register a key translator, use
-.PN XtSetKeyTranslator .
-.LP
-.IN "XtSetKeyTranslator" "" "@DEF@"
-.sM
-.FD 0
-void XtSetKeyTranslator(\fIdisplay\fP, \fIproc\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- XtKeyProc \fIproc\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display from which to translate the events.
-.IP \fIproc\fP 1i
-Specifies the procedure to perform key translations.
-.LP
-.eM
-The
-.PN XtSetKeyTranslator
-function sets the specified procedure as the current key translator.
-The default translator is
-.PN XtTranslateKey ,
-an
-.PN XtKeyProc
-that uses the Shift, Lock, numlock, and group modifiers
-with the interpretations defined in \fI\*(xP\fP, 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.
-.sp
-.LP
-To invoke the currently registered KeyCode-to-KeySym translator,
-use
-.PN XtTranslateKeycode .
-.LP
-.IN "XtTranslateKeycode" "" "@DEF@"
-.sM
-.FD 0
-void XtTranslateKeycode(\fIdisplay\fP, \fIkeycode\fP, \fImodifiers\fP, \
-\fImodifiers_return\fP, \fIkeysym_return\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- KeyCode \fIkeycode\fP;
-.br
- Modifiers \fImodifiers\fP;
-.br
- Modifiers *\fImodifiers_return\fP;
-.br
- KeySym *\fIkeysym_return\fP;
-.FN
-.IP \fIdisplay\fP 1.1i
-Specifies the display that the KeyCode is from.
-.IP \fIkeycode\fP 1.1i
-Specifies the KeyCode to translate.
-.IP \fImodifiers\fP 1.1i
-Specifies the modifiers to the KeyCode.
-.IP \fImodifiers_return\fP 1.1i
-Returns a mask that indicates the modifiers actually used
-to generate the KeySym.
-.IP \fIkeysym_return\fP 1.1i
-Returns the resulting KeySym.
-.LP
-.eM
-The
-.PN XtTranslateKeycode
-function passes the specified arguments
-directly to the currently registered KeyCode-to-KeySym translator.
-.sp
-.LP
-To handle capitalization of nonstandard KeySyms, the \*(xI allow
-clients to register case conversion routines.
-Case converter procedure pointers are of type
-.PN XtCaseProc .
-.LP
-.IN "XtCaseProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtCaseProc)(Display*, KeySym, KeySym*, KeySym*);
-.br
- Display *\fIdisplay\fP;
-.br
- KeySym \fIkeysym\fP;
-.br
- KeySym *\fIlower_return\fP;
-.br
- KeySym *\fIupper_return\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display connection for which the conversion is required.
-.IP \fIkeysym\fP 1i
-Specifies the KeySym to convert.
-.IP \fIlower_return\fP 1i
-Specifies a location into which to store the lowercase equivalent for
-the KeySym.
-.IP \fIupper_return\fP 1i
-Specifies a location into which to store the uppercase equivalent for
-the KeySym.
-.LP
-.eM
-If there is no case distinction,
-this procedure should store the KeySym into both return values.
-.sp
-.LP
-To register a case converter, use
-.PN XtRegisterCaseConverter .
-.LP
-.IN "XtRegisterCaseConverter" "" "@DEF@"
-.sM
-.FD 0
-void XtRegisterCaseConverter(\fIdisplay\fP, \fIproc\fP, \fIstart\fP, \fIstop\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- XtCaseProc \fIproc\fP;
-.br
- KeySym \fIstart\fP;
-.br
- KeySym \fIstop\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display from which the key events are to come.
-.IP \fIproc\fP 1i
-Specifies the
-.PN XtCaseProc
-to do the conversions.
-.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.
-.LP
-.eM
-The
-.PN XtRegisterCaseConverter
-registers the specified case converter.
-The \fIstart\fP and \fIstop\fP 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 refresh the keyboard state if necessary.
-The default converter understands case conversion for all
-Latin KeySyms defined in \fI\*(xP\fP, Appendix A.
-.sp
-.LP
-To determine uppercase and lowercase equivalents for a KeySym, use
-.PN XtConvertCase .
-.LP
-.IN "XtConvertCase" "" "@DEF@"
-.sM
-.FD 0
-void XtConvertCase(\fIdisplay\fP, \fIkeysym\fP, \fIlower_return\fP, \
-\fIupper_return\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- KeySym \fIkeysym\fP;
-.br
- KeySym *\fIlower_return\fP;
-.br
- KeySym *\fIupper_return\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display that the KeySym came from.
-.IP \fIkeysym\fP 1i
-Specifies the KeySym to convert.
-.IP \fIlower_return\fP 1i
-Returns the lowercase equivalent of the KeySym.
-.IP \fIupper_return\fP 1i
-Returns the uppercase equivalent of the KeySym.
-.LP
-.eM
-The
-.PN XtConvertCase
-function calls the appropriate converter and returns the results.
-A user-supplied
-.PN XtKeyProc
-may need to use this function.
-
-.NH 2
-Obtaining a KeySym in an Action Procedure
-.XS
-\fB\*(SN Obtaining a KeySym in an Action Procedure\fP
-.XE
-.LP
-When an action procedure is invoked on a
-.PN KeyPress
-or
-.PN 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
-\*(xI 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.
-.LP
-To retrieve the KeySym and modifiers that matched the final event
-specification in the translation table entry, use
-.PN XtGetActionKeysym .
-.LP
-.IN "XtGetActionKeysym" "" "@DEF@"
-.sM
-.FD 0
-KeySym XtGetActionKeysym(\fIevent\fP, \fImodifiers_return\fP)
-.br
- XEvent *\fIevent\fP;
-.br
- Modifiers *\fImodifiers_return\fP;
-.FN
-.IP \fIevent\fP 1.25i
-Specifies the event pointer passed to the action procedure by the \*(xI.
-.IP \fImodifiers_return\fP 1.25i
-Returns the modifiers that caused the match, if non-NULL.
-.LP
-.eM
-If
-.PN XtGetActionKeysym
-is called after an action procedure has been
-invoked by the \*(xI 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
-.PN KeyPress
-or
-.PN KeyRelease
-event, then
-.PN 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
-.PN KeyPress
-or
-.PN KeyRelease
-event, then
-.PN XtGetActionKeysym
-calls
-.PN XtTranslateKeycode
-and returns the results;
-else it returns
-.PN NoSymbol
-and does not examine \fImodifiers_return\fP.
-.LP
-Note that if an action procedure invoked by the \*(xI
-invokes a subsequent action procedure (and so on) via
-.PN XtCallActionProc ,
-the nested action procedure may also call
-.PN XtGetActionKeysym
-to retrieve the \*(xI' KeySym and modifiers.
-
-.NH 2
-KeySym-to-KeyCode Conversions
-.XS
-\*(SN KeySym-to-KeyCode Conversions
-.XE
-.LP
-To return the list of KeyCodes that map to a particular KeySym in
-the keyboard mapping table maintained by the \*(xI, use
-.PN XtKeysymToKeycodeList .
-.LP
-.IN "XtKeysymToKeycodeList" "" "@DEF@"
-.sM
-.FD 0
-void XtKeysymToKeycodeList(\fIdisplay\fP, \fIkeysym\fP, \fIkeycodes_return\fP, \
-\fIkeycount_return\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- KeySym \fIkeysym\fP;
-.br
- KeyCode **\fIkeycodes_return\fP;
-.br
- Cardinal *\fIkeycount_return\fP;
-.FN
-.IP \fIdisplay\fP 1.25i
-Specifies the display whose table is required.
-.IP \fIkeysym\fP 1.25i
-Specifies the KeySym for which to search.
-.IP \fIkeycodes_return\fP 1.25i
-Returns a list of KeyCodes that have \fIkeysym\fP
-associated with them, or NULL if \fIkeycount_return\fP is 0.
-.IP \fIkeycount_return\fP 1.25i
-Returns the number of KeyCodes in the keycode list.
-.LP
-.eM
-The
-.PN XtKeysymToKeycodeList
-procedure returns all the KeyCodes that have \fIkeysym\fP
-in their entry for the keyboard mapping table associated with \fIdisplay\fP.
-For each entry in the
-table, the first four KeySyms (groups 1 and 2) are interpreted as
-specified by \fI\*(xP\fP, Section 5. If no KeyCodes map to the
-specified KeySym, \fIkeycount_return\fP is zero and *\fIkeycodes_return\fP is NULL.
-.LP
-The caller should free the storage pointed to by \fIkeycodes_return\fP using
-.PN XtFree
-when it is no longer useful. If the caller needs to examine
-the KeyCode-to-KeySym table for a particular KeyCode, it should call
-.PN XtGetKeysymTable .
-
-.NH 2
-Registering Button and Key Grabs for Actions
-.XS
-\fB\*(SN Registering Button and Key Grabs for Actions\fP
-.XE
-.LP
-To register button and key grabs for a widget's window according to the
-event bindings in the widget's translation table, use
-.PN XtRegisterGrabAction .
-.LP
-.IN "XtRegisterGrabAction" "" "@DEF@"
-.sM
-.FD 0
-void XtRegisterGrabAction(\fIaction_proc\fP, \fIowner_events\fP, \
-\fIevent_mask\fP, \fIpointer_mode\fP, \fIkeyboard_mode\fP)
-.br
- XtActionProc \fIaction_proc\fP;
-.br
- Boolean \fIowner_events\fP;
-.br
- unsigned int \fIevent_mask\fP;
-.br
- int \fIpointer_mode\fP, \fIkeyboard_mode\fP;
-.FN
-.IP \fIaction_proc\fP 1i
-Specifies the action procedure to search for in translation tables.
-.sp
-.IP \fIowner_events\fP
-.br
-.ns
-.IP \fIevent_mask\fP
-.br
-.ns
-.IP \fIpointer_mode\fP
-.br
-.ns
-.IP \fIkeyboard_mode\fP 1i
-Specify arguments to
-.PN XtGrabButton
-or
-.PN XtGrabKey .
-.LP
-.eM
-.PN XtRegisterGrabAction
-adds the specified \fIaction_proc\fP 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
-.PN ButtonPress
-or
-.PN KeyPress
-events as the only or final event
-in a sequence, the \*(xI will call
-.PN XtGrabButton
-or
-.PN XtGrabKey
-for the widget with every button or KeyCode which maps to the
-event detail field, passing the specified \fIowner_events\fP, \fIevent_mask\fP,
-\fIpointer_mode\fP, and \fIkeyboard_mode\fP. For
-.PN ButtonPress
-events, the modifiers
-specified in the grab are determined directly from the translation
-specification and \fIconfine_to\fP and \fIcursor\fP are specified as
-.PN None .
-For
-.PN 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
-.PN XtGrabKey
-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 \fIevent_mask\fP 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
-.PN ButtonPress
-and
-.PN KeyPress
-events, don't-care modifiers are ignored unless the translation entry
-explicitly specifies ``Any'' in the \fImodifiers\fP field.
-.LP
-If the specified \fIaction_proc\fP 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.
-.LP
-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
-.PN XtGrabKey
-or
-.PN XtGrabButton .
-
-.NH 2
-Invoking Actions Directly
-.XS
-\fB\*(SN Invoking Actions Directly\fP
-.XE
-.LP
-Normally action procedures are invoked by the \*(xI when an
-event or event sequence arrives for a widget. To
-invoke an action procedure directly, without generating
-(or synthesizing) events, use
-.PN XtCallActionProc .
-.LP
-.IN "XtCallActionProc" "" "@DEF@"
-.sM
-.FD 0
-void XtCallActionProc(\fIwidget\fP, \fIaction\fP, \fIevent\fP, \fIparams\fP, \
-\fInum_params\fP)
-.br
- Widget \fIwidget\fP;
-.br
- String \fIaction\fP;
-.br
- XEvent *\fIevent\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal \fInum_params\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget in which the action is to be invoked. \*(cI
-.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 number of entries in \fIparams\fP.
-.LP
-.eM
-.PN XtCallActionProc
-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
-.PN XtCallActionProc .
-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 \fIevent\fP, \fIparams\fP, and \fInum_params\fP 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,
-.PN XtCallActionProc
-generates a warning message and returns.
-
-.NH 2
-Obtaining a Widget's Action List
-.XS
-\*(SN Obtaining a Widget's Action List
-.XE
-.LP
-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
-\fIactions\fP field, use
-.PN XtGetActionList .
-.LP
-.IN "XtGetActionList" "" "@DEF@"
-.sM
-.FD 0
-void XtGetActionList(\fIwidget_class\fP, \fIactions_return\fP, \
-\fInum_actions_return\fP)
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- XtActionList *\fIactions_return\fP;
-.br
- Cardinal *\fInum_actions_return\fP;
-.FN
-.IP \fIwidget_class\fP 1.5i
-Specifies the widget class whose actions are to be returned.
-.IP \fIactions_return\fP 1.5i
-Returns the action list.
-.IP \fInum_actions_return\fP 1.5i
-Returns the number of action procedures declared by the class.
-.LP
-.eM
-.PN 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
-.PN 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
-.PN XtFree
-when it is no longer needed.
-.bp
diff --git a/libXt/specs/CH10.xml b/libXt/specs/CH10.xml
new file mode 100644
index 000000000..a96d2c427
--- /dev/null
+++ b/libXt/specs/CH10.xml
@@ -0,0 +1,2211 @@
+<chapter id='Translation_Management'>
+<title>Translation Management</title>
+<para>
+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.
+</para>
+
+<para>
+The translation manager provides an interface to specify and manage the
+mapping of X event sequences into widget-supplied functionality,
+for example, calling procedure <emphasis remap='I'>Abc</emphasis> when the <emphasis remap='I'>y</emphasis> key
+is pressed.
+</para>
+
+<para>
+The translation manager uses two kinds of tables to perform translations:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A translation table, which is in the widget class structure,
+specifies the mapping of event sequences to procedure name strings.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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 <xref linkend='Translation_Table_Management' />.
+</para>
+<sect1 id="Action_Tables">
+<title>Action Tables</title>
+<para>
+All widget class records contain an action table,
+an array of
+<function>XtActionsRec</function>
+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
+<xref linkend='XtActionProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtActionProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtActionProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that caused the action to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the list of strings that were specified
+in the translation table as arguments to the action, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<literallayout >
+typedef struct _XtActionsRec {
+ String string;
+ XtActionProc proc;
+} XtActionsRec, *XtActionList;
+</literallayout>
+<para>
+The <emphasis remap='I'>string</emphasis> field is the name used in translation tables to access
+the procedure.
+The <emphasis remap='I'>proc</emphasis> field is a pointer to a procedure that implements
+the functionality.
+</para>
+
+<para>
+When the action list is specified as the
+<function>CoreClassPart</function>
+<emphasis remap='I'>actions</emphasis> field, the string pointed to by <emphasis remap='I'>string</emphasis> must be
+permanently allocated prior to or during the execution of the class
+initialization procedure and must not be subsequently deallocated.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+For example, a Pushbutton widget has procedures to take the following actions:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Set the button to indicate it is activated.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Unset the button back to its normal mode.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Highlight the button borders.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Unhighlight the button borders.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Notify any callbacks that the button has been activated.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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:
+</para>
+<literallayout >
+XtActionsRec actionTable[] = {
+ {"Set", Set},
+ {"Unset", Unset},
+ {"Highlight", Highlight},
+ {"Unhighlight", Unhighlight}
+ {"Notify", Notify},
+};
+</literallayout>
+<para>
+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.
+</para>
+<sect2 id="Action_Table_Registration">
+<title>Action Table Registration</title>
+<para>
+The <emphasis remap='I'>actions</emphasis> and <emphasis remap='I'>num_actions</emphasis> fields of
+<function>CoreClassPart</function>
+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.
+</para>
+
+<para>
+To declare an action table within an application
+and register it with the translation manager, use
+<xref linkend='XtAppAddActions' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddActions'>
+<funcprototype>
+<funcdef>void <function>XtAppAddActions</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtActionList <parameter>actions</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_actions</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>actions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action table to register.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_actions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in this action table.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+and
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+as part of
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>.
+</para>
+</sect2>
+
+<sect2 id="Action_Names_to_Procedure_Translations">
+<title>Action Names to Procedure Translations</title>
+<para>
+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:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+The widget's class and all superclass action tables, in subclass-to-superclass
+order.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The parent's class and all superclass action tables, in subclass-to-superclass
+order, then on up the ancestor tree.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The action tables registered with
+<xref linkend='XtAppAddActions' xrefstyle='select: title'/>
+and
+<xref linkend='XtAddActions' xrefstyle='select: title'/>
+from the most recently added table to the oldest table.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Action_Hook_Registration">
+<title>Action Hook Registration</title>
+<para>
+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
+<xref linkend='XtActionHookProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtActionHookProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtActionHookProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>String <parameter>action_name</parameter></paramdef>
+ <paramdef>XEvent* <parameter>event</parameter></paramdef>
+ <paramdef>String* <parameter>params</parameter></paramdef>
+ <paramdef>Cardinal* <parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget whose action is about to be dispatched.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application-specific closure that was passed to
+<function>XtAppAddActionHook.</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>action_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the action to be dispatched.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event argument that will be passed to the action routine.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action parameters that will be passed to the action routine.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Action hooks should not modify any of the data pointed to by the
+arguments other than the <emphasis remap='I'>client_data</emphasis> argument.
+</para>
+
+<para>
+To add an action hook, use
+<xref linkend='XtAppAddActionHook' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddActionHook'>
+<funcprototype>
+<funcdef>XtActionHookId <function>XtAppAddActionHook</function></funcdef>
+ <paramdef>XtAppContext <parameter>app</parameter></paramdef>
+ <paramdef>XtActionHookProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action hook procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies application-specific data to be passed to the action hook.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppAddActionHook' xrefstyle='select: title'/>
+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
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>,
+the action hook procedures will be called in reverse
+order of registration just prior to invoking the action routine.
+</para>
+
+<para>
+Action hook procedures are removed automatically and the
+<function>XtActionHookId is</function>
+destroyed when the application context in which
+they were added is destroyed.
+</para>
+
+<para>
+To remove an action hook procedure without destroying the application
+context, use
+<xref linkend='XtRemoveActionHook' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRemoveActionHook'>
+<funcprototype>
+<funcdef>void <function>XtRemoveActionHook</function></funcdef>
+ <paramdef>XtActionHookId <parameter>id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action hook id returned by
+<xref linkend='XtAppAddActionHook' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtRemoveActionHook' xrefstyle='select: title'/>
+removes the specified action hook procedure from
+the list in which it was registered.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Translation_Tables">
+<title>Translation Tables</title>
+<para>
+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.
+</para>
+
+<para>
+As an example, the default behavior of Pushbutton is
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Highlight on enter window.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Unhighlight on exit window.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Invert on left button down.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Call callbacks and reinvert on left button up.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The following illustrates Pushbutton's default translation table:
+</para>
+<literallayout >
+static String defaultTranslations =
+ "&lt;EnterWindow&gt;: Highlight()\\n\\
+ &lt;LeaveWindow&gt;: Unhighlight()\\n\\
+ &lt;Btn1Down&gt;: Set()\\n\\
+ &lt;Btn1Up&gt;: Notify() Unset()";
+</literallayout>
+<para>
+The <emphasis remap='I'>tm_table</emphasis> field of the
+<function>CoreClassPart</function>
+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
+<function>XtInheritTranslations</function>
+into <emphasis remap='I'>tm_table</emphasis>.
+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
+<xref linkend='Translation_Table_Management' />.
+</para>
+
+<para>
+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
+<xref linkend='XtParseTranslationTable' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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.
+</para>
+<sect2 id="Event_Sequences">
+<title>Event Sequences</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Action_Sequences">
+<title>Action Sequences</title>
+<para>
+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.
+</para>
+</sect2>
+
+<sect2 id="Multi_Click_Time">
+<title>Multi-Click Time</title>
+<para>
+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
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+If no value is specified, the initial value is 200 milliseconds.
+</para>
+
+<para>
+To set the multi-click time dynamically, use
+<xref linkend='XtSetMultiClickTime' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetMultiClickTime'>
+<funcprototype>
+<funcdef>void <function>XtSetMultiClickTime</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>int <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the multi-click time in milliseconds.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtSetMultiClickTime' xrefstyle='select: title'/>
+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
+<function>ButtonPress</function>
+events) must be less than the
+multi-click time in order for the translation actions to be taken.
+</para>
+
+<para>
+To read the multi-click time, use
+<xref linkend='XtGetMultiClickTime' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetMultiClickTime'>
+<funcprototype>
+<funcdef>int <function>XtGetMultiClickTime</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetMultiClickTime' xrefstyle='select: title'/>
+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.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Translation_Table_Management">
+<title>Translation Table Management</title>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+Three Intrinsics functions support this merging:
+</para>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>XtParseTranslationTable</emphasis>
+ </term>
+ <listitem>
+ <para>Compiles a translation table.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>XtAugmentTranslations</emphasis>
+ </term>
+ <listitem>
+ <para>Merges a compiled translation table into a widget's
+ compiled translation table, ignoring any new translations that
+ conflict with existing translations.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>XtOverrideTranslations</emphasis>
+ </term>
+ <listitem>
+ <para>Merges a compiled translation table into a widget's
+ compiled translation table, replacing any existing translations that
+ conflict with new translations.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To compile a translation table, use
+<xref linkend='XtParseTranslationTable' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtParseTranslationTable'>
+<funcprototype>
+<funcdef>XtTranslations <function>XtParseTranslationTable</function></funcdef>
+ <paramdef>String <parameter>table</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>table</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the translation table to compile.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtParseTranslationTable' xrefstyle='select: title'/>
+function compiles the translation table, provided in the format given
+in Appendix B, into an opaque internal representation
+of type
+<function>XtTranslations</function>.
+Note that if an empty translation table is required for any purpose,
+one can be obtained by calling
+<xref linkend='XtParseTranslationTable' xrefstyle='select: title'/>
+and passing an empty string.
+</para>
+
+<para>
+To merge additional translations into an existing translation table, use
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAugmentTranslations'>
+<funcprototype>
+<funcdef>void <function>XtAugmentTranslations</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtTranslations <parameter>translations</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget into which the new translations are to be merged. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>translations</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the compiled translation table to merge in.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>
+function merges the new translations into the existing widget
+translations, ignoring any
+<function>#replace</function>,
+<function>#augment</function>,
+or
+<function>#override</function>
+directive that may have been specified
+in the translation string. The translation table specified by
+<emphasis remap='I'>translations</emphasis> is not altered by this process.
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To overwrite existing translations with new translations, use
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOverrideTranslations'>
+<funcprototype>
+<funcdef>void <function>XtOverrideTranslations</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtTranslations <parameter>translations</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget into which the new translations are to be merged. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>translations</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the compiled translation table to merge in.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>
+function merges the new translations into the existing widget
+translations, ignoring any
+<function>#replace</function>,
+<function>#augment</function>,
+or
+<function>#override</function>
+directive that may have been
+specified in the translation string. The translation table
+specified by <emphasis remap='I'>translations</emphasis> is not altered by this process.
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To replace a widget's translations completely, use
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+on the XtNtranslations resource and specify a compiled translation table
+as the value.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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 <emphasis remap='I'>translations</emphasis> 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 <emphasis remap='I'>translations</emphasis> 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.
+</para>
+
+<para>
+To completely remove existing translations, use
+<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtUninstallTranslations'>
+<funcprototype>
+<funcdef>void <function>XtUninstallTranslations</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget from which the translations are to be removed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>
+function causes the entire translation table for the widget to be removed.
+</para>
+</sect1>
+
+<sect1 id="Using_Accelerators">
+<title>Using Accelerators</title>
+<para>
+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 <emphasis remap='I'>source</emphasis> widget.
+The accelerator table can then be installed on one or more <emphasis remap='I'>destination</emphasis> 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.
+</para>
+
+<para>
+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
+<xref linkend='XtStringProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtStringProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtStringProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>string</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source widget that supplied the accelerators.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>string</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the string representation of the accelerators for this widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Accelerators can be specified in resource files,
+and the string representation is the same as for a translation table.
+However,
+the interpretation of the
+<function>#augment</function>
+and
+<function>#override</function>
+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
+<function>#augment</function>,
+which means that the accelerator translations have lower priority
+than the destination translations.
+The
+<function>#replace</function>
+directive is ignored for accelerator tables.
+</para>
+
+<para>
+To parse an accelerator table, use
+<xref linkend='XtParseAcceleratorTable' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtParseAcceleratorTable'>
+<funcprototype>
+<funcdef>XtAccelerators <function>XtParseAcceleratorTable</function></funcdef>
+ <paramdef>String <parameter>source</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the accelerator table to compile.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtParseAcceleratorTable' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To install accelerators from a widget on another widget, use
+<xref linkend='XtInstallAccelerators' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInstallAccelerators'>
+<funcprototype>
+<funcdef>void <function>XtInstallAccelerators</function></funcdef>
+ <paramdef>Widget <parameter>destination</parameter></paramdef>
+ <paramdef>Widget <parameter>source</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>destination</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget on which the accelerators are to be installed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget from which the accelerators are to come. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtInstallAccelerators' xrefstyle='select: title'/>
+function installs the <emphasis remap='I'>accelerators</emphasis> resource value from
+<emphasis remap='I'>source</emphasis> onto <emphasis remap='I'>destination</emphasis>
+by merging the source accelerators into the destination translations.
+If the source <emphasis remap='I'>display_accelerator</emphasis> field is non-NULL,
+<xref linkend='XtInstallAccelerators' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+As a convenience for installing all accelerators from a widget and all its
+descendants onto one destination, use
+<xref linkend='XtInstallAllAccelerators' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInstallAllAccelerators'>
+<funcprototype>
+<funcdef>void <function>XtInstallAllAccelerators</function></funcdef>
+ <paramdef>Widget <parameter>destination</parameter></paramdef>
+ <paramdef>Widget <parameter>source</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>destination</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget on which the accelerators are to be installed. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the root widget of the widget tree
+from which the accelerators are to come. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtInstallAllAccelerators' xrefstyle='select: title'/>
+function recursively descends the widget tree rooted at <emphasis remap='I'>source</emphasis>
+and installs the accelerators resource value
+of each widget encountered onto <emphasis remap='I'>destination</emphasis>.
+A common use is to call
+<xref linkend='XtInstallAllAccelerators' xrefstyle='select: title'/>
+and pass the application main window as the source.
+</para>
+</sect1>
+
+<sect1 id="KeyCode_to_KeySym_Conversions">
+<title>KeyCode-to-KeySym Conversions</title>
+<para>
+The translation manager provides support for automatically translating
+KeyCodes in incoming key events into KeySyms.
+KeyCode-to-KeySym translator procedure pointers are of type
+<xref linkend='XtKeyProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtKeyProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtKeyProc)</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeyCode <parameter>keycode</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+ <paramdef>Modifiers *<parameter>modifiers_return</parameter></paramdef>
+ <paramdef>KeySym *<parameter>keysym_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display that the KeyCode is from.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycode</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the KeyCode to translate.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the modifiers to the KeyCode.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>modifiers_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysym_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a location in which to store the resulting KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This procedure takes a KeyCode and modifiers and produces a KeySym.
+For any given key translator function and keyboard encoding,
+<emphasis remap='I'>modifiers_return</emphasis> will be a constant per KeyCode that indicates
+the subset of all modifiers that are examined by the key translator
+for that KeyCode.
+</para>
+
+<para>
+The KeyCode-to-KeySym translator procedure
+must be implemented such that multiple calls with the same
+<emphasis remap='I'>display</emphasis>, <emphasis remap='I'>keycode</emphasis>, and <emphasis remap='I'>modifiers</emphasis> return the same
+result until either a new case converter, an
+<xref linkend='XtCaseProc' xrefstyle='select: title'/>,
+is installed or a
+<function>MappingNotify</function>
+event is received.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+To return a pointer to the KeySym-to-KeyCode mapping table for a
+particular display, use
+<xref linkend='XtGetKeysymTable' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetKeysymTable'>
+<funcprototype>
+<funcdef>KeySym *<function>XtGetKeysymTable</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeyCode *<parameter>min_keycode_return</parameter></paramdef>
+ <paramdef>int *<parameter>keysyms_per_keycode_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display whose table is required.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>min_keycode_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the minimum KeyCode valid for the display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysyms_per_keycode_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the number of KeySyms stored for each KeyCode.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetKeysymTable' xrefstyle='select: title'/>
+returns a pointer to the Intrinsics' copy of the
+server's KeyCode-to-KeySym table. This table must not be modified.
+There are <emphasis remap='I'>keysyms_per_keycode_return</emphasis> KeySyms associated with each
+KeyCode, located in the table with indices starting at index
+</para>
+<literallayout>
+ (test_keycode - min_keycode_return) * keysyms_per_keycode_return
+</literallayout>
+<para>
+for KeyCode <emphasis remap='I'>test_keycode</emphasis>. Any entries that have no KeySyms associated
+with them contain the value
+<function>NoSymbol</function>.
+Clients should not cache the KeySym table but should call
+<xref linkend='XtGetKeysymTable' xrefstyle='select: title'/>
+each time the value is
+needed, as the table may change prior to dispatching each event.
+</para>
+
+<para>
+For more information on this table, see
+<olink targetdoc='libX11' targetptr='Manipulating_the_Keyboard_Encoding'>Section 12.7</olink> in
+<olink targetdoc='libX11' targetptr='libX11'>Xlib — C Language X Interface.</olink>.
+</para>
+
+<para>
+To register a key translator, use
+<xref linkend='XtSetKeyTranslator' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetKeyTranslator'>
+<funcprototype>
+<funcdef>void <function>XtSetKeyTranslator</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>XtKeyProc <parameter>proc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display from which to translate the events.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to perform key translations.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtSetKeyTranslator' xrefstyle='select: title'/>
+function sets the specified procedure as the current key translator.
+The default translator is
+<function>XtTranslateKey</function>,
+an
+<xref linkend='XtKeyProc' xrefstyle='select: title'/>
+that uses the Shift, Lock, numlock, and group modifiers
+with the interpretations defined in <emphasis remap='I'>X Window System Protocol</emphasis>, 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.
+</para>
+
+<para>
+To invoke the currently registered KeyCode-to-KeySym translator,
+use
+<xref linkend='XtTranslateKeycode' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtTranslateKeycode'>
+<funcprototype>
+<funcdef>void <function>XtTranslateKeycode</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeyCode <parameter>keycode</parameter></paramdef>
+ <paramdef>Modifiers <parameter>modifiers</parameter></paramdef>
+ <paramdef>Modifiers *<parameter>modifiers_return</parameter></paramdef>
+ <paramdef>KeySym *<parameter>keysym_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display that the KeyCode is from.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycode</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the KeyCode to translate.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>modifiers</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the modifiers to the KeyCode.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>modifiers_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a mask that indicates the modifiers actually used
+to generate the KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysym_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the resulting KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtTranslateKeycode' xrefstyle='select: title'/>
+function passes the specified arguments
+directly to the currently registered KeyCode-to-KeySym translator.
+</para>
+
+<para>
+To handle capitalization of nonstandard KeySyms, the Intrinsics allow
+clients to register case conversion routines.
+Case converter procedure pointers are of type
+<xref linkend='XtCaseProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCaseProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtCaseProc)</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeySym <parameter>keysym</parameter></paramdef>
+ <paramdef>KeySym *<parameter>lower_return</parameter></paramdef>
+ <paramdef>KeySym *<parameter>upper_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection for which the conversion is required.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysym</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the KeySym to convert.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>lower_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a location into which to store the lowercase equivalent for
+the KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>upper_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a location into which to store the uppercase equivalent for
+the KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If there is no case distinction,
+this procedure should store the KeySym into both return values.
+</para>
+
+<para>
+To register a case converter, use
+<xref linkend='XtRegisterCaseConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRegisterCaseConverter'>
+<funcprototype>
+<funcdef>void <function>XtRegisterCaseConverter</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>XtCaseProc <parameter>proc</parameter></paramdef>
+ <paramdef>KeySym <parameter>start</parameter></paramdef>
+ <paramdef>KeySym <parameter>stop</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display from which the key events are to come.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the
+<xref linkend='XtCaseProc' xrefstyle='select: title'/>
+to do the conversions.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>start</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the first KeySym for which this converter is valid.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>stop</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the last KeySym for which this converter is valid.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRegisterCaseConverter' xrefstyle='select: title'/>
+registers the specified case converter.
+The <emphasis remap='I'>start</emphasis> and <emphasis remap='I'>stop</emphasis> 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 <emphasis remap='I'>X Window System Protocol</emphasis>, Appendix A.
+</para>
+
+<para>
+To determine uppercase and lowercase equivalents for a KeySym, use
+<xref linkend='XtConvertCase' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConvertCase'>
+<funcprototype>
+<funcdef>void <function>XtConvertCase</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeySym <parameter>keysym</parameter></paramdef>
+ <paramdef>KeySym *<parameter>lower_return</parameter></paramdef>
+ <paramdef>KeySym *<parameter>upper_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display that the KeySym came from.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysym</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the KeySym to convert.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>lower_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the lowercase equivalent of the KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>upper_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the uppercase equivalent of the KeySym.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtConvertCase' xrefstyle='select: title'/>
+function calls the appropriate converter and returns the results.
+A user-supplied
+<xref linkend='XtKeyProc' xrefstyle='select: title'/>
+may need to use this function.
+</para>
+</sect1>
+
+<sect1 id="Obtaining_a_KeySym_in_an_Action_Procedure">
+<title>Obtaining a KeySym in an Action Procedure</title>
+<para>
+When an action procedure is invoked on a
+<function>KeyPress</function>
+or
+<function>KeyRelease</function>
+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.
+</para>
+
+<para>
+To retrieve the KeySym and modifiers that matched the final event
+specification in the translation table entry, use
+<xref linkend='XtGetActionKeysym' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetActionKeysym'>
+<funcprototype>
+<funcdef>KeySym <function>XtGetActionKeysym</function></funcdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>Modifiers *<parameter>modifiers_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the event pointer passed to the action procedure by the Intrinsics.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>modifiers_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the modifiers that caused the match, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If
+<xref linkend='XtGetActionKeysym' xrefstyle='select: title'/>
+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
+<function>KeyPress</function>
+or
+<function>KeyRelease</function>
+event, then
+<xref linkend='XtGetActionKeysym' xrefstyle='select: title'/>
+returns the KeySym that matched the final
+event specification in the translation table and, if <emphasis remap='I'>modifiers_return</emphasis>
+is non-NULL, the modifier state actually used to generate this KeySym;
+otherwise, if the event is a
+<function>KeyPress</function>
+or
+<function>KeyRelease</function>
+event, then
+<xref linkend='XtGetActionKeysym' xrefstyle='select: title'/>
+calls
+<xref linkend='XtTranslateKeycode' xrefstyle='select: title'/>
+and returns the results;
+else it returns
+<function>NoSymbol</function>
+and does not examine <emphasis remap='I'>modifiers_return</emphasis>.
+</para>
+
+<para>
+Note that if an action procedure invoked by the Intrinsics
+invokes a subsequent action procedure (and so on) via
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>,
+the nested action procedure may also call
+<xref linkend='XtGetActionKeysym' xrefstyle='select: title'/>
+to retrieve the Intrinsics' KeySym and modifiers.
+</para>
+</sect1>
+
+<sect1 id="KeySym_to_KeyCode_Conversions">
+<title>KeySym-to-KeyCode Conversions</title>
+<para>
+To return the list of KeyCodes that map to a particular KeySym in
+the keyboard mapping table maintained by the Intrinsics, use
+<xref linkend='XtKeysymToKeycodeList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtKeysymToKeycodeList'>
+<funcprototype>
+<funcdef>void <function>XtKeysymToKeycodeList</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>KeySym <parameter>keysym</parameter></paramdef>
+ <paramdef>KeyCode **<parameter>keycodes_return</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>keycount_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display whose table is required.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keysym</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the KeySym for which to search.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycodes_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a list of KeyCodes that have <emphasis remap='I'>keysym</emphasis>
+associated with them, or NULL if <emphasis remap='I'>keycount_return</emphasis> is 0.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keycount_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the number of KeyCodes in the keycode list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtKeysymToKeycodeList' xrefstyle='select: title'/>
+procedure returns all the KeyCodes that have <emphasis remap='I'>keysym</emphasis>
+in their entry for the keyboard mapping table associated with <emphasis remap='I'>display</emphasis>.
+For each entry in the
+table, the first four KeySyms (groups 1 and 2) are interpreted as
+specified by <emphasis remap='I'>X Window System Protocol</emphasis>, Section 5. If no KeyCodes map to the
+specified KeySym, <emphasis remap='I'>keycount_return</emphasis> is zero and *<emphasis remap='I'>keycodes_return</emphasis> is NULL.
+</para>
+
+<para>
+The caller should free the storage pointed to by <emphasis remap='I'>keycodes_return</emphasis> using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer useful. If the caller needs to examine
+the KeyCode-to-KeySym table for a particular KeyCode, it should call
+<xref linkend='XtGetKeysymTable' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Registering_Button_and_Key_Grabs_for_Actions">
+<title>Registering Button and Key Grabs for Actions</title>
+<para>
+To register button and key grabs for a widget's window according to the
+event bindings in the widget's translation table, use
+<xref linkend='XtRegisterGrabAction' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRegisterGrabAction'>
+<funcprototype>
+<funcdef>void <function>XtRegisterGrabAction</function></funcdef>
+ <paramdef>XtActionProc <parameter>action_proc</parameter></paramdef>
+ <paramdef>Boolean <parameter>owner_events</parameter></paramdef>
+ <paramdef>unsigned int <parameter>event_mask</parameter></paramdef>
+ <paramdef>int <parameter>pointer_mode</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>action_proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action procedure to search for in translation tables.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>owner_events</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_mask</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>pointer_mode</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>keyboard_mode</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify arguments to
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtRegisterGrabAction' xrefstyle='select: title'/>
+adds the specified <emphasis remap='I'>action_proc</emphasis> 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
+<function>ButtonPress</function>
+or
+<function>KeyPress</function>
+events as the only or final event
+in a sequence, the Intrinsics will call
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+for the widget with every button or KeyCode which maps to the
+event detail field, passing the specified <emphasis remap='I'>owner_events</emphasis>, <emphasis remap='I'>event_mask</emphasis>,
+<emphasis remap='I'>pointer_mode</emphasis>, and <emphasis remap='I'>keyboard_mode</emphasis>. For
+<function>ButtonPress</function>
+events, the modifiers
+specified in the grab are determined directly from the translation
+specification and <emphasis remap='I'>confine_to</emphasis> and <emphasis remap='I'>cursor</emphasis> are specified as
+<function>None</function>.
+For
+<function>KeyPress</function>
+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
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+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 <emphasis remap='I'>event_mask</emphasis> 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
+<function>ButtonPress</function>
+and
+<function>KeyPress</function>
+events, don't-care modifiers are ignored unless the translation entry
+explicitly specifies ``Any'' in the <emphasis remap='I'>modifiers</emphasis> field.
+</para>
+
+<para>
+If the specified <emphasis remap='I'>action_proc</emphasis> 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.
+</para>
+
+<para>
+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
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>
+or
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Invoking_Actions_Directly">
+<title>Invoking Actions Directly</title>
+<para>
+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
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCallActionProc'>
+<funcprototype>
+<funcdef>void <function>XtCallActionProc</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>String <parameter>action</parameter></paramdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget in which the action is to be invoked. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>action</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the action routine.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the contents of the <emphasis remap='I'>event</emphasis> passed to the action routine.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the contents of the <emphasis remap='I'>params</emphasis> passed to the action routine.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>
+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
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>.
+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 <emphasis remap='I'>event</emphasis>, <emphasis remap='I'>params</emphasis>, and <emphasis remap='I'>num_params</emphasis> 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,
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>
+generates a warning message and returns.
+</para>
+</sect1>
+
+<sect1 id="Obtaining_a_Widget_s_Action_List">
+<title>Obtaining a Widget's Action List</title>
+<para>
+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
+<emphasis remap='I'>actions</emphasis> field, use
+<xref linkend='XtGetActionList' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetActionList'>
+<funcprototype>
+<funcdef>void <function>XtGetActionList</function></funcdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>XtActionList *<parameter>actions_return</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_actions_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class whose actions are to be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>actions_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the action list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_actions_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the number of action procedures declared by the class.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetActionList' xrefstyle='select: title'/>
+returns the action table defined by the specified
+widget class. This table does not include actions defined by the
+superclasses. If <emphasis remap='I'>widget_class</emphasis> is not initialized, or is not
+<function>coreWidgetClass</function>
+or a subclass thereof, or if the class does not define any actions,
+*<emphasis remap='I'>actions_return</emphasis> will be NULL and *<emphasis remap='I'>num_actions_return</emphasis>
+will be zero.
+If *<emphasis remap='I'>actions_return</emphasis> is non-NULL the client is responsible for freeing
+the table using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer needed.
+</para>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH11 b/libXt/specs/CH11
deleted file mode 100644
index 55b8d92f3..000000000
--- a/libXt/specs/CH11
+++ /dev/null
@@ -1,3566 +0,0 @@
-.\" $Xorg: CH11,v 1.3 2000/08/17 19:42:47 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 11\fP\s-1
-
-\s+1\fBUtility Functions\fP\s-1
-.sp 2
-.nr H1 11
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 11 \(em Utility Functions
-.XE
-The \*(xI provide a number of utility functions that you can use to
-.IP \(bu 5
-Determine the number of elements in an array.
-.IP \(bu 5
-Translate strings to widget instances.
-.IP \(bu 5
-Manage memory usage.
-.IP \(bu 5
-Share graphics contexts.
-.IP \(bu 5
-Manipulate selections.
-.IP \(bu 5
-Merge exposure events into a region.
-.IP \(bu 5
-Translate widget coordinates.
-.IP \(bu 5
-Locate a widget given a window id.
-.IP \(bu 5
-Handle errors.
-.IP \(bu 5
-Set the WM_COLORMAP_WINDOWS property.
-.IP \(bu 5
-Locate files by name with string substitutions.
-.IP \(bu 5
-Register callback functions for external agents.
-.IP \(bu 5
-Locate all the displays of an application context.
-
-.NH 2
-Determining the Number of Elements in an Array
-.XS
-\fB\*(SN Determining the Number of Elements in an Array\fP
-.XE
-.LP
-To determine the number of elements in a fixed-size array, use
-.PN XtNumber .
-.LP
-.IN "XtNumber" "" "@DEF@"
-.sM
-.FD 0
-Cardinal XtNumber(\fIarray\fP)
-.br
- \fIArrayType array\fP;
-.FN
-.IP \fIarray\fP 1i
-Specifies a fixed-size array of arbitrary type.
-.LP
-.eM
-The
-.PN XtNumber
-macro returns the number of elements allocated to the array.
-
-.NH 2
-Translating Strings to Widget Instances
-.XS
-\fB\*(SN Translating Strings to Widget Instances\fP
-.XE
-.LP
-To translate a widget name to a widget instance, use
-.PN XtNameToWidget .
-.LP
-.IN "XtNameToWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtNameToWidget(\fIreference\fP, \fInames\fP)
-.br
- Widget \fIreference\fP;
-.br
- String \fInames\fP;
-.FN
-.IP \fIreference\fP 1i
-Specifies the widget from which the search is to start. \*(cI
-.IP \fInames\fP 1i
-Specifies the partially qualified name of the desired widget.
-.LP
-.eM
-The
-.PN XtNameToWidget
-function searches for a descendant of the \fIreference\fP
-widget whose name matches the specified names. The \fInames\fP parameter
-specifies a simple object name or a series of simple object name
-components separated by periods or asterisks.
-.PN XtNameToWidget
-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 :
-.IP \(bu 5
-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.
-.IP \(bu 5
-Return the first object in the enumeration that matches the
-specified name, where each component of \fInames\fP matches exactly the
-corresponding component of the qualified object name and asterisk
-matches any series of components, including none.
-.IP \(bu 5
-If no match is found, return NULL.
-.LP
-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 \*(xI do not require that all
-children of a widget have unique names,
-.PN XtNameToWidget
-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.
-
-.NH 2
-Managing Memory Usage
-.XS
-\fB\*(SN Managing Memory Usage\fP
-.XE
-.LP
-The \*(xI 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
-.PN malloc ,
-.PN calloc ,
-.PN realloc ,
-and
-.PN free
-with the following added functionality:
-.IP \(bu 5
-.PN XtMalloc ,
-.PN XtCalloc ,
-and
-.PN XtRealloc
-give an error if there is not enough memory.
-.IP \(bu 5
-.PN XtFree
-simply returns if passed a NULL pointer.
-.IP \(bu 5
-.PN XtRealloc
-simply allocates new storage if passed a NULL pointer.
-.LP
-See the standard C library documentation on
-.PN malloc ,
-.PN calloc ,
-.PN realloc ,
-and
-.PN free
-for more information.
-.sp
-.LP
-To allocate storage, use
-.PN XtMalloc .
-.LP
-.IN "XtMalloc" "" "@DEF@"
-.sM
-.FD 0
-char *XtMalloc(\fIsize\fP)
-.br
- Cardinal \fIsize\fP;
-.FN
-.IP \fIsize\fP 1i
-Specifies the number of bytes desired.
-.LP
-.eM
-The
-.PN XtMalloc
-function returns a pointer to a block of storage of at least
-the specified \fIsize\fP bytes.
-If there is insufficient memory to allocate the new block,
-.PN XtMalloc
-calls
-.PN XtErrorMsg .
-.sp
-.LP
-To allocate and initialize an array, use
-.PN XtCalloc .
-.LP
-.IN "XtCalloc" "" "@DEF@"
-.sM
-.FD 0
-char *XtCalloc(\fInum\fP, \fIsize\fP)
-.br
- Cardinal \fInum\fP;
-.br
- Cardinal \fIsize\fP;
-.FN
-.IP \fInum\fP 1i
-Specifies the number of array elements to allocate.
-.IP \fIsize\fP 1i
-Specifies the size of each array element in bytes.
-.LP
-.eM
-The
-.PN 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,
-.PN XtCalloc
-calls
-.PN XtErrorMsg .
-.PN XtCalloc
-returns the address of the allocated storage.
-.sp
-.LP
-To change the size of an allocated block of storage, use
-.PN XtRealloc .
-.LP
-.IN "XtRealloc" "" "@DEF@"
-.sM
-.FD 0
-char *XtRealloc(\fIptr\fP, \fInum\fP)
-.br
- char *\fIptr\fP;
-.br
- Cardinal \fInum\fP;
-.FN
-.IP \fIptr\fP 1i
-Specifies a pointer to the old storage allocated with
-.PN XtMalloc ,
-.PN XtCalloc ,
-or
-.PN XtRealloc ,
-or NULL.
-.IP \fInum\fP 1i
-Specifies number of bytes desired in new storage.
-.LP
-.eM
-The
-.PN 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,
-.PN XtRealloc
-calls
-.PN XtErrorMsg .
-If \fIptr\fP is NULL,
-.PN XtRealloc
-simply calls
-.PN XtMalloc .
-.PN XtRealloc
-then returns the address of the new block.
-.sp
-.LP
-To free an allocated block of storage, use
-.PN XtFree .
-.LP
-.IN "XtFree" "" "@DEF@"
-.sM
-.FD 0
-void XtFree(\fIptr\fP)
-.br
- char *\fIptr\fP;
-.FN
-.IP \fIptr\fP 1i
-Specifies a pointer to a block of storage allocated with
-.PN XtMalloc ,
-.PN XtCalloc ,
-or
-.PN XtRealloc ,
-or NULL.
-.LP
-.eM
-The
-.PN XtFree
-function returns storage, allowing it to be reused.
-If \fIptr\fP is NULL,
-.PN XtFree
-returns immediately.
-.sp
-.LP
-To allocate storage for a new instance of a type, use
-.PN XtNew .
-.LP
-.IN "XtNew" "" "@DEF@"
-.sM
-.FD 0
-\fItype\fP *XtNew(\fItype\fP)
-.br
- \fItype t\fP;
-.FN
-.IP \fItype\fP 1i
-Specifies a previously declared type.
-.LP
-.eM
-.PN XtNew
-returns a pointer to the allocated storage.
-If there is insufficient memory to allocate the new block,
-.PN XtNew
-calls
-.PN XtErrorMsg .
-.PN XtNew
-is a convenience macro that calls
-.PN XtMalloc
-with the following arguments specified:
-.LP
-.Ds
-.TA .5i
-.ta .5i
-((type *) XtMalloc((unsigned) sizeof(type)))
-.De
-.LP
-The storage allocated by
-.PN XtNew
-should be freed using
-.PN XtFree .
-.sp
-.LP
-To copy an instance of a string, use
-.PN XtNewString .
-.LP
-.IN "XtNewString" "" "@DEF@"
-.sM
-.FD 0
-String XtNewString(\fIstring\fP)
-.br
- String \fIstring\fP;
-.FN
-.IP \fIstring\fP 1i
-Specifies a previously declared string.
-.LP
-.eM
-.PN XtNewString
-returns a pointer to the allocated storage.
-If there is insufficient memory to allocate the new block,
-.PN XtNewString
-calls
-.PN XtErrorMsg .
-.PN XtNewString
-is a convenience macro that calls
-.PN XtMalloc
-with the following arguments specified:
-.LP
-.Ds
-.TA .5i
-.ta .5i
-(strcpy(XtMalloc((unsigned)strlen(str) + 1), str))
-.De
-.LP
-The storage allocated by
-.PN XtNewString
-should be freed using
-.PN XtFree .
-
-.NH 2
-Sharing Graphics Contexts
-.XS
-\fB\*(SN Sharing Graphics Contexts\fP
-.XE
-.LP
-The \*(xI 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.
-.LP
-To obtain a shareable GC with modifiable fields, use
-.PN XtAllocateGC .
-.LP
-.IN "XtAllocateGC" "" "@DEF@"
-.sM
-.FD 0
-GC XtAllocateGC(\fIwidget\fP, \fIdepth\fP, \fIvalue_mask\fP, \fIvalues\fP, \
-\fIdynamic_mask\fP, \fIunused_mask\fP)
-.br
- Widget \fIobject\fP;
-.br
- Cardinal \fIdepth\fP;
-.br
- XtGCMask \fIvalue_mask\fP;
-.br
- XGCValues *\fIvalues\fP;
-.br
- XtGCMask \fIdynamic_mask\fP;
-.br
- XtGCMask \fIunused_mask\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies an object, giving the screen for which the
-returned GC is valid. \*(oI
-.IP \fIdepth\fP 1i
-Specifies the depth for which the returned GC is valid, or 0.
-.IP \fIvalue_mask\fP 1i
-Specifies fields of the GC that are initialized from \fIvalues\fP.
-.IP \fIvalues\fP 1i
-Specifies the values for the initialized fields.
-.IP \fIdynamic_mask\fP 1i
-Specifies fields of the GC that will be modified by the caller.
-.IP \fIunused_mask\fP 1i
-Specifies fields of the GC that will not be needed by the caller.
-.LP
-.eM
-The
-.PN XtAllocateGC
-function returns a shareable 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 fields of the GC
-that are initialized with the respective member 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 \fIdynamic_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
-.PN 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.
-.PN XtAllocateGC
-may modify and return an existing GC if it was allocated with a
-nonzero \fIunused_mask\fP.
-.sp
-.LP
-To obtain a shareable GC with no modifiable fields, use
-.PN XtGetGC .
-.LP
-.IN "XtGetGC" "" "@DEF@"
-.sM
-.FD 0
-GC XtGetGC(\fIobject\fP, \fIvalue_mask\fP, \fIvalues\fP)
-.br
- Widget \fIobject\fP;
-.br
- XtGCMask \fIvalue_mask\fP;
-.br
- XGCValues *\fIvalues\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies an object, giving the screen and depth for which the
-returned GC is valid. \*(oI
-.IP \fIvalue_mask\fP 1i
-Specifies which fields of the \fIvalues\fP structure are specified.
-.IP \fIvalues\fP 1i
-Specifies the actual values for this GC.
-.LP
-.eM
-The
-.PN XtGetGC
-function returns a shareable, read-only GC.
-The parameters to this function are the same as those for
-.PN XCreateGC
-except that an Object is passed instead of a Display.
-.PN XtGetGC
-is equivalent to
-.PN XtAllocateGC
-with \fIdepth\fP, \fIdynamic_mask\fP, and \fIunused_mask\fP all zero.
-.LP
-.PN XtGetGC
-shares only GCs in which all values in the GC returned by
-.PN XCreateGC
-are the same.
-In particular, it does not use the \fIvalue_mask\fP provided to
-determine which fields of the GC a widget considers relevant.
-The \fIvalue_mask\fP is used only to tell the server which fields should be
-filled in from \fIvalues\fP and which it should fill in with default values.
-.sp
-.LP
-To deallocate a shared GC when it is no longer needed, use
-.PN XtReleaseGC .
-.LP
-.IN "XtReleaseGC" "" "@DEF@"
-.sM
-.FD 0
-void XtReleaseGC(\fIobject\fP, \fIgc\fP)
-.br
- Widget \fIobject\fP;
-.br
- GC \fIgc\fP;
-.FN
-.IP \fIobject\fP 1i
-Specifies any object on the Display for which the GC was created. \*(oI
-.IP \fIgc\fP 1i
-Specifies the shared GC obtained with either
-.PN XtAllocateGC
-or
-.PN XtGetGC .
-.LP
-.eM
-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.
-
-.NH 2
-Managing Selections
-.XS
-\*(SN Managing Selections
-.XE
-.LP
-Arbitrary widgets in multiple applications can communicate
-with each other by means of the \*(xI global selection mechanism,
-which conforms to the specifications in the \fI\*(xC\fP.
-The \*(xI supply functions for providing and receiving selection data in
-one logical piece (atomic transfers)
-or in smaller logical segments (incremental transfers).
-.LP
-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 \*(xI 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 \*(xI is not
-required to match the underlying
-transport protocol between the application and the X server;
-the \*(xI 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.
-
-.NH 3
-Setting and Getting the Selection Timeout Value
-.XS
-\fB\*(SN Setting and Getting the Selection Timeout Value\fP
-.XE
-.LP
-To set the \*(xI selection timeout, use
-.PN XtAppSetSelectionTimeout .
-.LP
-.IN "XtAppSetSelectionTimeout" "" "@DEF@"
-.sM
-.FD 0
-void XtAppSetSelectionTimeout(\fIapp_context\fP, \fItimeout\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- unsigned long \fItimeout\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fItimeout\fP 1i
-Specifies the selection timeout in milliseconds.
-.eM
-.LP
-To get the current selection timeout value, use
-.PN XtAppGetSelectionTimeout .
-.LP
-.IN "XtAppGetSelectionTimeout" "" "@DEF@"
-.sM
-.FD 0
-unsigned long XtAppGetSelectionTimeout(\fIapp_context\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.LP
-.eM
-The
-.PN 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
-selectionTimeout
-.IN "selectionTimeout"
-application resource as retrieved by
-.PN XtDisplayInitialize .
-If
-selectionTimeout
-is not specified,
-the default is five seconds.
-
-.NH 3
-Using Atomic Transfers
-.XS
-\*(SN Using Atomic Transfers
-.XE
-.LP
-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.
-
-.NH 4
-Atomic Transfer Procedures
-.XS
-\*(SN Atomic Transfer Procedures
-.XE
-.IN "Selections" "atomic"
-.LP
-The following procedures are used by the selection owner when
-providing selection data in a single unit.
-.LP
-The procedure pointer specified by the owner to supply the selection
-data to the \*(xI is of type
-.PN XtConvertSelectionProc .
-.LP
-.IN "XtConvertSelectionProc" "" "@DEF@"
-.sM
-.FD 0
-typedef Boolean (*XtConvertSelectionProc)(Widget, Atom*, Atom*, Atom*,
-.br
- XtPointer*, unsigned long*, int*);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItarget\fP;
-.br
- Atom *\fItype_return\fP;
-.br
- XtPointer *\fIvalue_return\fP;
-.br
- unsigned long *\fIlength_return\fP;
-.br
- int *\fIformat_return\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that currently owns this selection.
-.IP \fIselection\fP 1i
-Specifies the atom naming the selection requested
-(for example,
-.PN XA_PRIMARY
-or
-.PN XA_SECONDARY ).
-.IP \fItarget\fP 1i
-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).
-.IP \fItype_return\fP 1i
-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
-.PN XA_STRING .
-.IP \fIvalue_return\fP 1i
-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
-.PN XtSelectionDoneProc
-for the selection,
-this storage is owned by the selection owner;
-otherwise, it is owned by the \*(xI selection mechanism,
-which frees it by calling
-.PN XtFree
-when it is done with it.
-.IP \fIlength_return\fP 1i
-Specifies a pointer into which the number of elements in \fIvalue_return\fP,
-each of size indicated by \fIformat_return\fP, is to be stored.
-.IP \fIformat_return\fP 1i
-Specifies a pointer into which the size in bits of the data elements
-of the selection value is to be stored.
-.LP
-.eM
-This procedure is called by the \*(xI selection mechanism
-to get the value of a selection as a given type
-from the current selection owner.
-It returns
-.PN True
-if the owner successfully converted the selection to the target type or
-.PN False
-otherwise.
-If the procedure returns
-.PN False ,
-the values of the return arguments are undefined.
-Each
-.PN XtConvertSelectionProc
-should respond to target value
-.PN TARGETS
-by returning a value containing the list of the targets
-into which it is
-prepared to convert the selection.
-The value returned in
-\fIformat_return\fP must be one of 8, 16, or 32 to allow the server to
-byte-swap the data if necessary.
-.LP
-.IN "Selections" "MULTIPLE"
-.IN "Selections" "TIMESTAMP"
-This procedure does not need to worry about responding to the
-MULTIPLE or the TIMESTAMP target values (see Section 2.6.2 in the \fI\*(xC\fP).
-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 \*(xI using the time specified in the
-call to
-.PN XtOwnSelection
-or
-.PN XtOwnSelectionIncremental .
-.sp
-.LP
-To retrieve the
-.PN SelectionRequest
-event that triggered the
-.PN XtConvertSelectionProc
-procedure, use
-.PN XtGetSelectionRequest .
-.LP
-.IN "XtGetSelectionRequest" "" "@DEF@"
-.sM
-.FD 0
-XSelectionRequestEvent *XtGetSelectionRequest(\fIw\fP, \fIselection\fP, \
-\fIrequest_id\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- XtRequestId \fIrequest_id\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that currently owns this selection. \*(cI
-.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.
-.LP
-.eM
-.PN XtGetSelectionRequest
-may be called only from within an
-.PN XtConvertSelectionProc
-procedure and returns a pointer to the
-.PN 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
-.PN SelectionRequest
-event is being processed for the specified
-\fIwidget\fP, \fIselection\fP, and \fIrequest_id\fP,
-.PN XtGetSelectionRequest
-returns NULL.
-.sp
-.LP
-The procedure pointer specified by the owner when it desires
-notification upon losing ownership is of type
-.PN XtLoseSelectionProc .
-.LP
-.IN "XtLoseSelectionProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtLoseSelectionProc)(Widget, Atom*);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that has lost selection ownership.
-.IP \fIselection\fP 1i
-Specifies the atom naming the selection.
-.LP
-.eM
-This procedure is called by the \*(xI 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.
-.sp
-.LP
-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
-.PN XtSelectionDoneProc .
-.LP
-.IN "XtSelectionDoneProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtSelectionDoneProc)(Widget, Atom*, Atom*);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItarget\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that owns the converted selection.
-.IP \fIselection\fP 1i
-Specifies the atom naming the selection that was converted.
-.IP \fItarget\fP 1i
-Specifies the target type to which the conversion was done.
-.LP
-.eM
-This procedure is called by the \*(xI selection mechanism
-to inform the selection owner that a selection requestor has successfully
-retrieved a selection value.
-If the selection owner has registered an
-.PN XtSelectionDoneProc ,
-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
-.PN XtSelectionDoneProc ,
-it also owns the storage containing the converted
-selection value.
-
-.NH 4
-Getting the Selection Value
-.XS
-\*(SN Getting the Selection Value
-.XE
-.LP
-The procedure pointer specified by the requestor to receive the
-selection data from the \*(xI is of type
-.PN XtSelectionCallbackProc .
-.LP
-.IN "XtSelectionCallbackProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtSelectionCallbackProc)(Widget, XtPointer, Atom*, Atom*, \
-XtPointer, unsigned long*, int*);
-.br
- Widget \fIw\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItype\fP;
-.br
- XtPointer \fIvalue\fP;
-.br
- unsigned long *\fIlength\fP;
-.br
- int *\fIformat\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that requested the selection value.
-.IP \fIclient_data\fP 1i
-Specifies a value passed in by the widget when it requested the
-selection.
-.IP \fIselection\fP 1i
-Specifies the name of the selection that was requested.
-.IP \fItype\fP 1i
-Specifies the representation type of the selection value (for example,
-.PN 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
-.PN XT_CONVERT_FAIL
-is used to indicate that the selection conversion failed because the
-selection owner did not respond within the \*(xI selection timeout
-interval.
-.IP \fIvalue\fP 1i
-Specifies a pointer to the selection value.
-The requesting client owns this storage and is responsible for freeing it
-by calling
-.PN XtFree
-when it is done with it.
-.IP \fIlength\fP 1i
-Specifies the number of elements in \fIvalue\fP.
-.IP \fIformat\fP 1i
-Specifies the size in bits of the data in each element of \fIvalue\fP.
-.LP
-.eM
-This procedure is called by the \*(xI selection mechanism to deliver the
-requested selection to the requestor.
-.LP
-If the
-.PN SelectionNotify
-event returns a property of
-.PN 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.
-.sp
-.LP
-To obtain the selection value in a single logical unit, use
-.PN XtGetSelectionValue
-or
-.PN XtGetSelectionValues .
-.LP
-.IN "XtGetSelectionValue" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSelectionValue(\fIw\fP, \fIselection\fP, \fItarget\fP, \
-\fIcallback\fP, \fIclient_data\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Atom \fItarget\fP;
-.br
- XtSelectionCallbackProc \fIcallback\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired; for example,
-.PN XA_PRIMARY .
-.IP \fItarget\fP 1i
-Specifies the type of information needed about the selection.
-.IP \fIcallback\fP 1i
-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.
-.IP \fIclient_data\fP 1i
-Specifies additional data to be passed to the specified procedure
-when it is called.
-.IP \fItime\fP 1i
-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
-.PN CurrentTime
-is not acceptable.
-.LP
-.eM
-The
-.PN XtGetSelectionValue
-function requests the value of the selection converted to
-the target type.
-The specified callback is called at some time after
-.PN XtGetSelectionValue
-is called, when the selection value is received from the X server.
-It may be called before or after
-.PN XtGetSelectionValue
-returns.
-For more information about \fIselection\fP, \fItarget\fP, and
-\fItime\fP, see Section 2.6 in the \fI\*(xC\fP.
-.sp
-.LP
-.IN "XtGetSelectionValues" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSelectionValues(\fIw\fP, \fIselection\fP, \fItargets\fP, \
-\fIcount\fP, \fIcallback\fP, \fIclient_data\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Atom *\fItargets\fP;
-.br
- int \fIcount\fP;
-.br
- XtSelectionCallbackProc \fIcallback\fP;
-.br
- XtPointer *\fIclient_data\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired (that is, primary or secondary).
-.IP \fItargets\fP 1i
-Specifies the types of information needed about the selection.
-.IP \fIcount\fP 1i
-Specifies the length of the \fItargets\fP and \fIclient_data\fP lists.
-.IP \fIcallback\fP 1i
-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.
-.IP \fIclient_data\fP 1i
-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.
-.IP \fItime\fP 1i
-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
-.PN CurrentTime
-is not acceptable.
-.LP
-.eM
-The
-.PN XtGetSelectionValues
-function is similar to multiple calls to
-.PN XtGetSelectionValue
-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 \fIselection\fP, \fItarget\fP, and
-\fItime\fP, see Section 2.6 in the \fI\*(xC\fP.
-
-.NH 4
-Setting the Selection Owner
-.XS
-\*(SN Setting the Selection Owner
-.XE
-.LP
-To set the selection owner and indicate that the selection value will
-be provided in one piece, use
-.PN XtOwnSelection .
-.LP
-.IN "XtOwnSelection" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtOwnSelection(\fIw\fP, \fIselection\fP, \fItime\fP, \
-\fIconvert_proc\fP, \fIlose_selection\fP, \fIdone_proc\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Time \fItime\fP;
-.br
- XtConvertSelectionProc \fIconvert_proc\fP;
-.br
- XtLoseSelectionProc \fIlose_selection\fP;
-.br
- XtSelectionDoneProc \fIdone_proc\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that wishes to become the owner. \*(cI
-.IP \fIselection\fP 1i
-Specifies the name of the selection (for example,
-.PN XA_PRIMARY ).
-.IP \fItime\fP 1i
-Specifies the timestamp that indicates when the ownership request was
-initiated.
-This should be the timestamp of the event that triggered ownership;
-the value
-.PN CurrentTime
-is not acceptable.
-.IP \fIconvert_proc\fP 1i
-Specifies the procedure to be called whenever a client requests the
-current value of the selection.
-.IP \fIlose_selection\fP 1i
-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.
-.IP \fIdone_proc\fP 1i
-Specifies the procedure called
-after the requestor has received the selection value, or NULL if the
-owner is not
-interested in being called back.
-.LP
-.eM
-The
-.PN XtOwnSelection
-function informs the \*(xI selection mechanism that a
-widget wishes to own a selection.
-It returns
-.PN True
-if the widget successfully becomes the owner and
-.PN 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.
-.LP
-If a done_proc is specified, the client owns the storage allocated
-for passing the value to the \*(xI. If \fIdone_proc\fP is NULL,
-the convert_proc must allocate storage using
-.PN XtMalloc ,
-.PN XtRealloc ,
-or
-.PN XtCalloc ,
-and the value specified is freed by the
-\*(xI when the transfer is complete.
-.sp
-.LP
-Usually, a selection owner maintains ownership indefinitely until some
-other widget requests ownership, at which time
-the \*(xI 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 \*(xI
-by using
-.PN XtDisownSelection
-that it no longer is to be the selection owner.
-.LP
-.IN "XtDisownSelection" "" "@DEF@"
-.sM
-.FD 0
-void XtDisownSelection(\fIw\fP, \fIselection\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that wishes to relinquish ownership.
-.IP \fIselection\fP 1i
-Specifies the atom naming the selection being given up.
-.IP \fItime\fP 1i
-Specifies the timestamp that indicates when the request to
-relinquish selection ownership was initiated.
-.LP
-.eM
-The
-.PN 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,
-.PN XtDisownSelection
-does nothing.
-.LP
-After a widget has called
-.PN 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 is called if a conversion that started
-before the call to
-.PN XtDisownSelection
-finishes after the call to
-.PN XtDisownSelection .
-
-.NH 3
-Using Incremental Transfers
-.XS
-\*(SN Using Incremental Transfers
-.XE
-.LP
-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
-\fIrequest_id\fP argument, which is an identifier that is guaranteed to be
-unique among all incremental requests that are active concurrently.
-.LP
-For example, consider the following:
-.IP \(bu 5
-Upon receiving a request for the selection value, the owner sends
-the first segment.
-.IP \(bu 5
-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.
-.IP \(bu 5
-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.
-
-.NH 4
-Incremental Transfer Procedures
-.XS
-\*(SN Incremental Transfer Procedures
-.XE
-.IN "Selections" "incremental"
-.LP
-The following procedures are used by selection owners who wish to
-provide the selection data in multiple segments.
-.LP
-The procedure pointer specified by the incremental owner to supply the
-selection data to the \*(xI is of type
-.PN XtConvertSelectionIncrProc .
-.LP
-.sM
-.Ds 0
-typedef XtPointer XtRequestId;
-.De
-.IN "XtRequestId" "" "@DEF@"
-.IN "XtConvertSelectionIncrProc" "" "@DEF@"
-.FD 0
-typedef Boolean (*XtConvertSelectionIncrProc)(Widget, Atom*, Atom*, \
-Atom*, XtPointer*,
- unsigned long*, int*, unsigned long*, \
-XtPointer, XtRequestId*);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItarget\fP;
-.br
- Atom *\fItype_return\fP;
-.br
- XtPointer *\fIvalue_return\fP;
-.br
- unsigned long *\fIlength_return\fP;
-.br
- int *\fIformat_return\fP;
-.br
- unsigned long *\fImax_length\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- XtRequestId *\fIrequest_id\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that currently owns this selection.
-.IP \fIselection\fP 1i
-Specifies the atom that names the selection requested.
-.IP \fItarget\fP 1i
-Specifies the type of information required about the selection.
-.IP \fItype_return\fP 1i
-Specifies a pointer to an atom into which the property
-type of the converted value of the selection is to be
-stored.
-.IP \fIvalue_return\fP 1i
-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.
-.IP \fIlength_return\fP 1i
-Specifies a pointer into which the number of elements
-in \fIvalue_return\fP, each of size indicated by
-\fIformat_return\fP, is to be stored.
-.IP \fIformat_return\fP 1i
-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.
-.IP \fImax_length\fP 1i
-Specifies the maximum number of bytes which may be
-transferred at any one time.
-.IP \fIclient_data\fP 1i
-Specifies the value passed in by the widget when it
-took ownership of the selection.
-.IP \fIrequest_id\fP 1i
-Specifies an opaque identification for a specific request.
-.LP
-.eM
-This procedure is called repeatedly by the \*(xI selection mechanism to get
-the next incremental chunk of data from a selection owner who has
-called
-.PN XtOwnSelectionIncremental .
-It must return
-.PN True
-if the procedure has succeeded in converting the selection data or
-.PN 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 \*(xI;
-that is, a fixed transfer area may be allocated and returned in \fIvalue_return\fP
-for each segment to be transferred. This procedure should store a
-non-NULL value in \fIvalue_return\fP and zero in \fIlength_return\fP to indicate that the
-entire selection has been delivered. After returning this final
-segment, the request id may be reused by the \*(xI to begin a
-new transfer.
-.LP
-To retrieve the
-.PN SelectionRequest
-event that triggered the selection conversion procedure, use
-.PN XtGetSelectionRequest ,
-described in Section 11.5.2.1.
-.sp
-.LP
-The procedure pointer specified by the incremental selection owner
-when it desires notification upon no longer having ownership is of
-type
-.PN XtLoseSelectionIncrProc .
-.LP
-.IN "XtLoseSelectionIncrProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtLoseSelectionIncrProc)(Widget, Atom*, XtPointer);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that has lost the selection ownership.
-.IP \fIselection\fP 1i
-Specifies the atom that names the selection.
-.IP \fIclient_data\fP 1i
-Specifies the value passed in by the widget when it
-took ownership of the selection.
-.LP
-.eM
-This procedure, which is optional, is called by the \*(xI to
-inform the selection owner that it no longer owns the selection.
-.sp
-.LP
-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
-.PN XtSelectionDoneIncrProc .
-.LP
-.IN "XtSelectionDoneIncrProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtSelectionDoneIncrProc)(Widget, Atom*, Atom*, \
-XtRequestId*, XtPointer);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItarget\fP;
-.br
- XtRequestId *\fIrequest_id\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that owns the selection.
-.IP \fIselection\fP 1i
-Specifies the atom that names the selection being transferred.
-.IP \fItarget\fP 1i
-Specifies the target type to which the conversion was done.
-.IP \fIrequest_id\fP 1i
-Specifies an opaque identification for a specific request.
-.IP \fIclient_data\fP 1i
-Specified the value passed in by the widget when it
-took ownership of the selection.
-.LP
-.eM
-This procedure, which is optional, is called by the \*(xI 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 \*(xI will free only the
-final value returned by the selection owner using
-.PN XtFree .
-.sp
-.LP
-The procedure pointer specified by the incremental selection owner to
-notify it if a transfer should be terminated prematurely is of type
-.PN XtCancelConvertSelectionProc .
-.LP
-.IN "XtCancelConvertSelectionProc" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtCancelConvertSelectionProc)(Widget, Atom*, Atom*, \
-XtRequestId*, XtPointer);
-.br
- Widget \fIw\fP;
-.br
- Atom *\fIselection\fP;
-.br
- Atom *\fItarget\fP;
-.br
- XtRequestId *\fIrequest_id\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget that owns the selection.
-.IP \fIselection\fP 1i
-Specifies the atom that names the selection being transferred.
-.IP \fItarget\fP 1i
-Specifies the target type to which the conversion was done.
-.IP \fIrequest_id\fP 1i
-Specifies an opaque identification for a specific request.
-.IP \fIclient_data\fP 1i
-Specifies the value passed in by the widget when it took ownership of
-the selection.
-.LP
-.eM
-This procedure is called by the \*(xI 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.
-
-.NH 4
-Getting the Selection Value Incrementally
-.XS
-\*(SN Getting the Selection Value Incrementally
-.XE
-.LP
-To obtain the value of the selection using incremental transfers, use
-.PN XtGetSelectionValueIncremental
-or
-.PN XtGetSelectionValuesIncremental .
-.LP
-.IN "XtGetSelectionValueIncremental" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSelectionValueIncremental(\fIw\fP, \fIselection\fP, \fItarget\fP, \
-\fIselection_callback\fP, \fIclient_data\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Atom \fItarget\fP;
-.br
- XtSelectionCallbackProc \fIselection_callback\fP;
-.br
- XtPointer \fIclient_data\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired.
-.IP \fItarget\fP 1i
-Specifies the type of information needed
-about the selection.
-.IP \fIselection_callback\fP 1i
-Specifies the callback procedure to be
-called to receive each data segment.
-.IP \fIclient_data\fP 1i
-Specifies client-specific data to be passed to
-the specified callback procedure when it is invoked.
-.IP \fItime\fP 1i
-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
-.PN CurrentTime
-is not acceptable.
-.LP
-.eM
-The
-.PN XtGetSelectionValueIncremental
-function is similar to
-.PN XtGetSelectionValue
-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
-\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 of a timeout), the selection_callback procedure is
-called with a type value equal to the symbolic constant
-.PN XT_CONVERT_FAIL
-so that the requestor can dispose
-of the partial selection value it has collected up until that point.
-Upon receiving
-.PN XT_CONVERT_FAIL ,
-the requesting client must determine
-for itself whether or not a partially completed data transfer is meaningful.
-For more information about \fIselection\fP, \fItarget\fP, and
-\fItime\fP, see Section 2.6 in the \fI\*(xC\fP.
-.LP
-.IN "XtGetSelectionValuesIncremental" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSelectionValuesIncremental(\fIw\fP, \fIselection\fP, \fItargets\fP, \
-\fIcount\fP, \fIselection_callback\fP, \fIclient_data\fP, \fItime\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Atom *\fItargets\fP;
-.br
- int \fIcount\fP;
-.br
- XtSelectionCallbackProc \fIselection_callback\fP;
-.br
- XtPointer *\fIclient_data\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired.
-.IP \fItargets\fP 1i
-Specifies the types of information needed about
-the selection.
-.IP \fIcount\fP 1i
-Specifies the length of the \fItargets\fP and \fIclient_data\fP lists.
-.IP \fIselection_callback\fP 1i
-Specifies the callback procedure to be called
-to receive each selection value.
-.IP \fIclient_data\fP 1i
-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.
-.IP \fItime\fP 1i
-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
-.PN CurrentTime
-is not acceptable.
-.LP
-.eM
-The
-.PN XtGetSelectionValuesIncremental
-function is similar to
-.PN XtGetSelectionValueIncremental
-except that it takes a list of targets and client data.
-.PN XtGetSelectionValuesIncremental
-is equivalent to calling
-.PN XtGetSelectionValueIncremental
-successively for each \fItarget/client_data\fP pair except that
-.PN 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 possible when calling
-.PN XtGetSelectionValueIncremental
-repeatedly.
-For more information about \fIselection\fP, \fItarget\fP, and
-\fItime\fP, see Section 2.6 in the \fI\*(xC\fP.
-
-.NH 4
-Setting the Selection Owner for Incremental Transfers
-.XS
-\*(SN Setting the Selection Owner for Incremental Transfers
-.XE
-.LP
-To set the selection owner when using incremental transfers, use
-.PN XtOwnSelectionIncremental .
-.LP
-.IN "XtOwnSelectionIncremental" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtOwnSelectionIncremental(\fIw\fP, \fIselection\fP, \fItime\fP, \
-\fIconvert_callback\fP, \fIlose_callback\fP,
- \fIdone_callback\fP, \
-\fIcancel_callback\fP, \fIclient_data\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIselection\fP;
-.br
- Time \fItime\fP;
-.br
- XtConvertSelectionIncrProc \fIconvert_callback\fP;
-.br
- XtLoseSelectionIncrProc \fIlose_callback\fP;
-.br
- XtSelectionDoneIncrProc \fIdone_callback\fP;
-.br
- XtCancelConvertSelectionProc \fIcancel_callback\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIw\fP 1.25i
-Specifies the widget that wishes to become the owner. \*(cI
-.IP \fIselection\fP 1.25i
-Specifies the atom that names the selection.
-.IP \fItime\fP 1.25i
-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
-.PN CurrentTime
-is not acceptable.
-.IP \fIconvert_callback\fP 1.25i
-Specifies the procedure to be called whenever
-the current value of the selection is requested.
-.IP \fIlose_callback\fP 1.25i
-Specifies the procedure to be called whenever
-the widget has lost selection ownership, or NULL if the
-owner is not interested in being notified.
-.IP \fIdone_callback\fP 1.25i
-Specifies the procedure called after the
-requestor has received the entire selection, or NULL if
-the owner is not interested in being notified.
-.IP \fIcancel_callback\fP 1.25i
-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.
-.IP \fIclient_data\fP 1.25i
-Specifies the argument to be passed to each of
-the callback procedures when they are called.
-.LP
-.eM
-The
-.PN XtOwnSelectionIncremental
-procedure informs the \*(xI
-incremental selection mechanism that the specified widget wishes to
-own the selection. It returns
-.PN True
-if the specified widget successfully becomes the selection owner or
-.PN False
-otherwise.
-For more information about \fIselection\fP, \fItarget\fP, and
-\fItime\fP, see Section 2.6 in the \fI\*(xC\fP.
-.LP
-If a done_callback procedure is specified, the client owns the storage allocated
-for passing the value to the \*(xI. If \fIdone_callback\fP is NULL,
-the convert_callback procedure must allocate storage using
-.PN XtMalloc ,
-.PN XtRealloc ,
-or
-.PN XtCalloc ,
-and the final value specified is freed by the
-\*(xI 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.
-.LP
-The lose_callback procedure does not indicate completion of any in-progress
-transfers; it is invoked at the time a
-.PN SelectionClear
-event is dispatched regardless of any active transfers, which are still
-expected to continue.
-.LP
-A widget that becomes the selection owner using
-.PN XtOwnSelectionIncremental
-may use
-.PN XtDisownSelection
-to relinquish selection ownership.
-
-.NH 3
-Setting and Retrieving Selection Target Parameters
-.XS
-\*(SN Setting and Retrieving Selection Target Parameters
-.XE
-.LP
-To specify target parameters for a selection request with a single target,
-use
-.PN XtSetSelectionParameters .
-.LP
-.IN "XtSetSelectionParameters" "" "@DEF@"
-.sM
-.FD 0
-void XtSetSelectionParameters(\fIrequestor\fP, \fIselection\fP, \fItype\fP, \
-\fIvalue\fP, \fIlength\fP, \fIformat\fP)
-.br
- Widget \fIrequestor\fP;
-.br
- Atom \fIselection\fP;
-.br
- Atom \fItype\fP;
-.br
- XtPointer \fIvalue\fP;
-.br
- unsigned long \fIlength\fP;
-.br
- int \fIformat\fP;
-.FN
-.IP \fIrequestor\fP 1i
-Specifies the widget making the request. \*(cI
-.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 are 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 size indicated by \fIformat\fP.
-.IP \fIformat\fP 1i
-Specifies the size in bits of the data in the elements of \fIvalue\fP.
-.LP
-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
-.PN XtGetSelectionValue
-or to
-.PN XtGetSelectionValueIncremental
-specifying the same requestor widget and selection atom will generate a
-.PN ConvertSelection
-request referring to the property containing the parameters. If
-.PN 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
-.eM
-The possible values of \fIformat\fP are 8, 16, or 32. If the format 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
-.PN XtGetSelectionValue
-and
-.PN XtGetSelectionValueIncremental
-with corresponding individual calls to
-.PN XtSetSelectionParameters ,
-and enclose these all within
-.PN XtCreateSelectionRequest
-and
-.PN XtSendSelectionRequest.
-.PN XtGetSelectionValues
-and
-.PN XtGetSelectionValuesIncremental
-cannot be used to make selection requests with parameterized targets.
-.sp
-.LP
-To retrieve any target parameters needed to perform a selection conversion,
-the selection owner calls
-.PN XtGetSelectionParameters .
-.LP
-.IN "XtGetSelectionParameters" "" "@DEF@"
-.sM
-.FD 0
-void XtGetSelectionParameters(\fIowner\fP, \fIselection\fP, \
-\fIrequest_id\fP, \fItype_return\fP, \fIvalue_return\fP,
- \fIlength_return\fP, \
-\fIformat_return\fP)
-.br
- Widget \fIowner\fP;
-.br
- Atom \fIselection\fP;
-.br
- XtRequestId \fIrequest_id\fP;
-.br
- Atom *\fItype_return\fP;
-.br
- XtPointer *\fIvalue_return\fP;
-.br
- unsigned long *\fIlength_return\fP;
-.br
- int *\fIformat_return\fP;
-.FN
-.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 is stored.
-.IP \fIvalue_return\fP 1i
-Specifies a pointer into which a pointer to the parameters is to be stored.
-A NULL is 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 are stored.
-.IP \fIformat_return\fP 1i
-Specifies a pointer into which the size in bits of the parameter data
-in the elements of \fIvalue\fP is stored.
-.LP
-.eM
-.PN XtGetSelectionParameters
-may be called only from within an
-.PN XtConvertSelectionProc
-or from within the first call to an
-.PN XtConvertSelectionIncrProc
-with a new request_id.
-.LP
-It is the responsibility of the caller to free the returned parameters using
-.PN XtFree
-when the parameters are no longer needed.
-
-.NH 3
-Generating MULTIPLE Requests
-.XS
-\*(SN Generating MULTIPLE Requests
-.XE
-.LP
-To have the \*(xI bundle multiple calls to make selection requests into
-a single request using a \s-1MULTIPLE\s+1 target, use
-.PN XtCreateSelectionRequest
-and
-.PN XtSendSelectionRequest .
-.LP
-.IN "XtCreateSelectionRequest" "" "@DEF@"
-.sM
-.FD 0
-void XtCreateSelectionRequest(\fIrequestor\fP, \fIselection\fP)
-.br
- Widget \fIrequestor\fP;
-.br
- Atom \fIselection\fP;
-.FN
-.IP \fIrequestor\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired.
-.LP
-.eM
-When
-.PN XtCreateSelectionRequest
-is called, subsequent calls to
-.PN XtGetSelectionValue ,
-.PN XtGetSelectionValueIncremental ,
-.PN XtGetSelectionValues ,
-and
-.PN XtGetSelectionValuesIncremental ,
-with the requestor and selection as specified to
-.PN XtCreateSelectionRequest ,
-are bundled into a single selection request with
-multiple targets. The request is made by calling
-.PN XtSendSelectionRequest .
-.LP
-.IN "XtSendSelectionRequest" "" "@DEF@"
-.sM
-.FD 0
-void XtSendSelectionRequest(\fIrequestor\fP, \fIselection\fP, \fItime\fP)
-.br
- Widget \fIrequestor\fP;
-.br
- Atom \fIselection\fP;
-.br
- Time \fItime\fP;
-.FN
-.IP \fIrequestor\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired.
-.IP \fItime\fP 1i
-Specifies the timestamp that indicates when the selection request was
-initiated. The value
-.PN CurrentTime
-is not acceptable.
-.LP
-.eM
-When
-.PN XtSendSelectionRequest
-is called with a value of \fIrequestor\fP and \fIselection\fP matching
-a previous call to
-.PN XtCreateSelectionRequest ,
-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
-.PN XtGetSelectionValue ,
-.PN XtGetSelectionValueIncremental ,
-.PN XtGetSelectionValues ,
-and
-.PN XtGetSelectionValueIncremental
-are invoked.
-.LP
-Multi-threaded applications should lock the application context before
-calling
-.PN XtCreateSelectionRequest
-and release the lock after calling
-.PN 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.
-.sp
-.LP
-To relinquish the composition of a MULTIPLE request without sending it, use
-.PN XtCancelSelectionRequest .
-.LP
-.IN "XtCancelSelectionRequest" "" "@DEF@"
-.sM
-.FD 0
-void XtCancelSelectionRequest(\fIrequestor\fP, \fIselection\fP)
-.br
- Widget \fIrequestor\fP;
-.br
- Atom \fIselection\fP;
-.FN
-.IP \fIrequestor\fP 1i
-Specifies the widget making the request. \*(cI
-.IP \fIselection\fP 1i
-Specifies the particular selection desired.
-.LP
-.eM
-When
-.PN XtCancelSelectionRequest
-is called, any requests queued since the last call to
-.PN XtCreateSelectionRequest
-for the same widget and selection are discarded
-and any resources reserved are released.
-A subsequent call to
-.PN XtSendSelectionRequest
-will not result in any request being made.
-Subsequent calls to
-.PN XtGetSelectionValue ,
-.PN XtGetSelectionValues ,
-.PN XtGetSelectionValueIncremental ,
-or
-.PN XtGetSelectionValuesIncremental
-will not be deferred.
-
-.NH 3
-Auxiliary Selection Properties
-.XS
-\*(SN Auxiliary Selection Properties
-.XE
-.LP
-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 \*(xI provides two interfaces for acquiring temporary property names.
-.LP
-To acquire a temporary property name atom for use in a selection
-request, the client may call
-.PN XtReservePropertyAtom .
-.LP
-.IN "XtReservePropertyAtom" "" "@DEF@"
-.sM
-.FD 0
-Atom XtReservePropertyAtom(\fIw\fP)
-.br
- Widget \fIw\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget making a selection request.
-.LP
-.eM
-.PN XtReservePropertyAtom
-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.
-.LP
-To return a temporary property name atom for reuse and to delete
-the property named by that atom, use
-.PN XtReleasePropertyAtom .
-.LP
-.IN "XtReleasePropertyAtom" "" "@DEF@"
-.sM
-.FD 0
-void XtReleasePropertyAtom(\fIw\fP, \fIatom\fP)
-.br
- Widget \fIw\fP;
-.br
- Atom \fIatom\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget used to reserve the property name atom.
-.IP \fIatom\fP 1i
-Specifies the property name atom returned by
-.PN XtReservePropertyAtom
-that is to be released for reuse.
-.LP
-.eM
-.PN XtReleasePropertyAtom
-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 \fIatom\fP does not
-specify a value returned by
-.PN XtReservePropertyAtom
-for the specified widget, the results are undefined.
-
-.NH 3
-Retrieving the Most Recent Timestamp
-.XS
-\*(SN Retrieving the Most Recent Timestamp
-.XE
-.LP
-To retrieve the timestamp from the most recent call to
-.PN XtDispatchEvent
-that contained a timestamp, use
-.PN XtLastTimestampProcessed .
-.LP
-.IN "XtLastTimestampProcessed" "" "@DEF@"
-.sM
-.FD 0
-Time XtLastTimestampProcessed(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies an open display connection.
-.LP
-.eM
-If no
-.PN KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-.PN ButtonRelease ,
-.PN MotionNotify ,
-.PN EnterNotify ,
-.PN LeaveNotify ,
-.PN PropertyNotify ,
-or
-.PN SelectionClear
-event has yet been passed to
-.PN XtDispatchEvent
-for the specified display,
-.PN XtLastTimestampProcessed
-returns zero.
-
-.NH 3
-Retrieving the Most Recent Event
-.XS
-\*(SN Retrieving the Most Recent Event
-.XE
-.LP
-To retrieve the event from the most recent call to
-.PN XtDispatchEvent
-for a specific display, use
-.PN XtLastEventProcessed .
-.LP
-.IN "XtLastEventProcessed" "" "@DEF@"
-.sM
-.FD 0
-XEvent *XtLastEventProcessed(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display connection from which to retrieve the event.
-.LP
-.eM
-Returns the last event passed to
-.PN XtDispatchEvent
-for the specified display. Returns NULL if there is no such event.
-The client must not modify the contents of the returned event.
-
-.NH 2
-Merging Exposure Events into a Region
-.XS
-\*(SN Merging Exposure Events into a Region
-.XE
-.LP
-The \*(xI provide an
-.PN XtAddExposureToRegion
-utility function that merges
-.PN Expose
-and
-.PN GraphicsExpose
-events into a region for clients to process at once
-rather than processing individual rectangles.
-For further information about regions,
-see Section 16.5 in \fI\*(xL\fP.
-.sp
-.LP
-To merge
-.PN Expose
-and
-.PN GraphicsExpose
-events into a region, use
-.PN XtAddExposureToRegion .
-.LP
-.IN "XtAddExposureToRegion" "" "@DEF@"
-.sM
-.FD 0
-void XtAddExposureToRegion(\fIevent\fP, \fIregion\fP)
-.br
- XEvent *\fIevent\fP;
-.br
- Region \fIregion\fP;
-.FN
-.IP \fIevent\fP 1i
-Specifies a pointer to the
-.PN Expose
-or
-.PN GraphicsExpose
-event.
-.IP \fIregion\fP 1i
-Specifies the region object (as defined in
-.Pn < X11/Xutil.h >).
-.LP
-.eM
-The
-.PN XtAddExposureToRegion
-function computes the union of the rectangle defined by the exposure
-event and the specified region.
-Then it stores the results back in \fIregion\fP.
-If the event argument is not an
-.PN Expose
-or
-.PN GraphicsExpose
-event,
-.PN XtAddExposureToRegion
-returns without an error and without modifying \fIregion\fP.
-.LP
-This function is used by the exposure compression mechanism;
-see Section 7.9.3.
-
-.NH 2
-Translating Widget Coordinates
-.XS
-\fB\*(SN Translating Widget Coordinates\fP
-.XE
-.LP
-To translate an x-y coordinate pair from widget coordinates to root
-window absolute coordinates, use
-.PN XtTranslateCoords .
-.LP
-.IN "XtTranslateCoords" "" "@DEF@"
-.sM
-.FD 0
-void XtTranslateCoords(\fIw\fP, \fIx\fP, \fIy\fP, \fIrootx_return\fP, \
-\fIrooty_return\fP)
-.br
- Widget \fIw\fP;
-.br
- Position \fIx\fP, \fIy\fP;
-.br
- Position *\fIrootx_return\fP, *\fIrooty_return\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget. \*(rI
-.IP \fIx\fP 1i
-.br
-.ns
-.IP \fIy\fP 1i
-Specify the widget-relative x and y coordinates.
-.IP \fIrootx_return\fP 1i
-.br
-.ns
-.IP \fIrooty_return\fP 1i
-Return the root-relative x and y coordinates.
-.LP
-.eM
-While
-.PN XtTranslateCoords
-is similar to the Xlib
-.PN XTranslateCoordinates
-function, it does not generate a server request because all the required
-information already is in the widget's data structures.
-
-.NH 2
-Translating a Window to a Widget
-.XS
-\fB\*(SN Translating a Window to a Widget\fP
-.XE
-.LP
-To translate a given window and display pointer into a widget instance, use
-.PN XtWindowToWidget .
-.LP
-.IN "XtWindowToWidget" "" "@DEF@"
-.sM
-.FD 0
-Widget XtWindowToWidget(\fIdisplay\fP, \fIwindow\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- Window \fIwindow\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the display on which the window is defined.
-.IP \fIwindow\fP 1i
-Specifies the drawable for which you want the widget.
-.LP
-.eM
-If there is a realized widget whose window is the specified drawable on
-the specified \fIdisplay\fP,
-.PN XtWindowToWidget
-returns that widget.
-If not and if the drawable has been associated with a widget through
-.PN XtRegisterDrawable ,
-.PN XtWindowToWidget
-returns the widget associated with the drawable. In other cases it
-returns NULL.
-
-.NH 2
-Handling Errors
-.XS
-\fB\*(SN Handling Errors\fP
-.XE
-.LP
-The \*(xI 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.
-.LP
-Two levels of interface are provided:
-.IP \(bu 5
-A high-level interface that takes an error
-name and class and retrieves the error message text from
-an error resource database.
-.IP \(bu 5
-A low-level interface that takes a simple string to display.
-.LP
-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.
-.NT
-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.
-.NE
-.sp
-.LP
-To obtain the error database (for example, to merge with
-an application- or widget-specific database), use
-.PN XtAppGetErrorDatabase .
-.LP
-.IN "XtAppGetErrorDatabase" "" "@DEF@"
-.sM
-.FD 0
-XrmDatabase *XtAppGetErrorDatabase(\^\fIapp_context\fP\^)
-.br
- XtAppContext \fIapp_context\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.LP
-.eM
-The
-.PN 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
-.PN XtAppGetErrorDatabaseText .
-.LP
-For a complete listing of all errors and warnings
-that can be generated by the \*(xI, see Appendix D.
-.sp
-.LP
-The high-level error and warning handler procedure pointers are of type
-.PN XtErrorMsgHandler .
-.LP
-.IN "XtErrorMsgHandler" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtErrorMsgHandler)(String, String, String, String, \
-String*, Cardinal*);
-.br
- String \fIname\fP;
-.br
- String \fItype\fP;
-.br
- String \fIclass\fP;
-.br
- String \fIdefaultp\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the name to be concatenated with the specified type to form
-the resource name of the error message.
-.IP \fItype\fP 1i
-Specifies the type to be concatenated with the name to form the
-resource name of the error message.
-.IP \fIclass\fP 1i
-Specifies the resource class of the error message.
-.IP \fIdefaultp\fP 1i
-Specifies the default message to use if no error database entry is found.
-.IP \fIparams\fP 1i
-Specifies a pointer to a list of parameters to be substituted in the message.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-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
-.PN printf
-notation is used to substitute the parameters into the message.
-.sp
-.LP
-An error message handler can obtain the error database text for an
-error or a warning by calling
-.PN XtAppGetErrorDatabaseText .
-.LP
-.IN "XtAppGetErrorDatabaseText" "" "@DEF@"
-.sM
-.FD 0
-void XtAppGetErrorDatabaseText(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIbuffer_return\fP, \fInbytes\fP, \fIdatabase\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIname\fP, \fItype\fP, \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String \fIbuffer_return\fP;
-.br
- int \fInbytes\fP;
-.br
- XrmDatabase \fIdatabase\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIname\fP 1i
-.br
-.ns
-.IP \fItype\fP 1i
-Specify the name and type concatenated to form the resource name
-of the error message.
-.IP \fIclass\fP 1i
-Specifies the resource class of the error message.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIbuffer_return\fP 1i
-Specifies the buffer into which the error message is to be returned.
-.IP \fInbytes\fP 1i
-Specifies the size of the buffer in bytes.
-.IP \fIdatabase\fP 1i
-Specifies the name of the alternative database to be used,
-or NULL if the application context's error database is to be used.
-.LP
-.eM
-The
-.PN XtAppGetErrorDatabaseText
-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 \fIname\fP and \fItype\fP are concatenated with a single ``.''
-between them and the \fIclass\fP is concatenated with itself with a
-single ``.'' if it does not already contain a ``.''.
-.sp
-.LP
-To return the application name and class as passed to
-.PN XtDisplayInitialize
-for a particular Display, use
-.PN XtGetApplicationNameAndClass .
-.LP
-.IN "XtGetApplicationNameAndClass" "" "@DEF@"
-.sM
-.FD 0
-void XtGetApplicationNameAndClass(\fIdisplay\fP, \fIname_return\fP, \
-\fIclass_return\fP)
-.br
- Display* \fIdisplay\fP;
-.br
- String* \fIname_return\fP;
-.br
- String* \fIclass_return\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies an open display connection that has been initialized with
-.PN XtDisplayInitialize .
-.IP \fIname_return\fP 1i
-Returns the application name.
-.IP \fIclass_return\fP 1i
-Returns the application class.
-.LP
-.eM
-.PN XtGetApplicationNameAndClass
-returns the application name and class passed to
-.PN 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 \*(xI and must not be modified
-or freed by the caller.
-.sp
-.LP
-To register a procedure to be called on fatal error conditions, use
-.PN XtAppSetErrorMsgHandler .
-.LP
-.IN "XtAppSetErrorMsgHandler" "" "@DEF@"
-.sM
-.FD 0
-XtErrorMsgHandler XtAppSetErrorMsgHandler(\fIapp_context\fP, \fImsg_handler\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtErrorMsgHandler \fImsg_handler\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fImsg_handler\fP 1i
-Specifies the new fatal error procedure, which should not return.
-.LP
-.eM
-.PN XtAppSetErrorMsgHandler
-returns a pointer to the previously
-installed high-level fatal error handler.
-The default high-level fatal error handler provided by the \*(xI is named
-.PN _XtDefaultErrorMsg
-.IN "_XtDefaultErrorMsg" "" "@DEF"
-and constructs a string from the error resource database and calls
-.PN XtError .
-Fatal error message handlers should not return.
-If one does,
-subsequent \*(xI behavior is undefined.
-.sp
-.LP
-To call the high-level error handler, use
-.PN XtAppErrorMsg .
-.LP
-.IN "XtAppErrorMsg" "" "@DEF@"
-.sM
-.FD 0
-void XtAppErrorMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \
-\fIdefault\fP, \ \fIparams\fP, \fInum_params\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIname\fP;
-.br
- String \fItype\fP;
-.br
- String \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIname\fP 1i
-Specifies the general kind of error.
-.IP \fItype\fP 1i
-Specifies the detailed name of the error.
-.IP \fIclass\fP 1i
-Specifies the resource class.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIparams\fP 1i
-Specifies a pointer to a list of values to be stored in the message.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-The \*(xI internal errors all have class
-``XtToolkitError''.
-.sp
-.LP
-To register a procedure to be called on nonfatal error conditions, use
-.PN XtAppSetWarningMsgHandler .
-.LP
-.IN "XtAppSetWarningMsgHandler" "" "@DEF@"
-.sM
-.FD 0
-XtErrorMsgHandler XtAppSetWarningMsgHandler(\fIapp_context\fP, \fImsg_handler\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtErrorMsgHandler \fImsg_handler\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fImsg_handler\fP 1i
-Specifies the new nonfatal error procedure, which usually returns.
-.LP
-.eM
-.PN XtAppSetWarningMsgHandler
-returns a pointer to the previously
-installed high-level warning handler.
-The default high-level warning handler provided by the \*(xI is named
-.PN _XtDefaultWarningMsg
-.IN "_XtDefaultWarningMsg" "" "@DEF@"
-and constructs a string
-from the error resource database and calls
-.PN XtWarning .
-.sp
-.LP
-To call the installed high-level warning handler, use
-.PN XtAppWarningMsg .
-.LP
-.IN "XtAppWarningMsg" "" "@DEF@"
-.sM
-.FD 0
-void XtAppWarningMsg(\fIapp_context\fP, \fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \fIparams\fP, \fInum_params\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIname\fP;
-.br
- String \fItype\fP;
-.br
- String \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIname\fP 1i
-Specifies the general kind of error.
-.IP \fItype\fP 1i
-Specifies the detailed name of the error.
-.IP \fIclass\fP 1i
-Specifies the resource class.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIparams\fP 1i
-Specifies a pointer to a list of values to be stored in the message.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-The \*(xI internal warnings all have class
-``XtToolkitError''.
-.sp
-.LP
-The low-level error and warning handler procedure pointers are of type
-.PN XtErrorHandler .
-.LP
-.IN "XtErrorHandler" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtErrorHandler)(String);
-.br
- String \fImessage\fP;
-.FN
-.IP \fImessage\fP 1i
-Specifies the error message.
-.LP
-.eM
-The error handler should display the message string in some appropriate fashion.
-.sp
-.LP
-To register a procedure to be called on fatal error conditions, use
-.PN XtAppSetErrorHandler .
-.LP
-.IN "XtAppSetErrorHandler" "" "@DEF@"
-.sM
-.FD 0
-XtErrorHandler XtAppSetErrorHandler(\fIapp_context\fP, \fIhandler\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtErrorHandler \fIhandler\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIhandler\fP 1i
-Specifies the new fatal error procedure, which should not return.
-.LP
-.eM
-.PN XtAppSetErrorHandler
-returns a pointer to the previously installed
-low-level fatal error handler.
-The default low-level error handler provided by the \*(xI is
-.PN _XtDefaultError .
-.IN "_XtDefaultError" "" "@DEF@"
-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 \*(xI behavior is undefined.
-.sp
-.LP
-To call the installed fatal error procedure, use
-.PN XtAppError .
-.LP
-.IN "XtAppError" "" "@DEF@"
-.sM
-.FD 0
-void XtAppError(\fIapp_context\fP, \fImessage\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fImessage\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fImessage\fP 1i
-Specifies the message to be reported.
-.LP
-.eM
-Most programs should use
-.PN XtAppErrorMsg ,
-not
-.PN XtAppError ,
-to provide for customization and internationalization of error messages.
-.sp
-.LP
-To register a procedure to be called on nonfatal error conditions, use
-.PN XtAppSetWarningHandler .
-.LP
-.IN "XtAppSetWarningHandler" "" "@DEF@"
-.sM
-.FD 0
-XtErrorHandler XtAppSetWarningHandler(\fIapp_context\fP, \fIhandler\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- XtErrorHandler \fIhandler\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIhandler\fP 1i
-Specifies the new nonfatal error procedure, which usually returns.
-.LP
-.eM
-.PN XtAppSetWarningHandler
-returns a pointer to the previously installed
-low-level warning handler.
-The default low-level warning handler provided by the \*(xI is
-.PN _XtDefaultWarning .
-.IN "_XtDefaultWarning" "" "@DEF@"
-On POSIX-based systems,
-it prints the message to standard error and returns to the caller.
-.sp
-.LP
-To call the installed nonfatal error procedure, use
-.PN XtAppWarning .
-.LP
-.IN "XtAppWarning" "" "@DEF@"
-.sM
-.FD 0
-void XtAppWarning(\fIapp_context\fP, \fImessage\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fImessage\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fImessage\fP 1i
-Specifies the nonfatal error message to be reported.
-.LP
-.eM
-Most programs should use
-.PN XtAppWarningMsg ,
-not
-.PN XtAppWarning ,
-to provide for customization and internationalization of warning messages.
-
-.NH 2
-Setting WM_COLORMAP_WINDOWS
-.XS
-\fB\*(SN Setting WM_COLORMAP_WINDOWS\fP
-.XE
-.LP
-A client may set the value of the \s-1WM_COLORMAP_WINDOWS\s+1
-.IN "WM_COLORMAP_WINDOWS" "" "@DEF@"
-property on a widget's window by calling
-.PN XtSetWMColormapWindows .
-.LP
-.IN "XtSetWMColormapWindows" "" "@DEF@"
-.sM
-.FD 0
-void XtSetWMColormapWindows(\fIwidget\fP, \fIlist\fP, \fIcount\fP)
-.br
- Widget \fIwidget\fP;
-.br
- Widget* \fIlist\fP;
-.br
- Cardinal \fIcount\fP;
-.FN
-.IP \fIwidget\fP 1i
-Specifies the widget on whose window the \s-1WM_COLORMAP_WINDOWS\s+1
-property is stored. \*(cI
-.IP \fIlist\fP 1i
-Specifies a list of widgets whose windows are potentially to be
-listed in the \s-1WM_COLORMAP_WINDOWS\s+1 property.
-.IP \fIcount\fP 1i
-Specifies the number of widgets in \fIlist\fP.
-.LP
-.eM
-.PN XtSetWMColormapWindows
-returns immediately if \fIwidget\fP is not realized or if \fIcount\fP is 0.
-Otherwise,
-.PN 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 if its colormap resource is different from the colormap
-resources of all widgets whose windows are already on the window list.
-.LP
-Finally,
-.PN XtSetWMColormapWindows
-stores the resulting window list in the \s-1WM_COLORMAP_WINDOWS\s+1
-property on the specified widget's window.
-Refer to Section 4.1.8 in the \fI\*(xC\fP for details of
-the semantics of the \s-1WM_COLORMAP_WINDOWS\s+1 property.
-
-.NH 2
-Finding File Names
-.XS
-\fB\*(SN Finding File Names\fP
-.XE
-.LP
-The \*(xI provide procedures to look for a file by name, allowing
-string substitutions in a list of file specifications. Two
-routines are provided for this:
-.PN XtFindFile
-and
-.PN XtResolvePathname .
-.PN XtFindFile
-uses an arbitrary set of client-specified substitutions, and
-.PN XtResolvePathname
-uses a set of standard substitutions corresponding
-to the \fIX/Open Portability Guide\fP language localization conventions.
-Most applications should use
-.PN XtResolvePathname .
-.LP
-A string substitution is defined by a list of
-.PN Substitution
-.IN "Substitution" "" "@DEF@"
-entries.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- char match;
- String substitution;
-} SubstitutionRec, *Substitution;
-.De
-.eM
-.LP
-File name evaluation is handled in an operating-system-dependent
-fashion by an
-.PN XtFilePredicate
-.IN "XtFilePredicate" "" "@DEF@"
-procedure.
-.LP
-.sM
-.FD 0
-typedef Boolean (*XtFilePredicate)(String);
-.br
- String \fIfilename\fP;
-.FN
-.IP \fIfilename\fP 1i
-Specifies a potential filename.
-.LP
-.eM
-A file predicate procedure is called with a string that is
-potentially a file name. It should return
-.PN True
-if this string specifies a file that is appropriate for the intended use and
-.PN False
-otherwise.
-.sp
-.LP
-To search for a file using substitutions in a path list, use
-.PN XtFindFile .
-.LP
-.IN "XtFindFile" "" "@DEF@"
-.sM
-.FD 0
-String XtFindFile(\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \
-\fIpredicate\fP)
-.br
- String \fIpath\fP;
-.br
- Substitution \fIsubstitutions\fP;
-.br
- Cardinal \fInum_substitutions\fP;
-.br
- XtFilePredicate \fIpredicate\fP;
-.FN
-.IP \fIpath\fP 1.2i
-Specifies a path of file names, including substitution characters.
-.IP \fIsubstitutions\fP 1.2i
-Specifies a list of substitutions to make into the path.
-.IP \fInum_substitutions\fP 1.2i
-Specifies the number of substitutions passed in.
-.IP \fIpredicate\fP 1.2i
-Specifies a procedure called to judge each potential file name, or NULL.
-.LP
-.eM
-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,
-.PN 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,
-.PN 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
-.PN 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
-.PN True ;
-this string is the return value for
-.PN XtFindFile .
-If no string yields a
-.PN True
-return from the predicate,
-.PN 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 is used.
-.LP
-It is the responsibility of the caller to free the returned string using
-.PN XtFree
-when it is no longer needed.
-.sp
-.LP
-To search for a file using standard substitutions in a path list, use
-.PN XtResolvePathname .
-.LP
-.IN "XtResolvePathname" "" "@DEF@"
-.sM
-.FD 0
-String XtResolvePathname(\fIdisplay\fP, \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \
-\fIpath\fP, \fIsubstitutions\fP, \fInum_substitutions\fP, \fIpredicate\fP)
-.br
- Display *\fIdisplay\fP;
-.br
- String \fItype\fP, \fIfilename\fP, \fIsuffix\fP, \fIpath\fP;
-.br
- Substitution \fIsubstitutions\fP;
-.br
- Cardinal \fInum_substitutions\fP;
-.br
- XtFilePredicate \fIpredicate\fP;
-.FN
-.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.
-.LP
-.eM
-The substitutions specified by
-.PN XtResolvePathname
-are determined from the value of the language string retrieved by
-.PN 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
-.PN XtResolvePathname
-calls
-.PN XtFindFile
-with the following substitutions
-in addition to any passed by the caller and returns the value returned by
-.PN 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
-.PN XtResolvePathname ,
-it is passed along to
-.PN XtFindFile .
-If the \fIpath\fP argument is NULL, the value of the
-.PN \s-1XFILESEARCHPATH\s+1
-.IN "XFILESEARCHPATH" "" "@DEF@"
-environment variable is passed to
-.PN XtFindFile .
-If
-.PN \s-1XFILESEARCHPATH\s+1
-is not defined, an implementation-specific default path is used
-that contains at least six entries. These entries
-must contain the following substitutions:
-
-.nf
-.ta .3i 2i 2.5i
-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
-are implementation-dependent.
-If the path begins
-with a colon, it is preceded by %N%S. If the path includes two
-adjacent colons, \fB%N%S\fP is 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
-/usr/lib/X11/%L/%T/%N%C%S:/usr/lib/X11/%l/%T/%N%C%S:\\
-.br
-/usr/lib/X11/%T/%N%C%S:/usr/lib/X11/%L/%T/%N%S:\\
-.br
-/usr/lib/X11/%l/%T/%N%S:/usr/lib/X11/%T/%N%S
-
-.LP
-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 \fItype\fP
-parameter is used as a subdirectory of the language directory or of
-/usr/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
-.PN \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
-.PN 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
-.PN 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
-.PN XtFree
-when it is no longer needed.
-
-.NH 2
-Hooks for External Agents
-.XS
-\fB\*(SN Hooks for External Agents\fP
-.XE
-.LP
-Applications may register
-functions that are called at a particular control points in the \*(xI.
-These functions are intended to be used to provide notification
-of an \*Q\*(tk event\*U, 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 \*Qhook registration\*U object.
-.LP
-To retrieve the hook registration widget, use
-.PN XtHooksOfDisplay .
-.LP
-.IN "XtHooksOfDisplay" "" "@DEF@"
-.sM
-.FD 0
-Widget XtHooksOfDisplay(\fIdisplay\fP)
-.br
- Display *\fIdisplay\fP;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the desired display.
-.LP
-.eM
-The class of this object is a private, implementation-dependent
-subclass of
-.PN 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.
-.LP
-The following procedures can be called with the hook registration object
-as an argument:
-.sp
-.IP
-.PN XtAddCallback ,
-.PN XtAddCallbacks ,
-.PN XtRemoveCallback ,
-.PN XtRemoveCallbacks ,
-.PN XtRemoveAllCallbacks ,
-.PN XtCallCallbacks ,
-.PN XtHasCallbacks ,
-.PN XtCallCallbackList
-.IP
-.PN XtClass ,
-.PN XtSuperclass ,
-.PN XtIsSubclass ,
-.PN XtCheckSubclass ,
-.PN XtIsObject ,
-.PN XtIsRectObj ,
-.PN XtIsWidget ,
-.PN XtIsComposite ,
-.PN XtIsConstraint ,
-.PN XtIsShell ,
-.PN XtIsOverrideShell ,
-.PN XtIsWMShell ,
-.PN XtIsVendorShell ,
-.PN XtIsTransientShell ,
-.PN XtIsToplevelShell ,
-.PN XtIsApplicationShell ,
-.PN XtIsSessionShell
-.IP
-.PN XtWidgetToApplicationContext
-.IP
-.PN XtName ,
-.PN XtParent ,
-.PN XtDisplayOfObject ,
-.PN XtScreenOfObject
-.IP
-.PN XtSetValues ,
-.PN XtGetValues ,
-.PN XtVaSetValues ,
-.PN XtVaGetValues
-.sp
-.LP
-
-.NH 3
-Hook Object Resources
-.XS
-\fB\*(SN Hook Object Resources\fP
-.XE
-.LP
-The resource names, classes, and representation types that are specified
-in the hook object resource list are:
-.KS
-.TS
-lw(1.5i) lw(1.5i) lw(2.5i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNcreateHook XtCCallback XtRCallback
-XtNchangeHook XtCCallback XtRCallback
-XtNconfigureHook XtCCallback XtRCallback
-XtNgeometryHook XtCCallback XtRCallback
-XtNdestroyHook XtCCallback XtRCallback
-XtNshells XtCReadOnly XtRWidgetList
-XtNnumShells XtCReadOnly XtRCardinal
-.sp 6p
-_
-.TE
-.KE
-.LP
-Descriptions of each of these resources:
-.LP
-The XtNcreateHook callback list is called from:
-.PN XtCreateWidget ,
-.PN XtCreateManagedWidget ,
-.PN XtCreatePopupShell ,
-.PN XtAppCreateShell ,
-and their corresponding varargs versions.
-.LP
-The \fIcall_data\fP parameter in a createHook callback may be
-cast to type
-.PN XtCreateHookData .
-.LP
-.IN "XtCreateHookData" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String type;
- Widget widget;
- ArgList args;
- Cardinal num_args;
-} XtCreateHookDataRec, *XtCreateHookData;
-.De
-.eM
-.LP
-The \fItype\fP is set to
-.PN XtHcreate ,
-\fIwidget\fP is the newly created widget, and \fIargs\fP and \fInum_args\fP
-are the arguments passed to the create function. The callbacks are
-called before returning from the create function.
-.LP
-The XtNchangeHook callback list is called from:
-.IP
-.PN XtSetValues ,
-.PN XtVaSetValues
-.IP
-.PN XtManageChild ,
-.PN XtManageChildren ,
-.PN XtUnmanageChild ,
-.PN XtUnmanageChildren
-.IP
-.PN XtRealizeWidget ,
-.PN XtUnrealizeWidget
-.IP
-.PN XtAddCallback ,
-.PN XtRemoveCallback ,
-.PN XtAddCallbacks,
-.PN XtRemoveCallbacks ,
-.PN XtRemoveAllCallbacks
-.IP
-.PN XtAugmentTranslations ,
-.PN XtOverrideTranslations ,
-.PN XtUninstallTranslations
-.IP
-.PN XtSetKeyboardFocus ,
-.PN XtSetWMColormapWindows
-.IP
-.PN XtSetMappedWhenManaged ,
-.PN XtMapWidget ,
-.PN XtUnmapWidget
-.IP
-.PN XtPopup ,
-.PN XtPopupSpringLoaded ,
-.PN XtPopdown
-.LP
-.sp
-.LP
-The \fIcall_data\fP parameter in a changeHook callback may
-be cast to type
-.PN XtChangeHookData .
-.IN "XtChangeHookData" "" "@DFEF@"
-.LP
-.KS
-.sM
-.Ds 0
-.TA .5i 2.5i
-.ta .5i 2.5i
-typedef struct {
- String type;
- Widget widget;
- XtPointer event_data;
- Cardinal num_event_data;
-} XtChangeHookDataRec, *XtChangeHookData;
-.De
-.eM
-.KE
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtSetValues
-or
-.PN XtVaSetValues ,
-\fItype\fP is set to
-.PN XtHsetValues ,
-\fIwidget\fP is the new widget passed to the set_values procedure, and
-\fIevent_data\fP may be cast to type
-.PN XtChangeHookSetValuesData .
-.IN "XtChangeHookSetValuesData" "" "@DEF@"
-.LP
-.KS
-.sM
-.Ds 0
-.TA .5i 2.5i
-.ta .5i 2.5i
-typedef struct {
- Widget old, req;
- ArgList args;
- Cardinal num_args;
-} XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData;
-.De
-.eM
-.KE
-.LP
-The \fIold\fP, \fIreq\fP, \fIargs\fP, and \fInum_args\fP 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.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtManageChild
-or
-.PN XtManageChildren ,
-\fItype\fP is set to
-.PN XtHmanageChildren ,
-\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type
-WidgetList and is the list of children being managed, and
-\fInum_event_data\fP is the length of the widget list.
-The callbacks are called after the children have been managed.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtUnmanageChild
-or
-.PN XtUnmanageChildren ,
-\fItype\fP is set to
-.PN XtHunmanageChildren ,
-\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type
-WidgetList and is a list of the children being unmanaged, and
-\fInum_event_data\fP is the length of the widget list.
-The callbacks are called after the children have been unmanaged.
-.LP
-The changeHook callbacks are called twice as a result of a call to
-.PN XtChangeManagedSet ,
-once after unmanaging and again after managing.
-When the callbacks are called the first time, \fItype\fP is set to
-.PN XtHunmanageSet ,
-\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type
-WidgetList and is a list of the children being unmanaged, and
-\fInum_event_data\fP is the length of the widget list.
-When the callbacks are called the second time, the \fItype\fP is set to
-.PN XtHmanageSet ,
-\fIwidget\fP is the parent, \fIevent_data\fP may be cast to type
-WidgetList and is a list of the children being managed, and
-\fInum_event_data\fP is the length of the widget list.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtRealizeWidget ,
-the \fItype\fP is set to
-.PN XtHrealizeWidget
-and \fIwidget\fP is the widget being realized.
-The callbacks are called after the widget has been realized.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtUnrealizeWidget ,
-the \fItype\fP is set to
-.PN XtHunrealizeWidget ,
-and \fIwidget\fP is the widget being unrealized.
-The callbacks are called after the widget has been unrealized.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtAddCallback ,
-\fItype\fP is set to
-.PN XtHaddCallback ,
-\fIwidget\fP is the widget to which the callback is being added, and
-\fIevent_data\fP 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.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtAddCallbacks ,
-the \fItype\fP is set to
-.PN XtHaddCallbacks ,
-\fIwidget\fP is the widget to which the callbacks are being added, and
-\fIevent_data\fP 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.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtRemoveCallback ,
-the \fItype\fP is set to
-.PN XtHremoveCallback ,
-\fIwidget\fP is the widget from which the callback is being removed, and
-\fIevent_data\fP 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.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtRemoveCallbacks ,
-the \fItype\fP is set to
-.PN XtHremoveCallbacks ,
-\fIwidget\fP is the widget from which the callbacks are being removed, and
-\fIevent_data\fP 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.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtRemoveAllCallbacks ,
-the \fItype\fP is set to
-.PN XtHremoveAllCallbacks
-and \fIwidget\fP is the widget from which the callbacks are being removed.
-The callbacks are called after the callbacks have been removed from the
-widget.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtAugmentTranslations ,
-the \fItype\fP is set to
-.PN XtHaugmentTranslations
-and \fIwidget\fP is the widget whose translations are being modified.
-The callbacks are called after the widget's translations have been
-modified.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtOverrideTranslations ,
-the \fItype\fP is set to
-.PN XtHoverrideTranslations
-and \fIwidget\fP is the widget whose translations are being modified.
-The callbacks are called after the widget's translations have been
-modified.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtUninstallTranslations ,
-The \fItype\fP is
-.PN XtHuninstallTranslations
-and \fIwidget\fP is the widget whose translations are being uninstalled.
-The callbacks are called after the widget's translations have been
-uninstalled.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtSetKeyboardFocus ,
-the \fItype\fP is set to
-.PN XtHsetKeyboardFocus
-and \fIevent_data\fP may be cast to type Widget and is the value of
-the descendant argument passed to \fBXtSetKeyboardFocus\fP. The
-callbacks are called before returning from \fBXtSetKeyboardFocus\fP.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtSetWMColormapWindows ,
-\fItype\fP is set to
-.PN XtHsetWMColormapWindows ,
-\fIevent_data\fP may be cast to type WidgetList and is the value of
-the list argument passed to \fBXtSetWMColormapWindows\fP, and
-\fInum_event_data\fP is the length of the list. The callbacks are
-called before returning from \fBXtSetWMColormapWindows\fP.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtSetMappedWhenManaged ,
-the \fItype\fP is set to
-.PN XtHsetMappedWhenManaged
-and \fIevent_data\fP may be cast to type Boolean and is the value of
-the mapped_when_managed argument passed to \fBXtSetMappedWhenManaged\fP.
-The callbacks are called after setting the widget's mapped_when_managed
-field and before realizing or unrealizing the widget.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtMapWidget ,
-the \fItype \fP is set to
-.PN XtHmapWidget
-and \fIwidget\fP is the widget being mapped.
-The callbacks are called after mapping the widget.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtUnmapWidget ,
-the \fItype \fP is set to
-.PN XtHunmapWidget
-and \fIwidget\fP is the widget being unmapped.
-The callbacks are called after unmapping the widget.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtPopup ,
-the \fItype\fP is set to
-.PN XtHpopup ,
-\fIwidget\fP is the widget being popped up, and \fIevent_data\fP may
-be cast to type XtGrabKind and is the value of the grab_kind argument
-passed to \fBXtPopup\fP.
-The callbacks are called before returning from \fBXtPopup\fP.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtPopupSpringLoaded ,
-the \fItype\fP is set to
-.PN XtHpopupSpringLoaded
-and \fIwidget\fP is the widget being popped up.
-The callbacks are called
-before returning from \fBXtPopupSpringLoaded\fP.
-.LP
-When the changeHook callbacks are called as a result of a call to
-.PN XtPopdown ,
-the \fItype\fP is set to
-.PN XtHpopdown
-and \fIwidget\fP is the widget being popped down.
-The callbacks are called
-before returning from \fBXtPopdown\fP.
-.LP
-A widget set that exports interfaces that change application state
-without employing the \*(xI library should invoke the change hook
-itself. This is done by:
-.sp
-.Ds
-.TA .5i 2i
-.ta .5i 2i
- XtCallCallbacks(XtHooksOfDisplay(dpy), XtNchangeHook, call_data);
-.De
-.sp
-.LP
-The XtNconfigureHook callback list is called any time the \*(xI
-move, resize, or configure a widget and when
-.PN XtResizeWindow
-is called.
-.LP
-The \fIcall_data\fP parameter may be cast to type
-.PN XtConfigureHookData.
-.LP
-.IN "XtConfigureHookData" "" "@DEF@"
-.KS
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String type;
- Widget widget;
- XtGeometryMask changeMask;
- XWindowChanges changes;
-} XtConfigureHookDataRec, *XtConfigureHookData;
-.De
-.eM
-.KE
-.sp
-.LP
-When the configureHook callbacks are called, the \fItype\fP is
-.PN XtHconfigure ,
-\fIwidget\fP is the widget being configured, and \fIchangeMask\fP and
-\fIchanges\fP reflect the changes made to the widget. The callbacks
-are called after changes have been made to the widget.
-.LP
-The XtNgeometryHook callback list is called from
-.PN XtMakeGeometryRequest
-and
-.PN XtMakeResizeRequest
-once before and once after geometry negotiation occurs.
-.LP
-The \fIcall_data\fP parameter may be cast to type
-.PN XtGeometryHookData .
-.LP
-.IN "XtGeometryHookData" "" "@DFEF@"
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String type;
- Widget widget;
- XtWidgetGeometry* request;
- XtWidgetGeometry* reply;
- XtGeometryResult result;
-} XtGeometryHookDataRec, *XtGeometryHookData;
-.De
-.eM
-.sp
-.LP
-When the geometryHook callbacks are called prior to geometry negotiation,
-the \fItype\fP is
-.PN XtHpreGeometry ,
-\fIwidget\fP is the widget for which the request is being made, and
-\fIrequest\fP is the requested geometry.
-When the geometryHook callbacks
-are called after geometry negotiation, the \fItype\fP is
-.PN XtHpostGeometry ,
-\fIwidget\fP is the widget for which the request was made, \fIrequest\fP
-is the requested geometry, \fIreply\fP is the resulting geometry granted,
-and \fIresult\fP is the value returned from the geometry negotiation.
-.LP
-The XtNdestroyHook callback list is called when a widget is destroyed.
-The \fIcall_data parameter\fP may be cast to type
-.PN XtDestroyHookData .
-.LP
-.IN "XtDestroyHookData" "" "@DFEF@"
-.sp
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- String type;
- Widget widget;
-} XtDestroyHookDataRec, *XtDestroyHookData;
-.De
-.eM
-.sp
-.LP
-When the destroyHook callbacks are called as a result of a call to
-.PN XtDestroyWidget ,
-the \fItype\fP is
-.PN XtHdestroy
-and \fIwidget\fP is the widget being destroyed. The callbacks are
-called upon completion of phase one destroy for a widget.
-.LP
-The XtNshells and XtnumShells are read-only resources that report a
-list of all parentless shell widgets associated with a display.
-.LP
-Clients who use these hooks must exercise caution in calling \*(xI
-functions in order to avoid recursion.
-
-.NH 3
-Querying Open Displays
-.XS
-\fB\*(SN Querying Open Displays\fP
-.XE
-.LP
-To retrieve a list of the Displays associated with an application context,
-use
-.PN XtGetDisplays .
-.LP
-.IN "XtGetDisplays" "" "@DEF@"
-.sM
-.FD 0
-void XtGetDisplays(\fIapp_context\fP, \fIdpy_return\fP, \fInum_dpy_return\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- Display ***\fIdpy_return\fP;
-.br
- Cardinal *\fInum_dpy_return\fP;
-.FN
-.IP \fIapp_context\fP 1.5i
-Specifies the application context.
-.IP \fIdpy_return\fP 1.5i
-Returns a list of open Display connections in the specified application
-context.
-.IP \fInum_dpy_return\fP 1.5i
-Returns the count of open Display connections in \fIdpy_return\fP.
-.LP
-.eM
-\fBXtGetDisplays\fP 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
-.PN XtFree .
-.bp
diff --git a/libXt/specs/CH11.xml b/libXt/specs/CH11.xml
new file mode 100644
index 000000000..92e46dc57
--- /dev/null
+++ b/libXt/specs/CH11.xml
@@ -0,0 +1,5538 @@
+<chapter id='Utility_Functions'>
+<title>Utility Functions</title>
+<para>
+The Intrinsics provide a number of utility functions that you can use to
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Determine the number of elements in an array.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Translate strings to widget instances.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Manage memory usage.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Share graphics contexts.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Manipulate selections.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Merge exposure events into a region.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Translate widget coordinates.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Locate a widget given a window id.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Handle errors.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Set the WM_COLORMAP_WINDOWS property.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Locate files by name with string substitutions.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Register callback functions for external agents.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Locate all the displays of an application context.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<sect1 id="Determining_the_Number_of_Elements_in_an_Array">
+<title>Determining the Number of Elements in an Array</title>
+<para>
+To determine the number of elements in a fixed-size array, use
+<xref linkend='XtNumber' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtNumber'>
+<funcprototype>
+<funcdef>Cardinal <function>XtNumber</function></funcdef>
+ <paramdef>ArrayType <parameter>array</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>array</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a fixed-size array of arbitrary type.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtNumber' xrefstyle='select: title'/>
+macro returns the number of elements allocated to the array.
+</para>
+</sect1>
+
+<sect1 id="Translating_Strings_to_Widget_Instances">
+<title>Translating Strings to Widget Instances</title>
+<para>
+To translate a widget name to a widget instance, use
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtNameToWidget'>
+<funcprototype>
+<funcdef>Widget <function>XtNameToWidget</function></funcdef>
+ <paramdef>Widget <parameter>reference</parameter></paramdef>
+ <paramdef>String <parameter>names</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>reference</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget from which the search is to start. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>names</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the partially qualified name of the desired widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
+function searches for a descendant of the <emphasis remap='I'>reference</emphasis>
+widget whose name matches the specified names. The <emphasis remap='I'>names</emphasis> parameter
+specifies a simple object name or a series of simple object name
+components separated by periods or asterisks.
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
+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 :
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Return the first object in the enumeration that matches the
+specified name, where each component of <emphasis remap='I'>names</emphasis> matches exactly the
+corresponding component of the qualified object name and asterisk
+matches any series of components, including none.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If no match is found, return NULL.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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,
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
+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.
+</para>
+</sect1>
+
+<sect1 id="Managing_Memory_Usage">
+<title>Managing Memory Usage</title>
+<para>
+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
+<function>malloc</function>,
+<function>calloc</function>,
+<function>realloc</function>,
+and
+<function>free</function>
+with the following added functionality:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+and
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+give an error if there is not enough memory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtFree' xrefstyle='select: title'/>
+simply returns if passed a NULL pointer.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+simply allocates new storage if passed a NULL pointer.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+See the standard C library documentation on
+<function>malloc</function>,
+<function>calloc</function>,
+<function>realloc</function>,
+and
+<function>free</function>
+for more information.
+</para>
+
+<para>
+To allocate storage, use
+<xref linkend='XtMalloc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMalloc'>
+<funcprototype>
+<funcdef>char * <function>XtMalloc</function></funcdef>
+ <paramdef>Cardinal <parameter>size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>size</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of bytes desired.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtMalloc' xrefstyle='select: title'/>
+function returns a pointer to a block of storage of at least
+the specified <emphasis remap='I'>size</emphasis> bytes.
+If there is insufficient memory to allocate the new block,
+<xref linkend='XtMalloc' xrefstyle='select: title'/>
+calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To allocate and initialize an array, use
+<xref linkend='XtCalloc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCalloc'>
+<funcprototype>
+<funcdef>char * <function>XtCalloc</function></funcdef>
+ <paramdef>Cardinal <parameter>num</parameter></paramdef>
+ <paramdef>Cardinal <parameter>size</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of array elements to allocate.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>size</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size of each array element in bytes.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtCalloc' xrefstyle='select: title'/>
+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,
+<xref linkend='XtCalloc' xrefstyle='select: title'/>
+calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+<xref linkend='XtCalloc' xrefstyle='select: title'/>
+returns the address of the allocated storage.
+</para>
+
+<para>
+To change the size of an allocated block of storage, use
+<xref linkend='XtRealloc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtRealloc'>
+<funcprototype>
+<funcdef>char *<function>XtRealloc</function></funcdef>
+ <paramdef>char *<parameter>ptr</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>ptr</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the old storage allocated with
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+or
+<xref linkend='XtRealloc' xrefstyle='select: title'/>,
+or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies number of bytes desired in new storage.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+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,
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+If <emphasis remap='I'>ptr</emphasis> is NULL,
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+simply calls
+<xref linkend='XtMalloc' xrefstyle='select: title'/>.
+<xref linkend='XtRealloc' xrefstyle='select: title'/>
+then returns the address of the new block.
+</para>
+
+<para>
+To free an allocated block of storage, use
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtFree'>
+<funcprototype>
+<funcdef>void <function>XtFree</function></funcdef>
+ <paramdef>char *<parameter>ptr</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>ptr</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a block of storage allocated with
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+or
+<xref linkend='XtRealloc' xrefstyle='select: title'/>,
+or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtFree' xrefstyle='select: title'/>
+function returns storage, allowing it to be reused.
+If <emphasis remap='I'>ptr</emphasis> is NULL,
+<xref linkend='XtFree' xrefstyle='select: title'/>
+returns immediately.
+</para>
+
+<para>
+To allocate storage for a new instance of a type, use
+<xref linkend='XtNew' xrefstyle='select: title'/>.
+</para>
+
+
+<funcsynopsis id='XtNew'>
+<funcprototype>
+<funcdef>type <function>XtNew</function></funcdef>
+ <paramdef>type <parameter>t</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a previously declared type.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtNew' xrefstyle='select: title'/>
+returns a pointer to the allocated storage.
+If there is insufficient memory to allocate the new block,
+<xref linkend='XtNew' xrefstyle='select: title'/>
+calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+<xref linkend='XtNew' xrefstyle='select: title'/>
+is a convenience macro that calls
+<xref linkend='XtMalloc' xrefstyle='select: title'/>
+with the following arguments specified:
+</para>
+<literallayout >
+((type *) XtMalloc((unsigned) sizeof(type)))
+</literallayout>
+<para>
+The storage allocated by
+<xref linkend='XtNew' xrefstyle='select: title'/>
+should be freed using
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To copy an instance of a string, use
+<xref linkend='XtNewString' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtNewString'>
+<funcprototype>
+<funcdef>String <function>XtNewString</function></funcdef>
+ <paramdef>String <parameter>string</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>string</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a previously declared string.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtNewString' xrefstyle='select: title'/>
+returns a pointer to the allocated storage.
+If there is insufficient memory to allocate the new block,
+<xref linkend='XtNewString' xrefstyle='select: title'/>
+calls
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+<xref linkend='XtNewString' xrefstyle='select: title'/>
+is a convenience macro that calls
+<xref linkend='XtMalloc' xrefstyle='select: title'/>
+with the following arguments specified:
+</para>
+<literallayout >
+(strcpy(XtMalloc((unsigned)strlen(str) + 1), str))
+</literallayout>
+<para>
+The storage allocated by
+<xref linkend='XtNewString' xrefstyle='select: title'/>
+should be freed using
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+</sect1>
+
+<sect1 id="Sharing_Graphics_Contexts">
+<title>Sharing Graphics Contexts</title>
+<para>
+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.
+</para>
+
+<para>
+To obtain a shareable GC with modifiable fields, use
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAllocateGC'>
+<funcprototype>
+<funcdef>GC <function>XtAllocateGC</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>Cardinal <parameter>depth</parameter></paramdef>
+ <paramdef>XtGCMask <parameter>value_mask</parameter></paramdef>
+ <paramdef>XGCValues *<parameter>values</parameter></paramdef>
+ <paramdef>XtGCMask <parameter>dynamic_mask</parameter></paramdef>
+ <paramdef>XtGCMask <parameter>unused_mask</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an object, giving the screen for which the
+returned GC is valid. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>depth</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the depth for which the returned GC is valid, or 0.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies fields of the GC that are initialized from <emphasis remap='I'>values</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>values</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the values for the initialized fields.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>dynamic_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies fields of the GC that will be modified by the caller.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>unused_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies fields of the GC that will not be needed by the caller.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>
+function returns a shareable GC that may be
+modified by the client. The <emphasis remap='I'>screen</emphasis> field of the specified
+widget or of the nearest widget ancestor of the specified
+object and the specified <emphasis remap='I'>depth</emphasis> argument supply
+the root and drawable depths for which the GC is to be
+valid. If <emphasis remap='I'>depth</emphasis> is zero, the depth is taken from the
+<emphasis remap='I'>depth</emphasis> field of the specified widget or of the nearest
+widget ancestor of the specified object.
+</para>
+
+<para>
+The <emphasis remap='I'>value_mask</emphasis> argument specifies fields of the GC
+that are initialized with the respective member of the
+<emphasis remap='I'>values</emphasis> structure. The <emphasis remap='I'>dynamic_mask</emphasis> 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 <emphasis remap='I'>unused_mask</emphasis> 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 <emphasis remap='I'>unused_mask</emphasis>. The caller may assume
+that at all times all fields not specified in either
+<emphasis remap='I'>dynamic_mask</emphasis> or <emphasis remap='I'>unused_mask</emphasis> have their default value if not
+specified in <emphasis remap='I'>value_mask</emphasis> or the value specified by <emphasis remap='I'>values</emphasis>.
+If a field is specified in both <emphasis remap='I'>value_mask</emphasis> and <emphasis remap='I'>dynamic_mask</emphasis>,
+the effect is as if it were specified only in <emphasis remap='I'>dynamic_mask</emphasis>
+and then immediately set to the value in <emphasis remap='I'>values</emphasis>. If a field
+is set in <emphasis remap='I'>unused_mask</emphasis> and also in either <emphasis remap='I'>value_mask</emphasis> or
+<emphasis remap='I'>dynamic_mask</emphasis>, the specification in <emphasis remap='I'>unused_mask</emphasis> is ignored.
+</para>
+
+<para>
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>
+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.
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>
+may modify and return an existing GC if it was allocated with a
+nonzero <emphasis remap='I'>unused_mask</emphasis>.
+</para>
+
+<para>
+To obtain a shareable GC with no modifiable fields, use
+<xref linkend='XtGetGC' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetGC'>
+<funcprototype>
+<funcdef>GC <function>XtGetGC</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>XtGCMask <parameter>value_mask</parameter></paramdef>
+ <paramdef>XGCValues *<parameter>values</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an object, giving the screen and depth for which the
+returned GC is valid. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies which fields of the <emphasis remap='I'>values</emphasis> structure are specified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>values</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the actual values for this GC.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetGC' xrefstyle='select: title'/>
+function returns a shareable, read-only GC.
+The parameters to this function are the same as those for
+<function>XCreateGC</function>
+except that an Object is passed instead of a Display.
+<xref linkend='XtGetGC' xrefstyle='select: title'/>
+is equivalent to
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>
+with <emphasis remap='I'>depth</emphasis>, <emphasis remap='I'>dynamic_mask</emphasis>, and <emphasis remap='I'>unused_mask</emphasis> all zero.
+</para>
+
+<para>
+<xref linkend='XtGetGC' xrefstyle='select: title'/>
+shares only GCs in which all values in the GC returned by
+<function>XCreateGC</function>
+are the same.
+In particular, it does not use the <emphasis remap='I'>value_mask</emphasis> provided to
+determine which fields of the GC a widget considers relevant.
+The <emphasis remap='I'>value_mask</emphasis> is used only to tell the server which fields should be
+filled in from <emphasis remap='I'>values</emphasis> and which it should fill in with default values.
+</para>
+
+<para>
+To deallocate a shared GC when it is no longer needed, use
+<xref linkend='XtReleaseGC' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtReleaseGC'>
+<funcprototype>
+<funcdef>void <function>XtReleaseGC</function></funcdef>
+ <paramdef>Widget <parameter>object</parameter></paramdef>
+ <paramdef>GC <parameter>gc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>object</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any object on the Display for which the GC was created. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>gc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shared GC obtained with either
+<xref linkend='XtAllocateGC' xrefstyle='select: title'/>
+or
+<xref linkend='XtGetGC' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Managing_Selections">
+<title>Managing Selections</title>
+<para>
+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 <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>.
+The Intrinsics supply functions for providing and receiving selection data in
+one logical piece (atomic transfers)
+or in smaller logical segments (incremental transfers).
+</para>
+
+<para>
+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.
+</para>
+
+<sect2 id='Setting_and_Getting_the_Selection_Timeout_Value'>
+<title>Setting and Getting the Selection Timeout Value</title>
+<para>
+To set the Intrinsics selection timeout, use
+<xref linkend='XtAppSetSelectionTimeout' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetSelectionTimeout'>
+<funcprototype>
+<funcdef>void <function>XtAppSetSelectionTimeout</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>unsigned long <parameter>timeout</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>timeout</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the selection timeout in milliseconds.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+To get the current selection timeout value, use
+<xref linkend='XtAppGetSelectionTimeout' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppGetSelectionTimeout'>
+<funcprototype>
+<funcdef>unsigned long <function>XtAppGetSelectionTimeout</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppGetSelectionTimeout' xrefstyle='select: title'/>
+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
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+If
+selectionTimeout
+is not specified,
+the default is five seconds.
+</para>
+</sect2>
+
+<sect2 id="Using_Atomic_Transfers">
+<title>Using Atomic Transfers</title>
+<para>
+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.
+</para>
+
+<sect3 id="Atomic_Transfer_Procedures">
+<title>Atomic Transfer Procedures</title>
+<para>
+The following procedures are used by the selection owner when
+providing selection data in a single unit.
+</para>
+
+<para>
+The procedure pointer specified by the owner to supply the selection
+data to the Intrinsics is of type
+<xref linkend='XtConvertSelectionProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConvertSelectionProc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtConvertSelectionProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>target</parameter></paramdef>
+ <paramdef>Atom *<parameter>type_return</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>value_return</parameter></paramdef>
+ <paramdef>unsigned long *<parameter>length_return</parameter></paramdef>
+ <paramdef>int *<parameter>format_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that currently owns this selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom naming the selection requested
+(for example,
+<function>XA_PRIMARY</function>
+or
+<function>XA_SECONDARY ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+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).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>XA_STRING</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<xref linkend='XtSelectionDoneProc' xrefstyle='select: title'/>
+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
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is done with it.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which the number of elements in <emphasis remap='I'>value_return</emphasis>,
+each of size indicated by <emphasis remap='I'>format_return</emphasis>, is to be stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which the size in bits of the data elements
+of the selection value is to be stored.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<function>True</function>
+if the owner successfully converted the selection to the target type or
+<function>False</function>
+otherwise.
+If the procedure returns
+<function>False</function>,
+the values of the return arguments are undefined.
+Each
+<xref linkend='XtConvertSelectionProc' xrefstyle='select: title'/>
+should respond to target value
+<function>TARGETS</function>
+by returning a value containing the list of the targets
+into which it is
+prepared to convert the selection.
+The value returned in
+<emphasis remap='I'>format_return</emphasis> must be one of 8, 16, or 32 to allow the server to
+byte-swap the data if necessary.
+</para>
+
+<para>
+This procedure does not need to worry about responding to the
+MULTIPLE or the TIMESTAMP target values (see
+<xref linkend='Window_Creation_Convenience_Routine' />
+in the <olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual.</olink>).
+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
+<xref linkend='XtOwnSelection' xrefstyle='select: title'/>
+or
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To retrieve the
+<function>SelectionRequest</function>
+event that triggered the
+<xref linkend='XtConvertSelectionProc' xrefstyle='select: title'/>
+procedure, use
+<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetSelectionRequest'>
+<funcprototype>
+<funcdef>XSelectionRequestEvent *<function>XtGetSelectionRequest</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>XtRequestId <parameter>request_id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that currently owns this selection. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the selection being processed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request_id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the requestor id in the case of incremental
+selections, or NULL in the case of atomic transfers.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>
+may be called only from within an
+<xref linkend='XtConvertSelectionProc' xrefstyle='select: title'/>
+procedure and returns a pointer to the
+<function>SelectionRequest</function>
+event that caused the conversion procedure to be invoked.
+<emphasis remap='I'>Request_id</emphasis> specifies a unique id for the individual request in the
+case that multiple incremental transfers are outstanding. For atomic
+transfers, <emphasis remap='I'>request_id</emphasis> must be specified as NULL. If no
+<function>SelectionRequest</function>
+event is being processed for the specified
+<emphasis remap='I'>widget</emphasis>, <emphasis remap='I'>selection</emphasis>, and <emphasis remap='I'>request_id</emphasis>,
+<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>
+returns NULL.
+</para>
+
+<para>
+The procedure pointer specified by the owner when it desires
+notification upon losing ownership is of type
+<xref linkend='XtLoseSelectionProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtLoseSelectionProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtLoseSelectionProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that has lost selection ownership.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom naming the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+</para>
+
+<para>
+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
+<xref linkend='XtSelectionDoneProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSelectionDoneProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtSelectionDoneProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>target</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that owns the converted selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom naming the selection that was converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the target type to which the conversion was done.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtSelectionDoneProc' xrefstyle='select: title'/>,
+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
+<xref linkend='XtSelectionDoneProc' xrefstyle='select: title'/>,
+it also owns the storage containing the converted
+selection value.
+</para>
+</sect3>
+<sect3 id="Getting_the_Selection_Value">
+<title>Getting the Selection Value</title>
+<para>
+The procedure pointer specified by the requestor to receive the
+selection data from the Intrinsics is of type
+<xref linkend='XtSelectionCallbackProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSelectionCallbackProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtSelectionCallbackPro)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>type</parameter></paramdef>
+ <paramdef>XtPointer <parameter>value</parameter></paramdef>
+ <paramdef>unsigned long *<parameter>length</parameter></paramdef>
+ <paramdef>int *<parameter>format</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that requested the selection value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a value passed in by the widget when it requested the
+selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the selection that was requested.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the representation type of the selection value (for example,
+<function>XA_STRING ).</function>
+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
+<function>XT_CONVERT_FAIL</function>
+is used to indicate that the selection conversion failed because the
+selection owner did not respond within the Intrinsics selection timeout
+interval.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the selection value.
+The requesting client owns this storage and is responsible for freeing it
+by calling
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is done with it.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of elements in <emphasis remap='I'>value</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size in bits of the data in each element of <emphasis remap='I'>value</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This procedure is called by the Intrinsics selection mechanism to deliver the
+requested selection to the requestor.
+</para>
+
+<para>
+If the
+<function>SelectionNotify</function>
+event returns a property of
+<function>None</function>,
+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.
+</para>
+
+<para>
+To obtain the selection value in a single logical unit, use
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+or
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetSelectionValue'>
+<funcprototype>
+<funcdef>void <function>XtGetSelectionValue</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Atom <parameter>target</parameter></paramdef>
+ <paramdef>XtSelectionCallbackProc <parameter>callback</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired; for example,
+<function>XA_PRIMARY</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of information needed about the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies additional data to be passed to the specified procedure
+when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+function requests the value of the selection converted to
+the target type.
+The specified callback is called at some time after
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+is called, when the selection value is received from the X server.
+It may be called before or after
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+returns.
+For more information about <emphasis remap='I'>selection</emphasis>,
+<emphasis remap='I'>target</emphasis>, and
+<emphasis remap='I'>time</emphasis>, see
+<olink targetdoc='icccm' targetptr='Use_of_Selection_Atoms'>Section 2.6</olink> in the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual.</olink>.
+</para>
+
+<funcsynopsis id='XtGetSelectionValues'>
+<funcprototype>
+<funcdef>void <function>XtGetSelectionValues</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>targets</parameter></paramdef>
+ <paramdef>int <parameter>count</parameter></paramdef>
+ <paramdef>XtSelectionCallbackProc <parameter>callback</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>client_data</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired (that is, primary or secondary).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>targets</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the types of information needed about the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>count</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the length of the <emphasis remap='I'>targets</emphasis> and <emphasis remap='I'>client_data</emphasis> lists.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>
+function is similar to multiple calls to
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+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 <emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>, and
+<emphasis remap='I'>time</emphasis>, see
+<olink targetdoc='icccm' targetptr='Use_of_Selection_Atoms'>section 2.6</olink>
+in the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>.
+</para>
+</sect3>
+<sect3 id="Setting_the_Selection_Owner">
+<title>Setting the Selection Owner</title>
+<para>
+To set the selection owner and indicate that the selection value will
+be provided in one piece, use
+<xref linkend='XtOwnSelection' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOwnSelection'>
+<funcprototype>
+<funcdef>Boolean <function>XtOwnSelection</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+ <paramdef>XtConvertSelectionProc <parameter>convert_proc</parameter></paramdef>
+ <paramdef>XtLoseSelectionProc <parameter>lose_selection</parameter></paramdef>
+ <paramdef>XtSelectionDoneProc <parameter>done_proc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that wishes to become the owner. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the selection (for example,
+<function>XA_PRIMARY ).</function>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the timestamp that indicates when the ownership request was
+initiated.
+This should be the timestamp of the event that triggered ownership;
+the value
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called whenever a client requests the
+current value of the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>lose_selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>done_proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure called
+after the requestor has received the selection value, or NULL if the
+owner is not
+interested in being called back.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOwnSelection' xrefstyle='select: title'/>
+function informs the Intrinsics selection mechanism that a
+widget wishes to own a selection.
+It returns
+<function>True</function>
+if the widget successfully becomes the owner and
+<function>False</function>
+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.
+</para>
+
+<para>
+If a done_proc is specified, the client owns the storage allocated
+for passing the value to the Intrinsics. If <emphasis remap='I'>done_proc</emphasis> is NULL,
+the convert_proc must allocate storage using
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtRealloc' xrefstyle='select: title'/>,
+or
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+and the value specified is freed by the
+Intrinsics when the transfer is complete.
+</para>
+
+<para>
+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
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>
+that it no longer is to be the selection owner.
+</para>
+
+<funcsynopsis id='XtDisownSelection'>
+<funcprototype>
+<funcdef>void <function>XtDisownSelection</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that wishes to relinquish ownership.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom naming the selection being given up.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the timestamp that indicates when the request to
+relinquish selection ownership was initiated.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>
+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,
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>
+does nothing.
+</para>
+
+<para>
+After a widget has called
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>,
+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
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>
+finishes after the call to
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Using_Incremental_Transfers">
+<title>Using Incremental Transfers</title>
+<para>
+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
+<emphasis remap='I'>request_id</emphasis> argument, which is an identifier that is guaranteed to be
+unique among all incremental requests that are active concurrently.
+</para>
+
+<para>
+For example, consider the following:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Upon receiving a request for the selection value, the owner sends
+the first segment.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+</itemizedlist>
+<sect3 id="Incremental_Transfer_Procedures">
+<title>Incremental Transfer Procedures</title>
+<para>
+The following procedures are used by selection owners who wish to
+provide the selection data in multiple segments.
+</para>
+
+<para>
+The procedure pointer specified by the incremental owner to supply the
+selection data to the Intrinsics is of type
+<xref linkend='XtConvertSelectionIncrProc' xrefstyle='select: title'/>.
+</para>
+<literallayout >
+typedef XtPointer XtRequestId;
+</literallayout>
+
+<funcsynopsis id='XtConvertSelectionIncrProc'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtConvertSelectionIncrProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>target</parameter></paramdef>
+ <paramdef>Atom *<parameter>type_return</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>value_return</parameter></paramdef>
+ <paramdef>unsigned long *<parameter>length_return</parameter></paramdef>
+ <paramdef>int *<parameter>format_return</parameter></paramdef>
+ <paramdef>unsigned long *<parameter>max_length</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>XtRequestId *<parameter>request_id</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that currently owns this selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection requested.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of information required about the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to an atom into which the property
+type of the converted value of the selection is to be
+stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which the number of elements
+in <emphasis remap='I'>value_return</emphasis>, each of size indicated by
+<emphasis remap='I'>format_return</emphasis>, is to be stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>max_length</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the maximum number of bytes which may be
+transferred at any one time.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value passed in by the widget when it
+took ownership of the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request_id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an opaque identification for a specific request.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>.
+It must return
+<function>True</function>
+if the procedure has succeeded in converting the selection data or
+<function>False</function>
+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 <emphasis remap='I'>value_return</emphasis>
+for each segment to be transferred. This procedure should store a
+non-NULL value in <emphasis remap='I'>value_return</emphasis> and zero in <emphasis remap='I'>length_return</emphasis> 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.
+</para>
+
+<para>
+To retrieve the
+<function>SelectionRequest</function>
+event that triggered the selection conversion procedure, use
+<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>,
+described in Section 11.5.2.1.
+</para>
+
+<para>
+The procedure pointer specified by the incremental selection owner
+when it desires notification upon no longer having ownership is of
+type
+<xref linkend='XtLoseSelectionIncrProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtLoseSelectionIncrProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtLoseSelectionIncrProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that has lost the selection ownership.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value passed in by the widget when it
+took ownership of the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This procedure, which is optional, is called by the Intrinsics to
+inform the selection owner that it no longer owns the selection.
+</para>
+
+<para>
+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
+<xref linkend='XtSelectionDoneIncrProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSelectionDoneIncrProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtSelectionDoneIncrProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>target</parameter></paramdef>
+ <paramdef>XtRequestId *<parameter>request_id</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that owns the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection being transferred.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the target type to which the conversion was done.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request_id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an opaque identification for a specific request.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specified the value passed in by the widget when it
+took ownership of the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+
+<para>
+The procedure pointer specified by the incremental selection owner to
+notify it if a transfer should be terminated prematurely is of type
+<xref linkend='XtCancelConvertSelectionProc' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCancelConvertSelectionProc'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtCancelConvertSelectionProc)</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom *<parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>target</parameter></paramdef>
+ <paramdef>XtRequestId *<parameter>request_id</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that owns the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection being transferred.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the target type to which the conversion was done.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request_id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an opaque identification for a specific request.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value passed in by the widget when it took ownership of
+the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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.
+</para>
+</sect3>
+<sect3 id="Getting_the_Selection_Value_Incrementally">
+<title>Getting the Selection Value Incrementally</title>
+<para>
+To obtain the value of the selection using incremental transfers, use
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+or
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetSelectionValueIncremental'>
+<funcprototype>
+<funcdef>void <function>XtGetSelectionValueIncremental</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Atom <parameter>target</parameter></paramdef>
+ <paramdef>XtSelectionCallbackProc <parameter>selection_callback</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>target</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of information needed
+about the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback procedure to be
+called to receive each data segment.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies client-specific data to be passed to
+the specified callback procedure when it is invoked.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+function is similar to
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+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
+<emphasis remap='I'>selection_callback</emphasis> 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
+<function>XT_CONVERT_FAIL</function>
+so that the requestor can dispose
+of the partial selection value it has collected up until that point.
+Upon receiving
+<function>XT_CONVERT_FAIL</function>,
+the requesting client must determine
+for itself whether or not a partially completed data transfer is meaningful.
+For more information about <emphasis remap='I'>selection</emphasis>,
+<emphasis remap='I'>target</emphasis>, and
+<emphasis remap='I'>time</emphasis>, see
+<olink targetdoc='icccm' targetptr='Use_of_Selection_Atoms' /> in the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual.</olink>
+</para>
+
+<funcsynopsis id='XtGetSelectionValuesIncremental'>
+<funcprototype>
+<funcdef>void <function>XtGetSelectionValuesIncremental</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Atom *<parameter>targets</parameter></paramdef>
+ <paramdef>int <parameter>count</parameter></paramdef>
+ <paramdef>XtSelectionCallbackProc <parameter>selection_callback</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>client_data</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>targets</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the types of information needed about
+the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>count</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the length of the <emphasis remap='I'>targets</emphasis> and <emphasis remap='I'>client_data</emphasis> lists.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the callback procedure to be called
+to receive each selection value.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>
+function is similar to
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+except that it takes a list of targets and client data.
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>
+is equivalent to calling
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+successively for each <emphasis remap='I'>target/client_data</emphasis> pair except that
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>
+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
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+repeatedly.
+For more information about <emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>, and
+<emphasis remap='I'>time</emphasis>, see
+<olink targetdoc='icccm' targetptr='Use_of_Selection_Atoms'>Section 2.6</olink> in the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual.</olink>
+</para>
+</sect3>
+<sect3 id="Setting_the_Selection_Owner_for_Incremental_Transfers">
+<title>Setting the Selection Owner for Incremental Transfers</title>
+<para>
+To set the selection owner when using incremental transfers, use
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtOwnSelectionIncremental'>
+<funcprototype>
+<funcdef>Boolean <function>XtOwnSelectionIncremental</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+ <paramdef>XtConvertSelectionIncrProc <parameter>convert_callback</parameter></paramdef>
+ <paramdef>XtLoseSelectionIncrProc <parameter>lose_callback</parameter></paramdef>
+ <paramdef>XtSelectionDoneIncrProc <parameter>done_callback</parameter></paramdef>
+ <paramdef>XtCancelConvertSelectionProc <parameter>cancel_callback</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that wishes to become the owner. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+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
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called whenever
+the current value of the selection is requested.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>lose_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called whenever
+the widget has lost selection ownership, or NULL if the
+owner is not interested in being notified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>done_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure called after the
+requestor has received the entire selection, or NULL if
+the owner is not interested in being notified.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>cancel_callback</emphasis>
+ </term>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument to be passed to each of
+the callback procedures when they are called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>
+procedure informs the Intrinsics
+incremental selection mechanism that the specified widget wishes to
+own the selection. It returns
+<function>True</function>
+if the specified widget successfully becomes the selection owner or
+<function>False</function>
+otherwise.
+For more information about <emphasis remap='I'>selection</emphasis>, <emphasis remap='I'>target</emphasis>, and
+<emphasis remap='I'>time</emphasis>, see
+<olink targetdoc='icccm' targetptr='Use_of_Selection_Atoms'>Section 2.6</olink> in the
+<olink targetdoc='icccm' targetptr='icccm'>Inter-Client Communication Conventions Manual.</olink>
+</para>
+
+<para>
+If a done_callback procedure is specified, the client owns the storage allocated
+for passing the value to the Intrinsics. If <emphasis remap='I'>done_callback</emphasis> is NULL,
+the convert_callback procedure must allocate storage using
+<xref linkend='XtMalloc' xrefstyle='select: title'/>,
+<xref linkend='XtRealloc' xrefstyle='select: title'/>,
+or
+<xref linkend='XtCalloc' xrefstyle='select: title'/>,
+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.
+</para>
+
+<para>
+The lose_callback procedure does not indicate completion of any in-progress
+transfers; it is invoked at the time a
+<function>SelectionClear</function>
+event is dispatched regardless of any active transfers, which are still
+expected to continue.
+</para>
+
+<para>
+A widget that becomes the selection owner using
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>
+may use
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>
+to relinquish selection ownership.
+</para>
+</sect3>
+</sect2>
+
+<sect2 id="Setting_and_Retrieving_Selection_Target_Parameters">
+<title>Setting and Retrieving Selection Target Parameters</title>
+<para>
+To specify target parameters for a selection request with a single target,
+use
+<xref linkend='XtSetSelectionParameters' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetSelectionParameters'>
+<funcprototype>
+<funcdef>void <function>XtSetSelectionParameters</function></funcdef>
+ <paramdef>Widget <parameter>requestor</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Atom <parameter>type</parameter></paramdef>
+ <paramdef>XtPointer <parameter>value</parameter></paramdef>
+ <paramdef>unsigned long <parameter>length</parameter></paramdef>
+ <paramdef>int <parameter>format</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>requestor</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the atom that names the selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of the property in which the parameters are passed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of elements containing data in <emphasis remap='I'>value</emphasis>,
+each element of a size indicated by <emphasis remap='I'>format</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size in bits of the data in the elements of <emphasis remap='I'>value</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+or to
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+specifying the same requestor widget and selection atom will generate a
+<function>ConvertSelection</function>
+request referring to the property containing the parameters. If
+<xref linkend='XtSetSelectionParameters' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+The possible values of <emphasis remap='I'>format</emphasis> are 8, 16, or 32. If the format is 8,
+the elements of <emphasis remap='I'>value</emphasis> are assumed to be sizeof(char);
+if 16, sizeof(short); if 32, sizeof(long).
+</para>
+
+<para>
+To generate a MULTIPLE
+target request with parameters for any of the multiple targets of the
+selection request, precede individual calls to
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>
+and
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+with corresponding individual calls to
+<xref linkend='XtSetSelectionParameters' xrefstyle='select: title'/>,
+and enclose these all within
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>
+and
+<function>XtSendSelectionRequest.</function>
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>
+and
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>
+cannot be used to make selection requests with parameterized targets.
+</para>
+
+<para>
+To retrieve any target parameters needed to perform a selection conversion,
+the selection owner calls
+<xref linkend='XtGetSelectionParameters' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetSelectionParameters'>
+<funcprototype>
+<funcdef>void <function>XtGetSelectionParameters</function></funcdef>
+ <paramdef>Widget <parameter>owner</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>XtRequestId <parameter>request_id</parameter></paramdef>
+ <paramdef>Atom *<parameter>type_return</parameter></paramdef>
+ <paramdef>XtPointer *<parameter>value_return</parameter></paramdef>
+ <paramdef>unsigned long *<parameter>length_return</parameter></paramdef>
+ <paramdef>int *<parameter>format_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>owner</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget that owns the specified selection.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the selection being processed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>request_id</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the requestor id in the case of incremental selections,
+or NULL in the case of atomic transfers.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to an atom in which the property type
+of the parameters is stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>value_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which a pointer to the parameters is to be stored.
+A NULL is stored if no parameters accompany the request.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>length_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which the number of data elements
+in <emphasis remap='I'>value_return</emphasis> of size indicated by <emphasis remap='I'>format_return</emphasis> are stored.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>format_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer into which the size in bits of the parameter data
+in the elements of <emphasis remap='I'>value</emphasis> is stored.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetSelectionParameters' xrefstyle='select: title'/>
+may be called only from within an
+<xref linkend='XtConvertSelectionProc' xrefstyle='select: title'/>
+or from within the first call to an
+<xref linkend='XtConvertSelectionIncrProc' xrefstyle='select: title'/>
+with a new request_id.
+</para>
+
+<para>
+It is the responsibility of the caller to free the returned parameters using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when the parameters are no longer needed.
+</para>
+</sect2>
+
+<sect2 id="Generating_MULTIPLE_Requests">
+<title>Generating MULTIPLE Requests</title>
+<para>
+To have the Intrinsics bundle multiple calls to make selection requests into
+a single request using a <emphasis role='strong'>MULTIPLE</emphasis> target, use
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>
+and
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCreateSelectionRequest'>
+<funcprototype>
+<funcdef>void <function>XtCreateSelectionRequest</function></funcdef>
+ <paramdef>Widget <parameter>requestor</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>requestor</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+When
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>
+is called, subsequent calls to
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>,
+and
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>,
+with the requestor and selection as specified to
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>,
+are bundled into a single selection request with
+multiple targets. The request is made by calling
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSendSelectionRequest'>
+<funcprototype>
+<funcdef>void <function>XtSendSelectionRequest</function></funcdef>
+ <paramdef>Widget <parameter>requestor</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+ <paramdef>Time <parameter>time</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>requestor</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>time</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the timestamp that indicates when the selection request was
+initiated. The value
+<function>CurrentTime</function>
+is not acceptable.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+When
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>
+is called with a value of <emphasis remap='I'>requestor</emphasis> and <emphasis remap='I'>selection</emphasis> matching
+a previous call to
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>,
+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
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>,
+and
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>
+are invoked.
+</para>
+
+<para>
+Multi-threaded applications should lock the application context before
+calling
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>
+and release the lock after calling
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To relinquish the composition of a MULTIPLE request without sending it, use
+<xref linkend='XtCancelSelectionRequest' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtCancelSelectionRequest'>
+<funcprototype>
+<funcdef>void <function>XtCancelSelectionRequest</function></funcdef>
+ <paramdef>Widget <parameter>requestor</parameter></paramdef>
+ <paramdef>Atom <parameter>selection</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>requestor</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making the request. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>selection</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the particular selection desired.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+When
+<xref linkend='XtCancelSelectionRequest' xrefstyle='select: title'/>
+is called, any requests queued since the last call to
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>
+for the same widget and selection are discarded
+and any resources reserved are released.
+A subsequent call to
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>
+will not result in any request being made.
+Subsequent calls to
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>,
+or
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>
+will not be deferred.
+</para>
+</sect2>
+
+<sect2 id="Auxiliary_Selection_Properties">
+<title>Auxiliary Selection Properties</title>
+<para>
+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.
+</para>
+
+<para>
+To acquire a temporary property name atom for use in a selection
+request, the client may call
+<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtReservePropertyAtom'>
+<funcprototype>
+<funcdef>Atom <function>XtReservePropertyAtom</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget making a selection request.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To return a temporary property name atom for reuse and to delete
+the property named by that atom, use
+<xref linkend='XtReleasePropertyAtom' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtReleasePropertyAtom'>
+<funcprototype>
+<funcdef>void <function>XtReleasePropertyAtom</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Atom <parameter>atom</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget used to reserve the property name atom.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>atom</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the property name atom returned by
+<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/>
+that is to be released for reuse.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtReleasePropertyAtom' xrefstyle='select: title'/>
+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 <emphasis remap='I'>atom</emphasis> does not
+specify a value returned by
+<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/>
+for the specified widget, the results are undefined.
+</para>
+</sect2>
+
+<sect2 id="Retrieving_the_Most_Recent_Timestamp">
+<title>Retrieving the Most Recent Timestamp</title>
+<para>
+To retrieve the timestamp from the most recent call to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+that contained a timestamp, use
+<xref linkend='XtLastTimestampProcessed' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtLastTimestampProcessed'>
+<funcprototype>
+<funcdef>Time <function>XtLastTimestampProcessed</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an open display connection.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If no
+<function>KeyPress</function>,
+<function>KeyRelease</function>,
+<function>ButtonPress</function>,
+<function>ButtonRelease</function>,
+<function>MotionNotify</function>,
+<function>EnterNotify</function>,
+<function>LeaveNotify</function>,
+<function>PropertyNotify</function>,
+or
+<function>SelectionClear</function>
+event has yet been passed to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+for the specified display,
+<xref linkend='XtLastTimestampProcessed' xrefstyle='select: title'/>
+returns zero.
+</para>
+</sect2>
+
+<sect2 id="Retrieving_the_Most_Recent_Event">
+<title>Retrieving the Most Recent Event</title>
+<para>
+To retrieve the event from the most recent call to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+for a specific display, use
+<xref linkend='XtLastEventProcessed' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtLastEventProcessed'>
+<funcprototype>
+<funcdef>XEvent *<function>XtLastEventProcessed</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display connection from which to retrieve the event.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Returns the last event passed to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
+for the specified display. Returns NULL if there is no such event.
+The client must not modify the contents of the returned event.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Merging_Exposure_Events_into_a_Region">
+<title>Merging Exposure Events into a Region</title>
+<para>
+The Intrinsics provide an
+<xref linkend='XtAddExposureToRegion' xrefstyle='select: title'/>
+utility function that merges
+<function>Expose</function>
+and
+<function>GraphicsExpose</function>
+events into a region for clients to process at once
+rather than processing individual rectangles.
+For further information about regions,
+see <olink targetdoc='libX11' targetptr='Manipulating_Regions' />
+in <olink targetdoc='libX11' targetptr='libX11'>
+Xlib — C Language X Interface.</olink>.
+</para>
+
+<para>
+To merge
+<function>Expose</function>
+and
+<function>GraphicsExpose</function>
+events into a region, use
+<xref linkend='XtAddExposureToRegion' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddExposureToRegion'>
+<funcprototype>
+<funcdef>void <function>XtAddExposureToRegion</function></funcdef>
+ <paramdef>XEvent *<parameter>event</parameter></paramdef>
+ <paramdef>Region <parameter>region</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the
+<function>Expose</function>
+or
+<function>GraphicsExpose</function>
+event.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>region</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the region object (as defined in
+<function>&lt;X11/Xutil.h&gt;</function>).
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddExposureToRegion' xrefstyle='select: title'/>
+function computes the union of the rectangle defined by the exposure
+event and the specified region.
+Then it stores the results back in <emphasis remap='I'>region</emphasis>.
+If the event argument is not an
+<function>Expose</function>
+or
+<function>GraphicsExpose</function>
+event,
+<xref linkend='XtAddExposureToRegion' xrefstyle='select: title'/>
+returns without an error and without modifying <emphasis remap='I'>region</emphasis>.
+</para>
+
+<para>
+This function is used by the exposure compression mechanism;
+see <xref linkend='Exposure_Compression' />
+</para>
+</sect1>
+
+<sect1 id="Translating_Widget_Coordinates">
+<title>Translating Widget Coordinates</title>
+<para>
+To translate an x-y coordinate pair from widget coordinates to root
+window absolute coordinates, use
+<xref linkend='XtTranslateCoords' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtTranslateCoords'>
+<funcprototype>
+<funcdef>void <function>XtTranslateCoords</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>Position <parameter>x</parameter></paramdef>
+ <paramdef>Position *<parameter>rootx_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget. Must be of class RectObj or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>x</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>y</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the widget-relative x and y coordinates.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>rootx_return</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>rooty_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Return the root-relative x and y coordinates.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+While
+<xref linkend='XtTranslateCoords' xrefstyle='select: title'/>
+is similar to the Xlib
+<function>XTranslateCoordinates</function>
+function, it does not generate a server request because all the required
+information already is in the widget's data structures.
+</para>
+</sect1>
+
+<sect1 id="Translating_a_Window_to_a_Widget">
+<title>Translating a Window to a Widget</title>
+<para>
+To translate a given window and display pointer into a widget instance, use
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWindowToWidget'>
+<funcprototype>
+<funcdef>Widget <function>XtWindowToWidget</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>Window <parameter>window</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display on which the window is defined.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>window</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the drawable for which you want the widget.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If there is a realized widget whose window is the specified drawable on
+the specified <emphasis remap='I'>display</emphasis>,
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>
+returns that widget.
+If not and if the drawable has been associated with a widget through
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>,
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>
+returns the widget associated with the drawable. In other cases it
+returns NULL.
+</para>
+</sect1>
+
+<sect1 id="Handling_Errors">
+<title>Handling Errors</title>
+<para>
+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.
+</para>
+
+<para>
+Two levels of interface are provided:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A high-level interface that takes an error
+name and class and retrieves the error message text from
+an error resource database.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A low-level interface that takes a simple string to display.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+<note>
+<para>
+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.
+</para>
+</note>
+
+<para>
+To obtain the error database (for example, to merge with
+an application- or widget-specific database), use
+<xref linkend='XtAppGetErrorDatabase' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppGetErrorDatabase'>
+<funcprototype> <funcdef>XrmDatabase *<function>XtAppGetErrorDatabase</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppGetErrorDatabase' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppGetErrorDatabaseText' xrefstyle='select: title'/>.
+</para>
+
+<para>
+For a complete listing of all errors and warnings
+that can be generated by the Intrinsics, see <xref linkend='Intrinsics_Error_Messages' />
+</para>
+
+<para>
+The high-level error and warning handler procedure pointers are of type
+<xref linkend='XtErrorMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtErrorMsgHandler'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtErrorMsgHandler)</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>String <parameter>defaultp</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name to be concatenated with the specified type to form
+the resource name of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type to be concatenated with the name to form the
+resource name of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>defaultp</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if no error database entry is found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a list of parameters to be substituted in the message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<function>printf</function>
+notation is used to substitute the parameters into the message.
+</para>
+
+<para>
+An error message handler can obtain the error database text for an
+error or a warning by calling
+<xref linkend='XtAppGetErrorDatabaseText' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppGetErrorDatabaseText'>
+<funcprototype>
+<funcdef>void <function>XtAppGetErrorDatabaseText</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String <parameter>buffer_return</parameter></paramdef>
+ <paramdef>int <parameter>nbytes</parameter></paramdef>
+ <paramdef>XrmDatabase <parameter>database</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the name and type concatenated to form the resource name
+of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>buffer_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the buffer into which the error message is to be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nbytes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size of the buffer in bytes.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>database</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the alternative database to be used,
+or NULL if the application context's error database is to be used.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppGetErrorDatabaseText' xrefstyle='select: title'/>
+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 <emphasis remap='I'>name</emphasis> and <emphasis remap='I'>type</emphasis> are concatenated with a single "."
+between them and the <emphasis remap='I'>class</emphasis> is concatenated with itself with a
+single "." if it does not already contain a ".".
+</para>
+
+<para>
+To return the application name and class as passed to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+for a particular Display, use
+<xref linkend='XtGetApplicationNameAndClass' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetApplicationNameAndClass'>
+<funcprototype>
+<funcdef>void <function>XtGetApplicationNameAndClass</function></funcdef>
+ <paramdef>Display* <parameter>display</parameter></paramdef>
+ <paramdef>String* <parameter>name_return</parameter></paramdef>
+ <paramdef>String* <parameter>class_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies an open display connection that has been initialized with
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application name.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application class.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetApplicationNameAndClass' xrefstyle='select: title'/>
+returns the application name and class passed to
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+To register a procedure to be called on fatal error conditions, use
+<xref linkend='XtAppSetErrorMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetErrorMsgHandler'>
+<funcprototype>
+<funcdef>XtErrorMsgHandler <function>XtAppSetErrorMsgHandler</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtErrorMsgHandler <parameter>msg_handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>msg_handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new fatal error procedure, which should not return.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppSetErrorMsgHandler' xrefstyle='select: title'/>
+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
+<function>_XtDefaultErrorMsg</function>
+and constructs a string from the error resource database and calls
+<xref linkend='XtError' xrefstyle='select: title'/>.
+Fatal error message handlers should not return.
+If one does,
+subsequent Intrinsics behavior is undefined.
+</para>
+
+<para>
+To call the high-level error handler, use
+<xref linkend='XtAppErrorMsg' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppErrorMsg'>
+<funcprototype>
+<funcdef>void <function>XtAppErrorMsg</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the general kind of error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the detailed name of the error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a list of values to be stored in the message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The Intrinsics internal errors all have class
+"XtToolkitError".
+</para>
+
+<para>
+To register a procedure to be called on nonfatal error conditions, use
+<xref linkend='XtAppSetWarningMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetWarningMsgHandler'>
+<funcprototype>
+<funcdef>XtErrorMsgHandler <function>XtAppSetWarningMsgHandler</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtErrorMsgHandler <parameter>msg_handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>msg_handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new nonfatal error procedure, which usually returns.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppSetWarningMsgHandler' xrefstyle='select: title'/>
+returns a pointer to the previously
+installed high-level warning handler.
+The default high-level warning handler provided by the Intrinsics is named
+<function>_XtDefaultWarningMsg</function>
+and constructs a string
+from the error resource database and calls
+<xref linkend='XtWarning' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To call the installed high-level warning handler, use
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppWarningMsg'>
+<funcprototype>
+<funcdef>void <function>XtAppWarningMsg</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the general kind of error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the detailed name of the error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a list of values to be stored in the message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The Intrinsics internal warnings all have class
+"XtToolkitError".
+</para>
+
+<para>
+The low-level error and warning handler procedure pointers are of type
+<xref linkend='XtErrorHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtErrorHandler'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtErrorHandler)</function></funcdef>
+ <paramdef>String <parameter>message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The error handler should display the message string in some appropriate fashion.
+</para>
+
+<para>
+To register a procedure to be called on fatal error conditions, use
+<xref linkend='XtAppSetErrorHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetErrorHandler'>
+<funcprototype>
+<funcdef>XtErrorHandler <function>XtAppSetErrorHandler</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtErrorHandler <parameter>handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new fatal error procedure, which should not return.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppSetErrorHandler' xrefstyle='select: title'/>
+returns a pointer to the previously installed
+low-level fatal error handler.
+The default low-level error handler provided by the Intrinsics is
+<function>_XtDefaultError</function>.
+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.
+</para>
+
+<para>
+To call the installed fatal error procedure, use
+<xref linkend='XtAppError' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppError'>
+<funcprototype>
+<funcdef>void <function>XtAppError</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the message to be reported.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most programs should use
+<xref linkend='XtAppErrorMsg' xrefstyle='select: title'/>,
+not
+<xref linkend='XtAppError' xrefstyle='select: title'/>,
+to provide for customization and internationalization of error messages.
+</para>
+
+<para>
+To register a procedure to be called on nonfatal error conditions, use
+<xref linkend='XtAppSetWarningHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppSetWarningHandler'>
+<funcprototype>
+<funcdef>XtErrorHandler <function>XtAppSetWarningHandler</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>XtErrorHandler <parameter>handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new nonfatal error procedure, which usually returns.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppSetWarningHandler' xrefstyle='select: title'/>
+returns a pointer to the previously installed
+low-level warning handler.
+The default low-level warning handler provided by the Intrinsics is
+<function>_XtDefaultWarning</function>.
+On POSIX-based systems,
+it prints the message to standard error and returns to the caller.
+</para>
+
+<para>
+To call the installed nonfatal error procedure, use
+<xref linkend='XtAppWarning' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppWarning'>
+<funcprototype>
+<funcdef>void <function>XtAppWarning</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the nonfatal error message to be reported.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most programs should use
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>,
+not
+<xref linkend='XtAppWarning' xrefstyle='select: title'/>,
+to provide for customization and internationalization of warning messages.
+</para>
+</sect1>
+
+<sect1 id="Setting_WM_COLORMAP_WINDOWS">
+<title>Setting WM_COLORMAP_WINDOWS</title>
+<para>
+A client may set the value of the <emphasis role='strong'>WM_COLORMAP_WINDOWS</emphasis>
+property on a widget's window by calling
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetWMColormapWindows'>
+<funcprototype>
+<funcdef>void <function>XtSetWMColormapWindows</function></funcdef>
+ <paramdef>Widget <parameter>widget</parameter></paramdef>
+ <paramdef>Widget* <parameter>list</parameter></paramdef>
+ <paramdef>Cardinal <parameter>count</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget on whose window the <emphasis role='strong'>WM_COLORMAP_WINDOWS</emphasis>
+property is stored. Must be of class Core or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>list</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of widgets whose windows are potentially to be
+listed in the <emphasis role='strong'>WM_COLORMAP_WINDOWS</emphasis> property.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>count</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of widgets in <emphasis remap='I'>list</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
+returns immediately if <emphasis remap='I'>widget</emphasis> is not realized or if <emphasis remap='I'>count</emphasis> is 0.
+Otherwise,
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
+constructs an ordered list of windows
+by examining each widget in <emphasis remap='I'>list</emphasis> 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.
+</para>
+
+<para>
+Finally,
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
+stores the resulting window list in the <emphasis role='strong'>WM_COLORMAP_WINDOWS</emphasis>
+property on the specified widget's window.
+Refer to Section 4.1.8 in the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis> for details of
+the semantics of the <emphasis role='strong'>WM_COLORMAP_WINDOWS</emphasis> property.
+</para>
+</sect1>
+<!-- FIXME: -->
+<sect1 id="Finding_File_Names">
+<title>Finding File Names</title>
+<para>
+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:
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+and
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>.
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+uses an arbitrary set of client-specified substitutions, and
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+uses a set of standard substitutions corresponding
+to the <emphasis remap='I'>X/Open Portability Guide</emphasis> language localization conventions.
+Most applications should use
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>.
+</para>
+
+<para>
+A string substitution is defined by a list of
+<function>Substitution</function>
+entries.
+</para>
+<literallayout >
+typedef struct {
+ char match;
+ String substitution;
+} SubstitutionRec, *Substitution;
+</literallayout>
+<para>
+File name evaluation is handled in an operating-system-dependent
+fashion by an
+<xref linkend='XtFilePredicate' xrefstyle='select: title'/>
+procedure.
+</para>
+
+<funcsynopsis id='XtFilePredicate'>
+<funcprototype>
+<funcdef>typedef Boolean <function>(*XtFilePredicate)</function></funcdef>
+ <paramdef>String <parameter>filename</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>filename</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a potential filename.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+A file predicate procedure is called with a string that is
+potentially a file name. It should return
+<function>True</function>
+if this string specifies a file that is appropriate for the intended use and
+<function>False</function>
+otherwise.
+</para>
+
+<para>
+To search for a file using substitutions in a path list, use
+<xref linkend='XtFindFile' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtFindFile'>
+<funcprototype>
+<funcdef>String <function>XtFindFile</function></funcdef>
+ <paramdef>String <parameter>path</parameter></paramdef>
+ <paramdef>Substitution <parameter>substitutions</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_substitutions</parameter></paramdef>
+ <paramdef>XtFilePredicate <parameter>predicate</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>path</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a path of file names, including substitution characters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>substitutions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of substitutions to make into the path.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_substitutions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of substitutions passed in.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>predicate</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a procedure called to judge each potential file name, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The <emphasis remap='I'>path</emphasis> 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,
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+looks through the
+specified <emphasis remap='I'>substitutions</emphasis> for that character in the <emphasis remap='I'>match</emphasis> field
+and, if found,
+replaces the percent and match characters with the string in the
+corresponding <emphasis remap='I'>substitution</emphasis> field. A <emphasis remap='I'>substitution</emphasis> 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,
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+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
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+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
+<function>True</function>;
+this string is the return value for
+<xref linkend='XtFindFile' xrefstyle='select: title'/>.
+If no string yields a
+<function>True</function>
+return from the predicate,
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+returns NULL.
+</para>
+
+<para>
+If the <emphasis remap='I'>predicate</emphasis> parameter is NULL, an internal procedure that checks
+if the file exists, is readable, and is not a directory is used.
+</para>
+
+<para>
+It is the responsibility of the caller to free the returned string using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer needed.
+</para>
+
+<para>
+To search for a file using standard substitutions in a path list, use
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtResolvePathname'>
+<funcprototype>
+<funcdef>String <function>XtResolvePathname</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>Substitution <parameter>substitutions</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_substitutions</parameter></paramdef>
+ <paramdef>XtFilePredicate <parameter>predicate</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the display to use to find the language for language substitutions.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>filename</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>suffix</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify values to substitute into the path.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>path</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the list of file specifications, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>substitutions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of additional substitutions to make into the path, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_substitutions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>substitutions</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>predicate</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a procedure called to judge each potential file name, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The substitutions specified by
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+are determined from the value of the language string retrieved by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+for the specified display.
+To set the
+language for all applications specify "*xnlLanguage: <emphasis remap='I'>lang</emphasis>" 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.
+</para>
+
+
+<para>
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
+calls
+<xref linkend='XtFindFile' xrefstyle='select: title'/>
+with the following substitutions
+in addition to any passed by the caller and returns the value returned by
+<xref linkend='XtFindFile' xrefstyle='select: title'/>:
+</para>
+<!-- PROBLEM BELOW HERE -->
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+%N
+ </term>
+ <listitem>
+ <para>
+The value of the <emphasis remap='I'>filename</emphasis> parameter, or the application's
+class name if <emphasis remap='I'>filename</emphasis> is NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%T
+ </term>
+ <listitem>
+ <para>
+The value of the <emphasis remap='I'>type</emphasis> parameter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%S
+ </term>
+ <listitem>
+ <para>
+The value of the <emphasis remap='I'>suffix</emphasis> parameter.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%L
+ </term>
+ <listitem>
+ <para>
+The language string associated with the specified display.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%l
+ </term>
+ <listitem>
+ <para>
+The language part of the display's language string.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%t
+ </term>
+ <listitem>
+ <para>
+The territory part of the display's language string.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%c
+ </term>
+ <listitem>
+ <para>
+The codeset part of the display's language string.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%C
+ </term>
+ <listitem>
+ <para>
+The customization string retrieved from the resource
+database associated with <emphasis remap='I'>display</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+%D
+ </term>
+ <listitem>
+ <para>
+The value of the implementation-specific default path.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<!-- PROBLEM ABOVE HERE -->
+<para>
+If a path is passed to
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>,
+it is passed along to
+<xref linkend='XtFindFile' xrefstyle='select: title'/>.
+If the <emphasis remap='I'>path</emphasis> argument is NULL, the value of the
+<emphasis role='strong'>XFILESEARCHPATH</emphasis>
+environment variable is passed to
+<xref linkend='XtFindFile' xrefstyle='select: title'/>.
+If <emphasis role='strong'>XFILESEARCHPATH</emphasis>
+is not defined, an implementation-specific default path is used
+that contains at least six entries. These entries
+must contain the following substitutions:
+</para>
+
+
+<!-- OK PAST HERE -->
+
+<literallayout>
+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
+</literallayout>
+
+<para>
+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, <function>%N%S</function> is inserted between them.
+</para>
+
+<para>
+The <emphasis remap='I'>type</emphasis> 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".
+</para>
+
+<para>
+The <emphasis remap='I'>suffix</emphasis> parameter is intended to be appended to the file name.
+Possible values might include ".txt", ".dat", and ".bm".
+</para>
+
+<para>
+A suggested value for the default path on POSIX-based systems is
+</para>
+<literallayout>
+ /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
+</literallayout>
+
+
+<para>
+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 <emphasis remap='I'>type</emphasis>
+parameter is used as a subdirectory of the language directory or of
+/usr/lib/X11, and <emphasis remap='I'>suffix</emphasis> is appended to the file name.
+</para>
+
+<para>
+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
+<emphasis role='strong'>XFILESEARCHPATH</emphasis>
+to
+</para>
+<literallayout>
+ %D:ourdir/%T/%N%C:ourdir/%T/%N
+</literallayout>
+
+<para>
+The customization string is obtained by querying the resource database
+currently associated with the display (the database returned by
+<function>XrmGetDatabase</function>)
+for the resource <emphasis remap='I'>application_name</emphasis>.customization, class
+<emphasis remap='I'>application_class</emphasis>.Customization, where <emphasis remap='I'>application_name</emphasis>
+and <emphasis remap='I'>application_class</emphasis> are the values returned by
+<xref linkend='XtGetApplicationNameAndClass' xrefstyle='select: title'/>.
+If no value is specified in the database, the empty string is used.
+</para>
+
+<para>
+It is the responsibility of the caller to free the returned string using
+<xref linkend='XtFree' xrefstyle='select: title'/>
+when it is no longer needed.
+</para>
+
+
+</sect1>
+<!-- END OF FIXME -->
+<sect1 id="Hooks_for_External_Agents">
+<title>Hooks for External Agents</title>
+<para>
+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.
+</para>
+
+<para>
+To retrieve the hook registration widget, use
+<xref linkend='XtHooksOfDisplay' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtHooksOfDisplay'>
+<funcprototype>
+<funcdef>Widget <function>XtHooksOfDisplay</function></funcdef>
+ <paramdef>Display *<parameter>display</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>display</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the desired display.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The class of this object is a private, implementation-dependent
+subclass of
+<function>Object</function>.
+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.
+</para>
+
+<para>
+The following procedures can be called with the hook registration object
+as an argument:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>,
+<xref linkend='XtAddCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtCallCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtClass' xrefstyle='select: title'/>,
+<function>XtSuperclass</function>,
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>,
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>,
+<function>XtIsObject</function>,
+<function>XtIsRectObj</function>,
+<function>XtIsWidget</function>,
+<function>XtIsComposite</function>,
+<function>XtIsConstraint</function>,
+<function>XtIsShell</function>,
+<function>XtIsOverrideShell</function>,
+<function>XtIsWMShell</function>,
+<function>XtIsVendorShell</function>,
+<function>XtIsTransientShell</function>,
+<function>XtIsToplevelShell</function>,
+<function>XtIsApplicationShell</function>,
+<function>XtIsSessionShell</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtWidgetToApplicationContext' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtName' xrefstyle='select: title'/>,
+<function>XtParent</function>,
+<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>,
+<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetValues' xrefstyle='select: title'/>,
+<xref linkend='XtGetValues' xrefstyle='select: title'/>,
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>,
+<xref linkend='XtVaGetValues' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+
+<sect2 id="Hook_Object_Resources">
+<title>Hook Object Resources</title>
+<para>
+The resource names, classes, and representation types that are specified
+in the hook object resource list are:
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNcreateHook</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNchangeHook</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNconfigureHook</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNgeometryHook</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNdestroyHook</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ <row>
+ <entry>XtNshells</entry>
+ <entry>XtCReadOnly</entry>
+ <entry>XtRWidgetList</entry>
+ </row>
+ <row>
+ <entry>XtNnumShells</entry>
+ <entry>XtCReadOnly</entry>
+ <entry>XtRCardinal</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+
+<para>
+Descriptions of each of these resources:
+</para>
+
+<para>
+The XtNcreateHook callback list is called from:
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
+and their corresponding varargs versions.
+</para>
+
+<para>
+The <emphasis remap='I'>call_data</emphasis> parameter in a createHook callback may be
+cast to type
+<function>XtCreateHookData</function>.
+</para>
+<literallayout >
+typedef struct {
+ String type;
+ Widget widget;
+ ArgList args;
+ Cardinal num_args;
+} XtCreateHookDataRec, *XtCreateHookData;
+</literallayout>
+<para>
+The <emphasis remap='I'>type</emphasis> is set to
+<function>XtHcreate</function>,
+<emphasis remap='I'>widget</emphasis> is the newly created widget, and <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis>
+are the arguments passed to the create function. The callbacks are
+called before returning from the create function.
+</para>
+
+<para>
+The XtNchangeHook callback list is called from:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtSetValues' xrefstyle='select: title'/>,
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtManageChild' xrefstyle='select: title'/>,
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>,
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>,
+<function>XtAddCallbacks,</function>
+<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>,
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>,
+<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>,
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>,
+<xref linkend='XtMapWidget' xrefstyle='select: title'/>,
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtPopup' xrefstyle='select: title'/>,
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>,
+<xref linkend='XtPopdown' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+The <emphasis remap='I'>call_data</emphasis> parameter in a changeHook callback may
+be cast to type
+<function>XtChangeHookData</function>.
+</para>
+<literallayout >
+typedef struct {
+ String type;
+ Widget widget;
+ XtPointer event_data;
+ Cardinal num_event_data;
+} XtChangeHookDataRec, *XtChangeHookData;
+</literallayout>
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+or
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>,
+<emphasis remap='I'>type</emphasis> is set to
+<function>XtHsetValues</function>,
+<emphasis remap='I'>widget</emphasis> is the new widget passed to the set_values procedure, and
+<emphasis remap='I'>event_data</emphasis> may be cast to type
+<function>XtChangeHookSetValuesData</function>.
+</para>
+<literallayout >
+typedef struct {
+ Widget old, req;
+ ArgList args;
+ Cardinal num_args;
+} XtChangeHookSetValuesDataRec, *XtChangeHookSetValuesData;
+</literallayout>
+<para>
+The <emphasis remap='I'>old</emphasis>, <emphasis remap='I'>req</emphasis>, <emphasis remap='I'>args</emphasis>, and <emphasis remap='I'>num_args</emphasis> 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.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+or
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
+<emphasis remap='I'>type</emphasis> is set to
+<function>XtHmanageChildren</function>,
+<emphasis remap='I'>widget</emphasis> is the parent, <emphasis remap='I'>event_data</emphasis> may be cast to type
+WidgetList and is the list of children being managed, and
+<emphasis remap='I'>num_event_data</emphasis> is the length of the widget list.
+The callbacks are called after the children have been managed.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>
+or
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>,
+<emphasis remap='I'>type</emphasis> is set to
+<function>XtHunmanageChildren</function>,
+<emphasis remap='I'>widget</emphasis> is the parent, <emphasis remap='I'>event_data</emphasis> may be cast to type
+WidgetList and is a list of the children being unmanaged, and
+<emphasis remap='I'>num_event_data</emphasis> is the length of the widget list.
+The callbacks are called after the children have been unmanaged.
+</para>
+
+<para>
+The changeHook callbacks are called twice as a result of a call to
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>,
+once after unmanaging and again after managing.
+When the callbacks are called the first time, <emphasis remap='I'>type</emphasis> is set to
+<function>XtHunmanageSet</function>,
+<emphasis remap='I'>widget</emphasis> is the parent, <emphasis remap='I'>event_data</emphasis> may be cast to type
+WidgetList and is a list of the children being unmanaged, and
+<emphasis remap='I'>num_event_data</emphasis> is the length of the widget list.
+When the callbacks are called the second time, the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHmanageSet</function>,
+<emphasis remap='I'>widget</emphasis> is the parent, <emphasis remap='I'>event_data</emphasis> may be cast to type
+WidgetList and is a list of the children being managed, and
+<emphasis remap='I'>num_event_data</emphasis> is the length of the widget list.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHrealizeWidget</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being realized.
+The callbacks are called after the widget has been realized.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHunrealizeWidget</function>,
+and <emphasis remap='I'>widget</emphasis> is the widget being unrealized.
+The callbacks are called after the widget has been unrealized.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>,
+<emphasis remap='I'>type</emphasis> is set to
+<function>XtHaddCallback</function>,
+<emphasis remap='I'>widget</emphasis> is the widget to which the callback is being added, and
+<emphasis remap='I'>event_data</emphasis> 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.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtAddCallbacks' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHaddCallbacks</function>,
+<emphasis remap='I'>widget</emphasis> is the widget to which the callbacks are being added, and
+<emphasis remap='I'>event_data</emphasis> 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.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHremoveCallback</function>,
+<emphasis remap='I'>widget</emphasis> is the widget from which the callback is being removed, and
+<emphasis remap='I'>event_data</emphasis> 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.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHremoveCallbacks</function>,
+<emphasis remap='I'>widget</emphasis> is the widget from which the callbacks are being removed, and
+<emphasis remap='I'>event_data</emphasis> 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.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHremoveAllCallbacks</function>
+and <emphasis remap='I'>widget</emphasis> is the widget from which the callbacks are being removed.
+The callbacks are called after the callbacks have been removed from the
+widget.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHaugmentTranslations</function>
+and <emphasis remap='I'>widget</emphasis> is the widget whose translations are being modified.
+The callbacks are called after the widget's translations have been
+modified.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHoverrideTranslations</function>
+and <emphasis remap='I'>widget</emphasis> is the widget whose translations are being modified.
+The callbacks are called after the widget's translations have been
+modified.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>,
+The <emphasis remap='I'>type</emphasis> is
+<function>XtHuninstallTranslations</function>
+and <emphasis remap='I'>widget</emphasis> is the widget whose translations are being uninstalled.
+The callbacks are called after the widget's translations have been
+uninstalled.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHsetKeyboardFocus</function>
+and <emphasis remap='I'>event_data</emphasis> may be cast to type Widget and is the value of
+the descendant argument passed to <xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>. The
+callbacks are called before returning from <xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>,
+<emphasis remap='I'>type</emphasis> is set to
+<function>XtHsetWMColormapWindows</function>,
+<emphasis remap='I'>event_data</emphasis> may be cast to type WidgetList and is the value of
+the list argument passed to <xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>, and
+<emphasis remap='I'>num_event_data</emphasis> is the length of the list. The callbacks are
+called before returning from <xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHsetMappedWhenManaged</function>
+and <emphasis remap='I'>event_data</emphasis> may be cast to type Boolean and is the value of
+the mapped_when_managed argument passed to <xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>.
+The callbacks are called after setting the widget's mapped_when_managed
+field and before realizing or unrealizing the widget.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtMapWidget' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type </emphasis> is set to
+<function>XtHmapWidget</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being mapped.
+The callbacks are called after mapping the widget.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type </emphasis> is set to
+<function>XtHunmapWidget</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being unmapped.
+The callbacks are called after unmapping the widget.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtPopup' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHpopup</function>,
+<emphasis remap='I'>widget</emphasis> is the widget being popped up, and <emphasis remap='I'>event_data</emphasis> may
+be cast to type XtGrabKind and is the value of the grab_kind argument
+passed to <xref linkend='XtPopup' xrefstyle='select: title'/>.
+The callbacks are called before returning from <xref linkend='XtPopup' xrefstyle='select: title'/>.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHpopupSpringLoaded</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being popped up.
+The callbacks are called
+before returning from <xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>.
+</para>
+
+<para>
+When the changeHook callbacks are called as a result of a call to
+<xref linkend='XtPopdown' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is set to
+<function>XtHpopdown</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being popped down.
+The callbacks are called
+before returning from <xref linkend='XtPopdown' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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:
+</para>
+
+<literallayout >
+ XtCallCallbacks(XtHooksOfDisplay(dpy), XtNchangeHook, call_data);
+</literallayout>
+<para>
+The XtNconfigureHook callback list is called any time the Intrinsics
+move, resize, or configure a widget and when
+<xref linkend='XtResizeWindow' xrefstyle='select: title'/>
+is called.
+</para>
+
+<para>
+The <emphasis remap='I'>call_data</emphasis> parameter may be cast to type
+<function>XtConfigureHookData.</function>
+</para>
+<literallayout >
+typedef struct {
+ String type;
+ Widget widget;
+ XtGeometryMask changeMask;
+ XWindowChanges changes;
+} XtConfigureHookDataRec, *XtConfigureHookData;
+</literallayout>
+<para>
+When the configureHook callbacks are called, the <emphasis remap='I'>type</emphasis> is
+<function>XtHconfigure</function>,
+<emphasis remap='I'>widget</emphasis> is the widget being configured, and <emphasis remap='I'>changeMask</emphasis> and
+<emphasis remap='I'>changes</emphasis> reflect the changes made to the widget. The callbacks
+are called after changes have been made to the widget.
+</para>
+
+<para>
+The XtNgeometryHook callback list is called from
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+and
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+once before and once after geometry negotiation occurs.
+</para>
+
+<para>
+The <emphasis remap='I'>call_data</emphasis> parameter may be cast to type
+<function>XtGeometryHookData</function>.
+</para>
+
+<literallayout >
+typedef struct {
+ String type;
+ Widget widget;
+ XtWidgetGeometry* request;
+ XtWidgetGeometry* reply;
+ XtGeometryResult result;
+} XtGeometryHookDataRec, *XtGeometryHookData;
+</literallayout>
+<para>
+When the geometryHook callbacks are called prior to geometry negotiation,
+the <emphasis remap='I'>type</emphasis> is
+<function>XtHpreGeometry</function>,
+<emphasis remap='I'>widget</emphasis> is the widget for which the request is being made, and
+<emphasis remap='I'>request</emphasis> is the requested geometry.
+When the geometryHook callbacks
+are called after geometry negotiation, the <emphasis remap='I'>type</emphasis> is
+<function>XtHpostGeometry</function>,
+<emphasis remap='I'>widget</emphasis> is the widget for which the request was made, <emphasis remap='I'>request</emphasis>
+is the requested geometry, <emphasis remap='I'>reply</emphasis> is the resulting geometry granted,
+and <emphasis remap='I'>result</emphasis> is the value returned from the geometry negotiation.
+</para>
+
+<para>
+The XtNdestroyHook callback list is called when a widget is destroyed.
+The <emphasis remap='I'>call_data parameter</emphasis> may be cast to type
+<function>XtDestroyHookData</function>.
+</para>
+<literallayout >
+typedef struct {
+ String type;
+ Widget widget;
+} XtDestroyHookDataRec, *XtDestroyHookData;
+</literallayout>
+<para>
+When the destroyHook callbacks are called as a result of a call to
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>,
+the <emphasis remap='I'>type</emphasis> is
+<function>XtHdestroy</function>
+and <emphasis remap='I'>widget</emphasis> is the widget being destroyed. The callbacks are
+called upon completion of phase one destroy for a widget.
+</para>
+
+<para>
+The XtNshells and XtnumShells are read-only resources that report a
+list of all parentless shell widgets associated with a display.
+</para>
+
+<para>
+Clients who use these hooks must exercise caution in calling Intrinsics
+functions in order to avoid recursion.
+</para>
+</sect2>
+
+<sect2 id="Querying_Open_Displays">
+<title>Querying Open Displays</title>
+<para>
+To retrieve a list of the Displays associated with an application context,
+use
+<xref linkend='XtGetDisplays' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetDisplays'>
+<funcprototype>
+<funcdef>void <function>XtGetDisplays</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>Display ***<parameter>dpy_return</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_dpy_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>dpy_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns a list of open Display connections in the specified application
+context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_dpy_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the count of open Display connections in <emphasis remap='I'>dpy_return</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtGetDisplays' xrefstyle='select: title'/> 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
+<xref linkend='XtFree' xrefstyle='select: title'/>.
+</para>
+</sect2>
+</sect1>
+
+</chapter>
diff --git a/libXt/specs/CH12 b/libXt/specs/CH12
deleted file mode 100644
index 34e8ec77e..000000000
--- a/libXt/specs/CH12
+++ /dev/null
@@ -1,1067 +0,0 @@
-.\" $Xorg: CH12,v 1.3 2000/08/17 19:42:47 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 12\fP\s-1
-
-\s+1\fBNonwidget Objects\fP\s-1
-.sp 2
-.nr H1 12
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 12 \(em Nonwidget Objects
-.XE
-.LP
-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 (\fIunnamed\fP),
-and members of these classes
-are referred to generically as \fIobjects\fP. By convention, the term
-\fIwidget\fP refers only to objects that are a subclass of
-Core,
-and the term \fInonwidget\fP 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 \fIwidget\fP 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 \*(xI routines.
-
-.NH 2
-Data Structures
-.XS
-\*(SN Data Structures
-.XE
-.LP
-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.
-
-.NH 2
-Object Objects
-.XS
-\fB\*(SN Object Objects\fP
-.XE
-.LP
-.IN "Object" "" "@DEF@"
-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
-.PN ObjectClassPart
-and
-.PN ObjectPart
-structures.
-
-.NH 3
-ObjectClassPart Structure
-.XS
-\*(SN ObjectClassPart Structure
-.XE
-.LP
-The common fields for all object classes are defined in the
-.PN ObjectClassPart
-structure. All fields have the same purpose,
-function, and restrictions as the corresponding fields in
-.PN CoreClassPart ;
-fields whose
-names are obj\fI\s+1n\s-1\fP for some integer \s+1\fIn\fP\s-1 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
-obj\fI\s+1n\s-1\fP fields with NULL or zero as appropriate to the type.
-.LP
-.IN "ObjectClassPart" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.LP
-.eM
-The extension record defined for
-.PN ObjectClassPart
-with a \fIrecord_type\fP equal to
-.PN \s-1NULLQUARK\s+1
-is
-.PN ObjectClassExtensionRec .
-.LP
-.IN "ObjectClassExtensionRec" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- XtPointer next_extension; See Section 1.6.12
- XrmQuark record_type; See Section 1.6.12
- long version; See Section 1.6.12
- Cardinal record_size; See Section 1.6.12
- XtAllocateProc allocate; See Section 2.5.5.
- XtDeallocateProc deallocate; See Section 2.8.4.
-} ObjectClassExtensionRec, *ObjectClassExtension;
-.De
-.LP
-.eM
-The prototypical
-.PN ObjectClass
-consists of just the
-.PN ObjectClassPart .
-.LP
-.IN "ObjectClassRec" "" "@DEF@"
-.IN "ObjectClass" "" "@DEF@"
-.IN "objectClass" "" "@DEF@"
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _ObjectClassRec {
- ObjectClassPart object_class;
-} ObjectClassRec, *ObjectClass;
-.De
-.LP
-.eM
-The predefined class record and pointer for
-.PN ObjectClassRec
-are
-.LP
-In
-.PN IntrinsicP.h :
-.sM
-.Ds 0
-extern ObjectClassRec objectClassRec;
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.sM
-.Ds 0
-extern WidgetClass objectClass;
-.De
-.LP
-.eM
-The opaque types
-.PN Object
-and
-.PN ObjectClass
-and the opaque variable
-.PN objectClass
-are defined for generic actions on objects.
-The symbolic constant for the
-.PN ObjectClassExtension
-version identifier is
-.PN XtObjectExtensionVersion
-(see Section 1.6.12).
-.PN Intrinsic.h
-uses an incomplete structure definition to ensure that the
-compiler catches attempts to access private data:
-.LP
-.sM
-.Ds 0
-typedef struct _ObjectClassRec* ObjectClass;
-.De
-.LP
-.eM
-
-.NH 3
-ObjectPart Structure
-.XS
-\*(SN ObjectPart Structure
-.XE
-.LP
-The common fields for all object instances are defined in the
-.PN ObjectPart
-structure. All fields have the same meaning as the
-corresponding fields in
-.PN CorePart .
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-.IN "ObjectPart" "" "@DEF@"
-typedef struct _ObjectPart {
- Widget self;
- WidgetClass widget_class;
- Widget parent;
- Boolean being_destroyed;
- XtCallbackList destroy_callbacks;
- XtPointer constraints;
-} ObjectPart;
-.De
-.LP
-.eM
-All object instances have the
-Object
-fields as their first component. The prototypical type
-.PN Object
-is defined with only this set of fields.
-Various routines can cast object pointers, as needed, to specific
-object types.
-.LP
-In
-.PN IntrinsicP.h :
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct _ObjectRec {
- ObjectPart object;
-} ObjectRec, *Object;
-.De
-.LP
-.eM
-.IN "ObjectRec" "" "@DEF@"
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-typedef struct _ObjectRec *Object;
-.De
-.LP
-.eM
-
-.NH 3
-Object Resources
-.XS
-\fB\*(SN Object Resources\fP
-.XE
-.LP
-The resource names, classes, and representation types specified in the
-.PN objectClassRec
-resource list are:
-.LP
-.TS
-lw(1.5i) lw(1.5i) lw(2.5i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNdestroyCallback XtCCallback XtRCallback
-.sp 6p
-_
-.TE
-
-.NH 3
-ObjectPart Default Values
-.XS
-\fB\*(SN ObjectPart Default Values\fP
-.XE
-.LP
-All fields in
-.PN ObjectPart
-have the same default values as the corresponding fields in
-.PN CorePart .
-
-.NH 3
-Object Arguments to \*(xI Routines
-.XS
-\*(SN Object Arguments to \*(xI Routines
-.XE
-.LP
-The WidgetClass arguments to the following procedures may be
-.PN objectClass
-or any subclass:
-.sp
-.IP
-.PN XtInitializeWidgetClass ,
-.PN XtCreateWidget ,
-.PN XtVaCreateWidget
-.IP
-.PN XtIsSubclass ,
-.PN XtCheckSubclass
-.IP
-.PN XtGetResourceList ,
-.PN XtGetConstraintResourceList
-.sp
-.LP
-The Widget arguments to the following procedures may be of class
-Object
-or any subclass:
-.sp
-.IP
-.PN XtCreateWidget ,
-.PN XtVaCreateWidget
-.IP
-.PN XtAddCallback ,
-.PN XtAddCallbacks ,
-.PN XtRemoveCallback ,
-.PN XtRemoveCallbacks ,
-.PN XtRemoveAllCallbacks ,
-.PN XtCallCallbacks ,
-.PN XtHasCallbacks ,
-.PN XtCallCallbackList
-.IP
-.PN XtClass ,
-.PN XtSuperclass ,
-.PN XtIsSubclass ,
-.PN XtCheckSubclass ,
-.PN XtIsObject ,
-.PN XtIsRectObj ,
-.PN XtIsWidget ,
-.PN XtIsComposite ,
-.PN XtIsConstraint ,
-.PN XtIsShell ,
-.PN XtIsOverrideShell ,
-.PN XtIsWMShell ,
-.PN XtIsVendorShell ,
-.PN XtIsTransientShell ,
-.PN XtIsToplevelShell ,
-.PN XtIsApplicationShell ,
-.PN XtIsSessionShell
-.IP
-.PN XtIsManaged ,
-.PN XtIsSensitive
-.br
-(both will return
-.PN False
-if argument is not a subclass of
-RectObj)
-.IP
-.PN XtIsRealized
-.br
-(returns the state of the nearest windowed ancestor
-if class of argument is not a subclass of
-Core)
-.IP
-.PN XtWidgetToApplicationContext
-.IP
-.PN XtDestroyWidget
-.IP
-.PN XtParent ,
-.PN XtDisplayOfObject ,
-.PN XtScreenOfObject ,
-.PN XtWindowOfObject
-.IP
-.PN XtSetKeyboardFocus
-(descendant)
-.IP
-.PN XtGetGC ,
-.PN XtReleaseGC
-.IP
-.PN XtName
-.IP
-.PN XtSetValues ,
-.PN XtGetValues ,
-.PN XtVaSetValues ,
-.PN XtVaGetValues
-.IP
-.PN XtGetSubresources ,
-.PN XtGetApplicationResources ,
-.PN XtVaGetSubresources ,
-.PN XtVaGetApplicationResources
-.IP
-.PN XtConvert ,
-.PN XtConvertAndStore
-.sp
-.LP
-The return value of the following procedures will be of class
-Object
-or a subclass:
-.sp
-.IP
-.PN XtCreateWidget ,
-.PN XtVaCreateWidget
-.IP
-.PN XtParent
-.IP
-.PN XtNameToWidget
-.sp
-.LP
-The return value of the following procedures will be
-.PN objectClass
-or a subclass:
-.sp
-.IP
-.PN XtClass ,
-.PN XtSuperclass
-
-.NH 3
-Use of Objects
-.XS
-\fB\*(SN Use of Objects\fP
-.XE
-.LP
-The
-Object
-class exists to enable programmers to use the \*(xI'
-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.
-.LP
-Composite
-widget classes that wish to accept nonwidget children must
-set the \fIaccepts_objects\fP field in the
-.PN CompositeClassExtension
-structure to
-.PN True .
-.PN XtCreateWidget
-will otherwise generate an error message on an attempt to create a
-nonwidget child.
-.LP
-Of the classes defined by the \*(xI,
-ApplicationShell
-and
-SessionShell
-accept nonwidget children, and the class of any nonwidget child
-must not be
-.PN 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.
-
-.NH 2
-Rectangle Objects
-.XS
-\fB\*(SN Rectangle Objects\fP
-.XE
-.LP
-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
-.IN "RectObj" "" "@DEF@"
-to avoid conflict with the Xlib
-.PN Rectangle
-data type.
-
-.NH 3
-RectObjClassPart Structure
-.XS
-\*(SN RectObjClassPart Structure
-.XE
-.LP
-As with the
-.PN ObjectClassPart
-structure, all fields in the
-.PN RectObjClassPart
-structure have the same
-purpose and function as the corresponding fields in
-.PN CoreClassPart ;
-fields whose names are rect\fI\s+1n\s-1\fP for some integer
-\fI\s+1n\s-1\fP 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
-rect\fI\s+1n\s-1\fP fields with NULL or zero as appropriate to the type.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-.IN "RectObjClassPart" "" "@DEF@"
-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;
-.De
-.LP
-.eM
-The
-RectObj
-class record consists of just the
-.PN RectObjClassPart .
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-.IN "RectObjClassRec" "" "@DEF@"
-.IN "RectObjClass" "" "@DEF@"
-typedef struct _RectObjClassRec {
- RectObjClassPart rect_class;
-} RectObjClassRec, *RectObjClass;
-.De
-.LP
-.eM
-The predefined class record and pointer for
-.PN RectObjClassRec
-are
-.LP
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-extern RectObjClassRec rectObjClassRec;
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-extern WidgetClass rectObjClass;
-.De
-.LP
-.eM
-The opaque types
-.PN RectObj
-and
-.PN RectObjClass
-and the opaque variable
-.PN rectObjClass
-are defined for generic actions on objects
-whose class is RectObj or a subclass of
-RectObj.
-.PN Intrinsic.h
-uses an incomplete structure definition to ensure that the compiler
-catches attempts to access private data:
-.LP
-.sM
-.Ds 0
-typedef struct _RectObjClassRec* RectObjClass;
-.De
-.LP
-.eM
-
-.NH 3
-RectObjPart Structure
-.XS
-\*(SN RectObjPart Structure
-.XE
-.LP
-In addition to the
-.PN ObjectPart
-fields,
-RectObj
-objects have the following fields defined in the
-.PN RectObjPart
-structure. All fields have the same meaning as the corresponding field in
-.PN CorePart .
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-.IN "RectObjPart" "" "@DEF@"
-typedef struct _RectObjPart {
- Position x, y;
- Dimension width, height;
- Dimension border_width;
- Boolean managed;
- Boolean sensitive;
- Boolean ancestor_sensitive;
-} RectObjPart;
-.De
-.LP
-.eM
-RectObj
-objects have the RectObj fields immediately following the Object fields.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-.IN "RectObjRec" "" "@DEF@"
-typedef struct _RectObjRec {
- ObjectPart object;
- RectObjPart rectangle;
-} RectObjRec, *RectObj;
-.De
-.LP
-.eM
-In
-.PN Intrinsic.h :
-.LP
-.sM
-.Ds 0
-typedef struct _RectObjRec* RectObj;
-.De
-.LP
-.eM
-
-.NH 3
-RectObj Resources
-.XS
-\fB\*(SN RectObj Resources\fP
-.XE
-.LP
-The resource names, classes, and representation types that are specified in the
-.PN rectObjClassRec
-resource list are:
-.TS
-lw(1.5i) lw(1.5i) lw(2.5i) .
-_
-.sp 6p
-Name Class Representation
-.sp 6p
-_
-.sp 6p
-XtNancestorSensitive XtCSensitive XtRBoolean
-XtNborderWidth XtCBorderWidth XtRDimension
-XtNheight XtCHeight XtRDimension
-XtNsensitive XtCSensitive XtRBoolean
-XtNwidth XtCWidth XtRDimension
-XtNx XtCPosition XtRPosition
-XtNy XtCPosition XtRPosition
-.sp 6p
-_
-.TE
-
-.NH 3
-RectObjPart Default Values
-.XS
-\fB\*(SN RectObjPart Default Values\fP
-.XE
-.LP
-All fields in
-.PN RectObjPart
-have the same default values as the corresponding fields in
-.PN CorePart .
-
-.NH 3
-Widget Arguments to \*(xI Routines
-.XS
-\fB\*(SN Widget Arguments to \*(xI Routines\fP
-.XE
-.LP
-The WidgetClass arguments to the following procedures may be
-.PN rectObjClass
-or any subclass:
-.sp
-.IP
-.PN XtCreateManagedWidget ,
-.PN XtVaCreateManagedWidget
-.sp
-.LP
-The Widget arguments to the following procedures may be of class
-RectObj
-or any subclass:
-.sp
-.IP
-.PN XtConfigureWidget ,
-.PN XtMoveWidget ,
-.PN XtResizeWidget
-.IP
-.PN XtMakeGeometryRequest ,
-.PN XtMakeResizeRequest
-.IP
-.PN XtManageChildren ,
-.PN XtManageChild ,
-.PN XtUnmanageChildren ,
-.PN XtUnmanageChild ,
-.PN XtChangeManagedSet
-.IP
-.PN XtQueryGeometry
-.IP
-.PN XtSetSensitive
-.IP
-.PN XtTranslateCoords
-.sp
-.LP
-The return value of the following procedures will be of class
-RectObj
-or a subclass:
-.sp
-.IP
-.PN XtCreateManagedWidget ,
-.PN XtVaCreateManagedWidget
-
-.NH 3
-Use of Rectangle Objects
-.XS
-\*(SN Use of Rectangle Objects
-.XE
-.LP
-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, \fIrectobj\fP refers only to objects
-whose class is RectObj or a subclass of
-RectObj,
-but not Core or a subclass of
-Core.
-.LP
-Composite
-widget classes that wish to accept rectobj children must set
-the \fIaccepts_objects\fP field in the
-.PN CompositeClassExtension
-extension structure to
-.PN True .
-.PN XtCreateWidget
-or
-.PN XtCreateManagedWidget
-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
-\*(xI accept rectobj children.
-.LP
-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 \*(xI; 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.
-.LP
-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.
-.LP
-The \*(xI will clear areas of a parent window obscured by
-rectobj children, causing exposure events, under the following
-circumstances:
-.IP \(bu 5
-A rectobj child is managed or unmanaged.
-.IP \(bu 5
-In a call to
-.PN XtSetValues
-on a rectobj child, one or more of the set_values procedures returns
-.PN True .
-.IP \(bu 5
-In a call to
-.PN XtConfigureWidget
-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.
-.IP \(bu 5
-In a call to
-.PN XtMoveWidget
-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.
-.IP \(bu 5
-In a call to
-.PN XtResizeWidget
-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.
-.IP \(bu 5
-In a call to
-.PN XtMakeGeometryRequest
-(or
-.PN XtMakeResizeRequest )
-on a rectobj child with
-.PN XtQueryOnly
-not set, if the manager returns
-.PN XtGeometryYes ,
-two rectangles will be cleared corresponding to both the old and
-the new child geometries.
-.LP
-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.
-.LP
-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.
-
-.NH 2
-Undeclared Class
-.XS
-\*(SN Undeclared Class
-.XE
-.LP
-The \*(xI 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
-.IP \(bu 5
-The \fIcore_class.superclass\fP field of
-.PN coreWidgetClassRec
-contains a pointer to the unnamed class record.
-.IP \(bu 5
-A pointer to the unnamed class record when dereferenced as an
-.PN ObjectClass
-will contain a pointer to
-.PN rectObjClassRec
-in its \fIobject_class.superclass\fP field.
-.LP
-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.
-
-.NH 2
-Widget Arguments to \*(xI Routines
-.XS
-\*(SN Widget Arguments to \*(xI Routines
-.XE
-.LP
-The WidgetClass arguments to the following procedures must be of class
-Shell
-or a subclass:
-.sp
-.IP
-.PN XtCreatePopupShell ,
-.PN XtVaCreatePopupShell ,
-.PN XtAppCreateShell ,
-.PN XtVaAppCreateShell ,
-.PN XtOpenApplication ,
-.PN XtVaOpenApplication
-.sp
-.LP
-The Widget arguments to the following procedures must be of class
-Core
-or any subclass:
-.sp
-.IP
-.PN XtCreatePopupShell ,
-.PN XtVaCreatePopupShell
-.IP
-.PN XtAddEventHandler ,
-.PN XtAddRawEventHandler ,
-.PN XtRemoveEventHandler ,
-.br
-.PN XtRemoveRawEventHandler ,
-.PN XtInsertEventHandler ,
-.PN XtInsertRawEventHandler
-.br
-.PN XtInsertEventTypeHandler ,
-.PN XtRemoveEventTypeHandler ,
-.IP
-.PN XtRegisterDrawable
-.PN XtDispatchEventToWidget
-.IP
-.PN XtAddGrab ,
-.PN XtRemoveGrab ,
-.PN XtGrabKey ,
-.PN XtGrabKeyboard ,
-.PN XtUngrabKey ,
-.PN XtUngrabKeyboard ,
-.PN XtGrabButton ,
-.PN XtGrabPointer ,
-.PN XtUngrabButton ,
-.br
-.PN XtUngrabPointer
-.IP
-.PN XtBuildEventMask
-.IP
-.PN XtCreateWindow ,
-.PN XtDisplay ,
-.PN XtScreen ,
-.PN XtWindow
-.IP
-.PN XtNameToWidget
-.IP
-.PN XtGetSelectionValue ,
-.PN XtGetSelectionValues ,
-.PN XtOwnSelection ,
-.PN XtDisownSelection ,
-.PN XtOwnSelectionIncremental ,
-.PN XtGetSelectionValueIncremental ,
-.PN XtGetSelectionValuesIncremental ,
-.br
-.PN XtGetSelectionRequest
-.IP
-.PN XtInstallAccelerators ,
-.PN XtInstallAllAccelerators
-(both destination and source)
-.IP
-.PN XtAugmentTranslations ,
-.PN XtOverrideTranslations ,
-.PN XtUninstallTranslations ,
-.br
-.PN XtCallActionProc
-.IP
-.PN XtMapWidget ,
-.PN XtUnmapWidget
-.IP
-.PN XtRealizeWidget ,
-.PN XtUnrealizeWidget
-.IP
-.PN XtSetMappedWhenManaged
-.IP
-.PN XtCallAcceptFocus ,
-.PN XtSetKeyboardFocus
-(subtree)
-.IP
-.PN XtResizeWindow
-.IP
-.PN XtSetWMColormapWindows
-.sp
-.LP
-The Widget arguments to the following procedures must be of class
-Composite
-or any subclass:
-.sp
-.IP
-.PN XtCreateManagedWidget ,
-.PN XtVaCreateManagedWidget
-.sp
-.LP
-The Widget arguments to the following procedures must be of a subclass of
-Shell:
-.sp
-.IP
-.PN XtPopdown ,
-.PN XtCallbackPopdown ,
-.PN XtPopup ,
-.PN XtCallbackNone ,
-.PN XtCallbackNonexclusive ,
-.PN XtCallbackExclusive ,
-.PN XtPopupSpringLoaded
-.sp
-.LP
-The return value of the following procedure will be of class
-Core
-or a subclass:
-.sp
-.IP
-.PN XtWindowToWidget
-.sp
-.LP
-The return value of the following procedures will be of a subclass of
-Shell:
-.sp
-.IP
-.PN XtAppCreateShell ,
-.PN XtVaAppCreateShell ,
-.PN XtAppInitialize ,
-.PN XtVaAppInitialize ,
-.PN XtCreatePopupShell ,
-.PN XtVaCreatePopupShell
-.bp
diff --git a/libXt/specs/CH12.xml b/libXt/specs/CH12.xml
new file mode 100644
index 000000000..3ae6542ab
--- /dev/null
+++ b/libXt/specs/CH12.xml
@@ -0,0 +1,1166 @@
+<chapter id='Nonwidget_Objects'>
+<title>Nonwidget Objects</title>
+
+<para>
+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 <emphasis remap='I'>objects</emphasis>. By convention, the term
+<emphasis remap='I'>widget</emphasis> refers only to objects that are a subclass of
+Core,
+and the term <emphasis remap='I'>nonwidget</emphasis> 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 <emphasis remap='I'>widget</emphasis> 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.
+</para>
+<sect1 id="Data_Structures">
+<title>Data Structures</title>
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Object_Objects">
+<title>Object Objects</title>
+<para>
+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
+<function>ObjectClassPart</function>
+and
+<function>ObjectPart</function>
+structures.
+</para>
+<sect2 id="ObjectClassPart_Structure">
+<title>ObjectClassPart Structure</title>
+<para>
+The common fields for all object classes are defined in the
+<function>ObjectClassPart</function>
+structure. All fields have the same purpose,
+function, and restrictions as the corresponding fields in
+<function>CoreClassPart</function>;
+fields whose
+names are obj<emphasis remap='I'>n</emphasis> for some integer <emphasis remap='I'>n</emphasis> 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
+obj<emphasis remap='I'>n</emphasis> fields with NULL or zero as appropriate to the type.
+</para>
+<literallayout >
+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;
+</literallayout>
+<para>
+The extension record defined for
+<function>ObjectClassPart</function>
+with a <emphasis remap='I'>record_type</emphasis> equal to
+<emphasis role='strong'>NULLQUARK</emphasis>
+is
+<function>ObjectClassExtensionRec</function>.
+</para>
+<literallayout >
+typedef struct {
+ XtPointer next_extension; See <xref linkend='Class_Extension_Records' />
+ XrmQuark record_type; See <xref linkend='Class_Extension_Records' />
+ long version; See <xref linkend='Class_Extension_Records' />
+ Cardinal record_size; See <xref linkend='Class_Extension_Records' />
+ XtAllocateProc allocate; See <xref linkend='Widget_Instance_Allocation_The_allocate_Procedure' />.
+ XtDeallocateProc deallocate; See <xref linkend='Widget_Instance_Deallocation_The_deallocate_Procedure' />.
+} ObjectClassExtensionRec, *ObjectClassExtension;
+</literallayout>
+<para>
+The prototypical
+<function>ObjectClass</function>
+consists of just the
+<function>ObjectClassPart</function>.
+</para>
+<literallayout >
+typedef struct _ObjectClassRec {
+ ObjectClassPart object_class;
+} ObjectClassRec, *ObjectClass;
+</literallayout>
+<para>
+The predefined class record and pointer for
+<function>ObjectClassRec</function>
+are
+</para>
+
+<para>
+In
+<function>IntrinsicP.h</function>:
+</para>
+<literallayout >
+extern ObjectClassRec objectClassRec;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout >
+extern WidgetClass objectClass;
+</literallayout>
+<para>
+The opaque types
+<function>Object</function>
+and
+<function>ObjectClass</function>
+and the opaque variable
+<function>objectClass</function>
+are defined for generic actions on objects.
+The symbolic constant for the
+<function>ObjectClassExtension</function>
+version identifier is
+<function>XtObjectExtensionVersion</function>
+(see <xref linkend='Class_Extension_Records' />).
+<function>Intrinsic.h</function>
+uses an incomplete structure definition to ensure that the
+compiler catches attempts to access private data:
+</para>
+<literallayout >
+typedef struct _ObjectClassRec* ObjectClass;
+</literallayout>
+
+</sect2>
+
+<sect2 id="ObjectPart_Structure">
+<title>ObjectPart Structure</title>
+<para>
+The common fields for all object instances are defined in the
+<function>ObjectPart</function>
+structure. All fields have the same meaning as the
+corresponding fields in
+<function>CorePart</function>.
+</para>
+<literallayout >
+typedef struct _ObjectPart {
+ Widget self;
+ WidgetClass widget_class;
+ Widget parent;
+ Boolean being_destroyed;
+ XtCallbackList destroy_callbacks;
+ XtPointer constraints;
+} ObjectPart;
+</literallayout>
+<para>
+All object instances have the
+Object
+fields as their first component. The prototypical type
+<function>Object</function>
+is defined with only this set of fields.
+Various routines can cast object pointers, as needed, to specific
+object types.
+</para>
+
+<para>
+In
+<function>IntrinsicP.h</function>:
+</para>
+<literallayout >
+typedef struct _ObjectRec {
+ ObjectPart object;
+} ObjectRec, *Object;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout >
+typedef struct _ObjectRec *Object;
+</literallayout>
+
+</sect2>
+
+<sect2 id="Object_Resources">
+<title>Object Resources</title>
+<para>
+The resource names, classes, and representation types specified in the
+<function>objectClassRec</function>
+resource list are:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNdestroyCallback</entry>
+ <entry>XtCCallback</entry>
+ <entry>XtRCallback</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</sect2>
+
+<sect2 id="ObjectPart_Default_Values">
+<title>ObjectPart Default Values</title>
+<para>
+All fields in
+<function>ObjectPart</function>
+have the same default values as the corresponding fields in
+<function>CorePart</function>.
+</para>
+</sect2>
+
+<sect2 id="Object_Arguments_to_xI_Routines">
+<title>Object Arguments to Intrinsics Routines</title>
+<para>
+The WidgetClass arguments to the following procedures may be
+<function>objectClass</function>
+or any subclass:
+</para>
+
+<para>
+<emphasis role='strong'>XtInitializeWidgetClass</emphasis>,
+<emphasis role='strong'>XtCreateWidget</emphasis>,
+<emphasis role='strong'>XtVaCreateWidget</emphasis>
+<emphasis role='strong'>XtIsSubclass</emphasis>,
+<emphasis role='strong'>XtCheckSubclass</emphasis>
+<emphasis role='strong'>XtGetResourceList</emphasis>,
+<emphasis role='strong'>XtGetConstraintResourceList</emphasis>
+</para>
+
+<para>
+The Widget arguments to the following procedures may be of class
+Object
+or any subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAddCallback' xrefstyle='select: title'/>,
+<xref linkend='XtAddCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveCallback' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveAllCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtCallCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtHasCallbacks' xrefstyle='select: title'/>,
+<xref linkend='XtCallCallbackList' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtClass' xrefstyle='select: title'/>,
+<function>XtSuperclass</function>,
+<xref linkend='XtIsSubclass' xrefstyle='select: title'/>,
+<xref linkend='XtCheckSubclass' xrefstyle='select: title'/>,
+<function>XtIsObject</function>,
+<function>XtIsRectObj</function>,
+<function>XtIsWidget</function>,
+<function>XtIsComposite</function>,
+<function>XtIsConstraint</function>,
+<function>XtIsShell</function>,
+<function>XtIsOverrideShell</function>,
+<function>XtIsWMShell</function>,
+<function>XtIsVendorShell</function>,
+<function>XtIsTransientShell</function>,
+<function>XtIsToplevelShell</function>,
+<function>XtIsApplicationShell</function>,
+<function>XtIsSessionShell</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtIsManaged' xrefstyle='select: title'/>,
+<xref linkend='XtIsSensitive' xrefstyle='select: title'/>
+(both will return
+<function>False</function>
+if argument is not a subclass of
+RectObj)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtIsRealized' xrefstyle='select: title'/>
+(returns the state of the nearest windowed ancestor
+if class of argument is not a subclass of
+Core)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtWidgetToApplicationContext' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtDestroyWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtParent</function>,
+<xref linkend='XtDisplayOfObject' xrefstyle='select: title'/>,
+<xref linkend='XtScreenOfObject' xrefstyle='select: title'/>,
+<xref linkend='XtWindowOfObject' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>
+(descendant)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtGetGC' xrefstyle='select: title'/>,
+<xref linkend='XtReleaseGC' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtName' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetValues' xrefstyle='select: title'/>,
+<xref linkend='XtGetValues' xrefstyle='select: title'/>,
+<xref linkend='XtVaSetValues' xrefstyle='select: title'/>,
+<xref linkend='XtVaGetValues' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtGetSubresources' xrefstyle='select: title'/>,
+<xref linkend='XtGetApplicationResources' xrefstyle='select: title'/>,
+<xref linkend='XtVaGetSubresources' xrefstyle='select: title'/>,
+<xref linkend='XtVaGetApplicationResources' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtConvert' xrefstyle='select: title'/>,
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The return value of the following procedures will be of class
+Object
+or a subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<function>XtParent</function>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The return value of the following procedures will be
+<function>objectClass</function>
+or a subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtClass' xrefstyle='select: title'/>,
+<function>XtSuperclass</function>
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="Use_of_Objects">
+<title>Use of Objects</title>
+<para>
+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.
+</para>
+
+<para>
+Composite
+widget classes that wish to accept nonwidget children must
+set the <emphasis remap='I'>accepts_objects</emphasis> field in the
+<function>CompositeClassExtension</function>
+structure to
+<function>True</function>.
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+will otherwise generate an error message on an attempt to create a
+nonwidget child.
+</para>
+
+<para>
+Of the classes defined by the Intrinsics,
+ApplicationShell
+and
+SessionShell
+accept nonwidget children, and the class of any nonwidget child
+must not be
+<function>rectObjClass</function>
+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.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Rectangle_Objects">
+<title>Rectangle Objects</title>
+<para>
+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
+<function>Rectangle</function>
+data type.
+</para>
+<sect2 id="RectObjClassPart_Structure">
+<title>RectObjClassPart Structure</title>
+<para>
+As with the
+<function>ObjectClassPart</function>
+structure, all fields in the
+<function>RectObjClassPart</function>
+structure have the same
+purpose and function as the corresponding fields in
+<function>CoreClassPart</function>;
+fields whose names are rect<emphasis remap='I'>n</emphasis> for some integer
+<emphasis remap='I'>n</emphasis> 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
+rect<emphasis remap='I'>n</emphasis> fields with NULL or zero as appropriate to the type.
+</para>
+<literallayout >
+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;
+</literallayout>
+<para>
+The
+RectObj
+class record consists of just the
+<function>RectObjClassPart</function>.
+</para>
+<literallayout >
+typedef struct _RectObjClassRec {
+ RectObjClassPart rect_class;
+} RectObjClassRec, *RectObjClass;
+</literallayout>
+<para>
+The predefined class record and pointer for
+<function>RectObjClassRec</function>
+are
+</para>
+
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout >
+extern RectObjClassRec rectObjClassRec;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout >
+extern WidgetClass rectObjClass;
+</literallayout>
+<para>
+The opaque types
+<function>RectObj</function>
+and
+<function>RectObjClass</function>
+and the opaque variable
+<function>rectObjClass</function>
+are defined for generic actions on objects
+whose class is RectObj or a subclass of
+RectObj.
+<function>Intrinsic.h</function>
+uses an incomplete structure definition to ensure that the compiler
+catches attempts to access private data:
+</para>
+<literallayout >
+typedef struct _RectObjClassRec* RectObjClass;
+</literallayout>
+
+</sect2>
+
+<sect2 id="RectObjPart_Structure">
+<title>RectObjPart Structure</title>
+<para>
+In addition to the
+<function>ObjectPart</function>
+fields,
+RectObj
+objects have the following fields defined in the
+<function>RectObjPart</function>
+structure. All fields have the same meaning as the corresponding field in
+<function>CorePart</function>.
+</para>
+<literallayout >
+typedef struct _RectObjPart {
+ Position x, y;
+ Dimension width, height;
+ Dimension border_width;
+ Boolean managed;
+ Boolean sensitive;
+ Boolean ancestor_sensitive;
+} RectObjPart;
+</literallayout>
+<para>
+RectObj
+objects have the RectObj fields immediately following the Object fields.
+</para>
+<literallayout >
+typedef struct _RectObjRec {
+ ObjectPart object;
+ RectObjPart rectangle;
+} RectObjRec, *RectObj;
+</literallayout>
+<para>
+In
+<function>Intrinsic.h</function>:
+</para>
+<literallayout >
+typedef struct _RectObjRec* RectObj;
+</literallayout>
+
+</sect2>
+
+<sect2 id="RectObj_Resources">
+<title>RectObj Resources</title>
+<para>
+The resource names, classes, and representation types that are specified in the
+<function>rectObjClassRec</function>
+resource list are:
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Class</entry>
+ <entry>Representation</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNancestorSensitive</entry>
+ <entry>XtCSensitive</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNborderWidth</entry>
+ <entry>XtCBorderWidth</entry>
+ <entry>XtRDimension</entry>
+ </row>
+ <row>
+ <entry>XtNheight</entry>
+ <entry>XtCHeight</entry>
+ <entry>XtRDimension</entry>
+ </row>
+ <row>
+ <entry>XtNsensitive</entry>
+ <entry>XtCSensitive</entry>
+ <entry>XtRBoolean</entry>
+ </row>
+ <row>
+ <entry>XtNwidth</entry>
+ <entry>XtCWidth</entry>
+ <entry>XtRDimension</entry>
+ </row>
+ <row>
+ <entry>XtNx</entry>
+ <entry>XtCPosition</entry>
+ <entry>XtRPosition</entry>
+ </row>
+ <row>
+ <entry>XtNy</entry>
+ <entry>XtCPosition</entry>
+ <entry>XtRPosition</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+</sect2>
+
+<sect2 id="RectObjPart_Default_Values">
+<title>RectObjPart Default Values</title>
+<para>
+All fields in
+<function>RectObjPart</function>
+have the same default values as the corresponding fields in
+<function>CorePart</function>.
+</para>
+</sect2>
+
+<sect2 id="Widget_Arguments_to_xI_Routines">
+<title>Widget Arguments to Intrinsics Routines</title>
+<para>
+The WidgetClass arguments to the following procedures may be
+<function>rectObjClass</function>
+or any subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The Widget arguments to the following procedures may be of class
+RectObj
+or any subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>,
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>,
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>,
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>,
+<xref linkend='XtManageChild' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>,
+<xref linkend='XtUnmanageChild' xrefstyle='select: title'/>,
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetSensitive' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtTranslateCoords' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The return value of the following procedures will be of class
+RectObj
+or a subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+</sect2>
+
+<sect2 id="Use_of_Rectangle_Objects">
+<title>Use of Rectangle Objects</title>
+<para>
+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, <emphasis remap='I'>rectobj</emphasis> refers only to objects
+whose class is RectObj or a subclass of
+RectObj,
+but not Core or a subclass of
+Core.
+</para>
+
+<para>
+Composite
+widget classes that wish to accept rectobj children must set
+the <emphasis remap='I'>accepts_objects</emphasis> field in the
+<function>CompositeClassExtension</function>
+extension structure to
+<function>True</function>.
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+or
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+The Intrinsics will clear areas of a parent window obscured by
+rectobj children, causing exposure events, under the following
+circumstances:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+A rectobj child is managed or unmanaged.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In a call to
+<xref linkend='XtSetValues' xrefstyle='select: title'/>
+on a rectobj child, one or more of the set_values procedures returns
+<function>True</function>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In a call to
+<xref linkend='XtConfigureWidget' xrefstyle='select: title'/>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In a call to
+<xref linkend='XtMoveWidget' xrefstyle='select: title'/>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In a call to
+<xref linkend='XtResizeWidget' xrefstyle='select: title'/>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+In a call to
+<xref linkend='XtMakeGeometryRequest' xrefstyle='select: title'/>
+(or
+<xref linkend='XtMakeResizeRequest' xrefstyle='select: title'/>)
+on a rectobj child with
+<function>XtQueryOnly</function>
+not set, if the manager returns
+<function>XtGeometryYes</function>,
+two rectangles will be cleared corresponding to both the old and
+the new child geometries.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+</sect2>
+</sect1>
+
+<sect1 id="Undeclared_Class">
+<title>Undeclared Class</title>
+<para>
+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
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+The <emphasis remap='I'>core_class.superclass</emphasis> field of
+<function>coreWidgetClassRec</function>
+contains a pointer to the unnamed class record.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+A pointer to the unnamed class record when dereferenced as an
+<function>ObjectClass</function>
+will contain a pointer to
+<function>rectObjClassRec</function>
+in its <emphasis remap='I'>object_class.superclass</emphasis> field.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+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.
+</para>
+</sect1>
+
+<sect1 id="Widget_Arguments_to_Intrinsics_Routines">
+<title>Widget Arguments to Intrinsics Routines</title>
+<para>
+The WidgetClass arguments to the following procedures must be of class
+Shell
+or a subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>,
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
+<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>,
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>,
+<xref linkend='XtVaOpenApplication' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The Widget arguments to the following procedures must be of class
+Core
+or any subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAddEventHandler' xrefstyle='select: title'/>,
+<xref linkend='XtAddRawEventHandler' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveEventHandler' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveRawEventHandler' xrefstyle='select: title'/>,
+<xref linkend='XtInsertEventHandler' xrefstyle='select: title'/>,
+<xref linkend='XtInsertRawEventHandler' xrefstyle='select: title'/>
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>,
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAddGrab' xrefstyle='select: title'/>,
+<xref linkend='XtRemoveGrab' xrefstyle='select: title'/>,
+<xref linkend='XtGrabKey' xrefstyle='select: title'/>,
+<xref linkend='XtGrabKeyboard' xrefstyle='select: title'/>,
+<xref linkend='XtUngrabKey' xrefstyle='select: title'/>,
+<xref linkend='XtUngrabKeyboard' xrefstyle='select: title'/>,
+<xref linkend='XtGrabButton' xrefstyle='select: title'/>,
+<xref linkend='XtGrabPointer' xrefstyle='select: title'/>,
+<xref linkend='XtUngrabButton' xrefstyle='select: title'/>,
+<xref linkend='XtUngrabPointer' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtBuildEventMask' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtCreateWindow' xrefstyle='select: title'/>,
+<function>XtDisplay</function>,
+<xref linkend='XtScreen' xrefstyle='select: title'/>,
+<xref linkend='XtWindow' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtNameToWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtGetSelectionValue' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValues' xrefstyle='select: title'/>,
+<xref linkend='XtOwnSelection' xrefstyle='select: title'/>,
+<xref linkend='XtDisownSelection' xrefstyle='select: title'/>,
+<xref linkend='XtOwnSelectionIncremental' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValueIncremental' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionValuesIncremental' xrefstyle='select: title'/>,
+<xref linkend='XtGetSelectionRequest' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtInstallAccelerators' xrefstyle='select: title'/>,
+<xref linkend='XtInstallAllAccelerators' xrefstyle='select: title'/>
+(both destination and source)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtAugmentTranslations' xrefstyle='select: title'/>,
+<xref linkend='XtOverrideTranslations' xrefstyle='select: title'/>,
+<xref linkend='XtUninstallTranslations' xrefstyle='select: title'/>,
+<xref linkend='XtCallActionProc' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtMapWidget' xrefstyle='select: title'/>,
+<xref linkend='XtUnmapWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtRealizeWidget' xrefstyle='select: title'/>,
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetMappedWhenManaged' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtCallAcceptFocus' xrefstyle='select: title'/>,
+<xref linkend='XtSetKeyboardFocus' xrefstyle='select: title'/>
+(subtree)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtResizeWindow' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+<xref linkend='XtSetWMColormapWindows' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The Widget arguments to the following procedures must be of class
+Composite
+or any subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtCreateManagedWidget' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreateManagedWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The Widget arguments to the following procedures must be of a subclass of
+Shell:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtPopdown' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackPopdown' xrefstyle='select: title'/>,
+<xref linkend='XtPopup' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNone' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackNonexclusive' xrefstyle='select: title'/>,
+<xref linkend='XtCallbackExclusive' xrefstyle='select: title'/>,
+<xref linkend='XtPopupSpringLoaded' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The return value of the following procedure will be of class
+Core
+or a subclass:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+The return value of the following procedures will be of a subclass of
+Shell:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>,
+<xref linkend='XtVaAppCreateShell' xrefstyle='select: title'/>,
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtCreatePopupShell' xrefstyle='select: title'/>,
+<xref linkend='XtVaCreatePopupShell' xrefstyle='select: title'/>
+ </para>
+ </listitem>
+</itemizedlist>
+</sect1>
+</chapter>
diff --git a/libXt/specs/CH13 b/libXt/specs/CH13.xml
index 8c944a615..0216b3434 100644
--- a/libXt/specs/CH13
+++ b/libXt/specs/CH13.xml
@@ -1,61 +1,7 @@
-.\" $Xorg: CH13,v 1.3 2000/08/17 19:42:47 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-\&
-.sp 1
-.ce 3
-\s+1\fBChapter 13\fP\s-1
-
-\s+1\fBEvolution of the \*(xI\fP\s-1
-.sp 2
-.nr H1 13
-.nr H2 0
-.nr H3 0
-.nr H4 0
-.nr H5 0
-.LP
-.XS
-Chapter 13 \(em Evolution of the \*(xI
-.XE
-.LP
+<chapter id='Evolution_of_the_Intrinsics'>
+<title>Evolution of the Intrinsics</title>
+
+<para>
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
@@ -65,189 +11,190 @@ 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.
-.LP
-The \*(xI do not place any special requirement on widget
+</para>
+
+<para>
+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.
-.LP
+</para>
+
+<para>
In particular, widget programmers may wish to conform to the convention
-described in Section 1.6.12 when defining class extension records.
-
-.NH 2
-Determining Specification Revision Level
-.XS
-\fB\*(SN Determining Specification Revision Level\fP
-.XE
-.LP
+described in <xref linkend='Class_Extension_Records' /> when defining class extension records.
+</para>
+<sect1 id="Determining_Specification_Revision_Level">
+<title>Determining Specification Revision Level</title>
+<para>
Widget and application developers who wish to maintain a common source
-pool that will build properly with implementations of the \*(xI
+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
-.PN XtSpecificationRelease .
-.LP
-.Ds 0
+<function>XtSpecificationRelease</function>.
+</para>
+<literallayout >
#define XtSpecificationRelease 6
-.De
-.IN "XtSpecificationRelease" "" "@DEF@"
-.LP
+</literallayout>
+<para>
As the symbol
-.PN XtSpecificationRelease
+<function>XtSpecificationRelease</function>
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.
+</para>
+</sect1>
-.NH 2
-Release 3 to Release 4 Compatibility
-.XS
-\fB\*(SN Release 3 to Release 4 Compatibility\fP
-.XE
-.LP
+<sect1 id="Release_to_Release_Compatibility">
+<title>Release 3 to Release 4 Compatibility</title>
+<para>
At the data structure level, Release 4 retains binary compatibility
with Release 3 (the first X Consortium standard release) for all data
structures except
-.PN WMShellPart,
-.PN TopLevelShellPart ,
+<function>WMShellPart,</function>
+<function>TopLevelShellPart</function>,
and
-.PN TransientShellPart .
+<function>TransientShellPart</function>.
Release 4 changed the argument type to most procedures that now take
arguments of type
-.PN XtPointer
+<function>XtPointer</function>
and structure members that are now of type
-.PN XtPointer
+<function>XtPointer</function>
in order to avoid potential ANSI C conformance problems. It is
expected that most implementations will be binary compatible with the
previous definition.
-.LP
+</para>
+
+<para>
Two fields in
-.PN CoreClassPart
+<function>CoreClassPart</function>
were changed from
-.PN Boolean
+<function>Boolean</function>
to
-.PN XtEnum
+<function>XtEnum</function>
to allow implementations additional freedom in specifying the
representations of each. This change should require no source
modification.
-
-.NH 3
-Additional Arguments
-.XS
-\*(SN Additional Arguments
-.XE
-.LP
+</para>
+<sect2 id="Additional_Arguments">
+<title>Additional Arguments</title>
+<para>
Arguments were added to the procedure definitions for
-.PN XtInitProc ,
-.PN XtSetValuesFunc ,
+<xref linkend='XtInitProc' xrefstyle='select: title'/>,
+<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/>,
and
-.PN XtEventHandler
+<xref linkend='XtEventHandler' xrefstyle='select: title'/>
to provide more information and to
allow event handlers to abort further dispatching of the current event
(caution is advised!). The added arguments to
-.PN XtInitProc
+<xref linkend='XtInitProc' xrefstyle='select: title'/>
and
-.PN XtSetValuesFunc
+<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/>
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.
+</para>
+</sect2>
-.NH 3
-set_values_almost Procedures
-.XS
-\*(SN set_values_almost Procedures
-.XE
-.LP
+<sect2 id="set_values_almost_Procedures">
+<title>set_values_almost Procedures</title>
+<para>
The use of the arguments by a set_values_almost procedure was poorly
described in Release 3 and was inconsistent with other conventions.
-.LP
+</para>
+
+<para>
The current specification for the manner in which a set_values_almost
-procedure returns information to the \*(xI is not compatible with
+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.
-.LP
-No known implementation of the \*(xI correctly implemented the
+</para>
+
+<para>
+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.
+</para>
+</sect2>
-.NH 3
-Query Geometry
-.XS
-\*(SN Query Geometry
-.XE
-.LP
+<sect2 id="Query_Geometry">
+<title>Query Geometry</title>
+<para>
A composite widget layout routine that calls
-.PN XtQueryGeometry
+<xref linkend='XtQueryGeometry' xrefstyle='select: title'/>
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.
+</para>
+</sect2>
-.NH 3
-unrealizeCallback Callback List
-.XS
-\*(SN unrealizeCallback Callback List
-.XE
-.LP
+<sect2 id="unrealizeCallback_Callback_List">
+<title>unrealizeCallback Callback List</title>
+<para>
In order to provide a mechanism for widgets to be notified when they
become unrealized through a call to
-.PN XtUnrealizeWidget ,
+<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>,
the callback
-list name ``unrealizeCallback'' has been defined by the \*(xI. A
+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.
+</para>
+</sect2>
-.NH 3
-Subclasses of WMShell
-.XS
-\*(SN Subclasses of WMShell
-.XE
-.LP
-The formal adoption of the \fI\*(xC\fP as
+<sect2 id="Subclasses_of_WMShell">
+<title>Subclasses of WMShell</title>
+<para>
+The formal adoption of the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis> as
an X Consortium standard has meant the addition of four fields to
-.PN WMShellPart
+<function>WMShellPart</function>
and one field to
-.PN TopLevelShellPart .
+<function>TopLevelShellPart</function>.
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.
-.LP
+the end of the respective data structures.
+</para>
+
+<para>
To provide more convenience for TransientShells, a field was added
to the previously empty
-.PN TransientShellPart .
+<function>TransientShellPart</function>.
On some architectures the size of the part structure will not
have changed as a result of this.
-.LP
+</para>
+
+<para>
Any widget implementation whose class is a subclass of
TopLevelShell
or
TransientShell
must at minimum be
recompiled with the new data structure declarations. Because
-.PN WMShellPart
+<function>WMShellPart</function>
no longer contains a contiguous
-.PN XSizeHints
+<function>XSizeHints</function>
data structure,
a subclass that expected to do a single structure assignment of an
-.PN XSizeHints
-structure to the \fIsize_hints\fP field of
-.PN WMShellPart
+<function>XSizeHints</function>
+structure to the <emphasis remap='I'>size_hints</emphasis> field of
+<function>WMShellPart</function>
must be revised, though the old fields remain at the same positions within
-.PN WMShellPart .
-
-.NH 3
-Resource Type Converters
-.XS
-\*(SN Resource Type Converters
-.XE
-.LP
+<function>WMShellPart</function>.
+</para>
+</sect2>
+
+<sect2 id="Resource_Type_Converters">
+<title>Resource Type Converters</title>
+<para>
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
@@ -255,90 +202,88 @@ 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.
-.LP
+</para>
+
+<para>
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
-.PN XtConverter
+<xref linkend='XtConverter' xrefstyle='select: title'/>
was incomplete.
+</para>
+</sect2>
-.NH 3
-KeySym Case Conversion Procedure
-.XS
-\*(SN KeySym Case Conversion Procedure
-.XE
-.LP
+<sect2 id="KeySym_Case_Conversion_Procedure">
+<title>KeySym Case Conversion Procedure</title>
+<para>
The specification for the
-.PN XtCaseProc
+<xref linkend='XtCaseProc' xrefstyle='select: title'/>
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 \*(xI
+KeySym parameter. No known implementation of the Intrinsics
implemented the previously documented interface.
+</para>
+</sect2>
-.NH 3
-Nonwidget Objects
-.XS
-\*(SN Nonwidget Objects
-.XE
-.LP
+<sect2 id="Nonwidget_Objects_2">
+<title>Nonwidget Objects</title>
+<para>
Formal support for nonwidget objects is new to Release 4. A
prototype implementation was latent in at least one Release 3
-implementation of the \*(xI, but the specification has changed
+implementation of the Intrinsics, but the specification has changed
somewhat. The most significant change is the requirement for a
composite widget to declare the
-.PN CompositeClassExtension
-record with the \fIaccepts_objects\fP field set to
-.PN True
+<function>CompositeClassExtension</function>
+record with the <emphasis remap='I'>accepts_objects</emphasis> field set to
+<function>True</function>
in order to permit a client to create a nonwidget child.
-.LP
+</para>
+
+<para>
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
-\fIaccepts_objects\fP field allows a composite widget to declare that it
+<emphasis remap='I'>accepts_objects</emphasis> field allows a composite widget to declare that it
is not prepared to do so.
+</para>
+</sect2>
+</sect1>
-.NH 2
-Release 4 to Release 5 Compatibility
-.XS
-\fB\*(SN Release 4 to Release 5 Compatibility\fP
-.XE
-.LP
+<sect1 id="Release_to_Release_Compatibility_2">
+<title>Release 4 to Release 5 Compatibility</title>
+<para>
At the data structure level, Release 5 retains complete binary
compatibility with Release 4. The specification of the
-.PN ObjectPart ,
-.PN RectObjPart ,
-.PN CorePart ,
-.PN CompositePart ,
-.PN ShellPart ,
-.PN WMShellPart ,
-.PN TopLevelShellPart ,
+<function>ObjectPart</function>,
+<function>RectObjPart</function>,
+<function>CorePart</function>,
+<function>CompositePart</function>,
+<function>ShellPart</function>,
+<function>WMShellPart</function>,
+<function>TopLevelShellPart</function>,
and
-.PN ApplicationShellPart
+<function>ApplicationShellPart</function>
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
-.PN XrmValue
+<function>XrmValue</function>
and
-.PN XrmOptionDescRec
+<function>XrmOptionDescRec</function>
was updated to use a new type,
-.PN XPointer ,
-for the \fIaddr\fP and \fIvalue\fP fields, respectively, to avoid
+<function>XPointer</function>,
+for the <emphasis remap='I'>addr</emphasis> and <emphasis remap='I'>value</emphasis> fields, respectively, to avoid
ANSI C conformance problems. The definition of
-.PN XPointer
+<function>XPointer</function>
is binary compatible with the previous implementation.
-
-.NH 3
-baseTranslations Resource
-.XS
-\fB\*(SN baseTranslations Resource\fP
-.XE
-
-.LP
+</para>
+<sect2 id="baseTranslations_Resource">
+<title>baseTranslations Resource</title>
+<para>
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
@@ -346,29 +291,27 @@ 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''.
-.LP
+</para>
+
+<para>
Applications wishing to take advantage of the new functionality
would change their application defaults file, e.g., from
-.Ds
- app.widget.translations: \fIvalue\fP
-.DE
+<literallayout >
+ app.widget.translations: <emphasis remap='I'>value</emphasis>
to
-.Ds
- app.widget.baseTranslations: \fIvalue\fP
-.DE
+ app.widget.baseTranslations: <emphasis remap='I'>value</emphasis>
+</literallayout>
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.
+</para>
+</sect2>
-.NH 3
-Resource File Search Path
-.XS
-\fB\*(SN Resource File Search Path\fP
-.XE
-
-.LP
+<sect2 id="Resource_File_Search_Path">
+<title>Resource File Search Path</title>
+<para>
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
@@ -380,19 +323,17 @@ 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
-.PN \s-1XFILESEARCHPATH\s+1
+<emphasis role='strong'>XFILESEARCHPATH</emphasis>
and
-.PN \s-1XUSERFILESEARCHPATH\s+1
+<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis>
values when overriding the system defaults.
+</para>
+</sect2>
-.NH 3
-Customization Resource
-.XS
-\fB\*(SN Customization Resource\fP
-.XE
-
-.LP
-.PN XtResolvePathname
+<sect2 id="Customization_Resource">
+<title>Customization Resource</title>
+<para>
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>
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
@@ -402,394 +343,415 @@ 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.
+</para>
+</sect2>
-.NH 3
-Per-Screen Resource Database
-.XS
-\fB\*(SN Per-Screen Resource Database\fP
-.XE
-
-.LP
+<sect2 id="Per_Screen_Resource_Database">
+<title>Per-Screen Resource Database</title>
+<para>
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 \*(xI
+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.
-.LP
+</para>
+
+<para>
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
-.PN XtResolvePathname .
+<xref linkend='XtResolvePathname' xrefstyle='select: title'/>.
+</para>
+</sect2>
-.NH 3
-Internationalization of Applications
-.XS
-\fB\*(SN Internationalization of Applications\fP
-.XE
-
-.LP
+<sect2 id="Internationalization_of_Applications">
+<title>Internationalization of Applications</title>
+<para>
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 \*(xI
+adding support for internationalization to the Intrinsics
the restrictions of this model have been followed.
-In particular, the new \*(xI interfaces are designed not to
+In particular, the new Intrinsics interfaces are designed not to
preclude an application from using other alternatives.
-For this reason, no \*(xI routine makes a call to establish the
+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.
-.LP
+</para>
+
+<para>
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
-.PN XtSetLanguageProc
+<function>XtSetLanguageProc</function>
to do so.
-.LP
+</para>
+
+<para>
The internationalization additions also define event filters
as a part of the Xlib Input Method specifications. The
-\*(xI enable the use of event filters through additions to
-.PN XtDispatchEvent .
+Intrinsics enable the use of event filters through additions to
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
Applications that may not be dispatching all events through
-.PN XtDispatchEvent
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
should be reviewed in the context of this new input method mechanism.
-.LP
+</para>
+
+<para>
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 \*(xI to locate the database from localization information
+allow the Intrinsics to locate the database from localization information
supplied by the client.
-.LP
+</para>
+
+<para>
The previous specification for the syntax of the language string
specified by
-.PN xnlLanguage
+<function>xnlLanguage</function>
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.
+</para>
+</sect2>
-.NH 3
-Permanently Allocated Strings
-.XS
-\*(SN Permanently Allocated Strings
-.XE
-
-.LP
+<sect2 id="Permanently_Allocated_Strings">
+<title>Permanently Allocated Strings</title>
+<para>
In order to permit additional memory savings, an Xlib interface was
added to allow the resource manager to avoid copying certain string
-constants. The \*(xI specification was updated to explicitly require
-the Object \fIclass_name\fP, \fIresource_name\fP, \fIresource_class\fP,
-\fIresource_type\fP, \fIdefault_type\fP in resource tables, Core \fIactions\fP
-\fIstring\fP field, and Constraint \fIresource_name\fP, \fIresource_class\fP,
-\fIresource_type\fP, and \fIdefault_type\fP resource fields to be
+constants. The Intrinsics specification was updated to explicitly require
+the Object <emphasis remap='I'>class_name</emphasis>, <emphasis remap='I'>resource_name</emphasis>, <emphasis remap='I'>resource_class</emphasis>,
+<emphasis remap='I'>resource_type</emphasis>, <emphasis remap='I'>default_type</emphasis> in resource tables, Core <emphasis remap='I'>actions</emphasis>
+<emphasis remap='I'>string</emphasis> field, and Constraint <emphasis remap='I'>resource_name</emphasis>, <emphasis remap='I'>resource_class</emphasis>,
+<emphasis remap='I'>resource_type</emphasis>, and <emphasis remap='I'>default_type</emphasis> resource fields to be
permanently allocated. This explicit requirement is expected to
affect only applications that may create and destroy classes
on the fly.
-
-.NH 3
-Arguments to Existing Functions
-.XS
-\fB\*(SN Arguments to Existing Functions\fP
-.XE
-
-.LP
-The \fIargs\fP argument to
-.PN XtAppInitialize ,
-.PN XtVaAppInitialize ,
-.PN XtOpenDisplay ,
-.PN XtDisplayInitialize ,
+</para>
+</sect2>
+
+<sect2 id="Arguments_to_Existing_Functions">
+<title>Arguments to Existing Functions</title>
+<para>
+The <emphasis remap='I'>args</emphasis> argument to
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>,
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>,
and
-.PN XtInitialize
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
were changed from
-.PN Cardinal *
+<function>Cardinal</function>*
to int* to conform to pre-existing convention and avoid otherwise
annoying typecasting in ANSI C environments.
+</para>
+</sect2>
+</sect1>
-.NH 2
-Release 5 to Release 6 Compatibility
-.XS
-\fB\*(SN Release 5 to Release 6 Compatibility\fP
-.XE
-.LP
+<sect1 id="Release_to_Release_Compatibility_3">
+<title>Release 5 to Release 6 Compatibility</title>
+<para>
At the data structure level, Release 6 retains binary compatibility
-with Release 5 for all data structures except
-.PN WMShellPart .
-Three resources were added to the specification.
+with Release 5 for all data structures except
+<function>WMShellPart</function>.
+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.
-
-.NH 3
-Widget Internals
-.XS
-\*(SN Widget Internals
-.XE
-.LP
+</para>
+<sect2 id="Widget_Internals">
+<title>Widget Internals</title>
+<para>
Two new widget methods for instance allocation and deallocation were added
-to the Object class. These new methods
+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
+when an appropriate allocation method is specified or inherited
by the widget class.
-.LP
+</para>
+
+<para>
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
+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.
-.LP
+</para>
+
+<para>
As a convenience, an interface to locate a widget class extension
-record on a linked list,
-.PN XtGetClassExtension ,
+record on a linked list,
+<xref linkend='XtGetClassExtension' xrefstyle='select: title'/>,
has been added.
-.LP
+</para>
+
+<para>
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 \fBTrue\fP in the
+invocation should set allows_change_managed_set to <function>True</function> in the
extension record.
-.LP
+</para>
+
+<para>
The wording of the process followed by
-.PN XtUnmanageChildren
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
has changed slightly to better handle changes to the managed set
during phase 2 destroy processing.
-.LP
+</para>
+
+<para>
A new exposure event compression flag,
-.PN XtExposeNoRegion ,
+<function>XtExposeNoRegion</function>,
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 \*(xI need not
+exposure region information can indicate that the Intrinsics need not
compute the region.
+</para>
+</sect2>
-.NH 3
-General Application Development
-.XS
-\*(SN General Application Development
-.XE
-.LP
-.PN XtOpenApplication
+<sect2 id="General_Application_Development">
+<title>General Application Development</title>
+<para>
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
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,
-.PN XtAppInitialize ,
+it replaces,
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>,
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.
-.LP
+</para>
+
+<para>
The toolkit initialization function
-.PN XtToolkitInitialize
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>
may be called multiple times without penalty.
-.LP
+</para>
+
+<para>
In order to optimize changes in geometry to a set of geometry-managed
children, a new interface,
-.PN XtChangeManagedSet ,
+<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>,
has been added.
+</para>
+</sect2>
-.NH 3
-Communication with Window and Session Managers
-.XS
-\*(SN Communication with Window and Session Managers
-.XE
-.LP
-The revision of the \fI\*(xC\fP as an X Consortium standard has resulted
+<sect2 id="Communication_with_Window_and_Session_Managers">
+<title>Communication with Window and Session Managers</title>
+<para>
+The revision of the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis> as an X Consortium standard has resulted
in the addition of three fields to the specification of
-.PN WMShellPart .
-These are \fIurgency\fP, \fIclient_leader\fP, and \fIwindow_role\fP.
-.LP
-The adoption of the \fIX Session Management Protocol\fP as an X Consortium
-standard has resulted in the addition of a new shell widget,
-.PN SessionShell ,
+<function>WMShellPart</function>.
+These are <emphasis remap='I'>urgency</emphasis>, <emphasis remap='I'>client_leader</emphasis>, and <emphasis remap='I'>window_role</emphasis>.
+</para>
+
+<para>
+The adoption of the <emphasis remap='I'>X Session Management Protocol</emphasis> as an X Consortium
+standard has resulted in the addition of a new shell widget,
+<function>SessionShell</function>,
and an accompanying subclass verification interface,
-.PN XtIsSessionShell .
+<function>XtIsSessionShell</function>.
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
-.PN ApplicationShell ,
-the
-.PN ApplicationShell
+In order to preserve compatibility with existing subclasses of
+<function>ApplicationShell</function>,
+the
+<function>ApplicationShell</function>
was subclassed to create the new widget class.
The session protocol requires a modal response to certain checkpointing
operations by participating applications. The
-.PN SessionShell
+<function>SessionShell</function>
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
-.PN XtSessionGetToken
-and
-.PN XtSessionReturnToken .
+<xref linkend='XtSessionGetToken' xrefstyle='select: title'/>
+and
+<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>.
There is also a new command line argument, -xtsessionID, which facilitates
-the session manager in restarting applications based on the \*(xI.
-.LP
-The resource name and class strings defined by the \*(xI shell
-widgets in
-.Pn < X11/Shell.h >
+the session manager in restarting applications based on the Intrinsics.
+</para>
+
+<para>
+The resource name and class strings defined by the Intrinsics shell
+widgets in
+<function>&lt;X11/Shell.h&gt;</function>
are now listed in Appendix E. The addition of a new symbol
-for the
-.PN WMShell
-\fIwait_for_wm\fP resource was made to bring the external symbol
+for the
+<function>WMShell</function>
+<emphasis remap='I'>wait_for_wm</emphasis> resource was made to bring the external symbol
and the string it represents into agreement. The actual resource name
-string in
-.PN WMShell
+string in
+<function>WMShell</function>
has not changed.
-The resource representation type of the XtNwinGravity resource of the
-.PN WMShell
-was changed to XtRGravity in order to register a type
+The resource representation type of the XtNwinGravity resource of the
+<function>WMShell</function>
+was changed to XtRGravity in order to register a type
converter so that window gravity resource values could be specified by name.
+</para>
+</sect2>
-.NH 3
-Geometry Management
-.XS
-\*(SN Geometry Management
-.XE
-.LP
+<sect2 id="Geometry_Management_2">
+<title>Geometry Management</title>
+<para>
A clarification to the specification was made to indicate that geometry
requests may include current values along with the requested changes.
+</para>
+</sect2>
-.NH 3
-Event Management
-.XS
-\*(SN Event Management
-.XE
-.LP
+<sect2 id="Event_Management_2">
+<title>Event Management</title>
+<para>
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
-.PN XtInsertEventTypeHandler
+<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/>
and
-.PN XtRemoveEventTypeHandler .
+<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>.
Since the mechanism to indicate selection of extension events is specific
-to the extension being used, the \*(xI introduces
-.PN XtRegisterExtensionSelector ,
+to the extension being used, the Intrinsics introduces
+<xref linkend='XtRegisterExtensionSelector' xrefstyle='select: title'/>,
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 \*(xI event dispatcher may now be replaced or enveloped
+the Intrinsics event dispatcher may now be replaced or enveloped
by the application with
-.PN XtSetEventDispatcher .
-The dispatcher may wish to call
-.PN XtGetKeyboardFocusWidget
-to determine the widget with the current \*(xI keyboard focus.
+<xref linkend='XtSetEventDispatcher' xrefstyle='select: title'/>.
+The dispatcher may wish to call
+<xref linkend='XtGetKeyboardFocusWidget' xrefstyle='select: title'/>
+to determine the widget with the current Intrinsics keyboard focus.
A dispatcher, after determining the destination widget, may use
-.PN XtDispatchEventToWidget
+<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/>
to cause the event to be dispatched to the event handlers registered
by a specific widget.
-.LP
+</para>
+
+<para>
To permit the dispatching of events
for nonwidget drawables, such as pixmaps that are not associated
-with a widget's window,
-.PN XtRegisterDrawable
-and
-.PN XtUnregisterDrawable
+with a widget's window,
+<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/>
+and
+<xref linkend='XtUnregisterDrawable' xrefstyle='select: title'/>
have been added to the library. A related update was made to
the description of
-.PN XtWindowToWidget .
-.LP
+<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>.
+</para>
+
+<para>
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
+Threaded toolkit applications are supported by the
new interfaces
-.PN XtToolkitThreadInitialize ,
-.PN XtAppLock ,
-.PN XtAppUnlock ,
-.PN XtAppSetExitFlag ,
-and
-.PN XtAppGetExitFlag .
-Widget writers may also use
-.PN XtProcessLock
-and
-.PN XtProcessUnlock .
-.LP
+<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtAppLock' xrefstyle='select: title'/>,
+<xref linkend='XtAppUnlock' xrefstyle='select: title'/>,
+<xref linkend='XtAppSetExitFlag' xrefstyle='select: title'/>,
+and
+<xref linkend='XtAppGetExitFlag' xrefstyle='select: title'/>.
+Widget writers may also use
+<xref linkend='XtProcessLock' xrefstyle='select: title'/>
+and
+<xref linkend='XtProcessUnlock' xrefstyle='select: title'/>.
+</para>
+
+<para>
Safe handling of POSIX signals and other asynchronous notifications
-is now provided by use of
-.PN XtAppAddSignal ,
-.PN XtNoticeSignal ,
+is now provided by use of
+<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>,
+<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>,
and
-.PN XtRemoveSignal .
-.LP
+<xref linkend='XtRemoveSignal' xrefstyle='select: title'/>.
+</para>
+
+<para>
The application can receive notification of an impending block
-in the \*(xI event manager by registering interest through
-.PN XtAppAddBlockHook
-and
-.PN XtRemoveBlockHook .
-.LP
-.PN XtLastEventProcessed
+in the Intrinsics event manager by registering interest through
+<xref linkend='XtAppAddBlockHook' xrefstyle='select: title'/>
+and
+<xref linkend='XtRemoveBlockHook' xrefstyle='select: title'/>.
+</para>
+
+<para>
+<xref linkend='XtLastEventProcessed' xrefstyle='select: title'/>
returns the most recent event passed to
-.PN XtDispatchEvent
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>
for a specified display.
+</para>
+</sect2>
-.NH 3
-Resource Management
-.XS
-\*(SN Resource Management
-.XE
-.LP
-Resource converters are registered by the \*(xI for window gravity
+<sect2 id="Resource_Management_2">
+<title>Resource Management</title>
+<para>
+Resource converters are registered by the Intrinsics for window gravity
and for three new resource types associated with session participation:
RestartStyle, CommandArgArray and DirectoryString.
-.LP
+</para>
+
+<para>
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.
+</para>
+</sect2>
-.NH 3
-Translation Management
-.XS
-\*(SN Translation Management
-.XE
-.LP
+<sect2 id="Translation_Management_2">
+<title>Translation Management</title>
+<para>
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 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.
+</para>
+</sect2>
-.NH 3
-Selections
-.XS
-\*(SN Selections
-.XE
-.LP
+<sect2 id="Selections">
+<title>Selections</title>
+<para>
The targets of selection requests may be parameterized, as described
-by the revised \fI\*(xC\fP.
+by the revised <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>.
When such requests are made,
-.PN XtSetSelectionParameters
+<xref linkend='XtSetSelectionParameters' xrefstyle='select: title'/>
is used by the requestor to specify the target parameters and
-.PN XtGetSelectionParameters
+<xref linkend='XtGetSelectionParameters' xrefstyle='select: title'/>
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,
-.PN XtCreateSelectionRequest ,
-.PN XtCancelSelectionRequest ,
-and
-.PN XtSendSelectionRequest
+request for multiple targets,
+<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>,
+<xref linkend='XtCancelSelectionRequest' xrefstyle='select: title'/>,
+and
+<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/>
are used to envelop the assembly of the request.
-When the parameters themselves are the names of properties,
-the \*(xI provides support for the economical use of property atom names;
-see
-.PN XtReservePropertyAtom
-and
-.PN XtReleasePropertyAtom .
-
-.NH 3
-External Agent Hooks
-.XS
-\*(SN External Agent Hooks
-.XE
-.LP
+When the parameters themselves are the names of properties,
+the Intrinsics provides support for the economical use of property atom names;
+see
+<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/>
+and
+<xref linkend='XtReleasePropertyAtom' xrefstyle='select: title'/>.
+</para>
+</sect2>
+
+<sect2 id="External_Agent_Hooks">
+<title>External Agent Hooks</title>
+<para>
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
@@ -798,8 +760,11 @@ 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
-.PN XtHooksOfDisplay ,
-which returns the hook registration widget, and
-.PN XtGetDisplays ,
+<xref linkend='XtHooksOfDisplay' xrefstyle='select: title'/>,
+which returns the hook registration widget, and
+<xref linkend='XtGetDisplays' xrefstyle='select: title'/>,
which returns a list of the X displays associated with an application context.
-.bp
+</para>
+</sect2>
+</sect1>
+</chapter>
diff --git a/libXt/specs/Makefile.am b/libXt/specs/Makefile.am
index 887eb7e1e..c922dbb8e 100644
--- a/libXt/specs/Makefile.am
+++ b/libXt/specs/Makefile.am
@@ -1,24 +1,37 @@
-EXTRA_DIST = \
- CH01 \
- CH02 \
- CH03 \
- CH04 \
- CH05 \
- CH06 \
- CH07 \
- CH08 \
- CH09 \
- CH10 \
- CH11 \
- CH12 \
- CH13 \
- appA \
- appB \
- appC \
- appD \
- appE \
- appF \
- intr.idxmac.t \
- postproc \
- strings.mit \
- Xtk.intr.front
+
+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
diff --git a/libXt/specs/Makefile.in b/libXt/specs/Makefile.in
new file mode 100644
index 000000000..06964a911
--- /dev/null
+++ b/libXt/specs/Makefile.in
@@ -0,0 +1,601 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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@
+DIST_COMMON = $(am__dist_shelf_DATA_DIST) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/docbook.am
+@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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+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__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"
+DATA = $(dist_shelf_DATA) $(shelf_DATA)
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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: @MAINTAINER_MODE_TRUE@ $(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
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-dist_shelfDATA: $(dist_shelf_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(shelfdir)" || $(MKDIR_P) "$(DESTDIR)$(shelfdir)"
+ @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(shelfdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(shelfdir)" && rm -f $$files
+install-shelfDATA: $(shelf_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(shelfdir)" || $(MKDIR_P) "$(DESTDIR)$(shelfdir)"
+ @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \
+ 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|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(shelfdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(shelfdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 \
+ 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 uninstall uninstall-am \
+ uninstall-dist_shelfDATA uninstall-shelfDATA
+
+@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:
diff --git a/libXt/specs/Xtk.intr.front b/libXt/specs/Xtk.intr.front
deleted file mode 100644
index 353467fdf..000000000
--- a/libXt/specs/Xtk.intr.front
+++ /dev/null
@@ -1,333 +0,0 @@
-.\" MIT header page and copyright notice
-.\" MIT page header and footers
-.\"
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ps 11
-.nr PS 11
-\&
-.sp 8
-.ce 4
-\s+2\fB\*(xT\fP\s-2
-
-\s+1\fBX Window System\fP\s-1
-
-\s+1\fBX Version 11, Release \*(Rn\fP\s-1
-
-
-First Revision - April, 1994
-.sp 5
-.ce 4
-\s-1Joel McCormack
-.sp 6p
-Digital Equipment Corporation
-Western Software Laboratory
-.sp 2
-.ce 4
-Paul Asente
-.sp 6p
-Digital Equipment Corporation
-Western Software Laboratory
-.sp 2
-.ce 4
-Ralph R. Swick
-.sp 6p
-Digital Equipment Corporation
-External Research Group
-MIT X Consortium
-.sp 2
-.ce 3
-version 6 edited by Donna Converse
-.sp 6p
-X Consortium, Inc.\s+1
-.bp
-\&
-.ps 9
-.nr PS 9
-.sp 8
-.LP
-X Window System is a trademark of X Consortium, Inc.
-.LP
-Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
-X Consortium
-.LP
-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:
-.LP
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-.LP
-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.
-.LP
-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.
-.LP
-Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
-Digital Equipment Corporation, Maynard, Massachusetts.
-.LP
-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.
-.ps 11
-.nr PS 11
-.bp 11
-.EF ''\fB \\\\n(PN \fP''
-.OF ''\fB \\\\n(PN \fP''
-.af PN i
-.XS ix
-Acknowledgments
-.XE
-\&
-.sp 1
-.ce 3
-\s+1\fBAcknowledgments\fP\s-1
-.sp 2
-.na
-.LP
-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:
-.LP
-.Ds
-.ta 3i
-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)
-.De
-.LP
-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.
-.LP
-The design and implementation of the X10 Intrinsics were done by:
-.LP
-.Ds
-Terry Weissman (Digital WSL)
-Smokey Wallace (Digital WSL)
-Phil Karlton (Digital WSL)
-Charles Haynes (Digital WSL)
-Frank Hall (HP)
-.De
-.LP
-The design and implementation of the X10 toolkit's sample widgets were
-by the above, as well as by:
-.LP
-.Ds
-Ram Rao (Digital UEG)
-Mary Larson (Digital UEG)
-Mike Gancarz (Digital UEG)
-Kathleen Langone (Digital UEG)
-.De
-These widgets provided a checklist of requirements that we
-had to address in the X11 Intrinsics.
-.LP
-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.
-.LP
-Finally, a special thanks to Mike Chow,
-whose extensive performance analysis of the X10 toolkit provided
-the justification to redesign it entirely for X11.
-.LP
-.sp
-.Ds 0
-Joel McCormack
-Western Software Laboratory
-Digital Equipment Corporation
-
-March 1988
-.De
-.bp
-.LP
-The current design of the \*(xI 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 \*(xI:
-.LP
-.Ds
-.ta 3i
-Steve Pitschke (Stellar) C. Doug Blewett (AT&T)
-Bob Miller (HP) David Schiferl (Tektronix)
-Fred Taft (HP) Michael Squires (Sequent)
-Marcel Meth (AT&T) Jim Fulton (MIT)
-Mike Collins (Digital) Kerry Kimbrough (Texas Instruments)
-Scott McGregor (Digital) Phil Karlton (Digital)
-Julian Payne (ESS) Jacques Davy (Bull)
-Gabriel Beged-Dov (HP) Glenn Widener (Tektronix)
-.De
-.LP
-Thanks go to each of them for the countless hours spent
-reviewing drafts and code.
-.LP
-.sp
-.Ds 0
-Ralph R. Swick
-External Research Group
-Digital Equipment Corporation
-MIT Project Athena
-
-June 1988
-.De
-.sp
-.LP
-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:
-.LP
-.Ds
-.ta 3i
-Don Alecci (AT&T) Ellis Cohen (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)
-.De
-.sp
-.LP
-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.
-.sp
-.Ds 0
-Ralph R. Swick
-
-December 1989
-and
-July 1991
-.De
-.bp
-.LP
-The Release 6 Intrinsics is a result of the collaborative
-efforts of participants in the X Consortium's \fBintrinsics\fP
-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:
-.LP
-.Ds
-.ta 3i
-Paul Asente (Adobe) Larry Cable (SunSoft)
-Ellis Cohen (OSF) Daniel Dardailler (OSF)
-Vania Joloboff (OSF) Kaleb Keithley (X Consortium)
-Courtney Loomis (HP) Douglas Rand (OSF)
-Bob Scheifler (X Consortium) Ajay Vohra (SunSoft)
-.De
-.LP
-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.
-.LP
-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.
-.sp
-.Ds 0
-Donna Converse
-X Consortium
-April 1994
-.De
-.bp
-.XS xii
-About This Manual
-.XE
-\&
-.sp 1
-.ce 3
-\s+1\fBAbout This Manual\fP\s-1
-.sp 2
-.na
-.LP
-\fI\*(xT\fP is intended to be read by both application programmers who will
-use one or more of the many widget sets built with the \*(xI
-and by widget programmers who will use the \*(xI 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 \*(xI functions in writing an application and because the widget programmer
-is likely to use many more, if not all, of the \*(xI 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 \fBbold\fP
-indicate the information that should be of special interest to an
-application programmer.
-.LP
-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.
-.SH
-Conventions Used in this Manual
-.LP
-This document uses the following conventions:
-.IP \(bu 5
-Global symbols are printed in
-.PN this
-.PN special
-.PN 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 \fIitalics\fP.
-.IP \(bu 5
-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.
-.IP \(bu 5
-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
-\fIspecifies\fP or, in the case of multiple arguments, the word \fIspecify\fP.
-The explanations for all arguments that are returned to you start with the
-word \fIreturns\fP or, in the case of multiple arguments, the word \fIreturn\^\fP.
-.bp 1
-.af PN 1
-.EH '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP'
-.OH '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP'
diff --git a/libXt/specs/acknowledgement.xml b/libXt/specs/acknowledgement.xml
new file mode 100644
index 000000000..ea25a5a49
--- /dev/null
+++ b/libXt/specs/acknowledgement.xml
@@ -0,0 +1,323 @@
+<!-- <acknowledgements> -->
+<dedication>
+<title>Acknowledgments</title>
+
+<para>
+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:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='2' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row><?dbfo row-height="0.2cm"?>
+ <entry>Loretta Guarino-Reid (Digital WSL)</entry>
+ <entry>Rich Hyde (Digital WSL)</entry>
+ </row>
+ <row><?dbfo row-height="0.2cm"?>
+ <entry>Susan Angebranndt (Digital WSL)</entry>
+ <entry>Terry Weissman (Digital WSL)</entry>
+ </row>
+ <row><?dbfo row-height="0.2cm"?>
+ <entry>Mary Larson (Digital UEG)</entry>
+ <entry>Mark Manasse (Digital SRC)</entry>
+ </row>
+ <row><?dbfo row-height="0.5cm"?>
+ <entry>Jim Gettys (Digital SRC)</entry>
+ <entry>Leo Treggiari (Digital SDT)</entry>
+ </row>
+ <row><?dbfo row-height="0.5cm"?>
+ <entry>Ralph Swick (Project Athena and Digital ERP)</entry>
+ <entry>Mark Ackerman (Project Athena)</entry>
+ </row>
+ <row><?dbfo row-height="0.5cm"?>
+ <entry>Ron Newman (Project Athena)</entry>
+ <entry>Bob Scheifler (MIT LCS)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+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.
+</para>
+
+<para>
+The design and implementation of the X10 Intrinsics were done by:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='1' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row>
+ <entry>Terry Weissman (Digital WSL)</entry>
+ </row>
+ <row>
+ <entry>Smokey Wallace (Digital WSL)</entry>
+ </row>
+ <row>
+ <entry>Phil Karlton (Digital WSL)</entry>
+ </row>
+ <row>
+ <entry>Charles Haynes (Digital WSL)</entry>
+ </row>
+ <row>
+ <entry>Frank Hall (HP)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+The design and implementation of the X10 toolkit’s sample widgets were by
+the above, as well as by:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='1' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row>
+ <entry>Ram Rao (Digital UEG)</entry>
+ </row>
+ <row>
+ <entry>Mary Larson (Digital UEG)</entry>
+ </row>
+ <row>
+ <entry>Mike Gancarz (Digital UEG)</entry>
+ </row>
+ <row>
+ <entry>Kathleen Langone (Digital UEG)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+These widgets provided a checklist of requirements that we had to address in the X11 Intrinsics.
+</para>
+<para>
+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.
+</para>
+<para>
+Finally, a special thanks to Mike Chow, whose extensive performance analysis of the X10 toolkit
+provided the justification to redesign it entirely for X11.
+</para>
+
+<literallayout>
+Joel McCormack
+Western Software Laboratory
+Digital Equipment Corporation
+March 1988
+</literallayout>
+
+
+<para>
+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:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='2' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row>
+ <entry>Steve Pitschke (Stellar)</entry>
+ <entry>C.Doug Blewett (AT&amp;T)</entry>
+ </row>
+ <row>
+ <entry>Bob Miller (HP)</entry>
+ <entry>David Schiferl (Tektronix)</entry>
+ </row>
+ <row>
+ <entry>Fred Taft (HP)</entry>
+ <entry>Michael Squires (Sequent)</entry>
+ </row>
+ <row>
+ <entry>Marcel Meth (AT&amp;T)</entry>
+ <entry>JimFulton (MIT)</entry>
+ </row>
+ <row>
+ <entry>Mike Collins (Digital)</entry>
+ <entry>Kerry Kimbrough (Texas Instruments)</entry>
+ </row>
+ <row>
+ <entry>Scott McGregor (Digital)</entry>
+ <entry>Phil Karlton (Digital)</entry>
+ </row>
+ <row>
+ <entry>Julian Payne (ESS)</entry>
+ <entry>Jacques Davy (Bull)</entry>
+ </row>
+ <row>
+ <entry>Gabriel Beged-Dov (HP)</entry>
+ <entry>GlennWidener (Tektronix)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+Thanks go to each of them for the countless hours spent reviewing drafts and code.
+</para>
+
+<literallayout>
+Ralph R. Swick
+External Research Group
+Digital Equipment Corporation
+MIT Project Athena
+June 1988
+</literallayout>
+
+
+<para>
+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:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='2' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row>
+ <entry>Don Alecci (AT&amp;T)</entry>
+ <entry>EllisCohen (OSF)</entry>
+ </row>
+ <row>
+ <entry>Donna Converse (MIT)</entry>
+ <entry>Clive Feather (IXI)</entry>
+ </row>
+ <row>
+ <entry>Nayeem Islam (Sun)</entry>
+ <entry>Dana Laursen (HP)</entry>
+ </row>
+ <row>
+ <entry>Keith Packard (MIT)</entry>
+ <entry>Chris Peterson (MIT)</entry>
+ </row>
+ <row>
+ <entry>Richard Probst (Sun)</entry>
+ <entry>Larry Cable (Sun)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+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.
+</para>
+
+<literallayout>
+Ralph R. Swick
+December 1989
+and
+July 1991
+</literallayout>
+
+<para>
+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:
+</para>
+
+<!-- <sidebar> -->
+<para>
+<informaltable frame='none'>
+<?dbfo keep-together="always" ?>
+ <tgroup cols='2' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' />
+ <colspec colwidth='1.0*' />
+ <tbody>
+ <row>
+ <entry>Paul Asente (Adobe)</entry>
+ <entry>Larry Cable (SunSoft)</entry>
+ </row>
+ <row>
+ <entry>Ellis Cohen (OSF)</entry>
+ <entry>Daniel Dardailler (OSF)</entry>
+ </row>
+ <row>
+ <entry>Vania Joloboff (OSF)</entry>
+ <entry>KalebKeithley (X Consortium)</entry>
+ </row>
+ <row>
+ <entry>Courtney Loomis (HP)</entry>
+ <entry>Douglas Rand (OSF)</entry>
+ </row>
+ <row>
+ <entry>Bob Scheifler (X Consortium)</entry>
+ <entry>Ajay Vohra (SunSoft)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</para>
+<!-- </sidebar> -->
+
+<para>
+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.
+</para>
+
+<para>
+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.
+</para>
+
+<literallayout>
+Donna Converse
+X Consortium
+April 1994
+</literallayout>
+</dedication>
+<!-- </acknowledgements> -->
diff --git a/libXt/specs/appA b/libXt/specs/appA
deleted file mode 100644
index 57a1890a7..000000000
--- a/libXt/specs/appA
+++ /dev/null
@@ -1,107 +0,0 @@
-.\" $Xorg: appA,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix A\fP\s-1
-
-\s+1\fBResource File Format\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix A \(em Resource File Format\fP
-.XE
-A resource file contains text representing the default resource values for an
-application or set of applications.
-.LP
-The format of resource files is defined by \fI\*(xL\fP and is reproduced here
-for convenience only.
-.LP
-The format of a resource specification is
-.TS
-l l .
-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>}
-.TE
-.LP
-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.
-.LP
-If the last character on a line is a backslash (\\),
-that line is assumed to continue on the next line.
-.LP
-To allow a Value to begin with whitespace,
-the two-character sequence ``\\\^\fIspace\fP'' (backslash followed by space)
-is recognized and replaced by a space character,
-and the two-character sequence ``\\\^\fItab\fP''
-(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 ``\\\^\fInewline\fP''
-(backslash followed by newline) is
-recognized and removed from the value.
-
-To allow a Value to contain arbitrary character codes,
-the four-character sequence ``\\\^\fInnn\fP'',
-where each \fIn\fP 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.
diff --git a/libXt/specs/appA.xml b/libXt/specs/appA.xml
new file mode 100644
index 000000000..daf40eb3c
--- /dev/null
+++ b/libXt/specs/appA.xml
@@ -0,0 +1,112 @@
+<appendix id='Resource_File_Format'>
+<title>Resource File Format</title>
+<para>
+A resource file contains text representing the default resource values for an
+application or set of applications.
+</para>
+
+<para>
+The format of resource files is defined by
+<emphasis remap='I'>Xlib — C Language X Interface.</emphasis> and is reproduced here
+for convenience only.
+</para>
+
+<para>The format of a resource specification is</para>
+<informaltable frame='none'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='0.3*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>ResourceLine</entry>
+ <entry>= Comment | IncludeFile | ResourceSpec | &lt;empty line&gt;</entry>
+ </row>
+ <row>
+ <entry>Comment</entry>
+ <entry>="!" {&lt;any character except null or newline&gt;}</entry>
+ </row>
+ <row>
+ <entry>IncludeFile</entry>
+ <entry>= "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace</entry>
+ </row>
+ <row>
+ <entry>FileName</entry>
+ <entry>= &lt;valid filename for operating system&gt;</entry>
+ </row>
+ <row>
+ <entry>ResourceSpec</entry>
+ <entry>= WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value</entry>
+ </row>
+ <row>
+ <entry>ResourceName</entry>
+ <entry>= [Binding] {Component Binding} ComponentName</entry>
+ </row>
+ <row>
+ <entry>Binding</entry>
+ <entry>="." | "*"</entry>
+ </row>
+ <row>
+ <entry>WhiteSpace</entry>
+ <entry>= {&lt;space> | &lt;horizontal tab&gt;}</entry>
+ </row>
+ <row>
+ <entry>Component</entry>
+ <entry>= "?" | ComponentName</entry>
+ </row>
+ <row>
+ <entry>ComponentName</entry>
+ <entry>= NameChar {NameChar}</entry>
+ </row>
+ <row>
+ <entry>NameChar</entry>
+ <entry>= "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-"</entry>
+ </row>
+ <row>
+ <entry>Value</entry>
+ <entry>={&lt;any character except null or unescaped newline&gt;}</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+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.
+</para>
+
+<para>
+If the last character on a line is a backslash (\),
+that line is assumed to continue on the next line.
+</para>
+
+<para>
+To allow a Value to begin with whitespace,
+the two-character sequence "\<emphasis remap='I'>space</emphasis>" (backslash followed by space)
+is recognized and replaced by a space character,
+and the two-character sequence "\<emphasis remap='I'>tab</emphasis>"
+(backslash followed by horizontal tab)
+is recognized and replaced by a horizontal tab character.
+</para>
+<para>
+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 "\<emphasis remap='I'>newline</emphasis>"
+(backslash followed by newline) is
+recognized and removed from the value.
+</para>
+<para>
+To allow a Value to contain arbitrary character codes,
+the four-character sequence "\<emphasis remap='I'>nnn</emphasis>",
+where each <emphasis remap='I'>n</emphasis> 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.
+</para>
+</appendix>
diff --git a/libXt/specs/appB b/libXt/specs/appB
deleted file mode 100644
index 3eb9ccc7b..000000000
--- a/libXt/specs/appB
+++ /dev/null
@@ -1,783 +0,0 @@
-.\" $Xorg: appB,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix B\fP\s-1
-
-\s+1\fBTranslation Table Syntax\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix B \(em Translation Table Syntax\fP
-.XE
-.IN "Translation tables"
-.SH
-Notation
-.LP
-Syntax is specified in EBNF notation with the following conventions:
-.TS
-l l.
-[ 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
-.TE
-.LP
-All terminals are enclosed in double quotation marks (`` '').
-Informal descriptions are enclosed in angle brackets (< >).
-.SH
-Syntax
-.LP
-The syntax of a translation table is
-.TS
-l l .
-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'', ``)''>}
-.TE
-
-.LP
-The \fIparams\fP field is parsed into a list of
-.PN String
-values that will be passed to the named action procedure. A
-\fIquoted string\fP 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''.
-
-.SH
-Modifier Names
-.LP
-The modifier field is used to specify standard X keyboard and button
-modifier mask bits.
-Modifiers are legal on event types
-.PN KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-.PN ButtonRelease ,
-.PN MotionNotify ,
-.PN EnterNotify ,
-.PN LeaveNotify ,
-and their abbreviations.
-An error is generated when a translation table
-that contains modifiers for any other events is parsed.
-.IP \(bu 5
-If the modifier list has no entries and is not ``None'',
-it means ``don't care'' on all modifiers.
-.IP \(bu 5
-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.
-.IP \(bu 5
-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.
-.IP \(bu 5
-If a modifier is preceded by a tilde (~),
-it means that that modifier must not be asserted.
-.IP \(bu 5
-If ``None'' is specified, it means no modifiers can be asserted.
-.IP \(bu 5
-If a colon (:) is specified at the beginning of the modifier list,
-it directs the \*(xI 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 \fI\*(xP\fP, 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''.
-.IP \(bu 5
-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.
-.IP \(bu 5
-If a colon (:) is not specified,
-no standard modifiers are applied.
-Then, for example, ``<Key>A'' and ``<Key>a'' are equivalent.
-.LP
-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:
-.LP
-.Ds 0
-.TA 2.5i
-.ta 2.5i
-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
-.De
-.LP
-The use of ``None'' for a modifier list is identical to the use
-of an exclamation point with no modifers.
-.LP
-.TS H
-lw(1i) lw(1i) lw(3i).
-_
-.sp 6p
-Modifier Abbreviation Meaning
-.sp 6p
-_
-.sp 6p
-.R
-.TH
-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
-.sp 6p
-_
-.TE
-.LP
-.IN "key modifier"
-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.
-.LP
-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.
-.LP
-A modifier_list/KeySym combination in a translation matches a
-modifiers/KeyCode combination in an event in the following ways:
-.IP 1. 5
-If a colon (:) is used, the \*(xI call the display's
-.PN XtKeyProc
-with the KeyCode and modifiers.
-To match, (\fImodifiers\fP & ~\fImodifiers_return\fP) must equal \fImodifier_list\fP, and
-\fIkeysym_return\fP must equal the given KeySym.
-.IP 2. 5
-If (:) is not used, the \*(xI mask off all don't-care bits from the
-modifiers.
-This value must be equal to \fImodifier_list\fP.
-Then, for each possible combination of
-don't-care modifiers in the modifier list, the \*(xI call the display's
-.PN XtKeyProc
-with the KeyCode and that combination ORed with the cared-about modifier bits
-from the event.
-\fIKeysym_return\fP must match the KeySym in the translation.
-.SH
-Event Types
-.LP
-The event-type field describes XEvent types.
-In addition to the standard
-Xlib symbolic event type names, the following event type synonyms
-are defined:
-.TS H
-lw(1.5i) lw(3i).
-_
-.sp 6p
-Type Meaning
-.sp 6p
-_
-.sp 6p
-.TH
-Key T{
-.PN KeyPress
-T}
-KeyDown T{
-.PN KeyPress
-T}
-KeyUp T{
-.PN KeyRelease
-T}
-BtnDown T{
-.PN ButtonPress
-T}
-BtnUp T{
-.PN ButtonRelease
-T}
-Motion T{
-.PN MotionNotify
-T}
-PtrMoved T{
-.PN MotionNotify
-T}
-MouseMoved T{
-.PN MotionNotify
-T}
-Enter T{
-.PN EnterNotify
-T}
-EnterWindow T{
-.PN EnterNotify
-T}
-Leave T{
-.PN LeaveNotify
-T}
-LeaveWindow T{
-.PN LeaveNotify
-T}
-FocusIn T{
-.PN FocusIn
-T}
-FocusOut T{
-.PN FocusOut
-T}
-Keymap T{
-.PN KeymapNotify
-T}
-Expose T{
-.PN Expose
-T}
-GrExp T{
-.PN GraphicsExpose
-T}
-NoExp T{
-.PN NoExpose
-T}
-Visible T{
-.PN VisibilityNotify
-T}
-Create T{
-.PN CreateNotify
-T}
-Destroy T{
-.PN DestroyNotify
-T}
-Unmap T{
-.PN UnmapNotify
-T}
-Map T{
-.PN MapNotify
-T}
-MapReq T{
-.PN MapRequest
-T}
-Reparent T{
-.PN ReparentNotify
-T}
-Configure T{
-.PN ConfigureNotify
-T}
-ConfigureReq T{
-.PN ConfigureRequest
-T}
-Grav T{
-.PN GravityNotify
-T}
-ResReq T{
-.PN ResizeRequest
-T}
-Circ T{
-.PN CirculateNotify
-T}
-CircReq T{
-.PN CirculateRequest
-T}
-Prop T{
-.PN PropertyNotify
-T}
-SelClr T{
-.PN SelectionClear
-T}
-SelReq T{
-.PN SelectionRequest
-T}
-Select T{
-.PN SelectionNotify
-T}
-Clrmap T{
-.PN ColormapNotify
-T}
-Message T{
-.PN ClientMessage
-T}
-Mapping T{
-.PN MappingNotify
-T}
-.sp 6p
-_
-.TE
-The supported abbreviations are:
-.TS H
-lw(1.5i) lw(1.25i) lw(1.75i).
-_
-.sp 6p
-Abbreviation Event Type Including
-.sp 6p
-_
-.sp 6p
-.TH
-.R
-Ctrl T{
-.PN KeyPress
-T} with Control modifier
-Meta T{
-.PN KeyPress
-T} with Meta modifier
-Shift T{
-.PN KeyPress
-T} with Shift modifier
-Btn1Down T{
-.PN ButtonPress
-T} with Button1 detail
-Btn1Up T{
-.PN ButtonRelease
-T} with Button1 detail
-Btn2Down T{
-.PN ButtonPress
-T} with Button2 detail
-Btn2Up T{
-.PN ButtonRelease
-T} with Button2 detail
-Btn3Down T{
-.PN ButtonPress
-T} with Button3 detail
-Btn3Up T{
-.PN ButtonRelease
-T} with Button3 detail
-Btn4Down T{
-.PN ButtonPress
-T} with Button4 detail
-Btn4Up T{
-.PN ButtonRelease
-T} with Button4 detail
-Btn5Down T{
-.PN ButtonPress
-T} with Button5 detail
-Btn5Up T{
-.PN ButtonRelease
-T} with Button5 detail
-BtnMotion T{
-.PN MotionNotify
-T} with any button modifier
-Btn1Motion T{
-.PN MotionNotify
-T} with Button1 modifier
-Btn2Motion T{
-.PN MotionNotify
-T} with Button2 modifier
-Btn3Motion T{
-.PN MotionNotify
-T} with Button3 modifier
-Btn4Motion T{
-.PN MotionNotify
-T} with Button4 modifier
-Btn5Motion T{
-.PN MotionNotify
-T} with Button5 modifier
-.sp 6p
-_
-.TE
-.sp
-.LP
-The detail field is event-specific and normally corresponds to the
-detail field of the corresponding event as described
-by \fI\*(xP\fP, Section 11. The detail field is supported
-for the following event types:
-.LP
-.TS H
-l l .
-_
-.sp 6p
-Event Event Field
-.sp 6p
-_
-.TH
-.sp 6p
-KeyPress KeySym from event \fIdetail\fP (keycode)
-KeyRelease KeySym from event \fIdetail\fP (keycode)
-ButtonPress button from event \fIdetail\fP
-ButtonRelease button from event \fIdetail\fP
-MotionNotify event \fIdetail\fP
-EnterNotify event \fImode\fP
-LeaveNotify event \fImode\fP
-FocusIn event \fImode\fP
-FocusOut event \fImode\fP
-PropertyNotify \fIatom\fP
-SelectionClear \fIselection\fP
-SelectionRequest \fIselection\fP
-SelectionNotify \fIselection\fP
-ClientMessage \fItype\fP
-MappingNotify \fIrequest\fP
-.sp 6p
-_
-.TE
-.LP
-If the event type is
-.PN KeyPress
-or
-.PN KeyRelease ,
-the detail field
-specifies a KeySym name in standard format which is matched against
-the event as described above, for example, <Key>A.
-.LP
-For the
-.PN PropertyNotify ,
-.PN SelectionClear ,
-.PN SelectionRequest ,
-.PN SelectionNotify ,
-and
-.PN ClientMessage
-events the detail field is specified
-as an atom name; for example, <Message>WM_PROTOCOLS. For the
-.PN MotionNotify ,
-.PN EnterNotify ,
-.PN LeaveNotify ,
-.PN FocusIn ,
-.PN FocusOut ,
-and
-.PN MappingNotify
-events, either the symbolic constants as defined by
-\fI\*(xP\fP, Section 11,
-or the numeric values may be specified.
-.LP
-If no detail field is specified, then any value in the event detail is
-accepted as a match.
-.LP
-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
-.Pn < X11/keysymdef.h >
-with the ``XK_'' prefix removed.
-.LP
-.SH
-Canonical Representation
-.LP
-Every translation table has a unique, canonical text representation. This
-representation is passed to a widget's
-.PN display_accelerator
-procedure to describe the accelerators installed on that widget.
-The canonical representation of a translation table is (see also
-``Syntax'')
-.TS
-l l .
-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 = ``\\\\"''
-.TE
-.LP
-The canonical modifier names are
-.LP
-.Ds
-.TA 1i 2.5i
-.ta 1i 2.5i
-Ctrl Mod1 Button1
-Shift Mod2 Button2
-Lock Mod3 Button3
- Mod4 Button4
- Mod5 Button5
-.De
-.LP
-The canonical event types are
-.IP
-.TS
-l l.
-T{
-.PN KeyPress
-T} T{
-.PN KeyRelease
-T}
-T{
-.PN ButtonPress
-T} T{
-.PN ButtonRelease
-T}
-T{
-.PN MotionNotify
-T} T{
-.PN EnterNotify
-T}
-T{
-.PN LeaveNotify
-T} T{
-.PN FocusIn
-T}
-T{
-.PN FocusOut
-T} T{
-.PN KeymapNotify
-T}
-T{
-.PN Expose
-T} T{
-.PN GraphicsExpose,
-T}
-T{
-.PN NoExpose
-T} T{
-.PN VisibilityNotify
-T}
-T{
-.PN CreateNotify
-T} T{
-.PN DestroyNotify
-T}
-T{
-.PN UnmapNotify
-T} T{
-.PN MapNotify
-T}
-T{
-.PN MapRequest
-T} T{
-.PN ReparentNotify
-T}
-T{
-.PN ConfigureNotify
-T} T{
-.PN ConfigureRequest
-T}
-T{
-.PN GravityNotify
-T} T{
-.PN ResizeRequest
-T}
-T{
-.PN CirculateNotify
-T} T{
-.PN CirculateRequest
-T}
-T{
-.PN PropertyNotify
-T} T{
-.PN SelectionClear
-T}
-T{
-.PN SelectionRequest
-T} T{
-.PN SelectionNotify
-T}
-T{
-.PN ColormapNotify
-T} T{
-.PN ClientMessage
-T}
-.TE
-.LP
-
-.SH
-Examples
-.LP
-.IP \(bu 5
-Always put more specific events in the table before more general ones:
-.LP
-.Ds
-Shift <Btn1Down> : twas()\\n\\
-<Btn1Down> : brillig()
-.De
-.LP
-.IP \(bu 5
-For double-click on Button1 Up with Shift, use this specification:
-.IP
-.Ds
-Shift<Btn1Up>(2) : and()
-.DE
-.IP
-This is equivalent to the following line with appropriate timers set
-between events:
-.IP
-.Ds
-Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down>,Shift<Btn1Up> : and()
-.De
-.IP \(bu 5
-For double-click on Button1 Down with Shift, use this specification:
-.IP
-.Ds
-Shift<Btn1Down>(2) : the()
-.De
-.IP
-This is equivalent to the following line with appropriate timers set
-between events:
-.IP
-.Ds
-Shift<Btn1Down>,Shift<Btn1Up>,Shift<Btn1Down> : the()
-.De
-.IP \(bu 5
-Mouse motion is always discarded when it occurs between events in a table
-where no motion event is specified:
-.IP
-.Ds
-<Btn1Down>,<Btn1Up> : slithy()
-.De
-.IP
-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.
-.IP \(bu 5
-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:
-.IP
-.Ds
-<Btn1Down>,<Btn1Up> : toves()\\n\\
-<Btn1Up> : did()
-.De
-.IP
-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.
-.IP \(bu 5
-For single click on Button1 Up with Shift and Meta, use this specification:
-.IP
-.Ds
-Shift Meta <Btn1Down>, Shift Meta<Btn1Up>: gyre()
-.De
-.IP \(bu 5
-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 \fIcount\fP-th click and each subsequent one arriving
-within the multi-click time interval. For example:
-.IP
-.Ds
-Shift <Btn1Up>(2+) : and()
-.De
-.IP \(bu 5
-To indicate
-.PN EnterNotify
-with any modifiers, use this specification:
-.IP
-.Ds
-<Enter> : gimble()
-.De
-.IP \(bu 5
-To indicate
-.PN EnterNotify
-with no modifiers, use this specification:
-.IP
-.Ds
-None <Enter> : in()
-.De
-.IP \(bu 5
-To indicate
-.PN EnterNotify
-with Button1 Down and Button2 Up and ``don't care'' about
-the other modifiers, use this specification:
-.IP
-.Ds
-Button1 ~Button2 <Enter> : the()
-.De
-.IP \(bu 5
-To indicate
-.PN EnterNotify
-with Button1 down and Button2 down exclusively, use this specification:
-.IP
-.Ds
-! Button1 Button2 <Enter> : wabe()
-.De
-.IP
-You do not need to use a tilde (~) with an exclamation point (!).
diff --git a/libXt/specs/appB.xml b/libXt/specs/appB.xml
new file mode 100644
index 000000000..0afac11e0
--- /dev/null
+++ b/libXt/specs/appB.xml
@@ -0,0 +1,1181 @@
+<appendix id='Translation_Table_Syntax'>
+<title>Translation Table Syntax</title>
+<para><emphasis role='strong'>Notation</emphasis></para>
+
+<para>
+Syntax is specified in EBNF notation with the following conventions:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='0.1*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>[ a ]</entry>
+ <entry>Means either nothing or "a"</entry>
+ </row>
+ <row>
+ <entry>{ a }</entry>
+ <entry>Means zero or more occurrences of "a"</entry>
+ </row>
+ <row>
+ <entry>( a | b )</entry>
+ <entry>Means either "a" or "b"</entry>
+ </row>
+ <row>
+ <entry>\\n</entry>
+ <entry>Is the newline character</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+All terminals are enclosed in double quotation marks (" ").
+Informal descriptions are enclosed in angle brackets (&lt; &gt;).
+Syntax
+</para>
+
+<para>The syntax of a translation table is</para>
+<informaltable frame='none'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='0.2*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>translationTable</entry>
+ <entry>= [ directive ] { production }</entry>
+ </row>
+ <row>
+ <entry>directive</entry>
+ <entry>= ( "#replace" | "#override" | "#augment" ) "\\\\n"</entry>
+ </row>
+ <row>
+ <entry>production</entry>
+ <entry>= lhs ":" rhs "\\\\n"</entry>
+ </row>
+ <row>
+ <entry>lhs</entry>
+ <entry>= ( event | keyseq ) { "," (event | keyseq) }</entry>
+ </row>
+ <row>
+ <entry>keyseq</entry>
+ <entry>= """ keychar {keychar} """</entry>
+ </row>
+ <row>
+ <entry>keychar</entry>
+ <entry>= [ "^" | "$" | "\\\\" ] &lt;ISO Latin 1 character&gt;</entry>
+ </row>
+ <row>
+ <entry>event</entry>
+ <entry>= [modifier_list] "&lt;"event_type"&gt;" [ "(" count["+"] ")" ] {detail}</entry>
+ </row>
+ <row>
+ <entry>modifier_list</entry>
+ <entry>= ( ["!"] [":"] {modifier} ) | "None"</entry>
+ </row>
+ <row>
+ <entry>modifier</entry>
+ <entry>= ["~"] modifier_name</entry>
+ </row>
+ <row>
+ <entry>count</entry>
+ <entry>= ("1" | "2" | "3" | "4" | ...)</entry>
+ </row>
+ <row>
+ <entry>modifier_name</entry>
+ <entry>= "@" &lt;keysym&gt; | &lt;see ModifierNames table below&gt;</entry>
+ </row>
+ <row>
+ <entry>event_type</entry>
+ <entry>= &lt;see Event Types table below&gt;</entry>
+ </row>
+ <row>
+ <entry>detail</entry>
+ <entry>= &lt;event specific details&gt;</entry>
+ </row>
+ <row>
+ <entry>rhs</entry>
+ <entry>= { name "(" [params] ")" }</entry>
+ </row>
+ <row>
+ <entry>name</entry>
+ <entry>= namechar { namechar }</entry>
+ </row>
+ <row>
+ <entry>namechar</entry>
+ <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" }</entry>
+ </row>
+ <row>
+ <entry>params</entry>
+ <entry>= string {"," string}</entry>
+ </row>
+ <row>
+ <entry>string</entry>
+ <entry>= quoted_string | unquoted_string</entry>
+ </row>
+ <row>
+ <entry>quoted_string</entry>
+ <entry>= <quote>"</quote> {&lt;Latin 1 character&gt; | escape_char} ["\\\\" ] <quote>"</quote></entry>
+ </row>
+ <row>
+ <entry>escape_char</entry>
+ <entry>= "\\""</entry>
+ </row>
+ <row>
+ <entry>unquoted_string</entry>
+ <entry>= {&lt;Latin 1 character except space, tab, ",", "\\n", ")"&gt;}</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The <emphasis remap='I'>params</emphasis> field is parsed into a list of
+<function>String</function>
+values that will be passed to the named action procedure. A
+<emphasis remap='I'>quoted string</emphasis> 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".
+</para>
+<para><emphasis role='strong'>Modifier Names</emphasis></para>
+
+<para>
+The modifier field is used to specify standard X keyboard and button
+modifier mask bits.
+Modifiers are legal on event types
+<function>KeyPress</function>,
+<function>KeyRelease</function>,
+<function>ButtonPress</function>,
+<function>ButtonRelease</function>,
+<function>MotionNotify</function>,
+<function>EnterNotify</function>,
+<function>LeaveNotify</function>,
+and their abbreviations.
+An error is generated when a translation table
+that contains modifiers for any other events is parsed.
+</para>
+
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+If the modifier list has no entries and is not "None",
+it means "don't care" on all modifiers.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If a modifier is preceded by a tilde (~),
+it means that that modifier must not be asserted.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If "None" is specified, it means no modifiers can be asserted.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>X Window
+System Protocol</emphasis>, 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, ":&lt;Key&gt;a" is distinct from ":&lt;Key&gt;A",
+and ":Shift&lt;Key&gt;A" is distinct from ":&lt;Key&gt;A".
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If a colon (:) is not specified,
+no standard modifiers are applied.
+Then, for example, "&lt;Key&gt;A" and "&lt;Key&gt;a" are equivalent.
+ </para>
+ </listitem>
+</itemizedlist>
+
+<para>
+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:
+</para>
+
+<literallayout >
+No modifiers: None &lt;event&gt; detail
+Any modifiers: &lt;event&gt; detail
+Only these modifiers: ! mod1 mod2 &lt;event&gt; detail
+These modifiers and any others: mod1 mod2 &lt;event&gt; detail
+</literallayout>
+
+<para>
+The use of "None" for a modifier list is identical to the use
+of an exclamation point with no modifers.
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Modifier</entry>
+ <entry>Abbreviation</entry>
+ <entry>Meaning</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>Ctrl</entry>
+ <entry>c</entry>
+ <entry>Control modifier bit</entry>
+ </row>
+ <row>
+ <entry>Shift</entry>
+ <entry>s</entry>
+ <entry>Shift modifier bit</entry>
+ </row>
+ <row>
+ <entry>Lock</entry>
+ <entry>l</entry>
+ <entry>Lock modifier bit</entry>
+ </row>
+ <row>
+ <entry>Meta</entry>
+ <entry>m</entry>
+ <entry>Meta key modifier</entry>
+ </row>
+ <row>
+ <entry>Hyper</entry>
+ <entry>h</entry>
+ <entry>Hyper key modifier</entry>
+ </row>
+ <row>
+ <entry>Super</entry>
+ <entry>su</entry>
+ <entry>Super key modifier</entry>
+ </row>
+ <row>
+ <entry>Alt</entry>
+ <entry>a</entry>
+ <entry>Alt key modifier</entry>
+ </row>
+ <row>
+ <entry>Mod1</entry>
+ <entry></entry>
+ <entry>Mod1 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Mod2</entry>
+ <entry></entry>
+ <entry>Mod2 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Mod3</entry>
+ <entry></entry>
+ <entry>Mod3 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Mod4</entry>
+ <entry></entry>
+ <entry>Mod4 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Mod5</entry>
+ <entry></entry>
+ <entry>Mod5 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Button1</entry>
+ <entry></entry>
+ <entry>Button1 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Button2</entry>
+ <entry></entry>
+ <entry>Button2 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Button3</entry>
+ <entry></entry>
+ <entry>Button3 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Button4</entry>
+ <entry></entry>
+ <entry>Button4 modifier bit</entry>
+ </row>
+ <row>
+ <entry>Button5</entry>
+ <entry></entry>
+ <entry>Button5 modifier bit</entry>
+ </row>
+ <row>
+ <entry>None</entry>
+ <entry></entry>
+ <entry>No modifiers</entry>
+ </row>
+ <row>
+ <entry>Any</entry>
+ <entry></entry>
+ <entry>Any modifier combination</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+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.
+</para>
+
+<para>
+Because it is possible to associate arbitrary KeySyms with modifiers, the set of
+key modifiers is extensible. The "@" &lt;keysym&gt; syntax means any
+modifier bit whose corresponding KeyCode contains the specified KeySym name.
+</para>
+
+<para>
+A modifier_list/KeySym combination in a translation matches a
+modifiers/KeyCode combination in an event in the following ways:
+</para>
+
+<orderedlist>
+ <listitem>
+ <para>
+If a colon (:) is used, the Intrinsics call the display's
+<xref linkend='XtKeyProc' xrefstyle='select: title'/>
+with the KeyCode and modifiers.
+To match, (<emphasis remap='I'>modifiers</emphasis> &amp; ~<emphasis remap='I'>modifiers_return</emphasis>) must equal <emphasis remap='I'>modifier_list</emphasis>, and
+<emphasis remap='I'>keysym_return</emphasis> must equal the given KeySym.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If (:) is not used, the Intrinsics mask off all don't-care bits from the
+modifiers.
+This value must be equal to <emphasis remap='I'>modifier_list</emphasis>.
+Then, for each possible combination of
+don't-care modifiers in the modifier list, the Intrinsics call the display's
+<xref linkend='XtKeyProc' xrefstyle='select: title'/>
+with the KeyCode and that combination ORed with the cared-about modifier bits
+from the event.
+<emphasis remap='I'>Keysym_return</emphasis> must match the KeySym in the translation.
+ </para>
+ </listitem>
+</orderedlist>
+
+<para><emphasis role='strong'>Event Types</emphasis></para>
+
+<para>
+The event-type field describes XEvent types.
+In addition to the standard
+Xlib symbolic event type names, the following event type synonyms
+are defined:
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Type</entry>
+ <entry>Meaning</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>Key</entry>
+ <entry><function>KeyPress</function></entry>
+ </row>
+ <row>
+ <entry>KeyDown</entry>
+ <entry><function>KeyPress</function></entry>
+ </row>
+ <row>
+ <entry>KeyUp</entry>
+ <entry><function>KeyRelease</function></entry>
+ </row>
+ <row>
+ <entry>BtnDown</entry>
+ <entry><function>ButtonPress</function></entry>
+ </row>
+ <row>
+ <entry>BtnUp</entry>
+ <entry><function>ButtonRelease</function></entry>
+ </row>
+ <row>
+ <entry>Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ </row>
+ <row>
+ <entry>PtrMoved</entry>
+ <entry><function>MotionNotify</function></entry>
+ </row>
+ <row>
+ <entry>MouseMoved</entry>
+ <entry><function>MotionNotify</function></entry>
+ </row>
+ <row>
+ <entry>Enter</entry>
+ <entry><function>EnterNotify</function></entry>
+ </row>
+ <row>
+ <entry>EnterWindow</entry>
+ <entry><function>EnterNotify</function></entry>
+ </row>
+ <row>
+ <entry>Leave</entry>
+ <entry><function>LeaveNotify</function></entry>
+ </row>
+ <row>
+ <entry>LeaveWindow</entry>
+ <entry><function>LeaveNotify</function></entry>
+ </row>
+ <row>
+ <entry>FocusIn</entry>
+ <entry><function>FocusIn</function></entry>
+ </row>
+ <row>
+ <entry>FocusOut</entry>
+ <entry><function>FocusOut</function></entry>
+ </row>
+ <row>
+ <entry>Keymap</entry>
+ <entry><function>KeymapNotify</function></entry>
+ </row>
+ <row>
+ <entry>Expose</entry>
+ <entry><function>Expose</function></entry>
+ </row>
+ <row>
+ <entry>GrExp</entry>
+ <entry><function>GraphicsExpose</function></entry>
+ </row>
+ <row>
+ <entry>NoExp</entry>
+ <entry><function>NoExpose</function></entry>
+ </row>
+ <row>
+ <entry>Visible</entry>
+ <entry><function>VisibilityNotify</function></entry>
+ </row>
+ <row>
+ <entry>Create</entry>
+ <entry><function>CreateNotify</function></entry>
+ </row>
+ <row>
+ <entry>Destroy</entry>
+ <entry><function>DestroyNotify</function></entry>
+ </row>
+ <row>
+ <entry>Unmap</entry>
+ <entry><function>UnmapNotify</function></entry>
+ </row>
+ <row>
+ <entry>Map</entry>
+ <entry><function>MapNotify</function></entry>
+ </row>
+ <row>
+ <entry>MapReq</entry>
+ <entry><function>MapRequest</function></entry>
+ </row>
+ <row>
+ <entry>Reparent</entry>
+ <entry><function>ReparentNotify</function></entry>
+ </row>
+ <row>
+ <entry>Configure</entry>
+ <entry><function>ConfigureNotify</function></entry>
+ </row>
+ <row>
+ <entry>ConfigureReq</entry>
+ <entry><function>ConfigureRequest</function></entry>
+ </row>
+ <row>
+ <entry>Grav</entry>
+ <entry><function>GravityNotify</function></entry>
+ </row>
+ <row>
+ <entry>ResReq</entry>
+ <entry><function>ResizeRequest</function></entry>
+ </row>
+ <row>
+ <entry>Circ</entry>
+ <entry><function>CirculateNotify</function></entry>
+ </row>
+ <row>
+ <entry>CircReq</entry>
+ <entry><function>CirculateRequest</function></entry>
+ </row>
+ <row>
+ <entry>Prop</entry>
+ <entry><function>PropertyNotify</function></entry>
+ </row>
+ <row>
+ <entry>SelClr</entry>
+ <entry><function>SelectionClear</function></entry>
+ </row>
+ <row>
+ <entry>SelReq</entry>
+ <entry><function>SelectionRequest</function></entry>
+ </row>
+ <row>
+ <entry>Select</entry>
+ <entry><function>SelectionNotify</function></entry>
+ </row>
+ <row>
+ <entry>Clrmap</entry>
+ <entry><function>ColormapNotify</function></entry>
+ </row>
+ <row>
+ <entry>Message</entry>
+ <entry><function>ClientMessage</function></entry>
+ </row>
+ <row>
+ <entry>Mapping</entry>
+ <entry><function>MappingNotify</function></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>The supported abbreviations are:</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Abbreviation</entry>
+ <entry>Event Type</entry>
+ <entry>Including</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>Ctrl</entry>
+ <entry><function>KeyPress</function></entry>
+ <entry>with Control modifier</entry>
+ </row>
+ <row>
+ <entry>Meta</entry>
+ <entry><function>KeyPress</function></entry>
+ <entry>with Meta modifier</entry>
+ </row>
+ <row>
+ <entry>Shift</entry>
+ <entry><function>KeyPress</function></entry>
+ <entry>with Shift modifier</entry>
+ </row>
+ <row>
+ <entry>Btn1Down</entry>
+ <entry><function>ButtonPress</function></entry>
+ <entry>with Button1 detail</entry>
+ </row>
+ <row>
+ <entry>Btn1Up</entry>
+ <entry><function>ButtonRelease</function></entry>
+ <entry>with Button1 detail</entry>
+ </row>
+ <row>
+ <entry>Btn2Down</entry>
+ <entry><function>ButtonPress</function></entry>
+ <entry>with Button2 detail</entry>
+ </row>
+ <row>
+ <entry>Btn2Up</entry>
+ <entry><function>ButtonRelease</function></entry>
+ <entry>with Button2 detail</entry>
+ </row>
+ <row>
+ <entry>Btn3Down</entry>
+ <entry><function>ButtonPress</function></entry>
+ <entry>with Button3 detail</entry>
+ </row>
+ <row>
+ <entry>Btn3Up</entry>
+ <entry><function>ButtonRelease</function></entry>
+ <entry>with Button3 detail</entry>
+ </row>
+ <row>
+ <entry>Btn4Down</entry>
+ <entry><function>ButtonPress</function></entry>
+ <entry>with Button4 detail</entry>
+ </row>
+ <row>
+ <entry>Btn4Up</entry>
+ <entry><function>ButtonRelease</function></entry>
+ <entry>with Button4 detail</entry>
+ </row>
+ <row>
+ <entry>Btn5Down</entry>
+ <entry><function>ButtonPress</function></entry>
+ <entry>with Button5 detail</entry>
+ </row>
+ <row>
+ <entry>Btn5Up</entry>
+ <entry><function>ButtonRelease</function></entry>
+ <entry>with Button5 detail</entry>
+ </row>
+ <row>
+ <entry>BtnMotion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with any button modifier</entry>
+ </row>
+ <row>
+ <entry>Btn1Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with Button1 modifier</entry>
+ </row>
+ <row>
+ <entry>Btn2Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with Button2 modifier</entry>
+ </row>
+ <row>
+ <entry>Btn3Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with Button3 modifier</entry>
+ </row>
+ <row>
+ <entry>Btn4Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with Button4 modifier</entry>
+ </row>
+ <row>
+ <entry>Btn5Motion</entry>
+ <entry><function>MotionNotify</function></entry>
+ <entry>with Button5 modifier</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The detail field is event-specific and normally corresponds to the
+detail field of the corresponding event as described
+by <emphasis remap='I'>X Window System Protocol</emphasis>, Section 11.
+The detail field is supported for the following event types:
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='0.5*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>KeyPress</entry>
+ <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry>
+ </row>
+ <row>
+ <entry>KeyRelease</entry>
+ <entry>KeySym from event <emphasis>detail</emphasis> (keycode)</entry>
+ </row>
+ <row>
+ <entry>ButtonPress</entry>
+ <entry>button from event <emphasis>detail</emphasis></entry>
+ </row>
+ <row>
+ <entry>ButtonRelease</entry>
+ <entry>button from event <emphasis>detail</emphasis></entry>
+ </row>
+ <row>
+ <entry>MotionNotify</entry>
+ <entry>event <emphasis>detail</emphasis></entry>
+ </row>
+ <row>
+ <entry>EnterNotify</entry>
+ <entry>event <emphasis>mode</emphasis></entry>
+ </row>
+ <row>
+ <entry>LeaveNotify</entry>
+ <entry>event <emphasis>mode</emphasis></entry>
+ </row>
+ <row>
+ <entry>FocusIn</entry>
+ <entry>event <emphasis>mode</emphasis></entry>
+ </row>
+ <row>
+ <entry>FocusOut</entry>
+ <entry>event <emphasis>mode</emphasis></entry>
+ </row>
+ <row>
+ <entry>PropertyNotify</entry>
+ <entry><emphasis>atom</emphasis></entry>
+ </row>
+ <row>
+ <entry>SelectionClear</entry>
+ <entry><emphasis>selection</emphasis></entry>
+ </row>
+ <row>
+ <entry>SelectionRequest</entry>
+ <entry><emphasis>selection</emphasis></entry>
+ </row>
+ <row>
+ <entry>SelectionNotify</entry>
+ <entry><emphasis>selection</emphasis></entry>
+ </row>
+ <row>
+ <entry>ClientMessage</entry>
+ <entry><emphasis>type</emphasis></entry>
+ </row>
+ <row>
+ <entry>MappingNotify</entry>
+ <entry><emphasis>request</emphasis></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+If the event type is
+<function>KeyPress</function>
+or
+<function>KeyRelease</function>,
+the detail field
+specifies a KeySym name in standard format which is matched against
+the event as described above, for example, &lt;Key&gt;A.
+</para>
+
+<para>
+For the
+<function>PropertyNotify</function>,
+<function>SelectionClear</function>,
+<function>SelectionRequest</function>,
+<function>SelectionNotify</function>,
+and
+<function>ClientMessage</function>
+events the detail field is specified
+as an atom name; for example, &lt;Message&gt;WM_PROTOCOLS. For the
+<function>MotionNotify</function>,
+<function>EnterNotify</function>,
+<function>LeaveNotify</function>,
+<function>FocusIn</function>,
+<function>FocusOut</function>,
+and
+<function>MappingNotify</function>
+events, either the symbolic constants as defined by
+<emphasis remap='I'>X Window
+System Protocol</emphasis>, Section 11,
+or the numeric values may be specified.
+</para>
+
+<para>
+If no detail field is specified, then any value in the event detail is
+accepted as a match.
+</para>
+
+<para>
+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
+<function>&lt;X11/keysymdef.h&gt;</function>
+with the "XK_" prefix removed.
+</para>
+
+<para><emphasis role='strong'>Canonical Representation</emphasis></para>
+
+<para>
+Every translation table has a unique, canonical text representation. This
+representation is passed to a widget's
+<function>display_accelerator</function>
+procedure to describe the accelerators installed on that widget.
+The canonical representation of a translation table is (see also
+"Syntax")
+</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='0.2*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>translationTable</entry>
+ <entry>= { production }
+ </entry>
+ </row>
+ <row>
+ <entry>production</entry>
+ <entry>= lhs ":" rhs "\\n"
+ </entry>
+ </row>
+ <row>
+ <entry>lhs</entry>
+ <entry>=event { "," event }
+ </entry>
+ </row>
+ <row>
+ <entry>event</entry>
+ <entry>=[modifier_list] "&lt;"event_type"&gt;" [ "(" count["+"] ")" ] {detail}
+ </entry>
+ </row>
+ <row>
+ <entry>modifier_list</entry>
+ <entry>= ["!"] [":"] {modifier}
+ </entry>
+ </row>
+ <row>
+ <entry>modifier</entry>
+ <entry>= ["˜"] modifier_name
+ </entry>
+ </row>
+ <row>
+ <entry>count</entry>
+ <entry>=("1" | "2" | "3" | "4" | ...)
+ </entry>
+ </row>
+ <row>
+ <entry>modifier_name</entry>
+ <entry>= "@" &lt;keysym&gt; | &lt;see canonical modifier names below&gt;
+ </entry>
+ </row>
+ <row>
+ <entry>event_type</entry>
+ <entry>= &lt;see canonical event types below&gt;
+ </entry>
+ </row>
+ <row>
+ <entry>detail</entry>
+ <entry>=&lt;event-specific details&gt;
+ </entry>
+ </row>
+ <row>
+ <entry>rhs</entry>
+ <entry>={ name "(" [params] ")" }
+ </entry>
+ </row>
+ <row>
+ <entry>name</entry>
+ <entry>=namechar { namechar }
+ </entry>
+ </row>
+ <row>
+ <entry>namechar</entry>
+ <entry>= { "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" }
+ </entry>
+ </row>
+ <row>
+ <entry>params</entry>
+ <entry>=string {"," string}
+ </entry>
+ </row>
+ <row>
+ <entry>string</entry>
+ <entry>=quoted_string
+ </entry>
+ </row>
+ <row>
+ <entry>quoted_string</entry>
+ <entry>= <quote>"</quote> {&lt;Latin 1 character&gt; | escape_char} ["\\\\" ] <quote>"</quote>
+ </entry>
+ </row>
+ <row>
+ <entry>escape_char</entry>
+ <entry>= "\\""
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>The canonical modifier names are</para>
+
+<literallayout >
+ Ctrl Mod1 Button1
+ Shift Mod2 Button2
+ Lock Mod3 Button3
+ Mod4 Button4
+ Mod5 Button5
+</literallayout>
+
+<para>The canonical event types are</para>
+
+<informaltable frame='none'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <tbody>
+ <row>
+ <entry>KeyPress</entry>
+ <entry>KeyRelease</entry>
+ </row>
+ <row>
+ <entry>ButtonPress</entry>
+ <entry>ButtonRelease</entry>
+ </row>
+ <row>
+ <entry>MotionNotify</entry>
+ <entry>EnterNotify</entry>
+ </row>
+ <row>
+ <entry>LeaveNotify</entry>
+ <entry>FocusIn</entry>
+ </row>
+ <row>
+ <entry>FocusOut</entry>
+ <entry>KeymapNotify</entry>
+ </row>
+ <row>
+ <entry>Expose</entry>
+ <entry>GraphicsExpose,</entry>
+ </row>
+ <row>
+ <entry>NoExpose</entry>
+ <entry>VisibilityNotify</entry>
+ </row>
+ <row>
+ <entry>CreateNotify</entry>
+ <entry>DestroyNotify</entry>
+ </row>
+ <row>
+ <entry>UnmapNotify</entry>
+ <entry>MapNotify</entry>
+ </row>
+ <row>
+ <entry>MapRequest</entry>
+ <entry>ReparentNotify</entry>
+ </row>
+ <row>
+ <entry>ConfigureNotify</entry>
+ <entry>ConfigureRequest</entry>
+ </row>
+ <row>
+ <entry>GravityNotify</entry>
+ <entry>ResizeRequest</entry>
+ </row>
+ <row>
+ <entry>CirculateNotify</entry>
+ <entry>CirculateRequest</entry>
+ </row>
+ <row>
+ <entry>PropertyNotify</entry>
+ <entry>SelectionClear</entry>
+ </row>
+ <row>
+ <entry>SelectionRequest</entry>
+ <entry>SelectionNotify</entry>
+ </row>
+ <row>
+ <entry>ColormapNotify</entry>
+ <entry>ClientMessage</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Examples</emphasis></para>
+
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Always put more specific events in the table before more general ones:
+ </para>
+<literallayout >
+ Shift &lt;Btn1Down&gt; : twas()\n\
+ &lt;Btn1Down&gt; : brillig()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+For double-click on Button1 Up with Shift, use this specification:
+ </para>
+ <literallayout >
+Shift&lt;Btn1Up&gt;(2) : and()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+This is equivalent to the following line with appropriate timers set
+between events:
+ </para>
+ <literallayout >
+Shift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt;,Shift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt; : and()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+For double-click on Button1 Down with Shift, use this specification:
+ </para>
+ <literallayout >
+Shift&lt;Btn1Down&gt;(2) : the()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+This is equivalent to the following line with appropriate timers set
+between events:
+ </para>
+ <literallayout >
+Shift&lt;Btn1Down&gt;,Shift&lt;Btn1Up&gt;,Shift&lt;Btn1Down&gt; : the()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+Mouse motion is always discarded when it occurs between events in a table
+where no motion event is specified:
+ </para>
+ <literallayout >
+&lt;Btn1Down&gt;,&lt;Btn1Up&gt; : slithy()
+</literallayout>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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:
+ </para>
+ <literallayout >
+&lt;Btn1Down&gt;,&lt;Btn1Up&gt; : toves()\n\
+&lt;Btn1Up&gt; : did()
+</literallayout>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+For single click on Button1 Up with Shift and Meta, use this specification:
+ </para>
+ </listitem>
+ <listitem>
+ <literallayout >
+Shift Meta &lt;Btn1Down&gt;, Shift Meta&lt;Btn1Up&gt;: gyre()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+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 <emphasis remap='I'>count</emphasis>-th click and each subsequent one arriving
+within the multi-click time interval. For example:
+ </para>
+ <literallayout >
+Shift &lt;Btn1Up&gt;(2+) : and()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+To indicate
+<function>EnterNotify</function>
+with any modifiers, use this specification:
+ </para>
+ <literallayout >
+&lt;Enter&gt; : gimble()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+To indicate
+<function>EnterNotify</function>
+with no modifiers, use this specification:
+ </para>
+ <literallayout >
+None &lt;Enter&gt; : in()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+To indicate
+<function>EnterNotify</function>
+with Button1 Down and Button2 Up and "don't care" about
+the other modifiers, use this specification:
+ </para>
+ <literallayout >
+Button1 ~Button2 &lt;Enter&gt; : the()
+</literallayout>
+ </listitem>
+ <listitem>
+ <para>
+To indicate
+<function>EnterNotify</function>
+with Button1 down and Button2 down exclusively, use this specification:
+ </para>
+ <literallayout >
+! Button1 Button2 &lt;Enter&gt; : wabe()
+</literallayout>
+ <para>
+You do not need to use a tilde (~) with an exclamation point (!).
+ </para>
+ </listitem>
+</itemizedlist>
+</appendix>
diff --git a/libXt/specs/appC b/libXt/specs/appC
deleted file mode 100644
index 6f31fd7d5..000000000
--- a/libXt/specs/appC
+++ /dev/null
@@ -1,1204 +0,0 @@
-.\" $Xorg: appC,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix C\fP\s-1
-
-\s+1\fBCompatibility Functions\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix C \(em Compatibility Functions\fP
-.XE
-.FS
-This appendix is part of the formal Intrinsics Specification.
-.FE
-.LP
-In prototype versions of the \*(tk
-each widget class
-implemented an Xt<\^\fIWidget\fP\^>Create (for example,
-.PN XtLabelCreate )
-function, in which most of the code was identical from widget to widget.
-In the \*(xI, a single generic
-.PN XtCreateWidget
-performs most of the common work and then calls the initialize procedure
-implemented for the particular widget class.
-.LP
-Each Composite class also implemented the procedures
-Xt<\^\fIWidget\fP\^>Add and an Xt<\^\fIWidget\fP\^>Delete (for example,
-.PN XtButtonBoxAddButton
-and
-.PN XtButtonBoxDeleteButton ).
-In the \*(xI, the Composite generic procedures
-.PN XtManageChildren
-and
-.PN XtUnmanageChildren
-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.
-.LP
-Old-style calls can be implemented in the \*(tk by defining
-one-line procedures or macros that invoke a generic routine. For example,
-you could define the macro
-.PN XtLabelCreate
-as:
-.IP
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-#define XtLabelCreate(\fIname\fP, \fIparent\fP, \fIargs\fP, \fInum_args\fP) \\
- ((LabelWidget) XtCreateWidget(\fIname\fP, \fIlabelWidgetClass\fP, \
-\fIparent\fP, \fIargs\fP, \fInum_args\fP))
-.De
-.sp
-.LP
-Pop-up shells in some of the prototypes automatically performed an
-.PN XtManageChild
-on their child within their insert_child procedure.
-.IN "insert_child procedure"
-Creators of pop-up children need to call
-.PN XtManageChild
-themselves.
-.sp
-.LP
-.PN XtAppInitialize
-and
-.PN XtVaAppInitialize
-have been replaced by
-.PN XtOpenApplication
-and
-.PN XtVaOpenApplication .
-.LP
-To initialize the \*(xI internals, create an application context,
-open and initialize a display, and create the initial application shell
-instance, an application may use
-.PN XtAppInitialize
-or
-.PN XtVaAppInitialize .
-.LP
-.IN "XtAppInitialize" "" "@DEF@"
-.sM
-.FD 0
-Widget XtAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \
-\fIoptions\fP, \fInum_options\fP,
-.br
- \fIargc_in_out\fP, \fIargv_in_out\fP, \
-\fIfallback_resources\fP, \fIargs\fP, \fInum_args\fP)
-.br
- XtAppContext *\fIapp_context_return\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescList \fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc_in_out\fP;
-.br
- String *\fIargv_in_out\fP;
-.br
- String *\fIfallback_resources\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIapp_context_return\fP 1.5i
-Returns the application context, if non-NULL.
-.IP \fIapplication_class\fP 1.5i
-Specifies the class name of the application.
-.IP \fIoptions\fP 1.5i
-Specifies the command line options table.
-.IP \fInum_options\fP 1.5i
-Specifies the number of entries in \fIoptions\fP.
-.IP \fIargc_in_out\fP 1.5i
-Specifies a pointer to the number of command line arguments.
-.IP \fIargv_in_out\fP 1.5i
-Specifies a pointer to the command line arguments.
-.IP \fIfallback_resources\fP 1.5i
-Specifies resource values to be used if the application class resource
-file cannot be opened or read, or NULL.
-.IP \fIargs\fP 1.5i
-Specifies the argument list to override any
-other resource specifications for the created shell widget.
-.IP \fInum_args\fP 1.5i
-Specifies the number of entries in the argument list.
-.LP
-.eM
-The
-.PN XtAppInitialize
-function calls
-.PN XtToolkitInitialize
-followed by
-.PN XtCreateApplicationContext ,
-then calls
-.PN XtOpenDisplay
-with \fIdisplay_string\fP NULL and
-\fIapplication_name\fP NULL, and finally calls
-.PN XtAppCreateShell
-with \fIapplication_name\fP NULL, \fIwidget_class\fP
-.PN application\%Shell\%Widget\%Class ,
-and the specified \fIargs\fP and \fInum_args\fP
-and returns the created shell. The modified \fIargc\fP and \fIargv\fP returned by
-.PN 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
-.PN XtAppInitialize
-terminates the application. If \fIfallback_resources\fP is non-NULL,
-.PN XtAppSetFallbackResources
-is called with the value prior to calling
-.PN XtOpenDisplay .
-.sp
-.LP
-.IN "XtVaAppInitialize" "" "@DEF@"
-.sM
-.FD 0
-Widget XtVaAppInitialize(\fIapp_context_return\fP, \fIapplication_class\fP, \
-\fIoptions\fP, \fInum_options\fP,
-.br
- \fIargc_in_out\fP, \fIargv_in_out\fP, \
-\fIfallback_resources\fP, ...)
-.br
- XtAppContext *\fIapp_context_return\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescList \fIoptions\fP;
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc_in_out\fP;
-.br
- String *\fIargv_in_out\fP;
-.br
- String *\fIfallback_resources\fP;
-.FN
-.IP \fIapp_context_return\fP 1.5i
-Returns the application context, if non-NULL.
-.IP \fIapplication_class\fP 1.5i
-Specifies the class name of the application.
-.IP \fIoptions\fP 1.5i
-Specifies the command line options table.
-.IP \fInum_options\fP 1.5i
-Specifies the number of entries in \fIoptions\fP.
-.IP \fIargc_in_out\fP 1.5i
-Specifies a pointer to the number of command line arguments.
-.IP \fIargv_in_out\fP 1.5i
-Specifies the command line arguments array.
-.IP \fIfallback_resources\fP 1.5i
-Specifies resource values to be used if the application class
-resource file cannot be opened, or NULL.
-.IP ... 1.5i
-Specifies the variable argument list to override any other
-resource specifications for the created shell.
-.LP
-.eM
-The
-.PN XtVaAppInitialize
-procedure is identical in function to
-.PN XtAppInitialize
-with the \fIargs\fP and \fInum_args\fP parameters replaced by a varargs list,
-as described
-in Section 2.5.1.
-.sp
-.LP
-As a convenience to people converting from earlier versions of the toolkit
-without application contexts, the following routines exist:
-.PN XtInitialize ,
-.PN XtMainLoop ,
-.PN XtNextEvent ,
-.PN XtProcessEvent ,
-.PN XtPeekEvent ,
-.PN XtPending ,
-.PN XtAddInput ,
-.PN XtAddTimeOut ,
-.PN XtAddWorkProc ,
-.PN XtCreateApplicationShell ,
-.PN XtAddActions ,
-.PN XtSetSelectionTimeout ,
-and
-.PN XtGetSelectionTimeout .
-.LP
-.IN "XtInitialize" "" "@DEF@"
-.sM
-.FD 0
-Widget XtInitialize(\fIshell_name\fP, \fIapplication_class\fP, \fIoptions\fP, \
-\fInum_options\fP, \fIargc\fP, \fIargv\fP)
-.br
- String \fIshell_name\fP;
-.br
- String \fIapplication_class\fP;
-.br
- XrmOptionDescRec \fIoptions\fP[];
-.br
- Cardinal \fInum_options\fP;
-.br
- int *\fIargc\fP;
-.br
- String \fIargv\fP[];
-.FN
-.IP \fIshell_name\fP 1i
-This parameter is ignored; therefore, you can specify NULL.
-.IP \fIapplication_class\fP 1i
-Specifies the class name of this application.
-.IP \fIoptions\fP 1i
-Specifies how to parse the command line for any application-specific resources.
-The \fIoptions\fP argument is passed as a parameter to
-.PN XrmParseCommand .
-.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.
-.LP
-.eM
-.PN XtInitialize
-calls
-.PN XtToolkitInitialize
-to initialize the toolkit internals,
-creates a default application context for use by the other convenience
-routines, calls
-.PN XtOpenDisplay
-with \fIdisplay_string\fP NULL and \fIapplication_name\fP NULL, and
-finally calls
-.PN XtAppCreateShell
-with \fIapplication_name\fP NULL and
-returns the created shell.
-The semantics of calling
-.PN XtInitialize
-more than once are undefined.
-This routine has been replaced by
-.PN XtOpenApplication .
-.sp
-.IN "XtMainLoop" "" "@DEF@"
-.sM
-.FD 0
-void XtMainLoop(void)
-.FN
-.LP
-.eM
-.PN XtMainLoop
-first reads the next alternate input, timer, or X event by calling
-.PN XtNextEvent .
-Then it dispatches this to the appropriate registered procedure by calling
-.PN XtDispatchEvent .
-This routine has been replaced by
-.PN XtAppMainLoop .
-.sp
-.IN "XtNextEvent" "" "@DEF@"
-.sM
-.FD 0
-void XtNextEvent(\fIevent_return\fP)
-.br
- XEvent *\fIevent_return\fP;
-.FN
-.IP \fIevent_return\fP 1i
-Returns the event information to the specified event structure.
-.LP
-.eM
-If no input is on the X input queue for the default application context,
-.PN XtNextEvent
-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
-.PN XtAppNextEvent .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtProcessEvent" "" "@DEF@"
-.sM
-.FD 0
-void XtProcessEvent(\fImask\fP)
-.br
- XtInputMask \fImask\fP;
-.FN
-.IP \fImask\fP 1i
-Specifies the type of input to process.
-.LP
-.eM
-.PN XtProcessEvent
-processes one X event, timeout, or alternate input source
-(depending on the value of \fImask\fP), blocking if necessary.
-It has been replaced by
-.PN XtAppProcessEvent .
-.PN XtInitialize
-must be called before using this function.
-.sp
-.IN "XtPeekEvent" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtPeekEvent(\fIevent_return\fP)
-.br
- XEvent *\fIevent_return\fP;
-.FN
-.IP \fIevent_return\fP 1i
-Returns the event information to the specified event structure.
-.LP
-.eM
-If there is an event in the queue for the default application context,
-.PN XtPeekEvent
-fills in the event and returns a nonzero value.
-If no X input is on the queue,
-.PN XtPeekEvent
-flushes the output buffer and blocks until input is available, possibly
-calling some timeout callbacks in the process.
-If the input is an event,
-.PN XtPeekEvent
-fills in the event and returns a nonzero value.
-Otherwise, the input is for an alternate input source, and
-.PN XtPeekEvent
-returns zero.
-This routine has been replaced by
-.PN XtAppPeekEvent .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtPending" "" "@DEF@"
-.sM
-.FD 0
-Boolean XtPending()
-.FN
-.LP
-.eM
-.PN 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
-.PN XtAppPending .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtAddInput" "" "@DEF@"
-.sM
-.FD 0
-XtInputId XtAddInput(\fIsource\fP, \fIcondition\fP, \fIproc\fP, \
-\fIclient_data\fP)
-.br
- int \fIsource\fP;
-.br
- XtPointer \fIcondition\fP;
-.br
- XtInputCallbackProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIsource\fP 1i
-Specifies the source file descriptor on a POSIX-based system
-or other operating-system-dependent device specification.
-.IP \fIcondition\fP 1i
-Specifies the mask that indicates either a read, write, or exception condition
-or some operating-system-dependent condition.
-.IP \fIproc\fP 1i
-Specifies the procedure called when input is available.
-.IP \fIclient_data\fP 1i
-Specifies the parameter to be passed to \fIproc\fP when input is available.
-.LP
-.eM
-The
-.PN XtAddInput
-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 \fIfile\fP should be loosely interpreted to mean any sink
-or source of data.)
-.PN XtAddInput
-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
-.PN XtAppAddInput .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtAddTimeOut" "" "@DEF@"
-.sM
-.FD 0
-XtIntervalId XtAddTimeOut(\fIinterval\fP, \fIproc\fP, \fIclient_data\fP)
-.br
- unsigned long \fIinterval\fP;
-.br
- XtTimerCallbackProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIinterval\fP 1i
-Specifies the time interval in milliseconds.
-.IP \fIproc\fP 1i
-Specifies the procedure to be called when time expires.
-.IP \fIclient_data\fP 1i
-Specifies the parameter to be passed to \fIproc\fP when it is called.
-.LP
-.eM
-The
-.PN XtAddTimeOut
-function creates a timeout in the default application context
-and returns an identifier for it.
-The timeout value is set to \fIinterval\fP.
-The callback procedure will be called after
-the time interval elapses, after which the timeout is removed.
-This routine has been replaced by
-.PN XtAppAddTimeOut .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtAddWorkProc" "" "@DEF@"
-.sM
-.FD 0
-XtWorkProcId XtAddWorkProc(\fIproc\fP, \fIclient_data\fP)
-.br
- XtWorkProc \fIproc\fP;
-.br
- XtPointer \fIclient_data\fP;
-.FN
-.IP \fIproc\fP 1i
-Procedure to call to do the work.
-.IP \fIclient_data\fP 1i
-Client data to pass to \fIproc\fP when it is called.
-.LP
-.eM
-This routine registers a work procedure in the default application context. It has
-been replaced by
-.PN XtAppAddWorkProc .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.IN "XtCreateApplicationShell" "" "@DEF@"
-.sM
-.FD 0
-Widget XtCreateApplicationShell(\fIname\fP, \fIwidget_class\fP, \fIargs\fP, \
-\fInum_args\fP)
-.br
- String \fIname\fP;
-.br
- WidgetClass \fIwidget_class\fP;
-.br
- ArgList \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIname\fP 1i
-This parameter is ignored; therefore, you can specify NULL.
-.IP \fIwidget_class\fP 1i
-Specifies the widget class pointer for the created application shell widget.
-This will usually be
-.PN topLevelShellWidgetClass
-or a subclass thereof.
-.IP \fIargs\fP 1i
-Specifies the argument list to override any other resource specifications.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIargs\fP.
-.LP
-.eM
-The procedure
-.PN XtCreateApplicationShell
-calls
-.PN XtAppCreateShell
-with \fIapplication_name\fP NULL, the application class passed to
-.PN XtInitialize ,
-and the default application context created by
-.PN XtInitialize .
-This routine has been replaced by
-.PN XtAppCreateShell .
-.sp
-.LP
-An old-format resource type converter procedure pointer is of type
-.PN XtConverter .
-.LP
-.IN "XtConverter" "" "@DEF@"
-.sM
-.FD 0
-typedef void (*XtConverter)(XrmValue*, Cardinal*, XrmValue*, XrmValue*);
-.br
- XrmValue *\fIargs\fP;
-.br
- Cardinal *\fInum_args\fP;
-.br
- XrmValue *\fIfrom\fP;
-.br
- XrmValue *\fIto\fP;
-.FN
-.IP \fIargs\fP 1i
-Specifies a list of additional
-.PN XrmValue
-arguments to the converter if additional context is needed
-to perform the conversion, or NULL.
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIargs\fP.
-.IP \fIfrom\fP 1i
-Specifies the value to convert.
-.IP \fIto\fP 1i
-Specifies the descriptor to use to return the converted value.
-.LP
-.eM
-Type converters should perform the following actions:
-.IP \(bu 5
-Check to see that the number of arguments passed is correct.
-.IP \(bu 5
-Attempt the type conversion.
-.IP \(bu 5
-If successful, return the size and pointer to the data in the \fIto\fP argument;
-otherwise, call
-.PN XtWarningMsg
-and return without modifying the \fIto\fP argument.
-.LP
-Most type converters just take the data described by the specified \fIfrom\fP
-argument and return data by writing into the specified \fIto\fP 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.
-.LP
-Note that the address returned in \fIto->addr\fP 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.
-.LP
-The procedure type
-.PN XtConverter
-has been replaced by
-.PN XtTypeConverter .
-.sp
-.LP
-The
-.PN XtStringConversionWarning
-.IN "XtStringConversionWarning" "" "@DEF@"
-function is a convenience routine for old-format resource converters
-that convert from strings.
-.LP
-.sM
-.FD 0
-void XtStringConversionWarning(\fIsrc\fP, \fIdst_type\fP)
-.br
- String \fIsrc\fP, \fIdst_type\fP;
-.FN
-.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.
-.LP
-.eM
-The
-.PN 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''. This routine
-has been superseded by
-.PN XtDisplayStringConversionWarning .
-.sp
-.LP
-To register an old-format converter, use
-.PN XtAddConverter
-.IN "XtAddConverter" "" "@DEF@"
-or
-.PN XtAppAddConverter .
-.IN "XtAppAddConverter" "" "@DEF@"
-.LP
-.sM
-.FD 0
-void XtAddConverter(\fIfrom_type\fP, \fIto_type\fP, \fIconverter\fP, \
-\fIconvert_args\fP, \fInum_args\fP)
-.br
- String \fIfrom_type\fP;
-.br
- String \fIto_type\fP;
-.br
- XtConverter \fIconverter\fP;
-.br
- XtConvertArgList \fIconvert_args\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.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 \fInum_args\fP 1i
-Specifies the number of entries in \fIconvert_args\fP.
-.sp
-.LP
-.eM
-.PN XtAddConverter
-is equivalent in function to
-.PN XtSetTypeConverter
-with \fIcache_type\fP equal to
-.PN XtCacheAll
-for old-format type converters. It has been superseded by
-.PN XtSetTypeConverter .
-.sp
-.sM
-.FD 0
-void XtAppAddConverter(\fIapp_context\fP, \fIfrom_type\fP, \fIto_type\fP, \
-\fIconverter\fP, \fIconvert_args\fP, \fInum_args\fP)
-.br
- XtAppContext \fIapp_context\fP;
-.br
- String \fIfrom_type\fP;
-.br
- String \fIto_type\fP;
-.br
- XtConverter \fIconverter\fP;
-.br
- XtConvertArgList \fIconvert_args\fP;
-.br
- Cardinal \fInum_args\fP;
-.FN
-.IP \fIapp_context\fP 1i
-Specifies the application context.
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.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 \fInum_args\fP 1i
-Specifies the number of entries in \fIconvert_args\fP.
-.LP
-.eM
-.PN XtAppAddConverter
-is equivalent in function to
-.PN XtAppSetTypeConverter
-with \fIcache_type\fP equal to
-.PN XtCacheAll
-for old-format type converters. It has been superseded by
-.PN XtAppSetTypeConverter .
-.sp
-.LP
-To invoke resource conversions, a client may use
-.PN XtConvert
-or, for old-format converters only,
-.PN XtDirectConvert .
-.LP
-.IN "XtConvert" "" "@DEF@"
-.sM
-.FD 0
-void XtConvert(\fIw\fP, \fIfrom_type\fP, \fIfrom\fP, \fIto_type\fP, \
-\fIto_return\fP)
-.br
- Widget \fIw\fP;
-.br
- String \fIfrom_type\fP;
-.br
- XrmValuePtr \fIfrom\fP;
-.br
- String \fIto_type\fP;
-.br
- XrmValuePtr \fIto_return\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies the widget to use for additional arguments, if any are
-needed.
-.IP \fIfrom_type\fP 1i
-Specifies the source type.
-.IP \fIfrom\fP 1i
-Specifies the value to be converted.
-.IP \fIto_type\fP 1i
-Specifies the destination type.
-.IP \fIto_return\fP 1i
-Returns the converted value.
-.LP
-.IN "XtDirectConvert" "" "@DEF@"
-.FD 0
-void XtDirectConvert(\fIconverter\fP, \fIargs\fP, \fInum_args\fP, \fIfrom\fP, \
-\fIto_return\fP)
-.br
- XtConverter \fIconverter\fP;
-.br
- XrmValuePtr \fIargs\fP;
-.br
- Cardinal \fInum_args\fP;
-.br
- XrmValuePtr \fIfrom\fP;
-.br
- XrmValuePtr \fIto_return\fP;
-.FN
-.IP \fIconverter\fP 1i
-Specifies the conversion procedure to be called.
-.IP \fIargs\fP 1i
-Specifies the argument list that contains the additional arguments
-needed to perform the conversion (often NULL).
-.IP \fInum_args\fP 1i
-Specifies the number of entries in \fIargs\fP.
-.IP \fIfrom\fP 1i
-Specifies the value to be converted.
-.IP \fIto_return\fP 1i
-Returns the converted value.
-.LP
-.eM
-The
-.PN XtConvert
-function looks up the type converter registered to convert \fIfrom_type\fP
-to \fIto_type\fP, computes any additional arguments needed, and then calls
-.PN XtDirectConvert
-or
-.PN XtCallConverter .
-The
-.PN 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,
-.PN 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 \fIto_return.addr\fP for non-NULL.
-The data returned by
-.PN XtConvert
-must be copied immediately by the caller,
-as it may point to static data in the type converter.
-.LP
-.PN XtConvert
-has been replaced by
-.PN XtConvertAndStore ,
-and
-.PN XtDirectConvert
-has been superseded by
-.PN XtCallConverter .
-.sp
-.LP
-To deallocate a shared GC when it is no longer needed, use
-.PN XtDestroyGC .
-.LP
-.IN "XtDestroyGC" "" "@DEF@"
-.sM
-.FD 0
-void XtDestroyGC(\fIw\fP, \fIgc\fP)
-.br
- Widget \fIw\fP;
-.br
- GC \fIgc\fP;
-.FN
-.IP \fIw\fP 1i
-Specifies any object on the display for which the shared GC was
-created. \*(oI
-.IP \fIgc\fP 1i
-Specifies the shared GC to be deallocated.
-.LP
-.eM
-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
-.PN XtDestroyGC
-had only a \fIgc\fP argument.
-Therefore, this function is not very portable,
-and you are encouraged to use
-.PN XtReleaseGC
-instead.
-.sp
-.LP
-To declare an action table in the default application context
-and register it with the translation manager, use
-.PN XtAddActions .
-.LP
-.IN "XtAddActions" "" "@DEF@"
-.sM
-.FD 0
-void XtAddActions(\fIactions\fP, \fInum_actions\fP)
-.br
- XtActionList \fIactions\fP;
-.br
- Cardinal \fInum_actions\fP;
-.FN
-.IP \fIactions\fP 1i
-Specifies the action table to register.
-.IP \fInum_actions\fP 1i
-Specifies the number of entries in \fIactions\fP.
-.LP
-.eM
-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 \*(xI register an action table for
-.PN XtMenuPopup
-and
-.PN XtMenuPopdown
-as part of \*(tk initialization.
-This routine has been replaced by
-.PN XtAppAddActions .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.LP
-To set the \*(xI selection timeout in the default application context, use
-.PN XtSetSelectionTimeout .
-.LP
-.IN "XtSetSelectionTimeout" "" "@DEF@"
-.sM
-.FD 0
-void XtSetSelectionTimeout(\fItimeout\fP)
-.br
- unsigned long \fItimeout\fP;
-.FN
-.IP \fItimeout\fP 1i
-Specifies the selection timeout in milliseconds.
-This routine has been replaced by
-.PN XtAppSetSelectionTimeout .
-.PN XtInitialize
-must be called before using this routine.
-.LP
-.eM
-.sp
-.LP
-To get the current selection timeout value in the default application
-context, use
-.PN XtGetSelectionTimeout .
-.LP
-.IN "XtGetSelectionTimeout" "" "@DEF@"
-.sM
-.FD 0
-unsigned long XtGetSelectionTimeout()
-.FN
-.LP
-.eM
-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 \*(xI abort the selection request.
-.LP
-This routine has been replaced by
-.PN XtAppGetSelectionTimeout .
-.PN XtInitialize
-must be called before using this routine.
-.sp
-.LP
-To obtain the global error database (for example, to merge with
-an application- or widget-specific database), use
-.PN XtGetErrorDatabase .
-.LP
-.IN "XtGetErrorDatabase" "" "@DEF@"
-.sM
-.FD 0
-XrmDatabase *XtGetErrorDatabase()
-.FN
-.LP
-.eM
-The
-.PN XtGetErrorDatabase
-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
-.PN XtGetErrorDatbaseText .
-This routine has been replaced by
-.PN XtAppGetErrorDatabase .
-.sp
-.LP
-An error message handler can obtain the error database text for an
-error or a warning by calling
-.PN XtGetErrorDatabaseText .
-.LP
-.IN "XtGetErrorDatabaseText" "" "@DEF@"
-.sM
-.FD 0
-void XtGetErrorDatabaseText(\fIname\fP, \fItype\fP, \fIclass\fP, \
-\fIdefault\fP, \fIbuffer_return\fP, \fInbytes\fP)
-.br
- String \fIname\fP, \fItype\fP, \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String \fIbuffer_return\fP;
-.br
- int \fInbytes\fP;
-.FN
-.IP \fIname\fP 1i
-.br
-.ns
-.IP \fItype\fP 1i
-Specify the name and type that are concatenated to form the resource name
-of the error message.
-.IP \fIclass\fP 1i
-Specifies the resource class of the error message.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIbuffer_return\fP 1i
-Specifies the buffer into which the error message is to be returned.
-.IP \fInbytes\fP 1i
-Specifies the size of the buffer in bytes.
-.LP
-.eM
-The
-.PN XtGetErrorDatabaseText
-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 \fIname\fP and \fItype\fP are concatenated with a single ``.''
-between them and the \fIclass\fP is concatenated with itself with a
-single ``.'' if it does not already contain a ``.''.
-This routine has been superseded by
-.PN XtAppGetErrorDatabaseText .
-.sp
-.LP
-To register a procedure to be called on fatal error conditions, use
-.PN XtSetErrorMsgHandler .
-.LP
-.IN "XtSetErrorMsgHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtSetErrorMsgHandler(\fImsg_handler\fP)
-.br
- XtErrorMsgHandler \fImsg_handler\fP;
-.FN
-.IP \fImsg_handler\fP 1i
-Specifies the new fatal error procedure, which should not return.
-.LP
-.eM
-The default error handler provided by the \*(xI constructs a
-string from the error resource database and calls
-.PN XtError .
-Fatal error message handlers should not return.
-If one does,
-subsequent \*(xI behavior is undefined.
-This routine has been superseded by
-.PN XtAppSetErrorMsgHandler .
-.sp
-.LP
-To call the high-level error handler, use
-.PN XtErrorMsg .
-.LP
-.IN "XtErrorMsg" "" "@DEF@"
-.sM
-.FD 0
-void XtErrorMsg(\fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \
-\fIparams\fP, \fInum_params\fP)
-.br
- String \fIname\fP;
-.br
- String \fItype\fP;
-.br
- String \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the general kind of error.
-.IP \fItype\fP 1i
-Specifies the detailed name of the error.
-.IP \fIclass\fP 1i
-Specifies the resource class.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIparams\fP 1i
-Specifies a pointer to a list of values to be stored in the message.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-This routine has been superseded by
-.PN XtAppErrorMsg .
-.sp
-.LP
-To register a procedure to be called on nonfatal error conditions, use
-.PN XtSetWarningMsgHandler .
-.LP
-.IN "XtSetWarningMsgHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtSetWarningMsgHandler(\fImsg_handler\fP)
-.br
- XtErrorMsgHandler \fImsg_handler\fP;
-.FN
-.IP \fImsg_handler\fP 1i
-Specifies the new nonfatal error procedure, which usually returns.
-.LP
-.eM
-The default warning handler provided by the \*(xI constructs a string
-from the error resource database and calls
-.PN XtWarning .
-This routine has been superseded by
-.PN XtAppSetWarningMsgHandler .
-.sp
-.LP
-To call the installed high-level warning handler, use
-.PN XtWarningMsg .
-.LP
-.IN "XtWarningMsg" "" "@DEF@"
-.sM
-.FD 0
-void XtWarningMsg(\fIname\fP, \fItype\fP, \fIclass\fP, \fIdefault\fP, \
-\fIparams\fP, \fInum_params\fP)
-.br
- String \fIname\fP;
-.br
- String \fItype\fP;
-.br
- String \fIclass\fP;
-.br
- String \fIdefault\fP;
-.br
- String *\fIparams\fP;
-.br
- Cardinal *\fInum_params\fP;
-.FN
-.IP \fIname\fP 1i
-Specifies the general kind of error.
-.IP \fItype\fP 1i
-Specifies the detailed name of the error.
-.IP \fIclass\fP 1i
-Specifies the resource class.
-.IP \fIdefault\fP 1i
-Specifies the default message to use if an error database entry is not found.
-.IP \fIparams\fP 1i
-Specifies a pointer to a list of values to be stored in the message.
-.IP \fInum_params\fP 1i
-Specifies the number of entries in \fIparams\fP.
-.LP
-.eM
-This routine has been superseded by
-.PN XtAppWarningMsg .
-.sp
-.LP
-To register a procedure to be called on fatal error conditions, use
-.PN XtSetErrorHandler .
-.LP
-.IN "XtSetErrorHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtSetErrorHandler(\fIhandler\fP)
-.br
- XtErrorHandler \fIhandler\fP;
-.FN
-.IP \fIhandler\fP 1i
-Specifies the new fatal error procedure, which should not return.
-.LP
-.eM
-The default error handler provided by the \*(xI is
-.PN _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 \*(tk behavior is undefined.
-This routine has been superseded by
-.PN XtAppSetErrorHandler .
-.sp
-.LP
-To call the installed fatal error procedure, use
-.PN XtError .
-.LP
-.IN "XtError" "" "@DEF@"
-.sM
-.FD 0
-void XtError(\fImessage\fP)
-.br
- String \fImessage\fP;
-.FN
-.IP \fImessage\fP 1i
-Specifies the message to be reported.
-.LP
-.eM
-Most programs should use
-.PN XtAppErrorMsg ,
-not
-.PN XtError ,
-to provide for customization and internationalization of error
-messages. This routine has been superseded by
-.PN XtAppError .
-.sp
-.LP
-To register a procedure to be called on nonfatal error conditions, use
-.PN XtSetWarningHandler .
-.LP
-.IN "XtSetWarningHandler" "" "@DEF@"
-.sM
-.FD 0
-void XtSetWarningHandler(\fIhandler\fP)
-.br
- XtErrorHandler \fIhandler\fP;
-.FN
-.IP \fIhandler\fP 1i
-Specifies the new nonfatal error procedure, which usually returns.
-.LP
-.eM
-The default warning handler provided by the \*(xI is
-.PN _XtWarning .
-On POSIX-based systems,
-it prints the message to standard error and returns to the caller.
-This routine has been superseded by
-.PN XtAppSetWarningHandler .
-.sp
-.LP
-To call the installed nonfatal error procedure, use
-.PN XtWarning .
-.LP
-.IN "XtWarning" "" "@DEF@"
-.sM
-.FD 0
-void XtWarning(\fImessage\fP)
-.br
- String \fImessage\fP;
-.FN
-.IP \fImessage\fP 1i
-Specifies the nonfatal error message to be reported.
-.LP
-.eM
-Most programs should use
-.PN XtAppWarningMsg ,
-not
-.PN XtWarning ,
-to provide for customization and internationalization of warning messages.
-This routine has been superseded by
-.PN XtAppWarning .
diff --git a/libXt/specs/appC.xml b/libXt/specs/appC.xml
new file mode 100644
index 000000000..4598ac99e
--- /dev/null
+++ b/libXt/specs/appC.xml
@@ -0,0 +1,1970 @@
+<appendix id='Compability_Functions'>
+<title>Compatibility Functions
+<footnote>
+<para>
+This appendix is part of the formal Intrinsics Specification.
+</para>
+</footnote>
+</title>
+<para>
+In prototype versions of the X Toolkit
+each widget class
+implemented an Xt&lt;<emphasis remap='I'>Widget</emphasis>&gt;Create (for example,
+<function>XtLabelCreate</function>)
+function, in which most of the code was identical from widget to widget.
+In the Intrinsics, a single generic
+<xref linkend='XtCreateWidget' xrefstyle='select: title'/>
+performs most of the common work and then calls the initialize procedure
+implemented for the particular widget class.
+</para>
+
+<para>
+Each Composite class also implemented the procedures
+Xt&lt;<emphasis remap='I'>Widget</emphasis>&gt;Add and an Xt&lt;<emphasis remap='I'>Widget</emphasis>&gt;Delete (for example,
+<function>XtButtonBoxAddButton</function>
+and
+<function>XtButtonBoxDeleteButton</function>).
+In the Intrinsics, the Composite generic procedures
+<xref linkend='XtManageChildren' xrefstyle='select: title'/>
+and
+<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+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
+<function>XtLabelCreate</function>
+as:
+</para>
+
+<literallayout>
+#define XtLabelCreate(name, parent, args, num_args) \
+ ((LabelWidget) XtCreateWidget(name, labelWidgetClass, parent, args, num_args))
+</literallayout>
+
+<para>
+Pop-up shells in some of the prototypes automatically performed an
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+on their child within their insert_child procedure.
+Creators of pop-up children need to call
+<xref linkend='XtManageChild' xrefstyle='select: title'/>
+themselves.
+</para>
+
+<para>
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>
+and
+<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>
+have been replaced by
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>
+and
+<xref linkend='XtVaOpenApplication' xrefstyle='select: title'/>.
+</para>
+
+<para>
+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
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>
+or
+<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppInitialize'>
+<funcprototype>
+<funcdef>Widget <function>XtAppInitialize</function></funcdef>
+ <paramdef>XtAppContext *<parameter>app_context_return</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescList <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int *<parameter>argc_in_out</parameter></paramdef>
+ <paramdef>String *<parameter>argv_in_out</parameter></paramdef>
+ <paramdef>String *<parameter>fallback_resources</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application context, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line options table.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>options</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fallback_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies resource values to be used if the application class resource
+file cannot be opened or read, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any
+other resource specifications for the created shell widget.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the argument list.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>
+function calls
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>
+followed by
+<xref linkend='XtCreateApplicationContext' xrefstyle='select: title'/>,
+then calls
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+with <emphasis remap='I'>display_string</emphasis> NULL and
+<emphasis remap='I'>application_name</emphasis> NULL, and finally calls
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+with <emphasis remap='I'>application_name</emphasis> NULL, <emphasis remap='I'>widget_class</emphasis>
+<function>application\%Shell\%Widget\%Class</function>,
+and the specified <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis>
+and returns the created shell. The modified <emphasis remap='I'>argc</emphasis> and <emphasis remap='I'>argv</emphasis> returned by
+<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>
+are returned in <emphasis remap='I'>argc_in_out</emphasis> and <emphasis remap='I'>argv_in_out</emphasis>. If
+<emphasis remap='I'>app_context_return</emphasis> 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
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>
+terminates the application. If <emphasis remap='I'>fallback_resources</emphasis> is non-NULL,
+<xref linkend='XtAppSetFallbackResources' xrefstyle='select: title'/>
+is called with the value prior to calling
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtVaAppInitialize'>
+<funcprototype>
+<funcdef>Widget <function>XtVaAppInitialize</function></funcdef>
+ <paramdef>XtAppContext *<parameter>app_context_return</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescList <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int *<parameter>argc_in_out</parameter></paramdef>
+ <paramdef>String *<parameter>argv_in_out</parameter></paramdef>
+ <paramdef>String *<parameter>fallback_resources</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the application context, if non-NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of the application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line options table.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>options</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv_in_out</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line arguments array.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>fallback_resources</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies resource values to be used if the application class
+resource file cannot be opened, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ ...
+ </term>
+ <listitem>
+ <para>
+Specifies the variable argument list to override any other
+resource specifications for the created shell.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>
+procedure is identical in function to
+<xref linkend='XtAppInitialize' xrefstyle='select: title'/>
+with the <emphasis remap='I'>args</emphasis> and <emphasis remap='I'>num_args</emphasis> parameters replaced by a varargs list,
+as described
+in Section 2.5.1.
+</para>
+
+<para>
+As a convenience to people converting from earlier versions of the toolkit
+without application contexts, the following routines exist:
+<xref linkend='XtInitialize' xrefstyle='select: title'/>,
+<xref linkend='XtMainLoop' xrefstyle='select: title'/>,
+<xref linkend='XtNextEvent' xrefstyle='select: title'/>,
+<xref linkend='XtProcessEvent' xrefstyle='select: title'/>,
+<xref linkend='XtPeekEvent' xrefstyle='select: title'/>,
+<xref linkend='XtPending' xrefstyle='select: title'/>,
+<xref linkend='XtAddInput' xrefstyle='select: title'/>,
+<xref linkend='XtAddTimeOut' xrefstyle='select: title'/>,
+<xref linkend='XtAddWorkProc' xrefstyle='select: title'/>,
+<xref linkend='XtCreateApplicationShell' xrefstyle='select: title'/>,
+<xref linkend='XtAddActions' xrefstyle='select: title'/>,
+<xref linkend='XtSetSelectionTimeout' xrefstyle='select: title'/>,
+and
+<xref linkend='XtGetSelectionTimeout' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtInitialize'>
+<funcprototype>
+<funcdef>Widget <function>XtInitialize</function></funcdef>
+ <paramdef>String <parameter>shell_name</parameter></paramdef>
+ <paramdef>String <parameter>application_class</parameter></paramdef>
+ <paramdef>XrmOptionDescRec <parameter>options</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_options</parameter></paramdef>
+ <paramdef>int *<parameter>argc</parameter></paramdef>
+ <paramdef>String <parameter>argv</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>shell_name</emphasis>
+ </term>
+ <listitem>
+ <para>
+This parameter is ignored; therefore, you can specify NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>application_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the class name of this application.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to parse the command line for any application-specific resources.
+The <emphasis remap='I'>options</emphasis> argument is passed as a parameter to
+<function>XrmParseCommand</function>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_options</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in the options list.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to the number of command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>argv</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the command line parameters.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+calls
+<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/>
+to initialize the toolkit internals,
+creates a default application context for use by the other convenience
+routines, calls
+<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>
+with <emphasis remap='I'>display_string</emphasis> NULL and <emphasis remap='I'>application_name</emphasis> NULL, and
+finally calls
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+with <emphasis remap='I'>application_name</emphasis> NULL and
+returns the created shell.
+The semantics of calling
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+more than once are undefined.
+This routine has been replaced by
+<xref linkend='XtOpenApplication' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtMainLoop'>
+<funcprototype>
+<funcdef>void <function>XtMainLoop</function></funcdef>
+ <paramdef><parameter>void</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<xref linkend='XtMainLoop' xrefstyle='select: title'/>
+first reads the next alternate input, timer, or X event by calling
+<xref linkend='XtNextEvent' xrefstyle='select: title'/>.
+Then it dispatches this to the appropriate registered procedure by calling
+<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>.
+This routine has been replaced by
+<xref linkend='XtAppMainLoop' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtNextEvent'>
+<funcprototype>
+<funcdef>void <function>XtNextEvent</function></funcdef>
+ <paramdef>XEvent *<parameter>event_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the event information to the specified event structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If no input is on the X input queue for the default application context,
+<xref linkend='XtNextEvent' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppNextEvent' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtProcessEvent'>
+<funcprototype>
+<funcdef>void <function>XtProcessEvent</function></funcdef>
+ <paramdef>XtInputMask <parameter>mask</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>mask</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type of input to process.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtProcessEvent' xrefstyle='select: title'/>
+processes one X event, timeout, or alternate input source
+(depending on the value of <emphasis remap='I'>mask</emphasis>), blocking if necessary.
+It has been replaced by
+<xref linkend='XtAppProcessEvent' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this function.
+</para>
+
+<funcsynopsis id='XtPeekEvent'>
+<funcprototype>
+<funcdef>Boolean <function>XtPeekEvent</function></funcdef>
+ <paramdef>XEvent *<parameter>event_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>event_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the event information to the specified event structure.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+If there is an event in the queue for the default application context,
+<xref linkend='XtPeekEvent' xrefstyle='select: title'/>
+fills in the event and returns a nonzero value.
+If no X input is on the queue,
+<xref linkend='XtPeekEvent' xrefstyle='select: title'/>
+flushes the output buffer and blocks until input is available, possibly
+calling some timeout callbacks in the process.
+If the input is an event,
+<xref linkend='XtPeekEvent' xrefstyle='select: title'/>
+fills in the event and returns a nonzero value.
+Otherwise, the input is for an alternate input source, and
+<xref linkend='XtPeekEvent' xrefstyle='select: title'/>
+returns zero.
+This routine has been replaced by
+<xref linkend='XtAppPeekEvent' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtPending'>
+<funcprototype>
+<funcdef>Boolean <function>XtPending</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+<xref linkend='XtPending' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppPending' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtAddInput'>
+<funcprototype>
+<funcdef>XtInputId <function>XtAddInput</function></funcdef>
+ <paramdef>int <parameter>source</parameter></paramdef>
+ <paramdef>XtPointer <parameter>condition</parameter></paramdef>
+ <paramdef>XtInputCallbackProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>source</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source file descriptor on a POSIX-based system
+or other operating-system-dependent device specification.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>condition</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the mask that indicates either a read, write, or exception condition
+or some operating-system-dependent condition.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure called when input is available.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parameter to be passed to <emphasis remap='I'>proc</emphasis> when input is available.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddInput' xrefstyle='select: title'/>
+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 <emphasis remap='I'>file</emphasis> should be loosely interpreted to mean any sink
+or source of data.)
+<xref linkend='XtAddInput' xrefstyle='select: title'/>
+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
+<xref linkend='XtAppAddInput' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtAddTimeOut'>
+<funcprototype>
+<funcdef>XtIntervalId <function>XtAddTimeOut</function></funcdef>
+ <paramdef>unsigned long <parameter>interval</parameter></paramdef>
+ <paramdef>XtTimerCallbackProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>interval</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the time interval in milliseconds.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the procedure to be called when time expires.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the parameter to be passed to <emphasis remap='I'>proc</emphasis> when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtAddTimeOut' xrefstyle='select: title'/>
+function creates a timeout in the default application context
+and returns an identifier for it.
+The timeout value is set to <emphasis remap='I'>interval</emphasis>.
+The callback procedure will be called after
+the time interval elapses, after which the timeout is removed.
+This routine has been replaced by
+<xref linkend='XtAppAddTimeOut' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtAddWorkProc'>
+<funcprototype>
+<funcdef>XtWorkProcId <function>XtAddWorkProc</function></funcdef>
+ <paramdef>XtWorkProc <parameter>proc</parameter></paramdef>
+ <paramdef>XtPointer <parameter>client_data</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>proc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Procedure to call to do the work.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>client_data</emphasis>
+ </term>
+ <listitem>
+ <para>
+Client data to pass to <emphasis remap='I'>proc</emphasis> when it is called.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This routine registers a work procedure in the default application context. It has
+been replaced by
+<xref linkend='XtAppAddWorkProc' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<funcsynopsis id='XtCreateApplicationShell'>
+<funcprototype>
+<funcdef>Widget <function>XtCreateApplicationShell</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>WidgetClass <parameter>widget_class</parameter></paramdef>
+ <paramdef>ArgList <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+This parameter is ignored; therefore, you can specify NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>widget_class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget class pointer for the created application shell widget.
+This will usually be
+<function>topLevelShellWidgetClass</function>
+or a subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list to override any other resource specifications.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The procedure
+<xref linkend='XtCreateApplicationShell' xrefstyle='select: title'/>
+calls
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>
+with <emphasis remap='I'>application_name</emphasis> NULL, the application class passed to
+<xref linkend='XtInitialize' xrefstyle='select: title'/>,
+and the default application context created by
+<xref linkend='XtInitialize' xrefstyle='select: title'/>.
+This routine has been replaced by
+<xref linkend='XtAppCreateShell' xrefstyle='select: title'/>.
+</para>
+
+<para>
+An old-format resource type converter procedure pointer is of type
+<xref linkend='XtConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConverter'>
+<funcprototype>
+<funcdef>typedef void <function>(*XtConverter)</function></funcdef>
+
+ <paramdef>XrmValue *<parameter>args</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_args</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>from</parameter></paramdef>
+ <paramdef>XrmValue *<parameter>to</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a list of additional
+<function>XrmValue</function>
+arguments to the converter if additional context is needed
+to perform the conversion, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value to convert.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the descriptor to use to return the converted value.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Type converters should perform the following actions:
+</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Check to see that the number of arguments passed is correct.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+Attempt the type conversion.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+If successful, return the size and pointer to the data in the <emphasis remap='I'>to</emphasis> argument;
+otherwise, call
+<xref linkend='XtWarningMsg' xrefstyle='select: title'/>
+and return without modifying the <emphasis remap='I'>to</emphasis> argument.
+ </para>
+ </listitem>
+</itemizedlist>
+<para>
+Most type converters just take the data described by the specified <emphasis remap='I'>from</emphasis>
+argument and return data by writing into the specified <emphasis remap='I'>to</emphasis> 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.
+</para>
+
+<para>
+Note that the address returned in <emphasis remap='I'>to-&gt;addr</emphasis> 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.
+</para>
+
+<para>
+The procedure type
+<xref linkend='XtConverter' xrefstyle='select: title'/>
+has been replaced by
+<xref linkend='XtTypeConverter' xrefstyle='select: title'/>.
+</para>
+
+<para>
+The
+<xref linkend='XtStringConversionWarning' xrefstyle='select: title'/>
+function is a convenience routine for old-format resource converters
+that convert from strings.
+</para>
+
+<funcsynopsis id='XtStringConversionWarning'>
+<funcprototype>
+<funcdef>void <function>XtStringConversionWarning</function></funcdef>
+ <paramdef>String <parameter>src</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>src</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the string that could not be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>dst_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the name of the type to which the string could not be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtStringConversionWarning' xrefstyle='select: title'/>
+function issues a warning message with name "conversionError",
+type "string", class "XtToolkitError, and the default message string
+"Cannot convert "<emphasis remap='I'>src</emphasis>" to type <emphasis remap='I'>dst_type</emphasis>". This routine
+has been superseded by
+<xref linkend='XtDisplayStringConversionWarning' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register an old-format converter, use
+<xref linkend='XtAddConverter' xrefstyle='select: title'/>
+or
+<xref linkend='XtAppAddConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddConverter'>
+<funcprototype>
+<funcdef>void <function>XtAddConverter</function></funcdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XtConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XtConvertArgList <parameter>convert_args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type converter procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to compute the additional arguments to the converter, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>convert_args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAddConverter' xrefstyle='select: title'/>
+is equivalent in function to
+<xref linkend='XtSetTypeConverter' xrefstyle='select: title'/>
+with <emphasis remap='I'>cache_type</emphasis> equal to
+<function>XtCacheAll</function>
+for old-format type converters. It has been superseded by
+<xref linkend='XtSetTypeConverter' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAppAddConverter'>
+<funcprototype>
+<funcdef>void <function>XtAppAddConverter</function></funcdef>
+ <paramdef>XtAppContext <parameter>app_context</parameter></paramdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XtConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XtConvertArgList <parameter>convert_args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>app_context</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the application context.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the type converter procedure.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>convert_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies how to compute the additional arguments to the converter, or NULL.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>convert_args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+<xref linkend='XtAppAddConverter' xrefstyle='select: title'/>
+is equivalent in function to
+<xref linkend='XtAppSetTypeConverter' xrefstyle='select: title'/>
+with <emphasis remap='I'>cache_type</emphasis> equal to
+<function>XtCacheAll</function>
+for old-format type converters. It has been superseded by
+<xref linkend='XtAppSetTypeConverter' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To invoke resource conversions, a client may use
+<xref linkend='XtConvert' xrefstyle='select: title'/>
+or, for old-format converters only,
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtConvert'>
+<funcprototype>
+<funcdef>void <function>XtConvert</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>String <parameter>from_type</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>from</parameter></paramdef>
+ <paramdef>String <parameter>to_type</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>to_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the widget to use for additional arguments, if any are
+needed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the source type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value to be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the destination type.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the converted value.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<funcsynopsis id='XtDirectConvert'>
+<funcprototype>
+<funcdef>void <function>XtDirectConvert</function></funcdef>
+ <paramdef>XtConverter <parameter>converter</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>args</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_args</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>from</parameter></paramdef>
+ <paramdef>XrmValuePtr <parameter>to_return</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>converter</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the conversion procedure to be called.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the argument list that contains the additional arguments
+needed to perform the conversion (often NULL).
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_args</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>args</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>from</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the value to be converted.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>to_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Returns the converted value.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtConvert' xrefstyle='select: title'/>
+function looks up the type converter registered to convert <emphasis remap='I'>from_type</emphasis>
+to <emphasis remap='I'>to_type</emphasis>, computes any additional arguments needed, and then calls
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>
+or
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>.
+The
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>
+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.
+</para>
+
+<para>
+Before calling the specified converter,
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>
+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 <emphasis remap='I'>to_return.addr</emphasis> for non-NULL.
+The data returned by
+<xref linkend='XtConvert' xrefstyle='select: title'/>
+must be copied immediately by the caller,
+as it may point to static data in the type converter.
+</para>
+
+<para>
+<xref linkend='XtConvert' xrefstyle='select: title'/>
+has been replaced by
+<xref linkend='XtConvertAndStore' xrefstyle='select: title'/>,
+and
+<xref linkend='XtDirectConvert' xrefstyle='select: title'/>
+has been superseded by
+<xref linkend='XtCallConverter' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To deallocate a shared GC when it is no longer needed, use
+<xref linkend='XtDestroyGC' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtDestroyGC'>
+<funcprototype>
+<funcdef>void <function>XtDestroyGC</function></funcdef>
+ <paramdef>Widget <parameter>w</parameter></paramdef>
+ <paramdef>GC <parameter>gc</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>w</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies any object on the display for which the shared GC was
+created. Must be of class Object or any subclass thereof.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>gc</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the shared GC to be deallocated.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtDestroyGC' xrefstyle='select: title'/>
+had only a <emphasis remap='I'>gc</emphasis> argument.
+Therefore, this function is not very portable,
+and you are encouraged to use
+<xref linkend='XtReleaseGC' xrefstyle='select: title'/>
+instead.
+</para>
+
+<para>
+To declare an action table in the default application context
+and register it with the translation manager, use
+<xref linkend='XtAddActions' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtAddActions'>
+<funcprototype>
+<funcdef>void <function>XtAddActions</function></funcdef>
+ <paramdef>XtActionList <parameter>actions</parameter></paramdef>
+ <paramdef>Cardinal <parameter>num_actions</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>actions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the action table to register.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_actions</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>actions</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+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
+<xref linkend='XtMenuPopup' xrefstyle='select: title'/>
+and
+<xref linkend='XtMenuPopdown' xrefstyle='select: title'/>
+as part of X Toolkit initialization.
+This routine has been replaced by
+<xref linkend='XtAppAddActions' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<para>
+To set the Intrinsics selection timeout in the default application context, use
+<xref linkend='XtSetSelectionTimeout' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetSelectionTimeout'>
+<funcprototype>
+<funcdef>void <function>XtSetSelectionTimeout</function></funcdef>
+ <paramdef>unsigned long <parameter>timeout</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>timeout</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the selection timeout in milliseconds.
+This routine has been replaced by
+<xref linkend='XtAppSetSelectionTimeout' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+
+<para>
+To get the current selection timeout value in the default application
+context, use
+<xref linkend='XtGetSelectionTimeout' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetSelectionTimeout'>
+<funcprototype>
+<funcdef>unsigned long <function>XtGetSelectionTimeout</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+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.
+</para>
+
+<para>
+This routine has been replaced by
+<xref linkend='XtAppGetSelectionTimeout' xrefstyle='select: title'/>.
+<xref linkend='XtInitialize' xrefstyle='select: title'/>
+must be called before using this routine.
+</para>
+
+<para>
+To obtain the global error database (for example, to merge with
+an application- or widget-specific database), use
+<xref linkend='XtGetErrorDatabase' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetErrorDatabase'>
+<funcprototype>
+<funcdef>XrmDatabase <function>*XtGetErrorDatabase</function></funcdef>
+ <paramdef><parameter></parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<para>
+The
+<xref linkend='XtGetErrorDatabase' xrefstyle='select: title'/>
+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
+<function>XtGetErrorDatbaseText</function>.
+This routine has been replaced by
+<xref linkend='XtAppGetErrorDatabase' xrefstyle='select: title'/>.
+</para>
+
+<para>
+An error message handler can obtain the error database text for an
+error or a warning by calling
+<xref linkend='XtGetErrorDatabaseText' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtGetErrorDatabaseText'>
+<funcprototype>
+<funcdef>void <function>XtGetErrorDatabaseText</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String <parameter>buffer_return</parameter></paramdef>
+ <paramdef>int <parameter>nbytes</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para></para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specify the name and type that are concatenated to form the resource name
+of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class of the error message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>buffer_return</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the buffer into which the error message is to be returned.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>nbytes</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the size of the buffer in bytes.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The
+<xref linkend='XtGetErrorDatabaseText' xrefstyle='select: title'/>
+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 <emphasis remap='I'>name</emphasis> and <emphasis remap='I'>type</emphasis> are concatenated with a single "."
+between them and the <emphasis remap='I'>class</emphasis> is concatenated with itself with a
+single "." if it does not already contain a ".".
+This routine has been superseded by
+<xref linkend='XtAppGetErrorDatabaseText' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register a procedure to be called on fatal error conditions, use
+<xref linkend='XtSetErrorMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetErrorMsgHandler'>
+<funcprototype>
+<funcdef>void <function>XtSetErrorMsgHandler</function></funcdef>
+ <paramdef>XtErrorMsgHandler <parameter>msg_handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>msg_handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new fatal error procedure, which should not return.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The default error handler provided by the Intrinsics constructs a
+string from the error resource database and calls
+<xref linkend='XtError' xrefstyle='select: title'/>.
+Fatal error message handlers should not return.
+If one does,
+subsequent Intrinsics behavior is undefined.
+This routine has been superseded by
+<xref linkend='XtAppSetErrorMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To call the high-level error handler, use
+<xref linkend='XtErrorMsg' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtErrorMsg'>
+<funcprototype>
+<funcdef>void <function>XtErrorMsg</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the general kind of error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the detailed name of the error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a list of values to be stored in the message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This routine has been superseded by
+<xref linkend='XtAppErrorMsg' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register a procedure to be called on nonfatal error conditions, use
+<xref linkend='XtSetWarningMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetWarningMsgHandler'>
+<funcprototype>
+<funcdef>void <function>XtSetWarningMsgHandler</function></funcdef>
+ <paramdef>XtErrorMsgHandler <parameter>msg_handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>msg_handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new nonfatal error procedure, which usually returns.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The default warning handler provided by the Intrinsics constructs a string
+from the error resource database and calls
+<xref linkend='XtWarning' xrefstyle='select: title'/>.
+This routine has been superseded by
+<xref linkend='XtAppSetWarningMsgHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To call the installed high-level warning handler, use
+<xref linkend='XtWarningMsg' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWarningMsg'>
+<funcprototype>
+<funcdef>void <function>XtWarningMsg</function></funcdef>
+ <paramdef>String <parameter>name</parameter></paramdef>
+ <paramdef>String <parameter>type</parameter></paramdef>
+ <paramdef>String <parameter>class</parameter></paramdef>
+ <paramdef>String <parameter>default</parameter></paramdef>
+ <paramdef>String *<parameter>params</parameter></paramdef>
+ <paramdef>Cardinal *<parameter>num_params</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>name</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the general kind of error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>type</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the detailed name of the error.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>class</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the resource class.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>default</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the default message to use if an error database entry is not found.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies a pointer to a list of values to be stored in the message.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>num_params</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the number of entries in <emphasis remap='I'>params</emphasis>.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+This routine has been superseded by
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register a procedure to be called on fatal error conditions, use
+<xref linkend='XtSetErrorHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetErrorHandler'>
+<funcprototype>
+<funcdef>void <function>XtSetErrorHandler</function></funcdef>
+ <paramdef>XtErrorHandler <parameter>handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new fatal error procedure, which should not return.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The default error handler provided by the Intrinsics is
+<function>_XtError</function>.
+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
+<xref linkend='XtAppSetErrorHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To call the installed fatal error procedure, use
+<xref linkend='XtError' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtError'>
+<funcprototype>
+<funcdef>void <function>XtError</function></funcdef>
+ <paramdef>String <parameter>message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the message to be reported.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most programs should use
+<xref linkend='XtAppErrorMsg' xrefstyle='select: title'/>,
+not
+<xref linkend='XtError' xrefstyle='select: title'/>,
+to provide for customization and internationalization of error
+messages. This routine has been superseded by
+<xref linkend='XtAppError' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To register a procedure to be called on nonfatal error conditions, use
+<xref linkend='XtSetWarningHandler' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtSetWarningHandler'>
+<funcprototype>
+<funcdef>void <function>XtSetWarningHandler</function></funcdef>
+ <paramdef>XtErrorHandler <parameter>handler</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>handler</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the new nonfatal error procedure, which usually returns.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+The default warning handler provided by the Intrinsics is
+<function>_XtWarning</function>.
+On POSIX-based systems,
+it prints the message to standard error and returns to the caller.
+This routine has been superseded by
+<xref linkend='XtAppSetWarningHandler' xrefstyle='select: title'/>.
+</para>
+
+<para>
+To call the installed nonfatal error procedure, use
+<xref linkend='XtWarning' xrefstyle='select: title'/>.
+</para>
+
+<funcsynopsis id='XtWarning'>
+<funcprototype>
+<funcdef>void <function>XtWarning</function></funcdef>
+ <paramdef>String <parameter>message</parameter></paramdef>
+</funcprototype>
+</funcsynopsis>
+
+<variablelist>
+ <varlistentry>
+ <term>
+ <emphasis remap='I'>message</emphasis>
+ </term>
+ <listitem>
+ <para>
+Specifies the nonfatal error message to be reported.
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
+Most programs should use
+<xref linkend='XtAppWarningMsg' xrefstyle='select: title'/>,
+not
+<xref linkend='XtWarning' xrefstyle='select: title'/>,
+to provide for customization and internationalization of warning messages.
+This routine has been superseded by
+<xref linkend='XtAppWarning' xrefstyle='select: title'/>.
+</para>
+</appendix>
diff --git a/libXt/specs/appD b/libXt/specs/appD
deleted file mode 100644
index 5322ff97b..000000000
--- a/libXt/specs/appD
+++ /dev/null
@@ -1,602 +0,0 @@
-.\" $Xorg: appD,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix D\fP\s-1
-
-\s+1\fBIntrinsics Error Messages\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix D \(em Intrinsics Error Messages\fP
-.XE
-.LP
-All \*(xI errors and warnings have class
-``XtToolkitError''.
-The following two tables summarize the common errors and warnings that can be
-generated by the \*(xI.
-Additional implementation-dependent messages are permitted.
-.SH
-Error Messages
-.LP
-.ps 9
-.nr PS 9
-.TS
-lw(1.3i) lw(1.4i) lw(2.9i).
-_
-.sp 6p
-Name Type Default Message
-.sp 6p
-_
-.sp 6p
-allocError calloc T{
-Cannot perform calloc
-T}
-allocError malloc T{
-Cannot perform malloc
-T}
-allocError realloc T{
-Cannot perform realloc
-T}
-internalError xtMakeGeometryRequest T{
-internal error; ShellClassExtension is NULL
-T}
-invalidArgCount xtGetValues T{
-Argument count > 0 on NULL argument list in XtGetValues
-T}
-invalidArgCount xtSetValues T{
-Argument count > 0 on NULL argument list in XtSetValues
-T}
-invalidClass applicationShellInsertChild T{
-ApplicationShell does not accept RectObj children; ignored
-T}
-invalidClass constraintSetValue T{
-Subclass of Constraint required in CallConstraintSetValues
-T}
-invalidClass xtAppCreateShell T{
-XtAppCreateShell requires non-NULL widget class
-T}
-invalidClass xtCreatePopupShell T{
-XtCreatePopupShell requires non-NULL widget class
-T}
-invalidClass xtCreateWidget T{
-XtCreateWidget requires non-NULL widget class
-T}
-invalidClass xtPopdown T{
-XtPopdown requires a subclass of shellWidgetClass
-T}
-invalidClass xtPopup T{
-XtPopup requires a subclass of shellWidgetClass
-T}
-invalidDimension xtCreateWindow T{
-Widget %s has zero width and/or height
-T}
-invalidDimension shellRealize T{
-Shell widget %s has zero width and/or height
-T}
-invalidDisplay xtInitialize T{
-Can't open display: %s
-T}
-invalidGetValues xtGetValues T{
-NULL ArgVal in XtGetValues
-T}
-invalidExtension shellClassPartInitialize T{
-widget class %s has invalid ShellClassExtension record
-T}
-invalidExtension xtMakeGeometryRequest T{
-widget class %s has invalid ShellClassExtension record
-T}
-invalidGeometryManager xtMakeGeometryRequest T{
-XtMakeGeometryRequest - parent has no geometry manager
-T}
-invalidParameter xtAddInput T{
-invalid condition passed to XtAddInput
-T}
-invalidParameter xtAddInput T{
-invalid condition passed to XtAppAddInput
-T}
-invalidParent xtChangeManagedSet T{
-Attempt to manage a child when parent is not Composite
-T}
-invalidParent xtChangeManagedSet T{
-Attempt to unmanage a child when parent is not Composite
-T}
-invalidParent xtCreatePopupShell T{
-XtCreatePopupShell requires non-NULL parent
-T}
-invalidParent xtCreateWidget T{
-XtCreateWidget requires non-NULL parent
-T}
-invalidParent xtMakeGeometryRequest T{
-non-shell has no parent in XtMakeGeometryRequest
-T}
-invalidParent xtMakeGeometryRequest T{
-XtMakeGeometryRequest - parent not composite
-T}
-invalidParent xtManageChildren T{
-Attempt to manage a child when parent is not Composite
-T}
-invalidParent xtUnmanageChildren T{
-Attempt to unmanage a child when parent is not Composite
-T}
-invalidProcedure inheritanceProc T{
-Unresolved inheritance operation
-T}
-invalidProcedure realizeProc T{
-No realize class procedure defined
-T}
-invalidWindow eventHandler T{
-Event with wrong window
-T}
-missingWidget fetchDisplayArg T{
-FetchDisplayArg called without a widget to reference
-T}
-nonWidget xtCreateWidget T{
-attempt to add non-widget child "%s" to parent "%s" which supports only widgets
-T}
-noPerDisplay closeDisplay T{
-Couldn't find per display information
-T}
-noPerDisplay getPerDisplay T{
-Couldn't find per display information
-T}
-noSelectionProperties freeSelectionProperty T{
-internal error: no selection property context for display
-T}
-noWidgetAncestor windowedAncestor T{
-Object "%s" does not have windowed ancestor
-T}
-nullDisplay xtRegisterExtensionSelector T{
-XtRegisterExtensionSelector requires a non-NULL display
-T}
-nullProc insertChild T{
-"%s" parent has NULL insert_child method
-T}
-r2versionMismatch widget T{
-Widget class %s must be re-compiled.
-T}
-R3versionMismatch widget T{
-Widget class %s must be re-compiled.
-T}
-R4orR5versionMismatch widget T{
-Widget class %s must be re-compiled.
-T}
-rangeError xtRegisterExtensionSelector T{
-Attempt to register multiple selectors for one extension event type
-T}
-sessionManagement SmcOpenConnection T{
-Tried to connect to session manager, %s
-T}
-subclassMismatch xtCheckSubclass T{
-Widget class %s found when subclass of %s expected: %s
-T}
-.sp 6p
-_
-.TE
-.ps 11
-.nr PS 11
-.SH
-Warning Messages
-.LP
-.ps 9
-.nr PS 9
-.TS
-lw(1.3i) lw(1.4i) lw(2.9i).
-_
-.sp 6p
-Name Type Default Message
-.sp 6p
-_
-.sp 6p
-ambiguousParent xtChangeManagedSet T{
-Not all children have same parent
-T}
-ambiguousParent xtManageChildren T{
-Not all children have same parent in XtManageChildren
-T}
-ambiguousParent xtUnmanageChildren T{
-Not all children have same parent in XtUnmanageChildren
-T}
-badFormat xtGetSelectionValue T{
-Selection owner returned type INCR property with format != 32
-T}
-badGeometry shellRealize T{
-Shell widget "%s" has an invalid geometry specification: "%s"
-T}
-badValue cvtStringToPixel T{
-Color name "%s" is not defined
-T}
-communicationError select T{
-Select failed; error code %s
-T}
-conversionError string T{
-Cannot convert string "%s" to type %s
-T}
-conversionError stringToVisual T{
-Cannot find Visual of class %s for display %s
-T}
-conversionFailed xtConvertVarToArgList T{
-Type conversion failed
-T}
-conversionFailed xtGetTypedArg T{
-Type conversion (%s to %s) failed for widget '%s'
-T}
-displayError invalidDisplay T{
-Can't find display structure
-T}
-grabError xtAddGrab T{
-XtAddGrab requires exclusive grab if spring_loaded is TRUE
-T}
-grabError xtRemoveGrab T{
-XtRemoveGrab asked to remove a widget not on the list
-T}
-.TE
-.TS
-lw(1.3i) lw(1.4i) lw(2.9i).
-initializationError xtInitialize T{
-Initializing Resource Lists twice
-T}
-insufficientSpace xtGetTypedArg T{
-Insufficient space for converted type '%s' in widget '%s'
-T}
-internalError shell T{
-Shell's window manager interaction is broken
-T}
-invalidAddressMode computeArgs T{
-Conversion arguments for widget '%s' contain an unsupported address mode
-T}
-invalidArgCount getResources T{
-argument count > 0 on NULL argument list
-T}
-invalidCallbackList xtAddCallback T{
-Cannot find callback list in XtAddCallback
-T}
-invalidCallbackList xtAddCallback T{
-Cannot find callback list in XtAddCallbacks
-T}
-invalidCallbackList xtCallCallback T{
-Cannot find callback list in XtCallCallbacks
-T}
-invalidCallbackList xtRemoveAllCallback T{
-Cannot find callback list in XtRemoveAllCallbacks
-T}
-invalidCallbackList xtRemoveCallback T{
-Cannot find callback list in XtRemoveCallbacks
-T}
-invalidChild xtChangeManagedSet T{
-Null child passed to UnmanageChildren
-T}
-invalidChild xtManageChildren T{
-null child passed to ManageChildren
-T}
-invalidChild xtManageChildren T{
-null child passed to XtManageChildren
-T}
-invalidChild xtUnmanageChildren T{
-Null child passed to XtUnmanageChildren
-T}
-invalidChild xtUnmanageChildren T{
-Null child found in argument list to unmanage
-T}
-invalidDepth setValues T{
-Can't change widget depth
-T}
-invalidExtension xtCreateWidget T{
-widget "%s" class %s has invalid CompositeClassExtension record
-T}
-invalidExtension xtCreateWidget T{
-widget class %s has invalid ConstraintClassExtension record
-T}
-invalidGrab ungrabKeyOrButton T{
-Attempt to remove nonexistent passive grab
-T}
-invalidGrabKind xtPopup T{
-grab kind argument has invalid value; XtGrabNone assumed
-T}
-invalidParameters freeTranslations T{
-Freeing XtTranslations requires no extra arguments
-T}
-invalidParameters mergeTranslations T{
-MergeTM to TranslationTable needs no extra arguments
-T}
-invalidParameters xtMenuPopdown T{
-XtMenuPopdown called with num_params != 0 or 1
-T}
-invalidParameters xtMenuPopupAction T{
-MenuPopup wants exactly one argument
-T}
-invalidParent xtCopyFromParent T{
-CopyFromParent must have non-NULL parent
-T}
-invalidPopup xtMenuPopup T{
-Can't find popup widget "%s" in XtMenuPopup
-T}
-invalidPopup xtMenuPopdown T{
-Can't find popup in widget "%s" in XtMenuPopdown
-T}
-invalidPopup unsupportedOperation T{
-Pop-up menu creation is only supported on ButtonPress, KeyPress or EnterNotify events.
-T}
-invalidPopup unsupportedOperation T{
-Pop-up menu creation is only supported on Button, Key or EnterNotify events.
-T}
-invalidProcedure deleteChild T{
-null delete_child procedure for class %s in XtDestroy
-T}
-invalidProcedure inputHandler T{
-XtRemoveInput: Input handler not found
-T}
-invalidProcedure set_values_almost T{
-set_values_almost procedure shouldn't be NULL
-T}
-invalidResourceCount getResources T{
-resource count > 0 on NULL resource list
-T}
-invalidResourceName computeArgs T{
-Cannot find resource name %s as argument to conversion
-T}
-invalidShell xtTranslateCoords T{
-Widget has no shell ancestor
-T}
-invalidSizeOverride xtDependencies T{
-Representation size %d must match superclass's to override %s
-T}
-missingCharsetList cvtStringToFontSet T{
-Missing charsets in String to FontSet conversion
-T}
-noActionProc xtCallActionProc T{
-No action proc named "%s" is registered for widget "%s"
-T}
-noColormap cvtStringToPixel T{
-Cannot allocate colormap entry for "%s"
-T}
-noFont cvtStringToFont T{
-Unable to load any usable ISO8859-1 font
-T}
-noFont cvtStringToFontSet T{
-Unable to load any usable fontset
-T}
-noFont cvtStringToFontStruct T{
-Unable to load any usable ISO8859-1 font
-T}
-.TE
-.TS
-lw(1.3i) lw(1.4i) lw(2.9i).
-notInConvertSelection xtGetSelectionRequest T{
-XtGetSelectionRequest or XtGetSelectionParameters called for widget "%s" outside of ConvertSelection proc
-T}
-notRectObj xtChangeManagedSet T{
-child "%s", class %s is not a RectObj
-T}
-notRectObj xtManageChildren T{
-child "%s", class %s is not a RectObj
-T}
-nullWidget xtConvertVarToArgList T{
-XtVaTypedArg conversion needs non-NULL widget handle
-T}
-r3versionMismatch widget T{
-Shell Widget class %s binary compiled for R3
-T}
-translationError nullTable T{
-Can't remove accelerators from NULL table
-T}
-translationError nullTable T{
-Tried to remove nonexistent accelerators
-T}
-translationError ambiguousActions T{
-Overriding earlier translation manager actions.
-T}
-translationError newActions T{
-New actions are:%s
-T}
-translationError nullTable T{
-table to (un)merge must not be null
-T}
-translationError nullTable T{
-Can't translate event through NULL table
-T}
-translationError oldActions T{
-Previous entry was: %s %s
-T}
-translationError unboundActions T{
-Actions not found: %s
-T}
-translationError xtTranslateInitialize T{
-Initializing Translation manager twice.
-T}
-translationParseError missingComma T{
- ... possibly due to missing ',' in event sequence.
-T}
-translationParseError nonLatin1 T{
- ... probably due to non-Latin1 character in quoted string
-T}
-translationParseError parseError T{
-translation table syntax error: %s
-T}
-translationParseError parseString T{
-Missing '"'.
-T}
-translationParseError showLine T{
- ... found while parsing '%s'
-T}
-typeConversionError noConverter T{
-No type converter registered for '%s' to '%s' conversion.
-T}
-unknownType xtConvertVarToArgList T{
-Unable to find type of resource for conversion
-T}
-unknownType xtGetTypedArg T{
-Unable to find type of resource for conversion
-T}
-versionMismatch widget T{
-Widget class %s version mismatch (recompilation needed):\\n widget %d vs. intrinsics %d.
-T}
-wrongParameters cvtIntOrPixelToXColor T{
-Pixel to color conversion needs screen and colormap arguments
-T}
-wrongParameters cvtIntToBool T{
-Integer to Bool conversion needs no extra arguments
-T}
-wrongParameters cvtIntToBoolean T{
-Integer to Boolean conversion needs no extra arguments
-T}
-wrongParameters cvtIntToFloat T{
-Integer to Float conversion needs no extra arguments
-T}
-wrongParameters cvtIntToFont T{
-Integer to Font conversion needs no extra arguments
-T}
-wrongParameters cvtIntToPixel T{
-Integer to Pixel conversion needs no extra arguments
-T}
-wrongParameters cvtIntToPixmap T{
-Integer to Pixmap conversion needs no extra arguments
-T}
-wrongParameters cvtIntToShort T{
-Integer to Short conversion needs no extra arguments
-T}
-wrongParameters cvtIntToUnsignedChar T{
-Integer to UnsignedChar conversion needs no extra arguments
-T}
-wrongParameters cvtStringToAcceleratorTable T{
-String to AcceleratorTable conversion needs no extra arguments
-T}
-wrongParameters cvtStringToAtom T{
-String to Atom conversion needs Display argument
-T}
-wrongParameters cvtStringToBool T{
-String to Bool conversion needs no extra arguments
-T}
-wrongParameters cvtStringToBoolean T{
-String to Boolean conversion needs no extra arguments
-T}
-wrongParameters cvtStringToCommandArgArray T{
-String to CommandArgArray conversion needs no extra arguments
-T}
-wrongParameters cvtStringToCursor T{
-String to cursor conversion needs display argument
-T}
-wrongParameters cvtStringToDimension T{
-String to Dimension conversion needs no extra arguments
-T}
-wrongParameters cvtStringToDirectoryString T{
-String to DirectoryString conversion needs no extra arguments
-T}
-.TE
-.TS
-lw(1.3i) lw(1.4i) lw(2.9i).
-wrongParameters cvtStringToDisplay T{
-String to Display conversion needs no extra arguments
-T}
-wrongParameters cvtStringToFile T{
-String to File conversion needs no extra arguments
-T}
-wrongParameters cvtStringToFloat T{
-String to Float conversion needs no extra arguments
-T}
-wrongParameters cvtStringToFont T{
-String to font conversion needs display argument
-T}
-wrongParameters cvtStringToFontSet T{
-String to FontSet conversion needs display and locale arguments
-T}
-wrongParameters cvtStringToFontStruct T{
-String to font conversion needs display argument
-T}
-wrongParameters cvtStringToGravity T{
-String to Gravity conversion needs no extra arguments
-T}
-wrongParameters cvtStringToInitialState T{
-String to InitialState conversion needs no extra arguments
-T}
-wrongParameters cvtStringToInt T{
-String to Integer conversion needs no extra arguments
-T}
-wrongParameters cvtStringToPixel T{
-String to pixel conversion needs screen and colormap arguments
-T}
-wrongParameters cvtStringToRestartStyle T{
-String to RestartStyle conversion needs no extra arguments
-T}
-wrongParameters cvtStringToShort T{
-String to Integer conversion needs no extra arguments
-T}
-wrongParameters cvtStringToTranslationTable T{
-String to TranslationTable conversion needs no extra arguments
-T}
-wrongParameters cvtStringToUnsignedChar T{
-String to Integer conversion needs no extra arguments
-T}
-wrongParameters cvtStringToVisual T{
-String to Visual conversion needs screen and depth arguments
-T}
-wrongParameters cvtXColorToPixel T{
-Color to Pixel conversion needs no extra arguments
-T}
-wrongParameters freeCursor T{
-Free Cursor requires display argument
-T}
-wrongParameters freeDirectoryString T{
-Free Directory String requires no extra arguments
-T}
-wrongParameters freeFile T{
-Free File requires no extra arguments
-T}
-wrongParameters freeFont T{
-Free Font needs display argument
-T}
-wrongParameters freeFontSet T{
-FreeFontSet needs display and locale arguments
-T}
-wrongParameters freeFontStruct T{
-Free FontStruct requires display argument
-T}
-wrongParameters freePixel T{
-Freeing a pixel requires screen and colormap arguments
-T}
-.sp 6p
-_
-.TE
-.ps 11
-.nr PS 11
diff --git a/libXt/specs/appD.xml b/libXt/specs/appD.xml
new file mode 100644
index 000000000..00acbe79e
--- /dev/null
+++ b/libXt/specs/appD.xml
@@ -0,0 +1,880 @@
+<appendix id='Intrinsics_Error_Messages'>
+<title>Intrinsics Error Messages</title>
+
+<para>
+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
+</para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Default Message</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>allocError</entry>
+ <entry>calloc</entry>
+ <entry>Cannot perform calloc</entry>
+ </row>
+ <row>
+ <entry>allocError</entry>
+ <entry>malloc</entry>
+ <entry>Cannot perform malloc</entry>
+ </row>
+ <row>
+ <entry>allocError</entry>
+ <entry>realloc</entry>
+ <entry>Cannot perform realloc</entry>
+ </row>
+ <row>
+ <entry>internalError</entry>
+ <entry>xtMakeGeometryRequest</entry>
+ <entry>internal error; ShellClassExtension is NULL</entry>
+ </row>
+ <row>
+ <entry>invalidArgCount</entry>
+ <entry>xtGetValues</entry>
+ <entry>Argument count &gt; 0 on NULL argument list in XtGetValues</entry>
+ </row>
+ <row>
+ <entry>invalidArgCount</entry>
+ <entry>xtSetValues</entry>
+ <entry>Argument count &gt; 0 on NULL argument list in XtSetValues</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>applicationShellInsertChild</entry>
+ <entry>ApplicationShell does not accept RectObj children; ignored</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>constraintSetValue</entry>
+ <entry>Subclass of Constraint required in CallConstraintSetValues</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>xtAppCreateShell</entry>
+ <entry>XtAppCreateShell requires non-NULL widget class</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>xtCreatePopupShell</entry>
+ <entry>XtCreatePopupShell requires non-NULL widget class</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>xtCreateWidget</entry>
+ <entry>XtCreateWidget requires non-NULL widget class</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>xtPopdown</entry>
+ <entry>XtPopdown requires a subclass of shellWidgetClass</entry>
+ </row>
+ <row>
+ <entry>invalidClass</entry>
+ <entry>xtPopup</entry>
+ <entry>XtPopup requires a subclass of shellWidgetClass</entry>
+ </row>
+ <row>
+ <entry>invalidDimension</entry>
+ <entry>xtCreateWindow</entry>
+ <entry>Widget %s has zero width and/or height</entry>
+ </row>
+ <row>
+ <entry>invalidDimension</entry>
+ <entry>shellRealize</entry>
+ <entry>Shell widget %s has zero width and/or height</entry>
+ </row>
+ <row>
+ <entry>invalidDisplay</entry>
+ <entry>xtInitialize</entry>
+ <entry>Can't open display: %s</entry>
+ </row>
+ <row>
+ <entry>invalidGetValues</entry>
+ <entry>xtGetValues</entry>
+ <entry>NULL ArgVal in XtGetValues</entry>
+ </row>
+ <row>
+ <entry>invalidExtension</entry>
+ <entry>shellClassPartInitialize</entry>
+ <entry>widget class %s has invalid ShellClassExtension record</entry>
+ </row>
+ <row>
+ <entry>invalidExtension</entry>
+ <entry>xtMakeGeometryRequest</entry>
+ <entry>widget class %s has invalid ShellClassExtension record</entry>
+ </row>
+ <row>
+ <entry>invalidGeometryManager</entry>
+ <entry>xtMakeGeometryRequest</entry>
+ <entry>XtMakeGeometryRequest - parent has no geometry manager</entry>
+ </row>
+ <row>
+ <entry>invalidParameter</entry>
+ <entry>xtAddInput</entry>
+ <entry>invalid condition passed to XtAddInput</entry>
+ </row>
+ <row>
+ <entry>invalidParameter</entry>
+ <entry>xtAddInput</entry>
+ <entry>invalid condition passed to XtAppAddInput</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtChangeManagedSet</entry>
+ <entry>Attempt to manage a child when parent is not Composite</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtChangeManagedSet</entry>
+ <entry>Attempt to unmanage a child when parent is not Composite</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtCreatePopupShell</entry>
+ <entry>XtCreatePopupShell requires non-NULL parent</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtCreateWidget</entry>
+ <entry>XtCreateWidget requires non-NULL parent</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtMakeGeometryRequest</entry>
+ <entry>non-shell has no parent in XtMakeGeometryRequest</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtMakeGeometryRequest</entry>
+ <entry>XtMakeGeometryRequest - parent not composite</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtManageChildren</entry>
+ <entry>Attempt to manage a child when parent is not Composite</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtUnmanageChildren</entry>
+ <entry>Attempt to unmanage a child when parent is not Composite</entry>
+ </row>
+ <row>
+ <entry>invalidProcedure</entry>
+ <entry>inheritanceProc</entry>
+ <entry>Unresolved inheritance operation</entry>
+ </row>
+ <row>
+ <entry>invalidProcedure</entry>
+ <entry>realizeProc</entry>
+ <entry>No realize class procedure defined</entry>
+ </row>
+ <row>
+ <entry>invalidWindow</entry>
+ <entry>eventHandler</entry>
+ <entry>Event with wrong window</entry>
+ </row>
+ <row>
+ <entry>missingWidget</entry>
+ <entry>fetchDisplayArg</entry>
+ <entry>FetchDisplayArg called without a widget to reference</entry>
+ </row>
+ <row>
+ <entry>nonWidget</entry>
+ <entry>xtCreateWidget</entry>
+ <entry>attempt to add non-widget child "%s" to parent "%s" which supports only widgets</entry>
+ </row>
+ <row>
+ <entry>noPerDisplay</entry>
+ <entry>closeDisplay</entry>
+ <entry>Couldn't find per display information</entry>
+ </row>
+ <row>
+ <entry>noPerDisplay</entry>
+ <entry>getPerDisplay</entry>
+ <entry>Couldn't find per display information</entry>
+ </row>
+ <row>
+ <entry>noSelectionProperties</entry>
+ <entry>freeSelectionProperty</entry>
+ <entry>internal error: no selection property context for display</entry>
+ </row>
+ <row>
+ <entry>noWidgetAncestor</entry>
+ <entry>windowedAncestor</entry>
+ <entry>Object "%s" does not have windowed ancestor</entry>
+ </row>
+ <row>
+ <entry>nullDisplay</entry>
+ <entry>xtRegisterExtensionSelector</entry>
+ <entry>XtRegisterExtensionSelector requires a non-NULL display</entry>
+ </row>
+ <row>
+ <entry>nullProc</entry>
+ <entry>insertChild</entry>
+ <entry>"%s" parent has NULL insert_child method</entry>
+ </row>
+ <row>
+ <entry>r2versionMismatch</entry>
+ <entry>widget</entry>
+ <entry>Widget class %s must be re-compiled.</entry>
+ </row>
+ <row>
+ <entry>R3versionMismatch</entry>
+ <entry>widget</entry>
+ <entry>Widget class %s must be re-compiled.</entry>
+ </row>
+ <row>
+ <entry>R4orR5versionMismatch</entry>
+ <entry>widget</entry>
+ <entry>Widget class %s must be re-compiled.</entry>
+ </row>
+ <row>
+ <entry>rangeError</entry>
+ <entry>xtRegisterExtensionSelector</entry>
+ <entry>Attempt to register multiple selectors for one extension event type</entry>
+ </row>
+ <row>
+ <entry>sessionManagement</entry>
+ <entry>SmcOpenConnection</entry>
+ <entry>Tried to connect to session manager, %s</entry>
+ </row>
+ <row>
+ <entry>subclassMismatch</entry>
+ <entry>xtCheckSubclass</entry>
+ <entry>Widget class %s found when subclass of %s expected: %s</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Warning Messages</emphasis></para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='3' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <colspec colwidth='1.0*' colname='c3'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Type</entry>
+ <entry>Default Message</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>ambiguousParent</entry>
+ <entry>xtChangeManagedSet</entry>
+ <entry>Not all children have same parent</entry>
+ </row>
+ <row>
+ <entry>ambiguousParent</entry>
+ <entry>xtManageChildren</entry>
+ <entry>Not all children have same parent in XtManageChildren</entry>
+ </row>
+ <row>
+ <entry>ambiguousParent</entry>
+ <entry>xtUnmanageChildren</entry>
+ <entry>Not all children have same parent in XtUnmanageChildren</entry>
+ </row>
+ <row>
+ <entry>badFormat</entry>
+ <entry>xtGetSelectionValue</entry>
+ <entry>Selection owner returned type INCR property with format != 32</entry>
+ </row>
+ <row>
+ <entry>badGeometry</entry>
+ <entry>shellRealize</entry>
+ <entry>Shell widget "%s" has an invalid geometry specification: "%s"</entry>
+ </row>
+ <row>
+ <entry>badValue</entry>
+ <entry>cvtStringToPixel</entry>
+ <entry>Color name "%s" is not defined</entry>
+ </row>
+ <row>
+ <entry>communicationError</entry>
+ <entry>select</entry>
+ <entry>Select failed; error code %s</entry>
+ </row>
+ <row>
+ <entry>conversionError</entry>
+ <entry>string</entry>
+ <entry>Cannot convert string "%s" to type %s</entry>
+ </row>
+ <row>
+ <entry>conversionError</entry>
+ <entry>stringToVisual</entry>
+ <entry>Cannot find Visual of class %s for display %s</entry>
+ </row>
+ <row>
+ <entry>conversionFailed</entry>
+ <entry>xtConvertVarToArgList</entry>
+ <entry>Type conversion failed</entry>
+ </row>
+ <row>
+ <entry>conversionFailed</entry>
+ <entry>xtGetTypedArg</entry>
+ <entry>Type conversion (%s to %s) failed for widget '%s'</entry>
+ </row>
+ <row>
+ <entry>displayError</entry>
+ <entry>invalidDisplay</entry>
+ <entry>Can't find display structure</entry>
+ </row>
+ <row>
+ <entry>grabError</entry>
+ <entry>xtAddGrab</entry>
+ <entry>XtAddGrab requires exclusive grab if spring_loaded is TRUE</entry>
+ </row>
+ <row>
+ <entry>grabError</entry>
+ <entry>xtRemoveGrab</entry>
+ <entry>XtRemoveGrab asked to remove a widget not on the list</entry>
+ </row>
+ <row>
+ <entry>initializationError</entry>
+ <entry>xtInitialize</entry>
+ <entry>Initializing Resource Lists twice</entry>
+ </row>
+ <row>
+ <entry>insufficientSpace</entry>
+ <entry>xtGetTypedArg</entry>
+ <entry>Insufficient space for converted type '%s' in widget '%s'</entry>
+ </row>
+ <row>
+ <entry>internalError</entry>
+ <entry>shell</entry>
+ <entry>Shell's window manager interaction is broken</entry>
+ </row>
+ <row>
+ <entry>invalidAddressMode</entry>
+ <entry>computeArgs</entry>
+ <entry>Conversion arguments for widget '%s' contain an unsupported address mode</entry>
+ </row>
+ <row>
+ <entry>invalidArgCount</entry>
+ <entry>getResources</entry>
+ <entry>argument count &gt; 0 on NULL argument list</entry>
+ </row>
+ <row>
+ <entry>invalidCallbackList</entry>
+ <entry>xtAddCallback</entry>
+ <entry>Cannot find callback list in XtAddCallback</entry>
+ </row>
+ <row>
+ <entry>invalidCallbackList</entry>
+ <entry>xtAddCallback</entry>
+ <entry>Cannot find callback list in XtAddCallbacks</entry>
+ </row>
+ <row>
+ <entry>invalidCallbackList</entry>
+ <entry>xtCallCallback</entry>
+ <entry>Cannot find callback list in XtCallCallbacks</entry>
+ </row>
+ <row>
+ <entry>invalidCallbackList</entry>
+ <entry>xtRemoveAllCallback</entry>
+ <entry>Cannot find callback list in XtRemoveAllCallbacks</entry>
+ </row>
+ <row>
+ <entry>invalidCallbackList</entry>
+ <entry>xtRemoveCallback</entry>
+ <entry>Cannot find callback list in XtRemoveCallbacks</entry>
+ </row>
+ <row>
+ <entry>invalidChild</entry>
+ <entry>xtChangeManagedSet</entry>
+ <entry>Null child passed to UnmanageChildren</entry>
+ </row>
+ <row>
+ <entry>invalidChild</entry>
+ <entry>xtManageChildren</entry>
+ <entry>null child passed to ManageChildren</entry>
+ </row>
+ <row>
+ <entry>invalidChild</entry>
+ <entry>xtManageChildren</entry>
+ <entry>null child passed to XtManageChildren</entry>
+ </row>
+ <row>
+ <entry>invalidChild</entry>
+ <entry>xtUnmanageChildren</entry>
+ <entry>Null child passed to XtUnmanageChildren</entry>
+ </row>
+ <row>
+ <entry>invalidChild</entry>
+ <entry>xtUnmanageChildren</entry>
+ <entry>Null child found in argument list to unmanage</entry>
+ </row>
+ <row>
+ <entry>invalidDepth</entry>
+ <entry>setValues</entry>
+ <entry>Can't change widget depth</entry>
+ </row>
+ <row>
+ <entry>invalidExtension</entry>
+ <entry>xtCreateWidget</entry>
+ <entry>widget "%s" class %s has invalid CompositeClassExtension record</entry>
+ </row>
+ <row>
+ <entry>invalidExtension</entry>
+ <entry>xtCreateWidget</entry>
+ <entry>widget class %s has invalid ConstraintClassExtension record</entry>
+ </row>
+ <row>
+ <entry>invalidGrab</entry>
+ <entry>ungrabKeyOrButton</entry>
+ <entry>Attempt to remove nonexistent passive grab</entry>
+ </row>
+ <row>
+ <entry>invalidGrabKind</entry>
+ <entry>xtPopup</entry>
+ <entry>grab kind argument has invalid value; XtGrabNone assumed</entry>
+ </row>
+ <row>
+ <entry>invalidParameters</entry>
+ <entry>freeTranslations</entry>
+ <entry>Freeing XtTranslations requires no extra arguments</entry>
+ </row>
+ <row>
+ <entry>invalidParameters</entry>
+ <entry>mergeTranslations</entry>
+ <entry>MergeTM to TranslationTable needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>invalidParameters</entry>
+ <entry>xtMenuPopdown</entry>
+ <entry>XtMenuPopdown called with num_params != 0 or 1</entry>
+ </row>
+ <row>
+ <entry>invalidParameters</entry>
+ <entry>xtMenuPopupAction</entry>
+ <entry>MenuPopup wants exactly one argument</entry>
+ </row>
+ <row>
+ <entry>invalidParent</entry>
+ <entry>xtCopyFromParent</entry>
+ <entry>CopyFromParent must have non-NULL parent</entry>
+ </row>
+ <row>
+ <entry>invalidPopup</entry>
+ <entry>xtMenuPopup</entry>
+ <entry>Can't find popup widget "%s" in XtMenuPopup</entry>
+ </row>
+ <row>
+ <entry>invalidPopup</entry>
+ <entry>xtMenuPopdown</entry>
+ <entry>Can't find popup in widget "%s" in XtMenuPopdown</entry>
+ </row>
+ <row>
+ <entry>invalidPopup</entry>
+ <entry>unsupportedOperation</entry>
+ <entry>Pop-up menu creation is only supported on ButtonPress, KeyPress or EnterNotify events.</entry>
+ </row>
+ <row>
+ <entry>invalidPopup</entry>
+ <entry>unsupportedOperation</entry>
+ <entry>Pop-up menu creation is only supported on Button, Key or EnterNotify events.</entry>
+ </row>
+ <row>
+ <entry>invalidProcedure</entry>
+ <entry>deleteChild</entry>
+ <entry>null delete_child procedure for class %s in XtDestroy</entry>
+ </row>
+ <row>
+ <entry>invalidProcedure</entry>
+ <entry>inputHandler</entry>
+ <entry>XtRemoveInput: Input handler not found</entry>
+ </row>
+ <row>
+ <entry>invalidProcedure</entry>
+ <entry>set_values_almost</entry>
+ <entry>set_values_almost procedure shouldn't be NULL</entry>
+ </row>
+ <row>
+ <entry>invalidResourceCount</entry>
+ <entry>getResources</entry>
+ <entry>resource count &gt; 0 on NULL resource list</entry>
+ </row>
+ <row>
+ <entry>invalidResourceName</entry>
+ <entry>computeArgs</entry>
+ <entry>Cannot find resource name %s as argument to conversion</entry>
+ </row>
+ <row>
+ <entry>invalidShell</entry>
+ <entry>xtTranslateCoords</entry>
+ <entry>Widget has no shell ancestor</entry>
+ </row>
+ <row>
+ <entry>invalidSizeOverride</entry>
+ <entry>xtDependencies</entry>
+ <entry>Representation size %d must match superclass's to override %s</entry>
+ </row>
+ <row>
+ <entry>missingCharsetList</entry>
+ <entry>cvtStringToFontSet</entry>
+ <entry>Missing charsets in String to FontSet conversion</entry>
+ </row>
+ <row>
+ <entry>noActionProc</entry>
+ <entry>xtCallActionProc</entry>
+ <entry>No action proc named "%s" is registered for widget "%s"</entry>
+ </row>
+ <row>
+ <entry>noColormap</entry>
+ <entry>cvtStringToPixel</entry>
+ <entry>Cannot allocate colormap entry for "%s"</entry>
+ </row>
+ <row>
+ <entry>noFont</entry>
+ <entry>cvtStringToFont</entry>
+ <entry>Unable to load any usable ISO8859-1 font</entry>
+ </row>
+ <row>
+ <entry>noFont</entry>
+ <entry>cvtStringToFontSet</entry>
+ <entry>Unable to load any usable fontset</entry>
+ </row>
+ <row>
+ <entry>noFont</entry>
+ <entry>cvtStringToFontStruct</entry>
+ <entry>Unable to load any usable ISO8859-1 font</entry>
+ </row>
+ <row>
+ <entry>notInConvertSelection</entry>
+ <entry>xtGetSelectionRequest</entry>
+ <entry>XtGetSelectionRequest or XtGetSelectionParameters called for widget "%s" outside of ConvertSelection proc</entry>
+ </row>
+ <row>
+ <entry>notRectObj</entry>
+ <entry>xtChangeManagedSet</entry>
+ <entry>child "%s", class %s is not a RectObj</entry>
+ </row>
+ <row>
+ <entry>notRectObj</entry>
+ <entry>xtManageChildren</entry>
+ <entry>child "%s", class %s is not a RectObj</entry>
+ </row>
+ <row>
+ <entry>nullWidget</entry>
+ <entry>xtConvertVarToArgList</entry>
+ <entry>XtVaTypedArg conversion needs non-NULL widget handle</entry>
+ </row>
+ <row>
+ <entry>r3versionMismatch</entry>
+ <entry>widget</entry>
+ <entry>Shell Widget class %s binary compiled for R3</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>nullTable</entry>
+ <entry>Can't remove accelerators from NULL table</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>nullTable</entry>
+ <entry>Tried to remove nonexistent accelerators</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>ambiguousActions</entry>
+ <entry>Overriding earlier translation manager actions.</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>newActions</entry>
+ <entry>New actions are:%s</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>nullTable</entry>
+ <entry>table to (un)merge must not be null</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>nullTable</entry>
+ <entry>Can't translate event through NULL table</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>oldActions</entry>
+ <entry>Previous entry was: %s %s</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>unboundActions</entry>
+ <entry>Actions not found: %s</entry>
+ </row>
+ <row>
+ <entry>translationError</entry>
+ <entry>xtTranslateInitialize</entry>
+ <entry>Initializing Translation manager twice.</entry>
+ </row>
+ <row>
+ <entry>translationParseError</entry>
+ <entry>missingComma</entry>
+ <entry> ... possibly due to missing ',' in event sequence.</entry>
+ </row>
+ <row>
+ <entry>translationParseError</entry>
+ <entry>nonLatin1</entry>
+ <entry> ... probably due to non-Latin1 character in quoted string</entry>
+ </row>
+ <row>
+ <entry>translationParseError</entry>
+ <entry>parseError</entry>
+ <entry>translation table syntax error: %s</entry>
+ </row>
+ <row>
+ <entry>translationParseError</entry>
+ <entry>parseString</entry>
+ <entry>Missing '"'.</entry>
+ </row>
+ <row>
+ <entry>translationParseError</entry>
+ <entry>showLine</entry>
+ <entry> ... found while parsing '%s'</entry>
+ </row>
+ <row>
+ <entry>typeConversionError</entry>
+ <entry>noConverter</entry>
+ <entry>No type converter registered for '%s' to '%s' conversion.</entry>
+ </row>
+ <row>
+ <entry>unknownType</entry>
+ <entry>xtConvertVarToArgList</entry>
+ <entry>Unable to find type of resource for conversion</entry>
+ </row>
+ <row>
+ <entry>unknownType</entry>
+ <entry>xtGetTypedArg</entry>
+ <entry>Unable to find type of resource for conversion</entry>
+ </row>
+ <row>
+ <entry>versionMismatch</entry>
+ <entry>widget</entry>
+ <entry>Widget class %s version mismatch (recompilation needed):\\n widget %d vs. intrinsics %d.</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntOrPixelToXColor</entry>
+ <entry>Pixel to color conversion needs screen and colormap arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToBool</entry>
+ <entry>Integer to Bool conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToBoolean</entry>
+ <entry>Integer to Boolean conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToFloat</entry>
+ <entry>Integer to Float conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToFont</entry>
+ <entry>Integer to Font conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToPixel</entry>
+ <entry>Integer to Pixel conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToPixmap</entry>
+ <entry>Integer to Pixmap conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToShort</entry>
+ <entry>Integer to Short conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtIntToUnsignedChar</entry>
+ <entry>Integer to UnsignedChar conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToAcceleratorTable</entry>
+ <entry>String to AcceleratorTable conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToAtom</entry>
+ <entry>String to Atom conversion needs Display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToBool</entry>
+ <entry>String to Bool conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToBoolean</entry>
+ <entry>String to Boolean conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToCommandArgArray</entry>
+ <entry>String to CommandArgArray conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToCursor</entry>
+ <entry>String to cursor conversion needs display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToDimension</entry>
+ <entry>String to Dimension conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToDirectoryString</entry>
+ <entry>String to DirectoryString conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToDisplay</entry>
+ <entry>String to Display conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToFile</entry>
+ <entry>String to File conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToFloat</entry>
+ <entry>String to Float conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToFont</entry>
+ <entry>String to font conversion needs display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToFontSet</entry>
+ <entry>String to FontSet conversion needs display and locale arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToFontStruct</entry>
+ <entry>String to font conversion needs display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToGravity</entry>
+ <entry>String to Gravity conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToInitialState</entry>
+ <entry>String to InitialState conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToInt</entry>
+ <entry>String to Integer conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToPixel</entry>
+ <entry>String to pixel conversion needs screen and colormap arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToRestartStyle</entry>
+ <entry>String to RestartStyle conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToShort</entry>
+ <entry>String to Integer conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToTranslationTable</entry>
+ <entry>String to TranslationTable conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToUnsignedChar</entry>
+ <entry>String to Integer conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtStringToVisual</entry>
+ <entry>String to Visual conversion needs screen and depth arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>cvtXColorToPixel</entry>
+ <entry>Color to Pixel conversion needs no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeCursor</entry>
+ <entry>Free Cursor requires display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeDirectoryString</entry>
+ <entry>Free Directory String requires no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeFile</entry>
+ <entry>Free File requires no extra arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeFont</entry>
+ <entry>Free Font needs display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeFontSet</entry>
+ <entry>FreeFontSet needs display and locale arguments</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freeFontStruct</entry>
+ <entry>Free FontStruct requires display argument</entry>
+ </row>
+ <row>
+ <entry>wrongParameters</entry>
+ <entry>freePixel</entry>
+ <entry>Freeing a pixel requires screen and colormap arguments</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</appendix>
diff --git a/libXt/specs/appE b/libXt/specs/appE
deleted file mode 100644
index 1ce7270bf..000000000
--- a/libXt/specs/appE
+++ /dev/null
@@ -1,606 +0,0 @@
-.\" $Xorg: appE,v 1.3 2000/08/17 19:42:48 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix E\fP\s-1
-
-\s+1\fB\fBDefined Strings\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix E \(em Defined Strings\fP
-.XE
-.LP
-The
-.PN StringDefs.h
-header file contains definitions for the following resource name,
-class, and representation type symbolic constants.
-.IN "String Constants" "resource names"
-.LP
-Resource names:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.IN "String Constants" "resource classes"
-.LP
-Resource classes:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.IN "String Constants" "representation types"
-.LP
-Resource representation types:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Boolean enumeration constants:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtEoff "off"
-XtEfalse "false"
-XtEno "no"
-XtEon "on"
-XtEtrue "true"
-XtEyes "yes"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Orientation enumeration constants:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtEvertical "vertical"
-XtEhorizontal "horizontal"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Text edit enumeration constants:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtEtextRead "read"
-XtEtextAppend "append"
-XtEtextEdit "edit"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Color enumeration constants:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtExtdefaultbackground "xtdefaultbackground"
-XtExtdefaultforeground "xtdefaultforeground"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Font constant:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtExtdefaultfont "xtdefaultfont"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-Hooks for External Agents constants:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.LP
-The
-.PN Shell.h
-header file contains definitions for the following resource name,
-class, and representation type symbolic constants.
-.IN "String Constants" "resource names"
-.LP
-Resource names:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.IN "String Constants" "resource classes"
-.LP
-Resource classes:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-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"
-.sp 6p
-_
-.TE
-.sp 6p
-.IN "String Constants" "representation types"
-.LP
-Resource representation types:
-.TS
-lw(2i) lw(2.5i).
-_
-.sp 6p
-Symbol Definition
-.sp 6p
-_
-.sp 6p
-XtRAtom "Atom"
-.sp 6p
-_
-.TE
diff --git a/libXt/specs/appE.xml b/libXt/specs/appE.xml
new file mode 100644
index 000000000..574cf1534
--- /dev/null
+++ b/libXt/specs/appE.xml
@@ -0,0 +1,1703 @@
+<appendix id='Defined_Strings'>
+<title>Defined Strings</title>
+
+<para>
+The <function>StringDefs.h</function>
+header file contains definitions for the following resource name,
+class, and representation type symbolic constants.
+</para>
+
+<para><emphasis role='strong'>Resource names:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNaccelerators</entry>
+ <entry>"accelerators"</entry>
+ </row>
+ <row>
+ <entry>XtNallowHoriz</entry>
+ <entry>"allowHoriz"</entry>
+ </row>
+ <row>
+ <entry>XtNallowVert</entry>
+ <entry>"allowVert"</entry>
+ </row>
+ <row>
+ <entry>XtNancestorSensitive</entry>
+ <entry>"ancestorSensitive"</entry>
+ </row>
+ <row>
+ <entry>XtNbackground</entry>
+ <entry>"background"</entry>
+ </row>
+ <row>
+ <entry>XtNbackgroundPixmap</entry>
+ <entry>"backgroundPixmap"</entry>
+ </row>
+ <row>
+ <entry>XtNbitmap</entry>
+ <entry>"bitmap"</entry>
+ </row>
+ <row>
+ <entry>XtNborder</entry>
+ <entry>"borderColor"</entry>
+ </row>
+ <row>
+ <entry>XtNborderColor</entry>
+ <entry>"borderColor"</entry>
+ </row>
+ <row>
+ <entry>XtNborderPixmap</entry>
+ <entry>"borderPixmap"</entry>
+ </row>
+ <row>
+ <entry>XtNborderWidth</entry>
+ <entry>"borderWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNcallback</entry>
+ <entry>"callback"</entry>
+ </row>
+ <row>
+ <entry>XtNchangeHook</entry>
+ <entry>"changeHook"</entry>
+ </row>
+ <row>
+ <entry>XtNchildren</entry>
+ <entry>"children"</entry>
+ </row>
+ <row>
+ <entry>XtNcolormap</entry>
+ <entry>"colormap"</entry>
+ </row>
+ <row>
+ <entry>XtNconfigureHook</entry>
+ <entry>"configureHook"</entry>
+ </row>
+ <row>
+ <entry>XtNcreateHook</entry>
+ <entry>"createHook"</entry>
+ </row>
+ <row>
+ <entry>XtNdepth</entry>
+ <entry>"depth"</entry>
+ </row>
+ <row>
+ <entry>XtNdestroyCallback</entry>
+ <entry>"destroyCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNdestroyHook</entry>
+ <entry>"destroyHook"</entry>
+ </row>
+ <row>
+ <entry>XtNeditType</entry>
+ <entry>"editType"</entry>
+ </row>
+ <row>
+ <entry>XtNfile</entry>
+ <entry>"file"</entry>
+ </row>
+ <row>
+ <entry>XtNfont</entry>
+ <entry>"font"</entry>
+ </row>
+ <row>
+ <entry>XtNfontSet</entry>
+ <entry>"fontSet"</entry>
+ </row>
+ <row>
+ <entry>XtNforceBars</entry>
+ <entry>"forceBars"</entry>
+ </row>
+ <row>
+ <entry>XtNforeground</entry>
+ <entry>"foreground"</entry>
+ </row>
+ <row>
+ <entry>XtNfunction</entry>
+ <entry>"function"</entry>
+ </row>
+ <row>
+ <entry>XtNgeometryHook</entry>
+ <entry>"geometryHook"</entry>
+ </row>
+ <row>
+ <entry>XtNheight</entry>
+ <entry>"height"</entry>
+ </row>
+ <row>
+ <entry>XtNhighlight</entry>
+ <entry>"highlight"</entry>
+ </row>
+ <row>
+ <entry>XtNhSpace</entry>
+ <entry>"hSpace"</entry>
+ </row>
+ <row>
+ <entry>XtNindex</entry>
+ <entry>"index"</entry>
+ </row>
+ <row>
+ <entry>XtNinitialResourcesPersistent</entry>
+ <entry>"initialResourcesPersistent"</entry>
+ </row>
+ <row>
+ <entry>XtNinnerHeight</entry>
+ <entry>"innerHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNinnerWidth</entry>
+ <entry>"innerWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNinnerWindow</entry>
+ <entry>"innerWindow"</entry>
+ </row>
+ <row>
+ <entry>XtNinsertPosition</entry>
+ <entry>"insertPosition"</entry>
+ </row>
+ <row>
+ <entry>XtNinternalHeight</entry>
+ <entry>"internalHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNinternalWidth</entry>
+ <entry>"internalWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNjumpProc</entry>
+ <entry>"jumpProc"</entry>
+ </row>
+ <row>
+ <entry>XtNjustify</entry>
+ <entry>"justify"</entry>
+ </row>
+ <row>
+ <entry>XtNknobHeight</entry>
+ <entry>"knobHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNknobIndent</entry>
+ <entry>"knobIndent"</entry>
+ </row>
+ <row>
+ <entry>XtNknobPixel</entry>
+ <entry>"knobPixel"</entry>
+ </row>
+ <row>
+ <entry>XtNknobWidth</entry>
+ <entry>"knobWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNlabel</entry>
+ <entry>"label"</entry>
+ </row>
+ <row>
+ <entry>XtNlength</entry>
+ <entry>"length"</entry>
+ </row>
+ <row>
+ <entry>XtNlowerRight</entry>
+ <entry>"lowerRight"</entry>
+ </row>
+ <row>
+ <entry>XtNmappedWhenManaged</entry>
+ <entry>"mappedWhenManaged"</entry>
+ </row>
+ <row>
+ <entry>XtNmenuEntry</entry>
+ <entry>"menuEntry"</entry>
+ </row>
+ <row>
+ <entry>XtNname</entry>
+ <entry>"name"</entry>
+ </row>
+ <row>
+ <entry>XtNnotify</entry>
+ <entry>"notify"</entry>
+ </row>
+ <row>
+ <entry>XtNnumChildren</entry>
+ <entry>"numChildren"</entry>
+ </row>
+ <row>
+ <entry>XtNnumShells</entry>
+ <entry>"numShells"</entry>
+ </row>
+ <row>
+ <entry>XtNorientation</entry>
+ <entry>"orientation"</entry>
+ </row>
+ <row>
+ <entry>XtNparameter</entry>
+ <entry>"parameter"</entry>
+ </row>
+ <row>
+ <entry>XtNpixmap</entry>
+ <entry>"pixmap"</entry>
+ </row>
+ <row>
+ <entry>XtNpopupCallback</entry>
+ <entry>"popupCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNpopdownCallback</entry>
+ <entry>"popdownCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNresize</entry>
+ <entry>"resize"</entry>
+ </row>
+ <row>
+ <entry>XtNreverseVideo</entry>
+ <entry>"reverseVideo"</entry>
+ </row>
+ <row>
+ <entry>XtNscreen</entry>
+ <entry>"screen"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollProc</entry>
+ <entry>"scrollProc"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollDCursor</entry>
+ <entry>"scrollDCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollHCursor</entry>
+ <entry>"scrollHCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollLCursor</entry>
+ <entry>"scrollLCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollRCursor</entry>
+ <entry>"scrollRCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollUCursor</entry>
+ <entry>"scrollUCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNscrollVCursor</entry>
+ <entry>"scrollVCursor"</entry>
+ </row>
+ <row>
+ <entry>XtNselection</entry>
+ <entry>"selection"</entry>
+ </row>
+ <row>
+ <entry>XtNselectionArray</entry>
+ <entry>"selectionArray"</entry>
+ </row>
+ <row>
+ <entry>XtNsensitive</entry>
+ <entry>"sensitive"</entry>
+ </row>
+ <row>
+ <entry>XtNsession</entry>
+ <entry>"session"</entry>
+ </row>
+ <row>
+ <entry>XtNshells</entry>
+ <entry>"shells"</entry>
+ </row>
+ <row>
+ <entry>XtNshown</entry>
+ <entry>"shown"</entry>
+ </row>
+ <row>
+ <entry>XtNspace</entry>
+ <entry>"space"</entry>
+ </row>
+ <row>
+ <entry>XtNstring</entry>
+ <entry>"string"</entry>
+ </row>
+ <row>
+ <entry>XtNtextOptions</entry>
+ <entry>"textOptions"</entry>
+ </row>
+ <row>
+ <entry>XtNtextSink</entry>
+ <entry>"textSink"</entry>
+ </row>
+ <row>
+ <entry>XtNtextSource</entry>
+ <entry>"textSource"</entry>
+ </row>
+ <row>
+ <entry>XtNthickness</entry>
+ <entry>"thickness"</entry>
+ </row>
+ <row>
+ <entry>XtNthumb</entry>
+ <entry>"thumb"</entry>
+ </row>
+ <row>
+ <entry>XtNthumbProc</entry>
+ <entry>"thumbProc"</entry>
+ </row>
+ <row>
+ <entry>XtNtop</entry>
+ <entry>"top"</entry>
+ </row>
+ <row>
+ <entry>XtNtranslations</entry>
+ <entry>"translations"</entry>
+ </row>
+ <row>
+ <entry>XtNunrealizeCallback</entry>
+ <entry>"unrealizeCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNupdate</entry>
+ <entry>"update"</entry>
+ </row>
+ <row>
+ <entry>XtNuseBottom</entry>
+ <entry>"useBottom"</entry>
+ </row>
+ <row>
+ <entry>XtNuseRight</entry>
+ <entry>"useRight"</entry>
+ </row>
+ <row>
+ <entry>XtNvalue</entry>
+ <entry>"value"</entry>
+ </row>
+ <row>
+ <entry>XtNvSpace</entry>
+ <entry>"vSpace"</entry>
+ </row>
+ <row>
+ <entry>XtNwidth</entry>
+ <entry>"width"</entry>
+ </row>
+ <row>
+ <entry>XtNwindow</entry>
+ <entry>"window"</entry>
+ </row>
+ <row>
+ <entry>XtNx</entry>
+ <entry>"x"</entry>
+ </row>
+ <row>
+ <entry>XtNy</entry>
+ <entry>"y"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Resource classes:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtCAccelerators</entry>
+ <entry>"Accelerators"</entry>
+ </row>
+ <row>
+ <entry>XtCBackground</entry>
+ <entry>"Background"</entry>
+ </row>
+ <row>
+ <entry>XtCBitmap</entry>
+ <entry>"Bitmap"</entry>
+ </row>
+ <row>
+ <entry>XtCBoolean</entry>
+ <entry>"Boolean"</entry>
+ </row>
+ <row>
+ <entry>XtCBorderColor</entry>
+ <entry>"BorderColor"</entry>
+ </row>
+ <row>
+ <entry>XtCBorderWidth</entry>
+ <entry>"BorderWidth"</entry>
+ </row>
+ <row>
+ <entry>XtCCallback</entry>
+ <entry>"Callback"</entry>
+ </row>
+ <row>
+ <entry>XtCColormap</entry>
+ <entry>"Colormap"</entry>
+ </row>
+ <row>
+ <entry>XtCColor</entry>
+ <entry>"Color"</entry>
+ </row>
+ <row>
+ <entry>XtCCursor</entry>
+ <entry>"Cursor"</entry>
+ </row>
+ <row>
+ <entry>XtCDepth</entry>
+ <entry>"Depth"</entry>
+ </row>
+ <row>
+ <entry>XtCEditType</entry>
+ <entry>"EditType"</entry>
+ </row>
+ <row>
+ <entry>XtCEventBindings</entry>
+ <entry>"EventBindings"</entry>
+ </row>
+ <row>
+ <entry>XtCFile</entry>
+ <entry>"File"</entry>
+ </row>
+ <row>
+ <entry>XtCFont</entry>
+ <entry>"Font"</entry>
+ </row>
+ <row>
+ <entry>XtCFontSet</entry>
+ <entry>"FontSet"</entry>
+ </row>
+ <row>
+ <entry>XtCForeground</entry>
+ <entry>"Foreground"</entry>
+ </row>
+ <row>
+ <entry>XtCFraction</entry>
+ <entry>"Fraction"</entry>
+ </row>
+ <row>
+ <entry>XtCFunction</entry>
+ <entry>"Function"</entry>
+ </row>
+ <row>
+ <entry>XtCHeight</entry>
+ <entry>"Height"</entry>
+ </row>
+ <row>
+ <entry>XtCHSpace</entry>
+ <entry>"HSpace"</entry>
+ </row>
+ <row>
+ <entry>XtCIndex</entry>
+ <entry>"Index"</entry>
+ </row>
+ <row>
+ <entry>XtCInitialResourcesPersistent</entry>
+ <entry>"InitialResourcesPersistent"</entry>
+ </row>
+ <row>
+ <entry>XtCInsertPosition</entry>
+ <entry>"InsertPosition"</entry>
+ </row>
+ <row>
+ <entry>XtCInterval</entry>
+ <entry>"Interval"</entry>
+ </row>
+ <row>
+ <entry>XtCJustify</entry>
+ <entry>"Justify"</entry>
+ </row>
+ <row>
+ <entry>XtCKnobIndent</entry>
+ <entry>"KnobIndent"</entry>
+ </row>
+ <row>
+ <entry>XtCKnobPixel</entry>
+ <entry>"KnobPixel"</entry>
+ </row>
+ <row>
+ <entry>XtCLabel</entry>
+ <entry>"Label"</entry>
+ </row>
+ <row>
+ <entry>XtCLength</entry>
+ <entry>"Length"</entry>
+ </row>
+ <row>
+ <entry>XtCMappedWhenManaged</entry>
+ <entry>"MappedWhenManaged"</entry>
+ </row>
+ <row>
+ <entry>XtCMargin</entry>
+ <entry>"Margin"</entry>
+ </row>
+ <row>
+ <entry>XtCMenuEntry</entry>
+ <entry>"MenuEntry"</entry>
+ </row>
+ <row>
+ <entry>XtCNotify</entry>
+ <entry>"Notify"</entry>
+ </row>
+ <row>
+ <entry>XtCOrientation</entry>
+ <entry>"Orientation"</entry>
+ </row>
+ <row>
+ <entry>XtCParameter</entry>
+ <entry>"Parameter"</entry>
+ </row>
+ <row>
+ <entry>XtCPixmap</entry>
+ <entry>"Pixmap"</entry>
+ </row>
+ <row>
+ <entry>XtCPosition</entry>
+ <entry>"Position"</entry>
+ </row>
+ <row>
+ <entry>XtCReadOnly</entry>
+ <entry>"ReadOnly"</entry>
+ </row>
+ <row>
+ <entry>XtCResize</entry>
+ <entry>"Resize"</entry>
+ </row>
+ <row>
+ <entry>XtCReverseVideo</entry>
+ <entry>"ReverseVideo"</entry>
+ </row>
+ <row>
+ <entry>XtCScreen</entry>
+ <entry>"Screen"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollProc</entry>
+ <entry>"ScrollProc"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollDCursor</entry>
+ <entry>"ScrollDCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollHCursor</entry>
+ <entry>"ScrollHCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollLCursor</entry>
+ <entry>"ScrollLCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollRCursor</entry>
+ <entry>"ScrollRCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollUCursor</entry>
+ <entry>"ScrollUCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCScrollVCursor</entry>
+ <entry>"ScrollVCursor"</entry>
+ </row>
+ <row>
+ <entry>XtCSelection</entry>
+ <entry>"Selection"</entry>
+ </row>
+ <row>
+ <entry>XtCSelectionArray</entry>
+ <entry>"SelectionArray"</entry>
+ </row>
+ <row>
+ <entry>XtCSensitive</entry>
+ <entry>"Sensitive"</entry>
+ </row>
+ <row>
+ <entry>XtCSession</entry>
+ <entry>"Session"</entry>
+ </row>
+ <row>
+ <entry>XtCSpace</entry>
+ <entry>"Space"</entry>
+ </row>
+ <row>
+ <entry>XtCString</entry>
+ <entry>"String"</entry>
+ </row>
+ <row>
+ <entry>XtCTextOptions</entry>
+ <entry>"TextOptions"</entry>
+ </row>
+ <row>
+ <entry>XtCTextPosition</entry>
+ <entry>"TextPosition"</entry>
+ </row>
+ <row>
+ <entry>XtCTextSink</entry>
+ <entry>"TextSink"</entry>
+ </row>
+ <row>
+ <entry>XtCTextSource</entry>
+ <entry>"TextSource"</entry>
+ </row>
+ <row>
+ <entry>XtCThickness</entry>
+ <entry>"Thickness"</entry>
+ </row>
+ <row>
+ <entry>XtCThumb</entry>
+ <entry>"Thumb"</entry>
+ </row>
+ <row>
+ <entry>XtCTranslations</entry>
+ <entry>"Translations"</entry>
+ </row>
+ <row>
+ <entry>XtCValue</entry>
+ <entry>"Value"</entry>
+ </row>
+ <row>
+ <entry>XtCVSpace</entry>
+ <entry>"VSpace"</entry>
+ </row>
+ <row>
+ <entry>XtCWidth</entry>
+ <entry>"Width"</entry>
+ </row>
+ <row>
+ <entry>XtCWindow</entry>
+ <entry>"Window"</entry>
+ </row>
+ <row>
+ <entry>XtCX</entry>
+ <entry>"X"</entry>
+ </row>
+ <row>
+ <entry>XtCY</entry>
+ <entry>"Y"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Resource representation types:</emphasis></para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtRAcceleratorTable</entry>
+ <entry>"AcceleratorTable"</entry>
+ </row>
+ <row>
+ <entry>XtRAtom</entry>
+ <entry>"Atom"</entry>
+ </row>
+ <row>
+ <entry>XtRBitmap</entry>
+ <entry>"Bitmap"</entry>
+ </row>
+ <row>
+ <entry>XtRBool</entry>
+ <entry>"Bool"</entry>
+ </row>
+ <row>
+ <entry>XtRBoolean</entry>
+ <entry>"Boolean"</entry>
+ </row>
+ <row>
+ <entry>XtRCallback</entry>
+ <entry>"Callback"</entry>
+ </row>
+ <row>
+ <entry>XtRCallProc</entry>
+ <entry>"CallProc"</entry>
+ </row>
+ <row>
+ <entry>XtRCardinal</entry>
+ <entry>"Cardinal"</entry>
+ </row>
+ <row>
+ <entry>XtRColor</entry>
+ <entry>"Color"</entry>
+ </row>
+ <row>
+ <entry>XtRColormap</entry>
+ <entry>"Colormap"</entry>
+ </row>
+ <row>
+ <entry>XtRCommandArgArray</entry>
+ <entry>"CommandArgArray"</entry>
+ </row>
+ <row>
+ <entry>XtRCursor</entry>
+ <entry>"Cursor"</entry>
+ </row>
+ <row>
+ <entry>XtRDimension</entry>
+ <entry>"Dimension"</entry>
+ </row>
+ <row>
+ <entry>XtRDirectoryString</entry>
+ <entry>"DirectoryString"</entry>
+ </row>
+ <row>
+ <entry>XtRDisplay</entry>
+ <entry>"Display"</entry>
+ </row>
+ <row>
+ <entry>XtREditMode</entry>
+ <entry>"EditMode"</entry>
+ </row>
+ <row>
+ <entry>XtREnum</entry>
+ <entry>"Enum"</entry>
+ </row>
+ <row>
+ <entry>XtREnvironmentArray</entry>
+ <entry>"EnvironmentArray"</entry>
+ </row>
+ <row>
+ <entry>XtRFile</entry>
+ <entry>"File"</entry>
+ </row>
+ <row>
+ <entry>XtRFloat</entry>
+ <entry>"Float"</entry>
+ </row>
+ <row>
+ <entry>XtRFont</entry>
+ <entry>"Font"</entry>
+ </row>
+ <row>
+ <entry>XtRFontSet</entry>
+ <entry>"FontSet"</entry>
+ </row>
+ <row>
+ <entry>XtRFontStruct</entry>
+ <entry>"FontStruct"</entry>
+ </row>
+ <row>
+ <entry>XtRFunction</entry>
+ <entry>"Function"</entry>
+ </row>
+ <row>
+ <entry>XtRGeometry</entry>
+ <entry>"Geometry"</entry>
+ </row>
+ <row>
+ <entry>XtRGravity</entry>
+ <entry>"Gravity"</entry>
+ </row>
+ <row>
+ <entry>XtRImmediate</entry>
+ <entry>"Immediate"</entry>
+ </row>
+ <row>
+ <entry>XtRInitialState</entry>
+ <entry>"InitialState"</entry>
+ </row>
+ <row>
+ <entry>XtRInt</entry>
+ <entry>"Int"</entry>
+ </row>
+ <row>
+ <entry>XtRJustify</entry>
+ <entry>"Justify"</entry>
+ </row>
+ <row>
+ <entry>XtRLongBoolean</entry>
+ <entry>XtRBool</entry>
+ </row>
+ <row>
+ <entry>XtRObject</entry>
+ <entry>"Object"</entry>
+ </row>
+ <row>
+ <entry>XtROrientation</entry>
+ <entry>"Orientation"</entry>
+ </row>
+ <row>
+ <entry>XtRPixel</entry>
+ <entry>"Pixel"</entry>
+ </row>
+ <row>
+ <entry>XtRPixmap</entry>
+ <entry>"Pixmap"</entry>
+ </row>
+ <row>
+ <entry>XtRPointer</entry>
+ <entry>"Pointer"</entry>
+ </row>
+ <row>
+ <entry>XtRPosition</entry>
+ <entry>"Position"</entry>
+ </row>
+ <row>
+ <entry>XtRRestartStyle</entry>
+ <entry>"RestartStyle"</entry>
+ </row>
+ <row>
+ <entry>XtRScreen</entry>
+ <entry>"Screen"</entry>
+ </row>
+ <row>
+ <entry>XtRShort</entry>
+ <entry>"Short"</entry>
+ </row>
+ <row>
+ <entry>XtRSmcConn</entry>
+ <entry>"SmcConn"</entry>
+ </row>
+ <row>
+ <entry>XtRString</entry>
+ <entry>"String"</entry>
+ </row>
+ <row>
+ <entry>XtRStringArray</entry>
+ <entry>"StringArray"</entry>
+ </row>
+ <row>
+ <entry>XtRStringTable</entry>
+ <entry>"StringTable"</entry>
+ </row>
+ <row>
+ <entry>XtRUnsignedChar</entry>
+ <entry>"UnsignedChar"</entry>
+ </row>
+ <row>
+ <entry>XtRTranslationTable</entry>
+ <entry>"TranslationTable"</entry>
+ </row>
+ <row>
+ <entry>XtRVisual</entry>
+ <entry>"Visual"</entry>
+ </row>
+ <row>
+ <entry>XtRWidget</entry>
+ <entry>"Widget"</entry>
+ </row>
+ <row>
+ <entry>XtRWidgetClass</entry>
+ <entry>"WidgetClass"</entry>
+ </row>
+ <row>
+ <entry>XtRWidgetList</entry>
+ <entry>"WidgetList"</entry>
+ </row>
+ <row>
+ <entry>XtRWindow</entry>
+ <entry>"Window"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Boolean enumeration constants:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtEoff</entry>
+ <entry>"off"</entry>
+ </row>
+ <row>
+ <entry>XtEfalse</entry>
+ <entry>"false"</entry>
+ </row>
+ <row>
+ <entry>XtEno</entry>
+ <entry>"no"</entry>
+ </row>
+ <row>
+ <entry>XtEon</entry>
+ <entry>"on"</entry>
+ </row>
+ <row>
+ <entry>XtEtrue</entry>
+ <entry>"true"</entry>
+ </row>
+ <row>
+ <entry>XtEyes</entry>
+ <entry>"yes"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Orientation enumeration constants:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtEvertical</entry>
+ <entry>"vertical"</entry>
+ </row>
+ <row>
+ <entry>XtEhorizontal</entry>
+ <entry>"horizontal"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Text edit enumeration constants:</emphasis></para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtEtextRead</entry>
+ <entry>"read"</entry>
+ </row>
+ <row>
+ <entry>XtEtextAppend</entry>
+ <entry>"append"</entry>
+ </row>
+ <row>
+ <entry>XtEtextEdit</entry>
+ <entry>"edit"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Color enumeration constants:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' rowsep='0' colsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtExtdefaultbackground</entry>
+ <entry>"xtdefaultbackground"</entry>
+ </row>
+ <row>
+ <entry>XtExtdefaultforeground</entry>
+ <entry>"xtdefaultforeground"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Font constant:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtExtdefaultfont</entry>
+ <entry>"xtdefaultfont"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Hooks for External Agents constants:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtHcreate</entry>
+ <entry>"Xtcreate"</entry>
+ </row>
+ <row>
+ <entry>XtHsetValues</entry>
+ <entry>"Xtsetvalues"</entry>
+ </row>
+ <row>
+ <entry>XtHmanageChildren</entry>
+ <entry>"XtmanageChildren"</entry>
+ </row>
+ <row>
+ <entry>XtHunmanageChildren</entry>
+ <entry>"XtunmanageChildren"</entry>
+ </row>
+ <row>
+ <entry>XtHmanageSet</entry>
+ <entry>"XtmanageSet"</entry>
+ </row>
+ <row>
+ <entry>XtHunmanageSet</entry>
+ <entry>"XtunmanageSet"</entry>
+ </row>
+ <row>
+ <entry>XtHrealizeWidget</entry>
+ <entry>"XtrealizeWidget"</entry>
+ </row>
+ <row>
+ <entry>XtHunrealizeWidget</entry>
+ <entry>"XtunrealizeWidget"</entry>
+ </row>
+ <row>
+ <entry>XtHaddCallback</entry>
+ <entry>"XtaddCallback"</entry>
+ </row>
+ <row>
+ <entry>XtHaddCallbacks</entry>
+ <entry>"XtaddCallbacks"</entry>
+ </row>
+ <row>
+ <entry>XtHremoveCallback</entry>
+ <entry>"XtremoveCallback"</entry>
+ </row>
+ <row>
+ <entry>XtHremoveCallbacks</entry>
+ <entry>"XtremoveCallbacks"</entry>
+ </row>
+ <row>
+ <entry>XtHremoveAllCallbacks</entry>
+ <entry>"XtremoveAllCallbacks"</entry>
+ </row>
+ <row>
+ <entry>XtHaugmentTranslations</entry>
+ <entry>"XtaugmentTranslations"</entry>
+ </row>
+ <row>
+ <entry>XtHoverrideTranslations</entry>
+ <entry>"XtoverrideTranslations"</entry>
+ </row>
+ <row>
+ <entry>XtHuninstallTranslations</entry>
+ <entry>"XtuninstallTranslations"</entry>
+ </row>
+ <row>
+ <entry>XtHsetKeyboardFocus</entry>
+ <entry>"XtsetKeyboardFocus"</entry>
+ </row>
+ <row>
+ <entry>XtHsetWMColormapWindows</entry>
+ <entry>"XtsetWMColormapWindows"</entry>
+ </row>
+ <row>
+ <entry>XtHmapWidget</entry>
+ <entry>"XtmapWidget"</entry>
+ </row>
+ <row>
+ <entry>XtHunmapWidget</entry>
+ <entry>"XtunmapWidget"</entry>
+ </row>
+ <row>
+ <entry>XtHpopup</entry>
+ <entry>"Xtpopup"</entry>
+ </row>
+ <row>
+ <entry>XtHpopupSpringLoaded</entry>
+ <entry>"XtpopupSpringLoaded"</entry>
+ </row>
+ <row>
+ <entry>XtHpopdown</entry>
+ <entry>"Xtpopdown"</entry>
+ </row>
+ <row>
+ <entry>XtHconfigure</entry>
+ <entry>"Xtconfigure"</entry>
+ </row>
+ <row>
+ <entry>XtHpreGeometry</entry>
+ <entry>"XtpreGeometry"</entry>
+ </row>
+ <row>
+ <entry>XtHpostGeometry</entry>
+ <entry>"XtpostGeometry"</entry>
+ </row>
+ <row>
+ <entry>XtHdestroy</entry>
+ <entry>"Xtdestroy"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para>
+The
+<function>Shell.h</function>
+header file contains definitions for the following resource name,
+class, and representation type symbolic constants.
+</para>
+
+<para><emphasis role='strong'>Resource names:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtNallowShellResize</entry>
+ <entry>"allowShellResize"</entry>
+ </row>
+ <row>
+ <entry>XtNargc</entry>
+ <entry>"argc"</entry>
+ </row>
+ <row>
+ <entry>XtNargv</entry>
+ <entry>"argv"</entry>
+ </row>
+ <row>
+ <entry>XtNbaseHeight</entry>
+ <entry>"baseHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNbaseWidth</entry>
+ <entry>"baseWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNcancelCallback</entry>
+ <entry>"cancelCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNclientLeader</entry>
+ <entry>"clientLeader"</entry>
+ </row>
+ <row>
+ <entry>XtNcloneCommand</entry>
+ <entry>"cloneCommand"</entry>
+ </row>
+ <row>
+ <entry>XtNconnection</entry>
+ <entry>"connection"</entry>
+ </row>
+ <row>
+ <entry>XtNcreatePopupChildProc</entry>
+ <entry>"createPopupChildProc"</entry>
+ </row>
+ <row>
+ <entry>XtNcurrentDirectory</entry>
+ <entry>"currentDirectory"</entry>
+ </row>
+ <row>
+ <entry>XtNdieCallback</entry>
+ <entry>"dieCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNdiscardCommand</entry>
+ <entry>"discardCommand"</entry>
+ </row>
+ <row>
+ <entry>XtNenvironment</entry>
+ <entry>"environment"</entry>
+ </row>
+ <row>
+ <entry>XtNerrorCallback</entry>
+ <entry>"errorCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNgeometry</entry>
+ <entry>"geometry"</entry>
+ </row>
+ <row>
+ <entry>XtNheightInc</entry>
+ <entry>"heightInc"</entry>
+ </row>
+ <row>
+ <entry>XtNiconMask</entry>
+ <entry>"iconMask"</entry>
+ </row>
+ <row>
+ <entry>XtNiconName</entry>
+ <entry>"iconName"</entry>
+ </row>
+ <row>
+ <entry>XtNiconNameEncoding</entry>
+ <entry>"iconNameEncoding"</entry>
+ </row>
+ <row>
+ <entry>XtNiconPixmap</entry>
+ <entry>"iconPixmap"</entry>
+ </row>
+ <row>
+ <entry>XtNiconWindow</entry>
+ <entry>"iconWindow"</entry>
+ </row>
+ <row>
+ <entry>XtNiconX</entry>
+ <entry>"iconX"</entry>
+ </row>
+ <row>
+ <entry>XtNiconY</entry>
+ <entry>"iconY"</entry>
+ </row>
+ <row>
+ <entry>XtNiconic</entry>
+ <entry>"iconic"</entry>
+ </row>
+ <row>
+ <entry>XtNinitialState</entry>
+ <entry>"initialState"</entry>
+ </row>
+ <row>
+ <entry>XtNinput</entry>
+ <entry>"input"</entry>
+ </row>
+ <row>
+ <entry>XtNinteractCallback</entry>
+ <entry>"interactCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNjoinSession</entry>
+ <entry>"joinSession"</entry>
+ </row>
+ <row>
+ <entry>XtNmaxAspectX</entry>
+ <entry>"maxAspectX"</entry>
+ </row>
+ <row>
+ <entry>XtNmaxAspectY</entry>
+ <entry>"maxAspectY"</entry>
+ </row>
+ <row>
+ <entry>XtNmaxHeight</entry>
+ <entry>"maxHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNmaxWidth</entry>
+ <entry>"maxWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNminAspectX</entry>
+ <entry>"minAspectX"</entry>
+ </row>
+ <row>
+ <entry>XtNminAspectY</entry>
+ <entry>"minAspectY"</entry>
+ </row>
+ <row>
+ <entry>XtNminHeight</entry>
+ <entry>"minHeight"</entry>
+ </row>
+ <row>
+ <entry>XtNminWidth</entry>
+ <entry>"minWidth"</entry>
+ </row>
+ <row>
+ <entry>XtNoverrideRedirect</entry>
+ <entry>"overrideRedirect"</entry>
+ </row>
+ <row>
+ <entry>XtNprogramPath</entry>
+ <entry>"programPath"</entry>
+ </row>
+ <row>
+ <entry>XtNresignCommand</entry>
+ <entry>"resignCommand"</entry>
+ </row>
+ <row>
+ <entry>XtNrestartCommand</entry>
+ <entry>"restartCommand"</entry>
+ </row>
+ <row>
+ <entry>XtNrestartStyle</entry>
+ <entry>"restartStyle"</entry>
+ </row>
+ <row>
+ <entry>XtNsaveCallback</entry>
+ <entry>"saveCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNsaveCompleteCallback</entry>
+ <entry>"saveCompleteCallback"</entry>
+ </row>
+ <row>
+ <entry>XtNsaveUnder</entry>
+ <entry>"saveUnder"</entry>
+ </row>
+ <row>
+ <entry>XtNsessionID</entry>
+ <entry>"sessionID"</entry>
+ </row>
+ <row>
+ <entry>XtNshutdownCommand</entry>
+ <entry>"shutdownCommand"</entry>
+ </row>
+ <row>
+ <entry>XtNtitle</entry>
+ <entry>"title"</entry>
+ </row>
+ <row>
+ <entry>XtNtitleEncoding</entry>
+ <entry>"titleEncoding"</entry>
+ </row>
+ <row>
+ <entry>XtNtransient</entry>
+ <entry>"transient"</entry>
+ </row>
+ <row>
+ <entry>XtNtransientFor</entry>
+ <entry>"transientFor"</entry>
+ </row>
+ <row>
+ <entry>XtNurgency</entry>
+ <entry>"urgency"</entry>
+ </row>
+ <row>
+ <entry>XtNvisual</entry>
+ <entry>"visual"</entry>
+ </row>
+ <row>
+ <entry>XtNwaitForWm</entry>
+ <entry>"waitforwm"</entry>
+ </row>
+ <row>
+ <entry>XtNwaitforwm</entry>
+ <entry>"waitforwm"</entry>
+ </row>
+ <row>
+ <entry>XtNwidthInc</entry>
+ <entry>"widthInc"</entry>
+ </row>
+ <row>
+ <entry>XtNwindowGroup</entry>
+ <entry>"windowGroup"</entry>
+ </row>
+ <row>
+ <entry>XtNwindowRole</entry>
+ <entry>"windowRole"</entry>
+ </row>
+ <row>
+ <entry>XtNwinGravity</entry>
+ <entry>"winGravity"</entry>
+ </row>
+ <row>
+ <entry>XtNwmTimeout</entry>
+ <entry>"wmTimeout"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Resource classes:</emphasis></para>
+<informaltable frame='topbot'>
+ <?dbfo keep-together="auto" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtCAllowShellResize</entry>
+ <entry>"allowShellResize"</entry>
+ </row>
+ <row>
+ <entry>XtCArgc</entry>
+ <entry>"Argc"</entry>
+ </row>
+ <row>
+ <entry>XtCArgv</entry>
+ <entry>"Argv"</entry>
+ </row>
+ <row>
+ <entry>XtCBaseHeight</entry>
+ <entry>"BaseHeight"</entry>
+ </row>
+ <row>
+ <entry>XtCBaseWidth</entry>
+ <entry>"BaseWidth"</entry>
+ </row>
+ <row>
+ <entry>XtCClientLeader</entry>
+ <entry>"ClientLeader"</entry>
+ </row>
+ <row>
+ <entry>XtCCloneCommand</entry>
+ <entry>"CloneCommand"</entry>
+ </row>
+ <row>
+ <entry>XtCConnection</entry>
+ <entry>"Connection"</entry>
+ </row>
+ <row>
+ <entry>XtCCreatePopupChildProc</entry>
+ <entry>"CreatePopupChildProc"</entry>
+ </row>
+ <row>
+ <entry>XtCCurrentDirectory</entry>
+ <entry>"CurrentDirectory"</entry>
+ </row>
+ <row>
+ <entry>XtCDiscardCommand</entry>
+ <entry>"DiscardCommand"</entry>
+ </row>
+ <row>
+ <entry>XtCEnvironment</entry>
+ <entry>"Environment"</entry>
+ </row>
+ <row>
+ <entry>XtCGeometry</entry>
+ <entry>"Geometry"</entry>
+ </row>
+ <row>
+ <entry>XtCHeightInc</entry>
+ <entry>"HeightInc"</entry>
+ </row>
+ <row>
+ <entry>XtCIconMask</entry>
+ <entry>"IconMask"</entry>
+ </row>
+ <row>
+ <entry>XtCIconName</entry>
+ <entry>"IconName"</entry>
+ </row>
+ <row>
+ <entry>XtCIconNameEncoding</entry>
+ <entry>"IconNameEncoding"</entry>
+ </row>
+ <row>
+ <entry>XtCIconPixmap</entry>
+ <entry>"IconPixmap"</entry>
+ </row>
+ <row>
+ <entry>XtCIconWindow</entry>
+ <entry>"IconWindow"</entry>
+ </row>
+ <row>
+ <entry>XtCIconX</entry>
+ <entry>"IconX"</entry>
+ </row>
+ <row>
+ <entry>XtCIconY</entry>
+ <entry>"IconY"</entry>
+ </row>
+ <row>
+ <entry>XtCIconic</entry>
+ <entry>"Iconic"</entry>
+ </row>
+ <row>
+ <entry>XtCInitialState</entry>
+ <entry>"InitialState"</entry>
+ </row>
+ <row>
+ <entry>XtCInput</entry>
+ <entry>"Input"</entry>
+ </row>
+ <row>
+ <entry>XtCJoinSession</entry>
+ <entry>"JoinSession"</entry>
+ </row>
+ <row>
+ <entry>XtCMaxAspectX</entry>
+ <entry>"MaxAspectX"</entry>
+ </row>
+ <row>
+ <entry>XtCMaxAspectY</entry>
+ <entry>"MaxAspectY"</entry>
+ </row>
+ <row>
+ <entry>XtCMaxHeight</entry>
+ <entry>"MaxHeight"</entry>
+ </row>
+ <row>
+ <entry>XtCMaxWidth</entry>
+ <entry>"MaxWidth"</entry>
+ </row>
+ <row>
+ <entry>XtCMinAspectX</entry>
+ <entry>"MinAspectX"</entry>
+ </row>
+ <row>
+ <entry>XtCMinAspectY</entry>
+ <entry>"MinAspectY"</entry>
+ </row>
+ <row>
+ <entry>XtCMinHeight</entry>
+ <entry>"MinHeight"</entry>
+ </row>
+ <row>
+ <entry>XtCMinWidth</entry>
+ <entry>"MinWidth"</entry>
+ </row>
+ <row>
+ <entry>XtCOverrideRedirect</entry>
+ <entry>"OverrideRedirect"</entry>
+ </row>
+ <row>
+ <entry>XtCProgramPath</entry>
+ <entry>"ProgramPath"</entry>
+ </row>
+ <row>
+ <entry>XtCResignCommand</entry>
+ <entry>"ResignCommand"</entry>
+ </row>
+ <row>
+ <entry>XtCRestartCommand</entry>
+ <entry>"RestartCommand"</entry>
+ </row>
+ <row>
+ <entry>XtCRestartStyle</entry>
+ <entry>"RestartStyle"</entry>
+ </row>
+ <row>
+ <entry>XtCSaveUnder</entry>
+ <entry>"SaveUnder"</entry>
+ </row>
+ <row>
+ <entry>XtCSessionID</entry>
+ <entry>"SessionID"</entry>
+ </row>
+ <row>
+ <entry>XtCShutdownCommand</entry>
+ <entry>"ShutdownCommand"</entry>
+ </row>
+ <row>
+ <entry>XtCTitle</entry>
+ <entry>"Title"</entry>
+ </row>
+ <row>
+ <entry>XtCTitleEncoding</entry>
+ <entry>"TitleEncoding"</entry>
+ </row>
+ <row>
+ <entry>XtCTransient</entry>
+ <entry>"Transient"</entry>
+ </row>
+ <row>
+ <entry>XtCTransientFor</entry>
+ <entry>"TransientFor"</entry>
+ </row>
+ <row>
+ <entry>XtCUrgency</entry>
+ <entry>"Urgency"</entry>
+ </row>
+ <row>
+ <entry>XtCVisual</entry>
+ <entry>"Visual"</entry>
+ </row>
+ <row>
+ <entry>XtCWaitForWm</entry>
+ <entry>"Waitforwm"</entry>
+ </row>
+ <row>
+ <entry>XtCWaitforwm</entry>
+ <entry>"Waitforwm"</entry>
+ </row>
+ <row>
+ <entry>XtCWidthInc</entry>
+ <entry>"WidthInc"</entry>
+ </row>
+ <row>
+ <entry>XtCWindowGroup</entry>
+ <entry>"WindowGroup"</entry>
+ </row>
+ <row>
+ <entry>XtCWindowRole</entry>
+ <entry>"WindowRole"</entry>
+ </row>
+ <row>
+ <entry>XtCWinGravity</entry>
+ <entry>"WinGravity"</entry>
+ </row>
+ <row>
+ <entry>XtCWmTimeout</entry>
+ <entry>"WmTimeout"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+
+<para><emphasis role='strong'>Resource representation types:</emphasis></para>
+
+<informaltable frame='topbot'>
+ <?dbfo keep-together="always" ?>
+ <tgroup cols='2' align='left' colsep='0' rowsep='0'>
+ <colspec colwidth='1.0*' colname='c1'/>
+ <colspec colwidth='1.0*' colname='c2'/>
+ <thead>
+ <row rowsep='1'>
+ <entry>Symbol</entry>
+ <entry>Definition</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>XtRAtom</entry>
+ <entry>"Atom"</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+</appendix>
diff --git a/libXt/specs/appF b/libXt/specs/appF
deleted file mode 100644
index b74cf4a3e..000000000
--- a/libXt/specs/appF
+++ /dev/null
@@ -1,125 +0,0 @@
-.\" $Xorg: appF,v 1.3 2000/08/17 19:42:49 cpqbld Exp $
-.\" Copyright \(co 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 \(co 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.
-.\"
-.bp
-\&
-.sp 1
-.ce 3
-\s+1\fBAppendix F\fP\s-1
-
-\s+1\fBResource Configuration Management\fP\s-1
-.sp 2
-.LP
-.XS
-\fBAppendix F \(em Resource Configuration Management\fP
-.XE
-Setting and changing resources in X applications can be difficult for
-both the application programmer and the end user. \fBResource
-Configuration Management (RCM)\fP addresses this problem by changing
-the \fBX Intrinsics\fP 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.
-.LP
-The main difference between \fBRCM\fP and the \fBEditres\fP
-protocol is that the \fBRCM\fP
-customizing hooks reside in the \fBIntrinsics\fP and thus are linked with
-other toolkits such as Motif and the Athena widgets. However, the
-\fBEditRes\fP protocol requires the application to link with the
-\fBEditRes\fP
-routines in the Xmu library and Xmu is not used by all applications that
-use Motif. Also, the \fBEditRes\fP protocol uses ClientMessage,
-whereas the
-\fBRCM\fP \fBIntrinsics\fP hooks use \fBPropertyNotify\fP events.
-.LP
-X Properties and the \fBPropertyNotify\fP events are used
-to implement \fBRCM\fP and
-allow on-the-fly resource customization. When the X Toolkit is
-initialized, two atoms are interned with the strings
-\fICustom Init\fP and
-\fICustom Data\fP. Both
-.PN _XtCreatePopupShell
-and
-.PN _XtAppCreateShell
-register a \fBPropertyNotify\fP event handler to handle these properties.
-.LP
-A customization tool uses the \fICustom Init\fP property to \fIping\fP 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.
-.LP
-A customization tool uses the \fICustom Data\fP 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 \fBXA_STRING\fP and
-the format of the string is:
-.IP 1. 5
-The length of the resource name (the number of bytes in
-the resource name)
-.IP 2. 5
-One space character
-.IP 3. 5
-The resource name
-.IP 4. 5
-One space character
-.IP 5. 5
-The resource value
-.LP
-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
-.PN XtSetValues.
-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.
-.LP
-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.
-
-
diff --git a/libXt/specs/appF.xml b/libXt/specs/appF.xml
new file mode 100644
index 000000000..49f054bb7
--- /dev/null
+++ b/libXt/specs/appF.xml
@@ -0,0 +1,103 @@
+<appendix id='Resource_Configuration_Management'>
+<title>Resource Configuration Management</title>
+<para>
+Setting and changing resources in X applications can be difficult for
+both the application programmer and the end user. <emphasis role='strong'>Resource
+Configuration Management (RCM)</emphasis> addresses this problem by changing
+the <function>X Intrinsics</function> 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.
+</para>
+
+<para>
+The main difference between <function>RCM</function> and the <function>Editres</function>
+protocol is that the <function>RCM</function>
+customizing hooks reside in the <function>Intrinsics</function> and thus are linked with
+other toolkits such as Motif and the Athena widgets. However, the
+<function>EditRes</function> protocol requires the application to link with the
+<function>EditRes</function>
+routines in the Xmu library and Xmu is not used by all applications that
+use Motif. Also, the <function>EditRes</function> protocol uses ClientMessage,
+whereas the
+<function>RCM</function> <function>Intrinsics</function> hooks use <function>PropertyNotify</function> events.
+</para>
+
+<para>
+X Properties and the <function>PropertyNotify</function> events are used
+to implement <function>RCM</function> and
+allow on-the-fly resource customization. When the X Toolkit is
+initialized, two atoms are interned with the strings
+<emphasis remap='I'>Custom Init</emphasis> and
+<emphasis remap='I'>Custom Data</emphasis>. Both
+<function>_XtCreatePopupShell</function>
+and
+<function>_XtAppCreateShell</function>
+register a <function>PropertyNotify</function> event handler to handle these properties.
+</para>
+
+<para>
+A customization tool uses the <emphasis remap='I'>Custom Init</emphasis> property to <emphasis remap='I'>ping</emphasis> 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.
+</para>
+
+<para>
+A customization tool uses the <emphasis remap='I'>Custom Data</emphasis> 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 <function>XA_STRING</function> and
+the format of the string is:
+</para>
+<orderedlist>
+ <listitem>
+ <para>
+The length of the resource name (the number of bytes in
+the resource name)
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+One space character
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The resource name
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+One space character
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+The resource value
+ </para>
+ </listitem>
+</orderedlist>
+<para>
+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
+<xref linkend='XtSetValues' xrefstyle='select: title'/>.
+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.
+</para>
+
+<para>
+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.
+</para>
+</appendix>
diff --git a/libXt/specs/intr.idxmac.t b/libXt/specs/intr.idxmac.t
deleted file mode 100644
index 9a3572d2e..000000000
--- a/libXt/specs/intr.idxmac.t
+++ /dev/null
@@ -1,3 +0,0 @@
-.eh '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP'
-.oh '\fBX Toolkit Intrinsics\fP''\fBX11 Release \*(Rn\fP'
-.so index.pageno
diff --git a/libXt/specs/intrinsics.xml b/libXt/specs/intrinsics.xml
new file mode 100644
index 000000000..4c4169530
--- /dev/null
+++ b/libXt/specs/intrinsics.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[ <!ENTITY % defs SYSTEM "defs.ent"> %defs;
+]>
+
+<book id="intrinsics" lang="en">
+
+<bookinfo>
+ <title>X Toolkit Intrinsics - C Language Interface</title>
+ <subtitle>X Window System</subtitle>
+ <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
+ <printhistory><para>First Revision - April, 1994</para></printhistory>
+ <authorgroup>
+ <author>
+ <firstname>Joel</firstname><surname>McCormack</surname>
+ <affiliation>
+ <orgname>Digital Equipment Corporation</orgname>
+ <orgdiv>Western Software Laboratory</orgdiv>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Paul</firstname><surname>Asente</surname>
+ <affiliation>
+ <orgname>Digital Equipment Corporation</orgname>
+ <orgdiv>Western Software Laboratory</orgdiv>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Ralph</firstname><othername>R.</othername>
+ <surname>Swick</surname>
+ <affiliation>
+ <orgname>Digital Equipment Corporation</orgname>
+ <orgdiv>External Research Group</orgdiv>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <printhistory><para>version 6 edited by Donna Converse X Consortium, Inc.</para></printhistory>
+
+<legalnotice>
+<para>XWindow System is a trademark of X Consortium, Inc.</para>
+
+<para role="multiLicensing">
+Copyright © 1985, 1986, 1987, 1988, 1991, 1994 X Consortium
+</para>
+
+<para>
+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:
+</para>
+
+<para>
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+</para>
+
+<para> 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.
+</para>
+
+<para>
+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.
+</para>
+</legalnotice>
+
+<legalnotice>
+<para role="multiLicensing">
+Copyright © 1985, 1986, 1987, 1988, 1991, 1994
+Digital Equipment Corporation, Maynard, Massachusetts.
+</para>
+
+<para>
+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.
+</para>
+
+</legalnotice>
+</bookinfo>
+
+
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="acknowledgement.xml"/>
+
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="preface.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH01.xml"/>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH02.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH03.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH04.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH05.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH06.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH07.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH08.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH09.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH10.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH11.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH12.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CH13.xml"/>
+
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appA.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appB.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appC.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appD.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appE.xml"/>
+<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="appF.xml"/>
+
+</book>
+
diff --git a/libXt/specs/postproc b/libXt/specs/postproc
deleted file mode 100644
index 588b1de2c..000000000
--- a/libXt/specs/postproc
+++ /dev/null
@@ -1,19 +0,0 @@
-.\" $Xorg: postproc,v 1.3 2000/08/17 19:42:49 cpqbld Exp $
-.EH ''''
-.OH ''''
-.if o .bp \" blank page to make index and ToC start on odd page
-\&
-.nr PN +1
-.XS
-Index
-.XE
-.EQ
-delim $$
-.EN
-.tm .pn \n(PN
-.nr PN -1
-.\" print Table of Contents
-.bp 3
-.af PN i
-.PX
-
diff --git a/libXt/specs/preface.xml b/libXt/specs/preface.xml
new file mode 100644
index 000000000..c5ac3cde6
--- /dev/null
+++ b/libXt/specs/preface.xml
@@ -0,0 +1,51 @@
+<preface id='About_This_Manual'>
+<title>About This Manual</title>
+
+<para>
+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 <emphasis role='strong'>bold</emphasis> indicate the information that
+should be of special interest to an application programmer.
+</para>
+<para>
+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.
+</para>
+
+<bridgehead><emphasis role='strong'>Conventions Used in this Manual</emphasis></bridgehead>
+<para>This document uses the following conventions:</para>
+<itemizedlist spacing='compact'>
+ <listitem>
+ <para>
+Global symbols are printed in <function>this special font</function>. 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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+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 <emphasis>returns</emphasis> or, in
+the case of multiple arguments, the word <emphasis>return</emphasis>.
+ </para>
+ </listitem>
+</itemizedlist>
+</preface>
diff --git a/libXt/specs/strings.mit b/libXt/specs/strings.mit
deleted file mode 100644
index 87cc71081..000000000
--- a/libXt/specs/strings.mit
+++ /dev/null
@@ -1,16 +0,0 @@
-.ds tk X Toolkit
-.ds xT X Toolkit Intrinsics \(em C Language Interface
-.ds xI Intrinsics
-.ds xW X Toolkit Athena Widgets \(em C Language Interface
-.ds xL Xlib \(em C Language X Interface
-.ds xC Inter-Client Communication Conventions Manual
-.ds xP X Window System Protocol
-.ds Rn 6.8
-.ds Vn 2.2
-.ds oI Must be of class Object or any subclass thereof.
-.ds rI Must be of class RectObj or any subclass thereof.
-.ds cI Must be of class Core or any subclass thereof.
-.ds oC Must be \fBobjectClass\fP or any subclass thereof.
-.ds rC Must be \fBrectObjClass\fP or any subclass thereof.
-.hw XtMake-Geometry-Request XtQuery-Geometry wid-get Composite-Part \
-Rect-Obj-Rec XtIsOverrideShell super-class
diff --git a/libXt/src/Converters.c b/libXt/src/Converters.c
index a19ca673a..6be3ba61d 100644
--- a/libXt/src/Converters.c
+++ b/libXt/src/Converters.c
@@ -257,7 +257,7 @@ void XtStringConversionWarning(
params,&num_params);
}
-static int CompareISOLatin1(char *, char *);
+static int CompareISOLatin1(const char *, const char *);
static Boolean IsInteger(
@@ -1379,11 +1379,12 @@ void LowerCase(register char *source, register *dest)
}
#endif
-static int CompareISOLatin1 (char *first, char *second)
+static int CompareISOLatin1 (const char *first, const char *second)
{
- register unsigned char *ap, *bp;
+ register const unsigned char *ap, *bp;
- for (ap = (unsigned char *) first, bp = (unsigned char *) second;
+ for (ap = (const unsigned char *) first,
+ bp = (const unsigned char *) second;
*ap && *bp; ap++, bp++) {
register unsigned char a, b;
@@ -1410,11 +1411,10 @@ static int CompareISOLatin1 (char *first, char *second)
return (((int) *bp) - ((int) *ap));
}
-static void CopyISOLatin1Lowered(char *dst, char *src)
+static void CopyISOLatin1Lowered(char *dst, const char *src)
{
- unsigned char *dest, *source;
-
- dest = (unsigned char *) dst; source = (unsigned 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)
@@ -1737,7 +1737,7 @@ Boolean XtCvtStringToGravity (
{
static struct _namepair {
XrmQuark quark;
- char *name;
+ const char *name;
int gravity;
} names[] = {
{ NULLQUARK, "forget", ForgetGravity },
diff --git a/libXt/src/Event.c b/libXt/src/Event.c
index 7be598787..11823d6e2 100644
--- a/libXt/src/Event.c
+++ b/libXt/src/Event.c
@@ -1549,15 +1549,9 @@ void XtMainLoop(void)
void XtAppMainLoop(
XtAppContext app)
{
- XEvent event;
-
LOCK_APP(app);
do {
- XtAppNextEvent(app, &event);
-#ifdef XTHREADS
- /* assert(app == XtDisplayToApplicationContext(event.xany.display)); */
-#endif
- XtDispatchEvent(&event);
+ XtAppProcessEvent(app, XtIMAll);
} while(app->exit_flag == FALSE);
UNLOCK_APP(app);
}
diff --git a/libXt/src/Initialize.c b/libXt/src/Initialize.c
index fe13b58b5..d023a3f53 100644
--- a/libXt/src/Initialize.c
+++ b/libXt/src/Initialize.c
@@ -424,9 +424,9 @@ static void CombineUserDefaults(
char *slashDotXdefaults = ".Xdefaults";
#else
#ifdef __MINGW32__
- char *slashDotXdefaults = "/Xdefaults";
+ const char *slashDotXdefaults = "/Xdefaults";
#else
- char *slashDotXdefaults = "/.Xdefaults";
+ const char *slashDotXdefaults = "/.Xdefaults";
#endif
#endif
char *dpy_defaults = XResourceManagerString(dpy);
@@ -574,9 +574,9 @@ XrmDatabase XtScreenDatabase(
char *slashDotXdefaultsDash = "Xdefaults-";
#else
#ifdef __MINGW32__
- char *slashDotXdefaultsDash = "/Xdefaults-";
+ const char *slashDotXdefaultsDash = "/Xdefaults-";
#else
- char *slashDotXdefaultsDash = "/.Xdefaults-";
+ const char *slashDotXdefaultsDash = "/.Xdefaults-";
#endif
#endif
diff --git a/libXt/src/Intrinsic.c b/libXt/src/Intrinsic.c
index 8d9e8608c..901f3d7c2 100644
--- a/libXt/src/Intrinsic.c
+++ b/libXt/src/Intrinsic.c
@@ -1321,7 +1321,7 @@ static void FillInLangSubs(
* The exact value should be documented in the implementation
* notes for any Xt implementation.
*/
-static char *implementation_default_path(void)
+static const char *implementation_default_path(void)
{
#if defined(WIN32)
static char xfilesearchpath[] = ":";
@@ -1368,8 +1368,8 @@ String XtResolvePathname(
XtFilePredicate predicate)
{
XtPerDisplay pd;
- static char *defaultPath = NULL;
- char *impl_default = implementation_default_path();
+ static const char *defaultPath = NULL;
+ const char *impl_default = implementation_default_path();
int idef_len = strlen(impl_default);
char *massagedPath;
int bytesAllocd, bytesLeft;
diff --git a/libXt/src/Makefile.in b/libXt/src/Makefile.in
new file mode 100644
index 000000000..709632b5f
--- /dev/null
+++ b/libXt/src/Makefile.in
@@ -0,0 +1,748 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+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__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_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libXt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libXt_la_LDFLAGS) $(LDFLAGS) -o $@
+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_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+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_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libXt_la_SOURCES) $(nodist_libXt_la_SOURCES)
+DIST_SOURCES = $(libXt_la_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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=\"$(libdir)/X11/XtErrorDB\"
+AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(SRCH_DEFINES) $(ERRORDB_DEFINES) \
+ $(XTMALLOC_ZERO_CFLAGS)
+
+INCLUDES = -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: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+ @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 " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libXt.la: $(libXt_la_OBJECTS) $(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 all all-am all-local check check-am clean \
+ clean-generic clean-libLTLIBRARIES clean-libtool ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-libLTLIBRARIES install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-libLTLIBRARIES
+
+
+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:
diff --git a/libXt/src/NextEvent.c b/libXt/src/NextEvent.c
index 181d20e87..b1f7bc7e5 100644
--- a/libXt/src/NextEvent.c
+++ b/libXt/src/NextEvent.c
@@ -731,7 +731,14 @@ WaitLoop:
#endif
return dpy_no;
}
- goto WaitLoop;
+ if (block)
+ goto WaitLoop;
+ else {
+#ifdef USE_POLL
+ XtStackFree ((XtPointer) wf.fdlist, fdlist);
+#endif
+ return -1;
+ }
}
#define IeCallProc(ptr) \
diff --git a/libXt/src/Resources.c b/libXt/src/Resources.c
index dc0f563cc..1d2871c46 100644
--- a/libXt/src/Resources.c
+++ b/libXt/src/Resources.c
@@ -233,7 +233,7 @@ static Cardinal CountTreeDepth(
{
Cardinal count;
- for (count = 1; w != NULL; w = (Widget) w->core.parent)
+ for (count = 1; w != NULL; w = (Widget) w->core.parent)
count++;
return count;
@@ -371,7 +371,7 @@ void _XtDependencies(
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++) {
@@ -449,7 +449,7 @@ void _XtConstraintResDependencies(
-
+
XrmResourceList* _XtCreateIndirectionTable (
XtResourceList resources,
Cardinal num_resources)
@@ -559,11 +559,11 @@ static XtCacheRef *GetResources(
i++, typed_arg++) {
register XrmRepresentation argType;
argName = quark_args[i];
- argType = (typed_arg->type == NULL) ? NULLQUARK
+ argType = (typed_arg->type == NULL) ? NULLQUARK
: XrmStringToRepresentation(typed_arg->type);
if (argName == QinitialResourcesPersistent) {
persistent_resources = (Boolean)typed_arg->value;
- found_persistence = True;
+ found_persistence = True;
break;
}
for (j = 0, res = table; j < num_resources; j++, res++) {
@@ -579,7 +579,7 @@ static XtCacheRef *GetResources(
}
found[j] = TRUE;
break;
- }
+ }
}
}
}
@@ -596,7 +596,7 @@ static XtCacheRef *GetResources(
sizeof(XrmHashTable) *
(searchListSize *= 2));
}
-
+
if (persistent_resources)
cache_base = NULL;
else
@@ -702,14 +702,14 @@ static XtCacheRef *GetResources(
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
+ * 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)))
@@ -847,22 +847,23 @@ static XtCacheRef *GetResources(
}
}
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;
- if (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--;
+ 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;
@@ -965,7 +966,7 @@ XtCacheRef *_XtGetResources(
/* 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);
@@ -1002,7 +1003,7 @@ void _XtGetSubresources (
const char* name, /* name of subobject */
const char* class, /* class of subobject */
XtResourceList resources, /* resource list for subobject */
- Cardinal num_resources,
+ Cardinal num_resources,
ArgList args, /* arg list to override resources */
Cardinal num_args,
XtTypedArgList typed_args,
@@ -1043,7 +1044,7 @@ void _XtGetSubresources (
if (((int) resources->resource_offset) >= 0) {
XrmCompileResourceListEphem(resources, num_resources);
}
- table = _XtCreateIndirectionTable(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);
@@ -1061,7 +1062,7 @@ void XtGetSubresources (
_Xconst char* name, /* name of subobject */
_Xconst char* class, /* class of subobject */
XtResourceList resources, /* resource list for subobject */
- Cardinal num_resources,
+ Cardinal num_resources,
ArgList args, /* arg list to override resources */
Cardinal num_args)
{
@@ -1118,7 +1119,7 @@ void _XtGetApplicationResources (
}
/* Compile arg list into quarks */
- CacheArgs(args, num_args, typed_args, num_typed_args, quark_cache,
+ 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) {
diff --git a/libXt/src/Selection.c b/libXt/src/Selection.c
index 5dff73e4a..49e683ad4 100644
--- a/libXt/src/Selection.c
+++ b/libXt/src/Selection.c
@@ -238,6 +238,7 @@ static void FreeSelectionProperty(
Atom prop)
{
SelectionProp p;
+ int propCount;
PropList sarray;
if (prop == None) return;
LOCK_PROCESS;
@@ -248,7 +249,9 @@ static void FreeSelectionProperty(
"internal error: no selection property context for display",
(String *)NULL, (Cardinal *)NULL );
UNLOCK_PROCESS;
- for (p = sarray->list; p; p++)
+ for (p = sarray->list, propCount=sarray->propCount;
+ propCount;
+ p++, propCount--)
if (p->prop == prop) {
p->avail = TRUE;
return;
diff --git a/libXt/src/TMparse.c b/libXt/src/TMparse.c
index 5fddb8230..d2336448b 100644
--- a/libXt/src/TMparse.c
+++ b/libXt/src/TMparse.c
@@ -113,14 +113,14 @@ typedef TMShortCard Value;
typedef void (*ModifierProc)(Value, LateBindingsPtr*, Boolean, Value*);
typedef struct _ModifierRec {
- char* name;
+ const char *name;
XrmQuark signature;
ModifierProc modifierParseProc;
Value value;
} ModifierRec, *ModifierKeys;
typedef struct _EventKey {
- char *event;
+ const char *event;
XrmQuark signature;
EventType eventType;
ParseProc parseDetail;
@@ -128,7 +128,7 @@ typedef struct _EventKey {
}EventKey, *EventKeys;
typedef struct {
- char *name;
+ const char *name;
XrmQuark signature;
Value value;
} NameValueRec, *NameValueTable;
diff --git a/libXt/src/Varargs.c b/libXt/src/Varargs.c
index 6c9f9ee5f..b33e287d8 100644
--- a/libXt/src/Varargs.c
+++ b/libXt/src/Varargs.c
@@ -234,6 +234,8 @@ TypedArgToArg(
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))
@@ -500,7 +502,7 @@ _XtVaToTypedArgList(
args[count].size = va_arg(var, int);
++count;
} else if (strcmp(attr, XtVaNestedList) == 0) {
- count += NestedArgtoTypedArg(&args[count],
+ count += NestedArgtoTypedArg(&args[count],
va_arg(var, XtTypedArgList));
} else {
args[count].name = attr;
diff --git a/libXt/test/Alloc.c b/libXt/test/Alloc.c
new file mode 100644
index 000000000..7f02e1937
--- /dev/null
+++ b/libXt/test/Alloc.c
@@ -0,0 +1,112 @@
+/*
+ * 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 <X11/Intrinsic.h>
+#include <glib.h>
+#include <stdio.h>
+#include <string.h>
+
+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();
+}
diff --git a/libXt/test/Converters.c b/libXt/test/Converters.c
new file mode 100644
index 000000000..46e7f5a2f
--- /dev/null
+++ b/libXt/test/Converters.c
@@ -0,0 +1,83 @@
+/*
+ * 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 <X11/Intrinsic.h>
+#include <glib.h>
+
+/* 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();
+}
diff --git a/libXt/test/Event.c b/libXt/test/Event.c
new file mode 100644
index 000000000..bd80c8cfe
--- /dev/null
+++ b/libXt/test/Event.c
@@ -0,0 +1,91 @@
+/*
+ * 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 <X11/Intrinsic.h>
+#include <glib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <setjmp.h>
+
+/* 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();
+}
diff --git a/libXt/test/Makefile.am b/libXt/test/Makefile.am
new file mode 100644
index 000000000..7494c4147
--- /dev/null
+++ b/libXt/test/Makefile.am
@@ -0,0 +1,14 @@
+if ENABLE_UNIT_TESTS
+if HAVE_GLIB
+check_PROGRAMS = Alloc Converters Event
+
+TESTS=$(check_PROGRAMS)
+
+AM_CFLAGS = $(CWARNFLAGS) $(XT_CFLAGS) $(GLIB_CFLAGS)
+INCLUDES = -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
diff --git a/libXt/test/Makefile.in b/libXt/test/Makefile.in
new file mode 100644
index 000000000..1d93b086a
--- /dev/null
+++ b/libXt/test/Makefile.in
@@ -0,0 +1,655 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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)
+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_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+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)
+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_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+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_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = Alloc.c Converters.c Event.c
+DIST_SOURCES = Alloc.c Converters.c Event.c
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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@INCLUDES = -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 .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-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)
+ @rm -f Alloc$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(Alloc_OBJECTS) $(Alloc_LDADD) $(LIBS)
+Converters$(EXEEXT): $(Converters_OBJECTS) $(Converters_DEPENDENCIES)
+ @rm -f Converters$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(Converters_OBJECTS) $(Converters_LDADD) $(LIBS)
+Event$(EXEEXT): $(Event_OBJECTS) $(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list=' $(TESTS) '; \
+ $(am__tty_colors); \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=XPASS; \
+ ;; \
+ *) \
+ col=$$grn; res=PASS; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$tst[\ \ ]*) \
+ xfail=`expr $$xfail + 1`; \
+ col=$$lgn; res=XFAIL; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ col=$$red; res=FAIL; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ col=$$blu; res=SKIP; \
+ fi; \
+ echo "$${col}$$res$${std}: $$tst"; \
+ done; \
+ if test "$$all" -eq 1; then \
+ tests="test"; \
+ All=""; \
+ else \
+ tests="tests"; \
+ All="All "; \
+ fi; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="$$All$$all $$tests passed"; \
+ else \
+ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all $$tests failed"; \
+ else \
+ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ if test "$$skip" -eq 1; then \
+ skipped="($$skip test was not run)"; \
+ else \
+ skipped="($$skip tests were not run)"; \
+ fi; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ if test "$$failed" -eq 0; then \
+ echo "$$grn$$dashes"; \
+ else \
+ echo "$$red$$dashes"; \
+ fi; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes$$std"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-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 all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libXt/util/Makefile.in b/libXt/util/Makefile.in
new file mode 100644
index 000000000..e2501d3b7
--- /dev/null
+++ b/libXt/util/Makefile.in
@@ -0,0 +1,548 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@
+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
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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)
+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_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+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_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+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_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(makestrs_SOURCES)
+DIST_SOURCES = $(makestrs_SOURCES)
+DATA = $(noinst_DATA)
+ETAGS = etags
+CTAGS = ctags
+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@
+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@
+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@
+MAINT = @MAINT@
+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@
+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: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign util/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+makestrs$(EXEEXT): $(makestrs_OBJECTS) $(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(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
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(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:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# 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:
diff --git a/libXt/util/makestrs.c b/libXt/util/makestrs.c
index 902d461c5..a52866ac6 100644
--- a/libXt/util/makestrs.c
+++ b/libXt/util/makestrs.c
@@ -84,7 +84,7 @@ static int solaris_abi_names = FALSE;
#define X_MAGIC_STRING "<<<STRING_TABLE_GOES_HERE>>>"
/* Wrapper for fopen()
- * Prepend filename with an includedir which can be specified on the
+ * Prepend filename with an includedir which can be specified on the
* commandline. Needed to separate source and build directories.
*/
static char* includedir = NULL;
@@ -93,7 +93,7 @@ static FILE *ifopen(const char *file, const char *mode)
size_t len;
char *buffer;
FILE *ret;
-
+
if (includedir == NULL)
return fopen(file, mode);
@@ -101,7 +101,7 @@ static FILE *ifopen(const char *file, const char *mode)
buffer = (char*)malloc(len + 1);
if (buffer == NULL)
return NULL;
-
+
strcpy(buffer, includedir);
strcat(buffer, "/");
strcat(buffer, file);
@@ -121,11 +121,11 @@ static void WriteHeaderProlog (FILE *f, File *phile)
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,
+ (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,
+ (void) fprintf (f,
"#define %s%s \"%s\"\n",
prefixstr, te->left, te->right);
}
@@ -141,10 +141,10 @@ static void IntelABIWriteHeader (FILE *f, File *phile)
WriteHeaderProlog (f, phile);
for (t = phile->table; t; t = t->next) {
- (void) fprintf (f, "%s %sConst char %s[];\n",
+ (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,
+ (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);
}
@@ -170,15 +170,15 @@ static void FunctionWriteHeader (FILE *f, File *phile)
WriteHeaderProlog (f, phile);
- (void) fprintf (f, "%s %sConst char* %s();\n",
- externrefstr, conststr ? conststr : fileprotstr,
+ (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,
+ (void) fprintf (f,
"#ifndef %s%s\n#define %s%s (%s(%d))\n#endif\n",
- prefixstr, te->left, prefixstr, te->left, phile->table->name,
+ prefixstr, te->left, prefixstr, te->left, phile->table->name,
te->offset);
(void) fprintf (f, "#endif /* %s */\n", featurestr);
@@ -193,10 +193,10 @@ static void ArrayperWriteHeader (FILE *f, File *phile)
for (t = phile->table; t; t = t->next)
for (te = t->tableent; te; te = te->next)
- (void) fprintf (f,
+ (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,
+ externrefstr, conststr ? conststr : fileprotstr,
prefixstr, te->left);
(void) fprintf (f, "#endif /* %s */\n", featurestr);
@@ -209,15 +209,15 @@ static void DefaultWriteHeader (FILE *f, File *phile)
WriteHeaderProlog (f, phile);
- (void) fprintf (f, "%s %sConst char %s[];\n",
- externrefstr, conststr ? conststr : fileprotstr,
+ (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,
+ (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,
+ prefixstr, te->left, prefixstr, te->left, phile->table->name,
te->offset);
(void) fprintf (f, "#endif /* %s */\n", featurestr);
@@ -226,7 +226,7 @@ static void DefaultWriteHeader (FILE *f, File *phile)
static void CopyTmplProlog (FILE *tmpl, FILE *f)
{
char buf[1024];
- static char* magic_string = X_MAGIC_STRING;
+ static const char* magic_string = X_MAGIC_STRING;
int magic_string_len = strlen (magic_string);
while (fgets (buf, sizeof buf, tmpl)) {
@@ -245,14 +245,14 @@ static void CopyTmplEpilog (FILE *tmpl, FILE *f)
(void) fputs (buf, f);
}
-static char* abistring[] = {
+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) = {
+ static void (*headerproc[])(FILE *f, File *phile) = {
DefaultWriteHeader, ArrayperWriteHeader,
IntelABIWriteHeader, IntelABIWriteHeader,
SPARCABIWriteHeader, FunctionWriteHeader };
@@ -261,8 +261,8 @@ static void WriteHeader (char *tagline, File *phile, int abi)
if (phile->tmpl) CopyTmplProlog (phile->tmpl, f);
- (void) fprintf (f,
- "%s\n%s\n/* %s ABI version -- Do not edit */\n",
+ (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]);
@@ -301,7 +301,7 @@ static void WriteSourceLine (TableEnt *te, int abi, int fudge)
(void) printf ("%s", "\n");
}
-static char* const_string = "%s %sConst char %s[] = {\n";
+static const char* const_string = "%s %sConst char %s[] = {\n";
static void IntelABIWriteSource (int abi)
{
@@ -312,7 +312,7 @@ static void IntelABIWriteSource (int abi)
TableEnt* te;
for (t = phile->table; t; t = t->next) {
- (void) printf (const_string, externdefstr,
+ (void) printf (const_string, externdefstr,
conststr ? conststr : "", t->name);
for (te = t->tableent; te; te = te->next)
WriteSourceLine (te, abi, 0);
@@ -329,18 +329,18 @@ static void IntelABIBCWriteSource (int abi)
Table* t;
TableEnt* te;
- (void) printf (const_string, externdefstr,
+ (void) printf (const_string, externdefstr,
conststr ? conststr : "", phile->table->name);
- for (t = phile->table; t; t = t->next)
+ 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,
+ (void) printf (const_string, externdefstr,
conststr ? conststr : "", phile->table->next->name);
- for (t = phile->table->next; t; t = t->next)
+ 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", "};");
@@ -356,16 +356,16 @@ static void FunctionWriteSource (int abi)
Table* t;
TableEnt* te;
- (void) printf ("static %sConst char _%s[] = {\n",
+ (void) printf ("static %sConst char _%s[] = {\n",
conststr ? conststr : "", phile->table->name);
- for (t = phile->table; t; t = t->next)
+ 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 : "",
+ conststr ? conststr : "",
phile->table->name, phile->table->name);
}
}
@@ -379,7 +379,7 @@ static void ArrayperWriteSource (int abi)
Table* t;
TableEnt* te;
- for (t = phile->table; t; t = t->next)
+ 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;
@@ -387,7 +387,7 @@ static void ArrayperWriteSource (int abi)
}
(void) printf ("%s %sConst char %s%s[] = \"%s\";\n",
externdefstr, conststr ? conststr : "",
- prefixstr,
+ prefixstr,
te->left, te->right);
}
}
@@ -404,7 +404,7 @@ static void DefaultWriteSource (int abi)
(void) printf (const_string, externdefstr, conststr ? conststr : "",
phile->table->name);
- for (t = phile->table; t; t = t->next)
+ 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", "};");
@@ -413,7 +413,7 @@ static void DefaultWriteSource (int abi)
static void WriteSource(char *tagline, int abi)
{
- static void (*sourceproc[])(int) = {
+ static void (*sourceproc[])(int) = {
DefaultWriteSource, ArrayperWriteSource,
IntelABIWriteSource, IntelABIBCWriteSource,
DefaultWriteSource, FunctionWriteSource };
@@ -433,7 +433,7 @@ static void WriteSource(char *tagline, int abi)
tmpl = NULL;
- (void) printf ("%s\n%s\n/* %s ABI version -- Do not edit */\n",
+ (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]);
@@ -460,33 +460,33 @@ static void DoLine(char *buf)
int token;
char lbuf[1024];
- static char* file_str = "#file";
- static char* table_str = "#table";
- static char* prefix_str = "#prefix";
- static char* feature_str = "#feature";
- static char* externref_str = "#externref";
- static char* externdef_str = "#externdef";
- static char* ctmpl_str = "#ctmpl";
- static char* htmpl_str = "#htmpl";
- static char* const_str = "#const";
-
- if (strncmp (buf, file_str, strlen (file_str)) == 0)
+ 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)
+ else if (strncmp (buf, table_str, strlen (table_str)) == 0)
token = X_TABLE_TOKEN;
- else if (strncmp (buf, prefix_str, strlen (prefix_str)) == 0)
+ else if (strncmp (buf, prefix_str, strlen (prefix_str)) == 0)
token = X_PREFIX_TOKEN;
- else if (strncmp (buf, feature_str, strlen (feature_str)) == 0)
+ else if (strncmp (buf, feature_str, strlen (feature_str)) == 0)
token = X_FEATURE_TOKEN;
- else if (strncmp (buf, externref_str, strlen (externref_str)) == 0)
+ else if (strncmp (buf, externref_str, strlen (externref_str)) == 0)
token = X_EXTERNREF_TOKEN;
- else if (strncmp (buf, externdef_str, strlen (externdef_str)) == 0)
+ else if (strncmp (buf, externdef_str, strlen (externdef_str)) == 0)
token = X_EXTERNDEF_TOKEN;
- else if (strncmp (buf, ctmpl_str, strlen (ctmpl_str)) == 0)
+ else if (strncmp (buf, ctmpl_str, strlen (ctmpl_str)) == 0)
token = X_CTMPL_TOKEN;
- else if (strncmp (buf, htmpl_str, strlen (htmpl_str)) == 0)
+ else if (strncmp (buf, htmpl_str, strlen (htmpl_str)) == 0)
token = X_HTMPL_TOKEN;
- else if (strncmp (buf, const_str, strlen (const_str)) == 0)
+ else if (strncmp (buf, const_str, strlen (const_str)) == 0)
token = X_CONST_TOKEN;
else
token = X_NO_TOKEN;
@@ -496,9 +496,9 @@ static void DoLine(char *buf)
{
File* phile;
- if ((phile = (File*) malloc (sizeof(File))) == NULL)
+ if ((phile = (File*) malloc (sizeof(File))) == NULL)
exit(1);
- if ((phile->name = malloc (strlen (buf + strlen (file_str)) + 1)) == NULL)
+ if ((phile->name = malloc (strlen (buf + strlen (file_str)) + 1)) == NULL)
exit(1);
(void) strcpy (phile->name, buf + strlen (file_str) + 1);
phile->table = NULL;
@@ -515,9 +515,9 @@ static void DoLine(char *buf)
case X_TABLE_TOKEN:
{
Table* table;
- if ((table = (Table*) malloc (sizeof(Table))) == NULL)
+ if ((table = (Table*) malloc (sizeof(Table))) == NULL)
exit(1);
- if ((table->name = malloc (strlen (buf + strlen (table_str)) + 1)) == NULL)
+ if ((table->name = malloc (strlen (buf + strlen (table_str)) + 1)) == NULL)
exit(1);
(void) strcpy (table->name, buf + strlen (table_str) + 1);
if (solaris_abi_names) {
@@ -539,33 +539,33 @@ static void DoLine(char *buf)
}
break;
case X_PREFIX_TOKEN:
- if ((prefixstr = malloc (strlen (buf + strlen (prefix_str)) + 1)) == NULL)
+ if ((prefixstr = malloc (strlen (buf + strlen (prefix_str)) + 1)) == NULL)
exit(1);
(void) strcpy (prefixstr, buf + strlen (prefix_str) + 1);
break;
case X_FEATURE_TOKEN:
- if ((featurestr = malloc (strlen (buf + strlen (feature_str)) + 1)) == NULL)
+ if ((featurestr = malloc (strlen (buf + strlen (feature_str)) + 1)) == NULL)
exit(1);
(void) strcpy (featurestr, buf + strlen (feature_str) + 1);
break;
case X_EXTERNREF_TOKEN:
- if ((externrefstr = malloc (strlen (buf + strlen (externref_str)) + 1)) == NULL)
+ if ((externrefstr = malloc (strlen (buf + strlen (externref_str)) + 1)) == NULL)
exit(1);
(void) strcpy (externrefstr, buf + strlen (externref_str) + 1);
break;
case X_EXTERNDEF_TOKEN:
- if ((externdefstr = malloc (strlen (buf + strlen (externdef_str)) + 1)) == NULL)
+ if ((externdefstr = malloc (strlen (buf + strlen (externdef_str)) + 1)) == NULL)
exit(1);
(void) strcpy (externdefstr, buf + strlen (externdef_str) + 1);
break;
case X_CTMPL_TOKEN:
- if ((ctmplstr = malloc (strlen (buf + strlen (ctmpl_str)) + 1)) == NULL)
+ if ((ctmplstr = malloc (strlen (buf + strlen (ctmpl_str)) + 1)) == NULL)
exit(1);
(void) strcpy (ctmplstr, buf + strlen (ctmpl_str) + 1);
break;
case X_HTMPL_TOKEN:
if ((filecurrent->tmpl = ifopen (buf + strlen (htmpl_str) + 1, "r")) == NULL) {
- (void) fprintf (stderr,
+ (void) fprintf (stderr,
"Expected template %s, not found\n", htmpl_str);
exit (1);
}
@@ -683,7 +683,7 @@ int main(int argc, char *argv[])
File* phile;
FILE *f;
char buf[1024];
- int abi =
+ int abi =
#ifndef ARRAYPERSTR
X_DEFAULT_ABI;
#else
@@ -726,7 +726,7 @@ int main(int argc, char *argv[])
if (f == NULL) return 1;
while (fgets(buf, sizeof buf, f)) {
- if (!buf[0] || buf[0] == '\n')
+ if (!buf[0] || buf[0] == '\n')
continue;
if (buf[0] == '!') {
if (tagline) continue;