[Pkg-wmaker-commits] [wmbiff] 01/92: Strip off version numbers from dir name
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Thu Aug 20 02:59:18 UTC 2015
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmbiff.
commit ad0c55ba1603ca0cf4b72cc3c197a4a2c8dd38ed
Author: Carlos R. Mafra <crmafra at gmail.com>
Date: Sun Feb 12 22:50:31 2012 +0000
Strip off version numbers from dir name
---
AUTHORS | 42 +
COPYING | 340 ++
ChangeLog | 1970 +++++++++
FAQ | 125 +
INSTALL | 182 +
Makefile.am | 44 +
Makefile.in | 476 +++
NEWS | 493 +++
README | 114 +
TODO | 98 +
aclocal.m4 | 1436 +++++++
autoconf/Makefile.am | 2 +
autoconf/Makefile.in | 217 +
autoconf/depcomp | 423 ++
autoconf/install-sh | 269 ++
autoconf/missing | 336 ++
autoconf/mkinstalldirs | 99 +
config.h.in | 125 +
configure | 9005 ++++++++++++++++++++++++++++++++++++++++++
configure.ac | 186 +
scripts/Makefile.am | 2 +
scripts/Makefile.in | 241 ++
scripts/security.debian.rb | 197 +
wmbiff/Client.h | 198 +
wmbiff/Imap4Client.c | 736 ++++
wmbiff/Makefile.am | 70 +
wmbiff/Makefile.in | 624 +++
wmbiff/MessageList.c | 230 ++
wmbiff/MessageList.h | 13 +
wmbiff/Pop3Client.c | 540 +++
wmbiff/ShellClient.c | 312 ++
wmbiff/charutil.c | 270 ++
wmbiff/charutil.h | 46 +
wmbiff/gnutls-common.c | 685 ++++
wmbiff/gnutls-common.h | 43 +
wmbiff/maildirClient.c | 187 +
wmbiff/mboxClient.c | 169 +
wmbiff/passwordMgr.c | 298 ++
wmbiff/passwordMgr.h | 8 +
wmbiff/regulo.c | 134 +
wmbiff/regulo.h | 17 +
wmbiff/sample.wmbiffrc | 137 +
wmbiff/socket.c | 180 +
wmbiff/test_tlscomm.c | 108 +
wmbiff/test_wmbiff.c | 468 +++
wmbiff/tlsComm.c | 697 ++++
wmbiff/tlsComm.h | 67 +
wmbiff/wmbiff-master-led.xpm | 128 +
wmbiff/wmbiff.1 | 123 +
wmbiff/wmbiff.c | 1397 +++++++
wmbiff/wmbiffrc.5 | 310 ++
wmbiff/wmbiffrc.5.in | 310 ++
wmgeneral/Makefile.am | 10 +
wmgeneral/Makefile.in | 321 ++
wmgeneral/list.c | 155 +
wmgeneral/list.h | 59 +
wmgeneral/misc.c | 35 +
wmgeneral/misc.h | 9 +
wmgeneral/wmgeneral.c | 612 +++
wmgeneral/wmgeneral.h | 69 +
60 files changed, 26197 insertions(+)
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..da65634
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,42 @@
+ Copyrights
+
+ This program was written by Gennady Belyakov [8]gb at ccat.elect.ru
+
+ Exterior appearance was heavily derived from wminet, written by
+ Dave Clark (clarkd at skynet.ca),
+ Antoine Nulle (warp at xs4all.nl),
+ Martijn Pieterse (pieterse at xs4all.nl)
+
+ Some code (around mailbox checking, with some modifications) was taken
+ from xled, written by
+ Jan Schoenepauck (schoenep at uni-wuppertal.de) and
+ Joachim Gassen (joachim at fb4-1112.uni-muenster.de)
+
+ POP3 checking code was taken from wmpop3 by
+ Scott Holden (scotth at thezone.net)
+
+ Additional code was taken from xlassie, written by
+ Trent Piepho <xyzzy at speakeasy.net>
+
+ Many thanks for:
+ Angus Mackay (amackay at gusnet.cx)
+ Jordi Mallach P�rez (jordi at sindominio.net)
+ Eugene Bobin (gene at utb.ru)
+ Helmut 'Kolbi' Kolb (office at kolbi.net)
+ Vladimir Popov (pva48 at mail.ru)
+ Jorge Garc�a (Jorge.Garcia at uv.es)
+ Nick Clarey (nclarey at 3glab.com)
+ Dwayne C. Litzenberger (dlitz at dlitz.net)
+ Mark Hurley (debian4tux at telocity.com)
+ Rob Funk (rfunk at funkinet.net)
+ Neil Spring (nspring at cs.washington.edu)
+ NAKAYAMA Takao (hoehoe at wakaba.jp)
+ Jay T Francis (jtf at u880.org)
+ David Smith (davidsmith at acm.org)
+ Beno�t Rouits (brouits at free.fr)
+ Andelko Horvat (comel at srk.fer.hr)
+ Jun-ichiro itojun Hagino (itojun at iijlab.net)
+ Peter McAlpine (pmcalpin at uoguelph.ca)
+ Paolo Gianrossi (paolino at yersinia.org)
+ Sam Izzo (izzo at humbug.net)
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..efc9359
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1970 @@
+2005-10-08 Saturday 18:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: year stale 0.4.26 news
+
+2005-10-07 Friday 03:07 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: fix debian #332540: prevent -c 'directory' from
+ making wmbiff run away
+
+2005-05-08 Sunday 21:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, MessageList.c, test_tlscomm.c, test_wmbiff.c,
+ tlsComm.c, tlsComm.h, wmbiff.c: changes for gnutls 1.2 and
+ attempt to make wmbiff more responsive to X events while
+ communicating over the network
+
+2004-12-12 Sunday 00:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * check-includes.rb: update the portability checker
+
+2004-12-12 Sunday 00:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: allow KeyPress events through
+
+2004-12-12 Sunday 00:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: nicer debug message
+
+2004-12-12 Sunday 00:02 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: gnutls-common.c, test_wmbiff.c: compiler appeasement
+
+2004-12-12 Sunday 00:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Pop3Client.c, wmbiff.c, wmbiffrc.5.in: tls and password
+ asking support for pop3, keyboard event handling for the main
+ window
+
+2004-10-31 Sunday 22:09 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: indent and make tls_check_certificate void
+
+2004-10-01 Friday 21:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: comment the SHUT_WR
+
+2004-10-01 Friday 21:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: indent, and return if no certificate came back
+ from the far side
+
+2004-10-01 Friday 21:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: thwack duplicate error messages about connecting
+ to a remote server
+
+2004-10-01 Friday 21:02 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: indent
+
+2004-08-23 Monday 00:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: disable the secure memory warning (and its use)
+
+2004-07-03 Saturday 23:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FAQ: some faqs
+
+2004-07-03 Saturday 23:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: handle the timeout error explicitly,
+ better for disconnected operation
+
+2004-07-03 Saturday 23:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: strerror preferred to perror
+
+2004-06-28 Monday 18:20 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: fix debian #256505: a small problem
+ with the .wmbiff-sdr directory not being created
+
+2004-06-23 Wednesday 21:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.25
+
+2004-06-23 Wednesday 21:46 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/tlsComm.c: probably fix the s390 debian
+ build problems
+
+2004-06-20 Sunday 01:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: oops, should pay attention to the retval of
+ tls_compare_certificates
+
+2004-06-19 Saturday 21:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/gnutls-common.c: warning cleanup
+
+2004-06-19 Saturday 20:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/Pop3Client.c, wmbiff/gnutls-common.c,
+ wmbiff/gnutls-common.h, wmbiff/tlsComm.c, wmbiff/wmbiff.c,
+ wmgeneral/wmgeneral.c: 0.4.24, supporting newer gnutls, I think
+
+2004-06-18 Friday 21:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: paranoid test to see if /var/mail/nspring is
+ constructed wrong.
+
+2004-04-28 Wednesday 00:19 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, charutil.c, socket.c, test_wmbiff.c, wmbiff.c:
+ indent run
+
+2004-04-28 Wednesday 00:18 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: socket.c, test_wmbiff.c: handle ip addresses instead of
+ hostnames in sock_connect
+
+2004-04-27 Tuesday 23:35 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.23
+
+2004-04-27 Tuesday 23:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_wmbiff.c: ensure that sock_connect works with IP
+ addresses
+
+2004-04-21 Wednesday 21:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: oops, broke the cacheHeaders flag
+
+2004-04-20 Tuesday 04:55 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: charutil.c, charutil.h, test_wmbiff.c, wmbiff.c: factor
+ out comment stripping for testing, which seems to have passed
+
+2004-04-06 Tuesday 20:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Pop3Client.c, test_wmbiff.c: fix debian
+ #242458 -- allow IP addresses as server names for IMAP mailboxes,
+ and also for POP3 mailboxes
+
+2004-03-28 Sunday 00:36 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.22
+
+2004-03-28 Sunday 00:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, Pop3Client.c, ShellClient.c,
+ charutil.c, maildirClient.c, mboxClient.c, passwordMgr.c,
+ regulo.c, test_tlscomm.c, tlsComm.c, tlsComm.h, wmbiff.c: lots of
+ indent changes and a change to let msglst enable header caching
+ for imap
+
+2004-03-12 Friday 21:35 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: mention courier imapd's means of specifying
+ subfolders
+
+2004-02-14 Saturday 18:10 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: bugfix for cyrus imap servers, thanks to
+ Jon Ramsey
+
+2004-01-01 Thursday 23:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: really call it 0.4.20
+
+2004-01-01 Thursday 07:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/ShellClient.c, wmbiff/maildirClient.c,
+ wmbiff/mboxClient.c, wmbiff/passwordMgr.c, wmbiff/wmbiff.c: Sam
+ Izzo's patch
+
+2003-12-30 Tuesday 19:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am, configure.ac: add --disable-crypto
+
+2003-12-22 Monday 00:08 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: print failure message if imap login fails
+
+2003-11-09 Sunday 07:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/sample.wmbiffrc: mac os 10.3 mail responds to a different
+ way of identifying the inbox
+
+2003-11-09 Sunday 03:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.19
+
+2003-11-09 Sunday 03:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_tlscomm.c: fix bug #219787
+
+2003-11-08 Saturday 23:46 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: helper rule for sourceforge upload (I know, I know,
+ maintenance cruft making it into the release, whatever)
+
+2003-11-08 Saturday 23:46 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: philosophical definition of truth
+
+2003-11-08 Saturday 23:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: because having both from and subject
+ headers is no longer a way to tell when the end has happened,
+ must clean up the completed command tag explicitly
+
+2003-11-08 Saturday 23:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: avoid compiler warning from inconsistent
+ def of size_t as passed into printf
+
+2003-11-08 Saturday 22:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: ShellClient.c, charutil.c: strcpy is not defined to
+ handle overlapping regions. valgrind complains, rightly, so
+ reimplement lefttrim to avoid such behavior
+
+2003-11-08 Saturday 22:17 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: bump up default_sleep_interval to clean up
+ strace output while bored.
+
+2003-11-08 Saturday 22:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: handle messages without subject lines in
+ msglst
+
+2003-11-07 Friday 09:11 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: panther (mac 10.3) does not appear to
+ null-terminate passwords in the keychain for us
+
+2003-10-29 Wednesday 18:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Pop3Client.c: handle capitalized FROM and
+ SUBJECT headers common typical of spam spam spam
+
+2003-10-28 Tuesday 23:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_tlscomm.c: indent and add another check
+
+2003-10-28 Tuesday 23:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Makefile.am, test_wmbiff.c: indent
+
+2003-10-28 Tuesday 07:09 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Makefile.am, test_tlscomm.c: fix bug reported by
+ Jingshao Chen <jingshaochen at sbcglobal.net> with buffering
+ trouble, and incorporate a regression test to keep it from
+ accidentally popping up again
+
+2003-10-28 Tuesday 06:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: test_tlscomm.c, tlsComm.c: test for proper handling of
+ buffering small bits of expected data
+
+2003-10-26 Sunday 08:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, passwordMgr.c: sigh, I dislike running
+ make indent
+
+2003-10-26 Sunday 08:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS, wmbiff/Pop3Client.c, wmbiff/wmbiffrc.5.in: Paolo
+ Gianrossi's patch to provide msglst support for pop3 mailboxes
+
+2003-10-26 Sunday 07:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * check-includes.rb, wmbiff/maildirClient.c, wmbiff/socket.c:
+ include file reordering, based on wisdom from porting some other
+ networky code
+
+2003-10-26 Sunday 07:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: fix some ruby1.8 warnings, minor
+ cleanup
+
+2003-10-10 Friday 18:00 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.18
+
+2003-10-10 Friday 15:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: fix ruby1.8's complaint.
+
+2003-08-31 Sunday 18:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.17
+
+2003-08-31 Sunday 06:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: oops, looks like I resolved a conflict poorly
+
+2003-08-31 Sunday 04:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: build the test cases well
+
+2003-08-31 Sunday 03:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: test_wmbiff.c, tlsComm.h: check the newline bugfix
+
+2003-08-31 Sunday 03:32 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: bugfix to avoid handing odd newlines badly
+
+2003-07-31 Thursday 23:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: fix some potential bugs - an access of
+ freed memory and an uninitialized reference counter
+
+2003-07-20 Sunday 00:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: passwordMgr.c, test_wmbiff.c: fix a five-minute old
+ regression test failure where null was returned instead of an
+ empty string for an empty password. not sure it matters, but
+ maybe.
+
+2003-07-20 Sunday 00:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: oops, I left a use-after-free bug in the
+ askpass code
+
+2003-07-19 Saturday 23:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/passwordMgr.c: use the apple keychain to
+ grab passwords! I can very nearly forget about typing them in
+ anymore
+
+2003-07-10 Thursday 17:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: ensure that the current directory is not setgid when
+ making a distribution; this borks some untars
+
+2003-07-07 Monday 09:00 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: warnings cleanup
+
+2003-07-07 Monday 08:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/Client.h, wmgeneral/wmgeneral.c: call it
+ 0.4.16
+
+2003-07-07 Monday 08:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, passwordMgr.c, test_wmbiff.c:
+ fix memfrob * bug (memfrob makes *'s zero, so password length
+ must be tracked separately
+
+2003-07-04 Friday 21:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: handle comments the way I meant to...
+
+2003-07-03 Thursday 11:10 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: switch the new header cache to use
+ reference counting (better, but possibly buggy) instead of
+ locking (dumb, and certainly buggy)
+
+2003-07-03 Thursday 05:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: try to avoid repetitive complaints of
+ failed connections
+
+2003-07-03 Thursday 05:34 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: avoid repetitive error messages when hostname
+ lookup fails (such as when disconnected)
+
+2003-07-03 Thursday 05:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: last fix to geometry handling had a
+ compiler warning
+
+2003-07-03 Thursday 05:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: try doing geometry the way X intends it to
+ be done, at least as far as I can tell.
+
+2003-07-03 Thursday 01:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: make #'s comments only if preceded by whitespace
+ or at the beginning of the line
+
+2003-07-03 Thursday 00:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: looks like I'd broken the button click events
+ recently
+
+2003-07-03 Thursday 00:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/sample.wmbiffrc: osascript samples for driving mac mail
+ using applescript
+
+2003-06-30 Monday 23:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, tlsComm.c: warning message beautification
+
+2003-06-08 Sunday 07:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, MessageList.c, MessageList.h,
+ ShellClient.c: general rewrite of the msglst headers, so that the
+ list is pre-cached for responsiveness.
+
+2003-06-08 Sunday 06:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: document msglst and buttontwo
+
+2003-06-08 Sunday 06:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: show a watch pointer while working behind the
+ scenes
+
+2003-06-03 Tuesday 04:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: enable dependency tracking
+
+2003-04-17 Thursday 05:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: trap socket errors
+
+2003-04-17 Thursday 01:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: print the detailed version
+
+2003-04-17 Thursday 01:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, ShellClient.c, passwordMgr.c: space for detail
+ in grab command output, use the detail to populate a message list
+ in a getheaders function (eg. can see the list of thought to be
+ updated packages if using hte security.debian script
+
+2003-04-17 Thursday 01:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test-wmbiffrc.shell: test usingthe debian script, allows
+ trying shell get headers
+
+2003-04-17 Thursday 01:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: try to print a helpful hint message to use
+ gnutls-cli-debug
+
+2003-04-16 Wednesday 23:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: downgrade configure.ac use of AM_INIT_AUTOMAKE to
+ support automake-1.5
+
+2003-04-16 Wednesday 08:21 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: export GetColor
+
+2003-04-16 Wednesday 08:18 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, MessageList.c, MessageList.h,
+ tlsComm.c, wmbiff.c: indent run
+
+2003-04-16 Wednesday 08:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: get headers / message list support
+
+2003-04-16 Wednesday 08:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: messagelist
+
+2003-04-16 Wednesday 08:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: rename state to tls_state for clarity, small
+ cleanup, fixes for buffering several lines in an expectation
+
+2003-04-16 Wednesday 08:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: wmbiff.c, Client.h: message list, button 2 support
+
+2003-04-16 Wednesday 08:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: MessageList.c, MessageList.h: list new messages,
+ currently only with an imap driver
+
+2003-04-09 Wednesday 04:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: fall back to automake-1.5 if necessary
+
+2003-04-07 Monday 10:10 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: invalid is returned when it doesn't match?
+
+2003-04-07 Monday 09:41 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: fix some info messages - drop complaints about
+ version 0.2.3 of gnutls, mention certfile.
+
+2003-04-07 Monday 09:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: doc certfile
+
+2003-04-07 Monday 09:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: handle certfile errors properly; positive
+ return values from gnutls_certificate_set_x509_trust_file appear
+ okay.
+
+2003-03-30 Sunday 11:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: passwordMgr.c, test_wmbiff.c: oh, now I get why that
+ foolish null-termination was present. it's better now
+
+2003-03-30 Sunday 11:23 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: 0.4.15
+
+2003-03-30 Sunday 11:22 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: note the hash caveat
+
+2003-03-30 Sunday 11:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: remove (unreleased) foolhardy
+ null-termination
+
+2003-03-30 Sunday 10:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_wmbiff.c: just so as not to confuse anyone that
+ wmbiff allows #'s in passwords
+
+2003-03-30 Sunday 10:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * README, wmbiff/wmbiff.c, wmgeneral/wmgeneral.c,
+ wmgeneral/wmgeneral.h: support setting the background color using
+ -bg
+
+2003-03-28 Friday 08:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_wmbiff.c: check that passwords with # can be parsed
+
+2003-03-28 Friday 08:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: doc password parsing damage
+
+2003-03-11 Tuesday 08:07 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * README: gnupg reorganized their website
+
+2003-03-11 Tuesday 08:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: provide a helpful message as to where gnutls and
+ libgcrypt can be found in configure.ac
+
+2003-03-06 Thursday 21:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: fix debian bug #183529
+
+2003-03-03 Monday 19:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: make returned password length consistent
+ with stored password length
+
+2003-03-02 Sunday 02:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/Imap4Client.c, wmbiff/passwordMgr.c,
+ wmbiff/passwordMgr.h: in-memory frobnication of imap passwords
+
+2003-03-02 Sunday 02:17 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Makefile.am, Pop3Client.c, regulo.c,
+ regulo.h, socket.c, test_wmbiff.c, wmbiff.c: hostname paranoia
+ patch -- use -relax to skip hostname validation check, parse
+ ambiguous config lines
+
+2003-03-02 Sunday 01:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c, wmgeneral/wmgeneral.c: indent run
+
+2003-02-13 Thursday 21:07 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am, configure.ac: 0.4.14
+
+2003-02-08 Saturday 21:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: wmbiff.1, wmbiffrc.5.in: document restart schemes
+
+2003-02-08 Saturday 07:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: restart wmbiff also on ctrl-shift-left click
+
+2003-02-08 Saturday 03:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: restart on sig usr1 using exec()
+
+2003-02-08 Saturday 03:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: I think symlink is okay for autoreconf
+
+2003-02-08 Saturday 03:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: wmgeneral.c, wmgeneral.h: much prefer if wmgeneral
+ proclaimed that it would not modify argv; I think it's even true
+
+2003-01-28 Tuesday 11:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: remove check for gnuregex
+
+2003-01-28 Tuesday 11:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: bugfix to avoid problems with the new regex
+ scheme and the default mailbox (aliasing sucks.)
+
+2003-01-28 Tuesday 11:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/charutil.h: remove gnuregex.h incl
+
+2003-01-28 Tuesday 11:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: newline after error message
+
+2003-01-25 Saturday 04:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: remove dangling symlinks config.guess, config.sub
+
+2003-01-25 Saturday 04:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/list.c: compiler warning appeasement (shadowing index)
+
+2003-01-25 Saturday 04:32 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: use the non gnu-make form of the
+ indent-a-c-file rule
+
+2003-01-22 Wednesday 01:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: make sure ChangeLog exists locally.
+
+2003-01-21 Tuesday 08:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: fix some minor damage when select is
+ interrupted (EINTR)
+
+2003-01-21 Tuesday 05:55 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: warn if autoconf/libgnutls.m4 does not exist
+
+2003-01-20 Monday 19:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: add libgcrypt libraries if used to
+ test_wmbiff
+
+2003-01-20 Monday 19:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: remove possibly unneeded check for gdbm
+
+2003-01-19 Sunday 13:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, Makefile.am, Pop3Client.c,
+ ShellClient.c, charutil.c, charutil.h, passwordMgr.c,
+ test_wmbiff.c, tlsComm.c, wmbiff.c: general portability fixes,
+ including HAVE___ATTRIBUTE__
+
+2003-01-19 Sunday 13:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: regulo.c, regulo.h: posix based regular expression
+ handling with a not so lame interface
+
+2003-01-19 Sunday 13:11 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: portability fixes: HAVE___ATTRIBUTE__ (maybe),
+ libnsl (solaris), -no-cpp-precomp (os x)
+
+2003-01-04 Saturday 03:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/wmbiff.c: 0.4.12, release to fix bad
+ -geometry handling
+
+2003-01-03 Friday 20:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: fix geometry argument handling bug (Debian
+ #175220)
+
+2002-12-29 Sunday 07:46 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: I meant to say 6 hours
+
+2002-12-29 Sunday 05:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/sample.wmbiffrc: shell recipe for security.debian.rb
+
+2002-12-29 Sunday 05:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/security.debian.rb: didn't mean to commit with a 6 minute
+ refresh interval
+
+2002-12-29 Sunday 04:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am, check-includes.rb, configure.ac: add scripts
+ subdirectory to build system
+
+2002-12-29 Sunday 04:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * scripts/: Makefile.am, security.debian.rb: new scripts directory
+ to hold debian security checker and install it.
+
+2002-12-29 Sunday 03:25 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: general cleanup - use strdup_ordie,
+ malloc_ordie. reduce using ints and chars interchangeably.
+ static annotations on module-local variables
+
+2002-12-29 Sunday 03:22 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: bad_certificate called as if void, so change
+ the signature
+
+2002-12-29 Sunday 03:22 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: autodetect whether to use poll()
+
+2002-12-29 Sunday 02:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: Makefile.am, wmgeneral.c, wmgeneral.h: make
+ AddMouseRegion take an unsigned int for the region index (which
+ is an _index_ which means negative values need not apply)
+
+2002-12-29 Sunday 02:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: charutil.c, charutil.h: change signature of *Trim to
+ reflect that they can't fail (void instead of int); the return
+ values are ignored in wmbiff
+
+2002-12-29 Sunday 01:36 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: reorder functions to avoid pre-declaration.
+ should simplify reading the (now very long) code
+
+2002-12-29 Sunday 01:11 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: misc.c, misc.h: exec command can take a const char *
+
+2002-12-29 Sunday 01:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/sample.wmbiffrc: another askpass recipe
+
+2002-12-29 Sunday 00:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: cleanup unused variables
+
+2002-12-29 Sunday 00:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: surgical indent rule
+
+2002-12-29 Sunday 00:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/wmbiff.c: use automake/autoconf defined
+ PACKAGE_VERSION and PACKAGE_BUGREPORT
+
+2002-12-29 Sunday 00:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: support arbitrarily long password query
+ commands
+
+2002-12-29 Sunday 00:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: configuration file parsing cleanup, support
+ longer configuration options, remove some ad-hockery in favor of
+ sscanf
+
+2002-12-13 Friday 05:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac, wmbiff/tlsComm.c, wmbiff/wmbiff.1, wmbiff/wmbiff.c:
+ 0.4.10, -skip-certificate-check option
+
+2002-12-09 Monday 21:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS, wmbiff/sample.wmbiffrc, wmbiff/wmbiff.c,
+ wmbiff/wmbiffrc.5.in: Peter McAlpine's globalnotify patch
+
+2002-12-09 Monday 21:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: minor change to timeout behavior, just
+ delay a while before next check
+
+2002-12-02 Monday 07:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.ac: require gnutls 0.5.9, release 0.4.9
+
+2002-11-30 Saturday 07:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: more robust ETIMEDOUT handling -- just
+ chill out for a few minues rather than blacklist as a compromise
+ between the responsiveness of not retrying unresponsive servers
+ and the robustness of prodding on. the right thing is probably a
+ non-blocking connect, but that's messy
+
+2002-11-15 Friday 08:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: should really be able to catch these problems
+ earler - without gnutls, the build would fail
+
+2002-11-15 Friday 08:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autogen.sh: red hat hackery
+
+2002-11-13 Wednesday 06:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.1, wmbiff/wmbiff.c, wmgeneral/wmgeneral.c,
+ wmgeneral/wmgeneral.h: a method for not using the withdrawn state
+
+2002-11-12 Tuesday 08:27 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am, configure.ac, wmbiff/wmbiff.c, wmbiff/wmbiffrc.5.in,
+ wmgeneral/wmgeneral.c, wmgeneral/wmgeneral.h: Allow automatic
+ sizing of the wmbiff window, effective for other window managers.
+
+2002-10-26 Saturday 23:17 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * FromCVS.sh, autogen.sh: Rename FromCVS.sh to autogen.sh, which is
+ the "common" name for such script.
+
+2002-10-26 Saturday 23:15 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, Makefile.am, maint/changelog-header,
+ maint/prerelease.sh: Stop doing the ChangeLog header hack.
+ Instead, remove ChangeLog entirely from CVS and get it generated
+ correctly on dist. Remove unneeded maint scripts.
+
+2002-10-26 Saturday 23:12 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * FromCVS.sh: Add automake-1.7 support.
+
+2002-10-20 Sunday 21:58 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/: wmbiff.1, wmbiffrc.5.in: do not specify Debian
+ GNU/Linux... I'm actually more interested in the Hurd right now
+ :)
+
+2002-10-14 Monday 05:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/maildirClient.c: use mkstemp instead of mktemp to appease
+ the compiler
+
+2002-10-14 Monday 01:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: add the 'this file automatically generated'
+ tag
+
+2002-10-13 Sunday 21:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, tlsComm.c, tlsComm.h: Check certificate
+ hostname, using gnutls's new function
+
+2002-10-13 Sunday 21:27 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: a formatting glitch
+
+2002-10-13 Sunday 21:27 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FromCVS.sh, Makefile.am: use autoreconf instead of the ad-hockery
+
+2002-09-25 Wednesday 06:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FAQ: why doesn't wmbiff update my mailbox count when I read a
+ message
+
+2002-09-20 Friday 19:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FromCVS.sh: support redhat autoconf sadness
+
+2002-09-19 Thursday 07:00 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test_wmbiff.c: allow test to run when nnot linked with
+ gnutls
+
+2002-09-18 Wednesday 23:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/maildirClient.c: compiler warning fixes
+
+2002-09-18 Wednesday 23:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.ac, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/Makefile.am, wmbiff/maildirClient.c, wmbiff/test_wmbiff.c,
+ wmbiff/wmbiffrc.5.in: bugfix to allow imap mailbox filenames to
+ contain spaces, test that it works; also, prepare 0.4.8
+
+2002-09-14 Saturday 18:51 UTC -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+
+ * wmbiff/: Client.h, maildirClient.c, wmbiffrc.5.in: *
+ maildirClient: Added support for quick checking of writable
+ network-mounted maildirs where directory caching normally
+ causes unwanted delays.
+
+2002-08-16 Friday 07:55 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.ac, autoconf/libgnutls.m4,
+ wmbiff/Imap4Client.c, wmbiff/gnutls-common.c,
+ wmbiff/gnutls-common.h, wmbiff/tlsComm.c: handle new
+ gnutls/gnutls.h convention, release 0.4.7
+
+2002-08-06 Tuesday 08:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FromCVS.sh: seek out and use athe underrated automake 1.6.
+
+2002-07-27 Saturday 17:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, tlsComm.c: trivial formatting fixes
+
+2002-07-19 Friday 18:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.ac: release version 0.4.6
+
+2002-07-18 Thursday 02:55 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: ignore sigpipe, possible bugfix for abnormal
+ termination during suspend for imap/gnutls
+
+2002-07-04 Thursday 08:00 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.ac: last minute changes for 0.4.5
+
+2002-07-04 Thursday 01:07 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Makefile.am, Pop3Client.c, charutil.c,
+ tlsComm.c, wmbiff.c: valgrind debugging, and support for -exit.
+ some bugs were probably fixed, but since nobody has noticed yet,
+ I don't know if they mattered
+
+2002-07-04 Thursday 00:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: reminder in where valgrind complains
+
+2002-07-04 Thursday 00:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: add a top-level 'indent' rule
+
+2002-07-03 Wednesday 02:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: doubled the timeout to 40 seconds.
+
+2002-06-26 Wednesday 19:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, Makefile.am, autoconf/Makefile.am: die configure.in!
+ die acconfig.h!
+
+2002-06-26 Wednesday 18:56 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, FromCVS.sh, Makefile.am, configure.ac, configure.in,
+ autoconf/acconfig.h: migrate to newer autoconf (2.5) to try to
+ debug making-from-scratch problem and get rid of acconfig.h cruft
+
+2002-06-25 Tuesday 23:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: tiny automake 1.6 fix (doesn't appear to use
+ stamp-h. who knew.)
+
+2002-06-25 Tuesday 23:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * autoconf/libgnutls.m4: trivial upstream bugfix
+
+2002-06-25 Tuesday 23:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: never underestimate the complexity of
+ solutions involving automake
+
+2002-06-25 Tuesday 23:24 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in, wmbiff/Makefile.am: corrections to conditional
+ compilation of gnutls-common for automake 1.5 (and thereby the
+ true automake way)
+
+2002-06-25 Tuesday 23:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in, wmbiff/Makefile.am: only compile gnutls-common.[ch]
+ if gnutls is configured in (duh), and only check for gcrypt.h if
+ libgcrypt is installed and current
+
+2002-06-24 Monday 07:18 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, FromCVS.sh: roughly finished 0.4.4
+
+2002-06-24 Monday 07:16 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: restore certificate checking
+
+2002-06-24 Monday 07:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: gnutls-common.c, gnutls-common.h: indent run
+
+2002-06-24 Monday 01:23 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am, configure.in: basic gnutls 0.4.3 support
+ (that is, it compiles.)
+
+2002-06-24 Monday 01:18 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: gnutls-common.c, gnutls-common.h, tlsComm.c: basic
+ gnutls 0.4.3 support (that is, it compiles.)
+
+2002-06-23 Sunday 01:26 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: cleanup to periodic mail checking, removal of
+ the first mail check - now all cases are the same
+
+2002-06-21 Friday 04:34 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: y_ and x_origin, and num_mailboxes constants,
+ highlight color for fn, restructured mailbox creation routines
+
+2002-06-21 Friday 04:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Pop3Client.c: splint
+
+2002-06-21 Friday 04:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: LicqClient.c, ShellClient.c, charutil.c,
+ maildirClient.c, mboxClient.c, passwordMgr.c, test_wmbiff.c:
+ config.h
+
+2002-06-21 Friday 04:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: clarity and splint
+
+2002-06-21 Friday 04:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: splint support
+
+2002-06-21 Friday 04:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.1: highlight color
+
+2002-06-21 Friday 04:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: verify that config.h is included in each .c
+ file
+
+2002-06-15 Saturday 09:05 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: likely bugfix for newer autoconf?
+
+2002-06-15 Saturday 09:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: keep automake1.6 happy
+
+2002-06-08 Saturday 22:22 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in: release 0.4.3 final updates
+
+2002-06-08 Saturday 22:20 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: make the background black when using fonts
+
+2002-06-08 Saturday 22:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: wmgeneral.c, wmgeneral.h: font support, ability to
+ erase rectangles
+
+2002-06-08 Saturday 22:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: slightly changed debug messages; exists() is
+ more a test -f than a test -e
+
+2002-06-08 Saturday 22:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.1: documentation of -fg and -font options
+
+2002-06-08 Saturday 22:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, ShellClient.c: cleanup for splint
+ annotations
+
+2002-06-08 Saturday 22:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: basic font support, color selection, cleanup to
+ default configuration code, bugifx and cleanup to mouse region
+ code
+
+2002-06-08 Saturday 21:40 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: need config.h to get IPv6 support
+
+2002-06-01 Saturday 18:10 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog: 0.4.2
+
+2002-06-01 Saturday 17:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in, wmbiff/wmbiff.c: oops, didn't really want to
+ release with the crazy font stuff quite yet
+
+2002-06-01 Saturday 07:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in, wmbiff/test-wmbiffrc.shell: release
+ 0.4.1
+
+2002-06-01 Saturday 07:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS: release preparation
+
+2002-06-01 Saturday 06:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.h: prototypes for basic font support
+
+2002-06-01 Saturday 06:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: indent run
+
+2002-06-01 Saturday 06:02 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, ShellClient.c, charutil.c, mboxClient.c:
+ indent run
+
+2002-06-01 Saturday 06:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: font support, disabled by default
+
+2002-06-01 Saturday 06:00 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: a start at certificate checking (a daunting
+ task at the moment)
+
+2002-06-01 Saturday 05:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: declare exists()
+
+2002-06-01 Saturday 05:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: some basic font support, renaming some
+ variables for clarity
+
+2002-06-01 Saturday 05:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: correct date
+
+2002-06-01 Saturday 05:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in, wmbiff/socket.c: IPv6 support using getaddrinfo
+ from Jun-ichiro itojun Hagino <itojun at iijlab.net>
+
+2002-05-03 Friday 05:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in: Release 0.4.0
+
+2002-05-03 Friday 05:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: don't list TODO changes in ChangeLog, to avoid
+ confusion
+
+2002-05-03 Friday 05:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/mboxClient.c: type casting hackery to help architectures I
+ don't have
+
+2002-05-03 Friday 05:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: sample.wmbiffrc, wmbiffrc.5.in: lpq example creep
+
+2002-05-03 Friday 05:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: bugfix when alternates between numeric and
+ text
+
+2002-04-29 Monday 02:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, ShellClient.c, charutil.c, charutil.h: lclint
+ cleanups - strdup_ordie, some null annotations
+
+2002-04-27 Saturday 08:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, ShellClient.c, passwordMgr.c: cleanup to use
+ grabCommandOutput in passwordMgr instead of duplicating the
+ popen/fgets/pclose code
+
+2002-04-27 Saturday 08:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Makefile.am, charutil.c, passwordMgr.c,
+ passwordMgr.h, test_wmbiff.c: move passwordMgr testing to
+ test_wmbiff.c; catch a small bug in handling empty passwords
+
+2002-04-27 Saturday 08:29 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FromCVS.sh: apparently aclocal barfs when macros are defined both
+ in the system directory and in a local copy. semper fragile.
+
+2002-04-25 Thursday 20:28 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * README: add a note about gnutls version 0.3.5
+
+2002-04-25 Thursday 18:33 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: hack attempt at supporting gnutls built locally
+
+2002-04-25 Thursday 17:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, FromCVS.sh, autoconf/libgcrypt.m4,
+ autoconf/libgnutls.m4: add m4 macros for libgcrypt and libgnutls
+ to the repository, so that FromCVS can be run to regenerate
+ configure.in, even on systems without gnutls.
+
+2002-04-20 Saturday 09:55 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: correct a problem uncovered by sourceforge's
+ compile farm
+
+2002-04-20 Saturday 09:27 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: BSD fix (no strndup, no sighandler_t)
+
+2002-04-20 Saturday 09:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: LicqClient.c, mboxClient.c: move msgs=-1 assignment on
+ failure to the common openMailbox()
+
+2002-04-20 Saturday 08:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in, wmbiff/Client.h: update meta-information
+ for prerelease 5
+
+2002-04-20 Saturday 08:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: correct syntax for making a test program
+
+2002-04-20 Saturday 08:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/sample.wmbiffrc: finish deprecating
+
+2002-04-20 Saturday 08:12 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: sample.wmbiffrc, wmbiffrc.5.in: document back-tick
+ expansion, deprecate mbox style without mbox: prefix
+
+2002-04-20 Saturday 07:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, LicqClient.c, ShellClient.c, mboxClient.c:
+ oops (indent)
+
+2002-04-20 Saturday 07:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: LicqClient.c, mboxClient.c: refactor mailbox stat()'ting
+ to reduce duplicated code and supprort backticks.
+
+2002-04-20 Saturday 07:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: refactor command execution code to support
+ backtick foo expansion
+
+2002-04-20 Saturday 07:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Makefile.am, test_wmbiff.c: add tests for bbacktick
+ expansion
+
+2002-04-20 Saturday 07:49 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: ctime has become useless; new prototypes to
+ handle backtick
+
+2002-04-16 Tuesday 07:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/LicqClient.c, wmbiff/Pop3Client.c, wmbiff/mboxClient.c,
+ wmbiff/passwordMgr.c, wmbiff/wmbiff.c: remove vestigial
+ pc->open()
+
+2002-04-16 Tuesday 07:08 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test-make.sh: unnecessary now that autoconf is involved
+
+2002-04-15 Monday 22:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: dist the FAQ
+
+2002-04-15 Monday 21:19 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: Makefile.am, list.c, list.h, misc.c, misc.h,
+ wmgeneral.c, wmgeneral.h: run make indent; also tolerate standard
+ geometry string (dumping the dimensions provided)
+
+2002-04-15 Monday 21:06 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: bugfix to sigchld_handler (argh)
+
+2002-04-15 Monday 08:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, Makefile.am, configure.in, wmbiff/Makefile.am,
+ autoconf/Makefile.am: try to make the distcheck target work
+ correctly. voodoo.
+
+2002-04-15 Monday 08:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FAQ: a little documentation
+
+2002-04-15 Monday 02:21 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: treat all gicu messages as new (they're unread)
+
+2002-04-15 Monday 02:10 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: chmod 0444 wmbiffrc.5 to remind me not to try to
+ edit it.
+
+2002-04-15 Monday 02:09 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5.in: document finger, changes to shell
+
+2002-04-15 Monday 01:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: ShellClient.c, wmbiff.c: waitpid until done
+
+2002-04-15 Monday 01:48 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: slightly nicer message
+
+2002-04-15 Monday 01:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in, wmbiff/wmbiff-master-contrast.xpm:
+ 0.4.0pre4 - finger support, text from shell support, minor code
+ reorganization
+
+2002-04-15 Monday 01:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS, README: add Andelko Horvat to the list of contributors,
+ remove author list from README
+
+2002-04-15 Monday 01:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/test-wmbiffrc.shell: test finger as well
+
+2002-04-15 Monday 01:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: TextStatus to hold a three-character status
+ message
+
+2002-04-15 Monday 01:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: support TextString as status; factor
+ blitMsgCounters as displayMsgCounters was starting to get ugly,
+ add finger recipe to use ShellClient instead of a separate module
+
+2002-04-15 Monday 01:26 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: use chomp to remove the newline from
+ ssh-askpass output
+
+2002-04-15 Monday 01:26 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: charutil.c, charutil.h: duplicate perl's chomp()
+
+2002-04-15 Monday 01:26 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: return sigchld to default hander before
+ using popen; handle text input. Much complexity, I hope it's
+ worth it.
+
+2002-04-15 Monday 01:25 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff-master-led.xpm: support yellow text
+
+2002-04-15 Monday 01:24 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: derive wmbiff-master-contrast.xpm from
+ wmbiff-master-led.xpm
+
+2002-04-12 Friday 05:54 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/socket.c: extra debugging messages, to be in-line with our
+ -debug to stdout philosophy
+
+2002-04-11 Thursday 21:39 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * autoconf/: install-sh, missing, mkinstalldirs: Shouldn't be in
+ CVS...
+
+2002-04-11 Thursday 18:24 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: attempt to fix Jordi's configure bug
+
+2002-04-11 Thursday 07:24 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Pop3Client.c: APOP bugfix (unreleased bug)
+
+2002-04-09 Tuesday 07:52 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * ChangeLog, configure.in: bump version to 0.4.0pre3 - permissions
+ checking for .wmbiffrc added.
+
+2002-04-09 Tuesday 07:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * Makefile.am: try to tell the difference between running make dist
+ with cvs and missing cvs2cl (an error), and running make dist
+ without cvs (which should be ok).
+
+2002-04-09 Tuesday 07:45 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: LicqClient.c, maildirClient.c, mboxClient.c: some
+ explicit casts to make compiling on non-linux a bit more
+ warning-free
+
+2002-04-09 Tuesday 07:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: permissions checking for .wmbiffrc (if it
+ exists), some minor cleanup associated with this.
+
+2002-04-09 Tuesday 07:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile.am: _DATA files don't get distributed, add the
+ skins into extra_dist. automake can be confusing
+
+2002-04-08 Monday 09:35 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in, wmbiff/wmbiffrc.5, wmbiff/wmbiffrc.5.in:
+ automatically generate wmbiffrc.5 based on the results of
+ configure, so that the configure-time chosen defaults are
+ accurately shown
+
+2002-04-07 Sunday 19:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * configure.in: don't try to configure gnutls if libz or libgdbm
+ aren't installed
+
+2002-04-07 Sunday 19:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * FromCVS.sh: allow for automake 1.5's need for depcomp
+
+2002-04-07 Sunday 05:08 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * COPYING, ChangeLog, FromCVS.sh, INSTALL, Makefile.am,
+ configure.in, autoconf/acconfig.h, autoconf/install-sh,
+ autoconf/missing, autoconf/mkinstalldirs, maint/changelog-header,
+ wmbiff/Client.h, wmbiff/Imap4Client.c, wmbiff/LicqClient.c,
+ wmbiff/Makefile, wmbiff/Makefile.am, wmbiff/Pop3Client.c,
+ wmbiff/charutil.h, wmbiff/maildirClient.c, wmbiff/mboxClient.c,
+ wmbiff/tlsComm.c, wmbiff/wmbiff.c, wmgeneral/Makefile.am,
+ wmgeneral/wmgeneral.c: use automake / autoconf; after checkout
+ run ./FromCVS.sh
+
+2002-04-07 Sunday 03:23 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * AUTHORS: automake required file, duplicated from README
+
+2002-04-05 Friday 19:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff-master-contrast.xpm: a first cut higher-contrast
+ skin
+
+2002-04-05 Friday 19:43 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Makefile, sample.wmbiffrc, test-make.sh, wmbiff.c:
+ askpass - invoke ssh-askpass to fill in passwords for IMAP
+ servers; skin - dynamically load an .xpm background
+
+2002-04-05 Friday 19:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5: documentation of askpass and skin
+
+2002-04-05 Friday 19:08 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: explicit handling of timeouts
+
+2002-04-05 Friday 19:02 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/passwordMgr.c: askpass having a space in it is an INFO,
+ not an ERR.
+
+2002-04-04 Thursday 08:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, Makefile, Pop3Client.c,
+ passwordMgr.c, passwordMgr.h, sample.wmbiffrc, test-make.sh:
+ interactive password prompting support for imap - leave password
+ in the : format blank to use
+
+2002-03-26 Tuesday 16:30 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, wmbiff/Makefile: Released WMBiff 0.3.8.
+
+2002-03-18 Monday 09:47 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.h: un-shadow index
+
+2002-03-18 Monday 09:46 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/wmgeneral.c: un-shadow a global variable
+
+2002-03-14 Thursday 08:51 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * README: correct and expand upon crypto instructions
+
+2002-03-12 Tuesday 23:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, Pop3Client.c, ShellClient.c,
+ tlsComm.c: fixed misunderstanding of the use of ## in macros with
+ strings - the compiler does the concatenation, not the
+ preprocessor
+
+2002-03-11 Monday 00:11 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: slightly better message on expect failure
+
+2002-03-09 Saturday 08:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: debug messages cleanup; start handling
+ pclose errors; remove open() function pointer assignment;
+ #include fix
+
+2002-03-09 Saturday 08:03 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: list.h, wmgeneral.c: minor warning cleanups
+
+2002-03-08 Friday 19:26 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * README: credit Ben
+
+2002-03-07 Thursday 22:20 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: fix error return status (ben's 'lil' patch)
+
+2002-03-07 Thursday 07:04 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: appropriate credits
+
+2002-03-06 Wednesday 18:01 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: fix my sloppy mistake in shell path parsing
+
+2002-03-06 Wednesday 07:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: misplaced string.h
+
+2002-03-06 Wednesday 07:59 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: rename in Read_Config_File for more 'index'
+ purging
+
+2002-03-06 Wednesday 07:44 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/ShellClient.c: fix a potential file descriptor leak
+
+2002-03-06 Wednesday 07:15 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Makefile, ShellClient.c, mboxClient.c,
+ sample.wmbiffrc, test-wmbiffrc.shell, wmbiff.1, wmbiff.c,
+ wmbiffrc.5: Draft shell command and gnomeicu support from Beno�t
+ Rouits with minor modifications 1) implement gicu using the shell
+ module rather than as a separate module, 2) edit Ben's shell
+ format to have extra colons for extensibility, 3) add some extra
+ error checking in the shell method. I also added a test wmbiffrc
+ that can be used to verify that the gicu and shell methods
+ "work".
+
+2002-03-05 Tuesday 05:02 UTC -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+
+ * wmbiff/maildirClient.c: cosmetic changes
+
+2002-03-04 Monday 06:57 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/mboxClient.c: convert a lingering fprintf to DM
+
+2002-03-02 Saturday 23:25 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Makefile, wmbiff.c: a little -Wshadow and
+ -Wcast-qual cleanup (or, eliminate the use of 'index' as a
+ variable name)
+
+2002-03-02 Saturday 22:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: add preprocessor define to handle portability of
+ __attribute__ tag to non-gcc compilers (untested)
+
+2002-03-02 Saturday 06:42 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: indent run (oops)
+
+2002-03-02 Saturday 06:41 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Pop3Client.c, Imap4Client.c: minor reorganization of
+ gcrypt-needing authentication schemes
+
+2002-03-02 Saturday 06:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: attribute tags for warning cleanup w/o gnutls
+
+2002-03-02 Saturday 06:36 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: gcc attribute tags, minor debug message cleanup
+
+2002-03-02 Saturday 06:31 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile: rearrange which compiler warnings are implied by
+ DEBUG
+
+2002-03-02 Saturday 05:58 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Client.h: use off_t instead of size_t in Licq and Maildir
+ for file sizes from stat()
+
+2002-03-02 Saturday 05:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: bugfix to support compilation without crypto
+
+2002-03-01 Friday 11:58 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/wmbiff.c: Added -debug to help text. Removed Gennady's
+ mail address and added our devel list.
+
+2002-03-01 Friday 11:28 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Fixed install rule in Makefile.
+
+2002-03-01 Friday 08:41 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, LicqClient.c, Makefile,
+ Pop3Client.c, maildirClient.c, mboxClient.c, tlsComm.c,
+ tlsComm.h, wmbiff.1, wmbiff.c, wmbiffrc.5: Replaced DEBUG_x
+ preprocessor defines with a -debug option and debug configuration
+ keyword. Replaced most debugging messages with a DM (debug
+ message) macro. Removed gnutls version 0.2.x support. Added
+ troubleshooting section to man page.
+
+2002-02-03 Sunday 22:48 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.7.
+
+2002-02-03 Sunday 22:43 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Bumped WMBIFF_VERSION to 0.3.7.
+
+2002-02-02 Saturday 18:04 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/: Client.h, Imap4Client.c, Makefile, Pop3Client.c,
+ charutil.h: Makefile fixes from Simon L. Nielsen, which help
+ building wmbiff in FreeBSD. Fixed the previous IMAP regex patch.
+
+2002-01-27 Sunday 20:20 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, maint/changelog.sed, maint/prerelease.sh: Some fixes
+ for the maint scripts.
+
+2002-01-27 Sunday 19:59 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.6.
+
+2002-01-27 Sunday 19:56 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Imap4Client.c: Indent fixes.
+
+2002-01-27 Sunday 19:52 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Bump WMBIFF_VERSION to 0.3.6.
+
+2002-01-27 Sunday 12:46 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * README, wmbiff/Imap4Client.c, wmbiff/Makefile, wmbiff/wmbiffrc.5:
+ Alternate regex for imap/imaps which allows "@" in passwords.
+ Fix to correctly handle the auth list in imap. Patch from David
+ Smith <davidsmith at acm.org>.
+
+2002-01-14 Monday 01:51 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.5.
+
+2002-01-14 Monday 01:50 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Bump WMBIFF_VERSION to 0.3.5.
+
+2002-01-12 Saturday 19:18 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: quote patch from Nick Mitchell, ref debian
+ #128863
+
+2002-01-12 Saturday 06:17 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: debugging for gnutls3
+
+2002-01-12 Saturday 05:50 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Makefile: clarify what to do with gnutls version define
+
+2002-01-12 Saturday 05:30 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Makefile, charutil.c, tlsComm.c: update for the
+ interface change in gnutls 0.3.0
+
+2001-11-23 Friday 15:57 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.4.
+
+2001-11-23 Friday 15:55 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Bumped version to 0.3.4, and release.
+
+2001-11-23 Friday 15:53 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, wmbiff/sample.wmbiffrc: Doc updates for 0.3.4.
+
+2001-11-16 Friday 07:11 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, Pop3Client.c, charutil.c: regexes limit
+ password and username to 32 characters
+
+2001-11-16 Friday 06:08 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmgeneral/: wmgeneral.c, wmgeneral.h: -Wwrite-strings cleanliness
+
+2001-11-16 Friday 01:13 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Client.h, Imap4Client.c, Makefile, Pop3Client.c,
+ charutil.c: rewrite of authentication code to a) allow users to
+ specify authentication type, b) fall back to other authentication
+ methods when hash-based authentication fails (because not
+ everybody uses the cleartext password file) c) fix debug messages
+
+2001-11-16 Friday 00:40 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/charutil.h: regex helpers common to pop3 and imap4 clients
+ extracted and moved here
+
+2001-11-16 Friday 00:40 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: tlsComm.c, tlsComm.h: blacklist and debugging updates
+ for gnutls 0.2.10 and DM macro
+
+2001-11-16 Friday 00:39 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiffrc.5: authentication method list, reduced
+ indentation to fit screen better
+
+2001-11-16 Friday 00:38 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff-master-led.xpm: made pixmap const char
+
+2001-11-16 Friday 00:37 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: -Wwrite-strings cleanliness
+
+2001-11-02 Friday 08:53 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/: Imap4Client.c, wmbiff.c, wmbiffrc.5: Prefer "imaps"
+ instead of "sslimap" (sslimap is still supported, but imaps is
+ documented, and a better name).
+
+2001-11-02 Friday 08:48 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/tlsComm.c: Small debugging message to help if a connection
+ ends unexpectedly.
+
+2001-10-29 Monday 13:57 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.3.
+
+2001-10-29 Monday 13:54 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/: Imap4Client.c, wmbiff.c: Indent run.
+
+2001-10-28 Sunday 23:32 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, README, wmbiff/Makefile, wmbiff/sample.wmbiffrc:
+ Preparation for 0.3.3. Documentation updates.
+
+2001-10-28 Sunday 22:22 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/wmbiff.c: Bugfix: initialize libgcrypt properly before
+ cram-md5 (or probably apop) authentication.
+
+2001-10-24 Wednesday 15:35 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * maint/changelog.sed: Added Neil to the sed script.
+
+2001-10-23 Tuesday 21:14 UTC -- Neil Spring <nspring at cs.washington.edu>
+
+ * wmbiff/Imap4Client.c: error check just in case sighup patch is
+ applied
+
+2001-10-23 Tuesday 18:35 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released WMBiff 0.3.2.
+
+2001-10-23 Tuesday 18:33 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Bump WMBIFF_VERSION to 0.3.2.
+
+2001-10-05 Friday 16:10 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Changed order of additions to LIBS and
+ EXTRAFLAGS, removed extra WMBIFF_VERSION definition.
+
+2001-10-04 Thursday 09:50 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * README, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/LicqClient.c, wmbiff/Makefile, wmbiff/Pop3Client.c,
+ wmbiff/charutil.c, wmbiff/charutil.h, wmbiff/maildirClient.c,
+ wmbiff/mboxClient.c, wmbiff/socket.c, wmbiff/tlsComm.c,
+ wmbiff/tlsComm.h, wmbiff/wmbiff.1, wmbiff/wmbiff.c,
+ wmbiff/wmbiffrc.5: * Big patch from Neil Spring which adds lots
+ of crypto support to WMBiff. * WMBiff can now speak IMAP over
+ TLS and CRAM-MD5, and APOP using libgcrypt. * Known problems:
+ - gnutls is being developed still, so it may have security
+ related bugs. - A bug in gnutls (a too-small buffer) may cause
+ problems in the parsing of openssl certificates. This should
+ be fixed by gnutls soon, hopefully. Added error messages if
+ this bug is tickled. If you've got problems with IMAP SSL,
+ please try upgrading gnutls. If the problem persists, let us
+ know. - IMAP has totally been rewritten, so bugs may crop up.
+ - Pop3 hasn't been rewritten to use the TLS primitives, though
+ it probably could be if someone wanted to. * There's a new
+ interface for reading and writing to the socket in
+ tlsComm.[ch]. This makes the IMAP code somewhat independent of
+ whether ssl is used, and provides nicer primitives to help skip
+ 'informational' messages. * WITH_TLS and WITH_GCRYPT are
+ on-by-default in the Makefile. TLS applies to encryption,
+ GCRYPT to cram-md5 and apop authentication. Since gnutls
+ depends on libgcrypt anyway, these probably don't need to be
+ independent. Some compile warnings may be generated when these
+ are disabled. * Added code to optionally include dmalloc.h
+ and link -ldmalloc. This doesn't do anything at the moment, but
+ shouldn't hurt. It's off-by-default. * IMAP connections are now
+ persistent. persistent. This is to cut down on the need to
+ re-negotiate an SSL connection every time you want to check
+ mail. It tries to use just one connection per
+ (server/username/password/port number), which means multiple
+ mailboxes need only one connection. * There are a handful of
+ lclint (http://lclint.cs.virginia.edu) annotations in
+ tlsComm.[ch]. These should also not hurt anyone, and are meant to
+ keep the signal to noise ratio of lclint high. * The rewritten
+ IMAP code uses the GNU regex library to handle the
+ configuration line. I think its clearer than the cascading
+ strtok() solution, but the regex might not be perfect. *
+ Removed an unnecessary "inline" keyword from charutil.h. * Added
+ a TODO document with the bits that are missing from the picture.
+ * Please bow in awe at NAKAYAMA Takao, Jay T. Francis and
+ specially Neil Spring for all of this.
+
+2001-10-04 Thursday 09:21 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/ApopClient.c: Removed unneeded Apop support code, now
+ integrated in Neil and Jay's patch.
+
+2001-10-04 Thursday 09:00 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * maint/changelog.sed: Added my other SF account, which I intend to
+ use now.
+
+2001-10-04 Thursday 08:54 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, README, wmbiff/Client.h, wmbiff/Makefile,
+ wmbiff/sample.wmbiffrc, wmbiff/wmbiff.1, wmbiff/wmbiff.c,
+ wmbiff/wmbiffrc.5: Backed out hoehoe's patch, preparing to apply
+ Neil's.
+
+2001-09-24 Monday 11:58 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, README, wmbiff/ApopClient.c, wmbiff/Client.h,
+ wmbiff/Makefile, wmbiff/sample.wmbiffrc, wmbiff/wmbiff.1,
+ wmbiff/wmbiff.c, wmbiff/wmbiffrc.5: Added APOP support, patch
+ from NAKAYAMA Takao <hoehoe at wakaba.jp>. Fixed some bits of the
+ manpage (Jordi) Bumped version to 0.3.2.
+
+2001-09-24 Monday 11:56 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * maint/prerelease.sh: Removed -t to cvs2cl invocation, to make
+ cleaner ChangeLogs.
+
+2001-06-24 Sunday 18:17 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog: Released wmbiff 0.3.1.
+
+2001-06-24 Sunday 18:08 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, README: Removed duplicate entry for Vladimir Popov in
+ README.
+
+2001-06-23 Saturday 00:09 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Imap4Client.c: Imap fix from Rob Funk
+
+2001-06-23 Saturday 00:07 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, maint/changelog.sed, maint/prerelease.sh: Renamed
+ CHANGES to ChangeLog and RELEASE-NOTES to NEWS, modified release
+ scripts accordingly. Added Mark to the sed file.
+
+2001-06-22 Friday 23:55 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * CHANGES, RELEASE-NOTES: Renamed to NEWS and ChangeLog
+
+2001-06-19 Tuesday 03:52 UTC -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+
+ * CHANGES, maint/prerelease.sh: * Whoops! Messed up CVS expansion
+ in maint/prerelease.sh. Fixed it. * Also changed
+ maint/prerelease.sh a bit.
+
+2001-06-19 Tuesday 03:38 UTC -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+
+ * CHANGES, ChangeLog, README, RELEASE-NOTES, maint/changelog.sed,
+ maint/prerelease.sh, wmbiff/Client.h, wmbiff/Imap4Client.c,
+ wmbiff/LicqClient.c, wmbiff/Makefile, wmbiff/Pop3Client.c,
+ wmbiff/charutil.c, wmbiff/charutil.h, wmbiff/maildirClient.c,
+ wmbiff/mboxClient.c, wmbiff/sample.wmbiffrc, wmbiff/socket.c,
+ wmbiff/wmbiff.1, wmbiff/wmbiff.c, wmbiff/wmbiffrc.5: * Another
+ big patch that mucks with everything. I probably deserve to be
+ flamed for this practice. Feel free... :-) * Added
+ maint/prerelease.sh script. Run it before making any releases.
+ * Added maint/changelog.sed. Add your SourceForge userid here.
+ * Moved ChangeLog to RELEASE-NOTES (see below). * Added a new
+ file, CHANGES (created by maint/prerelease.sh) that tabulates
+ all the CVS changes. * Added "distclean" to wmbiff/Makefile. *
+ Added CVS Id$ to all the files in wmbiff/ . * I reformatted ths
+ changelog, again. I hope this is the last time I need to do
+ this. The CVS logs should be used for all changes, and this file
+ should by updated for user-visible changes only, from now on.
+ (Dwayne C. Litzenberger) * Updated the README to reflect that
+ Gennady Belyakov died right after releasing wmBiff 0.2. May
+ your soul rest in peace, Gennady. (Dwayne C. Litzenberger)
+
+2001-06-16 Saturday 01:02 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, wmbiff/Makefile, wmbiff/sample.wmbiffrc,
+ wmbiff/wmbiff.c: An FHS fix for wmbiff.c and use $(CC) in the
+ Makefile
+
+2001-05-17 Thursday 04:22 UTC -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+
+ * ChangeLog, wmbiff/Makefile, wmbiff/charutil.c: Committing Mark
+ Hurley's patch
+
+2001-05-16 Wednesday 10:48 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, README: Updated some obsolete info in README
+
+2001-05-11 Friday 15:04 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, wmbiff/Imap4Client.c, wmbiff/Makefile,
+ wmbiff/charutil.c, wmbiff/charutil.h, wmbiff/wmbiff.c: Mark's
+ wmbiffrc parsing fix, small Makefile changes and bump version to
+ 0.3.0.
+
+2001-05-11 Friday 14:49 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * wmbiff/Makefile: Uncommitted stuff to deal with the removal of
+ the xmp link
+
+2001-05-04 Friday 11:01 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * ChangeLog, wmbiff/Makefile: Updated Changelog and Makefile for
+ 0.2r.
+
+2001-05-01 Tuesday 16:11 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * README.licq, ChangeLog, README, wmgeneral/list.c,
+ wmgeneral/list.h, wmgeneral/misc.c, wmgeneral/misc.h,
+ wmgeneral/wmgeneral.h, wmbiff/socket.c, wmgeneral/wmgeneral.c,
+ wmbiff/Imap4Client.c, wmbiff/Makefile, wmbiff/mboxClient.c,
+ wmbiff/sample.wmbiffrc, wmbiff/wmbiff.1, wmbiff/wmbiff.c,
+ wmbiff/wmbiff-master-led.xpm, wmbiff/Client.h,
+ wmbiff/LicqClient.c, wmbiff/Pop3Client.c, wmbiff/maildirClient.c,
+ wmbiff/wmbiffrc.5: Initial import to SourceForge, version
+ 0.2q1+Debian
+
+2001-05-01 Tuesday 16:11 UTC -- Jordi Mallach <jordi at sindominio.net>
+
+ * README.licq, ChangeLog, README, wmgeneral/list.c,
+ wmgeneral/list.h, wmgeneral/misc.c, wmgeneral/misc.h,
+ wmgeneral/wmgeneral.h, wmbiff/socket.c, wmgeneral/wmgeneral.c,
+ wmbiff/Imap4Client.c, wmbiff/Makefile, wmbiff/mboxClient.c,
+ wmbiff/sample.wmbiffrc, wmbiff/wmbiff.1, wmbiff/wmbiff.c,
+ wmbiff/wmbiff-master-led.xpm, wmbiff/Client.h,
+ wmbiff/LicqClient.c, wmbiff/Pop3Client.c, wmbiff/maildirClient.c,
+ wmbiff/wmbiffrc.5: Initial revision
+
diff --git a/FAQ b/FAQ
new file mode 100644
index 0000000..288cc70
--- /dev/null
+++ b/FAQ
@@ -0,0 +1,125 @@
+* Does WMBiff have a mailing list?
+
+Subscribe to wmbiff-devel at lists.sourceforge.net.
+
+echo "subscribe wmbiff-devel" | mail majordomo at lists.sourceforge.net
+
+* Why doesn't WMBiff update immediately after I read my mail?
+
+WMBiff looks only at the flags associated with mail messages
+to decide if they've been read. If your mail reader doesn't
+bother to update those flags immediately after you read a
+message, WMBiff has (essentially) no way of knowing that
+you've read the message.
+
+There are some workarounds: In mutt, you can ask it to sync
+the mailbox using the sync-mailbox command: it will write
+the mailbox file to disk (or back to the IMAP server) so
+that WMBiff can update its counters. Mutt's sync-mailbox
+command is bound to the $ key by default. In Mac OS X mail,
+changing to a different mailbox usually flushes changes,
+so I often hit Command-4 to switch to the sent mailbox
+for a few seconds.
+
+No workarounds are known for Kmail, which updates the status
+flags of all mail as if it were read, then adds its own
+status field to note that some are unread. (sourceforge
+tracker #706995).
+
+* WMBiff doesn't work. How do I submit a bug?
+
+See the Troubleshooting section of the wmbiffrc man
+page.
+
+If that doesn't work, run 'wmbiff -debug > wmbiff.log' and
+remove any passwords left in wmbiff.log. Submit this log
+and your wmbiffrc (sanitized of passwords of course) using
+'reportbug' under Debian, or by sending mail to
+wmbiff-devel.
+
+* WMBiff doesn't do something I want. How do I suggest a feature?
+
+If using Debian, use 'reportbug wmbiff' and submit a
+wishlist bug. Or, send mail with your suggestion to
+wmbiff-devel at lists.sourceforge.net. Feature requests on
+sourceforge don't get the same attention.
+
+Some previously requested features can't be done:
+ - Count IMAP deleted messages separately (the protocol
+ doesn't support it without locking the mailbox).
+ - Reset the count of new messages to zero when spawning
+ a mailer (it would just jump back again the next time
+ wmbiff looked).
+
+Previously suggested features that are really hard:
+ - Support dock sizes other than 64x64
+ - Inverse video on new mail (or do more visually to grab attention)
+
+* I'm about to start writing a patch. How do I make sure it will
+get incorporated in WMBiff?
+
+Start a conversation on wmbiff-devel, and you'll probably
+get some help.
+
+Tidbits:
+ Avoid creating new Clients.
+ - If you want an existing client to do something differently,
+ find a way to parameterize its behavior.
+ - If you want to use a shell command to get some
+ information, make a recipe for ShellClient (open wmbiff.c
+ and search for 'gicu').
+ If you must create a new client, Avoid Duplicating Code.
+ Document your patch. Add entries as appropriate to:
+ - sample.wmbiffrc
+ - wmbiffrc.5.in
+ - wmbiff.1
+
+* How do I get the very latest WMBiff from SourceForge CVS?
+
+See http://sourceforge.net/cvs/?group_id=26389, or
+http://sourceforge.net/projects/wmbiff then click on CVS.
+
+cvs -d:pserver:anonymous at cvs.sourceforge.net:/cvsroot/wmbiff login
+cvs -z3 -d:pserver:anonymous at cvs.sourceforge.net:/cvsroot/wmbiff co wmbiff
+
+* I added a feature to WMBiff. How do I submit a patch?
+** If you've modified code from a .tar.gz
+ If you've modified a version of WMBiff downloaded from the web:
+ (in the wmbiff-x.x.x/wmbiff directory)
+ make indent
+ cd ..
+ make distclean
+ cd ..
+ mv wmbiff-x.x.x wmbiff-changed
+ tar xvfz wmbiff-x.x.x.tar.gz
+ diff --unified --recursive --new-file wmbiff-x.x.x wmbiff-changed > my-patch
+** If you've modified code from CVS
+ (in the wmbiff/wmbiff directory)
+ make indent
+ cd ..
+ [ optionally 'make distcheck' ]
+ make maintainer-clean
+ cvs update -d
+ [ resolve any conflicts ]
+ cvs diff -u | less [ make sure the differences are roughly correct ]
+ cd ..
+ mv wmbiff wmbiff-changed
+ [ now checkout a new copy of wmbiff ]
+ diff --unified --recursive --new-file --exclude CVS wmbiff wmbiff-changed > my-patch
+
+** Sending the patch
+Submit my-patch as an attachment to mail sent to
+wmbiff-devel. Don't forget to subscribe to the mailing list
+so that we can discuss your patch. This is roughly the same
+procedure you'll use to submit patches to any code, although
+others may not have the 'make indent' step.
+
+
+* This FAQ is wrong.
+
+Send mail to wmbiff-devel at lists.sourceforge.net.
+
+;;; Local Variables: ***
+;;; mode: outline ***
+;;; End: ***
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ 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, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ 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 at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' 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. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. 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.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+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 must use a version of `make' that
+supports the `VPATH' variable, such as 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 `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have 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.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' 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.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+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 host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+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.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--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.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..8bd4dce
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,44 @@
+SUBDIRS = wmgeneral wmbiff autoconf scripts
+EXTRA_DIST = ChangeLog FAQ TODO
+
+ACLOCAL_FLAGS = -I autoconf
+## dummies.
+ACLOCAL = @ACLOCAL@ $(ACLOCAL_FLAGS)
+
+## no longer needed AUTOHEADER = @AUTOHEADER@ -l autoconf
+
+# make maintainer-clean is all about returning to CVS.
+# aclocal.m4 is generated by aclocal
+# config.h.in is generated by autoheader
+# stamp-h.in appears somewhere
+# Makefile.in and configure are obviously generated.
+MAINTAINERCLEANFILES = aclocal.m4 config.h.in stamp-h.in \
+ Makefile.in configure Changelog.bak stamp-h1
+maintainer-clean-local:
+ rm -f *~
+
+# conf.libgnutlstest seems to outstay its welcome.
+# I don't know why the -stamp s linger.
+DISTCLEANFILES = conf.libgnutlstest build-stamp install-stamp
+
+dist-hook-local: ChangeLog
+ chmod -R g-s .
+
+indent:
+ cd wmbiff && make indent
+ cd wmgeneral && make indent
+
+# manually increment version in configure.ac, which should be enough.
+ChangeLog: Makefile configure.ac
+ @if test "x$(CVS2CL)" != "x" && test -e maint/changelog.sed; then \
+ echo "Running $(CVS2CL)..."; \
+ $(CVS2CL) --stdout --utc --day-of-week -I TODO -I NEWS -I .cvsignore | \
+ sed -f maint/changelog.sed > $@; \
+ else \
+ echo "Unable to build ChangeLog for distribution"; \
+ exit 0; \
+ fi
+
+sourceforgeupload: $(distdir).tar.gz
+ ncftpput upload.sourceforge.net incoming $(distdir).tar.gz
+ md5sum $(distdir).tar.gz
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..510ccab
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,476 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+ at SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+
+ACLOCAL = @ACLOCAL@ $(ACLOCAL_FLAGS)
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CVS2CL = @CVS2CL@
+DEFAULT_ASKPASS = @DEFAULT_ASKPASS@
+DEPDIR = @DEPDIR@
+GCRYPT_MAN_STATUS = @GCRYPT_MAN_STATUS@
+GNUTLS_COMMON_O = @GNUTLS_COMMON_O@
+GNUTLS_MAN_STATUS = @GNUTLS_MAN_STATUS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
+LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SKINDIR = @SKINDIR@
+STRIP = @STRIP@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+SUBDIRS = wmgeneral wmbiff autoconf scripts
+EXTRA_DIST = ChangeLog FAQ README.licq TODO
+
+ACLOCAL_FLAGS = -I autoconf
+
+# make maintainer-clean is all about returning to CVS.
+# aclocal.m4 is generated by aclocal
+# config.h.in is generated by autoheader
+# stamp-h.in appears somewhere
+# Makefile.in and configure are obviously generated.
+MAINTAINERCLEANFILES = aclocal.m4 config.h.in stamp-h.in \
+ Makefile.in configure Changelog.bak stamp-h1
+
+
+# conf.libgnutlstest seems to outstay its welcome.
+# I don't know why the -stamp s linger.
+DISTCLEANFILES = conf.libgnutlstest build-stamp install-stamp
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
+ uninstall-info-recursive all-recursive install-data-recursive \
+ install-exec-recursive installdirs-recursive install-recursive \
+ uninstall-recursive check-recursive installcheck-recursive
+DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
+ Makefile.in NEWS TODO aclocal.m4 config.h.in configure \
+ configure.ac
+DIST_SUBDIRS = $(SUBDIRS)
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
+
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+$(ACLOCAL_M4): configure.ac
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) 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: $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ touch $(srcdir)/config.h.in
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+uninstall-info-am:
+
+# 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):
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $$MAKEFLAGS; amf=$$2; \
+ 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; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+ETAGS = etags
+ETAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$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; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = .
+distdir = $(PACKAGE)-$(VERSION)
+
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+
+GZIP_ENV = --best
+distcleancheck_listfiles = find . -type f -print
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ mkdir $(distdir)
+ $(mkinstalldirs) $(distdir)/wmbiff
+ @list='$(DISTFILES)'; for file in $$list; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ (cd $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" \
+ distdir=../$(distdir)/$$subdir \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ $(am__remove_distdir)
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \
+ && 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 \
+ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ find $$dc_install_base -type f -print ; \
+ exit 1; } >&2 ) \
+ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
+ && rm -f $(distdir).tar.gz \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @echo "$(distdir).tar.gz is ready for distribution" | \
+ sed 'h;s/./=/g;p;x;p;x'
+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 after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+
+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_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_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 "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf autom4te.cache
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
+ clean-generic clean-recursive dist dist-all dist-gzip distcheck \
+ distclean distclean-generic distclean-hdr distclean-recursive \
+ distclean-tags distcleancheck distdir dvi dvi-am dvi-recursive \
+ info info-am info-recursive install install-am install-data \
+ install-data-am install-data-recursive install-exec \
+ install-exec-am install-exec-recursive install-info \
+ install-info-am install-info-recursive install-man \
+ install-recursive install-strip installcheck installcheck-am \
+ installdirs installdirs-am installdirs-recursive \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local maintainer-clean-recursive mostlyclean \
+ mostlyclean-generic mostlyclean-recursive tags tags-recursive \
+ uninstall uninstall-am uninstall-info-am \
+ uninstall-info-recursive uninstall-recursive
+
+maintainer-clean-local:
+ rm -f *~
+
+dist-hook-local: ChangeLog
+ chmod -R g-s .
+
+indent:
+ cd wmbiff && make indent
+ cd wmgeneral && make indent
+
+# manually increment version in configure.ac, which should be enough.
+ChangeLog: Makefile configure.ac
+ @if test "x$(CVS2CL)" != "x" && test -e maint/changelog.sed; then \
+ echo "Running $(CVS2CL)..."; \
+ $(CVS2CL) --stdout --utc --day-of-week -I TODO -I NEWS -I .cvsignore | \
+ sed -f maint/changelog.sed > $@; \
+ else \
+ echo "Unable to build ChangeLog for distribution"; \
+ exit 0; \
+ fi
+
+sourceforgeupload: $(distdir).tar.gz
+ ncftpput upload.sourceforge.net incoming $(distdir).tar.gz
+ md5sum $(distdir).tar.gz
+# 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/NEWS b/NEWS
new file mode 100644
index 0000000..939dc83
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,493 @@
+Release Notes
+~~~~~~~~~~~~~
+Release 0.4.27 - October 8, 2005
+ * GNUTLS 1.2 support
+ * Minor bugfixes.
+
+Release 0.4.26 - October 10, 2004
+ * Don't crash if no certificate is sent by the remote side
+ and -skip-certificate-check has been given.
+ * Avoid duplicate error messages.
+ * Disable libgcrypt secure memory warning.
+ * security.debian.rb: better when disconnected.
+
+Release 0.4.25 - June 23, 2004
+ * Fix a build error in the new gnutls certificate
+ verification code on s390.
+
+Release 0.4.24 - June 22, 2004
+ * Use GNUTLS 1.0.4 and GCRYPT 1.1.90, current Debian
+ unstable package libgnutls10-dev.
+
+Release 0.4.23 - April 27, 2004
+ * Allow server hostnames in IMAP to be IP addresses
+ (start with a number).
+
+Release 0.4.22 - March 27, 2004
+ * Skip examine/search unless requested with msglst option.
+ * Exit if ssh-askpass permissions check fails.
+
+Release 0.4.21 - February 21, 2004
+ * Fix a bug where fetch times out to some IMAP servers.
+
+Release 0.4.20 - January 1, 2004
+ * Add --disable-crypto for source-based distributions
+ while libgcrypt is unstable.
+ * Sam Izzo's patch for changing the mouse click action
+ depending on whether a box has new mail.
+
+Release 0.4.19 - November 8, 2003
+ * Fix test_tlscomm with the right signature for read()
+ * Another bugfix to IMAP msglst when headers are abnormal.
+ * Avoid strcpy for overlapping regions.
+
+Release 0.4.18 - November 8, 2003
+ * Update security.debian.rb for ruby 1.8.
+ * Bugfix to avoid infinite loop when reading from IMAP.
+ * Bugfix to msglst to allow capitalized header names.
+ * Add msglst feature to Pop3 mailboxes. (Paolo Gianrossi)
+ * Bugfix to OS X keychain use for panther.
+
+Release 0.4.17 - August 31, 2003
+ * On Mac, ask the keychain for passwords if
+ askpass = internal:apple:keychain
+ * Bugfix to an infinite loop found in the
+ TLS interface.
+
+Release 0.4.16 - July 7, 2003
+ * Checks TLS certificates. See wmbiffrc(5) for
+ details on the certfile option. Designed to work
+ with mutt.
+ * Show a busy mouse cursor while talking to remote
+ servers, to show that wmbiff won't be responsive
+ to mouse clicks for a little bit.
+ * New buttontwo (middle click) action to complement
+ action (left mouse click) and fetchcmd (right mouse).
+ * #'s are now only comments in .wmbiffrc at the
+ beginning of lines or following whitespace,
+ allowing #'s in (most) passwords.
+ * AppleScript examples for driving Apple's Mail
+ application in sample.wmbiffrc
+ * Special mailbox action 'msglst' brings up a
+ transient window showing message headers from IMAP
+ and program output for shell methods. This is
+ intended to be faster than starting up a new
+ mail program or re-executing a script.
+ * Avoid repetitive error messages when disconnected.
+ * Use conventional -geometry option handling.
+ * Fix bug in 0.4.15 to re-enable *'s in IMAP passwords.
+
+Release 0.4.15 - Mar 30, 2003
+ * Frobnicate internally stored passwords, partially
+ obfuscating them in memory. Not actually more
+ secure, but harder to casually discover a password.
+ * Tighten configuration file lines to more quickly
+ detect misconfiguration. Add the -relax option if
+ it is too paranoid.
+ * Add support for -bg to round out -hi and -fg color
+ specifiers.
+
+Release 0.4.14 - Jan 24, 2003
+ * Handle building on systems with both posix and gnu
+ regex in different but conflicting files.
+ * Restart wmbiff on SIGUSR1. You may need to use
+ 'killall -USR1 wmbiff' if it gets stuck.
+ * Restart wmbiff on ctrl-shift mouse 1.
+
+Release 0.4.13 - Jan 20, 2003
+ * Fix a file descriptor leak when using
+ both Shell and IMAP clients.
+ * Portability to Mac OS X, Solaris, and probably BSD
+ restored (thanks sourceforge compile farm!) with a
+ partial rewrite of regular expression handling for
+ IMAP and POP mailboxes.
+
+Release 0.4.12 - Jan 3, 2003
+ * Fix a bug introduced in 0.4.9 that interfered with
+ -geometry handling. (Debian #173813)
+
+Release 0.4.11 - Dec 28, 2002
+ * security.debian.rb script to check for updates on
+ security.debian.org, installed in $prefix/lib/wmbiff/
+ add: path.x=/usr/lib/wmbiff/security.debian.rb to
+ your .wmbiffrc (and install ruby if you haven't already).
+ * Internal cleanups to allow long askpass commands.
+
+Release 0.4.10 - Dec 12, 2002
+ * Peter McAlpine's globalnotify feature - elect to play a
+ sound on new mail in *any* mailbox without a chorus of
+ sounds from every mailbox.
+ * -skip-certificate-check option for when your imaps server
+ is misconfigured and you can't do anything about it.
+
+Release 0.4.9 - Dec 1, 2002
+ * GNUTLS v0.5.9 or higher required
+ * Check TLS certificate hostname against the hostname we're
+ connecting to. This raises the bar, but does not make
+ wmbiff's TLS implementation secure against man in the
+ middle attacks.
+ * WMBiff scales to the number of mailboxes you're
+ using. For openbox, this means less wasted space in the
+ slit and the possibility of up to 40 mailboxes. For
+ WindowMaker, this means more pretty chrome and less dark
+ LED if you have only a couple boxes. If you prefer the empty
+ cells at the end, place "path.4=<space><space>" in your
+ .wmbiffrc.
+
+Release 0.4.8 - Sept 18, 2002
+ * GNUTLS v0.5.1-0.5.6, gcrypt v1.1.8 required.
+ * Allow spaces in IMAP mailbox paths. The new syntax is:
+ server/"mail box with spaces" where the old is server/mailbox.
+ See wmbiffrc(5) for details.
+ * Avoid filesystem caching for network mounted maildirs.
+ See wmbiffrc(5) for details. (Dwayne C. Litzenberger)
+
+Release 0.4.7 - August 16, 2002
+ * GNUTLS v0.5.1, gcrypt v1.1.8 required. (no other changes)
+
+Release 0.4.6 - July 19, 2002
+ * Ignore sigpipe so that apm suspend works with IMAP/TLS.
+ * Memory handling bugfixes to appease valgrind.
+ * GNUTLS v0.4.3, gcrypt v1.17 expected
+
+Release 0.4.4 - June 27, 2002
+ * GNUTLS version 0.4.3 required. The API has changed, and
+ wmbiff is no longer compatible with GNUTLS versions prior
+ to 0.4.3. Certificate checking may be slightly more strict.
+ * GCRYPT version 1.1.7 is expected as well.
+ * Partial rewrite of mailbox-parsing code, splint annotations.
+ * Bugfix in debug messages of ShellClient.
+ * Internal cleanups; migration to autoconf 2.5
+
+Release 0.4.3 - June 8, 2002
+ * IPv6 support for real. (missed a detail with autoconf)
+ * Preliminary font support, allowing variable colors. Use
+ wmbiff -fg violet to give it a spin. Note: if the number of
+ old messages is at least 1000, the old number of messages
+ will not be completely erased when new mail arrives.
+ * Mouse handling fix.
+ * Cleanup of internals: handling of default configuration when
+ .wmbiffrc does not exist, vertical position of rows, variable
+ names, etc.
+ * GNUTLS version 0.3.5 is expected; earlier and later versions
+ may be incompatible.
+ * This release is by Neil Spring <nspring at cs.washington.edu>.
+
+Release 0.4.2 - June 1, 2002
+ * Bugfix: accidentally released a partial feature.
+
+Release 0.4.1 - June 1, 2002
+
+ * This release is by Neil Spring <nspring at cs.washington.edu>.
+ * GNUTLS version 0.3.5 is expected; earlier and later versions
+ may be incompatible.
+ * IPv6 is now supported, thanks to Jun-ichiro itojun Hagino
+
+Release 0.4.0 - May 3, 2002
+
+ * This release is by Neil Spring <nspring at cs.washington.edu>.
+ * GNUTLS version 0.3.5 is expected; earlier and later versions
+ may be incompatible.
+ * askpass: Passwords can be left empty for IMAP: ssh-askpass
+ will be used to prompt the user. See sample.wmbiffrc
+ and wmbiffrc(5).
+ * skinfile: Background pixmaps can be specified in .wmbiffrc.
+ This has the effect of "skins." See wmbiffrc(5).
+ Add "skinfile=wmbiff-master-contrast.xpm" to .wmbiffrc
+ for a more readable wmbiff.
+ * finger: Finger client added - finger a user's mailbox to get its
+ status. Requires perl and finger commands. See wmbiffrc(5).
+ Thanks to Andelko Horvat.
+ * shell: Improvements to ShellClient - now allows three character
+ text to be printed as status. If "new" is on the output
+ line, the text will be in yellow. Thanks to Andelko Horvat.
+ * mbox: Paths can be specified including shell expressions
+ in `'s. If requested, this feature can be expanded to other
+ clients. Nested expressions are not supported.
+ * Permissions on .wmbiffrc are checked to protect security.
+ Only a warning is printed now. This will degenerate in
+ later releases for .wmbiffrc's that store passwords.
+ * Migrated to automake / autoconf to detect defaults for
+ ssh-askpass and prepare for future changes.
+ * Bugfix to handle -geometry tags with dimension as generated
+ by fvwmSaveDesk. The size is ignored. (in Debian 0.3.8-3)
+
+Release 0.3.8 - Tue, 26 Mar 2002 17:17:07 +0100
+
+ * Added GnomeICU support.
+ * Added an experimental shell command method which reads the output
+ for a given command. See wmbiffrc(5) for details.
+ * Debug support moved to runtime, using the -debug switch.
+ * Fix for the install rule in Makefile.
+
+Release 0.3.7 - Sun, 3 Feb 2002 23:46:44 +0100
+
+ * No, 0.3.6 never happened :)
+ * Removed unneeded auth list fix which broke things.
+ * Makefile cleanup, with better FreeBSD support. You can now easily
+ use the external GNU regex lib.
+
+Release 0.3.6 - Sun, 27 Jan 2002 20:49:52 +0100
+
+ * Added a new syntax for IMAP, which allows using a "@" in
+ the password field. See wmbiffrc(5) for details.
+ * Fix for a correct usage of the auth list in IMAP.
+
+Release 0.3.5 - Mon, 14 Jan 2002 02:43:23 +0100
+
+ * Added support for GNUtls 0.3. You can still compile wmbiff using
+ GNUtls 0.2.x by removing the GNUTLS_VER=3 define in the Makefile.
+ * Fixed password quoting in IMAP logins.
+
+Release 0.3.4 - Fri, 23 Nov 2001 16:56:29 +0100
+
+ * "imaps" is now prefered to "sslimap" in config files. The old type
+ is still supported for backwards compatibility.
+ * You can now specify what protocol wmbiff should use for a given Pop3
+ or IMAP mailbox. If unspecified, it will try the secure ones first,
+ falling back to unsecure if they fail. See wmbiffrc(5).
+ * Added some debug messages for tls connections.
+ * Pop3 path parsing rewrite.
+ * Manual page fixes.
+ * Compile warning fixes.
+
+Release 0.3.3 - Mon, 29 Oct 2001 14:55:00 +0100
+
+ * Sanity check to IMAP code: exit if wmbiff tries to connect to more
+ than 5 servers.
+ * Fix a missbehaviour of cram-md5 (broke pop3).
+ * Documentation updates.
+
+Release 0.3.2 - Tue, 23 Oct 2001 20:30:37 +0200
+
+ * After some tries (other OpenSSL based patches, independent APOP
+ & CRAM-Md5 patches) we've come up with something based on GNUtls and
+ gcrypt, which are GPL based and have no licensing issues for us.
+ See ChangeLog for details.
+ * WMBiff now supports IMAP-SSL, APOP and CRAM-Md5 authentication. These
+ can be disabled at compile time, commenting out the WITH_TLS and
+ WITH_GCRYPT defines. (Neil Spring, NAKAYAMA Takao and Jay T. Francis).
+
+Release 0.3.1 - Sun, 24 Jun 2001 20:15:41 +0200
+
+ * Replaced /var/spool/mail with /var/mail, which is what the FHS mandates.
+ All decent systems should have either the directory or a symlink pointing
+ somewhere else. (Jordi Mallach)
+ * I reformatted ths changelog, again. I hope this is the last time I need
+ to do this. The CVS logs should be used for all changes, and this file
+ should by updated for user-visible changes only, from now on.
+ (Dwayne C. Litzenberger)
+ * Updated the README to reflect that Gennady Belyakov died right after
+ releasing wmBiff 0.2. May your soul rest in peace, Gennady.
+ (Dwayne C. Litzenberger)
+ * Fixed the IMAP support, again. (Rob Funk)
+
+
+Release 0.3.0 - Fri, 16 May 2001 12:16:44 +0200
+
+ * [ReadLine] removed previous trim leading spaces, added TrimFull. Fixes
+ Debian Bug #95849 (Mark Hurley).
+ * There was a bug where if a POP3 or IMAP mailbox read failed and the
+ following reads were successful, but no mail was in the server, the given
+ mailbox would remain reading "XX". Now it updates the counter no matter
+ what the read was (Mark Hurley).
+ * wmBiff would only count as new mails in mbox mailboxes with "N" flags,
+ ignoring those marked "ON" (Rob Funk).
+ * Fixed reading of quoted imap folders, which some IMAPd's do (Rob Funk).
+ * README: updated some very obsolete info. (Jordi Mallach)
+
+
+Release 0.2q1+Debian - Tue, 1 May 2001 10:11:00 +0000
+
+ * Moved to CVS at SourceForge. (Jordi Mallach)
+
+
+Release 0.2q1 - Fri, 13 Apr 2001 02:47:10 -0400
+
+ * This release is by Mark Hurley <debian4tux at telocity.com>.
+ * wmbiff/Client.h: move DEBUG_* macros to wmbiff/Makefile
+ * wmbiff/Pop3Client.c:
+ + My password contains an @ character. This causes
+ the pop3 line to be incorrectly parsed by wmbiff.
+ * Drop all of the ":" after the pop3 and delimit all values with
+ spaces. This works well, as passwords/user-id's all agree that
+ the space is a non-legit value.
+
+ Example: assume my password is: myEmailhasa at init
+
+ Old way:
+ path.3=pop3:debian4tux:myEmailhasa at init@mail.telocity.com
+
+ New way:
+ path.3=pop3:debian4tux myEmailhasa at init mail.telcoity.com
+
+ Ahh...before you say it. "Backward compatibility?" You will
+ also find in the patch, a NEW function. So that the OLD and
+ NEW way is easily compatible with all ".wmbiffrc" files.
+
+ Dev. Comments:
+ This was not the cleanest way to implement it, but I had to
+ suffice with a clean/quick implementation. I originally wrote
+ one function to handle past and new parsing. However, I
+ thought it would be beneficial to leave them separated, so we
+ could eventually drop the old method?
+
+ Related Changes:
+ The man page will need to be updated (not provided in patch).
+ We can weed the "old" style out of the example script as well.
+ Still explaining the changes in the man page to leave out
+ confusion in a users mind (as they are likely to find "old"
+ style scripts).
+ + My mail server at Telocity.com is following the RFC's to
+ a "T". RFC 1725 states that the LAST command be removed.
+ After some searching I have NOT turned up a replacement.
+ Which does make sense, this command is only so useful,
+ and contributes to the popularity of other such remoting
+ such as LDAP?
+ * I've set the Unread messages to the TotalMessages,
+ assuming (as suggested by the RFC) no messages have been
+ read. I have also suppressed the error printed to
+ stderr, it is correct to return an error, *now*. ;)
+
+ The only way to keep track of messages which have been
+ read, is to remember the unique number assigned to them.
+ This is what fetchmail does. However, it does not work
+ correctly if you check and read mail thru other methods
+ (a web mail client).
+ * wmbiff/wmbiff.c:
+ - for (index = 0; index < 4; index++)
+ + for (index = 0; index < 5; index++)
+
+ BUG! Last postion #4 was not correctly being checked.
+ Now correctly checks each position.
+
+
+Release 0.2q - Tue, 20 Mar 2001 05:32:35 +0100
+
+ * This release is by Jorge Garc�a <Jorge.Garcia at uv.es>.
+ * wmbiff/{*.[ch]}: removed unnecesary includes.
+ * wmbiff/wmbiff.c: some cleanups and optimizations.
+ + init_biff:
+ * show error if user config file does not exists
+ * use of userconfig "interval" (wasn't correctly parsed)
+ + {do_biff, displayMsgCounters}: some changes to make Sleep_Interval
+ and Blink_Mode local
+ + parse_cmd: some changes to make uconfig_file local
+ + {BlinkOn, BlinkOff, BlinkToogle}: Removed (merged by do_biff)
+ + {ReadConfigString, ReadConfigInt}: Removed
+ + countmail: removed init in header (wasn't used)
+ + ReadLine: Created (new parsing code, extracts pairs of setting
+ and value)
+ + Read_Config_File: now there is only ONE parse not 36!
+ * wmbiff/{IMap4Client.c, Pop3Client.c}: check for correct format line to
+ avoid "segmentation fault" while parsing.
+
+
+Release 0.2p - Mon, 12 Mar 2001 00:00:00 -0600
+
+ * This release is by Dwayne C. Litzenberger <dlitz at dlitz.net>.
+ * Added maildir support! Yay!
+ * Stole the manpages from Debian.
+ * Massive (lack of) coding style cleanup; Standardized coding style using
+ GNU indent.
+ * Reversed order of ChangeLog as suggested by Jordi.
+ * Cleaned up the v0.2o ChangeLog entry. What a mess! Added missing credits.
+ * Cleaned up and reformatted the rest of the changelog to an almost-Debian
+ format while I'm at it. It's much more readable that way.
+ * Moved definition of WMBIFF_VERSION to the Makefile.
+ * All your base are belong to us.
+ * I'm not maintaining wmBiff; I just submitted a big patch. Send your
+ complaints (or complements) to Yong-iL Joh.
+
+
+Release 0.2o - Mon, 12 Mar 2001 00:00:00 +0900
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * I don't think the date of this changelog entry is right.
+ (Dwayne C. Litzenberger)
+ * Jordi Mallach <jordi at sindominio.net>, Debian's wmbiff maintainer, sent
+ me an email a couple of days ago which included a patch with man pages.
+ The patch did the following:
+ + Fixed a major upstream bug that renders this new wmbiff unusable.
+ Thanks to Guillaume Morin, J�r�me Marant and Mark Hurley for their
+ help identifying the bug, and Jorge Garc�a <Jorge.Garcia at uv.es> for
+ writing a patch. Basically, the new upstream broke backwards
+ compatibility of wmbiffrc with Gennady's wmbiff, fixed that.
+ This patch also fixes wmbiff not using $MAIL or defaulting to
+ /var/spool/mail/$USER if no ~/.wmbiffrc is found (closes: #87778).
+ + wmbiff/wmbiff.c: updated WMBIFF_VERSION to current.
+ + wmbiff/{socket.c, wmbiff.c}: removed <sys/time.h> includes.
+ + debian/{wmbiff.1, wmbiffrc.5}: updated for IMAP4 and Licq support.
+ + Jorge Garc�a removed the segfault in Jordi's wmbiffrc
+ + Vladimir Popov <pva48 at mail.ru> fixed a potential buffer overflow
+ in init_biff() (The "/* Make labels look right */" section).
+ + Jorge Garc�a <Jorge.Garcia at uv.es> fixed a display bug in the
+ number-of- mails display.
+ * use poll() instead of select()
+
+ -- Yong-iL Joh <tolkien at mizi.com> 12-Mar-2001 +0900
+
+
+Release 0.2n - Tue, 20 Feb 2001 0:00:00 +0900
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * Nick Clarey <nclarey at 3glab.com> sent me a patch.
+ that enhances the following:
+ + UW Imap server 2000.283rh
+ + Config file now supports IMAP mailbox "paths" rather than
+ just the mailbox name (e.g. mail/foo/blah)
+
+
+Release 0.2m - Mon, 5 Feb 2001 00:00:00 +0900
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * Imap4Client.c did not close when a connection error occurred. Fixed it.
+
+
+Release 0.2l - Thu, 11 Jan 2001 00:00:00 +0900
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * Imap4Client.c had a bug when trying to connect to an imap4 server. Fixed
+ it.
+
+
+Release 0.2j - Mon, 1 Jan 2001 00:00:00 +0900
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * Because I can't contact the author, I jumped to version 0.2j
+ * Added imap4-based mail server check component.
+ * Divided wmbiff.c to wmbiff.c, LicqClient.c mboxClient.c
+
+
+Release 0.2-licq - Sat, 1 Jan 2000 00:00:00 +0000
+
+ * This release is by Yong-iL Joh <tolkien at mizi.com>.
+ * The actual date of this release is unknown, so I picked New Year's Day,
+ Y2K. (Dwayne C. Litzenberger)
+ * I found it from http://www.licq.org/download.html.
+
+
+Release 0.2 - Fri, 26 Nov 1999 00:00:00 +0000
+
+ * This release is by Gennady Belyakov <gb at ccat.elect.ru>.
+ * We don't actually know the time zone of Gennady's changelog entries
+ (Dwayne C. Litzenberger).
+ * POP3 support added with (auto)fetching
+ * digits blinking on new mail arrival
+ * resource wasting lowered
+ * individual rescan interval for differrent mailboxes
+ * some bugfixes
+
+
+Release 0.1a - Thu, 18 Nov 1999 00:00:00 +0000
+
+ * This release is by Gennady Belyakov <gb at ccat.elect.ru>.
+ * Some fixes with intialization
+
+
+Release 0.1 - Wed, 17 Nov 1999 00:00:00 +0000
+
+ * Initial release by Gennady Belyakov <gb at ccat.elect.ru>.
+
+
+$Id: NEWS,v 1.61 2005/10/08 18:13:09 bluehal Exp $
diff --git a/README b/README
new file mode 100644
index 0000000..07a9d43
--- /dev/null
+++ b/README
@@ -0,0 +1,114 @@
+
+ Introducing
+
+ WMBiff is an WindowMaker docking utility, that displays number of
+ total messages count or unread mail messages count in differrent
+ mailboxes.
+
+ WMBiff was created by Gennady Belyakov in 1999, and was continued by
+ a team of volunteers after his death.
+
+ Green ( cyan? :) ) digits display total number of messages, if there
+ are no unread messages in it.
+
+ Yellow digits display number of unread messages, with blinking on new
+ mail arrival, if any.
+
+ At this moment unix-style (mbox), maildir, POP3, APOP and IMAP mailboxes
+ are supported. WMBiff also understands Licq's history files.
+ WMBiff supports up to 5 mailboxes (but you can start 2 or more
+ wmbiff's with differrent configs).
+
+ Pressing on a 1st (left) mouse button will execute appropriate mail
+ reader (if defined in config file). Right-clicking will exec mail
+ fetching program (if any).
+
+ It is also possible to execute user-defined command line on new mail
+ arrival (for example, play .WAV file).
+
+ _________________________________________________________________
+
+ Compiling and Installation
+
+Extract the archive:
+ tar -xvzf wmbiff-0.x.tar.gz
+
+Enter the wmbiff directory and follow INSTALL's directions.
+ cd wmbiff-0.x/
+ ./configure
+
+For crypto support either:
+ *) Install gnutls and libgrcypt packages from your distribution.
+ *) Download them from http://www.gnupg.org/(en)/download/mirrors.html
+ Choose a mirror, then download from the alpha/gnutls and
+ alpha/libgcrypt directories.
+ *) Do nothing; the configure script will note its absence.
+
+NOTE: gnutls-0.3.5 is the version that this release was
+tested with. Newer versions may have incompatible changes.
+
+Make the binary:
+ make
+
+Install the binary:
+ make install
+
+This will copy the binary to /usr/local/bin
+
+Then you need to copy sample.wmbiffrc into your home directory as
+.wmbiffrc, correct it as you like. Or, you can use the ``-c'' option
+and specify differrent name of config file.
+ Without any config file wmbiff will use only default mailbox
+(from environment variable MAIL), labeled with word SPOOL, at first
+position. All other positions will be empty.
+ _________________________________________________________________
+
+ See AUTHORS to see who has contributed to WMBiff.
+ _________________________________________________________________
+
+ Any suggestions/bug reports please send to our mailing list,
+
+ wmbiff-devel at lists.sourceforge.net
+
+ Please include the output of 'wmbiff -debug'.
+
+ _________________________________________________________________
+
+UPDATE [2001-06-18]:
+
+On Tuesday, 22 May 2001, Jordi Mallach sent the following email to the
+wmbiff-devel list:
+
+ Hello,
+ I just found evidence of what I had believed for a long time.
+
+ http://www.monkey.org/openbsd/archive/ports/0101/msg00311.html
+
+ Gennady Belyakov passed away right after releasing 0.2 and when he
+ stopped answering mail :|
+
+ I guess we need to update the docs.
+
+ Jordi
+
+Here is the message, if that URL becomes unavailable:
+
+ To: ports at openbsd.org
+ Subject: Re: mail/wmbiff update
+ From: Vladimir Popov <pva48 at mail.ru>
+ Date: Sat, 27 Jan 2001 09:34:15 +0500
+
+ On Fri, Jan 26, 2001 at 01:02:59PM +0000, Christian Weisgerber wrote:
+ >
+ > The major issue I have with this port is that the master site/home
+ > page is unreachable.
+ >
+
+ Well, wmbiff's author Gennady Belyakov passed away in late November 1999.
+ That's why that url isn't any longer valid.
+
+ --
+ Vladimir
+
+May your soul rest in peace, Gennady.
+
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..726f49f
--- /dev/null
+++ b/TODO
@@ -0,0 +1,98 @@
+This is not a prioritized list. Patches that accomplish
+these todo items are welcome.
+
+* Config file rewrite
+ The current configuration file has the following problems
+** # comments make #'s unsuitable for passwords.
+** : and @ delimiters make such characters unsuitable for
+ passwords.
+** the hierarchical configuration is not exported cleanly,
+ setting a default and then propagating or overriding it
+ requires an odd syntax.
+** elements with spaces are problematic
+** annotations / customizations (such as the authentication
+ methods) are cumbersome.
+** continuation lines would allow richer shell actions without
+ external shell scripts.
+* GNUTLS 0.5.9
+** adds gnutls_set_default_priority, which could clean up
+ a lot of the code to set priorities for ciphers that
+ don't really matter to wmbiff.
+* Font support
+** Erase counts > 1000 successfully (redraw the whole line)
+** Discover height of the font, scale appropriately.
+** Draw relative to symbolic width, height.
+* Finish checking .wmbiffrc permissions.
+ With shell command execution support, it is even more
+ important to protect against other/group writability.
+ With passwords in the .wmbiffrc, .wmbiffrc shouldn't be
+ readable. It might be best to complain all the time, but
+ only abort when a password is used from a readable file,
+ or a shell command is executed from a writable file.
+* Better timeout handling
+ Sometimes my IMAP server is slow... well, it's my fault
+ that I keep a few thousand messages on it. The current
+ timeout code will cause it to fail prematurely.
+* Generic constructors for mboxes.
+ There's some common code across different Clients;
+ this is one piece that could use refactoring.
+* Add more shell "recipes" besides gicu.
+ Just added 'finger'. I'm hoping to add something to
+ integrate 'remind' just as soon as I can figure it out.
+* Support on/off status LED's, for, for example,
+ grep eth0 /proc/net/dev | wc -l
+ The colored LED's are already in WMBiff's pixmap.
+* Support buttons 4 and 5
+ The mousewheel could be useful for some behaviors, like
+ controlling volume, or selecting different mailboxes.
+* Use a helper program to blink keyboard led's.
+ Requires killing the 'notify' program when new mail no
+ longer exists. Keyboard blinking is done via a helper
+ program because it requires root. ledcontrol seems ok,
+ but extra complicated, and has a useless default install
+ that requires root. xbuffy's led program seems quite
+ good, but depending on another biff program seems odd.
+* Add a failure-expect case in tlsComm.
+ For example, an IMAP status query has a good response (*
+ STATUS) and a bad response (a003 NO STATUS). As soon as
+ one of them is received, we're done.
+* Reload .wmbiffrc when it changes
+ This is straightforward, except for IMAP mailboxes that
+ keep a connection to the server open. A close function
+ will have to be implemented to shut those down gracefully.
+ Do not involve sighup or any other signals. Use or
+ improve fileHasChanged().
+* Runtime back-tick expansion for non-mbox
+ Because interesting mailboxes can be defined by date,
+ though its not clear any other clients can take advantage.
+* Support GSSAPI or SASL authentication
+ Authentication using krb5 would be sweet.
+
+* Unlikely to get done, unless someone volunteers:
+* KDE/Gnome users: Test with KDE or gnome-panel
+ Does Debian bug #108529 apply to wmbiff? Can wmbiff
+ be swallowed by gnome-panel? It seems possible. It
+ appears to be swallowed by FVWM correctly.
+* Autoconf / Automake Wizards: fix FromCVS.sh
+ How best to deal with libgnutls's macros? All
+ I can do is hack.
+* Paranoid Pop People: Support POP over TLS.
+ tlsComm.c should make it easy to provide TLS support
+ for POP. Unfortunately, this would only be useful for
+ someone who has such a server that doesn't support IMAPS.
+* MH support
+ Try "path.n=shell:::ls -1 directoryname | wc -l".
+ If it works, tell us. Optionally the patch at sourceforge
+ could be integrated.
+* Recursive maildir support
+ Aggregation in general is an oft-desired feature.
+* G-Mail support
+ Though the business model of free mail forces screen scrubbing,
+ having someone else write and maintain the interface seems
+ like it would significantly improve the utility of gmail.
+
+$Id: TODO,v 1.21 2004/10/31 22:08:42 bluehal Exp $
+
+Local Variables:
+mode: outline
+End:
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..6cac643
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1436 @@
+# aclocal.m4 generated automatically by aclocal 1.6.3 -*- Autoconf -*-
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# 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.
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 8
+
+# 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...
+
+
+AC_PREREQ([2.52])
+
+# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
+# the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+
+# 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_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# 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
+ 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)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+# 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
+
+_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
+])
+])
+
+# Copyright 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.6"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.6.3])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright 2001, 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _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],
+[AC_FOREACH([_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.
+#
+
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# 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
+# 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)])
+
+# -*- Autoconf -*-
+
+
+# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# 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
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# 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
+])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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.
+
+# Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# 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="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# serial 4 -*- Autoconf -*-
+
+# Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# 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], 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
+
+ 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
+ for depmode in $am_compiler_list; do
+ # 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.
+ echo '#include "conftest.h"' > conftest.c
+ echo 'int i;' > conftest.h
+ echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=conftest.c object=conftest.o \
+ depfile=conftest.Po tmpdepfile=conftest.TPo \
+ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+ grep conftest.h conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ 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_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
+ DEPDIR=.deps
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ DEPDIR=_deps
+fi
+rmdir .deps 2>/dev/null
+AC_SUBST([DEPDIR])
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking Speeds up one-time builds
+ --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])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # 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 -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //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"])
+])
+
+# Copyright 2001 Free Software Foundation, Inc. -*- Autoconf -*-
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+doit:
+ @echo done
+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
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST(am__include)
+AC_SUBST(am__quote)
+AC_MSG_RESULT($_am_result)
+rm -f confinc confmf
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 5
+
+AC_PREREQ(2.52)
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+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])])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_PREREQ([2.52])
+
+# serial 6
+
+# 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. We must strip everything past the first ":",
+# and everything past the last "/".
+
+# _AM_DIRNAME(PATH)
+# -----------------
+# Like AS_DIRNAME, only do it during macro expansion
+AC_DEFUN([_AM_DIRNAME],
+ [m4_if(regexp([$1], [^.*[^/]//*[^/][^/]*/*$]), -1,
+ m4_if(regexp([$1], [^//\([^/]\|$\)]), -1,
+ m4_if(regexp([$1], [^/.*]), -1,
+ [.],
+ patsubst([$1], [^\(/\).*], [\1])),
+ patsubst([$1], [^\(//\)\([^/].*\|$\)], [\1])),
+ patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
+])# _AM_DIRNAME
+
+
+# The stamp files are numbered to have different names.
+# We could number them on a directory basis, but that's additional
+# complications, let's have a unique counter.
+m4_define([_AM_STAMP_Count], [0])
+
+
+# _AM_STAMP(HEADER)
+# -----------------
+# The name of the stamp file for HEADER.
+AC_DEFUN([_AM_STAMP],
+[m4_define([_AM_STAMP_Count], m4_incr(_AM_STAMP_Count))dnl
+AS_ESCAPE(_AM_DIRNAME(patsubst([$1],
+ [:.*])))/stamp-h[]_AM_STAMP_Count])
+
+
+# _AM_CONFIG_HEADER(HEADER[:SOURCES], COMMANDS, INIT-COMMANDS)
+# ------------------------------------------------------------
+# We used to try to get a real timestamp in stamp-h. But the fear is that
+# that will cause unnecessary cvs conflicts.
+AC_DEFUN([_AM_CONFIG_HEADER],
+[# Add the stamp file to the list of files AC keeps track of,
+# along with our hook.
+AC_CONFIG_HEADERS([$1],
+ [# update the timestamp
+echo 'timestamp for $1' >"_AM_STAMP([$1])"
+$2],
+ [$3])
+])# _AM_CONFIG_HEADER
+
+
+# AM_CONFIG_HEADER(HEADER[:SOURCES]..., COMMANDS, INIT-COMMANDS)
+# --------------------------------------------------------------
+AC_DEFUN([AM_CONFIG_HEADER],
+[AC_FOREACH([_AM_File], [$1], [_AM_CONFIG_HEADER(_AM_File, [$2], [$3])])
+])# AM_CONFIG_HEADER
+
+dnl Autoconf macros for libgnutls
+dnl $id$
+
+# Modified for LIBGNUTLS -- nmav
+# Configure paths for LIBGCRYPT
+# Shamelessly stolen from the one of XDELTA by Owen Taylor
+# Werner Koch 99-12-09
+
+dnl AM_PATH_LIBGNUTLS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgnutls, and define LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS
+dnl
+AC_DEFUN(AM_PATH_LIBGNUTLS,
+[dnl
+dnl Get the cflags and libraries from the libgnutls-config script
+dnl
+AC_ARG_WITH(libgnutls-prefix,
+ [ --with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional)],
+ libgnutls_config_prefix="$withval", libgnutls_config_prefix="")
+
+ if test x$libgnutls_config_prefix != x ; then
+ libgnutls_config_args="$libgnutls_config_args --prefix=$libgnutls_config_prefix"
+ if test x${LIBGNUTLS_CONFIG+set} != xset ; then
+ LIBGNUTLS_CONFIG=$libgnutls_config_prefix/bin/libgnutls-config
+ fi
+ fi
+
+ AC_PATH_PROG(LIBGNUTLS_CONFIG, libgnutls-config, no)
+ min_libgnutls_version=ifelse([$1], ,0.1.0,$1)
+ AC_MSG_CHECKING(for libgnutls - version >= $min_libgnutls_version)
+ no_libgnutls=""
+ if test "$LIBGNUTLS_CONFIG" = "no" ; then
+ no_libgnutls=yes
+ else
+ LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags`
+ LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs`
+ libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version`
+
+
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+dnl
+dnl Now check if the installed libgnutls is sufficiently new. Also sanity
+dnl checks the results of libgnutls-config to some extent
+dnl
+ rm -f conf.libgnutlstest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gnutls/gnutls.h>
+
+int
+main ()
+{
+ system ("touch conf.libgnutlstest");
+
+ if( strcmp( gnutls_check_version(NULL), "$libgnutls_config_version" ) )
+ {
+ printf("\n*** 'libgnutls-config --version' returned %s, but LIBGNUTLS (%s)\n",
+ "$libgnutls_config_version", gnutls_check_version(NULL) );
+ printf("*** was found! If libgnutls-config was correct, then it is best\n");
+ printf("*** to remove the old version of LIBGNUTLS. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If libgnutls-config was wrong, set the environment variable LIBGNUTLS_CONFIG\n");
+ printf("*** to point to the correct copy of libgnutls-config, and remove the file config.cache\n");
+ printf("*** before re-running configure\n");
+ }
+ else if ( strcmp(gnutls_check_version(NULL), LIBGNUTLS_VERSION ) )
+ {
+ printf("\n*** LIBGNUTLS header file (version %s) does not match\n", LIBGNUTLS_VERSION);
+ printf("*** library (version %s)\n", gnutls_check_version(NULL) );
+ }
+ else
+ {
+ if ( gnutls_check_version( "$min_libgnutls_version" ) )
+ {
+ return 0;
+ }
+ else
+ {
+ printf("no\n*** An old version of LIBGNUTLS (%s) was found.\n",
+ gnutls_check_version(NULL) );
+ printf("*** You need a version of LIBGNUTLS newer than %s. The latest version of\n",
+ "$min_libgnutls_version" );
+ printf("*** LIBGNUTLS is always available from ftp://gnutls.hellug.gr/pub/gnutls.\n");
+ printf("*** \n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the libgnutls-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBGNUTLS, but you can also set the LIBGNUTLS_CONFIG environment to point to the\n");
+ printf("*** correct copy of libgnutls-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+],, no_libgnutls=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+
+ if test "x$no_libgnutls" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ if test -f conf.libgnutlstest ; then
+ :
+ else
+ AC_MSG_RESULT(no)
+ fi
+ if test "$LIBGNUTLS_CONFIG" = "no" ; then
+ echo "*** The libgnutls-config script installed by LIBGNUTLS could not be found"
+ echo "*** If LIBGNUTLS was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBGNUTLS_CONFIG environment variable to the"
+ echo "*** full path to libgnutls-config."
+ else
+ if test -f conf.libgnutlstest ; then
+ :
+ else
+ echo "*** Could not run libgnutls test program, checking why..."
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gnutls/gnutls.h>
+], [ return !!gnutls_check_version(NULL); ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBGNUTLS or finding the wrong"
+ echo "*** version of LIBGNUTLS. If it is not finding LIBGNUTLS, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+ echo "***" ],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBGNUTLS was incorrectly installed"
+ echo "*** or that you have moved LIBGNUTLS since it was installed. In the latter case, you"
+ echo "*** may want to edit the libgnutls-config script: $LIBGNUTLS_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ LIBGNUTLS_CFLAGS=""
+ LIBGNUTLS_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ rm -f conf.libgnutlstest
+ AC_SUBST(LIBGNUTLS_CFLAGS)
+ AC_SUBST(LIBGNUTLS_LIBS)
+])
+
+dnl *-*wedit:notab*-* Please keep this as the last line.
+
+dnl Autoconf macros for libgcrypt
+dnl $id$
+
+# Configure paths for LIBGCRYPT
+# Shamelessly stolen from the one of XDELTA by Owen Taylor
+# Werner Koch 99-12-09
+
+dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
+dnl Test for libgcrypt, and define GCRYPT_CFLAGS and GCRYPT_LIBS
+dnl
+AC_DEFUN(AM_PATH_LIBGCRYPT,
+[dnl
+dnl Get the cflags and libraries from the libgcrypt-config script
+dnl
+AC_ARG_WITH(libgcrypt-prefix,
+ [ --with-libgcrypt-prefix=PFX Prefix where libgcrypt is installed (optional)],
+ libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
+AC_ARG_ENABLE(libgcrypttest,
+ [ --disable-libgcrypttest Do not try to compile and run a test libgcrypt program],
+ , enable_libgcrypttest=yes)
+
+ if test x$libgcrypt_config_prefix != x ; then
+ libgcrypt_config_args="$libgcrypt_config_args --prefix=$libgcrypt_config_prefix"
+ if test x${LIBGCRYPT_CONFIG+set} != xset ; then
+ LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
+ fi
+ fi
+
+ AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
+ min_libgcrypt_version=ifelse([$1], ,1.1.0,$1)
+ AC_MSG_CHECKING(for libgcrypt - version >= $min_libgcrypt_version)
+ no_libgcrypt=""
+ if test "$LIBGCRYPT_CONFIG" = "no" ; then
+ no_libgcrypt=yes
+ else
+ LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --cflags`
+ LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --libs`
+ libgcrypt_config_version=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --version`
+ if test "x$enable_libgcrypttest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ LIBS="$LIBS $LIBGCRYPT_LIBS"
+dnl
+dnl Now check if the installed libgcrypt is sufficiently new. Also sanity
+dnl checks the results of libgcrypt-config to some extent
+dnl
+ rm -f conf.libgcrypttest
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gcrypt.h>
+
+int
+main ()
+{
+ system ("touch conf.libgcrypttest");
+
+ if( strcmp( gcry_check_version(NULL), "$libgcrypt_config_version" ) )
+ {
+ printf("\n*** 'libgcrypt-config --version' returned %s, but LIBGCRYPT (%s)\n",
+ "$libgcrypt_config_version", gcry_check_version(NULL) );
+ printf("*** was found! If libgcrypt-config was correct, then it is best\n");
+ printf("*** to remove the old version of LIBGCRYPT. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If libgcrypt-config was wrong, set the environment variable LIBGCRYPT_CONFIG\n");
+ printf("*** to point to the correct copy of libgcrypt-config, and remove the file config.cache\n");
+ printf("*** before re-running configure\n");
+ }
+ else if ( strcmp(gcry_check_version(NULL), GCRYPT_VERSION ) )
+ {
+ printf("\n*** LIBGCRYPT header file (version %s) does not match\n", GCRYPT_VERSION);
+ printf("*** library (version %s)\n", gcry_check_version(NULL) );
+ }
+ else
+ {
+ if ( gcry_check_version( "$min_libgcrypt_version" ) )
+ {
+ return 0;
+ }
+ else
+ {
+ printf("no\n*** An old version of LIBGCRYPT (%s) was found.\n",
+ gcry_check_version(NULL) );
+ printf("*** You need a version of LIBGCRYPT newer than %s. The latest version of\n",
+ "$min_libgcrypt_version" );
+ printf("*** LIBGCRYPT is always available from ftp://ftp.gnupg.org/pub/libgcrypt/gnupg.\n");
+ printf("*** (It is distributed along with GnuPG).\n");
+ printf("*** \n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the libgcrypt-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBGCRYPT, but you can also set the LIBGCRYPT_CONFIG environment to point to the\n");
+ printf("*** correct copy of libgcrypt-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+],, no_libgcrypt=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_libgcrypt" = x ; then
+ AC_MSG_RESULT(yes)
+ ifelse([$2], , :, [$2])
+ else
+ if test -f conf.libgcrypttest ; then
+ :
+ else
+ AC_MSG_RESULT(no)
+ fi
+ if test "$LIBGCRYPT_CONFIG" = "no" ; then
+ echo "*** The libgcrypt-config script installed by LIBGCRYPT could not be found"
+ echo "*** If LIBGCRYPT was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBGCRYPT_CONFIG environment variable to the"
+ echo "*** full path to libgcrypt-config."
+ else
+ if test -f conf.libgcrypttest ; then
+ :
+ else
+ echo "*** Could not run libgcrypt test program, checking why..."
+ CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ LIBS="$LIBS $LIBGCRYPT_LIBS"
+ AC_TRY_LINK([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gcrypt.h>
+], [ return !!gcry_check_version(NULL); ],
+ [ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBGCRYPT or finding the wrong"
+ echo "*** version of LIBGCRYPT. If it is not finding LIBGCRYPT, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+ echo "***" ],
+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBGCRYPT was incorrectly installed"
+ echo "*** or that you have moved LIBGCRYPT since it was installed. In the latter case, you"
+ echo "*** may want to edit the libgcrypt-config script: $LIBGCRYPT_CONFIG" ])
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ LIBGCRYPT_CFLAGS=""
+ LIBGCRYPT_LIBS=""
+ ifelse([$3], , :, [$3])
+ fi
+ AC_SUBST(LIBGCRYPT_CFLAGS)
+ AC_SUBST(LIBGCRYPT_LIBS)
+ rm -f conf.libgcrypttest
+])
+
+dnl *-*wedit:notab*-* Please keep this as the last line.
+
+
+# _AC_PATH_X_DIRECT_CORRECTED
+# -----------------
+# Internal subroutine of _AC_PATH_X.
+# Set ac_x_includes and/or ac_x_libraries.
+m4_define([_AC_PATH_X_DIRECT_CORRECTED],
+[# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+ AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <X11/Xlib.h>])],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done])
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lX11 $LIBS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <X11/Xlib.h>],
+ [XrmInitialize ()])],
+ [LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=],
+ [LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/libX11.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = no
+])# _AC_PATH_X_DIRECT
+
+
+# _AC_PATH_X_CORRECTED
+# ----------
+# Compute ac_cv_have_x.
+AC_DEFUN([_AC_PATH_X_CORRECTED],
+[AC_CACHE_VAL(ac_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+_AC_PATH_X_XMKMF
+_AC_PATH_X_DIRECT_CORRECTED
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi])dnl
+])
+
+
+# AC_PATH_X
+# ---------
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+AN_HEADER([X11/Xlib.h], [AC_PATH_X])
+AC_DEFUN([AC_PATH_X_CORRECTED],
+[dnl Document the X abnormal options inherited from history.
+m4_divert_once([HELP_BEGIN], [
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR])dnl
+AC_MSG_CHECKING([for X])
+
+AC_ARG_WITH(x, [ --with-x use the X Window System])
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+ _AC_PATH_X_CORRECTED
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT([$have_x])
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+fi
+])# AC_PATH_X_CORRECTED
+
+
+
+# AC_PATH_XTRA_CORRECTED
+# ------------
+# Find additional X libraries, magic flags, etc.
+AC_DEFUN([AC_PATH_XTRA_CORRECTED],
+[AC_REQUIRE([AC_PATH_X_CORRECTED])dnl
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+ AC_DEFINE([X_DISPLAY_MISSING], 1,
+ [Define to 1 if the X Window System is missing or not being used.])
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+dnl FIXME: banish uname from this macro!
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ AC_MSG_CHECKING([whether -R must be followed by a space])
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_R_nospace=yes, ac_R_nospace=no)
+ if test $ac_R_nospace = yes; then
+ AC_MSG_RESULT([no])
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_R_space=yes, ac_R_space=no)
+ if test $ac_R_space = yes; then
+ AC_MSG_RESULT([yes])
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ AC_MSG_RESULT([neither works])
+ fi
+ fi
+ LIBS=$ac_xsave_LIBS
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ AC_LINK_IFELSE([AC_LANG_CALL([], [XOpenDisplay])],
+ [],
+ [AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi])
+ LIBS="$ac_xsave_LIBS"
+
+ # msh at cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ AC_CHECK_FUNC(gethostbyname)
+ if test $ac_cv_func_gethostbyname = no; then
+ AC_CHECK_LIB(nsl, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ AC_CHECK_LIB(bsd, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd")
+ fi
+ fi
+
+ # lieder at skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat)
+ if test $ac_cv_func_shmat = no; then
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc")
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], , $X_EXTRA_LIBS)
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+AC_SUBST(X_CFLAGS)dnl
+AC_SUBST(X_PRE_LIBS)dnl
+AC_SUBST(X_LIBS)dnl
+AC_SUBST(X_EXTRA_LIBS)dnl
+])# AC_PATH_XTRA_CORRECTED
+
diff --git a/autoconf/Makefile.am b/autoconf/Makefile.am
new file mode 100644
index 0000000..fba51d9
--- /dev/null
+++ b/autoconf/Makefile.am
@@ -0,0 +1,2 @@
+
+EXTRA_DIST =
diff --git a/autoconf/Makefile.in b/autoconf/Makefile.in
new file mode 100644
index 0000000..39c381f
--- /dev/null
+++ b/autoconf/Makefile.in
@@ -0,0 +1,217 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+ at SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CVS2CL = @CVS2CL@
+DEFAULT_ASKPASS = @DEFAULT_ASKPASS@
+DEPDIR = @DEPDIR@
+GCRYPT_MAN_STATUS = @GCRYPT_MAN_STATUS@
+GNUTLS_COMMON_O = @GNUTLS_COMMON_O@
+GNUTLS_MAN_STATUS = @GNUTLS_MAN_STATUS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
+LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SKINDIR = @SKINDIR@
+STRIP = @STRIP@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+EXTRA_DIST =
+subdir = autoconf
+mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = Makefile.am Makefile.in depcomp install-sh missing \
+ mkinstalldirs
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu autoconf/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @list='$(DISTFILES)'; for file in $$list; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile
+
+installdirs:
+
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_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 mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic uninstall uninstall-am uninstall-info-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/autoconf/depcomp b/autoconf/depcomp
new file mode 100755
index 0000000..807b991
--- /dev/null
+++ b/autoconf/depcomp
@@ -0,0 +1,423 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+ base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+ dir=`echo "$object" | sed 's,/.*$,/,'`
+ if test "$dir" = "$object"; then
+ dir=
+ fi
+ # FIXME: should be _deps on DOS.
+ depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. This file always lives in the current directory.
+ # Also, the AIX compiler puts `$object:' at the start of each line;
+ # $object doesn't have directory information.
+ stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ outname="$stripped.o"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 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
+ tmpdepfile1="$dir.libs/$base.lo.d"
+ tmpdepfile2="$dir.libs/$base.d"
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1="$dir$base.o.d"
+ tmpdepfile2="$dir$base.d"
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile1"; then
+ tmpdepfile="$tmpdepfile1"
+ else
+ tmpdepfile="$tmpdepfile2"
+ fi
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a space and a tab in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the proprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'. We will use -o /dev/null later,
+ # however we can't do the remplacement now because
+ # `-o $object' might simply not be used
+ 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
+ "$@" -o /dev/null $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 $?
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ -*)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -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 proprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--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 '/^# [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 proprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/autoconf/install-sh b/autoconf/install-sh
new file mode 100755
index 0000000..fca26e5
--- /dev/null
+++ b/autoconf/install-sh
@@ -0,0 +1,269 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+#
+# 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. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ :
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=$mkdirprog
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f "$src" ] || [ -d "$src" ]
+ then
+ :
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ :
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ :
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+ '
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ :
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ :
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/autoconf/missing b/autoconf/missing
new file mode 100755
index 0000000..6a37006
--- /dev/null
+++ b/autoconf/missing
@@ -0,0 +1,336 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing 0.4 - GNU automake"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1Help2man' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+ 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' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -f "$file" ]; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+ # We have makeinfo, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ tar)
+ shift
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ fi
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && 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 you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/autoconf/mkinstalldirs b/autoconf/mkinstalldirs
new file mode 100755
index 0000000..8ab885e
--- /dev/null
+++ b/autoconf/mkinstalldirs
@@ -0,0 +1,99 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman at prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case "${1}" in
+ -h | --help | --h* ) # -h for help
+ echo "${usage}" 1>&2; exit 0 ;;
+ -m ) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
+ dirmode="${1}"
+ shift ;;
+ -- ) shift; break ;; # stop option processing
+ -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
+ * ) break ;; # first non-opt arg
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+0) exit 0 ;;
+esac
+
+case $dirmode in
+'')
+ if mkdir -p -- . 2>/dev/null; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ fi ;;
+*)
+ if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ fi ;;
+esac
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 3
+# End:
+# mkinstalldirs ends here
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..0061f2a
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,125 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Program to use for querying the user for a password: redefine if not on a
+ debian system */
+#undef DEFAULT_ASKPASS
+
+/* Path to use when finding skins (modified pixmaps) */
+#undef DEFAULT_SKIN_PATH
+
+/* Define to 1 if you have the <CoreServices/CoreServices.h> header file. */
+#undef HAVE_CORESERVICES_CORESERVICES_H
+
+/* Define to 1 if you have the <gcrypt.h> header file. */
+#undef HAVE_GCRYPT_H
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the <gnutls/gnutls.h> header file. */
+#undef HAVE_GNUTLS_GNUTLS_H
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#undef HAVE_INET_NTOP
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `resolv' library (-lresolv). */
+#undef HAVE_LIBRESOLV
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to 1 if you have the `X11' library (-lX11). */
+#undef HAVE_LIBX11
+
+/* Define to 1 if you have the `Xext' library (-lXext). */
+#undef HAVE_LIBXEXT
+
+/* Define to 1 if you have the `Xpm' library (-lXpm). */
+#undef HAVE_LIBXPM
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the `memfrob' function. */
+#undef HAVE_MEMFROB
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `poll' function. */
+#undef HAVE_POLL
+
+/* Define to 1 if you have the <regex.h> header file. */
+#undef HAVE_REGEX_H
+
+/* Define to 1 if you have the <Security/Security.h> header file. */
+#undef HAVE_SECURITY_SECURITY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_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 you have the <X11/xpm.h> header file. */
+#undef HAVE_X11_XPM_H
+
+/* Define to 1 if you have the <xpm.h> header file. */
+#undef HAVE_XPM_H
+
+/* Define if '__attribute__' is supported by the compiler */
+#undef HAVE___ATTRIBUTE__
+
+/* 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 version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* wmbiff's release version */
+#undef VERSION
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
diff --git a/configure b/configure
new file mode 100755
index 0000000..ff1d421
--- /dev/null
+++ b/configure
@@ -0,0 +1,9005 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for WMBiff 0.4.27.
+#
+# Report bugs to <wmbiff-devel at lists.sourceforge.net>.
+#
+# Copyright (C) 2003 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 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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ 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
+
+ ;;
+ 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
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); 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 sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='WMBiff'
+PACKAGE_TARNAME='wmbiff'
+PACKAGE_VERSION='0.4.27'
+PACKAGE_STRING='WMBiff 0.4.27'
+PACKAGE_BUGREPORT='wmbiff-devel at lists.sourceforge.net'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL [...]
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# 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.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+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
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -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 | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$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 ;;
+
+ -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 ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ 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 ;;
+
+ -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=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 ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ 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'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+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
+ 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
+
+
+# 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 its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ 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
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# 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 WMBiff 0.4.27 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 \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+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]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --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]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_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
+
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of WMBiff 0.4.27:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-dependency-tracking Speeds up one-time builds
+ --enable-dependency-tracking Do not reject slow dependency extractors
+ --disable-crypto disable gnutls/gcrypt
+ --disable-libgcrypttest Do not try to compile and run a test libgcrypt program
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional)
+ --with-libgcrypt-prefix=PFX Prefix where libgcrypt is installed (optional)
+ --with-x use the X Window System
+
+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>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+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 <wmbiff-devel at lists.sourceforge.net>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style 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
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd "$ac_popdir"
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+WMBiff configure 0.4.27
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 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 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by WMBiff $as_me 0.4.27, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+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`
+hostinfo = `(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=.
+ echo "PATH: $as_dir"
+done
+
+} >&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_sep=
+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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$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
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >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
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ 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.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+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 `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+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
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`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.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in autoconf $srcdir/autoconf; 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
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+am__api_version="1.6"
+# 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.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$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'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# 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".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}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 $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ # test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# Define the identity of the package.
+ PACKAGE=wmbiff
+ VERSION=0.4.27
+
+
+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"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+
+
+ # Add the stamp file to the list of files AC keeps track of,
+# along with our hook.
+ ac_config_headers="$ac_config_headers config.h"
+
+
+
+
+
+
+
+# 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.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$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'
+
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+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
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ 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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out 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.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; 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 | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$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
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 -std1 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 -std1. */
+int osf4_cc_array ['\x00' == 0 ? 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
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext 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
+rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
+ DEPDIR=.deps
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ DEPDIR=_deps
+fi
+rmdir .deps 2>/dev/null
+
+
+ ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+doit:
+ @echo done
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-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
+
+
+
+
+depcc="$CC" am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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
+
+ 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
+ for depmode in $am_compiler_list; do
+ # 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.
+ echo '#include "conftest.h"' > conftest.c
+ echo 'int i;' > conftest.h
+ echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ 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
+ ;;
+ none) break ;;
+ esac
+ # 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.
+ if depmode=$depmode \
+ source=conftest.c object=conftest.o \
+ depfile=conftest.Po tmpdepfile=conftest.TPo \
+ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+ grep conftest.h conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}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
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+if test -n "$GCC"; then
+ CFLAGS="$CFLAGS -D_GNU_SOURCE -W -Wall -Wshadow -Wpointer-arith -Wwrite-strings"
+ echo "$as_me:$LINENO: result: adding -Wall and friends to CFLAGS." >&5
+echo "${ECHO_T}adding -Wall and friends to CFLAGS." >&6
+fi
+
+case `(uname -s) 2>/dev/null` in
+ "Darwin")
+ CFLAGS="$CFLAGS -no-cpp-precomp"
+ echo "$as_me:$LINENO: result: adding cpp precompiler workaround for Mac OS X" >&5
+echo "${ECHO_T}adding cpp precompiler workaround for Mac OS X" >&6
+ LDFLAGS="$LDFLAGS -framework Security"
+ echo "$as_me:$LINENO: result: adding -framework Security for Mac OS X" >&5
+echo "${ECHO_T}adding -framework Security for Mac OS X" >&6
+ ;;
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f 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
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+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
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* 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 >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.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))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in stdio.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_func in getaddrinfo
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* 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_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+for ac_func in memfrob
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* 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_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+for ac_func in poll
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* 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_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+for ac_func in inet_ntop
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); 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 $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* 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_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+# undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_signal=void
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_signal=int
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+
+
+echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+ LIBS="-lnsl $LIBS"
+
+fi
+
+
+echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+int
+main ()
+{
+connect ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_connect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+ LIBS="-lsocket $LIBS"
+
+fi
+
+
+echo "$as_me:$LINENO: checking for herror in -lresolv" >&5
+echo $ECHO_N "checking for herror in -lresolv... $ECHO_C" >&6
+if test "${ac_cv_lib_resolv_herror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lresolv $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char herror ();
+int
+main ()
+{
+herror ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_resolv_herror=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_resolv_herror=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_herror" >&5
+echo "${ECHO_T}$ac_cv_lib_resolv_herror" >&6
+if test $ac_cv_lib_resolv_herror = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBRESOLV 1
+_ACEOF
+
+ LIBS="-lresolv $LIBS"
+
+fi
+
+
+gnutls="ok"
+gcrypt="ok"
+
+echo "$as_me:$LINENO: checking for gzopen in -lz" >&5
+echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_gzopen+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gzopen ();
+int
+main ()
+{
+gzopen ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_z_gzopen=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_gzopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5
+echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6
+if test $ac_cv_lib_z_gzopen = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+ LIBS="-lz $LIBS"
+
+else
+ gnutls="nope"
+fi
+
+
+# Check whether --enable-crypto or --disable-crypto was given.
+if test "${enable_crypto+set}" = set; then
+ enableval="$enable_crypto"
+ if test $enableval != yes; then
+ gnutls="disabled"
+ gcrypt="disabled"
+ fi
+fi;
+
+
+GNUTLS_MAN_STATUS="This copy of WMBiff was not compiled with GNUTLS."
+if test "$gnutls" = "ok"; then
+
+# Check whether --with-libgnutls-prefix or --without-libgnutls-prefix was given.
+if test "${with_libgnutls_prefix+set}" = set; then
+ withval="$with_libgnutls_prefix"
+ libgnutls_config_prefix="$withval"
+else
+ libgnutls_config_prefix=""
+fi;
+
+ if test x$libgnutls_config_prefix != x ; then
+ libgnutls_config_args="$libgnutls_config_args --prefix=$libgnutls_config_prefix"
+ if test x${LIBGNUTLS_CONFIG+set} != xset ; then
+ LIBGNUTLS_CONFIG=$libgnutls_config_prefix/bin/libgnutls-config
+ fi
+ fi
+
+ # Extract the first word of "libgnutls-config", so it can be a program name with args.
+set dummy libgnutls-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LIBGNUTLS_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $LIBGNUTLS_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LIBGNUTLS_CONFIG="$LIBGNUTLS_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_LIBGNUTLS_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_LIBGNUTLS_CONFIG" && ac_cv_path_LIBGNUTLS_CONFIG="no"
+ ;;
+esac
+fi
+LIBGNUTLS_CONFIG=$ac_cv_path_LIBGNUTLS_CONFIG
+
+if test -n "$LIBGNUTLS_CONFIG"; then
+ echo "$as_me:$LINENO: result: $LIBGNUTLS_CONFIG" >&5
+echo "${ECHO_T}$LIBGNUTLS_CONFIG" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ min_libgnutls_version=1.0.4
+ echo "$as_me:$LINENO: checking for libgnutls - version >= $min_libgnutls_version" >&5
+echo $ECHO_N "checking for libgnutls - version >= $min_libgnutls_version... $ECHO_C" >&6
+ no_libgnutls=""
+ if test "$LIBGNUTLS_CONFIG" = "no" ; then
+ no_libgnutls=yes
+ else
+ LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags`
+ LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs`
+ libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version`
+
+
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+ rm -f conf.libgnutlstest
+ if test "$cross_compiling" = yes; then
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gnutls/gnutls.h>
+
+int
+main ()
+{
+ system ("touch conf.libgnutlstest");
+
+ if( strcmp( gnutls_check_version(NULL), "$libgnutls_config_version" ) )
+ {
+ printf("\n*** 'libgnutls-config --version' returned %s, but LIBGNUTLS (%s)\n",
+ "$libgnutls_config_version", gnutls_check_version(NULL) );
+ printf("*** was found! If libgnutls-config was correct, then it is best\n");
+ printf("*** to remove the old version of LIBGNUTLS. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If libgnutls-config was wrong, set the environment variable LIBGNUTLS_CONFIG\n");
+ printf("*** to point to the correct copy of libgnutls-config, and remove the file config.cache\n");
+ printf("*** before re-running configure\n");
+ }
+ else if ( strcmp(gnutls_check_version(NULL), LIBGNUTLS_VERSION ) )
+ {
+ printf("\n*** LIBGNUTLS header file (version %s) does not match\n", LIBGNUTLS_VERSION);
+ printf("*** library (version %s)\n", gnutls_check_version(NULL) );
+ }
+ else
+ {
+ if ( gnutls_check_version( "$min_libgnutls_version" ) )
+ {
+ return 0;
+ }
+ else
+ {
+ printf("no\n*** An old version of LIBGNUTLS (%s) was found.\n",
+ gnutls_check_version(NULL) );
+ printf("*** You need a version of LIBGNUTLS newer than %s. The latest version of\n",
+ "$min_libgnutls_version" );
+ printf("*** LIBGNUTLS is always available from ftp://gnutls.hellug.gr/pub/gnutls.\n");
+ printf("*** \n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the libgnutls-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBGNUTLS, but you can also set the LIBGNUTLS_CONFIG environment to point to the\n");
+ printf("*** correct copy of libgnutls-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+no_libgnutls=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+
+ if test "x$no_libgnutls" = x ; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
+ GNUTLS_COMMON_O="gnutls-common.o"
+ GNUTLS_MAN_STATUS="This copy of WMBiff was compiled with GNUTLS."
+
+for ac_header in gnutls/gnutls.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ else
+ if test -f conf.libgnutlstest ; then
+ :
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ if test "$LIBGNUTLS_CONFIG" = "no" ; then
+ echo "*** The libgnutls-config script installed by LIBGNUTLS could not be found"
+ echo "*** If LIBGNUTLS was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBGNUTLS_CONFIG environment variable to the"
+ echo "*** full path to libgnutls-config."
+ else
+ if test -f conf.libgnutlstest ; then
+ :
+ else
+ echo "*** Could not run libgnutls test program, checking why..."
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ LIBS="$LIBS $LIBGNUTLS_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gnutls/gnutls.h>
+
+int
+main ()
+{
+ return !!gnutls_check_version(NULL);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBGNUTLS or finding the wrong"
+ echo "*** version of LIBGNUTLS. If it is not finding LIBGNUTLS, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+ echo "***"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBGNUTLS was incorrectly installed"
+ echo "*** or that you have moved LIBGNUTLS since it was installed. In the latter case, you"
+ echo "*** may want to edit the libgnutls-config script: $LIBGNUTLS_CONFIG"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ LIBGNUTLS_CFLAGS=""
+ LIBGNUTLS_LIBS=""
+ echo GNUTLS can be found at ftp://gnutls.hellug.gr/pub/gnutls
+ fi
+ rm -f conf.libgnutlstest
+
+
+
+else
+ echo "$as_me:$LINENO: result: GNUTLS support requires libz.a and libgdbm.a" >&5
+echo "${ECHO_T}GNUTLS support requires libz.a and libgdbm.a" >&6
+fi
+
+GCRYPT_MAN_STATUS="This copy of WMBiff was not compiled with gcrypt."
+if test "$gcrypt" = "ok"; then
+
+# Check whether --with-libgcrypt-prefix or --without-libgcrypt-prefix was given.
+if test "${with_libgcrypt_prefix+set}" = set; then
+ withval="$with_libgcrypt_prefix"
+ libgcrypt_config_prefix="$withval"
+else
+ libgcrypt_config_prefix=""
+fi;
+# Check whether --enable-libgcrypttest or --disable-libgcrypttest was given.
+if test "${enable_libgcrypttest+set}" = set; then
+ enableval="$enable_libgcrypttest"
+
+else
+ enable_libgcrypttest=yes
+fi;
+
+ if test x$libgcrypt_config_prefix != x ; then
+ libgcrypt_config_args="$libgcrypt_config_args --prefix=$libgcrypt_config_prefix"
+ if test x${LIBGCRYPT_CONFIG+set} != xset ; then
+ LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
+ fi
+ fi
+
+ # Extract the first word of "libgcrypt-config", so it can be a program name with args.
+set dummy libgcrypt-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_LIBGCRYPT_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $LIBGCRYPT_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no"
+ ;;
+esac
+fi
+LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
+
+if test -n "$LIBGCRYPT_CONFIG"; then
+ echo "$as_me:$LINENO: result: $LIBGCRYPT_CONFIG" >&5
+echo "${ECHO_T}$LIBGCRYPT_CONFIG" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ min_libgcrypt_version=1.1.90
+ echo "$as_me:$LINENO: checking for libgcrypt - version >= $min_libgcrypt_version" >&5
+echo $ECHO_N "checking for libgcrypt - version >= $min_libgcrypt_version... $ECHO_C" >&6
+ no_libgcrypt=""
+ if test "$LIBGCRYPT_CONFIG" = "no" ; then
+ no_libgcrypt=yes
+ else
+ LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --cflags`
+ LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --libs`
+ libgcrypt_config_version=`$LIBGCRYPT_CONFIG $libgcrypt_config_args --version`
+ if test "x$enable_libgcrypttest" = "xyes" ; then
+ ac_save_CFLAGS="$CFLAGS"
+ ac_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ LIBS="$LIBS $LIBGCRYPT_LIBS"
+ rm -f conf.libgcrypttest
+ if test "$cross_compiling" = yes; then
+ echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gcrypt.h>
+
+int
+main ()
+{
+ system ("touch conf.libgcrypttest");
+
+ if( strcmp( gcry_check_version(NULL), "$libgcrypt_config_version" ) )
+ {
+ printf("\n*** 'libgcrypt-config --version' returned %s, but LIBGCRYPT (%s)\n",
+ "$libgcrypt_config_version", gcry_check_version(NULL) );
+ printf("*** was found! If libgcrypt-config was correct, then it is best\n");
+ printf("*** to remove the old version of LIBGCRYPT. You may also be able to fix the error\n");
+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+ printf("*** required on your system.\n");
+ printf("*** If libgcrypt-config was wrong, set the environment variable LIBGCRYPT_CONFIG\n");
+ printf("*** to point to the correct copy of libgcrypt-config, and remove the file config.cache\n");
+ printf("*** before re-running configure\n");
+ }
+ else if ( strcmp(gcry_check_version(NULL), GCRYPT_VERSION ) )
+ {
+ printf("\n*** LIBGCRYPT header file (version %s) does not match\n", GCRYPT_VERSION);
+ printf("*** library (version %s)\n", gcry_check_version(NULL) );
+ }
+ else
+ {
+ if ( gcry_check_version( "$min_libgcrypt_version" ) )
+ {
+ return 0;
+ }
+ else
+ {
+ printf("no\n*** An old version of LIBGCRYPT (%s) was found.\n",
+ gcry_check_version(NULL) );
+ printf("*** You need a version of LIBGCRYPT newer than %s. The latest version of\n",
+ "$min_libgcrypt_version" );
+ printf("*** LIBGCRYPT is always available from ftp://ftp.gnupg.org/pub/libgcrypt/gnupg.\n");
+ printf("*** (It is distributed along with GnuPG).\n");
+ printf("*** \n");
+ printf("*** If you have already installed a sufficiently new version, this error\n");
+ printf("*** probably means that the wrong copy of the libgcrypt-config shell script is\n");
+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
+ printf("*** of LIBGCRYPT, but you can also set the LIBGCRYPT_CONFIG environment to point to the\n");
+ printf("*** correct copy of libgcrypt-config. (In this case, you will have to\n");
+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+ printf("*** so that the correct libraries are found at run-time))\n");
+ }
+ }
+ return 1;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+no_libgcrypt=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ if test "x$no_libgcrypt" = x ; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $LIBGCRYPT_CFLAGS"
+ GCRYPT_MAN_STATUS="This copy of WMBiff was compiled with gcrypt."
+
+for ac_header in gcrypt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ else
+ if test -f conf.libgcrypttest ; then
+ :
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ if test "$LIBGCRYPT_CONFIG" = "no" ; then
+ echo "*** The libgcrypt-config script installed by LIBGCRYPT could not be found"
+ echo "*** If LIBGCRYPT was installed in PREFIX, make sure PREFIX/bin is in"
+ echo "*** your path, or set the LIBGCRYPT_CONFIG environment variable to the"
+ echo "*** full path to libgcrypt-config."
+ else
+ if test -f conf.libgcrypttest ; then
+ :
+ else
+ echo "*** Could not run libgcrypt test program, checking why..."
+ CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ LIBS="$LIBS $LIBGCRYPT_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gcrypt.h>
+
+int
+main ()
+{
+ return !!gcry_check_version(NULL);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ echo "*** The test program compiled, but did not run. This usually means"
+ echo "*** that the run-time linker is not finding LIBGCRYPT or finding the wrong"
+ echo "*** version of LIBGCRYPT. If it is not finding LIBGCRYPT, you'll need to set your"
+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
+ echo "*** is required on your system"
+ echo "***"
+ echo "*** If you have an old version installed, it is best to remove it, although"
+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+ echo "***"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+ echo "*** exact error that occured. This usually means LIBGCRYPT was incorrectly installed"
+ echo "*** or that you have moved LIBGCRYPT since it was installed. In the latter case, you"
+ echo "*** may want to edit the libgcrypt-config script: $LIBGCRYPT_CONFIG"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$ac_save_CFLAGS"
+ LIBS="$ac_save_LIBS"
+ fi
+ fi
+ LIBGCRYPT_CFLAGS=""
+ LIBGCRYPT_LIBS=""
+ echo libgcrypt can be found at ftp://ftp.gnupg.org/pub/gcrypt/alpha/libgcrypt/
+ fi
+
+
+ rm -f conf.libgcrypttest
+
+else
+ echo "$as_me:$LINENO: result: GCRYPT disabled." >&5
+echo "${ECHO_T}GCRYPT disabled." >&6
+fi;
+
+
+
+
+
+
+
+
+for ac_header in regex.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6
+
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+ if test "${ac_cv_have_x+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -fr conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat >Imakefile <<'_ACEOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Xlib.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
+fi
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lX11 $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/libX11.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+cat >>confdefs.h <<\_ACEOF
+#define X_DISPLAY_MISSING 1
+_ACEOF
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_nospace=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_R_nospace=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_nospace = yes; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ X_LIBS="$X_LIBS -R$x_libraries"
+ else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_R_space=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_R_space=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $ac_R_space = yes; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ X_LIBS="$X_LIBS -R $x_libraries"
+ else
+ echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6
+ fi
+ fi
+ LIBS=$ac_xsave_LIBS
+ esac
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XOpenDisplay ();
+int
+main ()
+{
+XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+ fi
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh at cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define gethostbyname innocuous_gethostbyname
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char gethostbyname (); 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 gethostbyname
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+/* 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_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+char (*f) () = gethostbyname;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != gethostbyname;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_gethostbyname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+
+ if test $ac_cv_func_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_bsd_gethostbyname=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+ fi
+ fi
+
+ # lieder at skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define connect innocuous_connect
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char connect (); 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 connect
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+/* 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_connect) || defined (__stub___connect)
+choke me
+#else
+char (*f) () = connect;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != connect;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_connect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
+
+ if test $ac_cv_func_connect = no; then
+ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char connect ();
+int
+main ()
+{
+connect ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_socket_connect=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_connect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6
+if test "${ac_cv_func_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define remove to an innocuous variant, in case <limits.h> declares remove.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define remove innocuous_remove
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char remove (); 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 remove
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+/* 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_remove) || defined (__stub___remove)
+choke me
+#else
+char (*f) () = remove;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != remove;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_remove=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6
+
+ if test $ac_cv_func_remove = no; then
+ echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char remove ();
+int
+main ()
+{
+remove ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_posix_remove=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_posix_remove=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
+if test $ac_cv_lib_posix_remove = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6
+if test "${ac_cv_func_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define shmat innocuous_shmat
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shmat (); 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 shmat
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+/* 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_shmat) || defined (__stub___shmat)
+choke me
+#else
+char (*f) () = shmat;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shmat;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shmat=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6
+
+ if test $ac_cv_func_shmat = no; then
+ echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shmat ();
+int
+main ()
+{
+shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ipc_shmat=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_ipc_shmat=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
+if test $ac_cv_lib_ipc_shmat = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char IceConnectionNumber ();
+int
+main ()
+{
+IceConnectionNumber ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+if test "$no_x" = yes; then
+ { { echo "$as_me:$LINENO: error: \"Really need a working X. Check config.log to see why configure couldn't find it\"" >&5
+echo "$as_me: error: \"Really need a working X. Check config.log to see why configure couldn't find it\"" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+LIBS="$X_LIBS $LIBS"
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+
+echo "$as_me:$LINENO: checking for XrmParseCommand in -lX11" >&5
+echo $ECHO_N "checking for XrmParseCommand in -lX11... $ECHO_C" >&6
+if test "${ac_cv_lib_X11_XrmParseCommand+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lX11 $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XrmParseCommand ();
+int
+main ()
+{
+XrmParseCommand ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_X11_XrmParseCommand=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_X11_XrmParseCommand=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XrmParseCommand" >&5
+echo "${ECHO_T}$ac_cv_lib_X11_XrmParseCommand" >&6
+if test $ac_cv_lib_X11_XrmParseCommand = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBX11 1
+_ACEOF
+
+ LIBS="-lX11 $LIBS"
+
+fi
+
+
+echo "$as_me:$LINENO: checking for XShapeCombineMask in -lXext" >&5
+echo $ECHO_N "checking for XShapeCombineMask in -lXext... $ECHO_C" >&6
+if test "${ac_cv_lib_Xext_XShapeCombineMask+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXext $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XShapeCombineMask ();
+int
+main ()
+{
+XShapeCombineMask ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_Xext_XShapeCombineMask=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_Xext_XShapeCombineMask=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XShapeCombineMask" >&5
+echo "${ECHO_T}$ac_cv_lib_Xext_XShapeCombineMask" >&6
+if test $ac_cv_lib_Xext_XShapeCombineMask = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBXEXT 1
+_ACEOF
+
+ LIBS="-lXext $LIBS"
+
+else
+ { { echo "$as_me:$LINENO: error: libXext not found or does not include XShape" >&5
+echo "$as_me: error: libXext not found or does not include XShape" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+echo "$as_me:$LINENO: checking for XpmCreateImageFromXpmImage in -lXpm" >&5
+echo $ECHO_N "checking for XpmCreateImageFromXpmImage in -lXpm... $ECHO_C" >&6
+if test "${ac_cv_lib_Xpm_XpmCreateImageFromXpmImage+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXpm $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XpmCreateImageFromXpmImage ();
+int
+main ()
+{
+XpmCreateImageFromXpmImage ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_Xpm_XpmCreateImageFromXpmImage=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_Xpm_XpmCreateImageFromXpmImage=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreateImageFromXpmImage" >&5
+echo "${ECHO_T}$ac_cv_lib_Xpm_XpmCreateImageFromXpmImage" >&6
+if test $ac_cv_lib_Xpm_XpmCreateImageFromXpmImage = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBXPM 1
+_ACEOF
+
+ LIBS="-lXpm $LIBS"
+
+fi
+
+
+
+for ac_header in X11/xpm.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+for ac_header in xpm.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+ { { echo "$as_me:$LINENO: error: xpm.h is needed" >&5
+echo "$as_me: error: xpm.h is needed" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+done
+
+fi
+
+done
+
+
+
+
+# WM_C_ATTRIBUTE
+
+echo "$as_me:$LINENO: checking for __attribute__ support" >&5
+echo $ECHO_N "checking for __attribute__ support... $ECHO_C" >&6
+if test "${wm_cv_c_attribute+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ wm_cv_c_attribute=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+foo_t foo () __attribute__((unused));
+foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ wm_cv_c_attribute=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $wm_cv_c_attribute" >&5
+echo "${ECHO_T}$wm_cv_c_attribute" >&6
+case $wm_cv_c_attribute in
+ yes)
+cat >>confdefs.h <<\_ACEOF
+#define HAVE___ATTRIBUTE__
+_ACEOF
+
+ ;;
+esac
+
+
+for ac_prog in ssh-askpass x11-ssh-askpass ssh-askpass-gnome
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_DEFAULT_ASKPASS+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $DEFAULT_ASKPASS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DEFAULT_ASKPASS="$DEFAULT_ASKPASS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_DEFAULT_ASKPASS="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ ;;
+esac
+fi
+DEFAULT_ASKPASS=$ac_cv_path_DEFAULT_ASKPASS
+
+if test -n "$DEFAULT_ASKPASS"; then
+ echo "$as_me:$LINENO: result: $DEFAULT_ASKPASS" >&5
+echo "${ECHO_T}$DEFAULT_ASKPASS" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$DEFAULT_ASKPASS" && break
+done
+test -n "$DEFAULT_ASKPASS" || DEFAULT_ASKPASS="/usr/bin/ssh-askpass"
+
+# Extract the first word of "cvs2cl", so it can be a program name with args.
+set dummy cvs2cl; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_CVS2CL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $CVS2CL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CVS2CL="$CVS2CL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_CVS2CL="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ ;;
+esac
+fi
+CVS2CL=$ac_cv_path_CVS2CL
+
+if test -n "$CVS2CL"; then
+ echo "$as_me:$LINENO: result: $CVS2CL" >&5
+echo "${ECHO_T}$CVS2CL" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_ASKPASS "$DEFAULT_ASKPASS"
+_ACEOF
+
+
+
+
+for ac_header in CoreServices/CoreServices.h Security/Security.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------- ##
+## Report this to wmbiff-devel at lists.sourceforge.net ##
+## ------------------------------------------------- ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "x$prefix" != xNONE; then
+ SKINDIR="$prefix/share/wmbiff/skins"
+else
+ SKINDIR="$ac_default_prefix/share/wmbiff/skins"
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define DEFAULT_SKIN_PATH "$SKINDIR:/usr/share/wmbiff/skins:/usr/local/share/wmbiff/skins:."
+_ACEOF
+
+
+ ac_config_files="$ac_config_files Makefile wmbiff/Makefile wmgeneral/Makefile wmbiff/wmbiffrc.5 autoconf/Makefile scripts/Makefile"
+
+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, don't put newlines in cache variables' values.
+# 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.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *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 \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ 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}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ 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[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $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}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# 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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ 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
+
+ ;;
+ 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
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); 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 sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by WMBiff $as_me 0.4.27, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -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
+ --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 <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+WMBiff config.status 0.4.27
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+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=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ 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
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "wmbiff/Makefile" ) CONFIG_FILES="$CONFIG_FILES wmbiff/Makefile" ;;
+ "wmgeneral/Makefile" ) CONFIG_FILES="$CONFIG_FILES wmgeneral/Makefile" ;;
+ "wmbiff/wmbiffrc.5" ) CONFIG_FILES="$CONFIG_FILES wmbiff/wmbiffrc.5" ;;
+ "autoconf/Makefile" ) CONFIG_FILES="$CONFIG_FILES autoconf/Makefile" ;;
+ "scripts/Makefile" ) CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ 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 to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at PACKAGE@,$PACKAGE,;t t
+s, at VERSION@,$VERSION,;t t
+s, at ACLOCAL@,$ACLOCAL,;t t
+s, at AUTOCONF@,$AUTOCONF,;t t
+s, at AUTOMAKE@,$AUTOMAKE,;t t
+s, at AUTOHEADER@,$AUTOHEADER,;t t
+s, at MAKEINFO@,$MAKEINFO,;t t
+s, at AMTAR@,$AMTAR,;t t
+s, at install_sh@,$install_sh,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s, at AWK@,$AWK,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at DEPDIR@,$DEPDIR,;t t
+s, at am__include@,$am__include,;t t
+s, at am__quote@,$am__quote,;t t
+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s, at CCDEPMODE@,$CCDEPMODE,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at LIBGNUTLS_CONFIG@,$LIBGNUTLS_CONFIG,;t t
+s, at LIBGNUTLS_CFLAGS@,$LIBGNUTLS_CFLAGS,;t t
+s, at LIBGNUTLS_LIBS@,$LIBGNUTLS_LIBS,;t t
+s, at LIBGCRYPT_CONFIG@,$LIBGCRYPT_CONFIG,;t t
+s, at LIBGCRYPT_CFLAGS@,$LIBGCRYPT_CFLAGS,;t t
+s, at LIBGCRYPT_LIBS@,$LIBGCRYPT_LIBS,;t t
+s, at GNUTLS_MAN_STATUS@,$GNUTLS_MAN_STATUS,;t t
+s, at GCRYPT_MAN_STATUS@,$GCRYPT_MAN_STATUS,;t t
+s, at GNUTLS_COMMON_O@,$GNUTLS_COMMON_O,;t t
+s, at X_CFLAGS@,$X_CFLAGS,;t t
+s, at X_PRE_LIBS@,$X_PRE_LIBS,;t t
+s, at X_LIBS@,$X_LIBS,;t t
+s, at X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+s, at DEFAULT_ASKPASS@,$DEFAULT_ASKPASS,;t t
+s, at CVS2CL@,$CVS2CL,;t t
+s, at SKINDIR@,$SKINDIR,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ # 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. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #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.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # 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. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+ # Run the commands associated with the file.
+ case $ac_file in
+ config.h ) # update the timestamp
+echo 'timestamp for config.h' >"./stamp-h1"
+ ;;
+ esac
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+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
+ grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # 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 -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //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=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p $dirpart/$fdir
+ else
+ as_dir=$dirpart/$fdir
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# 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 || { (exit 1); exit 1; }
+fi
+
+chmod 0444 wmbiff/wmbiffrc.5
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..f74b1f5
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,186 @@
+dnl Autoconf is here to detect:
+dnl gnutls, libgcrypt
+dnl default ssh-askpass
+dnl and the basics X11, Xext, Xpm
+dnl and configure:
+dnl installation prefix
+dnl version
+
+AC_INIT(WMBiff, 0.4.27, wmbiff-devel at lists.sourceforge.net, wmbiff)
+AC_CONFIG_AUX_DIR(autoconf)
+AM_INIT_AUTOMAKE(wmbiff, 0.4.27) dnl tarded syntax for automake <= 1.5
+AM_CONFIG_HEADER(config.h)
+dnl make sure autoheader finds version, implicitly defined above.
+AH_TEMPLATE([VERSION], [wmbiff's release version])
+AC_SUBST(VERSION)
+
+AC_PROG_INSTALL
+AC_PROG_CC
+AC_PROG_RANLIB
+
+if test -n "$GCC"; then
+ CFLAGS="$CFLAGS -D_GNU_SOURCE -W -Wall -Wshadow -Wpointer-arith -Wwrite-strings"
+ AC_MSG_RESULT(adding -Wall and friends to CFLAGS.)
+fi
+
+case `(uname -s) 2>/dev/null` in
+ "Darwin")
+ CFLAGS="$CFLAGS -no-cpp-precomp"
+ AC_MSG_RESULT(adding cpp precompiler workaround for Mac OS X)
+ LDFLAGS="$LDFLAGS -framework Security"
+ AC_MSG_RESULT(adding -framework Security for Mac OS X)
+ ;;
+esac
+
+dnl a no-op to force autoconf to seek out the preprocessor now.
+AC_CHECK_HEADERS(stdio.h)
+
+dnl for IPv6 support
+AC_CHECK_FUNCS(getaddrinfo)
+
+dnl see if we can cheaply "encrypt" passwords in memory
+AC_CHECK_FUNCS(memfrob)
+
+dnl AC_CHECK_FUNC(asprintf, , VASPRINTF="vasprintf.c")
+
+dnl replacing the old USE_POLL define
+AC_CHECK_FUNCS(poll)
+
+dnl for gnutls-common.h, which defines this if missing.
+AC_CHECK_FUNCS(inet_ntop)
+
+dnl declare RETSIGTYPE
+AC_TYPE_SIGNAL
+
+dnl solaris
+AC_CHECK_LIB(nsl, gethostbyname)
+AC_CHECK_LIB(socket, connect)
+AC_CHECK_LIB(resolv, herror)
+
+dnl Pre-gnutls.
+gnutls="ok"
+gcrypt="ok"
+AC_CHECK_LIB(z, gzopen, [], [gnutls="nope"]) dnl GNUTLS seems to need libz; fail here if it's missing.
+dnl perhaps not required anymore:
+dnl AC_CHECK_LIB(gdbm, dbminit, [], [gnutls="nope"]) dnl GNUTLS seems to need libgdbm; fail here if it's missing.
+
+dnl Parameter is minimum version
+dnl TODO: fix so that GCRYPT is tested only if GNUTLS fails; the dependence
+dnl between them makes this turn redundant
+
+AC_ARG_ENABLE(crypto, AC_HELP_STRING([ --disable-crypto ], [ disable gnutls/gcrypt ]),
+ [ if test $enableval != yes; then
+ gnutls="disabled"
+ gcrypt="disabled"
+ fi ])
+
+
+GNUTLS_MAN_STATUS="This copy of WMBiff was not compiled with GNUTLS."
+if test "$gnutls" = "ok"; then
+ AM_PATH_LIBGNUTLS(1.0.4, [LIBS="$LIBS $LIBGNUTLS_LIBS"
+ CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
+ GNUTLS_COMMON_O="gnutls-common.o"
+ GNUTLS_MAN_STATUS="This copy of WMBiff was compiled with GNUTLS."
+ AC_CHECK_HEADERS(gnutls/gnutls.h) ],
+ [ echo GNUTLS can be found at ftp://gnutls.hellug.gr/pub/gnutls ])
+else
+ AC_MSG_RESULT(GNUTLS support requires libz.a and libgdbm.a, so will be disabled)
+fi
+
+GCRYPT_MAN_STATUS="This copy of WMBiff was not compiled with gcrypt."
+if test "$gcrypt" = "ok"; then
+ AM_PATH_LIBGCRYPT(1.1.90, [CFLAGS="$CFLAGS $LIBGCRYPT_CFLAGS"
+ CPPFLAGS="$CPPFLAGS $LIBGCRYPT_CFLAGS"
+ GCRYPT_MAN_STATUS="This copy of WMBiff was compiled with gcrypt."
+ AC_CHECK_HEADERS(gcrypt.h) ],
+ [ echo libgcrypt can be found at ftp://ftp.gnupg.org/pub/gcrypt/alpha/libgcrypt/ ] )
+else
+ AC_MSG_RESULT(GCRYPT disabled.)
+fi;
+
+
+AC_SUBST(LIBGCRYPT_LIBS)
+AC_SUBST(GNUTLS_MAN_STATUS)
+AC_SUBST(GCRYPT_MAN_STATUS)
+AC_SUBST(GNUTLS_COMMON_O)
+
+dnl regex stuff.
+AC_CHECK_HEADERS(regex.h) dnl gnuregex.h
+dnl no longer needed AC_CHECK_LIB(gnuregex, re_search) dnl BSD.
+
+dnl X11 stuff.
+AC_PATH_XTRA_CORRECTED
+if test "$no_x" = yes; then
+ AC_MSG_ERROR("Really need a working X. Check config.log to see why configure couldn't find it")
+fi
+LIBS="$X_LIBS $LIBS"
+dnl want to get the -I flags so that later tests for include files work.
+dnl the preprocessor is used for check_headers, which doesn't use cflags.
+CPPFLAGS="$X_CFLAGS $CPPFLAGS"
+AC_CHECK_LIB(X11, XrmParseCommand)
+AC_CHECK_LIB(Xext, XShapeCombineMask, , AC_MSG_ERROR(libXext not found or does not include XShape))
+AC_CHECK_LIB(Xpm, XpmCreateImageFromXpmImage)
+
+AC_CHECK_HEADERS(X11/xpm.h, [], [AC_CHECK_HEADERS(xpm.h, [], AC_MSG_ERROR([xpm.h is needed]))])
+dnl AM_PATH_GTK(1.2.10, , AC_MSG_WARN(Cannot find GTK: Is gtk-config in path?))
+dnl AM_PATH_GDK_PIXBUF(0.15.0, [CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS"],
+ dnl AC_MSG_ERROR(Cannot find gdk-pixbuf))
+dnl GNOME_INIT_HOOK([ ], failure)
+dnl GNOME_ORBIT_HOOK([GNOME_LIBS="$GNOME_LIBS $ORBIT_LIBS"
+dnl GNOME_CFLAGS="$GNOME_CFLAGS $ORBIT_CFLAGS"], failure)
+dnl GNOME_GNORBA_HOOK([GNOME_LIBS="$GNOME_LIBS $GNORBA_LIBS"
+dnl GNOME_CFLAGS="$GNOME_CFLAGS $GNORBA_CFLAGS"], failure)
+
+dnl AC_SUBST(GNOME_LIBS)
+dnl AC_SUBST(GNOME_CFLAGS)
+
+
+dnl see if __attribute__ is supported. modified from AC_C_INLINE
+dnl in the autoconf distribution.
+AC_DEFUN([WM_C_ATTRIBUTE],
+[AC_CACHE_CHECK([for __attribute__ support], wm_cv_c_attribute,
+[wm_cv_c_attribute=no
+AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+[#ifndef __cplusplus
+typedef int foo_t;
+foo_t foo () __attribute__((unused));
+foo_t foo () {return 0; }
+#endif
+])],
+ [wm_cv_c_attribute=yes])
+])
+case $wm_cv_c_attribute in
+ yes)AC_DEFINE(HAVE___ATTRIBUTE__, ,
+ [Define if '__attribute__' is supported by the compiler])
+ ;;
+esac
+])# WM_C_ATTRIBUTE
+
+WM_C_ATTRIBUTE
+
+dnl Password prompting stuff.
+AC_PATH_PROGS(DEFAULT_ASKPASS, ssh-askpass x11-ssh-askpass ssh-askpass-gnome, /usr/bin/ssh-askpass)
+AC_PATH_PROG(CVS2CL, cvs2cl)
+AC_DEFINE_UNQUOTED(DEFAULT_ASKPASS, "$DEFAULT_ASKPASS", [Program to use for querying the user for a password: redefine if not on a debian system])
+
+AC_CHECK_HEADERS(CoreServices/CoreServices.h Security/Security.h)
+
+dnl Skin files; note - this is duplicated in wmbiff/Makefile.am
+dnl haven't thought of a way around it.
+if test "x$prefix" != xNONE; then
+ SKINDIR="$prefix/share/wmbiff/skins"
+else
+ SKINDIR="$ac_default_prefix/share/wmbiff/skins"
+fi
+dnl where to install em
+AC_SUBST(SKINDIR)
+dnl where to find em
+AC_DEFINE_UNQUOTED(DEFAULT_SKIN_PATH,
+ "$SKINDIR:/usr/share/wmbiff/skins:/usr/local/share/wmbiff/skins:.", [Path to use when finding skins (modified pixmaps)] )
+
+dnl We're done.
+AC_CONFIG_FILES(Makefile wmbiff/Makefile wmgeneral/Makefile wmbiff/wmbiffrc.5 autoconf/Makefile scripts/Makefile)
+AC_OUTPUT
+dnl remind not to write the file.
+chmod 0444 wmbiff/wmbiffrc.5
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644
index 0000000..2cd7c0a
--- /dev/null
+++ b/scripts/Makefile.am
@@ -0,0 +1,2 @@
+pkglib_SCRIPTS = security.debian.rb
+EXTRA_DIST = security.debian.rb
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
new file mode 100644
index 0000000..a8917b4
--- /dev/null
+++ b/scripts/Makefile.in
@@ -0,0 +1,241 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+ at SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CVS2CL = @CVS2CL@
+DEFAULT_ASKPASS = @DEFAULT_ASKPASS@
+DEPDIR = @DEPDIR@
+GCRYPT_MAN_STATUS = @GCRYPT_MAN_STATUS@
+GNUTLS_COMMON_O = @GNUTLS_COMMON_O@
+GNUTLS_MAN_STATUS = @GNUTLS_MAN_STATUS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
+LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SKINDIR = @SKINDIR@
+STRIP = @STRIP@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+pkglib_SCRIPTS = security.debian.rb
+EXTRA_DIST = security.debian.rb
+subdir = scripts
+mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SCRIPTS = $(pkglib_SCRIPTS)
+
+DIST_SOURCES =
+DIST_COMMON = Makefile.am Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu scripts/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+pkglibSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+install-pkglibSCRIPTS: $(pkglib_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(pkglibdir)
+ @list='$(pkglib_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(pkglibSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f"; \
+ $(pkglibSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-pkglibSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(pkglibdir)/$$f"; \
+ rm -f $(DESTDIR)$(pkglibdir)/$$f; \
+ done
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @list='$(DISTFILES)'; for file in $$list; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 $(SCRIPTS)
+
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(pkglibdir)
+
+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_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_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 mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-pkglibSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+uninstall-am: uninstall-info-am uninstall-pkglibSCRIPTS
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am info info-am install \
+ install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-pkglibSCRIPTS install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ uninstall uninstall-am uninstall-info-am \
+ uninstall-pkglibSCRIPTS
+
+# 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/scripts/security.debian.rb b/scripts/security.debian.rb
new file mode 100755
index 0000000..e3ec366
--- /dev/null
+++ b/scripts/security.debian.rb
@@ -0,0 +1,197 @@
+#! /usr/bin/ruby
+
+# Copyright 2002 Neil Spring <nspring at cs.washington.edu>
+# GPL
+# report bugs to wmbiff-devel at lists.sourceforge.net
+# or (preferred) use the debian BTS via 'reportbug'
+
+# Based on security-update-check.py by Rob Bradford
+
+require 'net/http'
+
+#require 'profile'
+
+# re-fetch interval - only bug the server once every hour.
+# allows wmbiff to ask us often how many packages have been
+# updated so that the number goes back to cyan (old) from
+# yellow (new) quickly on upgrade.
+
+# this still doesn't mean we grab the whole file. we get
+# if-modified-since. it just means we don't connect to the
+# server more often than this.
+# 6 hours * 60 min/hour * 60 sec/min
+Refetch_Interval_Sec = 6 * 60 * 60
+
+# as an ordinary user, we store Packages in the home directory.
+Cachedir = ENV['HOME'] + '/.wmbiff-sdr'
+
+# look for updates from this server. This script is designed around
+# (and simplified greatly by) using just a single server.
+Server = 'security.debian.org'
+
+# extend the Array class with a max method.
+class Array
+ def inject(n)
+ each { |value| n = yield(n, value) }
+ n
+ end
+ def max
+ inject(0) { |n, value| ((n > value) ? n : value) }
+ end
+end
+
+def debugmsg(str)
+ $stderr.puts str if($VERBOSE)
+end
+
+# to be reimplemented without execing touch.
+def touch(filename)
+ debugmsg "touching #{filename}"
+ Kernel.system('/usr/bin/touch ' + filename)
+end
+
+# to be reimplemented without execing dpkg, though running
+# dpkg excessively doesn't seem to be a bottleneck.
+def version_a_gt_b(a, b)
+ cmd = "/usr/bin/dpkg --compare-versions %s le %s" % [ a, b ]
+ # $stderr.puts cmd
+ return (!Kernel.system(cmd))
+end
+
+# figure out which lists to check
+# there can be many implementations of
+# this behavior, this seemed simplest.
+
+
+# we're going to make an array of arrays, for each package
+# file, the url, the system's cache of the file, and a
+# per-user cache of the file.
+packagelists = Dir.glob("/var/lib/apt/lists/#{Server}*Packages").map { |pkgfile|
+ [ pkgfile.gsub(/.*#{Server}/, '').tr('_','/'), # the url path
+ pkgfile, # the system cache of the packages file. probably up-to-date.
+ # and finally, a user's cache of the page, if needed.
+ "%s/%s" % [ Cachedir, pkgfile.gsub(/.*#{Server}_/,'') ]
+ ]
+}
+
+# we'll open a persistent session, but only if we need it.
+session = nil
+
+# update the user's cache if necessary.
+packagelists.each { |urlpath, sc, uc|
+ sctime = File.stat(sc).mtime
+ cached_time =
+ if(test(?e, uc)) then
+ uctime = File.stat(uc).mtime
+ if ( uctime < sctime ) then
+ # we have a user cache, but it is older than the system cache
+ File.unlink(uc) # delete the obsolete user cache.
+ sctime
+ else
+ uctime
+ end
+ else
+ # the user cache doesn't exist, but we might have
+ # talked to the server recently.
+ if(test(?e, uc + '.stamp')) then
+ File.stat(uc + '.stamp').mtime
+ else
+ sctime
+ end
+ end
+ if(Time.now > cached_time + Refetch_Interval_Sec) then
+ debugmsg "fetching #{urlpath} %s > %s + %d" % [Time.now, cached_time, Refetch_Interval_Sec]
+ begin
+ if(session == nil) then
+ session = Net::HTTP.new(Server)
+ # session.set_pipe($stderr);
+ end
+ begin
+ # the warning with ruby1.8 on the following line
+ # has to do with the resp, data bit, which should
+ # eventually be replaced with (copied from the
+ # docs with the 1.8 net/http.rb)
+ # response = http.get('/index.html')
+ # puts response.body
+ resp, data = session.get(urlpath,
+ { 'If-Modified-Since' =>
+ cached_time.strftime( "%a, %d %b %Y %H:%M:%S GMT" ) })
+ rescue SocketError => e
+ # if the net is down, we'll get this error; avoid printing a stack trace.
+ puts "XX old"
+ puts e
+ exit 1;
+ rescue Timeout::Error => e
+ # if the net is down, we might get this error instead.
+ # but there is no good reason to print the specific exception. (execution expired)
+ puts "XX old"
+ exit 1;
+ end
+ test(?e, Cachedir) or Dir.mkdir(Cachedir)
+ File.open(uc, 'w') { |o| o.puts data }
+ test(?e, uc + '.stamp') and File.unlink(uc + '.stamp') # we have a copy, don't need the stamp.
+ debugmsg "urlpath updated"
+ rescue Net::ProtoRetriableError => detail
+ head = detail.data
+ if head.code != "304"
+ raise "unexpected error occurred: " + detail
+ end
+ test(?e, Cachedir) or Dir.mkdir(Cachedir)
+ if(test(?e, uc)) then
+ touch(uc)
+ else
+ # we didn't get an update, but we don't have a cached
+ # copy in the user directory.
+ touch(uc + '.stamp')
+ end
+ end
+ else
+ debugmsg "skipping #{urlpath}"
+ end
+}
+
+available = Hash.new
+package = nil
+packagelists.each { |url, sc, uc|
+ File.open( (test(?e, uc)) ? uc : sc, 'r').each { |ln|
+ if(m = /^Package: (.*)/.match(ln)) then
+ package = m[1]
+ elsif(m = /^Version: (.*)/.match(ln)) then
+ available[package] = m[1]
+ end
+ }
+}
+
+installed = Hash.new
+package = nil
+isinstalled = false
+File.open('/var/lib/dpkg/status').each { |ln|
+ if(m = /^Package: (.*)$/.match(ln)) then
+ package = m[1]
+ isinstalled = false # reset
+ elsif(m = /^Status: install ok installed/.match(ln)) then
+ isinstalled = true
+ elsif(m = /^Version: (.*)$/.match(ln)) then
+ isinstalled && installed[package] = m[1]
+ end
+}
+
+debugmsg "%d installed, %d available" % [ installed.length, available.length ]
+
+updatedcount = 0
+updated = Array.new
+( installed.keys & available.keys ).each { |pkg|
+ if(version_a_gt_b(available[pkg], installed[pkg])) then
+ updatedcount += 1
+ updated.push(pkg + ": #{available[pkg]} > #{installed[pkg]}")
+ end
+}
+
+# we're done. output a count in the format expected by wmbiff.
+if(updatedcount > 0) then
+ puts "%d new" % [ updatedcount ]
+else
+ puts "%d old" % [ installed.length ]
+end
+
+puts updated.join("\n")
diff --git a/wmbiff/Client.h b/wmbiff/Client.h
new file mode 100644
index 0000000..607ba76
--- /dev/null
+++ b/wmbiff/Client.h
@@ -0,0 +1,198 @@
+/* $Id: Client.h,v 1.42 2005/05/08 21:31:22 bluehal Exp $ */
+/* Author : Scott Holden ( scotth at thezone.net )
+ Modified : Yong-iL Joh ( tolkien at mizi.com )
+ Modified : Jorge Garc�a ( Jorge.Garcia at uv.es )
+ *
+ * Email Checker Pop3/Imap4/Gicu/mbox/maildir/finger
+ *
+ * Last Updated : $Date: 2005/05/08 21:31:22 $
+ *
+ */
+
+#ifndef CLIENT
+#define CLIENT
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+#ifdef HAVE_GCRYPT_H
+#include <gcrypt.h>
+#endif
+
+#ifdef __LCLINT__
+typedef unsigned int off_t;
+#endif
+
+#define BUF_BIG 256
+#define BUF_SMALL 32
+#define BUF_SIZE 1024
+
+struct msglst;
+typedef struct _mbox_t *Pop3;
+typedef struct _mbox_t {
+ char label[BUF_SMALL]; /* Printed at left; max 5 chars */
+ char path[BUF_BIG]; /* Path to mailbox */
+ char notify[BUF_BIG]; /* Program to notify mail arrivation */
+ char action[BUF_BIG]; /* Action to execute on mouse click, reduces to
+ * what happens on button1. this is executed after
+ * either actionnew or actionnonew (if they are
+ * defined in the config file) */
+ char actionnew[BUF_BIG]; /* Action to execute on mouse click when new mail */
+ char actionnonew[BUF_BIG]; /* Action to execute on mouse click when no new mail */
+ char actiondc[BUF_BIG]; /* Action to execute when icq is disconnected */
+ char button2[BUF_BIG]; /* What to run on button2. (middle) */
+ char fetchcmd[BUF_BIG]; /* Action for mail fetching for pop3/imap, reduces to what happens on button3 */
+ int fetchinterval;
+ int TotalMsgs; /* Total messages in mailbox */
+ int UnreadMsgs; /* New (unread) messages in mailbox */
+ int OldMsgs;
+ int OldUnreadMsgs;
+ char TextStatus[10]; /* if set to a string, toupper() and blit
+ * that string. instead of a message count */
+ int blink_stat; /* blink digits flag-counter */
+ int debug; /* debugging status */
+
+ struct msglst *headerCache;
+
+ union {
+ struct {
+ time_t mtime;
+ off_t size;
+ } mbox;
+ struct {
+ char *detail;
+ } shell;
+ struct {
+ time_t mtime_new;
+ off_t size_new;
+ time_t mtime_cur;
+ off_t size_cur;
+ unsigned int dircache_flush:1; /* hack to flush directory caches */
+ } maildir;
+ struct {
+ char password[BUF_SMALL];
+ char userName[BUF_SMALL];
+ char serverName[BUF_BIG];
+ int serverPort;
+ int localPort;
+ char authList[100];
+ unsigned int dossl:1; /* use tls. */
+ /* prompt the user if we can't login / password is empty */
+ unsigned int interactive_password:1;
+ /* using the msglst feature, fetch the headers
+ to have them on hand */
+ unsigned int wantCacheHeaders:1;
+ unsigned char password_len; /* memfrob may shorten passwords */
+ } pop_imap;
+ } u;
+
+ int (*checkMail) ( /*@notnull@ */ Pop3);
+
+ /* collect the headers to show in a pop up */
+ struct msglst *(*getHeaders) ( /*@notnull@ */ Pop3);
+ /* allow the client to free the headers, or keep them cached */
+ void (*releaseHeaders) ( /*@notnull@ */ Pop3, struct msglst * ml);
+
+ time_t prevtime;
+ time_t prevfetch_time;
+ int loopinterval; /* loop interval for this mailbox */
+
+ /* command to execute to get a password, if needed */
+ const char *askpass;
+} mbox_t;
+
+/* creation calls must have this prototype */
+int pop3Create( /*@notnull@ */ Pop3 pc, const char *str);
+int imap4Create( /*@notnull@ */ Pop3 pc, const char *str);
+int shellCreate( /*@notnull@ */ Pop3 pc, const char *str);
+int mboxCreate( /*@notnull@ */ Pop3 pc, const char *str);
+int maildirCreate( /*@notnull@ */ Pop3 pc, const char *str);
+
+int sock_connect(const char *hostname, int port);
+FILE *openMailbox(Pop3 pc, const char *mbox_filename);
+
+/* backtickExpand returns null on failure */
+/*@null@ */
+char *backtickExpand(Pop3 pc, const char *path);
+int fileHasChanged(const char *mbox_filename, time_t * atime,
+ time_t * mtime, off_t * size);
+int grabCommandOutput(Pop3 pc, const char *command,
+ /*@out@ */ char **output,
+ /*@out@ *//*@null@ */ char **details);
+int exists(const char *filename); /* test -f */
+
+/* _NONE is for silent operation. _ERROR is for things that should
+ be printed assuming that the user might possibly see them. _INFO is
+ for reasonably useless but possibly interesting messages. _ALL is
+ for everything. Restated, _ERROR will always be printed, _INFO only
+ if debugging messages were requested. */
+#define DEBUG_NONE 0
+#define DEBUG_ERROR 1
+#define DEBUG_INFO 2
+#define DEBUG_ALL 2
+/* inspired by ksymoops-2.3.4/ksymoops.h */
+#define DM(mbox, msglevel, X...) \
+do { \
+ if (mbox == NULL || (mbox)->debug >= msglevel) { \
+ printf("wmbiff/%s ", (mbox != NULL) ? (mbox)->label : "NULL"); \
+ printf(X); \
+ (void)fflush(NULL); \
+ } \
+} while(0)
+
+extern int debug_default;
+#define DMA(msglevel, X...) \
+do { \
+ if (debug_default >= msglevel) { \
+ printf("wmbiff: " X); \
+(void)fflush(NULL); \
+ } \
+} while(0)
+
+/* technique used in apache to allow GCC's attribute tags,
+ without requiring gcc as the compiler */
+#if !defined(__GNUC__) || __GNUC__ < 2 || \
+ (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#ifndef __attribute__
+#define __attribute__(__x)
+#endif
+#endif /* gnuc */
+#endif /* client.h */
+
+#ifndef FALSE
+#define FALSE (0)
+#define TRUE (!FALSE)
+#endif
+
+#ifdef __LCLINT__
+/* lclint doesn't do typeof */
+#define min(x,y) ((x > y) ? x : y)
+#define max(x,y) ((x > y) ? x : y)
+#else
+/* from linux/kernel.h */
+#define min(x,y) ({ \
+ const typeof(x) _xi = (x); \
+ const typeof(y) _yi = (y); \
+ (void) (&_xi == &_yi); \
+ _xi < _yi ? _xi : _yi; })
+#define max(x,y) ({ \
+ const typeof(x) _xa = (x); \
+ const typeof(y) _ya = (y); \
+ (void) (&_xa == &_ya); \
+ _xa > _ya ? _xa : _ya; })
+#endif
+
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/Imap4Client.c b/wmbiff/Imap4Client.c
new file mode 100644
index 0000000..be5d972
--- /dev/null
+++ b/wmbiff/Imap4Client.c
@@ -0,0 +1,736 @@
+/* rewrite of the IMAP code by Neil Spring
+ * (nspring at cs.washington.edu) to support gnutls and
+ * persistent connections to servers. */
+
+/* Originally written by Yong-iL Joh (tolkien at mizi.com),
+ * modified by Jorge Garcia (Jorge.Garcia at uv.es), and
+ * modified by Jay Francis (jtf at u880.org) to support
+ * CRAM-MD5 */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Client.h"
+#include "charutil.h"
+#include "tlsComm.h"
+#include "passwordMgr.h"
+#include "regulo.h"
+#include "MessageList.h"
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <assert.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+#include <ctype.h>
+#include <strings.h>
+
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#define PCU (pc->u).pop_imap
+
+extern int Relax;
+
+#define IMAP_DM(pc, lvl, args...) DM(pc, lvl, "imap4: " args)
+
+#ifdef HAVE_MEMFROB
+#define DEFROB(x) memfrob(x, x ## _len)
+#define ENFROB(x) memfrob(x, x ## _len)
+#else
+#define DEFROB(x)
+#define ENFROB(x)
+#endif
+
+/* this array maps server:port pairs to file descriptors, so
+ that when more than one mailbox is queried from a server,
+ we only use one socket. It's limited in size by the
+ number of different mailboxes displayed. */
+#define FDMAP_SIZE 5
+static struct fdmap_struct {
+ char *user_server_port; /* tuple, in string form */
+ /*@owned@ */ struct connection_state *cs;
+} fdmap[FDMAP_SIZE];
+
+static void ask_user_for_password( /*@notnull@ */ Pop3 pc,
+ int bFlushCache);
+
+/* authentication callbacks */
+#ifdef HAVE_GCRYPT_H
+static int authenticate_md5( /*@notnull@ */ Pop3 pc,
+ struct connection_state *scs,
+ const char *capabilities);
+#endif
+static int authenticate_plaintext( /*@notnull@ */ Pop3 pc,
+ struct connection_state *scs,
+ const char *capabilities);
+
+/* the auth_methods array maps authentication identifiers
+ to the callback that will attempt to authenticate */
+static struct imap_authentication_method {
+ const char *name;
+ /* callback returns 1 if successful, 0 if failed */
+ int (*auth_callback) ( /*@notnull@ */ Pop3 pc,
+ struct connection_state * scs,
+ const char *capabilities);
+} auth_methods[] = {
+ {
+#ifdef HAVE_GCRYPT_H
+ "cram-md5", authenticate_md5}, {
+#endif
+ "plaintext", authenticate_plaintext}, {
+ NULL, NULL}
+};
+
+
+/* recover a socket from the connection cache */
+/*@null@*/
+/*@dependent@*/
+static struct connection_state *state_for_pcu(Pop3 pc)
+{
+ char *connection_id;
+ struct connection_state *retval = NULL;
+ int i;
+ connection_id =
+ malloc(strlen(PCU.userName) + strlen(PCU.serverName) + 22);
+ sprintf(connection_id, "%s|%s|%d", PCU.userName, PCU.serverName,
+ PCU.serverPort);
+ for (i = 0; i < FDMAP_SIZE; i++)
+ if (fdmap[i].user_server_port != NULL &&
+ (strcmp(connection_id, fdmap[i].user_server_port) == 0)) {
+ retval = fdmap[i].cs;
+ }
+ free(connection_id);
+ return (retval);
+}
+
+/* bind to the connection cache */
+static void bind_state_to_pcu(Pop3 pc,
+ /*@owned@ */ struct connection_state *scs)
+{
+ char *connection_id;
+ int i;
+ if (scs == NULL) {
+ abort();
+ }
+ connection_id =
+ malloc(strlen(PCU.userName) + strlen(PCU.serverName) + 22);
+ sprintf(connection_id, "%s|%s|%d", PCU.userName, PCU.serverName,
+ PCU.serverPort);
+ for (i = 0; i < FDMAP_SIZE && fdmap[i].cs != NULL; i++);
+ if (i == FDMAP_SIZE) {
+ /* should never happen */
+ IMAP_DM(pc, DEBUG_ERROR,
+ "Tried to open too many IMAP connections. Sorry!\n");
+ exit(EXIT_FAILURE);
+ }
+ fdmap[i].user_server_port = connection_id;
+ fdmap[i].cs = scs;
+}
+
+/* remove from the connection cache */
+static
+/*@owned@*/
+/*@null@*/
+struct connection_state *unbind(
+/*@returned@*/ struct connection_state
+ *scs)
+{
+ int i;
+ struct connection_state *retval = NULL;
+ assert(scs != NULL);
+
+ for (i = 0; i < FDMAP_SIZE && fdmap[i].cs != scs; i++);
+ if (i < FDMAP_SIZE) {
+ free(fdmap[i].user_server_port);
+ fdmap[i].user_server_port = NULL;
+ retval = fdmap[i].cs;
+ fdmap[i].cs = NULL;
+ }
+ return (retval);
+}
+
+/* creates a connection to the server, if a matching one doesn't exist. */
+/* *always* returns null, just declared this wasy to match other protocols. */
+/*@null@*/
+FILE *imap_open(Pop3 pc)
+{
+ static int complained_already; /* we have to succeed once before
+ complaining again about failure */
+ struct connection_state *scs;
+ struct imap_authentication_method *a;
+ char *connection_name;
+ int sd;
+ char capabilities[BUF_SIZE];
+ char buf[BUF_SIZE];
+
+
+ if (state_for_pcu(pc) != NULL) {
+ /* don't need to open. */
+ return NULL;
+ }
+
+ /* got this far; we're going to create a connection_state
+ structure, although it might be a blacklist entry */
+ connection_name = malloc(strlen(PCU.serverName) + 20);
+ sprintf(connection_name, "%s:%d", PCU.serverName, PCU.serverPort);
+
+ assert(pc != NULL);
+
+ /* no cached connection */
+ sd = sock_connect((const char *) PCU.serverName, PCU.serverPort);
+ if (sd == -1) {
+ if (complained_already == 0) {
+ IMAP_DM(pc, DEBUG_ERROR, "Couldn't connect to %s:%d: %s\n",
+ PCU.serverName, PCU.serverPort,
+ errno ? strerror(errno) : "");
+ complained_already = 1;
+ }
+ if (errno == ETIMEDOUT) {
+ /* temporarily bump the interval, in a crude way:
+ fast forward time so that the mailbox isn't
+ checked for a while. */
+ pc->prevtime = time(0) + 60 * 5; /* now + 60 seconds per min * 5 minutes */
+ /* TCP's retry (how much time has elapsed while
+ the connect times out) is around 3 minutes;
+ here we just try to allow checking local
+ mailboxes more often while remote things are
+ unavailable or disconnected. */
+ }
+ return NULL;
+ }
+
+ /* build the connection using STARTTLS */
+ if (PCU.dossl != 0 && (PCU.serverPort == 143)) {
+ /* setup an unencrypted binding long enough to invoke STARTTLS */
+ scs = initialize_unencrypted(sd, connection_name, pc);
+
+ /* can we? */
+ tlscomm_printf(scs, "a000 CAPABILITY\r\n");
+ if (tlscomm_expect(scs, "* CAPABILITY", capabilities, BUF_SIZE) ==
+ 0)
+ goto communication_failure;
+
+ if (!strstr(capabilities, "STARTTLS")) {
+ IMAP_DM(pc, DEBUG_ERROR,
+ "server doesn't support ssl imap on port 143.");
+ goto communication_failure;
+ }
+
+ /* we sure can! */
+ IMAP_DM(pc, DEBUG_INFO, "Negotiating TLS within IMAP");
+ tlscomm_printf(scs, "a001 STARTTLS\r\n");
+
+ if (tlscomm_expect(scs, "a001 ", buf, BUF_SIZE) == 0)
+ goto communication_failure;
+
+ if (strstr(buf, "a001 OK") == 0) {
+ /* we didn't see the success message in the response */
+ IMAP_DM(pc, DEBUG_ERROR, "couldn't negotiate tls. :(\n");
+ goto communication_failure;
+ }
+
+ /* we don't need the unencrypted state anymore */
+ /* note that communication_failure will close the
+ socket and free via tls_close() */
+ free(scs); /* fall through will scs = initialize_gnutls(sd); */
+ }
+
+ /* either we've negotiated ssl from starttls, or
+ we're starting an encrypted connection now */
+ if (PCU.dossl != 0) {
+ scs = initialize_gnutls(sd, connection_name, pc, PCU.serverName);
+ if (scs == NULL) {
+ IMAP_DM(pc, DEBUG_ERROR, "Failed to initialize TLS\n");
+ return NULL;
+ }
+ } else {
+ scs = initialize_unencrypted(sd, connection_name, pc);
+ }
+
+ /* authenticate; first find out how */
+ /* note that capabilities may have changed since last
+ time we may have asked, if we called STARTTLS, my
+ server will allow plain password login within an
+ encrypted session. */
+ tlscomm_printf(scs, "a000 CAPABILITY\r\n");
+ if (tlscomm_expect(scs, "* CAPABILITY", capabilities, BUF_SIZE) == 0) {
+ IMAP_DM(pc, DEBUG_ERROR, "unable to query capability string");
+ goto communication_failure;
+ }
+
+ /* try each authentication method in turn. */
+ for (a = auth_methods; a->name != NULL; a++) {
+ /* was it specified or did the user leave it up to us? */
+ if (PCU.authList[0] == '\0'
+ || strstr(PCU.authList, a->name) != NULL)
+ /* try the authentication method */
+ if ((a->auth_callback(pc, scs, capabilities)) != 0) {
+ /* store this well setup connection in the cache */
+ bind_state_to_pcu(pc, scs);
+ complained_already = 0;
+ return NULL;
+ }
+ }
+
+ /* if authentication worked, we won't get here */
+ IMAP_DM(pc, DEBUG_ERROR,
+ "All authentication methods failed for '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ communication_failure:
+ tlscomm_printf(scs, "a002 LOGOUT\r\n");
+ tlscomm_close(scs);
+ return NULL;
+
+}
+
+void imap_cacheHeaders( /*@notnull@ */ Pop3 pc);
+
+int imap_checkmail( /*@notnull@ */ Pop3 pc)
+{
+ /* recover connection state from the cache */
+ struct connection_state *scs = state_for_pcu(pc);
+ char buf[BUF_SIZE];
+ static int command_id;
+
+ /* if it's not in the cache, try to open */
+ if (scs == NULL) {
+ IMAP_DM(pc, DEBUG_INFO, "Need new connection to %s@%s\n",
+ PCU.userName, PCU.serverName);
+ (void) imap_open(pc);
+ scs = state_for_pcu(pc);
+ }
+ if (scs == NULL) {
+ return -1;
+ }
+
+ if (tlscomm_is_blacklisted(scs) != 0) {
+ /* unresponsive server, don't bother. */
+ return -1;
+ }
+
+ /* if we've got it by now, try the status query */
+ command_id++;
+ tlscomm_printf(scs, "a%03d STATUS %s (MESSAGES UNSEEN)\r\n",
+ command_id % 1000, pc->path);
+ if (tlscomm_expect(scs, "* STATUS", buf, 127) != 0) {
+ /* a valid response? */
+ // doesn't support spaces: (void) sscanf(buf, "* STATUS %*s (MESSAGES %d UNSEEN %d)",
+ const char *msg;
+ msg = strstr(buf, "(MESSAGES");
+ if (msg != NULL)
+ (void) sscanf(msg, "(MESSAGES %d UNSEEN %d)",
+ &(pc->TotalMsgs), &(pc->UnreadMsgs));
+ /* update the cached headers if evidence that change
+ has occurred; not necessarily complete. */
+ if (pc->UnreadMsgs != pc->OldUnreadMsgs ||
+ pc->TotalMsgs != pc->OldMsgs) {
+ if (PCU.wantCacheHeaders) {
+ imap_cacheHeaders(pc);
+ }
+ }
+ } else {
+ /* something went wrong. bail. */
+ tlscomm_close(unbind(scs));
+ return -1;
+ }
+ return 0;
+}
+
+void
+imap_releaseHeaders(Pop3 pc __attribute__ ((unused)), struct msglst *h)
+{
+ assert(h != NULL);
+ /* allow the list to be released next time around */
+ if (h->in_use <= 0) {
+ /* free the old one */
+ while (h != NULL) {
+ struct msglst *n = h->next;
+ free(h);
+ h = n;
+ }
+ } else {
+ h->in_use--;
+ }
+}
+
+void imap_cacheHeaders( /*@notnull@ */ Pop3 pc)
+{
+ struct connection_state *scs = state_for_pcu(pc);
+ char *msgid;
+ char buf[BUF_SIZE];
+
+ if (scs == NULL) {
+ (void) imap_open(pc);
+ scs = state_for_pcu(pc);
+ }
+ if (scs == NULL) {
+ return;
+ }
+ if (tlscomm_is_blacklisted(scs) != 0) {
+ return;
+ }
+
+ if (pc->headerCache != NULL) {
+ /* decrement the reference count, and free our version */
+ imap_releaseHeaders(pc, pc->headerCache);
+ pc->headerCache = NULL;
+ }
+
+ IMAP_DM(pc, DEBUG_INFO, "working headers\n");
+
+ tlscomm_printf(scs, "a004 EXAMINE %s\r\n", pc->path);
+ if (tlscomm_expect(scs, "a004 OK", buf, 127) == 0) {
+ tlscomm_close(unbind(scs));
+ return;
+ }
+ IMAP_DM(pc, DEBUG_INFO, "examine ok\n");
+
+ /* if we've got it by now, try the status query */
+ tlscomm_printf(scs, "a005 SEARCH UNSEEN\r\n");
+ if (tlscomm_expect(scs, "* SEARCH", buf, 127) == 0) {
+ tlscomm_close(unbind(scs));
+ return;
+ }
+ IMAP_DM(pc, DEBUG_INFO, "search: %s", buf);
+ if (strlen(buf) < 9)
+ return; /* search turned up nothing */
+ msgid = strtok(buf + 9, " \r\n");
+ pc->headerCache = NULL;
+ /* the isdigit cruft is to deal with EOL */
+ if (msgid != NULL && isdigit(msgid[0]))
+ do {
+ struct msglst *m = malloc(sizeof(struct msglst));
+ char hdrbuf[128];
+ int fetch_command_done = FALSE;
+ tlscomm_printf(scs, "a04 FETCH %s (FLAGS "
+ "BODY[HEADER.FIELDS (FROM SUBJECT)])\r\n",
+ msgid);
+ if (tlscomm_expect(scs, "* ", hdrbuf, 127)) {
+ m->subj[0] = '\0';
+ m->from[0] = '\0';
+ while (m->subj[0] == '\0' || m->from[0] == '\0') {
+ if (tlscomm_expect(scs, "", hdrbuf, 127)) {
+ if (strncasecmp(hdrbuf, "Subject:", 8) == 0) {
+ strncpy(m->subj, hdrbuf + 9, SUBJ_LEN - 1);
+ m->subj[SUBJ_LEN - 1] = '\0';
+ } else if (strncasecmp(hdrbuf, "From: ", 5) == 0) {
+ strncpy(m->from, hdrbuf + 6, FROM_LEN - 1);
+ m->from[FROM_LEN - 1] = '\0';
+ } else if (strncasecmp
+ (hdrbuf, "a04 OK FETCH", 5) == 0) {
+ /* server says we're done getting this header, which
+ may occur if the message has no subject */
+ if (m->from[0] == '\0') {
+ strcpy(m->from, " ");
+ }
+ if (m->subj[0] == '\0') {
+ strcpy(m->subj, "(no subject)");
+ }
+ fetch_command_done = TRUE;
+ }
+ } else {
+ IMAP_DM(pc, DEBUG_ERROR,
+ "timedout looking for headers.: %s",
+ hdrbuf);
+ strcpy(m->from, "wmbiff");
+ strcpy(m->subj, "failure");
+ }
+ }
+ IMAP_DM(pc, DEBUG_INFO, "From: '%s' Subj: '%s'\n",
+ m->from, m->subj);
+ m->next = pc->headerCache;
+ pc->headerCache = m;
+ pc->headerCache->in_use = 0; /* initialize that it isn't locked */
+ } else {
+ IMAP_DM(pc, DEBUG_ERROR, "error fetching: %s", hdrbuf);
+ }
+ if (!fetch_command_done) {
+ tlscomm_expect(scs, "a04 OK", hdrbuf, 127);
+ }
+ }
+ while ((msgid = strtok(NULL, " \r\n")) != NULL
+ && isdigit(msgid[0]));
+
+ tlscomm_printf(scs, "a06 CLOSE\r\n"); /* return to polling state */
+ /* may be unneeded tlscomm_expect(scs, "a06 OK CLOSE\r\n" ); see if it worked? */
+ IMAP_DM(pc, DEBUG_INFO, "worked headers\n");
+}
+
+/* a client is asking for the headers, hand em a reference, increase the
+ one-bit reference counter */
+struct msglst *imap_getHeaders( /*@notnull@ */ Pop3 pc)
+{
+ if (pc->headerCache == NULL)
+ imap_cacheHeaders(pc);
+ if (pc->headerCache != NULL)
+ pc->headerCache->in_use = 1;
+ return pc->headerCache;
+}
+
+/* parse the config line to setup the Pop3 structure */
+int imap4Create( /*@notnull@ */ Pop3 pc, const char *const str)
+{
+ int i;
+ int matchedchars;
+ /* special characters aren't allowed in hostnames, rfc 1034 */
+ const char *regexes[] = {
+ // type : username : password @ hostname (/ name)?(:port)?
+ ".*imaps?:([^: ]{1,32}):([^@]{0,32})@([A-Za-z1-9][-A-Za-z0-9_.]+)(/(\"[^\"]+\")|([^:@ ]+))?(:[0-9]+)?( *([CcAaPp][-A-Za-z5 ]*))?$",
+ ".*imaps?:([^: ]{1,32}) ([^ ]{1,32}) ([A-Za-z1-9][-A-Za-z0-9_.]+)(/(\"[^\"]+\")|([^: ]+))?( [0-9]+)?( *([CcAaPp][-A-Za-z5 ]*))?$",
+ NULL
+ };
+ char *unaliased_str;
+
+ struct regulo regulos[] = {
+ {1, PCU.userName, regulo_strcpy},
+ {2, PCU.password, regulo_strcpy},
+ {3, PCU.serverName, regulo_strcpy},
+ {4, pc->path, regulo_strcpy_skip1},
+ {7, &PCU.serverPort, regulo_atoi},
+ {9, PCU.authList, regulo_strcpy_tolower},
+ {0, NULL, NULL}
+ };
+
+ if (Relax) {
+ regexes[0] =
+ ".*imaps?:([^: ]{1,32}):([^@]{0,32})@([^/: ]+)(/(\"[^\"]+\")|([^:@ ]+))?(:[0-9]+)?( *(.*))?$";
+ regexes[1] =
+ ".*imaps?:([^: ]{1,32}) ([^ ]{1,32}) ([^/: ]+)(/(\"[^\"]+\")|([^: ]+))?( [0-9]+)?( *(.*))?$";
+ }
+
+
+ /* IMAP4 format: imap:user:password at server/mailbox[:port] */
+ /* If 'str' line is badly formatted, wmbiff won't display the mailbox. */
+ if (strncmp("sslimap:", str, 8) == 0 || strncmp("imaps:", str, 6) == 0) {
+#ifdef HAVE_GNUTLS_GNUTLS_H
+ static int haveBeenWarned;
+ PCU.dossl = 1;
+ if (!haveBeenWarned) {
+ printf("wmbiff uses gnutls for TLS/SSL encryption support:\n"
+ " If you distribute software that uses gnutls, don't forget\n"
+ " to warn the users of your software that gnutls is at a\n"
+ " testing phase and may be totally insecure.\n"
+ "\nConsider yourself warned.\n");
+ haveBeenWarned = 1;
+ }
+#else
+ printf("This copy of wmbiff was not compiled with gnutls;\n"
+ "imaps is unavailable. Exiting to protect your\n"
+ "passwords and privacy.\n");
+ exit(EXIT_FAILURE);
+#endif
+ } else {
+ PCU.dossl = 0;
+ }
+
+ /* defaults */
+ PCU.serverPort = (PCU.dossl != 0) ? 993 : 143;
+ PCU.authList[0] = '\0';
+
+ /* argh, str and pc->path are aliases, so we can't just write the default
+ value into the string we're about to parse. */
+ unaliased_str = strdup(str);
+ strcpy(pc->path, "INBOX");
+
+ for (matchedchars = 0, i = 0;
+ regexes[i] != NULL && matchedchars <= 0; i++) {
+ matchedchars = regulo_match(regexes[i], unaliased_str, regulos);
+ }
+
+ /* failed to match either regex */
+ if (matchedchars <= 0) {
+ pc->label[0] = '\0';
+ IMAP_DM(pc, DEBUG_ERROR, "Couldn't parse line %s (%d)\n"
+ " If this used to work, run wmbiff with the -relax option, and\n"
+ " send mail to wmbiff-devel at lists.sourceforge.net with the hostname\n"
+ " of your mail server.\n", unaliased_str, matchedchars);
+ return -1;
+ }
+
+ PCU.password_len = strlen(PCU.password);
+ if (PCU.password[0] == '\0') {
+ PCU.interactive_password = 1;
+ } else {
+ ENFROB(PCU.password);
+ }
+
+ // grab_authList(unaliased_str + matchedchars, PCU.authList);
+
+ free(unaliased_str);
+
+ IMAP_DM(pc, DEBUG_INFO, "userName= '%s'\n", PCU.userName);
+ IMAP_DM(pc, DEBUG_INFO, "password is %d characters long\n",
+ (int) PCU.password_len);
+ IMAP_DM(pc, DEBUG_INFO, "serverName= '%s'\n", PCU.serverName);
+ IMAP_DM(pc, DEBUG_INFO, "serverPath= '%s'\n", pc->path);
+ IMAP_DM(pc, DEBUG_INFO, "serverPort= '%d'\n", PCU.serverPort);
+ IMAP_DM(pc, DEBUG_INFO, "authList= '%s'\n", PCU.authList);
+
+ if (strcmp(pc->action, "msglst") == 0 ||
+ strcmp(pc->fetchcmd, "msglst") == 0 ||
+ strcmp(pc->button2, "msglst") == 0) {
+ PCU.wantCacheHeaders = 1;
+ } else {
+ PCU.wantCacheHeaders = 0;
+ }
+ pc->checkMail = imap_checkmail;
+ pc->getHeaders = imap_getHeaders;
+ pc->releaseHeaders = imap_releaseHeaders;
+ pc->TotalMsgs = 0;
+ pc->UnreadMsgs = 0;
+ pc->OldMsgs = -1;
+ pc->OldUnreadMsgs = -1;
+ return 0;
+}
+
+static int authenticate_plaintext( /*@notnull@ */ Pop3 pc,
+ struct connection_state *scs,
+ const char *capabilities)
+{
+ char buf[BUF_SIZE];
+ /* is login prohibited? */
+ /* "An IMAP client which complies with [rfc2525, section 3.2]
+ * MUST NOT issue the LOGIN command if this capability is present.
+ */
+ if (strstr(capabilities, "LOGINDISABLED")) {
+ IMAP_DM(pc, DEBUG_ERROR,
+ "Plaintext auth prohibited by server: (LOGINDISABLED).\n");
+ goto plaintext_failed;
+ }
+
+ ask_user_for_password(pc, 0);
+ do {
+ /* login */
+ DEFROB(PCU.password);
+ tlscomm_printf(scs, "a001 LOGIN %s \"%s\"\r\n", PCU.userName,
+ PCU.password);
+ ENFROB(PCU.password);
+ if (tlscomm_expect(scs, "a001 ", buf, BUF_SIZE) == 0) {
+ IMAP_DM(pc, DEBUG_ERROR,
+ "Did not get a response to the LOGIN command.\n");
+ goto plaintext_failed;
+ }
+
+ if (buf[5] != 'O') {
+ IMAP_DM(pc, DEBUG_ERROR, "IMAP Login failed: %s\n", buf);
+ /* if we're prompting the user, ask again, else fail */
+ if (PCU.interactive_password) {
+ PCU.password[0] = '\0';
+ ask_user_for_password(pc, 1); /* 1=overwrite the cache */
+ } else {
+ goto plaintext_failed;
+ }
+ } else {
+ return (1);
+ }
+ }
+ while (1);
+
+ plaintext_failed:
+ return (0);
+}
+
+#ifdef HAVE_GCRYPT_H
+static int
+authenticate_md5(Pop3 pc,
+ struct connection_state *scs, const char *capabilities)
+{
+ char buf[BUF_SIZE];
+ char buf2[BUF_SIZE];
+ unsigned char *md5;
+ gcry_md_hd_t gmh;
+ gcry_error_t rc;
+
+ if (!strstr(capabilities, "AUTH=CRAM-MD5")) {
+ /* server doesn't support cram-md5. */
+ return 0;
+ }
+
+ tlscomm_printf(scs, "a007 AUTHENTICATE CRAM-MD5\r\n");
+ if (tlscomm_expect(scs, "+ ", buf, BUF_SIZE) == 0)
+ goto expect_failure;
+
+ Decode_Base64(buf + 2, buf2);
+ IMAP_DM(pc, DEBUG_INFO, "CRAM-MD5 challenge: %s\n", buf2);
+
+ strcpy(buf, PCU.userName);
+ strcat(buf, " ");
+ ask_user_for_password(pc, 0);
+ rc = gcry_md_open(&gmh, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC);
+ if (rc != 0) {
+ IMAP_DM(pc, DEBUG_INFO, "unable to initialize gcrypt md5\n");
+ return 0;
+ }
+ DEFROB(PCU.password);
+ gcry_md_setkey(gmh, PCU.password, strlen(PCU.password));
+ ENFROB(PCU.password);
+ gcry_md_write(gmh, (unsigned char *) buf2, strlen(buf2));
+ gcry_md_final(gmh);
+ md5 = gcry_md_read(gmh, 0);
+ Bin2Hex(md5, 16, buf2);
+ gcry_md_close(gmh);
+
+ strcat(buf, buf2);
+ IMAP_DM(pc, DEBUG_INFO, "CRAM-MD5 response: %s\n", buf);
+ Encode_Base64(buf, buf2);
+
+ tlscomm_printf(scs, "%s\r\n", buf2);
+ if (tlscomm_expect(scs, "a007 ", buf, BUF_SIZE) == 0)
+ goto expect_failure;
+
+ if (!strncmp(buf, "a007 OK", 7))
+ return 1; /* AUTH successful */
+
+ IMAP_DM(pc, DEBUG_ERROR,
+ "CRAM-MD5 AUTH failed for user '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ IMAP_DM(pc, DEBUG_INFO, "It said %s", buf);
+ return 0;
+
+ expect_failure:
+ IMAP_DM(pc, DEBUG_ERROR,
+ "tlscomm_expect failed during cram-md5 auth: %s", buf);
+ IMAP_DM(pc, DEBUG_ERROR, "failed to authenticate using cram-md5.");
+ return 0;
+}
+#endif
+
+static void ask_user_for_password( /*@notnull@ */ Pop3 pc, int bFlushCache)
+{
+ /* see if we already have a password, as provided in the config file, or
+ already requested from the user. */
+ if (PCU.interactive_password) {
+ if (strlen(PCU.password) == 0) {
+ /* we need to grab the password from the user. */
+ char *password;
+ IMAP_DM(pc, DEBUG_INFO, "asking for password %d\n",
+ bFlushCache);
+ password =
+ passwordFor(PCU.userName, PCU.serverName, pc, bFlushCache);
+ if (password != NULL) {
+ if (strlen(password) + 1 > BUF_SMALL) {
+ DMA(DEBUG_ERROR, "Password is too long.\n");
+ memset(PCU.password, 0, BUF_SMALL - 1);
+ } else {
+ strncpy(PCU.password, password, BUF_SMALL - 1);
+ PCU.password_len = strlen(PCU.password);
+ }
+ free(password);
+ ENFROB(PCU.password);
+ }
+ }
+ }
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/Makefile.am b/wmbiff/Makefile.am
new file mode 100644
index 0000000..56ec91c
--- /dev/null
+++ b/wmbiff/Makefile.am
@@ -0,0 +1,70 @@
+TESTS = test_wmbiff test_tlscomm
+noinst_PROGRAMS = test_wmbiff test_tlscomm
+bin_PROGRAMS = wmbiff
+wmbiff_SOURCES = wmbiff.c socket.c Pop3Client.c mboxClient.c \
+ maildirClient.c Imap4Client.c tlsComm.c tlsComm.h ShellClient.c \
+ passwordMgr.c passwordMgr.h charutil.c charutil.h Client.h \
+ regulo.c regulo.h MessageList.c MessageList.h
+EXTRA_wmbiff_SOURCES = gnutls-common.c gnutls-common.h
+wmbiff_LDADD = -L../wmgeneral -lwmgeneral @LIBGCRYPT_LIBS@ @GNUTLS_COMMON_O@
+wmbiff_DEPENDENCIES = ../wmgeneral/libwmgeneral.a Makefile @GNUTLS_COMMON_O@
+test_wmbiff_SOURCES = ShellClient.c charutil.c charutil.h Client.h \
+ test_wmbiff.c passwordMgr.c Imap4Client.c regulo.c Pop3Client.c \
+ tlsComm.c tlsComm.h socket.c
+test_tlscomm_SOURCES = test_tlscomm.c \
+ tlsComm.c tlsComm.h
+EXTRA_test_wmbiff_SOURCES = gnutls-common.c gnutls-common.h
+test_wmbiff_LDADD = @LIBGCRYPT_LIBS@
+man_MANS = wmbiff.1 wmbiffrc.5
+skindir = $(datadir)/wmbiff/skins
+skin_DATA = wmbiff-master-led.xpm wmbiff-master-contrast.xpm
+
+EXTRA_DIST = $(man_MANS) sample.wmbiffrc wmbiff-master-led.xpm
+
+MAINTAINERCLEANFILES = Makefile.in
+
+# CODING STYLE AND INDENTATION [2001-Mar-12]:
+#
+# There have been some problems with coding style in the past. Many people
+# contributed to wmbiff (thank you!), and the code got really messy. To help
+# resolve this, I used GNU indent with what I believe to be the most
+# widely-accepted coding style options (K&R style) with 4-space TAB indents
+# (because some of the code is highly nested) to clean up the code. Not
+# everyone may be happy with this, but has been determined to be necessary for
+# consistency and legibility.
+#
+# In other words, make sure you run "make clean" and "make indent", and do not
+# change the options on the indent command, before you submit patches against
+# wmbiff. This will make everyone's life easier.
+#
+# -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+indent:
+ indent -npro -kr -i4 -ts4 $(wmbiff_SOURCES) test_*.c || true
+
+# to perform surgery on a few changed files.
+.c.indent:
+ indent -npro -kr -i4 -ts4 $< || true
+
+dist-hook-local: indent config-h-check
+
+distclean-local:
+ -rm -f wmbiff-master-contrast.xpm wmbiff-master.xpm
+
+# remove colors, then substitute old colors, then repalletize
+# for some reason $< doesn't always work.
+wmbiff-master-contrast.xpm: wmbiff-master-led.xpm Makefile
+ egrep -v '^"[:%][[:space:]]c #' < wmbiff-master-led.xpm | \
+ sed -e 's/:/./g' -e 's/%/$$/g' -e 's/ 15 / 13 /' | \
+ sed -e 's/#\([0-9A-F]\{2\}\)[0-9A-F]\{2\}\([0-9A-F]\{2\}\)[0-9A-F]\{2\}\([0-9A-F]\{2\}\)[0-9A-F]\{2\}/#\1\2\3/'\
+ > $@ || rm $@
+
+# fail if there's a .c file that doesn't include config.h
+config-h-check:
+ ls *.c | sort > cfiles
+ grep -l config.h *.c | sort | diff - cfiles
+ rm cfiles
+
+# just a reminder of how to run valgrind to get decent output.
+valgrind:
+ valgrind --leak-check=yes ./wmbiff -exit
+
diff --git a/wmbiff/Makefile.in b/wmbiff/Makefile.in
new file mode 100644
index 0000000..774bed9
--- /dev/null
+++ b/wmbiff/Makefile.in
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+ at SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CVS2CL = @CVS2CL@
+DEFAULT_ASKPASS = @DEFAULT_ASKPASS@
+DEPDIR = @DEPDIR@
+GCRYPT_MAN_STATUS = @GCRYPT_MAN_STATUS@
+GNUTLS_COMMON_O = @GNUTLS_COMMON_O@
+GNUTLS_MAN_STATUS = @GNUTLS_MAN_STATUS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
+LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SKINDIR = @SKINDIR@
+STRIP = @STRIP@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+TESTS = test_wmbiff test_tlscomm
+noinst_PROGRAMS = test_wmbiff test_tlscomm
+bin_PROGRAMS = wmbiff
+wmbiff_SOURCES = wmbiff.c socket.c Pop3Client.c mboxClient.c \
+ maildirClient.c Imap4Client.c tlsComm.c tlsComm.h ShellClient.c \
+ passwordMgr.c passwordMgr.h charutil.c charutil.h Client.h \
+ regulo.c regulo.h MessageList.c MessageList.h
+
+EXTRA_wmbiff_SOURCES = gnutls-common.c gnutls-common.h
+wmbiff_LDADD = -L../wmgeneral -lwmgeneral @LIBGCRYPT_LIBS@ @GNUTLS_COMMON_O@
+wmbiff_DEPENDENCIES = ../wmgeneral/libwmgeneral.a Makefile @GNUTLS_COMMON_O@
+test_wmbiff_SOURCES = ShellClient.c charutil.c charutil.h Client.h \
+ test_wmbiff.c passwordMgr.c Imap4Client.c regulo.c Pop3Client.c \
+ tlsComm.c tlsComm.h socket.c
+
+test_tlscomm_SOURCES = test_tlscomm.c \
+ tlsComm.c tlsComm.h
+
+EXTRA_test_wmbiff_SOURCES = gnutls-common.c gnutls-common.h
+test_wmbiff_LDADD = @LIBGCRYPT_LIBS@
+man_MANS = wmbiff.1 wmbiffrc.5
+skindir = $(datadir)/wmbiff/skins
+skin_DATA = wmbiff-master-led.xpm wmbiff-master-contrast.xpm
+
+EXTRA_DIST = $(man_MANS) sample.wmbiffrc wmbiff-master-led.xpm
+
+MAINTAINERCLEANFILES = Makefile.in
+subdir = wmbiff
+mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = wmbiffrc.5
+bin_PROGRAMS = wmbiff$(EXEEXT)
+noinst_PROGRAMS = test_wmbiff$(EXEEXT) test_tlscomm$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+
+am_test_tlscomm_OBJECTS = test_tlscomm.$(OBJEXT) tlsComm.$(OBJEXT)
+test_tlscomm_OBJECTS = $(am_test_tlscomm_OBJECTS)
+test_tlscomm_LDADD = $(LDADD)
+test_tlscomm_DEPENDENCIES =
+test_tlscomm_LDFLAGS =
+am_test_wmbiff_OBJECTS = ShellClient.$(OBJEXT) charutil.$(OBJEXT) \
+ test_wmbiff.$(OBJEXT) passwordMgr.$(OBJEXT) \
+ Imap4Client.$(OBJEXT) regulo.$(OBJEXT) Pop3Client.$(OBJEXT) \
+ tlsComm.$(OBJEXT) socket.$(OBJEXT)
+test_wmbiff_OBJECTS = $(am_test_wmbiff_OBJECTS)
+test_wmbiff_DEPENDENCIES =
+test_wmbiff_LDFLAGS =
+am_wmbiff_OBJECTS = wmbiff.$(OBJEXT) socket.$(OBJEXT) \
+ Pop3Client.$(OBJEXT) mboxClient.$(OBJEXT) \
+ maildirClient.$(OBJEXT) Imap4Client.$(OBJEXT) tlsComm.$(OBJEXT) \
+ ShellClient.$(OBJEXT) passwordMgr.$(OBJEXT) charutil.$(OBJEXT) \
+ regulo.$(OBJEXT) MessageList.$(OBJEXT)
+wmbiff_OBJECTS = $(am_wmbiff_OBJECTS)
+wmbiff_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/Imap4Client.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/MessageList.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/Pop3Client.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/ShellClient.Po ./$(DEPDIR)/charutil.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/gnutls-common.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/maildirClient.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/mboxClient.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/passwordMgr.Po ./$(DEPDIR)/regulo.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/socket.Po ./$(DEPDIR)/test_tlscomm.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/test_wmbiff.Po ./$(DEPDIR)/tlsComm.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/wmbiff.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(test_tlscomm_SOURCES) $(test_wmbiff_SOURCES) \
+ $(EXTRA_test_wmbiff_SOURCES) $(wmbiff_SOURCES) \
+ $(EXTRA_wmbiff_SOURCES)
+
+NROFF = nroff
+MANS = $(man_MANS)
+DATA = $(skin_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in wmbiffrc.5.in
+SOURCES = $(test_tlscomm_SOURCES) $(test_wmbiff_SOURCES) $(EXTRA_test_wmbiff_SOURCES) $(wmbiff_SOURCES) $(EXTRA_wmbiff_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .indent .o .obj
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu wmbiff/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+wmbiffrc.5: $(top_builddir)/config.status wmbiffrc.5.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+ rm -f $(DESTDIR)$(bindir)/$$f; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+test_tlscomm$(EXEEXT): $(test_tlscomm_OBJECTS) $(test_tlscomm_DEPENDENCIES)
+ @rm -f test_tlscomm$(EXEEXT)
+ $(LINK) $(test_tlscomm_LDFLAGS) $(test_tlscomm_OBJECTS) $(test_tlscomm_LDADD) $(LIBS)
+test_wmbiff$(EXEEXT): $(test_wmbiff_OBJECTS) $(test_wmbiff_DEPENDENCIES)
+ @rm -f test_wmbiff$(EXEEXT)
+ $(LINK) $(test_wmbiff_LDFLAGS) $(test_wmbiff_OBJECTS) $(test_wmbiff_LDADD) $(LIBS)
+wmbiff$(EXEEXT): $(wmbiff_OBJECTS) $(wmbiff_DEPENDENCIES)
+ @rm -f wmbiff$(EXEEXT)
+ $(LINK) $(wmbiff_LDFLAGS) $(wmbiff_OBJECTS) $(wmbiff_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Imap4Client.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/MessageList.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Pop3Client.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ShellClient.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/charutil.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gnutls-common.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/maildirClient.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mboxClient.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/passwordMgr.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/regulo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/socket.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_tlscomm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_wmbiff.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tlsComm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmbiff.Po at am__quote@
+
+distclean-depend:
+ -rm -rf ./$(DEPDIR)
+
+.c.o:
+ at AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+man1dir = $(mandir)/man1
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(man1dir)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man1dir)/$$inst; \
+ done
+
+man5dir = $(mandir)/man5
+install-man5: $(man5_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(man5dir)
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 5*) ;; \
+ *) ext='5' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \
+ done
+uninstall-man5:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.5*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man5dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man5dir)/$$inst; \
+ done
+skinDATA_INSTALL = $(INSTALL_DATA)
+install-skinDATA: $(skin_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(skindir)
+ @list='$(skin_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(skinDATA_INSTALL) $$d$$p $(DESTDIR)$(skindir)/$$f"; \
+ $(skinDATA_INSTALL) $$d$$p $(DESTDIR)$(skindir)/$$f; \
+ done
+
+uninstall-skinDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(skin_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(skindir)/$$f"; \
+ rm -f $(DESTDIR)$(skindir)/$$f; \
+ done
+
+ETAGS = etags
+ETAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ 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`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ 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 \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @list='$(DISTFILES)'; for file in $$list; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS) $(DATA)
+
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) $(DESTDIR)$(skindir)
+
+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_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+ distclean-generic distclean-local distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man install-skinDATA
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1 install-man5
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man \
+ uninstall-skinDATA
+
+uninstall-man: uninstall-man1 uninstall-man5
+
+.PHONY: GTAGS all all-am check check-TESTS check-am clean \
+ clean-binPROGRAMS clean-generic clean-noinstPROGRAMS distclean \
+ distclean-compile distclean-depend distclean-generic \
+ distclean-local distclean-tags distdir dvi dvi-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-man1 install-man5 \
+ install-skinDATA install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic tags \
+ uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am \
+ uninstall-man uninstall-man1 uninstall-man5 uninstall-skinDATA
+
+
+# CODING STYLE AND INDENTATION [2001-Mar-12]:
+#
+# There have been some problems with coding style in the past. Many people
+# contributed to wmbiff (thank you!), and the code got really messy. To help
+# resolve this, I used GNU indent with what I believe to be the most
+# widely-accepted coding style options (K&R style) with 4-space TAB indents
+# (because some of the code is highly nested) to clean up the code. Not
+# everyone may be happy with this, but has been determined to be necessary for
+# consistency and legibility.
+#
+# In other words, make sure you run "make clean" and "make indent", and do not
+# change the options on the indent command, before you submit patches against
+# wmbiff. This will make everyone's life easier.
+#
+# -- Dwayne C. Litzenberger <dlitz at dlitz.net>
+indent:
+ indent -npro -kr -i4 -ts4 $(wmbiff_SOURCES) test_*.c || true
+
+# to perform surgery on a few changed files.
+.c.indent:
+ indent -npro -kr -i4 -ts4 $< || true
+
+dist-hook-local: indent config-h-check
+
+distclean-local:
+ -rm -f wmbiff-master-contrast.xpm wmbiff-master.xpm
+
+# remove colors, then substitute old colors, then repalletize
+# for some reason $< doesn't always work.
+wmbiff-master-contrast.xpm: wmbiff-master-led.xpm Makefile
+ egrep -v '^"[:%][[:space:]]c #' < wmbiff-master-led.xpm | \
+ sed -e 's/:/./g' -e 's/%/$$/g' -e 's/ 15 / 13 /' | \
+ sed -e 's/#\([0-9A-F]\{2\}\)[0-9A-F]\{2\}\([0-9A-F]\{2\}\)[0-9A-F]\{2\}\([0-9A-F]\{2\}\)[0-9A-F]\{2\}/#\1\2\3/'\
+ > $@ || rm $@
+
+# fail if there's a .c file that doesn't include config.h
+config-h-check:
+ ls *.c | sort > cfiles
+ grep -l config.h *.c | sort | diff - cfiles
+ rm cfiles
+
+# just a reminder of how to run valgrind to get decent output.
+valgrind:
+ valgrind --leak-check=yes ./wmbiff -exit
+# 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/wmbiff/MessageList.c b/wmbiff/MessageList.c
new file mode 100644
index 0000000..3cda108
--- /dev/null
+++ b/wmbiff/MessageList.c
@@ -0,0 +1,230 @@
+#include "Client.h"
+#include "MessageList.h"
+#include <X11/Xlib.h>
+#ifdef HAVE_X11_XPM_H
+#include <X11/xpm.h>
+#endif
+#ifdef HAVE_XPM_H
+#include <xpm.h>
+#endif
+#include <X11/Xutil.h> /* needed for Region on solaris? */
+#include <assert.h>
+
+#define LEFT_MAR 6
+#define RIGHT_MAR 6
+#define COL_SEP 4
+
+extern Display *display;
+extern Window Root;
+extern int screen;
+extern int x_fd;
+extern int d_depth;
+extern Window win;
+
+static XSizeHints mysizehints;
+extern Pixel back_pix, fore_pix;
+static Window newwin;
+static GC localGC;
+extern Pixel GetColor(const char *name);
+
+static XFontStruct *fn;
+static int fontHeight;
+extern const char *foreground;
+extern const char *background;
+
+Pop3 Active_pc;
+
+static int loadFont(const char *fontname)
+{
+ if (display != NULL) {
+ fn = XLoadQueryFont(display, fontname);
+ if (fn) {
+ XSetFont(display, localGC, fn->fid);
+ fontHeight =
+ fn->max_bounds.ascent + fn->max_bounds.descent + 2;
+ return 0;
+ } else {
+ printf("couldn't set font! (%s)\n", fontname);
+ }
+ }
+
+ return -1;
+}
+
+static int flush_expose(Window w)
+{
+ XEvent dummy;
+ int i = 0;
+
+ while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
+ i++;
+
+ return i;
+}
+
+struct msglst *Headers;
+void msglst_show(Pop3 pc, int x, int y)
+{
+ int maxfrm = 0;
+ int maxsubj = 0;
+ int limit = 10;
+ XGCValues gcv;
+ unsigned long gcm;
+
+ Active_pc = pc; /* hold so we can release later. */
+
+ /* local gc */
+ gcm = GCForeground | GCBackground | GCGraphicsExposures;
+ gcv.foreground = GetColor(foreground);
+ gcv.background = GetColor(background);
+ gcv.graphics_exposures = 0;
+ localGC = XCreateGC(display, Root, gcm, &gcv);
+
+ if (fn == NULL) {
+ /* loadFont? or use a proportional instead? mmm. */
+ if (loadFont("-*-fixed-*-r-*-*-10-*-*-*-*-*-*-*") < 0) {
+ return;
+ }
+ }
+ if (pc->getHeaders == NULL) {
+ DM(pc, DEBUG_INFO, "no getHeaders callback\n");
+ return;
+ }
+ Headers = pc->getHeaders(pc);
+ if (Headers == NULL) {
+#define NO_MSG "no new messages"
+ mysizehints.height = 5 + fontHeight;
+ mysizehints.width = XTextWidth(fn, NO_MSG, strlen(NO_MSG));
+ DM(pc, DEBUG_INFO, "no new messages\n");
+ } else {
+ struct msglst *h;
+ mysizehints.height = 5;
+ for (h = Headers; h != NULL && limit > 0; h = h->next, limit--) {
+ int frmlen;
+ char *c;
+ int subjlen;
+
+ if ((c = index(h->from, '\r')) != NULL) {
+ *c = '\0'; /* chomp newlines */
+ }
+ if ((c = index(h->subj, '\r')) != NULL) {
+ *c = '\0'; /* chomp newlines */
+ }
+
+ if ((c = index(h->from, '<')) != NULL) {
+ *c = '\0'; /* chomp <foo at bar */
+ }
+ if (h->from[0] == '"') { /* remove "'s */
+ for (c = &h->from[1]; *c && *c != '"'; c++) {
+ *(c - 1) = *c;
+ }
+ *(c - 1) = '\0';
+ }
+
+
+ subjlen = XTextWidth(fn, h->subj, strlen(h->subj));
+ frmlen = XTextWidth(fn, h->from, strlen(h->from));
+ if (frmlen > maxfrm) {
+ maxfrm = frmlen;
+ }
+ if (subjlen > maxsubj) {
+ maxsubj = subjlen;
+ }
+ mysizehints.height += fontHeight;
+ }
+ mysizehints.width =
+ maxfrm + maxsubj + LEFT_MAR + RIGHT_MAR + COL_SEP;
+ }
+
+ /* Create a window to hold the stuff */
+ mysizehints.flags = USSize | USPosition;
+ mysizehints.x = max(x - mysizehints.width, 0);
+ mysizehints.y = max(y - mysizehints.height, 0);
+
+ newwin =
+ XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
+ mysizehints.width, mysizehints.height, 2,
+ gcv.foreground, gcv.background);
+ XSetWMNormalHints(display, newwin, &mysizehints);
+ XStoreName(display, newwin, pc->label);
+ XSelectInput(display, newwin, ExposureMask);
+
+ { /* I confess I don't know what this does or whether it matters */
+ XSetWindowAttributes xswa;
+ xswa.backing_store = Always;
+ xswa.bit_gravity = CenterGravity;
+ XChangeWindowAttributes(display, newwin,
+ CWBackingStore | CWBitGravity, &xswa);
+ }
+
+ XMapWindow(display, newwin);
+}
+
+/* may be called without the window open */
+void msglst_hide(void)
+{
+ if (newwin) {
+ flush_expose(newwin); /* swallow the messages */
+ XDestroyWindow(display, newwin);
+ // } else {
+ // no window fprintf(stderr, "unexpected error destroying msglist window\n");
+ if (Active_pc->releaseHeaders != NULL && Headers != NULL) {
+ Active_pc->releaseHeaders(Active_pc, Headers);
+ }
+ newwin = 0;
+ }
+}
+
+void msglst_redraw(void)
+{
+ XEvent dummy;
+ unsigned int width, height;
+ unsigned int bw, d;
+ int x, y;
+ Window r;
+
+ if (newwin == 0) {
+ return;
+ }
+
+ while (XCheckTypedWindowEvent(display, newwin, Expose, &dummy));
+ XGetGeometry(display, newwin, &r, &x, &y, &width, &height, &bw, &d);
+
+ XSetForeground(display, localGC, GetColor(background));
+ XFillRectangle(display, newwin, localGC, 0, 0, width, height);
+
+ XSetForeground(display, localGC, GetColor(foreground));
+ XSetBackground(display, localGC, GetColor(background));
+
+ if (Headers == NULL) {
+ XDrawString(display, newwin, localGC, 0, fontHeight,
+ NO_MSG, strlen(NO_MSG));
+ flush_expose(newwin);
+ } else {
+ int linenum;
+ struct msglst *h;
+ int limit = 10;
+ int maxfrm = 0;
+
+ /* draw the from lines */
+ for (h = Headers, linenum = 0; h != NULL && linenum < limit;
+ h = h->next, linenum++) {
+ int frm = XTextWidth(fn, h->from, strlen(h->from));
+ if (frm > maxfrm) {
+ maxfrm = frm;
+ }
+ XDrawString(display, newwin, localGC, LEFT_MAR,
+ (linenum + 1) * fontHeight, h->from,
+ strlen(h->from));
+ }
+
+ /* draw the subject lines */
+ for (h = Headers, linenum = 0; h != NULL && linenum < limit;
+ h = h->next, linenum++) {
+ XDrawString(display, newwin, localGC,
+ LEFT_MAR + maxfrm + COL_SEP,
+ (linenum + 1) * fontHeight, h->subj,
+ strlen(h->subj));
+ }
+ }
+}
diff --git a/wmbiff/MessageList.h b/wmbiff/MessageList.h
new file mode 100644
index 0000000..1889615
--- /dev/null
+++ b/wmbiff/MessageList.h
@@ -0,0 +1,13 @@
+
+#define SUBJ_LEN 50
+#define FROM_LEN 22
+struct msglst {
+ struct msglst *next;
+ char subj[SUBJ_LEN];
+ char from[FROM_LEN];
+ unsigned int in_use:1;
+};
+
+void msglst_show(Pop3 pc, int x, int y);
+void msglst_hide(void);
+void msglst_redraw(void);
diff --git a/wmbiff/Pop3Client.c b/wmbiff/Pop3Client.c
new file mode 100644
index 0000000..2cd350f
--- /dev/null
+++ b/wmbiff/Pop3Client.c
@@ -0,0 +1,540 @@
+/* $Id: Pop3Client.c,v 1.23 2004/12/12 00:01:53 bluehal Exp $ */
+/* Author : Scott Holden ( scotth at thezone.net )
+ Modified : Yong-iL Joh ( tolkien at mizi.com )
+ Modified : Jorge Garc�a ( Jorge.Garcia at uv.es )
+ Modified ; Mark Hurley ( debian4tux at telocity.com )
+ Modified : Neil Spring ( nspring at cs.washington.edu )
+ *
+ * Pop3 Email checker.
+ *
+ * Last Updated : Tue Nov 13 13:45:23 PST 2001
+ *
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Client.h"
+#include "charutil.h"
+#include "regulo.h"
+#include "MessageList.h"
+#include <strings.h>
+#include "tlsComm.h"
+#include "passwordMgr.h"
+
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+extern int Relax;
+/* temp */
+static void ask_user_for_password( /*@notnull@ */ Pop3 pc, int bFlushCache);
+
+#define PCU (pc->u).pop_imap
+#define POP_DM(pc, lvl, args...) DM(pc, lvl, "pop3: " args)
+
+#ifdef HAVE_GCRYPT_H
+static struct connection_state *authenticate_md5( /*@notnull@ */ Pop3 pc, struct connection_state * scs,
+ char *unused);
+static struct connection_state *authenticate_apop( /*@notnull@ */ Pop3 pc, struct connection_state * scs,
+ char *apop_str);
+#endif
+static struct connection_state *authenticate_plaintext( /*@notnull@ */ Pop3 pc, struct connection_state * scs,
+ char *unused);
+
+void pop3_cacheHeaders( /*@notnull@ */ Pop3 pc);
+
+extern void imap_releaseHeaders(Pop3 pc
+ __attribute__ ((unused)),
+ struct msglst *h);
+
+extern struct connection_state *state_for_pcu(Pop3 pc);
+
+static struct authentication_method {
+ const char *name;
+ /* callback returns the connection state pointer if successful,
+ NULL if failed */
+ struct connection_state *(*auth_callback) (Pop3 pc, struct connection_state * scs, char *apop_str);
+} auth_methods[] = {
+ {
+#ifdef HAVE_GCRYPT_H
+ "cram-md5", authenticate_md5}, {
+ "apop", authenticate_apop}, {
+#endif
+ "plaintext", authenticate_plaintext}, {
+ NULL, NULL}
+};
+
+/*@null@*/
+struct connection_state *pop3Login(Pop3 pc)
+{
+ int fd;
+ char buf[BUF_SIZE];
+ char apop_str[BUF_SIZE];
+ char *ptr1, *ptr2;
+ struct authentication_method *a;
+ struct connection_state *scs;
+ char *connection_name;
+
+
+ apop_str[0] = '\0'; /* if defined, server supports apop */
+
+ if ((fd = sock_connect(PCU.serverName, PCU.serverPort)) == -1) {
+ POP_DM(pc, DEBUG_ERROR, "Not Connected To Server '%s:%d'\n",
+ PCU.serverName, PCU.serverPort);
+ return NULL;
+ }
+
+ connection_name = malloc(strlen(PCU.serverName) + 20);
+ sprintf(connection_name, "%s:%d", PCU.serverName, PCU.serverPort);
+
+ if (PCU.dossl != 0) {
+ scs = initialize_gnutls(fd, connection_name, pc, PCU.serverName);
+ if (scs == NULL) {
+ POP_DM(pc, DEBUG_ERROR, "Failed to initialize TLS\n");
+ return NULL;
+ }
+ } else {
+ scs = initialize_unencrypted(fd, connection_name, pc);
+ }
+
+ tlscomm_gets(buf, BUF_SIZE, scs);
+ POP_DM(pc, DEBUG_INFO, "%s", buf);
+
+ /* Detect APOP, copy challenge into apop_str */
+ for (ptr1 = buf + strlen(buf), ptr2 = NULL; ptr1 > buf; --ptr1) {
+ if (*ptr1 == '>') {
+ ptr2 = ptr1;
+ } else if (*ptr1 == '<') {
+ if (ptr2) {
+ *(ptr2 + 1) = 0;
+ strncpy(apop_str, ptr1, BUF_SIZE);
+ }
+ break;
+ }
+ }
+
+
+ /* try each authentication method in turn. */
+ for (a = auth_methods; a->name != NULL; a++) {
+ /* was it specified or did the user leave it up to us? */
+ if (PCU.authList[0] == '\0' || strstr(PCU.authList, a->name))
+ /* did it work? */
+ if ((a->auth_callback(pc, scs, apop_str)) != NULL)
+ return (scs);
+ }
+
+ /* if authentication worked, we won't get here */
+ POP_DM(pc, DEBUG_ERROR,
+ "All Pop3 authentication methods failed for '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ tlscomm_printf(scs, "QUIT\r\n");
+ tlscomm_close(scs);
+
+ return NULL;
+}
+
+int pop3CheckMail( /*@notnull@ */ Pop3 pc)
+{
+ struct connection_state *scs;
+ int read;
+ char buf[BUF_SIZE];
+
+ scs = pop3Login(pc);
+ if (scs == NULL)
+ return -1;
+
+ tlscomm_printf(scs, "STAT\r\n");
+ if( ! tlscomm_expect(scs, "+", buf, BUF_SIZE) ) {
+ POP_DM(pc, DEBUG_ERROR,
+ "Error Receiving Stats '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ POP_DM(pc, DEBUG_INFO, "It said: %s\n", buf);
+ return -1;
+ } else {
+ sscanf(buf, "+OK %d", &(pc->TotalMsgs));
+ }
+
+ /* - Updated - Mark Hurley - debian4tux at telocity.com
+ * In compliance with RFC 1725
+ * which removed the LAST command, any servers
+ * which follow this spec will return:
+ * -ERR unimplimented
+ * We will leave it here for those servers which haven't
+ * caught up with the spec.
+ */
+ tlscomm_printf(scs, "LAST\r\n");
+ tlscomm_gets(buf, BUF_SIZE, scs);
+ if (buf[0] != '+') {
+ /* it is not an error to receive this according to RFC 1725 */
+ /* no error should be returned */
+ pc->UnreadMsgs = pc->TotalMsgs;
+ // there's also a LIST command... not sure how to make use of it. */
+ } else {
+ sscanf(buf, "+OK %d", &read);
+ pc->UnreadMsgs = pc->TotalMsgs - read;
+ }
+
+ tlscomm_printf(scs, "QUIT\r\n");
+ tlscomm_close(scs);
+
+ return 0;
+}
+
+
+struct msglst *pop_getHeaders( /*@notnull@ */ Pop3 pc)
+{
+ if (pc->headerCache == NULL)
+ pop3_cacheHeaders(pc);
+ if (pc->headerCache != NULL)
+ pc->headerCache->in_use = 1;
+ return pc->headerCache;
+}
+
+
+
+int pop3Create(Pop3 pc, const char *str)
+{
+ /* POP3 format: pop3:user:password at server[:port] */
+ /* new POP3 format: pop3:user password server [port] */
+ /* If 'str' line is badly formatted, wmbiff won't display the mailbox. */
+ int i;
+ int matchedchars;
+ /* ([^: ]+) user
+ ([^@]+) or ([^ ]+) password
+ ([^: ]+) server
+ ([: ][0-9]+)? optional port
+ ' *' gobbles trailing whitespace before authentication types.
+ use separate regexes for old and new types to permit
+ use of '@' in passwords
+ */
+ const char *regexes[] = {
+ "pop3s?:([^: ]{1,32}):([^@]{0,32})@([A-Za-z1-9][-A-Za-z0-9_.]+)(:[0-9]+)?( *([CcAaPp][-A-Za-z5 ]*))?$",
+ "pop3s?:([^: ]{1,32}) ([^ ]{1,32}) ([A-Za-z1-9][-A-Za-z0-9_.]+)( [0-9]+)?( *([CcAaPp][-A-Za-z5 ]*))?$",
+ // "pop3:([^: ]{1,32}) ([^ ]{1,32}) ([^: ]+)( [0-9]+)? *",
+ // "pop3:([^: ]{1,32}):([^@]{0,32})@([^: ]+)(:[0-9]+)? *",
+ NULL
+ };
+ struct regulo regulos[] = {
+ {1, PCU.userName, regulo_strcpy},
+ {2, PCU.password, regulo_strcpy},
+ {3, PCU.serverName, regulo_strcpy},
+ {4, &PCU.serverPort, regulo_atoi},
+ {6, PCU.authList, regulo_strcpy_tolower},
+ {0, NULL, NULL}
+ };
+
+ if (Relax) {
+ regexes[0] =
+ "pop3:([^: ]{1,32}):([^@]{0,32})@([^/: ]+)(:[0-9]+)?( *(.*))?$";
+ regexes[1] =
+ "pop3:([^: ]{1,32}) ([^ ]{1,32}) ([^/: ]+)( [0-9]+)?( *(.*))?$";
+ }
+
+ if (strncmp("pop3s:", str, 6) == 0) {
+#ifdef HAVE_GNUTLS_GNUTLS_H
+ static int haveBeenWarned;
+ PCU.dossl = 1;
+ if (!haveBeenWarned) {
+ printf("wmbiff uses gnutls for TLS/SSL encryption support:\n"
+ " If you distribute software that uses gnutls, don't forget\n"
+ " to warn the users of your software that gnutls is at a\n"
+ " testing phase and may be totally insecure.\n"
+ "\nConsider yourself warned.\n");
+ haveBeenWarned = 1;
+ }
+#else
+ printf("This copy of wmbiff was not compiled with gnutls;\n"
+ "imaps is unavailable. Exiting to protect your\n"
+ "passwords and privacy.\n");
+ exit(EXIT_FAILURE);
+#endif
+ } else {
+ PCU.dossl = 0;
+ }
+
+
+ /* defaults */
+ PCU.serverPort = (PCU.dossl != 0) ? 995 : 110;
+ PCU.authList[0] = '\0';
+
+ for (matchedchars = 0, i = 0;
+ regexes[i] != NULL && matchedchars <= 0; i++) {
+ matchedchars = regulo_match(regexes[i], str, regulos);
+ }
+
+ /* failed to match either regex */
+ if (matchedchars <= 0) {
+ pc->label[0] = '\0';
+ POP_DM(pc, DEBUG_ERROR, "Couldn't parse line %s (%d)\n"
+ " If this used to work, run wmbiff with the -relax option, and\n "
+ " send mail to wmbiff-devel at lists.sourceforge.net with the hostname\n"
+ " of your mail server.\n", str, matchedchars);
+ return -1;
+ }
+ // grab_authList(str + matchedchars, PCU.authList);
+
+ PCU.password_len = strlen(PCU.password);
+ if (PCU.password[0] == '\0') {
+ PCU.interactive_password = 1;
+ } else {
+ // ENFROB(PCU.password);
+ }
+
+ POP_DM(pc, DEBUG_INFO, "userName= '%s'\n", PCU.userName);
+ POP_DM(pc, DEBUG_INFO, "password is %ld chars long\n",
+ strlen(PCU.password));
+ POP_DM(pc, DEBUG_INFO, "serverName= '%s'\n", PCU.serverName);
+ POP_DM(pc, DEBUG_INFO, "serverPort= '%d'\n", PCU.serverPort);
+ POP_DM(pc, DEBUG_INFO, "authList= '%s'\n", PCU.authList);
+
+ pc->checkMail = pop3CheckMail;
+ pc->getHeaders = pop_getHeaders;
+ pc->TotalMsgs = 0;
+ pc->UnreadMsgs = 0;
+ pc->OldMsgs = -1;
+ pc->OldUnreadMsgs = -1;
+
+ return 0;
+}
+
+
+#ifdef HAVE_GCRYPT_H
+static struct connection_state *authenticate_md5(Pop3 pc, struct connection_state * scs, char *apop_str
+ __attribute__ ((unused)))
+{
+ char buf[BUF_SIZE];
+ char buf2[BUF_SIZE];
+ unsigned char *md5;
+ gcry_md_hd_t gmh;
+ gcry_error_t rc;
+
+ /* See if MD5 is supported */
+ tlscomm_printf(scs, "AUTH CRAM-MD5\r\n");
+ tlscomm_gets(buf, BUF_SIZE, scs);
+ POP_DM(pc, DEBUG_INFO, "%s", buf);
+
+ if (buf[0] != '+' || buf[1] != ' ') {
+ /* nope, not supported. */
+ return NULL;
+ }
+
+ Decode_Base64(buf + 2, buf2);
+ POP_DM(pc, DEBUG_INFO, "CRAM-MD5 challenge: %s\n", buf2);
+
+ strcpy(buf, PCU.userName);
+ strcat(buf, " ");
+
+
+ rc = gcry_md_open(&gmh, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC);
+ if (rc != 0) {
+ POP_DM(pc, DEBUG_ERROR, "unable to initialize gcrypt md5.\n");
+ return NULL;
+ }
+ gcry_md_setkey(gmh, PCU.password, strlen(PCU.password));
+ gcry_md_write(gmh, (unsigned char *) buf2, strlen(buf2));
+ gcry_md_final(gmh);
+ md5 = gcry_md_read(gmh, 0);
+ /* hmac_md5(buf2, strlen(buf2), PCU.password,
+ strlen(PCU.password), md5); */
+ Bin2Hex(md5, 16, buf2);
+ gcry_md_close(gmh);
+
+ strcat(buf, buf2);
+ POP_DM(pc, DEBUG_INFO, "CRAM-MD5 response: %s\n", buf);
+ Encode_Base64(buf, buf2);
+
+ tlscomm_printf(scs, "%s\r\n", buf2);
+ tlscomm_gets(buf, BUF_SIZE, scs);
+
+ if (!strncmp(buf, "+OK", 3))
+ return scs; /* AUTH successful */
+ else {
+ POP_DM(pc, DEBUG_ERROR,
+ "CRAM-MD5 AUTH failed for user '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ fprintf(stderr, "It said %s", buf);
+ return NULL;
+ }
+}
+
+static struct connection_state *authenticate_apop(Pop3 pc, struct connection_state * scs, char *apop_str)
+{
+ gcry_md_hd_t gmh;
+ gcry_error_t rc;
+ char buf[BUF_SIZE];
+ unsigned char *md5;
+
+
+ if (apop_str[0] == '\0') {
+ /* server doesn't support apop. */
+ return (NULL);
+ }
+ POP_DM(pc, DEBUG_INFO, "APOP challenge: %s\n", apop_str);
+ strcat(apop_str, PCU.password);
+
+ rc = gcry_md_open(&gmh, GCRY_MD_MD5, 0);
+ if (rc != 0) {
+ POP_DM(pc, DEBUG_ERROR, "unable to initialize gcrypt md5.\n");
+ return NULL;
+ }
+ gcry_md_write(gmh, (unsigned char *) apop_str, strlen(apop_str));
+ gcry_md_final(gmh);
+ md5 = gcry_md_read(gmh, 0);
+ Bin2Hex(md5, 16, buf);
+ gcry_md_close(gmh);
+
+ POP_DM(pc, DEBUG_INFO, "APOP response: %s %s\n", PCU.userName, buf);
+ tlscomm_printf(scs, "APOP %s %s\r\n", PCU.userName, buf);
+ tlscomm_gets(buf, BUF_SIZE, scs);
+
+ if (!strncmp(buf, "+OK", 3))
+ return scs; /* AUTH successful */
+ else {
+ POP_DM(pc, DEBUG_ERROR,
+ "APOP AUTH failed for user '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ POP_DM(pc, DEBUG_INFO, "It said %s", buf);
+ return NULL;
+ }
+}
+#endif /* HAVE_GCRYPT_H */
+
+/*@null@*/
+static struct connection_state *authenticate_plaintext( /*@notnull@ */ Pop3 pc,
+ struct connection_state * scs, char *apop_str
+ __attribute__ ((unused)))
+{
+ char buf[BUF_SIZE];
+
+ tlscomm_printf(scs, "USER %s\r\n", PCU.userName);
+ if (tlscomm_gets(buf, BUF_SIZE, scs) == NULL) {
+ POP_DM(pc, DEBUG_ERROR,
+ "Error reading from server authenticating '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ return NULL;
+ }
+ if (buf[0] != '+') {
+ POP_DM(pc, DEBUG_ERROR,
+ "Failed user name when authenticating '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ /* deb #128863 might be easier if we printed: */
+ POP_DM(pc, DEBUG_ERROR, "The server's error message was: %s\n",
+ buf);
+ return NULL;
+ };
+
+
+ tlscomm_printf(scs, "PASS %s\r\n", PCU.password);
+ if (tlscomm_gets(buf, BUF_SIZE, scs) == NULL) {
+ POP_DM(pc, DEBUG_ERROR,
+ "Error reading from server (2) authenticating '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ return NULL;
+ }
+ if (strncmp(buf, "-ERR [AUTH] Password required", 20) == 0) {
+ if (PCU.interactive_password) {
+ PCU.password[0] = '\0';
+ ask_user_for_password(pc, 1); /* 1=overwrite the cache */
+ tlscomm_printf(scs, "PASS %s\r\n", PCU.password);
+ if (tlscomm_gets(buf, BUF_SIZE, scs) == NULL) {
+ POP_DM(pc, DEBUG_ERROR,
+ "Error reading from server (2) authenticating '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ return NULL;
+ }
+ }
+ }
+ if (buf[0] != '+') {
+ POP_DM(pc, DEBUG_ERROR,
+ "Failed password when authenticating '%s@%s:%d'\n",
+ PCU.userName, PCU.serverName, PCU.serverPort);
+ POP_DM(pc, DEBUG_ERROR, "The server's error message was: %s\n",
+ buf);
+ return NULL;
+ };
+
+ return scs;
+}
+
+void pop3_cacheHeaders( /*@notnull@ */ Pop3 pc)
+{
+ char buf[BUF_SIZE];
+ struct connection_state *scs;
+ int i;
+
+ if (pc->headerCache != NULL) {
+ /* decrement the reference count, and free our version */
+ imap_releaseHeaders(pc, pc->headerCache);
+ pc->headerCache = NULL;
+ }
+
+ POP_DM(pc, DEBUG_INFO, "working headers\n");
+ /* login the server */
+ scs = pop3Login(pc);
+ if (scs == NULL)
+ return;
+ /* pc->UnreadMsgs = pc->TotalMsgs - read; */
+ pc->headerCache = NULL;
+ for (i = pc->TotalMsgs - pc->UnreadMsgs + 1; i <= pc->TotalMsgs; ++i) {
+ struct msglst *m;
+ m = malloc(sizeof(struct msglst));
+
+ m->subj[0] = '\0';
+ m->from[0] = '\0';
+ POP_DM(pc, DEBUG_INFO, "search: %s", buf);
+
+ tlscomm_printf(scs, "TOP %i 0\r\n", i);
+ while (tlscomm_gets(buf, 256, scs) && buf[0] != '.') {
+ if (!strncasecmp(buf, "From: ", 6)) {
+ /* manage the from in heads */
+ strncpy(m->from, buf + 6, FROM_LEN - 1);
+ m->from[FROM_LEN - 1] = '\0';
+ } else if (!strncasecmp(buf, "Subject: ", 9)) {
+ /* manage subject */
+ strncpy(m->subj, buf + 9, SUBJ_LEN - 1);
+ m->subj[SUBJ_LEN - 1] = '\0';
+ }
+ if (!m->subj[0]) {
+ strncpy(m->subj, "[NO SUBJECT]", 14);
+ }
+ if (!m->from[0]) {
+ strncpy(m->from, "[ANONYMOUS]", 14);
+ }
+ }
+ m->next = pc->headerCache;
+ pc->headerCache = m;
+ pc->headerCache->in_use = 0;
+ }
+ tlscomm_printf(scs, "QUIT\r\n");
+ tlscomm_close(scs);
+}
+
+/* vim:set ts=4: */
+static void ask_user_for_password( /*@notnull@ */ Pop3 pc, int bFlushCache)
+{
+ /* see if we already have a password, as provided in the config file, or
+ already requested from the user. */
+ if (PCU.interactive_password) {
+ if (strlen(PCU.password) == 0) {
+ /* we need to grab the password from the user. */
+ char *password;
+ POP_DM(pc, DEBUG_INFO, "asking for password %d\n",
+ bFlushCache);
+ password =
+ passwordFor(PCU.userName, PCU.serverName, pc, bFlushCache);
+ if (password != NULL) {
+ if (strlen(password) + 1 > BUF_SMALL) {
+ DMA(DEBUG_ERROR, "Password is too long.\n");
+ memset(PCU.password, 0, BUF_SMALL - 1);
+ } else {
+ strncpy(PCU.password, password, BUF_SMALL - 1);
+ PCU.password_len = strlen(PCU.password);
+ }
+ free(password);
+ // ENFROB(PCU.password);
+ }
+ }
+ }
+}
+
diff --git a/wmbiff/ShellClient.c b/wmbiff/ShellClient.c
new file mode 100644
index 0000000..5543832
--- /dev/null
+++ b/wmbiff/ShellClient.c
@@ -0,0 +1,312 @@
+/* Author: Beno�t Rouits ( brouits at free.fr ) thanks to Neil Spring.
+ from LicqClient by Yong-iL Joh ( tolkien at mizi.com )
+ and Jorge Garc�a ( Jorge.Garcia at uv.es )
+ *
+ * generic Shell command support
+ *
+ * Last Updated : Tue Mar 5 15:23:35 CET 2002
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Client.h"
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <signal.h>
+#include <assert.h>
+#include <strings.h>
+#include "charutil.h"
+#include "MessageList.h"
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#define SH_DM(pc, lvl, args...) DM(pc, lvl, "shell: " args)
+
+/* kind_popen bumps off the sigchld handler - we care whether
+ a checking program fails. */
+
+#ifdef __LCLINT__
+void (*old_signal_handler) (int);
+#else
+RETSIGTYPE(*old_signal_handler) (int);
+#endif
+
+/*@null@*/
+FILE *kind_popen(const char *command, const char *type)
+{
+ FILE *ret;
+ assert(strcmp(type, "r") == 0);
+ assert(old_signal_handler == NULL);
+ old_signal_handler = signal(SIGCHLD, SIG_DFL);
+ ret = popen(command, type);
+ if (ret == NULL) {
+ DMA(DEBUG_ERROR, "popen: error while reading '%s': %s\n",
+ command, strerror(errno));
+ (void) signal(SIGCHLD, old_signal_handler);
+ old_signal_handler = NULL;
+ }
+ return (ret);
+}
+
+/* kind_pclose checks the return value from pclose and prints
+ some nice error messages about it. ordinarily, this would be
+ a good idea, but wmbiff has a sigchld handler that reaps
+ children immediately (needed when spawning other child processes),
+ so no error checking can be done here until that's disabled */
+
+/* returns as a mailcheck function does: -1 on fail, 0 on success */
+static int kind_pclose( /*@only@ */ FILE * F,
+ const char *command,
+ /*@null@ */ Pop3 pc)
+{
+ int exit_status = pclose(F);
+
+ if (old_signal_handler != NULL) {
+ (void) signal(SIGCHLD, old_signal_handler);
+ old_signal_handler = NULL;
+ }
+
+ if (exit_status != 0) {
+ if (exit_status == -1) {
+ /* wmbiff has a sigchld handler already, so wait is likely
+ to fail */
+ SH_DM(pc, DEBUG_ERROR, "pclose '%s' failed: %s\n",
+ command, strerror(errno));
+ } else {
+ SH_DM(pc, DEBUG_ERROR,
+ "'%s' exited with non-zero status %d\n", command,
+ exit_status);
+ }
+ }
+ return (exit_status);
+}
+
+int grabCommandOutput(Pop3 pc, const char *command, /*@out@ */
+ char **output, /*@out@ *//*@null@ */ char **details)
+{
+ FILE *F;
+ char linebuf[512];
+ SH_DM(pc, DEBUG_INFO, "Executing '%s'\n", command);
+ *output = NULL;
+ if ((F = kind_popen(command, "r")) == NULL) {
+ return -1;
+ }
+ if (fgets(linebuf, 512, F) == NULL) {
+ SH_DM(pc, DEBUG_ERROR,
+ "fgets: unable to read the output of '%s': %s\n", command,
+ strerror(errno));
+ } else {
+ chomp(linebuf); /* remove trailing newline */
+ *output = strdup_ordie(linebuf);
+ }
+ if (details) {
+ static char allbuf[4096];
+ allbuf[0] = '\0';
+ if (fread(allbuf, 1, 4095, F) == 0 && !feof(F)) {
+ SH_DM(pc, DEBUG_ERROR,
+ "fread: unable to read the detailed output of '%s': %s\n",
+ command, strerror(errno));
+ }
+ allbuf[4095] = '\0';
+ *details = strdup_ordie(allbuf);
+ }
+ return (kind_pclose(F, command, pc));
+}
+
+/* returns null on failure */
+/*@null@*/
+char *backtickExpand(Pop3 pc, const char *path)
+{
+ char bigbuffer[1024];
+ const char *tickstart;
+ const char *tickend;
+ bigbuffer[0] = '\0';
+ while ((tickstart = strchr(path, '`')) != NULL) {
+ char *command;
+ char *commandoutput;
+ tickend = strchr(tickstart + 1, '`');
+ if (tickend == NULL) {
+ SH_DM(pc, DEBUG_ERROR, "unbalanced \' in %s\n", path);
+ return NULL;
+ }
+ strncat(bigbuffer, path, tickstart - path);
+ command = strdup_ordie(tickstart + 1);
+ command[tickend - tickstart - 1] = '\0';
+ (void) grabCommandOutput(pc, command, &commandoutput, NULL);
+ free(command);
+ if (commandoutput != NULL) {
+ strcat(bigbuffer, commandoutput);
+ free(commandoutput);
+ }
+ path = tickend + 1;
+ }
+ /* grab the rest */
+ strcat(bigbuffer, path);
+ SH_DM(pc, DEBUG_INFO, "expanded to %s\n", bigbuffer);
+ return (strdup_ordie(bigbuffer));
+}
+
+int shellCmdCheck(Pop3 pc)
+{
+ int count_status = 0;
+ char *commandOutput;
+
+ if (pc == NULL)
+ return -1;
+ SH_DM(pc, DEBUG_INFO, ">Mailbox: '%s'\n", pc->path);
+
+ /* fetch the first line of input */
+ pc->TextStatus[0] = '\0';
+ if (pc->u.shell.detail != NULL) {
+ free(pc->u.shell.detail);
+ pc->u.shell.detail = NULL;
+ }
+ (void) grabCommandOutput(pc, pc->path, &commandOutput,
+ &pc->u.shell.detail);
+ if (commandOutput == NULL) {
+ return -1;
+ }
+ SH_DM(pc, DEBUG_INFO, "'%s' returned '%s'\n", pc->path, commandOutput);
+
+ /* see if it's numeric; the numeric check is somewhat
+ useful, as wmbiff renders 4-digit numbers, but not
+ 4-character strings. */
+ if (sscanf(commandOutput, "%d", &(count_status)) == 1) {
+ if (strstr(commandOutput, "new")) {
+ pc->UnreadMsgs = count_status;
+ pc->TotalMsgs = 0;
+ } else if (strstr(commandOutput, "old")) {
+ pc->UnreadMsgs = 0;
+ pc->TotalMsgs = count_status;
+ } else {
+ /* this default should be configurable. */
+ pc->UnreadMsgs = 0;
+ pc->TotalMsgs = count_status;
+ }
+ } else if (strcasestr(commandOutput, "unable")) {
+ return -1;
+ } else if (sscanf(commandOutput, "%9s\n", pc->TextStatus) == 1) {
+ /* validate the string input */
+ int i;
+ for (i = 0; pc->TextStatus[i] != '\0' && isalnum(pc->TextStatus[i])
+ && i < 10; i++);
+ if (pc->TextStatus[i] != '\0') {
+ SH_DM(pc, DEBUG_ERROR,
+ "wmbiff only supports alphanumeric (isalnum) strings:\n"
+ " '%s' is not ok\n", pc->TextStatus);
+ /* null terminate it at the first bad char: */
+ pc->TextStatus[i] = '\0';
+ }
+ /* see if we should print as new or not */
+ pc->UnreadMsgs = (strstr(commandOutput, "new")) ? 1 : 0;
+ pc->TotalMsgs = -1; /* we might alternat numeric /string */
+ } else {
+ SH_DM(pc, DEBUG_ERROR,
+ "'%s' returned something other than an integer message count"
+ " or short string.\n", pc->path);
+ free(commandOutput);
+ return -1;
+ }
+
+ SH_DM(pc, DEBUG_INFO, "from: %s status: %s %d %d\n",
+ pc->path, pc->TextStatus, pc->TotalMsgs, pc->UnreadMsgs);
+ free(commandOutput);
+ return (0);
+}
+
+struct msglst *shell_getHeaders( /*@notnull@ */ Pop3 pc)
+{
+ struct msglst *message_list = NULL;
+
+ char *ln = pc->u.shell.detail;
+ int i, j;
+ if (ln == NULL)
+ return NULL;
+
+ for (j = 0; ln[j] != '\0';) {
+ struct msglst *m = malloc(sizeof(struct msglst));
+ m->next = message_list;
+ m->subj[0] = '\0';
+ m->from[0] = '\0';
+
+ for (i = 0; i < SUBJ_LEN - 1 && ln[j + i] != '\n'; i++) {
+ m->subj[i] = ln[j + i];
+ }
+ m->subj[i] = '\0';
+ j += i + 1;
+
+ message_list = m;
+ }
+ return message_list;
+}
+
+void
+shell_releaseHeaders(Pop3 pc __attribute__ ((unused)), struct msglst *h)
+{
+ for (; h != NULL;) {
+ struct msglst *n = h->next;
+ free(h);
+ h = n;
+ }
+}
+
+int shellCreate( /*@notnull@ */ Pop3 pc, const char *str)
+{
+ /* SHELL format: shell:::/path/to/script */
+ const char *reserved1, *reserved2, *commandline;
+
+ pc->TotalMsgs = 0;
+ pc->UnreadMsgs = 0;
+ pc->OldMsgs = -1;
+ pc->OldUnreadMsgs = -1;
+ pc->checkMail = shellCmdCheck;
+ pc->getHeaders = shell_getHeaders;
+ reserved1 = str + 6; /* shell:>:: */
+
+ assert(strncasecmp("shell:", str, 6) == 0);
+
+ reserved2 = index(reserved1, ':');
+ if (reserved2 == NULL) {
+ SH_DM(pc, DEBUG_ERROR, "unable to parse '%s', expecting ':'", str);
+ return 0;
+ }
+ reserved2++; /* shell::>: */
+
+ commandline = index(reserved2, ':');
+ if (commandline == NULL) {
+ SH_DM(pc, DEBUG_ERROR,
+ "unable to parse '%s', expecting another ':'", str);
+ return 0;
+ }
+ commandline++; /* shell:::> */
+
+ /* strcpy is not specified to handle overlapping regions */
+ SH_DM(pc, DEBUG_INFO, "path= '%s'\n", commandline);
+ {
+ char *tmp = strdup(commandline);
+ if (strlen(tmp) + 1 > BUF_BIG) {
+ SH_DM(pc, DEBUG_ERROR, "commandline '%s' is too long.\n",
+ commandline);
+ memset(pc->path, 0, BUF_BIG);
+ } else {
+ strcpy(pc->path, tmp);
+ }
+ free(tmp);
+ }
+ return 0;
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/charutil.c b/wmbiff/charutil.c
new file mode 100644
index 0000000..9b8108b
--- /dev/null
+++ b/wmbiff/charutil.c
@@ -0,0 +1,270 @@
+/* $Id: charutil.c,v 1.19 2004/04/28 00:19:03 bluehal Exp $ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <regex.h>
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+#include "charutil.h"
+
+static __inline__ void LeftTrim(char *psValue)
+{
+ char *psTmp = psValue;
+
+ while (*psTmp == ' ' || *psTmp == '\t')
+ psTmp++;
+
+ /* can't use strcpy here, as the strings must not
+ overlap, at least according to spec. */
+ if (psTmp > psValue) {
+ while (*psTmp != '\0') {
+ *(psValue++) = *(psTmp++);
+ }
+ *(psValue) = '\0';
+ }
+}
+
+static __inline__ void RightTrim(char *psValue)
+{
+ long lLength = strlen(psValue) - 1;
+
+ while ((psValue[lLength] == ' ' || psValue[lLength] == '\t')
+ && *psValue) {
+ lLength--;
+ }
+
+ psValue[++lLength] = '\000';
+}
+
+void FullTrim(char *psValue)
+{
+ RightTrim(psValue);
+ LeftTrim(psValue);
+}
+
+void Bin2Hex(unsigned char *src, int length, char *dst)
+{
+ static char hex_tbl[] = "0123456789abcdef";
+
+ int i = 0;
+ char *ptr = dst;
+
+ if (src && ptr) {
+ for (i = 0; i < length; i++) {
+ *ptr++ = hex_tbl[*src >> 4];
+ *ptr++ = hex_tbl[*src++ & 0xf];
+ }
+ *ptr = 0;
+ }
+}
+
+
+#define PAD '='
+char ALPHABET[65] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\000";
+
+/* find char in in alphabet, return offset, -1 otherwise */
+int find_char(char c)
+{
+ char *a = ALPHABET;
+
+ while (*a)
+ if (*(a++) == c)
+ return a - ALPHABET - 1;
+
+ return -1;
+}
+
+void Encode_Base64(char *src, char *dst)
+{
+ int g = 0;
+ int c = 0;
+
+ if (!src || !dst)
+ return;
+
+ while (*src) {
+ g = (g << 8) | *src++;
+ if (c == 2) {
+ *dst++ = ALPHABET[0x3f & (g >> 18)];
+ *dst++ = ALPHABET[0x3f & (g >> 12)];
+ *dst++ = ALPHABET[0x3f & (g >> 6)];
+ *dst++ = ALPHABET[0x3f & g];
+ }
+ c = (c + 1) % 3;
+ }
+
+ if (c) {
+ if (c == 1) {
+ *dst++ = ALPHABET[0x3f & (g >> 2)];
+ *dst++ = ALPHABET[0x3f & (g << 4)];
+ *dst++ = PAD;
+ *dst++ = PAD;
+ } else {
+ *dst++ = ALPHABET[0x3f & (g >> 10)];
+ *dst++ = ALPHABET[0x3f & (g >> 4)];
+ *dst++ = ALPHABET[0x3f & (g << 2)];
+ *dst++ = PAD;
+ }
+ }
+ *dst = 0;
+}
+
+
+void Decode_Base64(char *src, char *dst)
+{
+ int g = 0;
+ int c = 0;
+ int n = 0;
+
+ if (!src || !dst)
+ return;
+
+ while (*src) {
+ n = find_char(*src++);
+ if (n < 0)
+ continue;
+
+ g <<= 6;
+ g |= n;
+ if (c == 3) {
+ *dst++ = g >> 16;
+ *dst++ = g >> 8;
+ *dst++ = g;
+ g = 0;
+ }
+ c = (c + 1) % 4;
+ }
+ if (c) {
+ if (c == 1) {
+ /* shouldn't happen, but do something anyway */
+ *dst++ = g << 2;
+ } else if (c == 2) {
+ *dst++ = g >> 4;
+ } else {
+ *dst++ = g >> 10;
+ *dst++ = g >> 2;
+ }
+ }
+ *dst = 0;
+}
+
+/* helper function for the configuration line parser */
+void
+copy_substring(char *destination,
+ int startidx, int endidx, const char *source)
+{
+ if (startidx > -1) {
+ strncpy(destination, source + startidx, endidx - startidx);
+ destination[endidx - startidx] = '\0';
+ }
+}
+
+/* common to Pop3 and Imap4 authentication list grabber. */
+void grab_authList(const char *source, char *destination)
+{
+ int i;
+ /* regex isn't all that helpful for lists of things. */
+ /* but does leave the end of the matched region in regs.end[0] */
+ /* what remains is a list of legal authentication schemes. */
+ if (isalnum(source[0])) {
+ /* copy, while turning caps into lower case */
+ for (i = 0; i < 99 && source[i] != '\0'; i++) {
+ destination[i] = tolower(source[i]);
+ }
+ destination[i] = '\0';
+ } else {
+ destination[0] = '\0';
+ }
+}
+
+#ifdef USE_GNU_REGEX
+int compile_and_match_regex(const char *regex, const char *str, /*@out@ */
+ struct re_registers *regs)
+{
+
+ const char *errstr;
+ int matchedchars;
+ struct re_pattern_buffer rpbuf;
+
+ /* compile the regex pattern */
+ memset(&rpbuf, 0, sizeof(struct re_pattern_buffer));
+ /* posix egrep interprets intervals (eg. {1,32}) nicely */
+ re_syntax_options = RE_SYNTAX_POSIX_EGREP;
+ errstr = re_compile_pattern(regex, strlen(regex), &rpbuf);
+ if (errstr != NULL) {
+ fprintf(stderr, "error in compiling regular expression: %s\n",
+ errstr);
+ return -1;
+ }
+
+ /* match the regex */
+ regs->num_regs = REGS_UNALLOCATED;
+ matchedchars = re_match(&rpbuf, str, strlen(str), 0, regs);
+ /* this can fail (return -1 or 0) without being an error,
+ if we're trying to apply a regex just to see if it
+ matched. */
+
+#ifdef undef
+ printf("--\n");
+ for (i = 1; i < 6; i++) {
+ printf("%d %d, (%.*s)\n", regs.start[i], regs.end[i],
+ (regs.end[i] - regs.start[i]),
+ (regs.start[i] >= 0) ? &str[regs.start[i]] : "");
+ }
+#endif
+
+ regfree(&rpbuf); // added 3 jul 02, appeasing valgrind
+ return matchedchars;
+}
+#endif
+
+/* like perl chomp(); useful for dealing with input from popen */
+void chomp(char *s)
+{
+ int l = strlen(s) - 1;
+ if (l >= 0 && s[l] == '\n')
+ s[l] = '\0';
+}
+
+char *strdup_ordie(const char *c)
+{
+ char *ret = strdup(c);
+ if (ret == NULL) {
+ fprintf(stderr, "ran out of memory\n");
+ exit(EXIT_FAILURE);
+ }
+ return (ret);
+}
+
+void StripComment(char *buf)
+{
+ char *p;
+
+ /* Strip comments at beginning of line, or after whitespace.
+ a kludgy way of avoiding problems with #'s in passwords. */
+ if (buf[0] == '#')
+ buf[0] = '\0';
+ for (p = (char *) buf + 1; *p && !(*p == '#' && isspace(*(p - 1)));
+ p++);
+ if (*p) {
+ *p = '\0';
+ }
+}
+
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/charutil.h b/wmbiff/charutil.h
new file mode 100644
index 0000000..cbd687e
--- /dev/null
+++ b/wmbiff/charutil.h
@@ -0,0 +1,46 @@
+/* $Id: charutil.h,v 1.12 2004/04/20 04:55:55 bluehal Exp $ */
+/* Author: Mark Hurley (debian4tux at telocity.com)
+ *
+ * Character / string manipulation utilities.
+ *
+ */
+
+#ifndef CHARUTIL
+#define CHARUTIL
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_REGEX_H
+#include <regex.h>
+#endif
+
+void FullTrim(char *psValue);
+
+void Bin2Hex(unsigned char *src, int length, char *dst);
+
+void Encode_Base64(char *src, char *dst);
+void Decode_Base64(char *src, char *dst);
+
+/* helper function for the configuration line parser */
+void copy_substring(char *destination,
+ int startidx, int endidx, const char *source);
+
+/* common to Pop3 and Imap4 authentication list grabber. */
+void grab_authList(const char *source, char *destination);
+
+#ifdef USE_GNU_REGEX
+/* handles main regex work */
+int compile_and_match_regex(const char *regex, const char *str,
+ /*@out@ */ struct re_registers *regs);
+#endif
+
+/* acts like perl's function of the same name */
+void chomp(char *s);
+
+/* same as xstrdup, just better named ;) */
+char *strdup_ordie(const char *c);
+
+void StripComment(char *buf);
+#endif
diff --git a/wmbiff/gnutls-common.c b/wmbiff/gnutls-common.c
new file mode 100644
index 0000000..a65a432
--- /dev/null
+++ b/wmbiff/gnutls-common.c
@@ -0,0 +1,685 @@
+#include <config.h>
+# include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gnutls/gnutls.h>
+#include <gnutls/extra.h>
+#include <gnutls/x509.h>
+#include <gnutls/openpgp.h>
+#include <time.h>
+#include <gnutls-common.h>
+
+#define TEST_STRING
+
+int xml = 0;
+int print_cert;
+
+static char buffer[5*1024];
+
+#define PRINTX(x,y) if (y[0]!=0) printf(" # %s %s\n", x, y)
+#define PRINT_PGP_NAME(X) PRINTX( "NAME:", name)
+
+const char str_unknown[] = "(unknown)";
+
+static const char *my_ctime(const time_t * tv)
+{
+ static char buf[256];
+ struct tm *tp;
+
+ if ( ( (tp = localtime(tv)) == NULL ) ||
+ (!strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %Z %Y\n", tp)) )
+ strcpy(buf, str_unknown);/* make sure buf text isn't garbage */
+
+ return buf;
+
+}
+
+void print_x509_info(gnutls_session session, const char* hostname)
+{
+ gnutls_x509_crt crt;
+ const gnutls_datum *cert_list;
+ int cert_list_size = 0, ret;
+ char digest[20];
+ char serial[40];
+ char dn[256];
+ size_t dn_size;
+ size_t digest_size = sizeof(digest);
+ unsigned int i, j;
+ size_t serial_size = sizeof(serial);
+ char printable[256];
+ char *print;
+ unsigned int bits, algo;
+ time_t expiret, activet;
+
+ cert_list = gnutls_certificate_get_peers(session, &cert_list_size);
+
+
+ if (cert_list_size == 0) {
+ fprintf(stderr, "No certificates found!\n");
+ return;
+ }
+
+ printf(" - Got a certificate list of %d certificates.\n\n",
+ cert_list_size);
+
+ for (j = 0; j < (unsigned int)cert_list_size; j++) {
+
+ gnutls_x509_crt_init(&crt);
+ ret =
+ gnutls_x509_crt_import(crt, &cert_list[j],
+ GNUTLS_X509_FMT_DER);
+ if (ret < 0) {
+ const char* str = gnutls_strerror(ret);
+ if (str == NULL) str = str_unknown;
+ fprintf(stderr, "Decoding error: %s\n", str);
+ return;
+ }
+
+ printf(" - Certificate[%d] info:\n", j);
+
+ if (print_cert) {
+ size_t size;
+
+ size = sizeof(buffer);
+
+ ret = gnutls_x509_crt_export( crt, GNUTLS_X509_FMT_PEM, buffer, &size);
+ if (ret < 0) {
+ fprintf(stderr, "Encoding error: %s\n", gnutls_strerror(ret));
+ return;
+ }
+ fputs( "\n", stdout);
+ fputs( buffer, stdout);
+ fputs( "\n", stdout);
+ }
+
+ if (j==0 && hostname != NULL) { /* Check the hostname of the first certificate
+ * if it matches the name of the host we
+ * connected to.
+ */
+ if (gnutls_x509_crt_check_hostname( crt, hostname)==0) {
+ printf(" # The hostname in the certificate does NOT match '%s'.\n", hostname);
+ } else {
+ printf(" # The hostname in the certificate matches '%s'.\n", hostname);
+ }
+ }
+
+
+ if (xml) {
+#ifdef ENABLE_PKI
+ gnutls_datum xml_data;
+
+ ret = gnutls_x509_crt_to_xml( crt, &xml_data, 0);
+ if (ret < 0) {
+ const char* str = gnutls_strerror(ret);
+ if (str == NULL) str = str_unknown;
+ fprintf(stderr, "XML encoding error: %s\n",
+ str);
+ return;
+ }
+
+ printf("%s", xml_data.data);
+ gnutls_free( xml_data.data);
+#endif
+ } else {
+
+ expiret = gnutls_x509_crt_get_expiration_time(crt);
+ activet = gnutls_x509_crt_get_activation_time(crt);
+
+ printf(" # valid since: %s", my_ctime(&activet));
+ printf(" # expires at: %s", my_ctime(&expiret));
+
+
+ /* Print the serial number of the certificate.
+ */
+ if (gnutls_x509_crt_get_serial(crt, serial, &serial_size)
+ >= 0) {
+ print = printable;
+ for (i = 0; i < serial_size; i++) {
+ sprintf(print, "%.2x ",
+ (unsigned char) serial[i]);
+ print += 3;
+ }
+ printf(" # serial number: %s\n", printable);
+ }
+
+ /* Print the fingerprint of the certificate
+ */
+ digest_size = sizeof(digest);
+ if ((ret=gnutls_x509_crt_get_fingerprint(crt, GNUTLS_DIG_MD5, digest, &digest_size))
+ < 0) {
+ const char* str = gnutls_strerror(ret);
+ if (str == NULL) str = str_unknown;
+ fprintf(stderr, "Error in fingerprint calculation: %s\n", str);
+ } else {
+ print = printable;
+ for (i = 0; i < digest_size; i++) {
+ sprintf(print, "%.2x ",
+ (unsigned char) digest[i]);
+ print += 3;
+ }
+ printf(" # fingerprint: %s\n", printable);
+ }
+
+ /* Print the version of the X.509
+ * certificate.
+ */
+ printf(" # version: #%d\n",
+ gnutls_x509_crt_get_version(crt));
+
+ algo = gnutls_x509_crt_get_pk_algorithm(crt, &bits);
+ printf(" # public key algorithm: ");
+ if (algo == GNUTLS_PK_RSA) {
+ printf("RSA\n");
+ printf(" # Modulus: %d bits\n", bits);
+ } else if (algo == GNUTLS_PK_DSA) {
+ printf("DSA\n");
+ printf(" # Exponent: %d bits\n", bits);
+ } else {
+ printf("UNKNOWN\n");
+ }
+
+ dn_size = sizeof(dn);
+ ret = gnutls_x509_crt_get_dn(crt, dn, &dn_size);
+ if (ret >= 0)
+ printf(" # Subject's DN: %s\n", dn);
+
+ dn_size = sizeof(dn);
+ ret = gnutls_x509_crt_get_issuer_dn(crt, dn, &dn_size);
+ if (ret >= 0)
+ printf(" # Issuer's DN: %s\n", dn);
+ }
+
+ gnutls_x509_crt_deinit(crt);
+
+ printf("\n");
+
+ }
+
+}
+
+#ifdef HAVE_LIBOPENCDK
+
+void print_openpgp_info(gnutls_session session, const char* hostname)
+{
+
+ char digest[20];
+ size_t digest_size = sizeof(digest);
+ unsigned int i;
+ int ret;
+ char printable[120];
+ char *print;
+ char name[256];
+ size_t name_len = sizeof(name);
+ gnutls_openpgp_key crt;
+ const gnutls_datum *cert_list;
+ int cert_list_size = 0;
+ time_t expiret;
+ time_t activet;
+
+ cert_list = gnutls_certificate_get_peers(session, &cert_list_size);
+
+ if (cert_list_size > 0) {
+ unsigned int algo, bits;
+
+ gnutls_openpgp_key_init(&crt);
+ ret =
+ gnutls_openpgp_key_import(crt, &cert_list[0], GNUTLS_OPENPGP_FMT_RAW);
+ if (ret < 0) {
+ const char* str = gnutls_strerror(ret);
+ if (str == NULL) str = str_unknown;
+ fprintf(stderr, "Decoding error: %s\n", str);
+ return;
+ }
+
+ if (print_cert) {
+ size_t size;
+
+ size = sizeof(buffer);
+
+ ret = gnutls_openpgp_key_export( crt, GNUTLS_OPENPGP_FMT_BASE64, buffer, &size);
+ if (ret < 0) {
+ fprintf(stderr, "Encoding error: %s\n", gnutls_strerror(ret));
+ return;
+ }
+ fputs( "\n", stdout);
+ fputs( buffer, stdout);
+ fputs( "\n", stdout);
+ }
+
+ if (hostname != NULL) { /* Check the hostname of the first certificate
+ * if it matches the name of the host we
+ * connected to.
+ */
+ if (gnutls_openpgp_key_check_hostname( crt, hostname)==0) {
+ printf(" # The hostname in the key does NOT match '%s'.\n", hostname);
+ } else {
+ printf(" # The hostname in the key matches '%s'.\n", hostname);
+ }
+ }
+
+ if (xml) {
+ gnutls_datum xml_data;
+
+ ret = gnutls_openpgp_key_to_xml( crt, &xml_data, 0);
+ if (ret < 0) {
+ const char* str = gnutls_strerror(ret);
+ if (str == NULL) str = str_unknown;
+ fprintf(stderr, "XML encoding error: %s\n",
+ str);
+ return;
+ }
+
+ printf("%s", xml_data.data);
+ gnutls_free( xml_data.data);
+
+ return;
+ }
+
+ activet = gnutls_openpgp_key_get_creation_time( crt);
+ expiret = gnutls_openpgp_key_get_expiration_time( crt);
+
+ printf(" # Key was created at: %s", my_ctime(&activet));
+ printf(" # Key expires: ");
+ if (expiret != 0)
+ printf("%s", my_ctime(&expiret));
+ else
+ printf("Never\n");
+
+ if (gnutls_openpgp_key_get_fingerprint(crt, digest, &digest_size) >= 0)
+ {
+ print = printable;
+ for (i = 0; i < digest_size; i++) {
+ sprintf(print, "%.2x ",
+ (unsigned char) digest[i]);
+ print += 3;
+ }
+
+ printf(" # PGP Key version: %d\n",
+ gnutls_openpgp_key_get_version(crt));
+
+ algo =
+ gnutls_openpgp_key_get_pk_algorithm(crt, &bits);
+
+ printf(" # PGP Key public key algorithm: ");
+
+ if (algo == GNUTLS_PK_RSA) {
+ printf("RSA\n");
+ printf(" # Modulus: %d bits\n", bits);
+ } else if (algo == GNUTLS_PK_DSA) {
+ printf("DSA\n");
+ printf(" # Exponent: %d bits\n", bits);
+ } else {
+ printf("UNKNOWN\n");
+ }
+
+ printf(" # PGP Key fingerprint: %s\n", printable);
+
+ name_len = sizeof(name);
+ if (gnutls_openpgp_key_get_name(crt, 0, name, &name_len) < 0) {
+ fprintf(stderr,
+ "Could not extract name\n");
+ } else {
+ PRINT_PGP_NAME(name);
+ }
+
+ }
+
+ gnutls_openpgp_key_deinit( crt);
+
+ }
+}
+
+#endif
+
+void print_cert_vrfy(gnutls_session session)
+{
+
+ int status;
+ status = gnutls_certificate_verify_peers(session);
+ printf("\n");
+
+ if (status == GNUTLS_E_NO_CERTIFICATE_FOUND) {
+ printf("- Peer did not send any certificate.\n");
+ return;
+ }
+ if (status < 0) {
+ printf("- Could not verify certificate (err: %s)\n",
+ gnutls_strerror(status));
+ return;
+ }
+
+ if (gnutls_certificate_type_get(session)==GNUTLS_CRT_X509) {
+ if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
+ printf("- Peer's certificate issuer is unknown\n");
+ if (status & GNUTLS_CERT_INVALID)
+ printf("- Peer's certificate is NOT trusted\n");
+ else
+ printf("- Peer's certificate is trusted\n");
+ } else {
+ if (status & GNUTLS_CERT_INVALID)
+ printf("- Peer's key is invalid\n");
+ else
+ printf("- Peer's key is valid\n");
+ if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
+ printf("- Could not find a signer of the peer's key\n");
+ }
+}
+
+int print_info(gnutls_session session, const char* hostname)
+{
+ const char *tmp;
+ gnutls_credentials_type cred;
+ gnutls_kx_algorithm kx;
+
+
+ /* print the key exchange's algorithm name
+ */
+ kx = gnutls_kx_get(session);
+
+ cred = gnutls_auth_get_type(session);
+ switch (cred) {
+#ifdef ENABLE_ANON
+ case GNUTLS_CRD_ANON:
+ printf("- Anonymous DH using prime of %d bits, secret key "
+ "of %d bits, and peer's public key is %d bits.\n",
+ gnutls_dh_get_prime_bits(session),
+ gnutls_dh_get_secret_bits(session),
+ gnutls_dh_get_peers_public_bits(session));
+ break;
+#endif
+#ifdef ENABLE_SRP
+ case GNUTLS_CRD_SRP:
+ /* This should be only called in server
+ * side.
+ */
+ if (gnutls_srp_server_get_username(session) != NULL)
+ printf("- SRP authentication. Connected as '%s'\n",
+ gnutls_srp_server_get_username(session));
+ break;
+#endif
+ case GNUTLS_CRD_CERTIFICATE:
+ {
+ char dns[256];
+ size_t dns_size = sizeof(dns);
+ unsigned int type;
+
+ /* This fails in client side */
+ if (gnutls_server_name_get
+ (session, dns, &dns_size, &type, 0) == 0) {
+ printf("- Given server name[%d]: %s\n",
+ type, dns);
+ }
+ }
+
+ print_cert_info(session, hostname);
+
+ print_cert_vrfy(session);
+
+ /* Check if we have been using ephemeral Diffie Hellman.
+ */
+ if (kx == GNUTLS_KX_DHE_RSA || kx == GNUTLS_KX_DHE_DSS) {
+ printf
+ ("- Ephemeral DH using prime of %d bits, secret key "
+ "of %d bits, and peer's public key is %d bits.\n",
+ gnutls_dh_get_prime_bits(session),
+ gnutls_dh_get_secret_bits(session),
+ gnutls_dh_get_peers_public_bits(session));
+ }
+ default:
+ break;
+ }
+
+ tmp =
+ gnutls_protocol_get_name(gnutls_protocol_get_version(session));
+ if (tmp != NULL) printf("- Version: %s\n", tmp);
+
+ tmp = gnutls_kx_get_name(kx);
+ if (tmp != NULL) printf("- Key Exchange: %s\n", tmp);
+
+ tmp = gnutls_cipher_get_name(gnutls_cipher_get(session));
+ if (tmp != NULL) printf("- Cipher: %s\n", tmp);
+
+ tmp = gnutls_mac_get_name(gnutls_mac_get(session));
+ if (tmp != NULL) printf("- MAC: %s\n", tmp);
+
+ tmp = gnutls_compression_get_name(gnutls_compression_get(session));
+ if (tmp != NULL) printf("- Compression: %s\n", tmp);
+
+ fflush (stdout);
+
+ return 0;
+}
+
+void print_cert_info(gnutls_session session, const char* hostname)
+{
+
+ printf("- Certificate type: ");
+ switch (gnutls_certificate_type_get(session)) {
+ case GNUTLS_CRT_X509:
+ printf("X.509\n");
+ print_x509_info(session, hostname);
+ break;
+#ifdef HAVE_LIBOPENCDK
+ case GNUTLS_CRT_OPENPGP:
+ printf("OpenPGP\n");
+ print_openpgp_info(session, hostname);
+ break;
+#endif
+ default:
+ break;
+ }
+
+}
+
+void print_list(void)
+{
+ /* FIXME: This is hard coded. Make it print all the supported
+ * algorithms.
+ */
+ printf("\n");
+ printf("Certificate types:");
+ printf(" X.509");
+ printf(", OPENPGP\n");
+
+ printf("Protocols:");
+ printf(" TLS1.0");
+ printf(", SSL3.0\n");
+
+ printf("Ciphers:");
+ printf(" AES-128-CBC");
+ printf(", 3DES-CBC");
+ printf(", ARCFOUR");
+ printf(", ARCFOUR-40\n");
+
+ printf("MACs:");
+ printf(" MD5");
+ printf(", RMD160");
+ printf(", SHA1\n");
+
+ printf("Key exchange algorithms:");
+ printf(" RSA");
+ printf(", RSA-EXPORT");
+ printf(", DHE-DSS");
+ printf(", DHE-RSA");
+ printf(", SRP");
+ printf(", SRP-RSA");
+ printf(", SRP-DSS");
+ printf(", ANON-DH\n");
+
+ printf("Compression methods:");
+ printf(" ZLIB");
+ printf(", LZO");
+ printf(", NULL\n");
+}
+
+void print_license(void)
+{
+ fprintf(stdout,
+ "\nCopyright (C) 2001-2003 Nikos Mavroyanopoulos\n"
+ "This program is free software; you can redistribute it and/or modify \n"
+ "it under the terms of the GNU General Public License as published by \n"
+ "the Free Software Foundation; either version 2 of the License, or \n"
+ "(at your option) any later version. \n" "\n"
+ "This program is distributed in the hope that it will be useful, \n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of \n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n"
+ "GNU General Public License for more details. \n" "\n"
+ "You should have received a copy of the GNU General Public License \n"
+ "along with this program; if not, write to the Free Software \n"
+ "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\n");
+}
+
+void parse_protocols(char **protocols, int protocols_size,
+ int *protocol_priority)
+{
+ int i, j;
+
+ if (protocols != NULL && protocols_size > 0) {
+ for (j = i = 0; i < protocols_size; i++) {
+ if (strncasecmp(protocols[i], "SSL", 3) == 0)
+ protocol_priority[j++] = GNUTLS_SSL3;
+ if (strncasecmp(protocols[i], "TLS", 3) == 0)
+ protocol_priority[j++] = GNUTLS_TLS1;
+ }
+ protocol_priority[j] = 0;
+ }
+}
+
+void parse_ciphers(char **ciphers, int nciphers, int *cipher_priority)
+{
+ int j, i;
+
+ if (ciphers != NULL && nciphers > 0) {
+ for (j = i = 0; i < nciphers; i++) {
+ if (strncasecmp(ciphers[i], "AES", 3) == 0)
+ cipher_priority[j++] =
+ GNUTLS_CIPHER_AES_128_CBC;
+ if (strncasecmp(ciphers[i], "3DE", 3) == 0)
+ cipher_priority[j++] =
+ GNUTLS_CIPHER_3DES_CBC;
+ if (strcasecmp(ciphers[i], "ARCFOUR-40") == 0)
+ cipher_priority[j++] =
+ GNUTLS_CIPHER_ARCFOUR_40;
+ if (strcasecmp(ciphers[i], "ARCFOUR") == 0)
+ cipher_priority[j++] =
+ GNUTLS_CIPHER_ARCFOUR_128;
+ if (strncasecmp(ciphers[i], "NUL", 3) == 0)
+ cipher_priority[j++] = GNUTLS_CIPHER_NULL;
+ }
+ cipher_priority[j] = 0;
+ }
+}
+
+void parse_macs(char **macs, int nmacs, int *mac_priority)
+{
+ int i, j;
+ if (macs != NULL && nmacs > 0) {
+ for (j = i = 0; i < nmacs; i++) {
+ if (strncasecmp(macs[i], "MD5", 3) == 0)
+ mac_priority[j++] = GNUTLS_MAC_MD5;
+ if (strncasecmp(macs[i], "RMD", 3) == 0)
+ mac_priority[j++] = GNUTLS_MAC_RMD160;
+ if (strncasecmp(macs[i], "SHA", 3) == 0)
+ mac_priority[j++] = GNUTLS_MAC_SHA;
+ }
+ mac_priority[j] = 0;
+ }
+}
+
+void parse_ctypes(char **ctype, int nctype, int *cert_type_priority)
+{
+ int i, j;
+ if (ctype != NULL && nctype > 0) {
+ for (j = i = 0; i < nctype; i++) {
+ if (strncasecmp(ctype[i], "OPE", 3) == 0)
+ cert_type_priority[j++] =
+ GNUTLS_CRT_OPENPGP;
+ if (strncasecmp(ctype[i], "X", 1) == 0)
+ cert_type_priority[j++] = GNUTLS_CRT_X509;
+ }
+ cert_type_priority[j] = 0;
+ }
+}
+
+void parse_kx(char **kx, int nkx, int *kx_priority)
+{
+ int i, j;
+ if (kx != NULL && nkx > 0) {
+ for (j = i = 0; i < nkx; i++) {
+ if (strcasecmp(kx[i], "SRP") == 0)
+ kx_priority[j++] = GNUTLS_KX_SRP;
+ if (strcasecmp(kx[i], "SRP-RSA") == 0)
+ kx_priority[j++] = GNUTLS_KX_SRP_RSA;
+ if (strcasecmp(kx[i], "SRP-DSS") == 0)
+ kx_priority[j++] = GNUTLS_KX_SRP_DSS;
+ if (strcasecmp(kx[i], "RSA") == 0)
+ kx_priority[j++] = GNUTLS_KX_RSA;
+ if (strcasecmp(kx[i], "RSA-EXPORT") == 0)
+ kx_priority[j++] = GNUTLS_KX_RSA_EXPORT;
+ if (strncasecmp(kx[i], "DHE-RSA", 7) == 0)
+ kx_priority[j++] = GNUTLS_KX_DHE_RSA;
+ if (strncasecmp(kx[i], "DHE-DSS", 7) == 0)
+ kx_priority[j++] = GNUTLS_KX_DHE_DSS;
+ if (strncasecmp(kx[i], "ANON", 4) == 0)
+ kx_priority[j++] = GNUTLS_KX_ANON_DH;
+ }
+ kx_priority[j] = 0;
+ }
+}
+
+void parse_comp(char **comp, int ncomp, int *comp_priority)
+{
+ int i, j;
+ if (comp != NULL && ncomp > 0) {
+ for (j = i = 0; i < ncomp; i++) {
+ if (strncasecmp(comp[i], "NUL", 3) == 0)
+ comp_priority[j++] = GNUTLS_COMP_NULL;
+ if (strncasecmp(comp[i], "ZLI", 3) == 0)
+ comp_priority[j++] = GNUTLS_COMP_ZLIB;
+ if (strncasecmp(comp[i], "LZO", 3) == 0)
+ comp_priority[j++] = GNUTLS_COMP_LZO;
+ }
+ comp_priority[j] = 0;
+ }
+
+}
+
+#ifndef HAVE_INET_NTOP
+
+#ifdef _WIN32
+# include <winsock.h>
+#else
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+#endif
+
+const char *inet_ntop(int af __attribute__((unused)), const void *src,
+ char *dst, size_t cnt)
+{
+char* ret;
+
+ ret = inet_ntoa( *((struct in_addr*)src));
+
+ if (strlen(ret) > cnt) {
+ return NULL;
+ }
+ strcpy( dst, ret);
+
+ return dst;
+}
+#endif
+
+void sockets_init( void)
+{
+#ifdef _WIN32
+ WORD wVersionRequested;
+ WSADATA wsaData;
+
+ wVersionRequested = MAKEWORD(1, 1);
+ if (WSAStartup(wVersionRequested, &wsaData) != 0) {
+ perror("WSA_STARTUP_ERROR");
+ }
+#endif
+}
diff --git a/wmbiff/gnutls-common.h b/wmbiff/gnutls-common.h
new file mode 100644
index 0000000..6c82088
--- /dev/null
+++ b/wmbiff/gnutls-common.h
@@ -0,0 +1,43 @@
+#define PORT 5556
+#define SERVER "127.0.0.1"
+
+#include <config.h>
+#include <gnutls/gnutls.h>
+
+#ifdef _WIN32
+# include <winsock.h>
+# include <io.h>
+# include <winbase.h>
+# define socklen_t int
+# define close closesocket
+#else
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <unistd.h>
+# include <netdb.h>
+# include <signal.h>
+#endif
+
+/* the number of elements in the priority structures.
+ */
+#define PRI_MAX 16
+
+extern const char str_unknown[];
+
+int print_info( gnutls_session state, const char* hostname);
+void print_cert_info( gnutls_session state, const char* hostname);
+void print_list(void);
+
+void parse_comp( char** comp, int ncomp, int* comp_priority);
+void parse_kx( char** kx, int nkx, int* kx_priority);
+void parse_ctypes( char** ctype, int nctype, int * cert_type_priority);
+void parse_macs( char** macs, int nmacs, int *mac_priority);
+void parse_ciphers( char** ciphers, int nciphers, int* cipher_priority);
+void parse_protocols( char** protocols, int protocols_size, int* protocol_priority);
+
+void sockets_init( void);
+#ifndef HAVE_INET_NTOP
+const char *inet_ntop(int af, const void *src,
+ char *dst, size_t cnt);
+#endif
diff --git a/wmbiff/maildirClient.c b/wmbiff/maildirClient.c
new file mode 100644
index 0000000..f2e5349
--- /dev/null
+++ b/wmbiff/maildirClient.c
@@ -0,0 +1,187 @@
+/* $Id: maildirClient.c,v 1.15 2004/03/28 00:28:58 bluehal Exp $ */
+/* Author : Yong-iL Joh ( tolkien at mizi.com )
+ Modified : Jorge Garc�a ( Jorge.Garcia at uv.es )
+ Modified : Dwayne C. Litzenberger ( dlitz at dlitz.net )
+ *
+ * Maildir checker.
+ *
+ * Last Updated : $Date: 2004/03/28 00:28:58 $
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Client.h"
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <errno.h>
+#include <utime.h>
+#include <unistd.h>
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+
+#define PCM (pc->u).maildir
+
+static int count_msgs(char *path)
+{
+ DIR *D;
+ struct dirent *de;
+ int count = 0;
+
+ D = opendir(path);
+ if (D == NULL) {
+ DMA(DEBUG_ERROR,
+ "Error opening directory '%s': %s\n", path, strerror(errno));
+ return -1;
+ }
+
+ while ((de = readdir(D)) != NULL) {
+ if ((strcmp(de->d_name, ".") & strcmp(de->d_name, "..")) != 0) {
+ count++;
+ }
+ }
+ closedir(D);
+
+ return count;
+}
+
+int maildirCheckHistory(Pop3 pc)
+{
+ struct stat st_new;
+ struct stat st_cur;
+ struct utimbuf ut;
+ char path_new[BUF_BIG * 2], path_cur[BUF_BIG * 2];
+
+ int count_new = 0, count_cur = 0;
+
+ DM(pc, DEBUG_INFO, ">Maildir: '%s'\n", pc->path);
+
+ strcpy(path_new, pc->path);
+ strcat(path_new, "/new/");
+ strcpy(path_cur, pc->path);
+ strcat(path_cur, "/cur/");
+
+ if (pc->u.maildir.dircache_flush) {
+ /* hack to clear directory cache for network-mounted maildirs */
+ int fd;
+ char path_newtmp[BUF_BIG * 2 + 32];
+ strcpy(path_newtmp, path_new);
+ strcat(path_newtmp, ".wmbiff.dircache_flush.XXXXXX");
+ if ((fd = mkstemp(path_newtmp)) >= 0) {
+ close(fd);
+ unlink(path_newtmp);
+ } else {
+ DM(pc, DEBUG_ERROR,
+ "Can't create dircache flush file '%s': %s\n",
+ path_newtmp, strerror(errno));
+ }
+ }
+
+ /* maildir */
+ if (stat(path_new, &st_new)) {
+ DM(pc, DEBUG_ERROR, "Can't stat mailbox '%s': %s\n",
+ path_new, strerror(errno));
+ return -1; /* Error stating mailbox */
+ }
+ if (stat(path_cur, &st_cur)) {
+ DM(pc, DEBUG_ERROR, "Can't stat mailbox '%s': %s\n",
+ path_cur, strerror(errno));
+ return -1; /* Error stating mailbox */
+ }
+
+
+ /* file was changed OR initially read */
+ if (st_new.st_mtime != PCM.mtime_new
+ || st_new.st_size != PCM.size_new
+ || st_cur.st_mtime != PCM.mtime_cur
+ || st_cur.st_size != PCM.size_cur || pc->OldMsgs < 0) {
+ DM(pc, DEBUG_INFO, " was changed,\n"
+ " TIME(new): old %lu, new %lu"
+ " SIZE(new): old %lu, new %lu\n"
+ " TIME(cur): old %lu, new %lu"
+ " SIZE(cur): old %lu, new %lu\n",
+ PCM.mtime_new, (unsigned long) st_new.st_mtime,
+ (unsigned long) PCM.size_new, (unsigned long) st_new.st_size,
+ PCM.mtime_cur, (unsigned long) st_cur.st_mtime,
+ (unsigned long) PCM.size_cur, (unsigned long) st_cur.st_size);
+
+ count_new = count_msgs(path_new);
+ count_cur = count_msgs(path_cur);
+ if ((count_new | count_cur) == -1) { /* errors occurred */
+ return -1;
+ }
+
+ pc->TotalMsgs = count_cur + count_new;
+ pc->UnreadMsgs = count_new;
+
+ /* Reset atime for MUTT and something others work correctly */
+ ut.actime = st_new.st_atime;
+ ut.modtime = st_new.st_mtime;
+ utime(path_new, &ut);
+ ut.actime = st_cur.st_atime;
+ ut.modtime = st_cur.st_mtime;
+ utime(path_cur, &ut);
+
+ /* Store new values */
+ PCM.mtime_new = st_new.st_mtime; /* Store new mtime_new */
+ PCM.size_new = st_new.st_size; /* Store new size_new */
+ PCM.mtime_cur = st_cur.st_mtime; /* Store new mtime_cur */
+ PCM.size_cur = st_cur.st_size; /* Store new size_cur */
+ }
+
+ return 0;
+}
+
+int maildirCreate(Pop3 pc, const char *str)
+{
+ int i;
+ char c;
+ /* Maildir format: maildir:fullpathname */
+
+ pc->TotalMsgs = 0;
+ pc->UnreadMsgs = 0;
+ pc->OldMsgs = -1;
+ pc->OldUnreadMsgs = -1;
+ pc->checkMail = maildirCheckHistory;
+ pc->u.maildir.dircache_flush = 0;
+
+ /* special flags */
+ if (*(str + 8) == ':') { /* path is of the format maildir::flags:path */
+ c = ' ';
+ for (i = 1; c != ':' && c != '\0'; i++) {
+ c = *(str + 8 + i);
+ switch (c) {
+ case 'F':
+ pc->u.maildir.dircache_flush = 1;
+ DM(pc, DEBUG_INFO, "maildir: dircache_flush enabled\n");
+ }
+ }
+ } else {
+ i = 0;
+ }
+ if (strlen(str + 8 + i) + 1 > BUF_BIG) {
+ DM(pc, DEBUG_ERROR, "maildir '%s' is too long.\n", str + 8 + i);
+ memset(pc->path, 0, BUF_BIG);
+ } else {
+ strncpy(pc->path, str + 8 + i, BUF_BIG - 1); /* cut off ``maildir:'' */
+ }
+
+ DM(pc, DEBUG_INFO, "maildir: str = '%s'\n", str);
+ DM(pc, DEBUG_INFO, "maildir: path= '%s'\n", pc->path);
+
+ return 0;
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/mboxClient.c b/wmbiff/mboxClient.c
new file mode 100644
index 0000000..febff7f
--- /dev/null
+++ b/wmbiff/mboxClient.c
@@ -0,0 +1,169 @@
+/* $Id: mboxClient.c,v 1.17 2004/03/28 00:28:58 bluehal Exp $ */
+/* Author: Yong-iL Joh <tolkien at mizi.com>
+ Modified: Jorge Garc�a <Jorge.Garcia at uv.es>
+ Rob Funk <rfunk at funknet.net>
+ Neil Spring <nspring at cs.washington.edu>
+ *
+ * MBOX checker.
+ *
+ * Last Updated : $Date: 2004/03/28 00:28:58 $
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Client.h"
+#include <sys/stat.h>
+#include <errno.h>
+#include <utime.h>
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#define PCM (pc->u).mbox
+#define FROM_STR "From "
+#define STATUS_STR "Status: "
+
+FILE *openMailbox(Pop3 pc, const char *mbox_filename)
+{
+ FILE *mailbox;
+
+ if ((mailbox = fopen(mbox_filename, "r")) == NULL) {
+ DM(pc, DEBUG_ERROR, "Error opening mailbox '%s': %s\n",
+ mbox_filename, strerror(errno));
+ pc->TotalMsgs = -1;
+ pc->UnreadMsgs = -1;
+ }
+ return (mailbox);
+}
+
+/* count the messages in a mailbox */
+static void countMessages(Pop3 pc, const char *mbox_filename)
+{
+ FILE *F;
+ char buf[BUF_SIZE];
+ int is_header = 0;
+ int next_from_is_start_of_header = 1;
+ int count_from = 0, count_status = 0;
+ int len_from = strlen(FROM_STR), len_status = strlen(STATUS_STR);
+
+ F = openMailbox(pc, mbox_filename);
+ if (F == NULL)
+ return;
+
+ /* count message */
+ while (fgets(buf, BUF_SIZE, F)) {
+ if (buf[0] == '\n') {
+ /* a newline by itself terminates the header */
+ if (is_header)
+ is_header = 0;
+ else
+ next_from_is_start_of_header = 1;
+ } else if (!strncmp(buf, FROM_STR, len_from)) {
+ /* A line starting with "From" is the beginning of a new header.
+ "From" in the text of the mail should get escaped by the MDA.
+ If your MDA doesn't do that, it is broken.
+ */
+ if (next_from_is_start_of_header)
+ is_header = 1;
+ if (is_header)
+ count_from++;
+ } else {
+ next_from_is_start_of_header = 0;
+ if (is_header && !strncmp(buf, STATUS_STR, len_status)
+ && strrchr(buf, 'R')) {
+ count_status++;
+ }
+ }
+ }
+
+ DM(pc, DEBUG_INFO, "from: %d status: %d\n", count_from, count_status);
+ pc->TotalMsgs = count_from;
+ pc->UnreadMsgs = count_from - count_status;
+ fclose(F);
+}
+
+/* check file status; hold on to file information used
+ to restore access time */
+int
+fileHasChanged(const char *mbox_filename, time_t * atime,
+ time_t * mtime, off_t * size)
+{
+ struct stat st;
+
+ /* mbox file */
+ if (stat(mbox_filename, &st)) {
+ DMA(DEBUG_ERROR, "Can't stat '%s': %s\n",
+ mbox_filename, strerror(errno));
+ } else if (st.st_mtime != *mtime || st.st_size != *size) {
+ /* file was changed OR initially read */
+ DMA(DEBUG_INFO, " %s was changed,"
+ " mTIME: %lu -> %lu; SIZE: %lu -> %lu\n",
+ mbox_filename, *mtime, st.st_mtime,
+ (unsigned long) *size, (unsigned long) st.st_size);
+
+ *atime = st.st_atime;
+ *mtime = st.st_mtime;
+ *size = st.st_size;
+ return 1;
+ }
+ return 0;
+}
+
+int mboxCheckHistory(Pop3 pc)
+{
+ char *mbox_filename = backtickExpand(pc, pc->path);
+ struct utimbuf ut;
+
+ DM(pc, DEBUG_INFO, ">Mailbox: '%s'\n", mbox_filename);
+
+ if (fileHasChanged(mbox_filename, &ut.actime, &PCM.mtime, &PCM.size)
+ || pc->OldMsgs < 0) {
+
+ countMessages(pc, mbox_filename);
+
+ /* Reset atime for (at least) MUTT to work */
+ /* ut.actime is set above */
+ ut.modtime = PCM.mtime;
+ utime(mbox_filename, &ut);
+ }
+ free(mbox_filename);
+ return 0;
+}
+
+int mboxCreate(Pop3 pc, const char *str)
+{
+ /* MBOX format: mbox:fullpathname */
+
+ pc->TotalMsgs = 0;
+ pc->UnreadMsgs = 0;
+ pc->OldMsgs = -1;
+ pc->OldUnreadMsgs = -1;
+ pc->checkMail = mboxCheckHistory;
+
+ /* default boxes are mbox... cut mbox: if it exists */
+ if (!strncasecmp(pc->path, "mbox:", 5)) {
+ if (strlen(str + 5) + 1 > BUF_BIG) {
+ DM(pc, DEBUG_ERROR, "mbox '%s' is too long.\n", str + 5);
+ memset(pc->path, 0, BUF_BIG);
+ } else {
+ strncpy(pc->path, str + 5, BUF_BIG - 1); /* cut off ``mbox:'' */
+ }
+ }
+
+ DM(pc, DEBUG_INFO, "mbox: str = '%s'\n", str);
+ DM(pc, DEBUG_INFO, "mbox: path= '%s'\n", pc->path);
+
+ return 0;
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/passwordMgr.c b/wmbiff/passwordMgr.c
new file mode 100644
index 0000000..131b558
--- /dev/null
+++ b/wmbiff/passwordMgr.c
@@ -0,0 +1,298 @@
+/* passwordMgr.c
+ * Author: Neil Spring
+ */
+/* this module implements a password cache: the goal is to
+ allow multiple wmbiff mailboxes that are otherwise
+ independent get all their passwords while only asking the
+ user for an account's password once. */
+/* NOTE: it will fail if a user has different passwords for
+ pop vs. imap on the same server; this seems too far
+ fetched to be worth complexity */
+
+/* NOTE: it verifies that the askpass program, which, if
+ given with a full path, must be owned either by the user
+ or by root. There may be decent reasons not to do
+ this. */
+
+/* Intended properties: 1) exit()s if the user presses
+ cancel from askpass - this is detected by no output from
+ askpass. 2) allows the caller to remove a cached entry
+ if it turns out to be wrong, and prompt the user
+ again. This might be poor if the askpass program is
+ replaced with something non-interactive. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "passwordMgr.h"
+#include "Client.h"
+#include "charutil.h" /* chomp */
+#include <unistd.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <strings.h> /* index */
+#include <sys/stat.h>
+#include "assert.h"
+
+#ifdef HAVE_MEMFROB
+#define DEFROB(x) memfrob(x, x ## _len)
+#define ENFROB(x) memfrob(x, x ## _len)
+#else
+#define DEFROB(x)
+#define ENFROB(x)
+#endif
+
+typedef struct password_binding_struct {
+ struct password_binding_struct *next;
+ char user[BUF_SMALL];
+ char server[BUF_BIG];
+ char password[BUF_SMALL]; /* may be frobnicated */
+ unsigned char password_len; /* frobnicated *'s are nulls */
+} *password_binding;
+
+static password_binding pass_list = NULL;
+
+/* verifies that askpass_fname, if it has no spaces, exists as
+ a file, is owned by the user or by root, and is not world
+ writeable. This is just a sanity check, and is not intended
+ to ensure the integrity of the password-asking program. */
+/* would be static, but used in test_wmbiff */
+int permissions_ok(Pop3 pc, const char *askpass_fname)
+{
+ struct stat st;
+ if (index(askpass_fname, ' ')) {
+ DM(pc, DEBUG_INFO,
+ "askpass has a space in it; not verifying ownership/permissions on '%s'\n",
+ askpass_fname);
+ return (1);
+ }
+ if (stat(askpass_fname, &st)) {
+ DM(pc, DEBUG_ERROR, "Can't stat askpass program: '%s'\n",
+ askpass_fname);
+ if (askpass_fname[0] != '/') {
+ DM(pc, DEBUG_ERROR,
+ "For your own good, use a full pathname.\n");
+ }
+ return (0);
+ }
+ if (st.st_uid != 0 && st.st_uid != getuid()) {
+ DM(pc, DEBUG_ERROR,
+ "askpass program isn't owned by you or root: '%s'\n",
+ askpass_fname);
+ return (0);
+ }
+ if (st.st_mode & S_IWOTH) {
+ DM(pc, DEBUG_ERROR,
+ "askpass program is world writable: '%s'\n", askpass_fname);
+ return (0);
+ }
+ return (1);
+}
+
+#ifdef HAVE_CORESERVICES_CORESERVICES_H
+#ifdef HAVE_SECURITY_SECURITY_H
+#define HAVE_APPLE_KEYCHAIN
+#endif
+#endif
+
+
+#ifdef HAVE_APPLE_KEYCHAIN
+/* routines to use apple's keychain to get a password
+ without a user having to type. this avoids some damage
+ where although ssh-askpass can grab focus within X, it
+ may not have a particularly secure keyboard. */
+
+#include<CoreServices/CoreServices.h>
+#include<Security/Security.h>
+
+static void
+get_password_from_keychain(Pop3 pc, const char *username,
+ const char *servername,
+ /*@out@ */ char *password,
+ /*@out@ */
+ unsigned char *password_len)
+{
+ SecKeychainRef kc;
+ OSStatus rc;
+ char *secpwd;
+ UInt32 pwdlen;
+ rc = SecKeychainCopyDefault(&kc);
+ if (rc != noErr) {
+ DM(pc, DEBUG_ERROR, "passmgr: unable to open keychain, exiting\n");
+ exit(EXIT_FAILURE);
+ }
+ rc = SecKeychainFindInternetPassword(kc, strlen(servername),
+ servername, 0, NULL,
+ strlen(username), username, 0,
+ NULL, 0, NULL,
+ kSecAuthenticationTypeDefault,
+ &pwdlen, (void **) &secpwd, NULL);
+ if (rc != noErr) {
+ DM(pc, DEBUG_ERROR,
+ "passmgr: keychain password grab for %s at %s failed, exiting\n", username, servername);
+ DM(pc, DEBUG_ERROR, "passmgr: (perhaps you pressed 'deny')\n");
+ /* this seems like the sanest thing to do, for now */
+ exit(EXIT_FAILURE);
+ }
+
+ if (pwdlen < *password_len) {
+ strncpy(password, secpwd, pwdlen);
+ password[pwdlen] = '\0';
+ *password_len = pwdlen;
+ } else {
+ DM(pc, DEBUG_ERROR,
+ "passmgr: warning: your password appears longer (%lu) than expected (%d)\n",
+ strlen(secpwd), *password_len - 1);
+ }
+ rc = SecKeychainItemFreeContent(NULL, secpwd);
+ return;
+}
+#endif /* apple keychain */
+
+
+static void
+get_password_from_command(Pop3 pc, const char *username,
+ const char *servername,
+ /*@out@ */ char *password,
+ /*@out@ */
+ unsigned char *password_len)
+{
+ password[*password_len - 1] = '\0';
+ password[0] = '\0';
+ /* check that the executed file is a good one. */
+ if (permissions_ok(pc, pc->askpass)) {
+ char *command;
+ char *password_ptr;
+ int len =
+ strlen(pc->askpass) + strlen(username) +
+ strlen(servername) + 40;
+ command = malloc(len);
+ snprintf(command, len, "%s 'password for wmbiff: %s@%s'",
+ pc->askpass, username, servername);
+
+ (void) grabCommandOutput(pc, command, &password_ptr, NULL);
+ /* it's not clear what to do with the exit
+ status, though we can get it from
+ grabCommandOutput if needed to deal with some
+ programs that will print a message but exit
+ non-zero on error */
+ free(command);
+
+ if (password_ptr == NULL) {
+ /* this likely means that the user cancelled, and doesn't
+ want us to keep asking about the password. */
+ DM(pc, DEBUG_ERROR,
+ "passmgr: fgets password failed, exiting\n");
+ DM(pc, DEBUG_ERROR,
+ "passmgr: (it looks like you pressed 'cancel')\n");
+ /* this seems like the sanest thing to do, for now */
+ exit(EXIT_FAILURE);
+ }
+ strncpy(password, password_ptr, *password_len);
+ if (password[*password_len - 1] != '\0') {
+ DM(pc, DEBUG_ERROR,
+ "passmgr: warning: your password appears longer (%lu) than expected (%d)\n",
+ (unsigned long) strlen(password_ptr), *password_len - 1);
+ }
+ free(password_ptr);
+ password[*password_len - 1] = '\0';
+ *password_len = strlen(password);
+ } else {
+ /* consider this error to be particularly troublesome */
+ DM(pc, DEBUG_ERROR,
+ "passmgr: permissions check of '%s' failed.", pc->askpass);
+ exit(EXIT_FAILURE);
+ }
+}
+
+char *passwordFor(const char *username,
+ const char *servername, Pop3 pc, int bFlushCache)
+{
+
+ password_binding p;
+
+ assert(username != NULL);
+ assert(username[0] != '\0');
+
+ /* find the binding */
+ for (p = pass_list;
+ p != NULL
+ && (strcmp(username, p->user) != 0 ||
+ strcmp(servername, p->server) != 0); p = p->next);
+
+ /* if so, return the password */
+ if (p != NULL) {
+ if (p->password[0] != '\0') {
+ if (bFlushCache == 0) {
+ char *ret = strdup(p->password);
+#ifdef HAVE_MEMFROB
+ unsigned short ret_len = p->password_len;
+ DEFROB(ret);
+#endif
+ return (ret);
+ }
+ /* else fall through, overwrite */
+ } else if (pc) {
+ /* if we've asked, but received nothing, disable this box */
+ pc->checkMail = NULL;
+ return (NULL);
+ }
+ } else {
+ p = (password_binding)
+ malloc(sizeof(struct password_binding_struct));
+ }
+
+ /* else, try to get it. */
+ if (pc->askpass != NULL) {
+ char *retval;
+
+ p->password_len = 32;
+#ifdef HAVE_APPLE_KEYCHAIN
+ if (strcmp(pc->askpass, "internal:apple:keychain") == 0) {
+ get_password_from_keychain(pc, username, servername,
+ p->password, &p->password_len);
+ } else {
+ DM(pc, DEBUG_ERROR,
+ "you could change your askpass line to:\n"
+ " askpass = internal:apple:keychain\n"
+ "to use the OS X keychain instead of running a command\n");
+#endif
+ get_password_from_command(pc, username, servername,
+ p->password, &p->password_len);
+#ifdef HAVE_APPLE_KEYCHAIN
+ }
+#endif
+ retval = strdup(p->password);
+ if (strlen(username) + 1 > BUF_SMALL) {
+ DM(pc, DEBUG_ERROR, "username is too long.\n");
+ memset(p->user, 0, BUF_SMALL);
+ } else {
+ strncpy(p->user, username, BUF_SMALL - 1);
+ }
+ if (strlen(servername) + 1 > BUF_BIG) {
+ DM(pc, DEBUG_ERROR, "servername is too long.\n");
+ memset(p->server, 0, BUF_BIG);
+ } else {
+ strncpy(p->server, servername, BUF_BIG - 1);
+ }
+ ENFROB(p->password);
+ p->next = pass_list;
+ pass_list = p;
+ return (retval);
+ }
+
+ return (NULL);
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/passwordMgr.h b/wmbiff/passwordMgr.h
new file mode 100644
index 0000000..3b91fc3
--- /dev/null
+++ b/wmbiff/passwordMgr.h
@@ -0,0 +1,8 @@
+#include "Client.h"
+
+/*@mustfree@*/ char *passwordFor(const char *username,
+ const char *servername, Pop3 pc,
+ int bFlushCache);
+
+/* tested by test_wmbiff; don't use this for anything. */
+int permissions_ok(Pop3 pc, const char *askpass_fname);
diff --git a/wmbiff/regulo.c b/wmbiff/regulo.c
new file mode 100644
index 0000000..507cd19
--- /dev/null
+++ b/wmbiff/regulo.c
@@ -0,0 +1,134 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <regex.h>
+#include <ctype.h>
+
+#include "regulo.h"
+#include "charutil.h"
+
+#define min(a,b) ((a)<(b) ? (a) : (b))
+
+/* callbacks specified by the calling function to extract
+ substrings to values. */
+void regulo_atoi(void *dest_int, const char *source)
+{
+ /* skip any leading non-digit */
+ while (*source != '\0' && !isdigit(*source))
+ source++;
+
+ *(int *) dest_int = atoi(source);
+}
+
+void regulo_strcpy(void *dest, const char *source)
+{
+ strcpy((char *) dest, source);
+}
+
+void regulo_strcpy_tolower(void *dest, const char *source)
+{
+ unsigned int i;
+ for (i = 0; i < strlen(source); i++) {
+ ((char *) dest)[i] = tolower(source[i]);
+ }
+ ((char *) dest)[i] = '\0';
+}
+
+void regulo_strcpy_skip1(void *dest, const char *source)
+{
+ strcpy((char *) dest, source + 1);
+}
+
+#ifdef USE_GNU_REGEX
+/* deprecated as unportable */
+
+int
+regulo_match(const char *regex,
+ const char *string, const struct regulo *instructions)
+{
+ struct re_registers regs;
+ int ret;
+ int matchedchars;
+ int i;
+ memset(®s, 0, sizeof(struct re_registers));
+ matchedchars = compile_and_match_regex(regex, string, ®s);
+ if (matchedchars <= 0)
+ return 0;
+ if (instructions == NULL)
+ return 1;
+ for (i = 0; instructions[i].match_handler != NULL; i++) {
+ char buf[255];
+ int j = instructions[i].match_index;
+ int len = min(254, regs.end[j] - regs.start[j]);
+ if (regs.start[j] >= 0) {
+ strncpy(buf, string + regs.start[j], len);
+ buf[len] = '\0';
+ instructions[i].match_handler(instructions[i].destination,
+ buf);
+ }
+ }
+ ret = regs.end[0];
+ free(regs.end); // added 3 jul 02, appeasing valgrind
+ free(regs.start); // added 3 jul 02, appeasing valgrind
+ return ret;
+}
+
+#else
+/* favored */
+
+int compile_and_match_regex_posix(const char *regex, const char *str, /*@out@ */
+ regmatch_t * regs, size_t regs_len)
+{
+ regex_t reg;
+ int errcode;
+ if ((errcode = regcomp(®, regex, REG_EXTENDED)) != 0) {
+ char errbuf[256];
+ regerror(errcode, ®, errbuf, 256);
+ fprintf(stderr, "error in compiling regular expression: %s\n",
+ errbuf);
+ return -1;
+ }
+
+ errcode = regexec(®, str, regs_len, regs, 0);
+ regfree(®);
+ if (errcode == 0)
+ return 1;
+ else
+ return 0;
+}
+
+
+int
+regulo_match(const char *regex,
+ const char *string, const struct regulo *instructions)
+{
+ regmatch_t regs[20];
+ int ret;
+ int matchedchars;
+ int i;
+ matchedchars = compile_and_match_regex_posix(regex, string, regs, 20);
+ if (matchedchars <= 0)
+ return 0;
+ if (instructions == NULL)
+ return 1;
+ for (i = 0; instructions[i].match_handler != NULL; i++) {
+ char buf[255];
+ int j = instructions[i].match_index;
+ int len = min(254, regs[j].rm_eo - regs[j].rm_so);
+ if (regs[j].rm_so >= 0) {
+ strncpy(buf, string + regs[j].rm_so, len);
+ buf[len] = '\0';
+ instructions[i].match_handler(instructions[i].destination,
+ buf);
+ }
+ }
+ ret = regs[0].rm_eo;
+ return ret;
+}
+
+#endif
diff --git a/wmbiff/regulo.h b/wmbiff/regulo.h
new file mode 100644
index 0000000..4bce791
--- /dev/null
+++ b/wmbiff/regulo.h
@@ -0,0 +1,17 @@
+/* $Id: regulo.h,v 1.2 2003/03/02 02:17:14 bluehal Exp $ */
+/* regulo, (pronounced as if the name of a super-hero) added
+ by Neil Spring to provide a portable interface to regular
+ expressions that doesn't suck. */
+
+void regulo_atoi(void *dest_int, const char *source);
+void regulo_strcpy(void *dest, const char *source);
+void regulo_strcpy_tolower(void *dest, const char *source);
+void regulo_strcpy_skip1(void *dest, const char *source);
+struct regulo {
+ int match_index;
+ void *destination;
+ void (*match_handler) (void *dest, const char *source);
+};
+
+int regulo_match(const char *regex,
+ const char *string, const struct regulo *instructions);
diff --git a/wmbiff/sample.wmbiffrc b/wmbiff/sample.wmbiffrc
new file mode 100644
index 0000000..e0a4f58
--- /dev/null
+++ b/wmbiff/sample.wmbiffrc
@@ -0,0 +1,137 @@
+# $Id: sample.wmbiffrc,v 1.18 2003/11/09 07:01:15 bluehal Exp $
+#
+# See wmbiffrc(5) for more info.
+#
+# Global interval -- seconds between check mailboxes
+interval=60
+
+# Global askpass -- choose a password acting program
+# that behaves like ssh-askpass. The default is
+# askpass = /usr/bin/ssh-askpass.
+# askpass is invoked on IMAP entries that have no password
+# below.
+# the commented version below is likely to work on RedHat
+# systems; wmbiff's default is likely to work on Debian
+# systems with ssh-askpass installed.
+#askpass = /usr/libexec/openssh/x11-ssh-askpass
+
+# If you'd like it to be visually distinct so that
+# you aren't confused with your normal passphrase:
+#askpass = /usr/bin/ssh-askpass -fg cyan -bg black -xrm '*Dialog.font: -b&h-lucida-medium-r-normal-*-*-100-*-*-*-*-iso8859-1' -xrm '*Dialog.title: WMBiff Password Entry'
+
+# If you're writing a better program for password prompting,
+# or that stores passwords cleverly, and don't like that
+# wmbiff adds 'password for wmbiff: user at site' to the command
+# line, you can use something like this:
+#askpass = /bin/echo mypassword ; true
+
+# If you's like to chain the password to another program,
+# such as kinit for Kerberos authentication, use (with the
+# ruby interpreter installed):
+askpass = /usr/bin/ssh-askpass -fg cyan -bg black -xrm '*Dialog.title: WMBiff Password Entry' | /usr/bin/ruby -e 'm = gets; IO.popen("/usr/bin/kinit > /dev/null", "w").puts(m); puts(m)' && true
+
+# Skin. A different source pixmap can be loaded dynamically.
+# If not a full path, wmbiff will search /usr/share/wmbiff:/usr/local/share/wmbiff:.
+# which is intended to keep the .wmbiffrc simple and portable to
+# different systems with wmbiff installed differently.
+#
+# default
+#skinfile=wmbiff-master-led.xpm
+# higher contrast for lower-color displays
+#skinfile=wmbiff-master-contrast.xpm
+# make your own derivative and submit it
+# to us at wmbiff-devel at lists.sourceforge.net
+
+### First string ###
+
+# Label, that will be displayed
+label.0=Spool
+
+# Path to mailbox for UNIX-style mailboxes,
+# or pop3:user:password at mailserver[:port] for POP3 accounts
+# port are optional, default - 110
+path.0=mbox:/var/mail/gb
+
+# Command, which will be executed for new mail in any watched mailbox
+globalnotify=my_play /home/gb/sounds/new_mail_has_arrived.wav
+
+# Command, which executed on new mail arrival, or special keyword 'beep'
+#notify.0=beep
+#notify.0=my_play /home/gb/sounds/new_mail_has_arrived.wav
+
+# Don't want any global notification for this mailbox
+notify.0=true
+
+# Command, which executed on left mouse click on label
+action.0=rxvt -name mutt -e mutt
+
+# Rescan interval; default to global interval
+# For POP3-accounts bigger values (>60sec) is recommended
+#interval.0=5
+
+# Interval between mail auto-fetching; use 0 for disable (only
+# mouse right-clicking still worked)
+# use -1 for auto-fetching on new mail arrival
+#fetchinterval.0=300
+
+# Command, which used for fetching mail. Leave commented out for full disable
+#fetchcmd.0=/usr/bin/fetchmail
+
+###
+# NOTE: line under this line will not be parsed because the space before equal
+label.1 = MBOX
+# MBOX format: mbox:fullpathname
+path.1=mbox:/home/gb/mail/10_ksi-linux-list
+#notify.1=my_play /home/gb/sounds/new_mail_has_arrived.wav
+action.1=rxvt -name mutt -e mutt -f /home/gb/mail/10_ksi-linux-list
+
+# label.1 = MDIR
+# # Maildir format: maildir:fullpathname
+# path.1=maildir:/home/gb/Maildir/
+# notify.1=my_play /home/gb/sounds/new_mail_has_arrived.wav
+# action.1=rxvt -name mutt -e mutt -f /home/gb/Maildir
+
+#or if you use gnomeicu:
+#label.2=ICQ
+#path.2=gicu:USER_UIN
+#notify.2=beep
+#action.2=gnomeicu-client show
+
+label.3=POP3
+# pop3 format: pop3:user:password at server[:port] [auth]
+path.3=pop3:user:password at server apop
+#notify.3=my_play /home/gb/sounds/new_mail_has_arrived.wav
+action.3=rxvt -name mutt -e mutt -f /home/gb/mail/30_nftp-list
+interval.3=300 # 5 minutes
+fetchinterval.3=-1
+fetchcmd.3=fetchmail
+
+label.4=IMAP4
+# IMAP4 format: imap:user:password at server[/mailbox][:port] [auth]
+# mailbox is optional, default - INBOX
+# password is optional, default - ask using the askpass config
+# port is optional, default - 143
+path.4=imap:user:password at server
+interval.4=300 # 5 minutes
+
+# label.4=IMAPS
+# Secure IMAP format: imaps:user:password at server[/mailbox][:port] [auth]
+# mailbox is optional, default - INBOX
+# password is optional, default - ask using the askpass config
+# port is optional, default - 993
+# path.4=imaps:user:password at server cram-md5
+# interval.4=300 # 5 minutes
+
+# Shell expansion. (can't be nested.)
+# path.4=mbox:/home/me/Mail/`ls -t1 /home/me/Mail/list-archive-* | head -1`
+# label.4=tick
+
+# Shell method
+# path.4=shell:::lpq | grep Queue | awk '{print $2}'
+
+# To check for security updates in debian
+path.4=shell:::/usr/lib/wmbiff/security.debian.rb
+
+# Ways wmbiff can drive MAC OS X Mail using AppleScript.
+# action.0 = osascript -e 'tell application "Mail"' -e 'set selected mailboxes of first message viewer to {mailbox "in-grads" of imap account "me at myaccount.org"}' -e 'activate' -e 'end tell'
+# action.1 = osascript -e 'tell application "Mail"' -e 'set selected mailboxes of first message viewer to {inbox}' -e 'activate' -e 'end tell'
diff --git a/wmbiff/socket.c b/wmbiff/socket.c
new file mode 100644
index 0000000..b83bb1b
--- /dev/null
+++ b/wmbiff/socket.c
@@ -0,0 +1,180 @@
+/* $Id: socket.c,v 1.14 2004/10/01 21:05:36 bluehal Exp $ */
+/* Copyright (C) 1998 Trent Piepho <xyzzy at u.washington.edu>
+ * (C) 1999 Trent Piepho <xyzzy at speakeasy.org>
+ *
+ * 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; version 2 of the License.
+ *
+ * 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., 675
+ * Mass Ave, Cambridge, MA 02139, USA. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <errno.h>
+#include <string.h>
+#include <netdb.h>
+#include <stdio.h>
+#include "regulo.h"
+
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+/* be paranoid about leaking passwords as hostnames, enough
+ that we'll avoid attempting lookups on things that aren't
+ host names */
+extern int Relax;
+static int sanity_check_hostname(const char *hostname)
+{
+ struct in_addr dummy;
+ return (Relax
+ || regulo_match("^[A-Za-z][-_A-Za-z0-9.]+$", hostname, NULL)
+ || inet_aton(hostname, &dummy));
+}
+
+static int ipv4_sock_connect(struct in_addr *address, short port)
+{
+ struct sockaddr_in addr;
+ int fd, i;
+ fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+ if (fd == -1) {
+ perror("Error opening socket");
+ printf("socket() failed.\n");
+ return (-1);
+ };
+
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = *(u_long *) address;
+ addr.sin_port = htons(port);
+ i = connect(fd, (struct sockaddr *) &addr, sizeof(struct sockaddr));
+ if (i == -1) {
+ int saved_errno = errno;
+ perror("Error connecting");
+ printf("connect(%s:%d) failed: %s\n", inet_ntoa(addr.sin_addr),
+ port, strerror(saved_errno));
+ close(fd);
+ return (-1);
+ };
+ return (fd);
+}
+
+/* nspring/blueHal, 10 Apr 2002; added some extra error
+ printing, in line with the debug-messages-to-stdout
+ philosophy of the rest of the wmbiff code */
+/* 1 June 2002; incorporated IPv6 support by
+ Jun-ichiro itojun Hagino <itojun at iijlab.net>, thanks! */
+
+int sock_connect(const char *hostname, int port)
+{
+#ifdef HAVE_GETADDRINFO
+ struct addrinfo hints, *res, *res0;
+ struct sockaddr_in addr;
+ int fd;
+ char pbuf[NI_MAXSERV];
+ int error;
+
+ if (!sanity_check_hostname(hostname)) {
+ printf
+ ("socket/connect to '%s' aborted: it does not appear to be a valid hostname\n",
+ hostname);
+ printf("if you really want this, use wmbiff's -relax option.\n");
+ return -1;
+ }
+
+ /* we were given an IP address, no need to try getaddrinfo on it */
+ if (inet_aton(hostname, &addr.sin_addr)) {
+ return ipv4_sock_connect(&addr.sin_addr, port);
+ }
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+ snprintf(pbuf, sizeof(pbuf), "%d", port);
+ error = getaddrinfo(hostname, pbuf, &hints, &res0);
+ if (error) {
+ static int last_error;
+ if (last_error != error) {
+ /* only report a problem if it's new. this is an
+ approximation that minimizes kept state. */
+ printf("%s: %s\n", hostname, gai_strerror(error));
+ last_error = error;
+ }
+ return -1;
+ }
+
+ fd = -1;
+ for (res = res0; res; res = res->ai_next) {
+ fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (fd < 0)
+ continue;
+ if (connect(fd, res->ai_addr, res->ai_addrlen) < 0) {
+ close(fd);
+ fd = -1;
+ continue;
+ }
+ break;
+ }
+ freeaddrinfo(res0);
+ if (fd < 0) {
+ static int last_connecterr;
+ if (errno != last_connecterr) {
+ /* only report a problem if it's new.
+ EHOSTUNREACH is common when the net is down,
+ for example; again, this is an approximation
+ to minimize kept state. */
+ last_connecterr = errno;
+ fprintf(stderr, "Error connecting to %s:%d: %s\n",
+ hostname, port, strerror(errno));
+ printf("socket/connect to %s failed: %s (%d)\n", hostname,
+ strerror(errno), errno);
+ }
+ return -1;
+ }
+ return fd;
+#else
+#warning "This build will not support IPv6"
+ struct hostent *host;
+
+ if (!sanity_check_hostname(hostname)) {
+ printf
+ ("socket/connect to '%s' aborted: it does not appear to be a valid hostname\n",
+ hostname);
+ printf("if you really want this, use wmbiff's -relax option.\n");
+ return -1;
+ }
+
+ host = gethostbyname(hostname);
+ if (host == NULL) {
+ herror("gethostbyname");
+ printf("gethostbyname(%s) failed.\n", hostname);
+ return (-1);
+ };
+
+ return ipv4_sock_connect(host->h_addr_list[0], port);
+
+#endif
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/test_tlscomm.c b/wmbiff/test_tlscomm.c
new file mode 100644
index 0000000..35da322
--- /dev/null
+++ b/wmbiff/test_tlscomm.c
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+int debug_default = 2;
+int SkipCertificateCheck = 0;
+const char *certificate_filename = NULL;
+int exists(const char *filename __attribute__ ((unused)))
+{
+ return (0);
+}
+void ProcessPendingEvents(void)
+{
+ return;
+}
+
+int x_socket(void)
+{
+ return (0);
+}
+
+int print_info(void *state __attribute__((unused)))
+{
+ return (0);
+}
+
+int Relax = 1;
+
+
+int indices[12];
+const char *sequence[][4] = {
+ {NULL, NULL, NULL, NULL},
+ {"prefix", " hello", NULL},
+ {"pre", "fix", " hello", NULL},
+ {"\r\n", ")\r\n", "prefix", NULL},
+ {NULL, NULL, NULL, NULL},
+};
+
+/* trick tlscomm into believing it can read. */
+ssize_t read(int s, void *buf, size_t buflen)
+{
+ int val = indices[s]++;
+
+ if (sequence[s][val] == NULL) {
+ indices[s]--; /* make it stay */
+ return 0;
+ } else {
+ strncpy(buf, sequence[s][val], buflen);
+ printf("read: %s\n", sequence[s][val]);
+ return (strlen(sequence[s][val]));
+ }
+}
+
+int
+select(int nfds, fd_set * r,
+ fd_set * w __attribute__ ((unused)),
+ fd_set * x __attribute__ ((unused)),
+ struct timeval *tv __attribute__ ((unused)))
+{
+ int i;
+ int ready = 0;
+ for (i = 0; i < nfds; i++) {
+ if (FD_ISSET(i, r) && sequence[i][indices[i]] != NULL) {
+ ready++;
+ } else {
+ FD_CLR(i, r);
+ }
+ }
+ if (ready == 0) {
+ printf("botched.\n");
+ }
+ return ready;
+}
+
+#define BUF_SIZE 1024
+
+struct connection_state {
+ int sd;
+ char *name;
+ /*@null@ */ void *tls_state;
+ /*@null@ */ void *xcred;
+ char unprocessed[BUF_SIZE];
+ void *pc; /* mailbox handle for debugging messages */
+};
+
+int
+main(int argc __attribute__ ((unused)), char **argv
+ __attribute__ ((unused)))
+{
+ char buf[255];
+ struct connection_state scs;
+ scs.name = strdup("test");
+ scs.unprocessed[0] = '\0';
+ scs.pc = NULL;
+ scs.tls_state = NULL;
+ scs.xcred = NULL;
+ alarm(10);
+
+ for (scs.sd = 1; sequence[scs.sd][0] != NULL; scs.sd++) {
+ memset(scs.unprocessed, 0, BUF_SIZE);
+ printf("%d\n", tlscomm_expect(&scs, "prefix", buf, 255));
+ }
+ return 0;
+
+}
diff --git a/wmbiff/test_wmbiff.c b/wmbiff/test_wmbiff.c
new file mode 100644
index 0000000..10ffea5
--- /dev/null
+++ b/wmbiff/test_wmbiff.c
@@ -0,0 +1,468 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE___ATTRIBUTE__
+#define UNUSED(x) /*@unused@*/ x __attribute__((unused))
+#else
+#define UNUSED(x) x
+#endif
+
+#ifdef HAVE_MEMFROB
+#define DEFROB(x) memfrob(x, x ## _len)
+#define ENFROB(x) memfrob(x, x ## _len)
+#else
+#define DEFROB(x)
+#define ENFROB(x)
+#endif
+
+#include <unistd.h>
+
+#include "Client.h"
+#include "passwordMgr.h"
+#include "tlsComm.h"
+#include "charutil.h"
+
+void ProcessPendingEvents(void)
+{
+ return;
+}
+
+int x_socket(void)
+{
+ return (0);
+}
+
+int debug_default = DEBUG_INFO;
+int Relax = 1;
+
+/* return 1 if fail, 0 if success */
+int test_backtickExpand(void)
+{
+ const char *tests[] = { "prefix`echo 1`suffix",
+ "prefix`echo 1`",
+ "`echo 1`",
+ "`echo a b` c",
+ "`false`",
+ NULL
+ };
+ const char *solns[] = { "prefix1suffix",
+ "prefix1",
+ "1",
+ "a b c",
+ "",
+ NULL
+ };
+ int i;
+ int retval = 0;
+ for (i = 0; tests[i] != NULL; i++) {
+ char *x = backtickExpand(NULL, tests[i]);
+ if (strcmp(x, solns[i]) != 0) {
+ printf("test failed: [%s] != [%s]\n", tests[i], solns[i]);
+ retval = 1;
+ }
+ free(x);
+ }
+ printf("backtick tests complete\n");
+ return (retval);
+}
+
+#define CKSTRING(x,shouldbe) if(strcmp(x,shouldbe)) { \
+printf("FAILED: expected '" #shouldbe "' but got '%s'\n", x); \
+ return 1; } else { printf("good: '" shouldbe "' == '%s'\n", x); }
+
+/* return 1 if fail, 0 if success */
+int test_passwordMgr(void)
+{
+ const char *b;
+ mbox_t m;
+ strcpy(m.label, "x");
+
+ /* sh is almost certainly conforming; owned by root, etc. */
+ if (!permissions_ok(NULL, "/bin/sh")) {
+ printf("FAILURE: permission checker failed on /bin/sh.");
+ return (1);
+ }
+ /* tmp is definitely bad; and better be og+w */
+ if (permissions_ok(NULL, "/tmp")) {
+ printf("FAILURE: permission checker failed on /tmp.");
+ return (1);
+ }
+ /* TODO: also find some user-owned binary that shouldn't be g+w */
+ printf("SUCCESS: permission checker sanity check went well.\n");
+
+ /* *** */
+ m.askpass = "echo xlnt; #";
+
+ b = passwordFor("bill", "ted", &m, 0);
+ if (strcmp(b, "xlnt") != 0) {
+ printf("FAILURE: expected 'xlnt' got '%s'\n", b);
+ return (1);
+ }
+ printf("SUCCESS: expected 'xlnt' got '%s'\n", b);
+
+ /* *** */
+ m.askpass = "should be cached";
+ b = passwordFor("bill", "ted", &m, 0);
+ if (strcmp(b, "xlnt") != 0) {
+ printf("FAILURE: expected 'xlnt' got '%s'\n", b);
+ return (1);
+ }
+
+ printf("SUCCESS: cached 'xlnt' correctly\n");
+
+ /* *** */
+ m.askpass = "echo abcdefghi1abcdefghi2abcdefghi3a; #";
+
+ b = passwordFor("abbot", "costello", &m, 0);
+ if (strcmp(b, "abcdefghi1abcdefghi2abcdefghi3a") != 0) {
+ printf
+ ("FAILURE: expected 'abcdefghi1abcdefghi2abcdefghi3a' got '%s'\n",
+ b);
+ return (1);
+ }
+ printf
+ ("SUCCESS: expected 'abcdefghi1abcdefghi2abcdefghi3a' got '%s'\n",
+ b);
+
+ /* try overflowing the buffer */
+ m.askpass = "echo abcdefghi1abcdefghi2abcdefghi3ab; #";
+ b = passwordFor("laverne", "shirley", &m, 0);
+ /* should come back truncated to fill the buffer */
+ if (strcmp(b, "abcdefghi1abcdefghi2abcdefghi3a") != 0) {
+ printf
+ ("FAILURE: expected 'abcdefghi1abcdefghi2abcdefghi3a' got '%s'\n",
+ b);
+ return (1);
+ }
+ printf
+ ("SUCCESS: expected 'abcdefghi1abcdefghi2abcdefghi3a' got '%s'\n",
+ b);
+
+ /* make sure we still have the old one */
+ b = passwordFor("bill", "ted", &m, 0);
+ if (strcmp(b, "xlnt") != 0) {
+ printf("FAILURE: expected 'xlnt' got '%s'\n", b);
+ return (1);
+ }
+ printf("SUCCESS: expected 'xlnt' got '%s'\n", b);
+
+ /* what it's like if ssh-askpass is cancelled - should drop the mailbox */
+#if 0
+ /* will exit on our behalf; not so good for continued testing. */
+ m.askpass = "echo -n ; #";
+ b = passwordFor("abort", "me", &m, 0);
+ if (strcmp(b, "") != 0) {
+ printf("FAILURE: expected '' got '%s'\n", b);
+ return (1);
+ }
+ printf("SUCCESS: expected '' got '%s'\n", b);
+#endif
+
+ /* what it's like if ssh-askpass is ok'd with an empty password. */
+ m.askpass = "echo ; #";
+ b = passwordFor("try", "again", &m, 0);
+ if (b == NULL || strcmp(b, "") != 0) {
+ printf("FAILURE: expected '' got '%s'\n", b ? b : "(null)");
+ return (1);
+ }
+ printf("SUCCESS: expected '' got '%s'\n", b);
+
+ m.askpass = "echo \"rt*m\"; #";
+ b = passwordFor("faq", "faq", &m, 0);
+ if (strcmp(b, "rt*m") != 0) {
+ printf("FAILURE: expected '' got '%s'\n", b);
+ return (1);
+ }
+ printf("SUCCESS: expected 'rt*m' got '%s'\n", b);
+ return (0);
+}
+
+#define CKINT(x,shouldbe) if(x != shouldbe) { \
+printf("Failed: expected '" #shouldbe "' but got '%d'\n", x); \
+ return 1; }
+int test_imap4creator(void)
+{
+ mbox_t m;
+
+ if (imap4Create(&m, "imap:foo:@bar/mybox")) {
+ return 1;
+ }
+ CKSTRING(m.path, "mybox");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:foo:@bar/\"mybox\"")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"mybox\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:foo:@192.168.1.1/\"mybox\"")) {
+ printf
+ ("FAILED: to create IMAP box with IP address for servername\n");
+ return 1;
+ }
+ CKSTRING(m.path, "\"mybox\"");
+ CKSTRING(m.u.pop_imap.serverName, "192.168.1.1");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:foo:@bar/\"space box\"")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"space box\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:user pass bar/\"space box\"")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"space box\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:star *as* star/\"space box\"")) {
+ return 1;
+ }
+ printf("mmm %s", (m.u.pop_imap.password));
+ DEFROB(m.u.pop_imap.password);
+ CKSTRING(m.u.pop_imap.password, "*as*");
+ CKINT(m.u.pop_imap.serverPort, 143);
+ if (imap4Create(&m, "imap:user:*as*@bar/blah")) {
+ return 1;
+ }
+
+ DEFROB(m.u.pop_imap.password);
+ CKSTRING(m.u.pop_imap.password, "*as*");
+ CKINT(m.u.pop_imap.serverPort, 143);
+
+ if (imap4Create(&m, "imap:user pass bar/\"space box\" 12")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"space box\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 12);
+
+ if (imap4Create(&m, "imap:foo:@bar/\"mybox\":12")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"mybox\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 12);
+
+ if (imap4Create(&m, "imap:foo:@bar/\"mybox\":12 auth")) {
+ return 1;
+ }
+ CKSTRING(m.path, "\"mybox\"");
+ CKSTRING(m.u.pop_imap.serverName, "bar");
+ CKINT(m.u.pop_imap.serverPort, 12);
+ CKSTRING(m.u.pop_imap.authList, "auth");
+
+ if (imap4Create(&m, "imap:foo:@bar/\"mybox\":12 cram-md5 plaintext")) {
+ return 1;
+ }
+ CKSTRING(m.u.pop_imap.authList, "cram-md5 plaintext");
+
+ if (imap4Create(&m, "imap:foo:@bar/\"mybox\":12 CRAm-md5 plainTEXt")) {
+ return 1;
+ }
+ CKSTRING(m.u.pop_imap.authList, "cram-md5 plaintext");
+
+ /* doesn't really matter, as the # is gobbled by the parser as a comment. */
+ if (imap4Create
+ (&m, "imap:harry:has#pass at bar/\"mybox\":12 CRAm-md5 plainTEXt")) {
+ return 1;
+ }
+ CKSTRING(m.u.pop_imap.userName, "harry");
+ DEFROB(m.u.pop_imap.password);
+ CKSTRING(m.u.pop_imap.password, "has#pass");
+
+
+ if (pop3Create(&m, "pop3:foo:@bar:12 cram-md5 plaintext")) {
+ return 1;
+ }
+ CKSTRING(m.u.pop_imap.authList, "cram-md5 plaintext");
+
+ /* should not parse this; it is ambiguous. */
+ if (!imap4Create(&m, "imap:foo:mi at ta@bar/mybox") && !Relax) {
+ return 1;
+ }
+
+ /* should not parse this; it is ambiguous. */
+ if (!imap4Create(&m, "imap:user pa ss bar/\"space box\" 12") && !Relax) {
+ return 1;
+ }
+
+ /* should not parse this; it is ambiguous. */
+ if (!pop3Create(&m, "pop3:user pa ss bar 12") && !Relax) {
+ return 1;
+ }
+
+ return 0;
+}
+
+
+int test_getline_from_buffer(void)
+{
+#define LINE_BUF_LEN 256
+ char linebuf[LINE_BUF_LEN];
+ char scratchbuf[LINE_BUF_LEN];
+
+ /* try to ensure that even an endless loop terminates */
+ alarm(100);
+ strcpy(scratchbuf, "\r\n");
+ getline_from_buffer(scratchbuf, linebuf, LINE_BUF_LEN);
+ if (strlen(scratchbuf) != 0) {
+ printf("FAILURE: scratchbuf not snarfed\n");
+ return (1);
+ }
+ if (strlen(linebuf) != 2) {
+ printf("FAILURE: linebuf not populated\n");
+ return (1);
+ }
+ strcpy(scratchbuf, "\n");
+ getline_from_buffer(scratchbuf, linebuf, LINE_BUF_LEN);
+ if (strlen(scratchbuf) != 0) {
+ printf("FAILURE: scratchbuf not snarfed\n");
+ return (1);
+ }
+ if (strlen(linebuf) != 1) {
+ printf("FAILURE: linebuf not populated\n");
+ return (1);
+ }
+
+ alarm(0);
+ return (0);
+}
+
+int test_charutil(void)
+{
+
+ char *v = strdup("abc#def");
+
+ StripComment(v);
+ if (strcmp(v, "abc#def") != 0) {
+ printf("FAILURE: comment stripper stripped when it shouldn't\n");
+ return 1;
+ }
+
+ v = strdup("abc #def");
+
+ StripComment(v);
+ if (strcmp(v, "abc ") != 0) {
+ printf("FAILURE: comment stripper should've stripped\n");
+ return 1;
+ }
+
+
+ return 0;
+}
+
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+int test_sock_connect(void)
+{
+ struct sockaddr_in addr;
+ int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ int addrlen = sizeof(struct sockaddr_in);
+ if (s < 0) {
+ perror("socket");
+ return 1;
+ }
+ addr.sin_family = AF_INET;
+ addr.sin_addr.s_addr = 0;
+ addr.sin_port = 0;
+ if (bind(s, (const struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0) {
+ perror("bind");
+ return 1;
+ }
+ getsockname(s, (struct sockaddr *)&addr, &addrlen);
+ if (listen(s, 5) < 0) {
+ perror("listen");
+ return 1;
+ }
+ if (sock_connect("127.0.0.1", htons(addr.sin_port)) < 0) {
+ return 1;
+ }
+ if (sock_connect("localhost", htons(addr.sin_port)) < 0) {
+ return 1;
+ }
+ return 0;
+}
+
+
+int print_info(UNUSED(void *state))
+{
+ return (0);
+}
+const char *certificate_filename = NULL;
+int SkipCertificateCheck = 0;
+int exists(UNUSED(const char *filename))
+{
+ return (0);
+}
+
+
+// void initialize_blacklist(void) { }
+// void tlscomm_printf(UNUSED(int x), UNUSED(const char *f), ...) { }
+// void tlscomm_expect(void) { }
+// void tlscomm_close() { }
+// int tlscomm_is_blacklisted(UNUSED(const char *x)) { return 1; }
+// void initialize_gnutls(void) { }
+// int sock_connect(UNUSED(const char *n), UNUSED(int p)) { return 1; } /* stdout */
+// void initialize_unencrypted(void) { }
+
+int main(UNUSED(int argc), UNUSED(char *argv[]))
+{
+
+ if (test_backtickExpand() || test_passwordMgr()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ Relax = 0;
+ if (test_imap4creator()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (test_sock_connect()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ Relax = 1;
+ if (test_imap4creator()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (test_getline_from_buffer()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (test_charutil()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (test_sock_connect()) {
+ printf("SOME TESTS FAILED!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ printf("Success! on all tests.\n");
+ exit(EXIT_SUCCESS);
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/tlsComm.c b/wmbiff/tlsComm.c
new file mode 100644
index 0000000..f4896fe
--- /dev/null
+++ b/wmbiff/tlsComm.c
@@ -0,0 +1,697 @@
+/* tlsComm.c - primitive routines to aid TLS communication
+ within wmbiff, without rewriting each mailbox access
+ scheme. These functions hide whether the underlying
+ transport is encrypted.
+
+ Neil Spring (nspring at cs.washington.edu) */
+
+/* TODO: handle "* BYE" internally? */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdarg.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+#ifdef HAVE_GNUTLS_GNUTLS_H
+#define USE_GNUTLS
+#include <gnutls/gnutls.h>
+#include <gnutls/x509.h>
+#include <sys/stat.h>
+#endif
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+#include "tlsComm.h"
+
+#include "Client.h" /* debugging messages */
+
+/* if non-null, set to a file for certificate verification */
+extern const char *certificate_filename;
+/* if set, don't fail when dealing with a bad certificate.
+ (continue to whine, though, as bad certs should be fixed) */
+extern int SkipCertificateCheck;
+
+/* WARNING: implcitly uses scs to gain access to the mailbox
+ that holds the per-mailbox debug flag. */
+#define TDM(lvl, args...) DM(scs->pc, lvl, "comm: " args)
+
+/* how long to wait for the server to do its thing
+ when we issue it a command (in seconds) */
+#define EXPECT_TIMEOUT 40
+
+/* this is the per-connection state that is maintained for
+ each connection; BIG variables are for ssl (null if not
+ used). */
+#define BUF_SIZE 1024
+struct connection_state {
+ int sd;
+ char *name;
+#ifdef USE_GNUTLS
+ gnutls_session tls_state;
+ gnutls_certificate_credentials xcred;
+#else
+ /*@null@ */ void *tls_state;
+ /*@null@ */ void *xcred;
+#endif
+ char unprocessed[BUF_SIZE];
+ Pop3 pc; /* mailbox handle for debugging messages */
+};
+
+/* gotta do our own line buffering, sigh */
+int getline_from_buffer(char *readbuffer, char *linebuffer,
+ int linebuflen);
+void handle_gnutls_read_error(int readbytes, struct connection_state *scs);
+
+void tlscomm_close(struct connection_state *scs)
+{
+ TDM(DEBUG_INFO, "%s: closing.\n",
+ (scs->name != NULL) ? scs->name : "null");
+
+ /* not ok to call this more than once */
+ if (scs->tls_state) {
+#ifdef USE_GNUTLS
+ /* this next line seems capable of hanging... */
+ /* gnutls_bye(scs->tls_state, GNUTLS_SHUT_RDWR); */
+ /* so we'll try just _bye'ing the WR direction, which
+ should send the alert but not wait for a response. */
+ gnutls_bye(scs->tls_state, GNUTLS_SHUT_WR);
+ gnutls_certificate_free_credentials(scs->xcred);
+ gnutls_deinit(scs->tls_state);
+ scs->xcred = NULL;
+#endif
+ } else {
+ (void) close(scs->sd);
+ }
+ scs->sd = -1;
+ scs->tls_state = NULL;
+ scs->xcred = NULL;
+ free(scs->name);
+ scs->name = NULL;
+ free(scs);
+}
+
+extern int x_socket(void);
+extern void ProcessPendingEvents(void);
+
+/* this avoids blocking without using non-blocking i/o */
+static int wait_for_it(int sd, int timeoutseconds)
+{
+ fd_set readfds;
+ struct timeval tv;
+ int ready_descriptors;
+ int maxfd;
+ int xfd;
+ struct timeval time_now;
+ struct timeval time_out;
+
+ gettimeofday(&time_now, NULL);
+ memcpy(&time_out, &time_now, sizeof(struct timeval));
+ time_out.tv_sec += timeoutseconds;
+
+ xfd = x_socket();
+ maxfd = max(sd, xfd);
+
+ do {
+ do {
+ ProcessPendingEvents();
+
+ gettimeofday(&time_now, NULL);
+ tv.tv_sec = max(time_out.tv_sec - time_now.tv_sec + 1, 0); /* sloppy, but bfd */
+ tv.tv_usec = 0;
+ /* select will return if we have X stuff or we have comm stuff on sd */
+ FD_ZERO(&readfds);
+ FD_SET(sd, &readfds);
+ // FD_SET(xfd, &readfds);
+ ready_descriptors = select(maxfd + 1, &readfds, NULL, NULL, &tv);
+ // DMA(DEBUG_INFO,
+ // "select %d/%d returned %d descriptor, %d\n",
+ // sd, timeoutseconds, ready_descriptors, FD_ISSET(sd, &readfds));
+
+ } while(tv.tv_sec > 0 && (!FD_ISSET(sd, &readfds) || (errno == EINTR && ready_descriptors == -1)));
+
+ FD_ZERO(&readfds);
+ FD_SET(sd, &readfds);
+ tv.tv_sec = 0; tv.tv_usec = 0;
+ ready_descriptors = select(sd + 1, &readfds, NULL, NULL, &tv);
+ }
+ while (ready_descriptors == -1 && errno == EINTR);
+ if (ready_descriptors == 0) {
+ DMA(DEBUG_INFO,
+ "select timed out after %d seconds on socket: %d\n",
+ timeoutseconds, sd);
+ return (0);
+ } else if (ready_descriptors == -1) {
+ DMA(DEBUG_ERROR,
+ "select failed on socket %d: %s\n", sd, strerror(errno));
+ return (0);
+ }
+ return (FD_ISSET(sd, &readfds));
+}
+
+/* exported for testing */
+extern int
+getline_from_buffer(char *readbuffer, char *linebuffer, int linebuflen)
+{
+ char *p, *q;
+ int i;
+ /* find end of line (stopping if linebuflen is too small. */
+ for (p = readbuffer, i = 0;
+ *p != '\n' && *p != '\0' && i < linebuflen - 1; p++, i++);
+
+ /* gobble \n if it starts the line. */
+ if (*p == '\n') {
+ /* grab the end of line too! and then advance past
+ the newline */
+ i++;
+ p++;
+ } else {
+ /* TODO -- perhaps we should return no line at all
+ here, as it might be incomplete. don't want to
+ break anything though. */
+ DMA(DEBUG_INFO, "expected line doesn't end on its own.\n");
+ }
+
+ if (i != 0) {
+ /* copy a line into the linebuffer */
+ strncpy(linebuffer, readbuffer, (size_t) i);
+ /* sigh, null terminate */
+ linebuffer[i] = '\0';
+ /* shift the rest over; this could be done
+ instead with strcpy... I think. */
+ q = readbuffer;
+ if (*p != '\0') {
+ while (*p != '\0') {
+ *(q++) = *(p++);
+ }
+ }
+ /* null terminate */
+ *(q++) = *(p++);
+ /* return the length of the line */
+ }
+ if (i < 0 || i > linebuflen) {
+ DM((Pop3) NULL, DEBUG_ERROR, "bork bork bork!: %d %d\n", i,
+ linebuflen);
+ }
+ return i;
+}
+
+/* eat lines, until one starting with prefix is found;
+ this skips 'informational' IMAP responses */
+/* the correct response to a return value of 0 is almost
+ certainly tlscomm_close(scs): don't _expect() anything
+ unless anything else would represent failure */
+int
+tlscomm_expect(struct connection_state *scs,
+ const char *prefix, char *linebuf, int buflen)
+{
+ int prefixlen = (int) strlen(prefix);
+ int buffered_bytes = 0;
+ memset(linebuf, 0, buflen);
+ TDM(DEBUG_INFO, "%s: expecting: %s\n", scs->name, prefix);
+ /* if(scs->unprocessed[0]) {
+ TDM(DEBUG_INFO, "%s: buffered: %s\n", scs->name, scs->unprocessed);
+ } */
+ while (scs->unprocessed[0] != '\0'
+ || wait_for_it(scs->sd, EXPECT_TIMEOUT)) {
+ if (scs->unprocessed[buffered_bytes] == '\0') {
+ int thisreadbytes;
+#ifdef USE_GNUTLS
+ if (scs->tls_state) {
+ /* BUF_SIZE - 1 leaves room for trailing \0 */
+ thisreadbytes =
+ gnutls_read(scs->tls_state,
+ &scs->unprocessed[buffered_bytes],
+ BUF_SIZE - 1 - buffered_bytes);
+ if (thisreadbytes < 0) {
+ handle_gnutls_read_error(thisreadbytes, scs);
+ return 0;
+ }
+ } else
+#endif
+ {
+ thisreadbytes =
+ read(scs->sd, &scs->unprocessed[buffered_bytes],
+ BUF_SIZE - 1 - buffered_bytes);
+ if (thisreadbytes < 0) {
+ TDM(DEBUG_ERROR, "%s: error reading: %s\n",
+ scs->name, strerror(errno));
+ return 0;
+ }
+ }
+ buffered_bytes += thisreadbytes;
+ /* force null termination */
+ scs->unprocessed[buffered_bytes] = '\0';
+ if (buffered_bytes == 0) {
+ return 0; /* bummer */
+ }
+ } else {
+ buffered_bytes = strlen(scs->unprocessed);
+ }
+ while (buffered_bytes >= prefixlen) {
+ int linebytes;
+ linebytes =
+ getline_from_buffer(scs->unprocessed, linebuf, buflen);
+ if (linebytes == 0) {
+ buffered_bytes = 0;
+ } else {
+ buffered_bytes -= linebytes;
+ if (strncmp(linebuf, prefix, prefixlen) == 0) {
+ TDM(DEBUG_INFO, "%s: got: %*s", scs->name,
+ linebytes, linebuf);
+ return 1; /* got it! */
+ }
+ TDM(DEBUG_INFO, "%s: dumped(%d/%d): %.*s", scs->name,
+ linebytes, buffered_bytes, linebytes, linebuf);
+ }
+ }
+ }
+ if (buffered_bytes == -1) {
+ TDM(DEBUG_INFO, "%s: timed out while expecting '%s'\n",
+ scs->name, prefix);
+ } else {
+ TDM(DEBUG_ERROR, "%s: expecting: '%s', saw (%d): %s%s",
+ scs->name, prefix, buffered_bytes, linebuf,
+ /* only print the newline if the linebuf lacks it */
+ (linebuf[strlen(linebuf) - 1] == '\n') ? "\n" : "");
+ }
+ return 0; /* wait_for_it failed */
+}
+
+int tlscomm_gets(char *buf, int buflen, struct connection_state *scs)
+{
+ return (tlscomm_expect(scs, "", buf, buflen));
+}
+
+void tlscomm_printf(struct connection_state *scs, const char *format, ...)
+{
+ va_list args;
+ char buf[1024];
+ int bytes;
+
+ if (scs == NULL) {
+ DMA(DEBUG_ERROR, "null connection to tlscomm_printf\n");
+ abort();
+ }
+ va_start(args, format);
+ bytes = vsnprintf(buf, 1024, format, args);
+ va_end(args);
+
+ if (scs->sd != -1) {
+#ifdef USE_GNUTLS
+ if (scs->tls_state) {
+ int written = gnutls_write(scs->tls_state, buf, bytes);
+ if (written < bytes) {
+ TDM(DEBUG_ERROR,
+ "Error %s prevented writing: %*s\n",
+ gnutls_strerror(written), bytes, buf);
+ return;
+ }
+ } else
+#endif
+ (void) write(scs->sd, buf, bytes);
+ } else {
+ printf
+ ("warning: tlscomm_printf called with an invalid socket descriptor\n");
+ return;
+ }
+ TDM(DEBUG_INFO, "wrote %*s", bytes, buf);
+}
+
+/* most of this file only makes sense if using TLS. */
+#ifdef USE_GNUTLS
+#include "gnutls-common.h"
+
+static void
+bad_certificate(const struct connection_state *scs, const char *msg)
+{
+ TDM(DEBUG_ERROR, "%s", msg);
+ if (!SkipCertificateCheck) {
+ TDM(DEBUG_ERROR, "to ignore this error, run wmbiff "
+ "with the -skip-certificate-check option\n");
+ exit(1);
+ }
+}
+
+/* a start of a hack at verifying certificates. does not
+ provide any security at all. I'm waiting for either
+ gnutls to make this as easy as it should be, or someone
+ to port Andrew McDonald's gnutls-for-mutt patch.
+*/
+
+#define CERT_SEP "-----BEGIN"
+
+/* this bit is based on read_ca_file() in gnutls */
+static int tls_compare_certificates(const gnutls_datum * peercert)
+{
+ gnutls_datum cert;
+ unsigned char *ptr;
+ FILE *fd1;
+ int ret;
+ gnutls_datum b64_data;
+ unsigned char *b64_data_data;
+ struct stat filestat;
+
+ if (stat(certificate_filename, &filestat) == -1)
+ return 0;
+
+ b64_data.size = filestat.st_size + 1;
+ b64_data_data = (unsigned char *) malloc(b64_data.size);
+ b64_data_data[b64_data.size - 1] = '\0';
+ b64_data.data = b64_data_data;
+
+ fd1 = fopen(certificate_filename, "r");
+ if (fd1 == NULL) {
+ return 0;
+ }
+
+ b64_data.size = fread(b64_data.data, 1, b64_data.size, fd1);
+ fclose(fd1);
+
+ do {
+ ret = gnutls_pem_base64_decode_alloc(NULL, &b64_data, &cert);
+ if (ret != 0) {
+ free(b64_data_data);
+ return 0;
+ }
+
+ ptr = (unsigned char *) strstr(b64_data.data, CERT_SEP) + 1;
+ ptr = (unsigned char *) strstr(ptr, CERT_SEP);
+
+ b64_data.size = b64_data.size - (ptr - b64_data.data);
+ b64_data.data = ptr;
+
+ if (cert.size == peercert->size) {
+ if (memcmp(cert.data, peercert->data, cert.size) == 0) {
+ /* match found */
+ gnutls_free(cert.data);
+ free(b64_data_data);
+ return 1;
+ }
+ }
+
+ gnutls_free(cert.data);
+ } while (ptr != NULL);
+
+ /* no match found */
+ free(b64_data_data);
+ return 0;
+}
+
+
+static void
+tls_check_certificate(struct connection_state *scs,
+ const char *remote_hostname)
+{
+ int certstat;
+ const gnutls_datum *cert_list;
+ int cert_list_size = 0;
+ gnutls_x509_crt cert;
+
+ if (gnutls_auth_get_type(scs->tls_state) != GNUTLS_CRD_CERTIFICATE) {
+ bad_certificate(scs, "Unable to get certificate from peer.\n");
+ return; /* bad_cert will exit if -skip-certificate-check was not given */
+ }
+ certstat = gnutls_certificate_verify_peers(scs->tls_state);
+ if (certstat == GNUTLS_E_NO_CERTIFICATE_FOUND) {
+ bad_certificate(scs, "server presented no certificate.\n");
+#ifdef GNUTLS_CERT_CORRUPTED
+ } else if (certstat & GNUTLS_CERT_CORRUPTED) {
+ bad_certificate(scs, "server's certificate is corrupt.\n");
+#endif
+ } else if (certstat & GNUTLS_CERT_REVOKED) {
+ bad_certificate(scs, "server's certificate has been revoked.\n");
+ } else if (certstat & GNUTLS_CERT_INVALID) {
+ if (gnutls_certificate_type_get(scs->tls_state) == GNUTLS_CRT_X509) {
+ /* bad_certificate(scs, "server's certificate is not trusted.\n"
+ "there may be a problem with the certificate stored in your certfile\n"); */
+ } else {
+ bad_certificate(scs,
+ "server's certificate is invalid or not X.509.\n"
+ "there may be a problem with the certificate stored in your certfile\n");
+ }
+#if defined(GNUTLS_CERT_SIGNER_NOT_FOUND)
+ } else if (certstat & GNUTLS_CERT_SIGNER_NOT_FOUND) {
+ TDM(DEBUG_INFO, "server's certificate is not signed.\n");
+ TDM(DEBUG_INFO,
+ "to verify that a certificate is trusted, use the certfile option.\n");
+#endif
+
+#if defined(GNUTLS_CERT_NOT_TRUSTED)
+ } else if (certstat & GNUTLS_CERT_NOT_TRUSTED) {
+ TDM(DEBUG_INFO, "server's certificate is not trusted.\n");
+ TDM(DEBUG_INFO,
+ "to verify that a certificate is trusted, use the certfile option.\n");
+#endif
+ }
+
+ if (gnutls_x509_crt_init(&cert) < 0) {
+ bad_certificate(scs,
+ "Unable to initialize certificate data structure");
+ }
+
+
+ /* not checking for not-yet-valid certs... this would make sense
+ if we weren't just comparing to stored ones */
+ cert_list =
+ gnutls_certificate_get_peers(scs->tls_state, &cert_list_size);
+
+ if (gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER) <
+ 0) {
+ bad_certificate(scs, "Error processing certificate data");
+ }
+
+ if (gnutls_x509_crt_get_expiration_time(cert) < time(NULL)) {
+ bad_certificate(scs, "server's certificate has expired.\n");
+ } else if (gnutls_x509_crt_get_activation_time(cert)
+ > time(NULL)) {
+ bad_certificate(scs, "server's certificate is not yet valid.\n");
+ } else {
+ TDM(DEBUG_INFO, "certificate passed time check.\n");
+ }
+
+ if (gnutls_x509_crt_check_hostname(cert, remote_hostname) == 0) {
+ char certificate_hostname[256];
+ size_t buflen = 255;
+ gnutls_x509_crt_get_dn(cert, certificate_hostname, &buflen);
+ /* gnutls_x509_extract_certificate_dn(&cert_list[0], &dn); */
+ TDM(DEBUG_INFO,
+ "server's certificate (%s) does not match its hostname (%s).\n",
+ certificate_hostname, remote_hostname);
+ bad_certificate(scs,
+ "server's certificate does not match its hostname.\n");
+ } else {
+ if ((scs->pc)->debug >= DEBUG_INFO) {
+ char certificate_hostname[256];
+ size_t buflen = 255;
+ gnutls_x509_crt_get_dn(cert, certificate_hostname, &buflen);
+ /* gnutls_x509_extract_certificate_dn(&cert_list[0], &dn); */
+ TDM(DEBUG_INFO,
+ "server's certificate (%s) matched its hostname (%s).\n",
+ certificate_hostname, remote_hostname);
+ }
+ }
+
+ if (certificate_filename != NULL &&
+ tls_compare_certificates(&cert_list[0]) == 0) {
+ bad_certificate(scs,
+ "server's certificate was not found in the certificate file.\n");
+ }
+
+ gnutls_x509_crt_deinit(cert);
+
+ TDM(DEBUG_INFO, "certificate check ok.\n");
+ return;
+}
+
+struct connection_state *initialize_gnutls(int sd, char *name, Pop3 pc,
+ const char *remote_hostname)
+{
+ static int gnutls_initialized;
+ int zok;
+ struct connection_state *scs = malloc(sizeof(struct connection_state));
+ memset(scs, 0, sizeof(struct connection_state)); /* clears the unprocessed buffer */
+
+ scs->pc = pc;
+
+ assert(sd >= 0);
+
+ if (gnutls_initialized == 0) {
+ assert(gnutls_global_init() == 0);
+ gnutls_initialized = 1;
+ }
+
+ assert(gnutls_init(&scs->tls_state, GNUTLS_CLIENT) == 0);
+ {
+ const int protocols[] = { GNUTLS_TLS1, GNUTLS_SSL3, 0 };
+ const int ciphers[] =
+ { GNUTLS_CIPHER_RIJNDAEL_128_CBC, GNUTLS_CIPHER_3DES_CBC,
+ GNUTLS_CIPHER_RIJNDAEL_256_CBC,
+ GNUTLS_CIPHER_ARCFOUR, 0
+ };
+ const int compress[] = { GNUTLS_COMP_ZLIB, GNUTLS_COMP_NULL, 0 };
+ const int key_exch[] = { GNUTLS_KX_RSA, GNUTLS_KX_DHE_DSS,
+ GNUTLS_KX_DHE_RSA, 0
+ };
+ /* mutt with gnutls doesn't use kx_srp or kx_anon_dh */
+ const int mac[] = { GNUTLS_MAC_SHA, GNUTLS_MAC_MD5, 0 };
+ assert(gnutls_protocol_set_priority(scs->tls_state, protocols) ==
+ 0);
+ assert(gnutls_cipher_set_priority(scs->tls_state, ciphers) == 0);
+ assert(gnutls_compression_set_priority(scs->tls_state, compress) ==
+ 0);
+ assert(gnutls_kx_set_priority(scs->tls_state, key_exch) == 0);
+ assert(gnutls_mac_set_priority(scs->tls_state, mac) == 0);
+ /* no client private key */
+ if (gnutls_certificate_allocate_credentials(&scs->xcred) < 0) {
+ DMA(DEBUG_ERROR, "gnutls memory error\n");
+ exit(1);
+ }
+
+ /* certfile seems to work. */
+ if (certificate_filename != NULL) {
+ if (!exists(certificate_filename)) {
+ DMA(DEBUG_ERROR,
+ "Certificate file (certfile=) %s not found.\n",
+ certificate_filename);
+ exit(1);
+ }
+ zok = gnutls_certificate_set_x509_trust_file(scs->xcred,
+ (char *)
+ certificate_filename,
+ GNUTLS_X509_FMT_PEM);
+ if (zok < 0) {
+ DMA(DEBUG_ERROR,
+ "GNUTLS did not like your certificate file %s (%d).\n",
+ certificate_filename, zok);
+ gnutls_perror(zok);
+ exit(1);
+ }
+ }
+
+ gnutls_cred_set(scs->tls_state, GNUTLS_CRD_CERTIFICATE,
+ scs->xcred);
+ gnutls_transport_set_ptr(scs->tls_state,
+ (gnutls_transport_ptr) sd);
+ do {
+ zok = gnutls_handshake(scs->tls_state);
+ }
+ while (zok == GNUTLS_E_INTERRUPTED || zok == GNUTLS_E_AGAIN);
+
+ tls_check_certificate(scs, remote_hostname);
+ }
+
+ if (zok < 0) {
+ TDM(DEBUG_ERROR, "%s: Handshake failed\n", name);
+ TDM(DEBUG_ERROR, "%s: This may be a problem in gnutls, "
+ "which is under development\n", name);
+ TDM(DEBUG_ERROR,
+ "%s: This copy of wmbiff was compiled with \n"
+ " gnutls version %s.\n", name, LIBGNUTLS_VERSION);
+ gnutls_perror(zok);
+ if (scs->pc->u.pop_imap.serverPort != 143 /* starttls */ ) {
+ TDM(DEBUG_ERROR,
+ "%s: Please run 'gnutls-cli-debug -p %d %s' to test ssl directly.\n"
+ " That tool provides a lower-level test of gnutls with your server.\n",
+ name, scs->pc->u.pop_imap.serverPort, remote_hostname);
+ }
+ gnutls_deinit(scs->tls_state);
+ free(scs);
+ return (NULL);
+ } else {
+ TDM(DEBUG_INFO, "%s: Handshake was completed\n", name);
+ if (scs->pc->debug >= DEBUG_INFO)
+ print_info(scs->tls_state, remote_hostname);
+ scs->sd = sd;
+ scs->name = name;
+ }
+ return (scs);
+}
+
+/* moved down here, to keep from interrupting the flow with
+ verbose error crap */
+void handle_gnutls_read_error(int readbytes, struct connection_state *scs)
+{
+ if (gnutls_error_is_fatal(readbytes) == 1) {
+ TDM(DEBUG_ERROR,
+ "%s: Received corrupted data(%d) - server has terminated the connection abnormally\n",
+ scs->name, readbytes);
+ } else {
+ if (readbytes == GNUTLS_E_WARNING_ALERT_RECEIVED
+ || readbytes == GNUTLS_E_FATAL_ALERT_RECEIVED)
+ TDM(DEBUG_ERROR, "* Received alert [%d]\n",
+ gnutls_alert_get(scs->tls_state));
+ if (readbytes == GNUTLS_E_REHANDSHAKE)
+ TDM(DEBUG_ERROR, "* Received HelloRequest message\n");
+ }
+ TDM(DEBUG_ERROR,
+ "%s: gnutls error reading: %s\n",
+ scs->name, gnutls_strerror(readbytes));
+}
+
+#else
+/* declare stubs when tls isn't compiled in */
+struct connection_state *initialize_gnutls(UNUSED(int sd),
+ UNUSED(char *name),
+ UNUSED(Pop3 pc),
+ UNUSED(const char
+ *remote_hostname))
+{
+ DM(pc, DEBUG_ERROR,
+ "FATAL: tried to initialize ssl when ssl wasn't compiled in.\n");
+ exit(EXIT_FAILURE);
+}
+#endif
+
+/* either way: */
+struct connection_state *initialize_unencrypted(int sd,
+ /*@only@ */ char *name,
+ Pop3 pc)
+{
+ struct connection_state *ret = malloc(sizeof(struct connection_state));
+ assert(sd >= 0);
+ assert(ret != NULL);
+ memset(ret, 0, sizeof(struct connection_state)); /* clears the unprocessed buffer */
+ ret->sd = sd;
+ ret->name = name;
+ ret->tls_state = NULL;
+ ret->xcred = NULL;
+ ret->pc = pc;
+ return (ret);
+}
+
+/* bad seed connections that can't be setup */
+/*@only@*/
+struct connection_state *initialize_blacklist( /*@only@ */ char *name)
+{
+ struct connection_state *ret = malloc(sizeof(struct connection_state));
+ assert(ret != NULL);
+ ret->sd = -1;
+ ret->name = name;
+ ret->tls_state = NULL;
+ ret->xcred = NULL;
+ ret->pc = NULL;
+ return (ret);
+}
+
+
+int tlscomm_is_blacklisted(const struct connection_state *scs)
+{
+ return (scs != NULL && scs->sd == -1);
+}
+
+/* vim:set ts=4: */
+/*
+ * Local Variables:
+ * tab-width: 4
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/wmbiff/tlsComm.h b/wmbiff/tlsComm.h
new file mode 100644
index 0000000..38911dd
--- /dev/null
+++ b/wmbiff/tlsComm.h
@@ -0,0 +1,67 @@
+/* tlsComm.h - interface for the thin layer that looks
+ sort of like fgets and fprintf, but might read or write
+ to a socket or a TLS association
+
+ Neil Spring (nspring at cs.washington.edu)
+
+ Comments in @'s are for lclint's benefit:
+ http://lclint.cs.virginia.edu/
+*/
+
+/* used to drill through per-mailbox debug keys */
+#include "Client.h"
+
+/* opaque reference to the state associated with a
+ connection: may be just a file handle, or may include
+ encryption state */
+struct connection_state;
+
+/* take a socket descriptor and negotiate a TLS connection
+ over it */
+/*@only@*/
+struct connection_state *initialize_gnutls(int sd, /*@only@ */ char *name,
+ Pop3 pc, const char *hostname);
+
+/* take a socket descriptor and bundle it into a connection
+ state structure for later communication */
+/*@only@*/
+struct connection_state *initialize_unencrypted(int sd, /*@only@ */
+ char *name, Pop3 pc);
+
+/* store a binding when connect() times out. these should be
+ skipped when trying to check mail so that other mailboxes
+ are checked responsively. I believe linux defaults to
+ around 90 seconds for a failed connect() attempt */
+/* TODO: engineer an eventual retry scheme */
+/*@only@*/
+struct connection_state *initialize_blacklist( /*@only@ */ char *name);
+int tlscomm_is_blacklisted(const struct connection_state *scs);
+
+/* just like fprintf, only takes a connection state structure */
+void tlscomm_printf(struct connection_state *scs, const char *format, ...);
+
+/* modeled after fgets; may not work exactly the same */
+int tlscomm_gets( /*@out@ */ char *buf,
+ int buflen, struct connection_state *scs);
+
+/* gobbles lines until it finds one starting with {prefix},
+ which is returned in buf */
+int tlscomm_expect(struct connection_state *scs, const char *prefix,
+ /*@out@ */ char *buf,
+ int buflen);
+
+/* terminates the TLS association or just closes the socket,
+ and frees the connection state */
+void tlscomm_close( /*@only@ */ struct connection_state *scs);
+
+/* internal function exported for testing */
+int getline_from_buffer(char *readbuffer, char *linebuffer,
+ int linebuflen);
+#ifndef UNUSED
+#ifdef HAVE___ATTRIBUTE__
+#define UNUSED(x) /*@unused@*/ x __attribute__((unused))
+#else
+#define UNUSED(x) x
+#endif
+#endif
+
diff --git a/wmbiff/wmbiff-master-led.xpm b/wmbiff/wmbiff-master-led.xpm
new file mode 100644
index 0000000..0cc669d
--- /dev/null
+++ b/wmbiff/wmbiff-master-led.xpm
@@ -0,0 +1,128 @@
+/* XPM */
+static const char * wmbiff_master_xpm[] = {
+"160 109 15 1",
+" c #00000000FFFF",
+". c #505075000000",
+"X c #FFFFFFFF0000",
+"o c #492441030000",
+"O c #79E779E70820",
+"+ c #000000000000",
+"@ c #C71BC30BC71B",
+": c #000049244103",
+"$ c #2081B2CAAEBA",
+"% c #00007DF771C6",
+"& c #B6DA04101861",
+"* c #0000EBAD0000",
+"= c #28A23CF338E3",
+"- c #F7DEF3CEFFFF",
+"; c #71C6E38D71C6",
+" ................................................................................ ",
+" ...XXX...oooO.OXXXO.OXXXO.OoooO.OXXXO.OXXXO.OXXXO.OXXXO.OXXXO................... ",
+" ..X...X.o...X.o...X.o...X.X...X.X...o.X...o.o...X.X...X.X...X............X...... ",
+" ..X...X.o...X.o...X.o...X.X...X.X...o.X...o.o...X.X...X.X...X..X....X....X...... ",
+" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..OoooO..oooO.OXXXO..XXXO.OXXXO.OXXXO.OXXXO..oooO.oXXXo.OXXXO..O....O...X....... ",
+" +......................................................@ ..X...X.o...X.X...o.o...X.o...X.o...X.X...X.o...X.X...X.o...X...........X....... ",
+" +..:::...:::...:::...:::...:::.......:::...:::...:::...@ ..X...X.o...X.X...o.o...X.o...X.o...X.X...X.o...X.X...X.o...X..X....X..X........ ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ ...XXX...oooX.OXXXO.OXXXO..oooO.OXXXO.OXXXO..oooO.OXXXO.OXXXO..O....O..X........ ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ ................................................................................ ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +..:::...:::...:::...:::...:::.......:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +..:::...:::...:::...:::...:::.......:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +..:::...:::...:::...:::...:::.......:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" +..:::...:::...:::...:::...:::.......:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +.:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:..@ . ",
+" +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ . ",
+" +..:::...:::...:::...:::...:::...:...:::...:::...:::...@ . ",
+" +......................................................@ . ",
+" +......................................................@ . ",
+" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ . ",
+" . ",
+" . ",
+" . ",
+" . ",
+"............................................................................... ",
+"..$$$...:::%.%$$$%.%$$$%.%:::%.%$$$%.%$$$%.%$$$%.:$$$%.%$$$%................... ",
+".$...$.:...$.:...$.:...$.$...$.$...:.$...:.:...$.$...$.$...$............$...... .&&. .**. .==. ",
+".$...$.:...$.:...$.:...$.$...$.$...:.$...:.:...$.$...$.$...$..$....$....$...... &-&& *-** ==== ",
+".%:::%..:::%.%$$$%..$$$%.%$$$%.%$$$%.%$$$%..:::%.:$$$:.%$$$%..%....%...$....... &&&& **** ==== .$:; ",
+".$...$.:...$.$...:.:...$.:...$.:...$.$...$.:...$.$...$.:...$...........$....... .&&. .**. .==. ",
+".$...$.:...$.$...:.:...$.:...$.:...$.$...$.:...$.$...$.:...$..$....$..$........ ",
+"..$$$...:::$.%$$$%.%$$$%..:::%.%$$$%.%$$$%..:::%.%$$$:.%$$$%..%....%..$........ ",
+"............................................................................... ",
+" ",
+"................................................................................................................................................................",
+".:$$$:.%$$$..%$$$%.%$$$..%$$$%.%$$$%.%$$$%.%:::%..:::%..:::%.%:::%.%:::..$:::$.%$$$..%$$$%.%$$$%.%$$$%.%$$$%.%$$$%.%$$$%.%:::%.%:::%.%:::%.%:::%.%:::%.%$$$%....",
+".$...$.$...$.$...:.$...$.$...:.$...:.$...:.$...$.:...$.:...$.$...$.$...:.$$.$$.$...$.$...$.$...$.$...$.$...$.$...:.:.$.:.$...$.$...$.$...$.$...$.$...$.:...$....",
+".$...$.$...$.$...:.$...$.$...:.$...:.$...:.$...$.:...$.:...$.$..$:.$...:.$.$.$.$...$.$...$.$...$.$...$.$...$.$...:.:.$.:.$...$.$...$.$...$.:$.$:.$...$.:..$:....",
+".%$$$%.%$$$..%:::..%:::%.%$$$..%$$$..%:$$%.%$$$%..:::%..:::%.%$$:..%:::..%:::%.%:::%.%:::%.%$$$%.%$::%.%$$$..%$$$%..:%:..%:::%.%:::%.%:::%..:$:..%$$$%..:$:.....",
+".$...$.$...$.$...:.$...$.$...:.$...:.$...$.$...$.:...$.:...$.$..$:.$...:.$...$.$...$.$...$.$...:.$.$.$.$...$.:...$.:.$.:.$...$.$...$.$.$.$.:$.$:.:...$.:$..:....",
+".$...$.$...$.$...:.$...$.$...:.$...:.$...$.$...$.:...$.:...$.$...$.$...:.$...$.$...$.$...$.$...:.$..$$.$...$.:...$.:.$.:.$...$.$...$.$$.$$.$...$.:...$.$...:....",
+".%:::%.%$$$..%$$$%.$$$$..%$$$%.$:::..%$$$%.%:::%..:::$.:$$$%.%:::%.%$$$:.%:::%.$:::$.%$$$%.%:::..%$$$%.%:::%.%$$$%..:%:..:$$$$..$$$..$:::$.%:::$.:$$$%.%$$$%....",
+"................................................................................................................................................................",
+" ",
+" +......................................................@ . ",
+" ..:::...:::...:::...:::...:::.......:::...:::...:::... ",
+" .:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:.. ",
+" .:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:.. ",
+" ..:::...:::...:::...:::...:::...:...:::...:::...:::... ",
+" .:...:.:...:.:...:.:...:.:...:.....:...:.:...:.:...:.. ",
+" .:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:.. ",
+" ..:::...:::...:::...:::...:::...:...:::...:::...:::... ",
+" ...................................................... ",
+" ...................................................... ",
+" ",
+"................................................................................................................................................................",
+".oXXXo.OXXX..OXXXO.OXXX..OXXXO.OXXXO.OXXXO.OoooO..oooO..oooO.OoooO.Oooo..XoooX.OXXX..OXXXO.OXXXO.OXXXO.OXXXO.OXXXO.OXXXO.OoooO.OoooO.OoooO.OoooO.OoooO.OXXXO....",
+".X...X.X...X.X...o.X...X.X...o.X...o.X...o.X...X.o...X.o...X.X...X.X...o.XX.XX.X...X.X...X.X...X.X...X.X...X.X...o.o.X.o.X...X.X...X.X...X.X...X.X...X.o...X....",
+".X...X.X...X.X...o.X...X.X...o.X...o.X...o.X...X.o...X.o...X.X..Xo.X...o.X.X.X.X...X.X...X.X...X.X...X.X...X.X...o.o.X.o.X...X.X...X.X...X.oX.Xo.X...X.o..Xo....",
+".OXXXO.OXXX..Oooo..OoooO.OXXX..OXXX..OoXXO.OXXXO..oooO..oooO.OXXo..Oooo..OoooO.OoooO.OoooO.OXXXO.OXooO.OXXX..OXXXO..oOo..OoooO.OoooO.OoooO..oXo..OXXXO..oXo.....",
+".X...X.X...X.X...o.X...X.X...o.X...o.X...X.X...X.o...X.o...X.X..Xo.X...o.X...X.X...X.X...X.X...o.X.X.X.X...X.o...X.o.X.o.X...X.X...X.X.X.X.oX.Xo.o...X.oX..o....",
+".X...X.X...X.X...o.X...X.X...o.X...o.X...X.X...X.o...X.o...X.X...X.X...o.X...X.X...X.X...X.X...o.X..XX.X...X.o...X.o.X.o.X...X.X...X.XX.XX.X...X.o...X.X...o....",
+".OoooO.OXXX..OXXXO.XXXX..OXXXO.Xooo..OXXXO.OoooO..oooX.OXXXO.OoooO.OXXXo.OoooO.XoooX.OXXXO.Oooo..OXXXO.OoooO.OXXXO..oOo..oXXXX..XXX..XoooX.OoooX.oXXXO.OXXXO....",
+"................................................................................................................................................................",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/wmbiff/wmbiff.1 b/wmbiff/wmbiff.1
new file mode 100644
index 0000000..4a70f2c
--- /dev/null
+++ b/wmbiff/wmbiff.1
@@ -0,0 +1,123 @@
+.\" Hey, Emacs! This is an -*- nroff -*- source file.
+.\" $Id: wmbiff.1,v 1.13 2003/02/08 21:04:48 bluehal Exp $
+.\"
+.\" wmbiff.1 and wmbiffrc.5 are copyright 1999-2001 by
+.\" Jordi Mallach <jordi at debian.org>
+.\"
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH WMBIFF 1 "October 4, 2001" "wmbiff"
+
+.SH NAME
+WMBiff \- A dockable Mailbox Monitor
+
+.SH SYNOPSIS
+.B wmbiff
+[-display <display name>] [-geometry +XPOS+YPOS] [-c <filename>] [-h] [-v] [-debug] [-fg <foreground-color>] [-font <X11 font>|default] [-hi <highlight-color>] [+w]
+.br
+
+.SH DESCRIPTION
+WMbiff displays the status of up to five mailboxes. It shows the number
+of new mail messages, if any, or the total number of messages.
+It also has mail
+retrieval capabilies, and can be configured to do this automatically. At the
+moment, UNIX-style, maildir, POP3, APOP and IMAP4 mailboxes are supported.
+WMbiff also supports gnomeicu, displaying the number of new
+messages in your running session, as if they were mail.
+
+The mailboxes are displayed in 5 different lines, each one with its own
+description of up to five chars. If no mail is present in a given mailbox,
+WMbiff will display the total number of mails in cyan. If there's new mail
+in the box, the number of new messages will be displayed in yellow. When new
+mail arrives, this number will optionally flash for a small period of time,
+and also optionally, a command can be executed on mail arrival (for example,
+opening your mail reader or playing a sound file).
+
+Pressing mouse button 1 will execute a command, defined in the user's config
+file. Mouse button 3 will execute a command to fetch mail, if defined.
+To restart wmbiff, press mouse button 1 while holding control and shift keys,
+or send it SIGUSR1.
+
+.PP
+
+.SH OPTIONS
+.TP
+.B \-h
+Show summary of options.
+.TP
+.B \-v
+Show version of program.
+.TP
+.B \-display <display name>
+Use an alternate X Display.
+.TP
+.B \-geometry <geometry>
+Initial window position.
+.TP
+.B \-c <filename>
+Use specified configuration file instead of ~/.wmbiffrc.
+.TP
+.B \-debug
+Print verbose log of progress.
+.TP
+.B \-fg <color>
+Use specified X11 color. Implies -font default, unless
+overridden.
+.TP
+.B \-font <font>
+Use specified X11 font instead of the LED pixmap. This may
+be more readable or suitable for some non-US characters.
+The special font "default" tells wmbiff to use a compile
+time default.
+.TP
+.B \-hi <color>
+Use specified X11 color for new mail counters. Implies -font
+default, unless overridden.
+.TP
+.B \-skip-certificate-check
+When using TLS (IMAPS), keep going, even if the server's
+certificate is invalid. Invalid certificates have expired,
+have a different hostname than you connected to, are
+corrupt, or have been revoked. Do not use this option
+unless wmbiff fails and suggests it to you, and even then,
+be careful and consider alerting your mail system
+administrator first. The need to use this option is a sign
+of server misconfiguration.
+.TP
+.B \+w
+Do not use the "withdrawn" state: the wmbiff window will not
+be captured as an icon and placed in the dock, but will
+instead have its own window. This option starts with a '+'
+for consistency with other software programs: many use '-w'
+to mean the opposite.
+
+.SH BUGS
+Send bug reports or suggestions to the WMBiff Development
+Mailing List <wmbiff-devel at lists.sourceforge.net>. Consider
+attaching a transcript of your session, generated using:
+.RS
+wmbiff -debug | tee wmbiff-log
+.RE
+Be sure to remove any instances of your password.
+
+.SH FILES
+.TP
+.I ~/.wmbiffrc
+peruser wmbiff configuration file.
+
+.SH AUTHOR
+This manual page was written by Jordi Mallach <jordi at sindominio.net>,
+originally for the Debian system (but may be used by others).
+.br
+WMBiff was first maintained by Gennady Belyakov. Since January 2001 it is
+maintained group of people that have added lots of new features to the
+original program. Please see the README document for a list of all the people
+involved.
+
+.SH SEE ALSO
+.PD 0
+.TP
+\fBwmbiffrc\fP(5)
+.PP
+\fI/usr/share/doc/wmbiff/examples/sample.wmbiffrc\fP
+(or equivalent for your system)
diff --git a/wmbiff/wmbiff.c b/wmbiff/wmbiff.c
new file mode 100644
index 0000000..0392788
--- /dev/null
+++ b/wmbiff/wmbiff.c
@@ -0,0 +1,1397 @@
+/* $Id: wmbiff.c,v 1.70 2005/10/07 03:07:58 bluehal Exp $ */
+
+// typedef int gcry_error_t;
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <time.h>
+#include <ctype.h>
+
+#ifdef HAVE_POLL
+#include <poll.h>
+#else
+#include <sys/time.h>
+#endif
+
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/cursorfont.h>
+#include <X11/keysym.h>
+
+#include <errno.h>
+#include <string.h>
+
+#include "../wmgeneral/wmgeneral.h"
+#include "../wmgeneral/misc.h"
+
+#include "Client.h"
+#include "charutil.h"
+#include "MessageList.h"
+
+#ifdef USE_DMALLOC
+#include <dmalloc.h>
+#endif
+
+
+#include "wmbiff-master-led.xpm"
+static char wmbiff_mask_bits[64 * 64];
+static const int wmbiff_mask_width = 64;
+// const int wmbiff_mask_height = 64;
+
+#define CHAR_WIDTH 5
+#define CHAR_HEIGHT 7
+
+#define BLINK_TIMES 8
+#define DEFAULT_SLEEP_INTERVAL 20000
+#define BLINK_SLEEP_INTERVAL 200
+#define DEFAULT_LOOP 5
+
+#define MAX_NUM_MAILBOXES 40
+static mbox_t mbox[MAX_NUM_MAILBOXES];
+
+/* this is the normal pixmap. */
+static const char *skin_filename = "wmbiff-master-led.xpm";
+/* global notify action taken (if globalnotify option is set) */
+static const char *globalnotify = NULL;
+
+/* path to search for pixmaps */
+/* /usr/share/wmbiff should have the default pixmap. */
+/* /usr/local/share/wmbiff if compiled locally. */
+/* / is there in case a user wants to specify a complete path */
+/* . is there for development. */
+static const char *skin_search_path = DEFAULT_SKIN_PATH;
+/* for gnutls */
+const char *certificate_filename = NULL;
+
+/* it could be argued that a better default exists. */
+#define DEFAULT_FONT "-*-fixed-*-r-*-*-10-*-*-*-*-*-*-*"
+static const char *font = NULL;
+
+int debug_default = DEBUG_ERROR;
+
+/* color from wmbiff's xpm, down to 24 bits. */
+const char *foreground = "white"; /* foreground white */
+const char *background = "#505075"; /* background blue */
+static const char *highlight = "red";
+int SkipCertificateCheck = 0;
+int Relax = 0; /* be not paranoid */
+static int notWithdrawn = 0;
+
+static unsigned int num_mailboxes = 1;
+static const int x_origin = 5;
+static const int y_origin = 5;
+static int forever = 1; /* keep running. */
+
+extern Window win;
+extern Window iconwin;
+
+Cursor busy_cursor, ready_cursor;
+
+static __inline /*@out@ */ void *
+malloc_ordie(size_t len)
+{
+ void *ret = malloc(len);
+ if (ret == NULL) {
+ fprintf(stderr, "unable to allocate %d bytes\n", (int) len);
+ abort();
+ }
+ return (ret);
+}
+
+/* where vertically the mailbox sits for blitting characters. */
+static int mbox_y(unsigned int mboxnum)
+{
+ return ((11 * mboxnum) + y_origin);
+}
+
+/* Read a line from a file to obtain a pair setting=value
+ skips # and leading spaces
+ NOTE: if setting finish with 0, 1, 2, 3 or 4 last char are deleted and
+ index takes its value... if not index will get -1
+ Returns -1 if no setting=value
+*/
+static int ReadLine(FILE * fp, /*@out@ */ char *setting,
+ /*@out@ */ char *value, /*@out@ */ int *mbox_index)
+{
+ char buf[BUF_SIZE];
+ char *p, *q;
+ int len;
+
+ *setting = '\0';
+ *value = '\0';
+ *mbox_index = -1;
+
+ if (!fp || feof(fp))
+ return -1;
+
+ if (!fgets(buf, BUF_SIZE - 1, fp))
+ return -1;
+
+ len = strlen(buf);
+
+ if (buf[len - 1] == '\n') {
+ buf[len - 1] = '\0'; /* strip linefeed */
+ }
+
+ StripComment(buf);
+
+ if (!(p = strtok(buf, "=")))
+ return -1;
+ if (!(q = strtok(NULL, "\n")))
+ return -1;
+
+ /* Chg - Mark Hurley
+ * Date: May 8, 2001
+ * Removed for loop (which removed leading spaces)
+ * Leading & Trailing spaces need to be removed
+ * to Fix Debian bug #95849
+ */
+ FullTrim(p);
+ FullTrim(q);
+
+ /* strcpy(setting, p); nspring replaced with sscanf dec 2002 */
+ strcpy(value, q);
+
+ if (sscanf(p, "%[_a-z.]%d", setting, mbox_index) == 2) {
+ /* mailbox-specific configuration, ends in a digit */
+ if (*mbox_index < 0 || *mbox_index >= MAX_NUM_MAILBOXES) {
+ DMA(DEBUG_ERROR, "invalid mailbox number %d\n", *mbox_index);
+ exit(EXIT_FAILURE);
+ }
+ } else if (sscanf(p, "%[a-z]", setting) == 1) {
+ /* global configuration, all text. */
+ *mbox_index = -1;
+ } else {
+ /* we found an uncommented line that has an equals,
+ but is non-alphabetic. */
+ DMA(DEBUG_INFO, "unparsed setting %s\n", p);
+ return -1;
+ }
+
+ DMA(DEBUG_INFO, "@%s.%d=%s@\n", setting, *mbox_index, value);
+ return 1;
+}
+
+struct path_demultiplexer {
+ const char *id; /* followed by a colon */
+ int (*creator) ( /*@notnull@ */ Pop3 pc, const char *path);
+};
+
+static struct path_demultiplexer paths[] = {
+ {"pop3:", pop3Create},
+ {"pop3s:", pop3Create},
+ {"shell:", shellCreate},
+ {"imap:", imap4Create},
+ {"imaps:", imap4Create},
+ {"sslimap:", imap4Create},
+ {"maildir:", maildirCreate},
+ {"mbox:", mboxCreate},
+ {NULL, NULL}
+};
+
+
+static void parse_mbox_path(unsigned int item)
+{
+ int i;
+ /* find the creator */
+ for (i = 0;
+ paths[i].id != NULL
+ && strncasecmp(mbox[item].path, paths[i].id, strlen(paths[i].id));
+ i++);
+ /* if found, execute */
+ if (paths[i].id != NULL) {
+ if (paths[i].creator((&mbox[item]), mbox[item].path) != 0) {
+ DMA(DEBUG_ERROR, "creator for mailbox %u returned failure\n",
+ item);
+ }
+ } else {
+ /* default are mbox */
+ mboxCreate((&mbox[item]), mbox[item].path);
+ }
+}
+
+static int Read_Config_File(char *filename, int *loopinterval)
+{
+ FILE *fp;
+ char setting[BUF_SMALL], value[BUF_SIZE];
+ int mbox_index;
+ unsigned int i;
+
+ if (!(fp = fopen(filename, "r"))) {
+ DMA(DEBUG_ERROR, "Unable to open %s, no settings read: %s\n",
+ filename, strerror(errno));
+ return 0;
+ }
+ while (!feof(fp)) {
+ /* skanky: -1 can represent an unparsed line
+ or an error */
+ if (ReadLine(fp, setting, value, &mbox_index) == -1)
+ continue;
+
+ /* settings that can be global go here. */
+ if (!strcmp(setting, "interval")) {
+ *loopinterval = atoi(value);
+ continue;
+ } else if (!strcmp(setting, "askpass")) {
+ const char *askpass = strdup_ordie(value);
+ if (mbox_index == -1) {
+ DMA(DEBUG_INFO, "setting all to askpass %s\n", askpass);
+ for (i = 0; i < MAX_NUM_MAILBOXES; i++)
+ mbox[i].askpass = askpass;
+ } else {
+ mbox[mbox_index].askpass = askpass;
+ }
+ continue;
+ } else if (!strcmp(setting, "skinfile")) {
+ skin_filename = strdup_ordie(value);
+ continue;
+ } else if (!strcmp(setting, "certfile")) { /* not yet supported */
+ certificate_filename = strdup_ordie(value);
+ continue;
+ } else if (!strcmp(setting, "globalnotify")) {
+ globalnotify = strdup_ordie(value);
+ continue;
+ } else if (mbox_index == -1) {
+ DMA(DEBUG_INFO, "Unknown global setting '%s'\n", setting);
+ continue; /* Didn't read any setting.[0-5] value */
+ }
+
+ if (mbox_index >= MAX_NUM_MAILBOXES) {
+ DMA(DEBUG_ERROR, "Don't have %d mailboxes.\n", mbox_index);
+ continue;
+ }
+
+ if (1U + mbox_index > num_mailboxes
+ && mbox_index + 1 <= MAX_NUM_MAILBOXES) {
+ num_mailboxes = 1U + mbox_index;
+ }
+
+ /* now only local settings */
+ if (!strcmp(setting, "label.")) {
+ if (strlen(value) + 1 > BUF_SMALL) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i label string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].label, value, BUF_SMALL - 1);
+ }
+ } else if (!strcmp(setting, "path.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i path string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].path, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "notify.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i notify string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].notify, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "action.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i action string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].action, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "action_disconnected.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i action_disconnected string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].actiondc, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "action_new_mail.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i action_new_mail string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].actionnew, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "action_no_new_mail.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i action_no_new_mail string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].actionnonew, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "interval.")) {
+ mbox[mbox_index].loopinterval = atoi(value);
+ } else if (!strcmp(setting, "buttontwo.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i buttontwo string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].button2, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "fetchcmd.")) {
+ if (strlen(value) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "Mailbox %i fetchcmd string '%s' is too long.\n",
+ mbox_index, value);
+ continue;
+ } else {
+ strncpy(mbox[mbox_index].fetchcmd, value, BUF_BIG - 1);
+ }
+ } else if (!strcmp(setting, "fetchinterval.")) {
+ mbox[mbox_index].fetchinterval = atoi(value);
+ } else if (!strcmp(setting, "debug.")) {
+ int debug_value = debug_default;
+ if (strcasecmp(value, "all") == 0) {
+ debug_value = DEBUG_ALL;
+ }
+ /* could disable debugging, but I want the command
+ line argument to provide all information
+ possible. */
+ mbox[mbox_index].debug = debug_value;
+ } else {
+ DMA(DEBUG_INFO, "Unknown setting '%s'\n", setting);
+ }
+ }
+ (void) fclose(fp);
+ for (i = 0; i < num_mailboxes; i++)
+ if (mbox[i].label[0] != '\0')
+ parse_mbox_path(i);
+ return 1;
+}
+
+
+static void init_biff(char *config_file)
+{
+#ifdef HAVE_GCRYPT_H
+ gcry_error_t rc;
+#endif
+ int loopinterval = DEFAULT_LOOP;
+ unsigned int i;
+
+ for (i = 0; i < MAX_NUM_MAILBOXES; i++) {
+ memset(mbox[i].label, 0, BUF_SMALL);
+ memset(mbox[i].path, 0, BUF_BIG);
+ memset(mbox[i].notify, 0, BUF_BIG);
+ memset(mbox[i].action, 0, BUF_BIG);
+ memset(mbox[i].actiondc, 0, BUF_BIG);
+ memset(mbox[i].actionnew, 0, BUF_BIG);
+ memset(mbox[i].actionnonew, 0, BUF_BIG);
+ memset(mbox[i].button2, 0, BUF_BIG);
+ memset(mbox[i].fetchcmd, 0, BUF_BIG);
+ mbox[i].loopinterval = 0;
+ mbox[i].getHeaders = NULL;
+ mbox[i].releaseHeaders = NULL;
+ mbox[i].debug = debug_default;
+ mbox[i].askpass = DEFAULT_ASKPASS;
+ }
+
+#ifdef HAVE_GCRYPT_H
+ /* gcrypt is a little strange, in that it doesn't
+ * seem to initialize its memory pool by itself.
+ * I believe we *expect* "Warning: using insecure memory!"
+ */
+ /* gcryctl_disable_secmem gets called before check_version -- in a message on
+ gcrypt-devel august 17 2004. */
+ if ((rc = gcry_control(GCRYCTL_DISABLE_SECMEM, 0)) != 0) {
+ DMA(DEBUG_ERROR,
+ "Error: tried to disable gcrypt warning and failed: %d\n"
+ " Message: %s\n" " libgcrypt version: %s\n", rc,
+ gcry_strerror(rc), gcry_check_version(NULL));
+ }
+
+ /* recently made a requirement, section 2.4 of gcrypt manual */
+ if (gcry_check_version("1.1.42") == NULL) {
+ DMA(DEBUG_ERROR, "Error: incompatible gcrypt version.\n");
+ }
+#endif
+
+ DMA(DEBUG_INFO, "config_file = %s.\n", config_file);
+ if (!Read_Config_File(config_file, &loopinterval)) {
+ char *m;
+ /* setup defaults if there's no config */
+ if ((m = getenv("MAIL")) != NULL) {
+ /* we are using MAIL environment var. type mbox */
+ if (strlen(m) + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "MAIL environment var '%s' is too long.\n", m);
+ } else {
+ DMA(DEBUG_INFO, "Using MAIL environment var '%s'.\n", m);
+ strncpy(mbox[0].path, m, BUF_BIG - 1);
+ }
+ } else if ((m = getenv("USER")) != NULL) {
+ /* we will use the USER env var to find an mbox name */
+ if (strlen(m) + 10 + 1 > BUF_BIG) {
+ DMA(DEBUG_ERROR,
+ "USER environment var '%s' is too long.\n", m);
+ } else {
+ DMA(DEBUG_INFO, "Using /var/mail/%s.\n", m);
+ strcpy(mbox[0].path, "/var/mail/");
+ strncat(mbox[0].path, m, BUF_BIG - 1 - 10);
+ if (mbox[0].path[9] != '/') {
+ DMA(DEBUG_ERROR,
+ "Unexpected failure to construct /var/mail/username, please "
+ "report this with your operating system info and the version of wmbiff.");
+ }
+ }
+ } else {
+ DMA(DEBUG_ERROR, "Cannot open config file '%s' nor use the "
+ "MAIL environment var.\n", config_file);
+ exit(EXIT_FAILURE);
+ }
+ if (!exists(mbox[0].path)) {
+ DMA(DEBUG_ERROR, "Cannot open config file '%s', and the "
+ "default %s doesn't exist.\n", config_file, mbox[0].path);
+ exit(EXIT_FAILURE);
+ }
+ strcpy(mbox[0].label, "Spool");
+ mboxCreate((&mbox[0]), mbox[0].path);
+ }
+
+ /* Make labels look right */
+ for (i = 0; i < num_mailboxes; i++) {
+ if (mbox[i].label[0] != '\0') {
+ /* append a colon, but skip if we're using fonts. */
+ if (font == NULL) {
+ int j = strlen(mbox[i].label);
+ if (j < 5) {
+ memset(mbox[i].label + j, ' ', 5 - j);
+ }
+ }
+ /* but always end after 5 characters */
+ mbox[i].label[6] = '\0';
+ /* set global loopinterval to boxes with 0 loop */
+ if (!mbox[i].loopinterval) {
+ mbox[i].loopinterval = loopinterval;
+ }
+ }
+ }
+}
+
+static char **LoadXPM(const char *pixmap_filename)
+{
+ char **xpm;
+ int success;
+ success = XpmReadFileToData((char *) pixmap_filename, &xpm);
+ switch (success) {
+ case XpmOpenFailed:
+ DMA(DEBUG_ERROR, "Unable to open %s\n", pixmap_filename);
+ break;
+ case XpmFileInvalid:
+ DMA(DEBUG_ERROR, "%s is not a valid pixmap\n", pixmap_filename);
+ break;
+ case XpmNoMemory:
+ DMA(DEBUG_ERROR, "Insufficient memory to read %s\n",
+ pixmap_filename);
+ break;
+ default:
+ break;
+ }
+ return (xpm);
+}
+
+/* tests as "test -f" would */
+int exists(const char *filename)
+{
+ struct stat st_buf;
+ DMA(DEBUG_INFO, "looking for %s\n", filename);
+ if (stat(filename, &st_buf) == 0 && S_ISREG(st_buf.st_mode)) {
+ DMA(DEBUG_INFO, "found %s\n", filename);
+ return (1);
+ }
+ return (0);
+}
+
+/* acts like execvp, with code inspired by it */
+/* mustfree */
+static char *search_path(const char *path, const char *find_me)
+{
+ char *buf;
+ const char *p;
+ int len, pathlen;
+ if (strchr(find_me, '/') != NULL) {
+ return (strdup_ordie(find_me));
+ }
+ pathlen = strlen(path);
+ len = strlen(find_me) + 1;
+ buf = malloc_ordie(pathlen + len + 1);
+ memcpy(buf + pathlen + 1, find_me, len);
+ buf[pathlen] = '/';
+
+ for (p = path; p != NULL; path = p, path++) {
+ char *startp;
+ p = strchr(path, ':');
+ if (p == NULL) {
+ /* not found; p should point to the null char at the end */
+ startp =
+ memcpy(buf + pathlen - strlen(path), path, strlen(path));
+ } else if (p == path) {
+ /* double colon in a path apparently means try here */
+ startp = &buf[pathlen + 1];
+ } else {
+ /* copy the part between the colons to the buffer */
+ startp = memcpy(buf + pathlen - (p - path), path, p - path);
+ }
+ if (exists(startp) != 0) {
+ char *ret = strdup_ordie(startp);
+ free(buf);
+ return (ret);
+ }
+ }
+ free(buf);
+ return (NULL);
+}
+
+/* verifies that .wmbiffrc, is a file, is owned by the user,
+ is not world writeable, and is not world readable. This
+ is just to help keep passwords secure */
+static int wmbiffrc_permissions_check(const char *wmbiffrc_fname)
+{
+ struct stat st;
+ if (stat(wmbiffrc_fname, &st) != 0) {
+ DMA(DEBUG_ERROR, "Can't stat wmbiffrc: '%s'\n", wmbiffrc_fname);
+ return (1); /* well, it's not a bad permission
+ problem: if you can't find it,
+ neither can the bad guys.. */
+ }
+ if ((st.st_mode & S_IFDIR) != 0) {
+ DMA(DEBUG_ERROR, ".wmbiffrc '%s' is a directory!\n"
+ "exiting. don't do that.", wmbiffrc_fname);
+ exit(EXIT_FAILURE);
+ }
+ if (st.st_uid != getuid()) {
+ char *user = getenv("USER");
+ DMA(DEBUG_ERROR,
+ ".wmbiffrc '%s' isn't owned by you.\n"
+ "Verify its contents, then 'chown %s %s'\n",
+ wmbiffrc_fname, ((user != NULL) ? user : "(your username)"),
+ wmbiffrc_fname);
+ return (0);
+ }
+ if ((st.st_mode & S_IWOTH) != 0) {
+ DMA(DEBUG_ERROR, ".wmbiffrc '%s' is world writable.\n"
+ "Verify its contents, then 'chmod 0600 %s'\n",
+ wmbiffrc_fname, wmbiffrc_fname);
+ return (0);
+ }
+ if ((st.st_mode & S_IROTH) != 0) {
+ DMA(DEBUG_ERROR, ".wmbiffrc '%s' is world readable.\n"
+ "Please run 'chmod 0600 %s' and consider changing your passwords.\n",
+ wmbiffrc_fname, wmbiffrc_fname);
+ return (0);
+ }
+ return (1);
+}
+
+static void ClearDigits(unsigned int i)
+{
+ if (font) {
+ eraseRect(39, mbox_y(i), 58, mbox_y(i + 1) - 1, background);
+ } else {
+ /* overwrite the colon */
+ copyXPMArea((10 * (CHAR_WIDTH + 1)), 64, (CHAR_WIDTH + 1),
+ (CHAR_HEIGHT + 1), 35, mbox_y(i));
+ /* blank out the number fields. */
+ copyXPMArea(39, 84, (3 * (CHAR_WIDTH + 1)), (CHAR_HEIGHT + 1), 39,
+ mbox_y(i));
+ }
+}
+
+/* Blits a string at given co-ordinates. If a ``new''
+ parameter is nonzero, all digits will be yellow */
+static void BlitString(const char *name, int x, int y, int new)
+{
+ if (font != NULL) {
+ /* an alternate behavior - draw the string using a font
+ instead of the pixmap. should allow pretty colors */
+ drawString(x, y + CHAR_HEIGHT + 1, name,
+ new ? highlight : foreground, background, 0);
+ } else {
+ /* normal, LED-like behavior. */
+ int i, c, k = x;
+ for (i = 0; name[i] != '\0'; i++) {
+ c = toupper(name[i]);
+ if (c >= 'A' && c <= 'Z') { /* it's a letter */
+ c -= 'A';
+ copyXPMArea(c * (CHAR_WIDTH + 1), (new ? 95 : 74),
+ (CHAR_WIDTH + 1), (CHAR_HEIGHT + 1), k, y);
+ k += (CHAR_WIDTH + 1);
+ } else { /* it's a number or symbol */
+ c -= '0';
+ if (new) {
+ copyXPMArea((c * (CHAR_WIDTH + 1)) + 65, 0,
+ (CHAR_WIDTH + 1), (CHAR_HEIGHT + 1), k, y);
+ } else {
+ copyXPMArea((c * (CHAR_WIDTH + 1)), 64,
+ (CHAR_WIDTH + 1), (CHAR_HEIGHT + 1), k, y);
+ }
+ k += (CHAR_WIDTH + 1);
+ }
+ }
+ }
+}
+
+
+/* Blits number to give coordinates.. two 0's, right justified */
+static void BlitNum(int num, int x, int y, int new)
+{
+ char buf[32];
+
+ sprintf(buf, "%02i", num);
+
+ if (font != NULL) {
+ const char *color = (new) ? highlight : foreground;
+ drawString(x + (CHAR_WIDTH * 2 + 4), y + CHAR_HEIGHT + 1, buf,
+ color, background, 1);
+ } else {
+ int newx = x;
+
+ if (num > 99)
+ newx -= (CHAR_WIDTH + 1);
+ if (num > 999)
+ newx -= (CHAR_WIDTH + 1);
+
+ BlitString(buf, newx, y, new);
+ }
+}
+
+/* helper function for displayMsgCounters, which has outgrown its name */
+static void blitMsgCounters(unsigned int i)
+{
+ int y_row = mbox_y(i); /* constant for each mailbox */
+ ClearDigits(i); /* Clear digits */
+ if ((mbox[i].blink_stat & 0x01) == 0) {
+ int newmail = (mbox[i].UnreadMsgs > 0) ? 1 : 0;
+ if (mbox[i].TextStatus[0] != '\0') {
+ BlitString(mbox[i].TextStatus, 39, y_row, newmail);
+ } else {
+ int mailcount =
+ (newmail) ? mbox[i].UnreadMsgs : 0;
+ BlitNum(mailcount, 45, y_row, newmail);
+ }
+ }
+}
+
+/*
+ * void execnotify(1) : runs notify command, if given (not null)
+ */
+static void execnotify( /*@null@ */ const char *notifycmd)
+{
+ if (notifycmd != NULL) { /* need to call notify() ? */
+ if (!strcasecmp(notifycmd, "true")) {
+ /* Yes, nothing */
+ } else {
+ /* Else call external notifyer, ignoring the pid */
+ (void) execCommand(notifycmd);
+ }
+ }
+}
+
+
+static void
+displayMsgCounters(unsigned int i, int mail_stat, int *Blink_Mode)
+{
+ switch (mail_stat) {
+ case 2: /* New mail has arrived */
+ /* Enter blink-mode for digits */
+ mbox[i].blink_stat = BLINK_TIMES * 2;
+ *Blink_Mode |= (1 << i); /* Global blink flag set for this mailbox */
+ blitMsgCounters(i);
+ execnotify(mbox[i].notify);
+ break;
+ case 1: /* mailbox has been rescanned/changed */
+ blitMsgCounters(i);
+ break;
+ case 0:
+ break;
+ case -1: /* Error was detected */
+ ClearDigits(i); /* Clear digits */
+ BlitString("XX", 45, mbox_y(i), 0);
+ break;
+ }
+}
+
+/** counts mail in spool-file
+ Returned value:
+ -1 : Error was encountered
+ 0 : mailbox status wasn't changed
+ 1 : mailbox was changed (NO new mail)
+ 2 : mailbox was changed AND new mail has arrived
+**/
+static int count_mail(unsigned int item)
+{
+ int rc = 0;
+
+ if (!mbox[item].checkMail) {
+ return -1;
+ }
+
+ if (mbox[item].checkMail(&(mbox[item])) < 0) {
+ /* we failed to obtain any numbers therefore set
+ * them to -1's ensuring the next pass (even if
+ * zero) will be captured correctly
+ */
+ mbox[item].TotalMsgs = -1;
+ mbox[item].UnreadMsgs = -1;
+ mbox[item].OldMsgs = -1;
+ mbox[item].OldUnreadMsgs = -1;
+ return -1;
+ }
+
+ if (mbox[item].UnreadMsgs > mbox[item].OldUnreadMsgs &&
+ mbox[item].UnreadMsgs > 0) {
+ rc = 2; /* New mail detected */
+ } else if (mbox[item].UnreadMsgs < mbox[item].OldUnreadMsgs ||
+ mbox[item].TotalMsgs != mbox[item].OldMsgs) {
+ rc = 1; /* mailbox was changed - NO new mail */
+ } else {
+ rc = 0; /* mailbox wasn't changed */
+ }
+ mbox[item].OldMsgs = mbox[item].TotalMsgs;
+ mbox[item].OldUnreadMsgs = mbox[item].UnreadMsgs;
+ return rc;
+}
+
+static int periodic_mail_check(void)
+{
+ int NeedRedraw = 0;
+ static int Blink_Mode = 0; /* Bit mask, digits are in blinking
+ mode or not. Each bit for separate
+ mailbox */
+ int Sleep_Interval; /* either DEFAULT_SLEEP_INTERVAL or
+ BLINK_SLEEP_INTERVAL */
+ int NewMail = 0; /* flag for global notify */
+ unsigned int i;
+ time_t curtime = time(0);
+ for (i = 0; i < num_mailboxes; i++) {
+ if (mbox[i].label[0] != '\0') {
+ if (curtime >= mbox[i].prevtime + mbox[i].loopinterval) {
+ int mailstat = 0;
+ NeedRedraw = 1;
+ DM(&mbox[i], DEBUG_INFO,
+ "working on [%u].label=>%s< [%u].path=>%s<\n", i,
+ mbox[i].label, i, mbox[i].path);
+ DM(&mbox[i], DEBUG_INFO,
+ "curtime=%d, prevtime=%d, interval=%d\n",
+ (int) curtime, (int) mbox[i].prevtime,
+ mbox[i].loopinterval);
+ mbox[i].prevtime = curtime;
+
+ XDefineCursor(display, iconwin, busy_cursor);
+ RedrawWindow();
+
+ mailstat = count_mail(i);
+
+ XUndefineCursor(display, iconwin);
+
+ /* Global notify */
+ if (mailstat == 2)
+ NewMail = 1;
+
+ displayMsgCounters(i, mailstat, &Blink_Mode);
+ /* update our idea of current time, as it
+ may have changed as we check. */
+ curtime = time(0);
+ }
+ if (mbox[i].blink_stat > 0) {
+ if (--mbox[i].blink_stat <= 0) {
+ Blink_Mode &= ~(1 << i);
+ mbox[i].blink_stat = 0;
+ }
+ displayMsgCounters(i, 1, &Blink_Mode);
+ NeedRedraw = 1;
+ }
+ if (mbox[i].fetchinterval > 0 && mbox[i].fetchcmd[0] != '\0'
+ && curtime >=
+ mbox[i].prevfetch_time + mbox[i].fetchinterval) {
+
+ XDefineCursor(display, iconwin, busy_cursor);
+ RedrawWindow();
+
+ (void) execCommand(mbox[i].fetchcmd);
+
+ XUndefineCursor(display, iconwin);
+
+ mbox[i].prevfetch_time = curtime;
+ }
+ }
+ }
+
+ /* exec globalnotify if there was any new mail */
+ if (NewMail == 1)
+ execnotify(globalnotify);
+
+ if (Blink_Mode == 0) {
+ for (i = 0; i < num_mailboxes; i++) {
+ mbox[i].blink_stat = 0;
+ }
+ Sleep_Interval = DEFAULT_SLEEP_INTERVAL;
+ } else {
+ Sleep_Interval = BLINK_SLEEP_INTERVAL;
+ }
+
+ if (NeedRedraw) {
+ NeedRedraw = 0;
+ RedrawWindow();
+ }
+
+ return Sleep_Interval;
+}
+
+static int findTopOfMasterXPM(const char **skin_xpm)
+{
+ int i;
+ for (i = 0; skin_xpm[i] != NULL; i++) {
+ if (strstr(skin_xpm[i], "++++++++") != NULL)
+ return i;
+ }
+ DMA(DEBUG_ERROR,
+ "couldn't find the top of the xpm file using the simple method\n");
+ exit(EXIT_FAILURE);
+}
+
+static char **CreateBackingXPM(int width, int height,
+ const char **skin_xpm)
+{
+ char **ret = malloc_ordie(sizeof(char *) * (height + 6)
+ + sizeof(void *) /* trailing null space */ );
+ const int colors = 5;
+ const int base = colors + 1;
+ const int margin = 4;
+ int i;
+ int top = findTopOfMasterXPM(skin_xpm);
+ ret[0] = malloc_ordie(30);
+ sprintf(ret[0], "%d %d %d %d", width, height, colors, 1);
+ ret[1] = (char *) " \tc #0000FF"; /* no color */
+ ret[2] = (char *) ".\tc #505075"; /* background gray */
+ ret[2] = malloc_ordie(30);
+ sprintf(ret[2], ".\tc %s", background);
+ ret[3] = (char *) "+\tc #000000"; /* shadowed */
+ ret[4] = (char *) "@\tc #C7C3C7"; /* highlight */
+ ret[5] = (char *) ":\tc #004941"; /* led off */
+ for (i = base; i < base + height; i++) {
+ ret[i] = malloc_ordie(width);
+ }
+ for (i = base; i < base + margin; i++) {
+ memset(ret[i], ' ', width);
+ }
+ for (i = base + margin; i < height + base - margin; i++) {
+ memset(ret[i], ' ', margin);
+
+ if (i == base + margin) {
+ memset(ret[i] + margin, '+', width - margin - margin);
+ } else if (i == base + height - margin - 1) {
+ memset(ret[i] + margin, '@', width - margin - margin);
+ } else {
+ // " +..:::...:::...:::...:::...:::.......:::...:::...:::...@ "
+ // " +.:...:.:...:.:...:.:...:.:...:..:..:...:.:...:.:...:..@ " ",
+ ret[i][margin] = '+';
+ memset(ret[i] + margin + 1, '.', width - margin - margin - 1);
+ ret[i][width - margin - 1] = '@';
+ memcpy(ret[i],
+ skin_xpm[((i - (base + margin) - 1) % 11) + top + 1],
+ width);
+ }
+
+ memset(ret[i] + width - margin, ' ', margin);
+ }
+ for (i = base + height - margin; i < height + base; i++) {
+ memset(ret[i], ' ', width);
+ }
+ ret[height + base] = NULL; /* not sure if this is necessary, it just
+ seemed like a good idea */
+ return (ret);
+}
+
+/*
+ * NOTE: this function assumes that the ConnectionNumber() macro
+ * will return the file descriptor of the Display struct
+ * (it does under XFree86 and solaris' openwin X)
+ */
+static void XSleep(int millisec)
+{
+#ifdef HAVE_POLL
+ struct pollfd timeout;
+
+ timeout.fd = ConnectionNumber(display);
+ timeout.events = POLLIN;
+
+ poll(&timeout, 1, millisec);
+#else
+ struct timeval to;
+ struct timeval *timeout = NULL;
+ fd_set readfds;
+ int max_fd;
+
+ if (millisec >= 0) {
+ timeout = &to;
+ to.tv_sec = millisec / 1000;
+ to.tv_usec = (millisec % 1000) * 1000;
+ }
+ FD_ZERO(&readfds);
+ FD_SET(ConnectionNumber(display), &readfds);
+ max_fd = ConnectionNumber(display);
+
+ select(max_fd + 1, &readfds, NULL, NULL, timeout);
+#endif
+}
+
+const char **restart_args;
+
+static void restart_wmbiff(int sig
+#ifdef HAVE___ATTRIBUTE__
+ __attribute__ ((unused))
+#endif
+ )
+{
+ DMA(DEBUG_ERROR, "exec()'ing %s\n", restart_args[0]);
+ sleep(1);
+ execvp(restart_args[0], (char *const *) restart_args);
+ DMA(DEBUG_ERROR, "exec of %s failed: %s\n",
+ restart_args[0], strerror(errno));
+ exit(EXIT_FAILURE);
+}
+
+extern int x_socket(void)
+{
+ return ConnectionNumber(display);
+}
+extern void ProcessPendingEvents(void)
+{
+ static int but_pressed_region = -1; /* static so click can be determined */
+ int but_released_region = -1;
+ /* X Events */
+ while (XPending(display)) {
+ XEvent Event;
+ const char *press_action;
+
+ XNextEvent(display, &Event);
+
+ switch (Event.type) {
+ case Expose:
+ if (Event.xany.window != win && Event.xany.window != iconwin) {
+ msglst_redraw();
+ } else {
+ RedrawWindow();
+ }
+ break;
+ case DestroyNotify:
+ XCloseDisplay(display);
+ exit(EXIT_SUCCESS);
+ break;
+ case ButtonPress:
+ but_pressed_region =
+ CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
+ switch (Event.xbutton.button) {
+ case 1:
+ press_action = mbox[but_pressed_region].action;
+ break;
+ case 2:
+ press_action = mbox[but_pressed_region].button2;
+ break;
+ case 3:
+ press_action = mbox[but_pressed_region].fetchcmd;
+ break;
+ default:
+ press_action = NULL;
+ break;
+
+ }
+ if (press_action && strcmp(press_action, "msglst") == 0) {
+ msglst_show(&mbox[but_pressed_region],
+ Event.xbutton.x_root, Event.xbutton.y_root);
+ }
+ break;
+ case ButtonRelease:
+ but_released_region =
+ CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
+ if (but_released_region == but_pressed_region
+ && but_released_region >= 0) {
+ const char *click_action, *extra_click_action = NULL;
+
+ switch (Event.xbutton.button) {
+ case 1: /* Left mouse-click */
+ /* C-S-left will restart wmbiff. */
+ if ((Event.xbutton.state & ControlMask) &&
+ (Event.xbutton.state & ShiftMask)) {
+ restart_wmbiff(0);
+ }
+ /* do we need to run an extra action? */
+ if (mbox[but_released_region].UnreadMsgs == -1) {
+ extra_click_action =
+ mbox[but_released_region].actiondc;
+ } else if (mbox[but_released_region].UnreadMsgs > 0) {
+ extra_click_action =
+ mbox[but_released_region].actionnew;
+ } else {
+ extra_click_action =
+ mbox[but_released_region].actionnonew;
+ }
+ click_action = mbox[but_released_region].action;
+ break;
+ case 2: /* Middle mouse-click */
+ click_action = mbox[but_released_region].button2;
+ break;
+ case 3: /* Right mouse-click */
+ click_action = mbox[but_released_region].fetchcmd;
+ break;
+ default:
+ click_action = NULL;
+ break;
+ }
+ if (extra_click_action != NULL
+ && extra_click_action[0] != 0
+ && strcmp(extra_click_action, "msglst")) {
+ DM(&mbox[but_released_region], DEBUG_INFO,
+ "runing: %s", extra_click_action);
+ (void) execCommand(extra_click_action);
+ }
+ if (click_action != NULL
+ && click_action[0] != '\0'
+ && strcmp(click_action, "msglst")) {
+ DM(&mbox[but_released_region], DEBUG_INFO,
+ "running: %s", click_action);
+ (void) execCommand(click_action);
+ }
+ }
+
+ /* a button was released, hide the message list if open */
+ msglst_hide();
+
+ but_pressed_region = -1;
+ /* RedrawWindow(); */
+ break;
+ case MotionNotify:
+ break;
+ case KeyPress:{
+ XKeyPressedEvent *xkpe = (XKeyPressedEvent *) & Event;
+ KeySym ks = XKeycodeToKeysym(display, xkpe->keycode, 0);
+ if (ks > XK_0 && ks < XK_0 + min(9U, num_mailboxes)) {
+ const char *click_action = mbox[ks - XK_1].action;
+ if (click_action != NULL
+ && click_action[0] != '\0'
+ && strcmp(click_action, "msglst")) {
+ DM(&mbox[but_released_region], DEBUG_INFO,
+ "running: %s", click_action);
+ (void) execCommand(click_action);
+ }
+ }
+
+ }
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void do_biff(int argc, const char **argv)
+{
+ unsigned int i;
+ time_t curtime;
+ int Sleep_Interval;
+ const char **skin_xpm = NULL;
+ const char **bkg_xpm = NULL;
+ char *skin_file_path = search_path(skin_search_path, skin_filename);
+ int wmbiff_mask_height = mbox_y(num_mailboxes) + 4;
+
+ DMA(DEBUG_INFO, "running %u mailboxes w %d h %d\n", num_mailboxes,
+ wmbiff_mask_width, wmbiff_mask_height);
+
+ if (skin_file_path != NULL) {
+ skin_xpm = (const char **) LoadXPM(skin_file_path);
+ free(skin_file_path);
+ }
+ if (skin_xpm == NULL) {
+ DMA(DEBUG_ERROR, "using built-in xpm; %s wasn't found in %s\n",
+ skin_filename, skin_search_path);
+ skin_xpm = wmbiff_master_xpm;
+ }
+
+ bkg_xpm = (const char **) CreateBackingXPM(wmbiff_mask_width, wmbiff_mask_height, skin_xpm);
+
+ createXBMfromXPM(wmbiff_mask_bits, bkg_xpm,
+ wmbiff_mask_width, wmbiff_mask_height);
+
+ openXwindow(argc, argv, bkg_xpm, skin_xpm, wmbiff_mask_bits,
+ wmbiff_mask_width, wmbiff_mask_height, notWithdrawn);
+
+ /* now that display is set, we can create the cursors
+ (mouse pointer shapes) */
+ busy_cursor = XCreateFontCursor(display, XC_watch);
+ ready_cursor = XCreateFontCursor(display, XC_left_ptr);
+
+ if (font != NULL) {
+ if (loadFont(font) < 0) {
+ DMA(DEBUG_ERROR, "unable to load font. exiting.\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ /* First time setup of button regions and labels */
+ curtime = time(0);
+ for (i = 0; i < num_mailboxes; i++) {
+ /* make it easy to recover the mbox index from a mouse click */
+ AddMouseRegion(i, x_origin, mbox_y(i), 58, mbox_y(i + 1) - 1);
+ if (mbox[i].label[0] != '\0') {
+ mbox[i].prevtime = mbox[i].prevfetch_time = 0;
+ BlitString(mbox[i].label, x_origin, mbox_y(i), 0);
+ }
+ }
+
+ do {
+
+ Sleep_Interval = periodic_mail_check();
+ ProcessPendingEvents();
+ XSleep(Sleep_Interval);
+ }
+ while (forever); /* forever is usually true,
+ but not when debugging with -exit */
+ if (skin_xpm != NULL && skin_xpm != wmbiff_master_xpm) {
+ free(skin_xpm); // added 3 jul 02, appeasing valgrind
+ }
+ if (bkg_xpm != NULL) {
+ free(bkg_xpm);
+ }
+}
+
+static void sigchld_handler(int sig
+#ifdef HAVE___ATTRIBUTE__
+ __attribute__ ((unused))
+#endif
+ )
+{
+ while (waitpid(0, NULL, WNOHANG) > 0);
+ signal(SIGCHLD, sigchld_handler);
+}
+
+static void usage(void)
+{
+ printf("\nwmBiff v%s"
+ " - incoming mail checker\n"
+ "Gennady Belyakov and others (see the README file)\n"
+ "Please report bugs to %s\n"
+ "\n"
+ "usage:\n"
+ " -bg <color> background color\n"
+ " -c <filename> use specified config file\n"
+ " -debug enable debugging\n"
+ " -display <display name> use specified X display\n"
+ " -fg <color> foreground color\n"
+ " -font <font> font instead of LED\n"
+ " -geometry +XPOS+YPOS initial window position\n"
+ " -h this help screen\n"
+ " -hi <color> highlight color for new mail\n"
+#ifdef USE_GNUTLS
+ " -skip-certificate-check using TLS, don't validate the\n"
+ " server's certificate\n"
+#endif
+ " -relax assume the configuration is \n"
+ " correct, parse it without paranoia, \n"
+ " and assume hostnames are okay.\n"
+ " -v print the version number\n"
+ " +w not withdrawn: run as a window\n"
+ "\n", PACKAGE_VERSION, PACKAGE_BUGREPORT);
+}
+
+static void printversion(void)
+{
+ printf("wmbiff v%s\n", PACKAGE_VERSION);
+}
+
+
+static void parse_cmd(int argc, const char **argv, char *config_file)
+{
+ int i;
+
+ config_file[0] = '\0';
+
+ /* Parse Command Line */
+
+ for (i = 1; i < argc; i++) {
+ const char *arg = argv[i];
+
+ if (*arg == '-') {
+ switch (arg[1]) {
+ case 'b':
+ if (strcmp(arg + 1, "bg") == 0) {
+ if (argc > (i + 1)) {
+ background = strdup_ordie(argv[i + 1]);
+ DMA(DEBUG_INFO, "new background: %s", foreground);
+ i++;
+ if (font == NULL)
+ font = DEFAULT_FONT;
+ }
+ }
+ break;
+ case 'd':
+ if (strcmp(arg + 1, "debug") == 0) {
+ debug_default = DEBUG_ALL;
+ } else if (strcmp(arg + 1, "display") == 0) {
+ /* passed to X's command line parser */
+ } else {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'f':
+ if (strcmp(arg + 1, "fg") == 0) {
+ if (argc > (i + 1)) {
+ foreground = strdup_ordie(argv[i + 1]);
+ DMA(DEBUG_INFO, "new foreground: %s", foreground);
+ i++;
+ if (font == NULL)
+ font = DEFAULT_FONT;
+ }
+ } else if (strcmp(arg + 1, "font") == 0) {
+ if (argc > (i + 1)) {
+ if (strcmp(argv[i + 1], "default") == 0) {
+ font = DEFAULT_FONT;
+ } else {
+ font = strdup_ordie(argv[i + 1]);
+ }
+ DMA(DEBUG_INFO, "new font: %s", font);
+ i++;
+ }
+ } else {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'g':
+ if (strcmp(arg + 1, "geometry") != 0) {
+ usage();
+ exit(EXIT_FAILURE);
+ } else {
+ i++; /* gobble the argument */
+ if (i >= argc) { /* fail if there's nothing to gobble */
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ }
+ break;
+ case 'h':
+ if (strcmp(arg + 1, "hi") == 0) {
+ if (argc > (i + 1)) {
+ highlight = strdup_ordie(argv[i + 1]);
+ DMA(DEBUG_INFO, "new highlight: %s", highlight);
+ i++;
+ if (font == NULL)
+ font = DEFAULT_FONT;
+ }
+ } else if (strcmp(arg + 1, "h") == 0) {
+ usage();
+ exit(EXIT_SUCCESS);
+ }
+ break;
+ case 'v':
+ printversion();
+ exit(EXIT_SUCCESS);
+ break;
+ case 's':
+ if (strcmp(arg + 1, "skip-certificate-check") == 0) {
+ SkipCertificateCheck = 1;
+ } else {
+ usage();
+ exit(EXIT_SUCCESS);
+ }
+
+ break;
+ case 'r':
+ if (strcmp(arg + 1, "relax") == 0) {
+ Relax = 1;
+ } else {
+ usage();
+ exit(EXIT_SUCCESS);
+ }
+
+ break;
+ case 'c':
+ if (argc > (i + 1)) {
+ strncpy(config_file, argv[i + 1], 255);
+ i++;
+ }
+ break;
+ case 'e': /* undocumented for debugging */
+ if (strcmp(arg + 1, "exit") == 0) {
+ forever = 0;
+ }
+ break;
+ default:
+ usage();
+ exit(EXIT_SUCCESS);
+ break;
+ }
+ } else if (*arg == '+') {
+ switch (arg[1]) {
+ case 'w':
+ notWithdrawn = 1;
+ break;
+ default:
+ usage();
+ exit(EXIT_SUCCESS);
+ break;
+ }
+ }
+ }
+}
+
+int main(int argc, const char *argv[])
+{
+ char uconfig_file[256];
+
+ /* hold on to the arguments we were started with; we
+ will need them if we have to restart on sigusr1 */
+ restart_args =
+ (const char **) malloc((argc + 1) * sizeof(const char *));
+ memcpy(restart_args, argv, (argc) * sizeof(const char *));
+ restart_args[argc] = NULL;
+
+ parse_cmd(argc, argv, uconfig_file);
+
+ /* decide what the config file is */
+ if (uconfig_file[0] != '\0') { /* user-specified config file */
+ DMA(DEBUG_INFO, "Using user-specified config file '%s'.\n",
+ uconfig_file);
+ } else {
+ const char *home = getenv("HOME");
+ if (home == NULL) {
+ DMA(DEBUG_ERROR,
+ "$HOME undefined. Use the -c option to specify a wmbiffrc\n");
+ exit(EXIT_FAILURE);
+ }
+ sprintf(uconfig_file, "%s/.wmbiffrc", home);
+ }
+
+ if (wmbiffrc_permissions_check(uconfig_file) == 0) {
+ DMA(DEBUG_ERROR,
+ "WARNING: In future versions of WMBiff, .wmbiffrc MUST be\n"
+ "owned by the user, and not readable or writable by others.\n\n");
+ }
+ init_biff(uconfig_file);
+ signal(SIGCHLD, sigchld_handler);
+ signal(SIGUSR1, restart_wmbiff);
+ signal(SIGPIPE, SIG_IGN); /* write() may fail */
+
+ do_biff(argc, argv);
+ return 0;
+}
diff --git a/wmbiff/wmbiffrc.5 b/wmbiff/wmbiffrc.5
new file mode 100644
index 0000000..9917e91
--- /dev/null
+++ b/wmbiff/wmbiffrc.5
@@ -0,0 +1,310 @@
+.\" Hey, Emacs! This is an -*- nroff -*- source file.
+.\" $Id: wmbiffrc.5.in,v 1.18 2004/12/12 00:01:53 bluehal Exp $
+.\"
+.\" wmbiff/wmbiffrc.5. Generated from wmbiffrc.5.in by configure.
+.\"
+.\" wmbiff.1 and wmbiffrc.5 are copyright 1999-2002 by
+.\" Jordi Mallach <jordi at debian.org>
+.\"
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH WMBIFFRC 5 "November 11, 2002" "wmbiff"
+
+.SH NAME
+wmbiffrc \- configuration file for
+.BR wmbiff (1)
+
+.SH DESCRIPTION
+\fBWMbiff\fP is a mail notification tool for the WindowMaker and AfterStep
+window managers. It can handle up to 5 mailboxes, more when run using other
+window managers. You can define actions
+on mouse clicks for the different mailboxes. This manpage explains the
+different options which can be specified in a user's wmbiffrc.
+
+.SH OPTIONS
+Each option takes the form
+.IR option[.mbox] " = " value .
+Comments must be preceeded by pound signs (#).
+
+The supported configuration options are:
+
+.TP 3
+\fBcertfile\fP
+File that holds TLS (SSL) certificates. If specified,
+wmbiff will check certificates and exit on a failure, so
+your password is secure. If not present, wmbiff will trust
+all certificates and may be vulnerable to a
+man-in-the-middle attack. WMbiff's will not prompt if you
+want to accept new certificates. Instead, wmbiff expects
+your mail client to keep certificates in a file. For
+example, if mutt is your mailreader, you may add:
+
+.RS
+certfile=/home/<me>/.muttsslcerts
+.RE
+.TP
+\fBinterval\fP
+Global interval between mailbox checking. Value is the number of seconds, 5
+is the default.
+.TP
+\fBaskpass\fP
+Program run to ask for IMAP passwords, if left empty in the configuration file.
+The default is /usr/bin/ssh-askpass. Can be specified on a per-mailbox basis.
+.TP
+\fBskinfile\fP
+XPM pixmap file to load for the background. If not a full
+path, wmbiff will search /usr/local/share/wmbiff/skins, /usr/share/wmbiff,
+/usr/local/share/wmbiff, and the current directory for the
+pixmap file.
+.TP
+\fBglobalnotify\fP
+Command to be executed when new mail is recieved in any mailbox. Set
+notify.n to override this option for mailbox n.
+.TP
+\fBlabel.n\fP
+Specifies the displayed label for a mailbox. It can be up to five characters
+long.
+.TP
+\fBpath.n\fP
+Path to the mailbox, local or remote one. Path lines start with a prefix,
+which specifies the type of wmbiff box you're setting up. The following types
+are supported:
+.RS
+.TP
+.I mbox
+This is a local mbox mailbox. After the prefix, you only need to put the
+path to the mailbox wmbiff needs to read.
+Local mboxes may be specified using shell commands enclosed
+in back-ticks. (`s.)
+.\"This is also the default.
+.RS
+mbox:/path/to/mail/debian-devel
+.RE
+.\" let's stop making this available.
+.\" .RS
+.\" - or -
+.\" .RE
+.\" /path/to/mail/debian-devel
+.\" .RS
+.TP
+.I maildir
+This works just like \fImbox\fP above.
+.RS
+maildir:[:\fIflags\fP:]/path/to/mail/bugtraq/
+.TP
+\fIflags\fP can one or more of:
+.TP
+.I F
+Flush directory caches by creating (then deleting) a temporary file
+in each maildir prior to checking. This hack speeds up checking
+network-mounted maildirs in cases where directory caching can cause
+unwanted delays (eg. SFS-mounted maildirs).
+.RE
+.TP
+.I pop3
+Using this type, WMBiff will check for mail on a pop3 server using the
+specified username, password, host and an optional port number (defaulting
+to 110). If your password contains a special character, eg. '@' or ':',
+use the second path format. See Authentication below for a description of
+the auth field.
+.RS
+pop3:user:passwd at server[:port] [auth]
+.RE
+.RS
+pop3:user passwd server[ port] [auth]
+.RE
+.TP
+.I pop3s
+Exactly like pop3, only uses TLS (SSL) when built with gnutls and defaults
+to port 995. This copy of WMBiff was compiled with GNUTLS.
+.TP
+.I imap
+These are IMAP4 boxes. As with pop3, WMBiff will report the
+status of an IMAP4 mbox using the given values. This type
+accepts user, optional password, host and optional path to
+mailbox and port number. See Authentication below for a
+description of the auth field. The password may be left
+empty: see askpass above for information on password
+prompting. If your password includes a @, use the
+space delimited form. If it contains a space or #, use the
+askpass option instead. The mailbox field may be quoted,
+e.g., server/"Mail/Eggs and Spam". Mailboxes in subfolders
+may be described as /INBOX.subfolder by some servers and
+/Mail/subfolder by others.
+.RS
+imap:user:passwd at server[/mailbox][:port] [auth]
+.RE
+.RS
+imap:user:@server[/mailbox][:port] [auth]
+.RE
+.RS
+imap:user passwd server[/mailbox][ port] [auth]
+.RE
+.RS
+imap:user:passwd at server[/"mail box"][:port] [auth]
+.RE
+.TP
+.I imaps
+These are IMAP4 boxes wrapped in a TLS (SSL)
+connection. This copy of WMBiff was compiled with GNUTLS. Parameters are the same as
+those for ordinary IMAP4 boxes. Port defaults to 993. If
+143 is specified, WMBiff will attempt to connect unencrypted
+but negotiate TLS using IMAP's STARTTLS command. TLS
+support uses GNUTLS, which is under development and may be
+insecure. See the imap format above
+for additional detail about specifying your password.
+.RS
+imaps:user:passwd at server[/mailbox][:port] [auth]
+.RE
+.RS
+imaps:user:@server[/mailbox][:port] [auth]
+.RE
+.RS
+imaps:user passwd server[/mailbox][ port] [auth]
+.RE
+.TP
+.I licq
+With this box type, wmbiff will read the given history file and track the
+number of messages in it. It just needs a path to a given licq history file.
+.RS
+licq:/path/to/.licq/history/file.history
+.RE
+.TP
+.I gicu
+With this box type, wmbiff will ask gnomeicu for the number
+of pending messages. If gnomeicu is not running, nothing
+will be displayed. gnomeicu-client must be in your path.
+The user's icq UIN is optional.
+.RS
+gicu:[UIN]
+.RE
+.TP
+.I finger
+With this box type, wmbiff will finger an account to see if
+there is unread mail. Both finger and perl must be in your
+path, and your server must run a finger daemon.
+.RS
+finger:user at host
+.RE
+.TP
+.I shell
+With this keyword, wmbiff will launch the
+specified shell command and read its output (STDOUT)
+expecting an integer message count or a three-character
+string. If "new" is in the first line, the string or number
+will be displayed in yellow. The behavior of this
+experimental keyword is likely to change in future
+revisions.
+.RS
+shell:::/path/to/command
+shell:::lpq | grep Queue | awk '{print $2}'
+.RE
+.RE
+.TP
+\fBnotify.n\fP
+Command to be executed on new mail arrival in the given mailbox. Accepts
+the special keyword "beep" to use the pc speaker.
+.TP
+\fBaction.n\fP
+Command to be executed on left mouse click on a mailbox label.
+Accepts
+the special keyword "msglst" to pop up a window of recent message headers
+from IMAP or POP3 mailboxes when the left mouse button is held.
+.TP
+\fBbuttontwo.n\fP
+Command to be executed on middle mouse click on a mailbox level.
+Accepts
+the special keyword "msglst" to pop up a window of
+recent message headers from IMAP or POP3 mailboxes when the middle mouse button is held.
+.TP
+\fBinterval.n\fP
+Per mailbox check interval. Value is the amount of seconds between
+checkings, default is the global interval.
+.TP
+\fBfetchinterval.n\fP
+Interval between mail auto-fetching. Values accept 0 to disable, -1 for
+autofetching on new mail arrival, and positive values for a given interval
+in seconds.
+.TP
+\fBfetchcmd.n\fP
+Command to be executed to fetch mail. If not specified, fetching through
+wmbiff is disabled completely.
+Accepts
+the special keyword "msglst" to pop up a window of recent message headers
+from IMAP and POP3 mailboxes when the right mouse button is held down,
+though not when fetchinterval is nonzero.
+.TP
+\fBdebug.n\fP
+Show debugging messages from this mailbox. Currently
+supported values are "all" and "none". The \-debug option
+to wmbiff overrides this setting. Since IMAP uses a single
+connection per server, per-mailbox debugging may not
+
+.SH SIZING
+
+WMBiff will automatically size its window to the number of
+configured mailboxes. While WindowMaker's Dock and
+AfterStep's Wharf expect square, 64x64 applets, other window
+managers, such as Blackbox or Openbox do not have this
+limitation. This uncharacteristic "dockapp" behavior is
+intended to help those users who don't have exactly five
+mailboxes to watch.
+
+To preserve the old-style five-mailbox window even when you
+have only two, add
+.IR path.4=<space><space>
+to configure a blank 5th mailbox.
+
+To use the new-style sizing, just configure as many
+mailboxes as you want.
+
+.SH AUTHENTICATION
+
+Authentication methods include "cram-md5", "apop" (for
+Pop3), and "plaintext". "cram-md5" and "apop" are only
+available when wmbiff is compiled with libgcrypt.
+This copy of WMBiff was compiled with gcrypt.
+Authentication methods are tried in the following order:
+cram-md5, apop, plaintext.
+
+Each authentication method will be tried unless a list is
+included in the [auth] field. For example, append "cram-md5
+apop" if you don't want your password to be sent in
+cleartext over the network. Conversely, append "plaintext"
+if you don't want wmbiff to bother with other authentication
+methods. Leaving authentication methods unspecified should
+be reasonably safe. The order of entries in the [auth] list
+is not currently considered.
+
+.SH TROUBLESHOOTING
+
+For problems authenticating to servers, try specifying the
+authentication method explicitly as described above:
+sometimes a failed attempt to authenticate can cause later
+failures. Some servers claim to support cram-md5 but fail:
+telling wmbiff not to try can help.
+
+For other problems, run wmbiff with the -debug option. See
+wmbiff(1) for details.
+
+While editing .wmbiffrc, you may find it useful to restart
+wmbiff using either control-shift mouse button 1, or killall
+-USR1 wmbiff.
+
+
+.SH FILES
+.TP
+.I ~/.wmbiffrc
+per-user wmbiff configuration file.
+
+.SH AUTHOR
+This manual page was written by Jordi Mallach <jordi at debian.org>,
+originally for the Debian system (but may be used by others).
+
+.SH SEE ALSO
+.PD 0
+.TP
+\fBwmbiff\fP(1)
+.PP
+\fI/usr/share/doc/wmbiff/examples/sample.wmbiffrc\fP
+(or equivalent on your system)
diff --git a/wmbiff/wmbiffrc.5.in b/wmbiff/wmbiffrc.5.in
new file mode 100644
index 0000000..812c799
--- /dev/null
+++ b/wmbiff/wmbiffrc.5.in
@@ -0,0 +1,310 @@
+.\" Hey, Emacs! This is an -*- nroff -*- source file.
+.\" $Id: wmbiffrc.5.in,v 1.18 2004/12/12 00:01:53 bluehal Exp $
+.\"
+.\" @configure_input@
+.\"
+.\" wmbiff.1 and wmbiffrc.5 are copyright 1999-2002 by
+.\" Jordi Mallach <jordi at debian.org>
+.\"
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH WMBIFFRC 5 "November 11, 2002" "wmbiff"
+
+.SH NAME
+wmbiffrc \- configuration file for
+.BR wmbiff (1)
+
+.SH DESCRIPTION
+\fBWMbiff\fP is a mail notification tool for the WindowMaker and AfterStep
+window managers. It can handle up to 5 mailboxes, more when run using other
+window managers. You can define actions
+on mouse clicks for the different mailboxes. This manpage explains the
+different options which can be specified in a user's wmbiffrc.
+
+.SH OPTIONS
+Each option takes the form
+.IR option[.mbox] " = " value .
+Comments must be preceeded by pound signs (#).
+
+The supported configuration options are:
+
+.TP 3
+\fBcertfile\fP
+File that holds TLS (SSL) certificates. If specified,
+wmbiff will check certificates and exit on a failure, so
+your password is secure. If not present, wmbiff will trust
+all certificates and may be vulnerable to a
+man-in-the-middle attack. WMbiff's will not prompt if you
+want to accept new certificates. Instead, wmbiff expects
+your mail client to keep certificates in a file. For
+example, if mutt is your mailreader, you may add:
+
+.RS
+certfile=/home/<me>/.muttsslcerts
+.RE
+.TP
+\fBinterval\fP
+Global interval between mailbox checking. Value is the number of seconds, 5
+is the default.
+.TP
+\fBaskpass\fP
+Program run to ask for IMAP passwords, if left empty in the configuration file.
+The default is @DEFAULT_ASKPASS at . Can be specified on a per-mailbox basis.
+.TP
+\fBskinfile\fP
+XPM pixmap file to load for the background. If not a full
+path, wmbiff will search @SKINDIR@, /usr/share/wmbiff,
+/usr/local/share/wmbiff, and the current directory for the
+pixmap file.
+.TP
+\fBglobalnotify\fP
+Command to be executed when new mail is recieved in any mailbox. Set
+notify.n to override this option for mailbox n.
+.TP
+\fBlabel.n\fP
+Specifies the displayed label for a mailbox. It can be up to five characters
+long.
+.TP
+\fBpath.n\fP
+Path to the mailbox, local or remote one. Path lines start with a prefix,
+which specifies the type of wmbiff box you're setting up. The following types
+are supported:
+.RS
+.TP
+.I mbox
+This is a local mbox mailbox. After the prefix, you only need to put the
+path to the mailbox wmbiff needs to read.
+Local mboxes may be specified using shell commands enclosed
+in back-ticks. (`s.)
+.\"This is also the default.
+.RS
+mbox:/path/to/mail/debian-devel
+.RE
+.\" let's stop making this available.
+.\" .RS
+.\" - or -
+.\" .RE
+.\" /path/to/mail/debian-devel
+.\" .RS
+.TP
+.I maildir
+This works just like \fImbox\fP above.
+.RS
+maildir:[:\fIflags\fP:]/path/to/mail/bugtraq/
+.TP
+\fIflags\fP can one or more of:
+.TP
+.I F
+Flush directory caches by creating (then deleting) a temporary file
+in each maildir prior to checking. This hack speeds up checking
+network-mounted maildirs in cases where directory caching can cause
+unwanted delays (eg. SFS-mounted maildirs).
+.RE
+.TP
+.I pop3
+Using this type, WMBiff will check for mail on a pop3 server using the
+specified username, password, host and an optional port number (defaulting
+to 110). If your password contains a special character, eg. '@' or ':',
+use the second path format. See Authentication below for a description of
+the auth field.
+.RS
+pop3:user:passwd at server[:port] [auth]
+.RE
+.RS
+pop3:user passwd server[ port] [auth]
+.RE
+.TP
+.I pop3s
+Exactly like pop3, only uses TLS (SSL) when built with gnutls and defaults
+to port 995. @GNUTLS_MAN_STATUS@
+.TP
+.I imap
+These are IMAP4 boxes. As with pop3, WMBiff will report the
+status of an IMAP4 mbox using the given values. This type
+accepts user, optional password, host and optional path to
+mailbox and port number. See Authentication below for a
+description of the auth field. The password may be left
+empty: see askpass above for information on password
+prompting. If your password includes a @, use the
+space delimited form. If it contains a space or #, use the
+askpass option instead. The mailbox field may be quoted,
+e.g., server/"Mail/Eggs and Spam". Mailboxes in subfolders
+may be described as /INBOX.subfolder by some servers and
+/Mail/subfolder by others.
+.RS
+imap:user:passwd at server[/mailbox][:port] [auth]
+.RE
+.RS
+imap:user:@server[/mailbox][:port] [auth]
+.RE
+.RS
+imap:user passwd server[/mailbox][ port] [auth]
+.RE
+.RS
+imap:user:passwd at server[/"mail box"][:port] [auth]
+.RE
+.TP
+.I imaps
+These are IMAP4 boxes wrapped in a TLS (SSL)
+connection. @GNUTLS_MAN_STATUS@ Parameters are the same as
+those for ordinary IMAP4 boxes. Port defaults to 993. If
+143 is specified, WMBiff will attempt to connect unencrypted
+but negotiate TLS using IMAP's STARTTLS command. TLS
+support uses GNUTLS, which is under development and may be
+insecure. See the imap format above
+for additional detail about specifying your password.
+.RS
+imaps:user:passwd at server[/mailbox][:port] [auth]
+.RE
+.RS
+imaps:user:@server[/mailbox][:port] [auth]
+.RE
+.RS
+imaps:user passwd server[/mailbox][ port] [auth]
+.RE
+.TP
+.I licq
+With this box type, wmbiff will read the given history file and track the
+number of messages in it. It just needs a path to a given licq history file.
+.RS
+licq:/path/to/.licq/history/file.history
+.RE
+.TP
+.I gicu
+With this box type, wmbiff will ask gnomeicu for the number
+of pending messages. If gnomeicu is not running, nothing
+will be displayed. gnomeicu-client must be in your path.
+The user's icq UIN is optional.
+.RS
+gicu:[UIN]
+.RE
+.TP
+.I finger
+With this box type, wmbiff will finger an account to see if
+there is unread mail. Both finger and perl must be in your
+path, and your server must run a finger daemon.
+.RS
+finger:user at host
+.RE
+.TP
+.I shell
+With this keyword, wmbiff will launch the
+specified shell command and read its output (STDOUT)
+expecting an integer message count or a three-character
+string. If "new" is in the first line, the string or number
+will be displayed in yellow. The behavior of this
+experimental keyword is likely to change in future
+revisions.
+.RS
+shell:::/path/to/command
+shell:::lpq | grep Queue | awk '{print $2}'
+.RE
+.RE
+.TP
+\fBnotify.n\fP
+Command to be executed on new mail arrival in the given mailbox. Accepts
+the special keyword "beep" to use the pc speaker.
+.TP
+\fBaction.n\fP
+Command to be executed on left mouse click on a mailbox label.
+Accepts
+the special keyword "msglst" to pop up a window of recent message headers
+from IMAP or POP3 mailboxes when the left mouse button is held.
+.TP
+\fBbuttontwo.n\fP
+Command to be executed on middle mouse click on a mailbox level.
+Accepts
+the special keyword "msglst" to pop up a window of
+recent message headers from IMAP or POP3 mailboxes when the middle mouse button is held.
+.TP
+\fBinterval.n\fP
+Per mailbox check interval. Value is the amount of seconds between
+checkings, default is the global interval.
+.TP
+\fBfetchinterval.n\fP
+Interval between mail auto-fetching. Values accept 0 to disable, -1 for
+autofetching on new mail arrival, and positive values for a given interval
+in seconds.
+.TP
+\fBfetchcmd.n\fP
+Command to be executed to fetch mail. If not specified, fetching through
+wmbiff is disabled completely.
+Accepts
+the special keyword "msglst" to pop up a window of recent message headers
+from IMAP and POP3 mailboxes when the right mouse button is held down,
+though not when fetchinterval is nonzero.
+.TP
+\fBdebug.n\fP
+Show debugging messages from this mailbox. Currently
+supported values are "all" and "none". The \-debug option
+to wmbiff overrides this setting. Since IMAP uses a single
+connection per server, per-mailbox debugging may not
+
+.SH SIZING
+
+WMBiff will automatically size its window to the number of
+configured mailboxes. While WindowMaker's Dock and
+AfterStep's Wharf expect square, 64x64 applets, other window
+managers, such as Blackbox or Openbox do not have this
+limitation. This uncharacteristic "dockapp" behavior is
+intended to help those users who don't have exactly five
+mailboxes to watch.
+
+To preserve the old-style five-mailbox window even when you
+have only two, add
+.IR path.4=<space><space>
+to configure a blank 5th mailbox.
+
+To use the new-style sizing, just configure as many
+mailboxes as you want.
+
+.SH AUTHENTICATION
+
+Authentication methods include "cram-md5", "apop" (for
+Pop3), and "plaintext". "cram-md5" and "apop" are only
+available when wmbiff is compiled with libgcrypt.
+ at GCRYPT_MAN_STATUS@
+Authentication methods are tried in the following order:
+cram-md5, apop, plaintext.
+
+Each authentication method will be tried unless a list is
+included in the [auth] field. For example, append "cram-md5
+apop" if you don't want your password to be sent in
+cleartext over the network. Conversely, append "plaintext"
+if you don't want wmbiff to bother with other authentication
+methods. Leaving authentication methods unspecified should
+be reasonably safe. The order of entries in the [auth] list
+is not currently considered.
+
+.SH TROUBLESHOOTING
+
+For problems authenticating to servers, try specifying the
+authentication method explicitly as described above:
+sometimes a failed attempt to authenticate can cause later
+failures. Some servers claim to support cram-md5 but fail:
+telling wmbiff not to try can help.
+
+For other problems, run wmbiff with the -debug option. See
+wmbiff(1) for details.
+
+While editing .wmbiffrc, you may find it useful to restart
+wmbiff using either control-shift mouse button 1, or killall
+-USR1 wmbiff.
+
+
+.SH FILES
+.TP
+.I ~/.wmbiffrc
+per-user wmbiff configuration file.
+
+.SH AUTHOR
+This manual page was written by Jordi Mallach <jordi at debian.org>,
+originally for the Debian system (but may be used by others).
+
+.SH SEE ALSO
+.PD 0
+.TP
+\fBwmbiff\fP(1)
+.PP
+\fI/usr/share/doc/wmbiff/examples/sample.wmbiffrc\fP
+(or equivalent on your system)
diff --git a/wmgeneral/Makefile.am b/wmgeneral/Makefile.am
new file mode 100644
index 0000000..3e15428
--- /dev/null
+++ b/wmgeneral/Makefile.am
@@ -0,0 +1,10 @@
+noinst_LIBRARIES = libwmgeneral.a
+libwmgeneral_a_SOURCES = list.c list.h misc.c misc.h wmgeneral.c wmgeneral.h
+
+MAINTAINERCLEANFILES = Makefile.in
+
+
+indent:
+ indent -npro -kr -i4 -ts4 $(libwmgeneral_a_SOURCES) || true
+
+dist-hook-local: indent
diff --git a/wmgeneral/Makefile.in b/wmgeneral/Makefile.in
new file mode 100644
index 0000000..b37e8ba
--- /dev/null
+++ b/wmgeneral/Makefile.in
@@ -0,0 +1,321 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+ at SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AWK = @AWK@
+CC = @CC@
+CVS2CL = @CVS2CL@
+DEFAULT_ASKPASS = @DEFAULT_ASKPASS@
+DEPDIR = @DEPDIR@
+GCRYPT_MAN_STATUS = @GCRYPT_MAN_STATUS@
+GNUTLS_COMMON_O = @GNUTLS_COMMON_O@
+GNUTLS_MAN_STATUS = @GNUTLS_MAN_STATUS@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
+LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
+LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
+LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
+LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
+LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SKINDIR = @SKINDIR@
+STRIP = @STRIP@
+VERSION = @VERSION@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+noinst_LIBRARIES = libwmgeneral.a
+libwmgeneral_a_SOURCES = list.c list.h misc.c misc.h wmgeneral.c wmgeneral.h
+
+MAINTAINERCLEANFILES = Makefile.in
+subdir = wmgeneral
+mkinstalldirs = $(SHELL) $(top_srcdir)/autoconf/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+
+libwmgeneral_a_AR = $(AR) cru
+libwmgeneral_a_LIBADD =
+am_libwmgeneral_a_OBJECTS = list.$(OBJEXT) misc.$(OBJEXT) \
+ wmgeneral.$(OBJEXT)
+libwmgeneral_a_OBJECTS = $(am_libwmgeneral_a_OBJECTS)
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/list.Po ./$(DEPDIR)/misc.Po \
+ at AMDEP_TRUE@ ./$(DEPDIR)/wmgeneral.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(libwmgeneral_a_SOURCES)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(libwmgeneral_a_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu wmgeneral/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+
+AR = ar
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libwmgeneral.a: $(libwmgeneral_a_OBJECTS) $(libwmgeneral_a_DEPENDENCIES)
+ -rm -f libwmgeneral.a
+ $(libwmgeneral_a_AR) libwmgeneral.a $(libwmgeneral_a_OBJECTS) $(libwmgeneral_a_LIBADD)
+ $(RANLIB) libwmgeneral.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+ -rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/list.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/misc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmgeneral.Po at am__quote@
+
+distclean-depend:
+ -rm -rf ./$(DEPDIR)
+
+.c.o:
+ at AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ 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; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+ @list='$(DISTFILES)'; for file in $$list; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkinstalldirs) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$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 $(LIBRARIES)
+
+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_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+ distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
+ clean-noinstLIBRARIES distclean distclean-compile \
+ distclean-depend distclean-generic distclean-tags distdir dvi \
+ dvi-am info info-am install install-am install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic tags uninstall uninstall-am \
+ uninstall-info-am
+
+
+indent:
+ indent -npro -kr -i4 -ts4 $(libwmgeneral_a_SOURCES) || true
+
+dist-hook-local: indent
+# 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/wmgeneral/list.c b/wmgeneral/list.c
new file mode 100644
index 0000000..2366b0d
--- /dev/null
+++ b/wmgeneral/list.c
@@ -0,0 +1,155 @@
+/* Generic single linked list to keep various information
+ Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+
+
+Author: Kresten Krab Thorup
+
+Many modifications by Alfredo K. Kojima
+
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with files compiled with
+ GCC to produce an executable, this does not cause the resulting executable
+ to be covered by the GNU General Public License. This exception does not
+ however invalidate any other reasons why the executable file might be
+ covered by the GNU General Public License. */
+
+#include "list.h"
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#include <stdlib.h>
+
+/* Return a cons cell produced from (head . tail) */
+
+INLINE LinkedList *list_cons(void *head, LinkedList * tail)
+{
+ LinkedList *cell;
+
+ cell = (LinkedList *) malloc(sizeof(LinkedList));
+ cell->head = head;
+ cell->tail = tail;
+ return cell;
+}
+
+/* Return the length of a list, list_length(NULL) returns zero */
+
+INLINE int list_length(LinkedList * list)
+{
+ int i = 0;
+ while (list) {
+ i += 1;
+ list = list->tail;
+ }
+ return i;
+}
+
+/* Return the Nth element of LIST, where N count from zero. If N
+ larger than the list length, NULL is returned */
+
+INLINE void *list_nth(int idx, LinkedList * list)
+{
+ while (idx-- != 0) {
+ if (list->tail)
+ list = list->tail;
+ else
+ return 0;
+ }
+ return list->head;
+}
+
+/* Remove the element at the head by replacing it by its successor */
+
+INLINE void list_remove_head(LinkedList ** list)
+{
+ if (!*list)
+ return;
+ if ((*list)->tail) {
+ LinkedList *tail = (*list)->tail; /* fetch next */
+ *(*list) = *tail; /* copy next to list head */
+ free(tail); /* free next */
+ } else { /* only one element in list */
+
+ free(*list);
+ (*list) = 0;
+ }
+}
+
+
+/* Remove the element with `car' set to ELEMENT */
+/*
+INLINE void
+list_remove_elem(LinkedList** list, void* elem)
+{
+ while (*list)
+ {
+ if ((*list)->head == elem)
+ list_remove_head(list);
+ *list = (*list ? (*list)->tail : NULL);
+ }
+}*/
+
+INLINE LinkedList *list_remove_elem(LinkedList * list, void *elem)
+{
+ LinkedList *tmp;
+
+ if (list) {
+ if (list->head == elem) {
+ tmp = list->tail;
+ free(list);
+ return tmp;
+ }
+ list->tail = list_remove_elem(list->tail, elem);
+ return list;
+ }
+ return NULL;
+}
+
+
+/* Return element that has ELEM as car */
+
+INLINE LinkedList *list_find(LinkedList * list, void *elem)
+{
+ while (list) {
+ if (list->head == elem)
+ return list;
+ list = list->tail;
+ }
+ return NULL;
+}
+
+/* Free list (backwards recursive) */
+
+INLINE void list_free(LinkedList * list)
+{
+ if (list) {
+ list_free(list->tail);
+ free(list);
+ }
+}
+
+/* Map FUNCTION over all elements in LIST */
+
+INLINE void list_mapcar(LinkedList * list, void (*function) (void *))
+{
+ while (list) {
+ (*function) (list->head);
+ list = list->tail;
+ }
+}
diff --git a/wmgeneral/list.h b/wmgeneral/list.h
new file mode 100644
index 0000000..b32e65d
--- /dev/null
+++ b/wmgeneral/list.h
@@ -0,0 +1,59 @@
+/* Generic single linked list to keep various information
+ Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+
+Author: Kresten Krab Thorup
+
+This file is part of GNU CC.
+
+GNU CC 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.
+
+GNU CC 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 CC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* As a special exception, if you link this library with files compiled with
+ GCC to produce an executable, this does not cause the resulting executable
+ to be covered by the GNU General Public License. This exception does not
+ however invalidate any other reasons why the executable file might be
+ covered by the GNU General Public License. */
+
+#ifndef __LIST_H_
+#define __LIST_H_
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+# define INLINE inline
+#else
+# define INLINE
+#endif
+
+typedef struct LinkedList {
+ void *head;
+ struct LinkedList *tail;
+} LinkedList;
+
+INLINE LinkedList *list_cons(void *head, LinkedList * tail);
+
+INLINE int list_length(LinkedList * list);
+
+INLINE void *list_nth(int n, LinkedList * list);
+
+INLINE void list_remove_head(LinkedList ** list);
+
+INLINE LinkedList *list_remove_elem(LinkedList * list, void *elem);
+
+INLINE void list_mapcar(LinkedList * list, void (*function) (void *));
+
+INLINE LinkedList *list_find(LinkedList * list, void *elem);
+
+INLINE void list_free(LinkedList * list);
+
+#endif
diff --git a/wmgeneral/misc.c b/wmgeneral/misc.c
new file mode 100644
index 0000000..bf03449
--- /dev/null
+++ b/wmgeneral/misc.c
@@ -0,0 +1,35 @@
+/* dock.c- built-in Dock module for WindowMaker
+ *
+ * WindowMaker window manager
+ *
+ * Copyright (c) 1997 Alfredo K. Kojima
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "list.h"
+#include "misc.h"
+
+extern pid_t execCommand(const char *command)
+{
+ pid_t pid;
+
+ if ((pid = fork()) == 0) {
+ execl("/bin/sh", "sh", "-c", command, (char *) 0);
+ }
+ return pid;
+}
diff --git a/wmgeneral/misc.h b/wmgeneral/misc.h
new file mode 100644
index 0000000..2546bcb
--- /dev/null
+++ b/wmgeneral/misc.h
@@ -0,0 +1,9 @@
+#ifndef __MISC_H
+#define __MISC_H
+
+#include <unistd.h>
+
+extern void parse_command(char *, char ***, int *);
+
+extern pid_t execCommand(const char *);
+#endif /* __MISC_H */
diff --git a/wmgeneral/wmgeneral.c b/wmgeneral/wmgeneral.c
new file mode 100644
index 0000000..88d76fe
--- /dev/null
+++ b/wmgeneral/wmgeneral.c
@@ -0,0 +1,612 @@
+/*
+ Best viewed with vim5, using ts=4
+
+ wmgeneral was taken from wmppp.
+
+ It has a lot of routines which most of the wm* programs use.
+
+ ------------------------------------------------------------
+
+ Author: Martijn Pieterse (pieterse at xs4all.nl)
+
+ ---
+ CHANGES:
+ ---
+ 14/09/1998 (Dave Clark, clarkd at skyia.com)
+ * Updated createXBMfromXPM routine
+ * Now supports >256 colors
+ 11/09/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * Removed a bug from parse_rcfile. You could
+ not use "start" in a command if a label was
+ also start.
+ * Changed the needed geometry string.
+ We don't use window size, and don't support
+ negative positions.
+ 03/09/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * Added parse_rcfile2
+ 02/09/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * Added -geometry support (untested)
+ 28/08/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * Added createXBMfromXPM routine
+ * Saves a lot of work with changing xpm's.
+ 02/05/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * changed the read_rc_file to parse_rcfile, as suggested by Marcelo E. Magallon
+ * debugged the parse_rc file.
+ 30/04/1998 (Martijn Pieterse, pieterse at xs4all.nl)
+ * Ripped similar code from all the wm* programs,
+ and put them in a single file.
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#include <X11/Xlib.h>
+#ifdef HAVE_X11_XPM_H
+#include <X11/xpm.h>
+#endif
+#ifdef HAVE_XPM_H
+#include <xpm.h>
+#endif
+#include <X11/Xutil.h> /* needed for Region on solaris? */
+#include <X11/extensions/shape.h>
+
+#include "wmgeneral.h"
+
+ /*****************/
+ /* X11 Variables */
+/*****************/
+
+Window Root;
+int screen;
+int x_fd;
+int d_depth;
+XSizeHints mysizehints;
+XWMHints mywmhints;
+Pixel back_pix, fore_pix;
+// static const char *Geometry = "";
+Window iconwin, win;
+GC NormalGC;
+XpmIcon wmgen_bkg;
+XpmIcon wmgen_src;
+Pixmap pixmask;
+
+ /*****************/
+ /* Mouse Regions */
+/*****************/
+
+typedef struct {
+ int enable;
+ int top;
+ int bottom;
+ int left;
+ int right;
+} MOUSE_REGION;
+
+MOUSE_REGION mouse_region[MAX_MOUSE_REGION];
+
+ /***********************/
+ /* Function Prototypes */
+/***********************/
+
+static void GetXPM(XpmIcon *, const char **);
+Pixel GetColor(const char *);
+void RedrawWindow(void);
+int CheckMouseRegion(int, int);
+
+/*******************************************************************************\
+|* parse_rcfile *|
+\*******************************************************************************/
+
+void parse_rcfile(const char *filename, rckeys * keys)
+{
+
+ char *p, *q;
+ char temp[128];
+ const char *tokens = " :\t\n";
+ FILE *fp;
+ int i, key;
+
+ fp = fopen(filename, "r");
+ if (fp) {
+ while (fgets(temp, 128, fp)) {
+ key = 0;
+ q = strdup(temp);
+ q = strtok(q, tokens);
+ while (key >= 0 && keys[key].label) {
+ if ((!strcmp(q, keys[key].label))) {
+ p = strstr(temp, keys[key].label);
+ p += strlen(keys[key].label);
+ p += strspn(p, tokens);
+ if ((i = strcspn(p, "#\n")))
+ p[i] = 0;
+ free(*keys[key].var);
+ *keys[key].var = strdup(p);
+ key = -1;
+ } else
+ key++;
+ }
+ free(q);
+ }
+ fclose(fp);
+ }
+}
+
+/*******************************************************************************\
+|* parse_rcfile2 *|
+\*******************************************************************************/
+
+void parse_rcfile2(const char *filename, rckeys2 * keys)
+{
+
+ char *p;
+ char temp[128];
+ const char *tokens = " :\t\n";
+ FILE *fp;
+ int i, key;
+ char *family = NULL;
+
+ fp = fopen(filename, "r");
+ if (fp) {
+ while (fgets(temp, 128, fp)) {
+ key = 0;
+ while (key >= 0 && keys[key].label) {
+ if ((p = strstr(temp, keys[key].label))) {
+ p += strlen(keys[key].label);
+ p += strspn(p, tokens);
+ if ((i = strcspn(p, "#\n")))
+ p[i] = 0;
+ free(*keys[key].var);
+ *keys[key].var = strdup(p);
+ key = -1;
+ } else
+ key++;
+ }
+ }
+ fclose(fp);
+ }
+ free(family);
+}
+
+
+/*******************************************************************************\
+|* GetXPM *|
+\*******************************************************************************/
+
+static void GetXPM(XpmIcon * wmgen_local, const char *pixmap_bytes[])
+{
+
+ XWindowAttributes attributes;
+ int err;
+
+ /* For the colormap */
+ XGetWindowAttributes(display, Root, &attributes);
+ /* despite the comment, I still don't understand...
+ attributes is subsequently unused in this function -ns 11/2002 */
+
+ wmgen_local->attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions);
+
+ err = XpmCreatePixmapFromData(display, Root, (char **) pixmap_bytes,
+ &(wmgen_local->pixmap),
+ &(wmgen_local->mask),
+ &(wmgen_local->attributes));
+
+ if (err != XpmSuccess) {
+ fprintf(stderr,
+ "Not enough free colorcells to create pixmap from data (err=%d).\n",
+ err);
+ exit(1);
+ }
+}
+
+/*******************************************************************************\
+|* GetColor *|
+\*******************************************************************************/
+
+Pixel GetColor(const char *name)
+{
+
+ XColor color;
+ XWindowAttributes attributes;
+
+ XGetWindowAttributes(display, Root, &attributes);
+
+ color.pixel = 0;
+ if (!XParseColor(display, attributes.colormap, name, &color)) {
+ fprintf(stderr, "wm.app: GetColor() can't parse %s.\n", name);
+ } else if (!XAllocColor(display, attributes.colormap, &color)) {
+ fprintf(stderr, "wm.app: GetColor() can't allocate %s.\n", name);
+ }
+ return color.pixel;
+}
+
+/*******************************************************************************\
+|* flush_expose *|
+\*******************************************************************************/
+
+static int flush_expose(Window w)
+{
+
+ XEvent dummy;
+ int i = 0;
+
+ while (XCheckTypedWindowEvent(display, w, Expose, &dummy))
+ i++;
+
+ return i;
+}
+
+/*******************************************************************************\
+|* RedrawWindow *|
+\*******************************************************************************/
+
+void RedrawWindow(void)
+{
+
+ flush_expose(iconwin);
+ XCopyArea(display, wmgen_bkg.pixmap, iconwin, NormalGC,
+ 0, 0, wmgen_bkg.attributes.width,
+ wmgen_bkg.attributes.height, 0, 0);
+ flush_expose(win);
+ XCopyArea(display, wmgen_bkg.pixmap, win, NormalGC,
+ 0, 0, wmgen_bkg.attributes.width,
+ wmgen_bkg.attributes.height, 0, 0);
+}
+
+/*******************************************************************************\
+|* RedrawWindowXY *|
+\*******************************************************************************/
+
+void RedrawWindowXY(int x, int y)
+{
+
+ flush_expose(iconwin);
+ XCopyArea(display, wmgen_bkg.pixmap, iconwin, NormalGC,
+ x, y, wmgen_bkg.attributes.width,
+ wmgen_bkg.attributes.height, 0, 0);
+ flush_expose(win);
+ XCopyArea(display, wmgen_bkg.pixmap, win, NormalGC,
+ x, y, wmgen_bkg.attributes.width,
+ wmgen_bkg.attributes.height, 0, 0);
+}
+
+/*******************************************************************************\
+|* AddMouseRegion *|
+\*******************************************************************************/
+
+void AddMouseRegion(unsigned int region_idx, int left, int top, int right,
+ int bottom)
+{
+
+ if (region_idx < MAX_MOUSE_REGION) {
+ mouse_region[region_idx].enable = 1;
+ mouse_region[region_idx].top = top;
+ mouse_region[region_idx].left = left;
+ mouse_region[region_idx].bottom = bottom;
+ mouse_region[region_idx].right = right;
+ }
+}
+
+/*******************************************************************************\
+|* CheckMouseRegion *|
+\*******************************************************************************/
+
+int CheckMouseRegion(int x, int y)
+{
+
+ int i;
+ int found;
+
+ found = 0;
+
+ for (i = 0; i < MAX_MOUSE_REGION && !found; i++) {
+ if (mouse_region[i].enable &&
+ x <= mouse_region[i].right &&
+ x >= mouse_region[i].left &&
+ y <= mouse_region[i].bottom && y >= mouse_region[i].top)
+ found = 1;
+ }
+ if (!found)
+ return -1;
+ return (i - 1);
+}
+
+/*******************************************************************************\
+|* createXBMfromXPM *|
+\*******************************************************************************/
+void createXBMfromXPM(char *xbm, const char **xpm, int sx, int sy)
+{
+
+ int i, j, k;
+ int width, height, numcol, depth;
+ int zero = 0;
+ unsigned char bwrite;
+ int bcount;
+ int curpixel;
+
+ sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
+
+
+ for (k = 0; k != depth; k++) {
+ zero <<= 8;
+ zero |= xpm[1][k];
+ }
+
+ for (i = numcol + 1; i < numcol + sy + 1; i++) {
+ bcount = 0;
+ bwrite = 0;
+ for (j = 0; j < sx * depth; j += depth) {
+ bwrite >>= 1;
+
+ curpixel = 0;
+ for (k = 0; k != depth; k++) {
+ curpixel <<= 8;
+ curpixel |= xpm[i][j + k];
+ }
+
+ if (curpixel != zero) {
+ bwrite += 128;
+ }
+ bcount++;
+ if (bcount == 8) {
+ *xbm = bwrite;
+ xbm++;
+ bcount = 0;
+ bwrite = 0;
+ }
+ }
+ }
+}
+
+/*******************************************************************************\
+|* copyXPMArea *|
+\*******************************************************************************/
+
+void copyXPMArea(int src_x, int src_y, int width, int height, int dest_x,
+ int dest_y)
+{
+
+ XCopyArea(display, wmgen_src.pixmap, wmgen_bkg.pixmap, NormalGC, src_x,
+ src_y, width, height, dest_x, dest_y);
+
+}
+
+/*******************************************************************************\
+|* copyXBMArea *|
+\*******************************************************************************/
+
+void copyXBMArea(int src_x, int src_y, int width, int height, int dest_x,
+ int dest_y)
+{
+
+ XCopyArea(display, wmgen_src.mask, wmgen_bkg.pixmap, NormalGC, src_x,
+ src_y, width, height, dest_x, dest_y);
+}
+
+
+/* added for wmbiff */
+XFontStruct *f;
+int loadFont(const char *fontname)
+{
+ if (display != NULL) {
+ f = XLoadQueryFont(display, fontname);
+ if (f) {
+ XSetFont(display, NormalGC, f->fid);
+ return 0;
+ } else {
+ printf("couldn't set font!\n");
+ }
+ }
+ return -1;
+}
+
+void drawString(int dest_x, int dest_y, const char *string,
+ const char *colorname, const char *bgcolorname,
+ int right_justify)
+{
+ int len = strlen(string);
+ assert(colorname != NULL);
+ XSetForeground(display, NormalGC, GetColor(colorname));
+ XSetBackground(display, NormalGC, GetColor(bgcolorname));
+ if (right_justify)
+ dest_x -= XTextWidth(f, string, len);
+ XDrawImageString(display, wmgen_bkg.pixmap, NormalGC, dest_x, dest_y,
+ string, len);
+}
+
+void eraseRect(int x, int y, int x2, int y2, const char *bgcolorname)
+{
+ XSetForeground(display, NormalGC, GetColor(bgcolorname));
+ XFillRectangle(display, wmgen_bkg.pixmap, NormalGC, x, y, x2 - x,
+ y2 - y);
+}
+
+/* end wmbiff additions */
+
+/*******************************************************************************\
+|* setMaskXY *|
+\*******************************************************************************/
+
+void setMaskXY(int x, int y)
+{
+
+ XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask,
+ ShapeSet);
+ XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask,
+ ShapeSet);
+}
+
+/*******************************************************************************\
+|* openXwindow *|
+\*******************************************************************************/
+void openXwindow(int argc, const char *argv[],
+ const char *pixmap_bytes_bkg[],
+ const char *pixmap_bytes_src[], char *pixmask_bits,
+ int pixmask_width, int pixmask_height, int notWithdrawn)
+{
+
+ unsigned int borderwidth = 1;
+ XClassHint classHint;
+ const char *display_name = NULL;
+ char *wname = strdup(argv[0]);
+ XTextProperty name;
+
+ XGCValues gcv;
+ unsigned long gcm;
+
+ const char *geometry = NULL;
+ char default_geometry[128];
+
+ int dummy = 0;
+ int i;
+
+ for (i = 1; argv[i]; i++) {
+ if (!strcmp(argv[i], "-display")) {
+ display_name = argv[i + 1];
+ i++;
+ }
+ if (!strcmp(argv[i], "-geometry")) {
+ geometry = argv[i + 1];
+ i++;
+ }
+ }
+
+ sprintf(default_geometry, "%dx%d+0+0", pixmask_width, pixmask_height);
+
+ if (!(display = XOpenDisplay(display_name))) {
+ fprintf(stderr, "%s: can't open display %s\n",
+ wname, XDisplayName(display_name));
+ exit(1);
+ }
+ screen = DefaultScreen(display);
+ Root = RootWindow(display, screen);
+ d_depth = DefaultDepth(display, screen);
+ x_fd = XConnectionNumber(display);
+
+ /* Convert XPM to XImage */
+ GetXPM(&wmgen_bkg, pixmap_bytes_bkg);
+ GetXPM(&wmgen_src, pixmap_bytes_src);
+
+ /* Create a window to hold the stuff */
+ mysizehints.flags = USSize | USPosition;
+ mysizehints.x = 0;
+ mysizehints.y = 0;
+
+ back_pix = GetColor("black");
+ fore_pix = GetColor("cyan");
+
+ XWMGeometry(display, screen, geometry, default_geometry, borderwidth,
+ &mysizehints, &mysizehints.x, &mysizehints.y,
+ &mysizehints.width, &mysizehints.height, &dummy);
+
+ mysizehints.width = pixmask_width; /* changed 11/2002 for wmbiff non 64x64-ness */
+ mysizehints.height = pixmask_height; /* was statically 64. */
+
+ win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
+ mysizehints.width, mysizehints.height,
+ borderwidth, fore_pix, back_pix);
+
+ iconwin =
+ XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
+ mysizehints.width, mysizehints.height,
+ borderwidth, fore_pix, back_pix);
+
+ /* Activate hints */
+ XSetWMNormalHints(display, win, &mysizehints);
+ classHint.res_name = wname;
+ classHint.res_class = wname;
+ XSetClassHint(display, win, &classHint);
+
+ /* Was PointerMotionMask instead of KeyPressMask, but pointer motion is irrelevant,
+ and if the user went to the trouble of giving us keypresses, the least we can do
+ is handle em... */
+ XSelectInput(display, win,
+ ButtonPressMask | ExposureMask | ButtonReleaseMask |
+ KeyPressMask | StructureNotifyMask);
+ XSelectInput(display, iconwin,
+ ButtonPressMask | ExposureMask | ButtonReleaseMask |
+ KeyPressMask | StructureNotifyMask);
+
+ /* wname is argv[0] */
+ if (XStringListToTextProperty(&wname, 1, &name) == 0) {
+ fprintf(stderr, "%s: can't allocate window name\n", wname);
+ exit(1);
+ }
+
+ XSetWMName(display, win, &name);
+
+ /* Create GC for drawing */
+
+ gcm = GCForeground | GCBackground | GCGraphicsExposures;
+ gcv.foreground = fore_pix;
+ gcv.background = back_pix;
+ gcv.graphics_exposures = 0;
+ NormalGC = XCreateGC(display, Root, gcm, &gcv);
+
+ /* ONLYSHAPE ON */
+
+ pixmask =
+ XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width,
+ pixmask_height);
+
+ XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask,
+ ShapeSet);
+ XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask,
+ ShapeSet);
+
+ /* ONLYSHAPE OFF */
+
+ mywmhints.initial_state = WithdrawnState;
+ mywmhints.icon_window = iconwin;
+ mywmhints.icon_x = mysizehints.x;
+ mywmhints.icon_y = mysizehints.y;
+ mywmhints.window_group = win;
+ mywmhints.flags =
+ (notWithdrawn ? 0 : StateHint) | IconWindowHint |
+ IconPositionHint | WindowGroupHint;
+
+ XSetWMHints(display, win, &mywmhints);
+
+ XSetCommand(display, win, (char **) argv, argc);
+ XMapWindow(display, win);
+
+ if (geometry) {
+ /* we'll silently drop width and height as well as negative positions */
+ /* mostly because I don't know how to deal with them */
+ /*
+ int wx, wy, x, y;
+ int specified = XParseGeometry(geometry, &x, &y, &wx, &wy);
+ printf("%d %d %d %d\n", x, y, wx, wy);
+ if( specified & XNegative ) {
+ x = DisplayWidth(display, DefaultScreen(display)) - x - pixmask_width;
+ }
+ if( specified & YNegative ) {
+ y = DisplayHeight(display, DefaultScreen(display)) - y - pixmask_height;
+ }
+ if( specified & XValue || specified & YValue ) {
+ XMoveWindow(display, win, x, y);
+ } */
+
+ /*
+ if (sscanf(geometry, "+%d+%d", &wx, &wy) == 2) {
+ XMoveWindow(display, win, wx, wy);
+ } else if (sscanf(geometry, "%dx%d+%d+%d", &x, &y, &wx, &wy) == 4) {
+ XMoveWindow(display, win, wx, wy);
+ } else if (sscanf(geometry, "+%d-%d", &wx, &wy) == 2) {
+ XMoveWindow(display, win, wx, 0 - wy);
+ } else {
+ fprintf(stderr, "Unsupported geometry string '%s'\n",
+ geometry);
+ exit(1);
+ } */
+ }
+}
diff --git a/wmgeneral/wmgeneral.h b/wmgeneral/wmgeneral.h
new file mode 100644
index 0000000..f2f3595
--- /dev/null
+++ b/wmgeneral/wmgeneral.h
@@ -0,0 +1,69 @@
+#ifndef WMGENERAL_H_INCLUDED
+#define WMGENERAL_H_INCLUDED
+
+ /***********/
+ /* Defines */
+/***********/
+
+#define MAX_MOUSE_REGION (16)
+
+ /************/
+ /* Typedefs */
+/************/
+
+typedef struct _rckeys rckeys;
+
+struct _rckeys {
+ const char *label;
+ char **var;
+};
+
+typedef struct _rckeys2 rckeys2;
+
+struct _rckeys2 {
+ const char *family;
+ const char *label;
+ char **var;
+};
+
+typedef struct {
+ Pixmap pixmap;
+ Pixmap mask;
+ XpmAttributes attributes;
+} XpmIcon;
+
+ /*******************/
+ /* Global variable */
+/*******************/
+
+Display *display;
+
+ /***********************/
+ /* Function Prototypes */
+/***********************/
+
+void AddMouseRegion(unsigned int rgn_index, int left, int top, int right,
+ int bottom);
+int CheckMouseRegion(int x, int y);
+
+void openXwindow(int argc, const char *argv[], const char **,
+ const char **, char *, int, int, int);
+void RedrawWindow(void);
+void RedrawWindowXY(int x, int y);
+
+void createXBMfromXPM(char *, const char **, int, int);
+void copyXPMArea(int, int, int, int, int, int);
+void copyXBMArea(int, int, int, int, int, int);
+void setMaskXY(int, int);
+
+void parse_rcfile(const char *, rckeys *);
+
+/* for wmbiff */
+int loadFont(const char *fontname); /* -1 on fail, 0 success. */
+void drawString(int dest_x, int dest_y, const char *string,
+ const char *colorname, const char *bgcolorname,
+ int right_justify);
+void eraseRect(int x, int y, int x2, int y2, const char *bgcolorname);
+/* end wmbiff */
+
+#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmbiff.git
More information about the Pkg-wmaker-commits
mailing list