Tagged wrong revision. Sigh.
authorMarcus Brinkmann <mb@g10code.com>
Thu, 2 Mar 2006 10:41:18 +0000 (10:41 +0000)
committerMarcus Brinkmann <mb@g10code.com>
Thu, 2 Mar 2006 10:41:18 +0000 (10:41 +0000)
205 files changed:
tags/gpgme-1-1-1/AUTHORS [deleted file]
tags/gpgme-1-1-1/COPYING [deleted file]
tags/gpgme-1-1-1/COPYING.LESSER [deleted file]
tags/gpgme-1-1-1/ChangeLog [deleted file]
tags/gpgme-1-1-1/INSTALL [deleted file]
tags/gpgme-1-1-1/Makefile.am [deleted file]
tags/gpgme-1-1-1/NEWS [deleted file]
tags/gpgme-1-1-1/README [deleted file]
tags/gpgme-1-1-1/README.CVS [deleted file]
tags/gpgme-1-1-1/THANKS [deleted file]
tags/gpgme-1-1-1/TODO [deleted file]
tags/gpgme-1-1-1/acinclude.m4 [deleted file]
tags/gpgme-1-1-1/assuan/ChangeLog [deleted file]
tags/gpgme-1-1-1/assuan/Makefile.am [deleted file]
tags/gpgme-1-1-1/assuan/README.1st [deleted file]
tags/gpgme-1-1-1/assuan/assuan-buffer.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-client.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-connect.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-defs.h [deleted file]
tags/gpgme-1-1-1/assuan/assuan-domain-connect.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-domain-server.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-handler.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-inquire.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-io.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-listen.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-logging.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-pipe-connect.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-pipe-server.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-socket-connect.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-socket-server.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-socket.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan-util.c [deleted file]
tags/gpgme-1-1-1/assuan/assuan.h [deleted file]
tags/gpgme-1-1-1/assuan/funopen.c [deleted file]
tags/gpgme-1-1-1/assuan/mkerrors [deleted file]
tags/gpgme-1-1-1/autogen.sh [deleted file]
tags/gpgme-1-1-1/compile [deleted file]
tags/gpgme-1-1-1/complus/ChangeLog [deleted file]
tags/gpgme-1-1-1/complus/Makefile.am [deleted file]
tags/gpgme-1-1-1/complus/README [deleted file]
tags/gpgme-1-1-1/complus/debug.c [deleted file]
tags/gpgme-1-1-1/complus/example.c [deleted file]
tags/gpgme-1-1-1/complus/gpgcom.c [deleted file]
tags/gpgme-1-1-1/complus/gpgcom.idl [deleted file]
tags/gpgme-1-1-1/complus/gpgcom.rc [deleted file]
tags/gpgme-1-1-1/complus/gpgcom.tlb [deleted file]
tags/gpgme-1-1-1/complus/guidgen.c [deleted file]
tags/gpgme-1-1-1/complus/igpgme.c [deleted file]
tags/gpgme-1-1-1/complus/igpgme.h [deleted file]
tags/gpgme-1-1-1/complus/main.h [deleted file]
tags/gpgme-1-1-1/complus/regtlb.c [deleted file]
tags/gpgme-1-1-1/complus/tgpgcom.c [deleted file]
tags/gpgme-1-1-1/complus/utf8.c [deleted file]
tags/gpgme-1-1-1/complus/vbtest.html [deleted file]
tags/gpgme-1-1-1/complus/vbtest.vbs [deleted file]
tags/gpgme-1-1-1/config.guess [deleted file]
tags/gpgme-1-1-1/config.sub [deleted file]
tags/gpgme-1-1-1/configure.ac [deleted file]
tags/gpgme-1-1-1/depcomp [deleted file]
tags/gpgme-1-1-1/doc/ChangeLog [deleted file]
tags/gpgme-1-1-1/doc/Makefile.am [deleted file]
tags/gpgme-1-1-1/doc/gpgme.texi [deleted file]
tags/gpgme-1-1-1/doc/lesser.texi [deleted file]
tags/gpgme-1-1-1/doc/mdate-sh [deleted file]
tags/gpgme-1-1-1/doc/texinfo.tex [deleted file]
tags/gpgme-1-1-1/gpgme.spec.in [deleted file]
tags/gpgme-1-1-1/gpgme.txt [deleted file]
tags/gpgme-1-1-1/gpgme/ChangeLog [deleted file]
tags/gpgme-1-1-1/gpgme/Makefile.am [deleted file]
tags/gpgme-1-1-1/gpgme/ath-pth.c [deleted file]
tags/gpgme-1-1-1/gpgme/ath-pthread.c [deleted file]
tags/gpgme-1-1-1/gpgme/ath.c [deleted file]
tags/gpgme-1-1-1/gpgme/ath.h [deleted file]
tags/gpgme-1-1-1/gpgme/context.h [deleted file]
tags/gpgme-1-1-1/gpgme/conversion.c [deleted file]
tags/gpgme-1-1-1/gpgme/data-compat.c [deleted file]
tags/gpgme-1-1-1/gpgme/data-fd.c [deleted file]
tags/gpgme-1-1-1/gpgme/data-mem.c [deleted file]
tags/gpgme-1-1-1/gpgme/data-stream.c [deleted file]
tags/gpgme-1-1-1/gpgme/data-user.c [deleted file]
tags/gpgme-1-1-1/gpgme/data.c [deleted file]
tags/gpgme-1-1-1/gpgme/data.h [deleted file]
tags/gpgme-1-1-1/gpgme/debug.c [deleted file]
tags/gpgme-1-1-1/gpgme/debug.h [deleted file]
tags/gpgme-1-1-1/gpgme/decrypt-verify.c [deleted file]
tags/gpgme-1-1-1/gpgme/decrypt.c [deleted file]
tags/gpgme-1-1-1/gpgme/delete.c [deleted file]
tags/gpgme-1-1-1/gpgme/edit.c [deleted file]
tags/gpgme-1-1-1/gpgme/encrypt-sign.c [deleted file]
tags/gpgme-1-1-1/gpgme/encrypt.c [deleted file]
tags/gpgme-1-1-1/gpgme/engine-backend.h [deleted file]
tags/gpgme-1-1-1/gpgme/engine-gpgsm.c [deleted file]
tags/gpgme-1-1-1/gpgme/engine.c [deleted file]
tags/gpgme-1-1-1/gpgme/engine.h [deleted file]
tags/gpgme-1-1-1/gpgme/error.c [deleted file]
tags/gpgme-1-1-1/gpgme/export.c [deleted file]
tags/gpgme-1-1-1/gpgme/funopen.c [deleted file]
tags/gpgme-1-1-1/gpgme/genkey.c [deleted file]
tags/gpgme-1-1-1/gpgme/get-env.c [deleted file]
tags/gpgme-1-1-1/gpgme/gpgme-config.in [deleted file]
tags/gpgme-1-1-1/gpgme/gpgme.c [deleted file]
tags/gpgme-1-1-1/gpgme/gpgme.def [deleted file]
tags/gpgme-1-1-1/gpgme/gpgme.h [deleted file]
tags/gpgme-1-1-1/gpgme/gpgme.m4 [deleted file]
tags/gpgme-1-1-1/gpgme/import.c [deleted file]
tags/gpgme-1-1-1/gpgme/isascii.c [deleted file]
tags/gpgme-1-1-1/gpgme/key.c [deleted file]
tags/gpgme-1-1-1/gpgme/keylist.c [deleted file]
tags/gpgme-1-1-1/gpgme/libgpgme.vers [deleted file]
tags/gpgme-1-1-1/gpgme/memrchr.c [deleted file]
tags/gpgme-1-1-1/gpgme/mkstatus [deleted file]
tags/gpgme-1-1-1/gpgme/op-support.c [deleted file]
tags/gpgme-1-1-1/gpgme/ops.h [deleted file]
tags/gpgme-1-1-1/gpgme/passphrase.c [deleted file]
tags/gpgme-1-1-1/gpgme/posix-io.c [deleted file]
tags/gpgme-1-1-1/gpgme/posix-sema.c [deleted file]
tags/gpgme-1-1-1/gpgme/posix-util.c [deleted file]
tags/gpgme-1-1-1/gpgme/priv-io.h [deleted file]
tags/gpgme-1-1-1/gpgme/progress.c [deleted file]
tags/gpgme-1-1-1/gpgme/putc_unlocked.c [deleted file]
tags/gpgme-1-1-1/gpgme/rungpg.c [deleted file]
tags/gpgme-1-1-1/gpgme/sema.h [deleted file]
tags/gpgme-1-1-1/gpgme/sig-notation.c [deleted file]
tags/gpgme-1-1-1/gpgme/sign.c [deleted file]
tags/gpgme-1-1-1/gpgme/signers.c [deleted file]
tags/gpgme-1-1-1/gpgme/stpcpy.c [deleted file]
tags/gpgme-1-1-1/gpgme/trust-item.c [deleted file]
tags/gpgme-1-1-1/gpgme/trustlist.c [deleted file]
tags/gpgme-1-1-1/gpgme/ttyname_r.c [deleted file]
tags/gpgme-1-1-1/gpgme/util.h [deleted file]
tags/gpgme-1-1-1/gpgme/vasprintf.c [deleted file]
tags/gpgme-1-1-1/gpgme/verify.c [deleted file]
tags/gpgme-1-1-1/gpgme/version.c [deleted file]
tags/gpgme-1-1-1/gpgme/versioninfo.rc.in [deleted file]
tags/gpgme-1-1-1/gpgme/w32-glib-io.c [deleted file]
tags/gpgme-1-1-1/gpgme/w32-io.c [deleted file]
tags/gpgme-1-1-1/gpgme/w32-sema.c [deleted file]
tags/gpgme-1-1-1/gpgme/w32-util.c [deleted file]
tags/gpgme-1-1-1/gpgme/wait-global.c [deleted file]
tags/gpgme-1-1-1/gpgme/wait-private.c [deleted file]
tags/gpgme-1-1-1/gpgme/wait-user.c [deleted file]
tags/gpgme-1-1-1/gpgme/wait.c [deleted file]
tags/gpgme-1-1-1/gpgme/wait.h [deleted file]
tags/gpgme-1-1-1/install-sh [deleted file]
tags/gpgme-1-1-1/ltmain.sh [deleted file]
tags/gpgme-1-1-1/m4/ChangeLog [deleted file]
tags/gpgme-1-1-1/m4/glib-2.0.m4 [deleted file]
tags/gpgme-1-1-1/m4/glibc21.m4 [deleted file]
tags/gpgme-1-1-1/m4/gpg-error.m4 [deleted file]
tags/gpgme-1-1-1/m4/libtool.m4 [deleted file]
tags/gpgme-1-1-1/m4/pth.m4 [deleted file]
tags/gpgme-1-1-1/missing [deleted file]
tags/gpgme-1-1-1/mkinstalldirs [deleted file]
tags/gpgme-1-1-1/tests/ChangeLog [deleted file]
tags/gpgme-1-1-1/tests/Makefile.am [deleted file]
tags/gpgme-1-1-1/tests/gpg/Makefile.am [deleted file]
tags/gpgme-1-1-1/tests/gpg/cipher-1.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/cipher-2.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/geheim.txt [deleted file]
tags/gpgme-1-1-1/tests/gpg/mkdemodirs [deleted file]
tags/gpgme-1-1-1/tests/gpg/pubdemo.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/pubkey-1.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/secdemo.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/seckey-1.asc [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-decrypt-verify.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-decrypt.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-edit.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-encrypt-large.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-encrypt-sign.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-encrypt-sym.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-encrypt.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-eventloop.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-export.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-file-name.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-genkey.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-import.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-keylist-sig.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-keylist.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-sig-notation.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-sign.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-signers.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-support.h [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-thread1.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-trustlist.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-verify.c [deleted file]
tags/gpgme-1-1-1/tests/gpg/t-wait.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/32100C27173EF6E9C4E9A25D3D69F86D37A4F939 [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/Makefile.am [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca01.der [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca15.der [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/cert_g10code_test1.der [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-decrypt.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-encrypt.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-export.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-genkey.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-import.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-keylist.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-sign.c [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-support.h [deleted file]
tags/gpgme-1-1-1/tests/gpgsm/t-verify.c [deleted file]
tags/gpgme-1-1-1/tests/t-data-1.txt [deleted file]
tags/gpgme-1-1-1/tests/t-data-2.txt [deleted file]
tags/gpgme-1-1-1/tests/t-data.c [deleted file]
tags/gpgme-1-1-1/tests/t-engine-info.c [deleted file]
tags/gpgme-1-1-1/tests/t-version.c [deleted file]

diff --git a/tags/gpgme-1-1-1/AUTHORS b/tags/gpgme-1-1-1/AUTHORS
deleted file mode 100644 (file)
index f948079..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-Package: gpgme
-Maintainer: Marcus Brinkmann <marcus@g10code.com>
-Bug reports: bug-gpgme@gnupg.org
-Security related bug reports: security@gnupg.org
-
-
-FSF <gnu@gnu.org>
- - Code taken from GnuPG 1.0: gpgme/w32-util.c, GnuPG 1.1: jnlib/.
-
-g10 Code GmbH <code@g10code.com>
- - All stuff since mid march 2001.
-
-Werner Koch <wk@gnupg.org>
- - Design and most stuff.
-
-Wojciech Polak <polak@lodz.pdi.net>
- - gpgme.spec
-
-
- Copyright 2001, 2002 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/COPYING b/tags/gpgme-1-1-1/COPYING
deleted file mode 100644 (file)
index d60c31a..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   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.
-\f
-                   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.)
-\f
-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.
-\f
-  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.
-\f
-  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
-\f
-           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/tags/gpgme-1-1-1/COPYING.LESSER b/tags/gpgme-1-1-1/COPYING.LESSER
deleted file mode 100644 (file)
index cf9b6b9..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 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.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations
-below.
-
-  When we speak of free software, we are referring to freedom of use,
-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 and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-^L
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it
-becomes a de-facto standard.  To achieve this, non-free programs must
-be allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-^L
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, 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 library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete 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 distribute a copy of this License along with the
-Library.
-
-  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.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-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 Library, 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 Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-^L
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you 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.
-
-  If distribution of 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 satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-^L
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at least
-    three years, to give the same user the materials specified in
-    Subsection 6a, above, for a charge no more than the cost of
-    performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be 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.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-^L
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library 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.
-
-  9. 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 Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-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 with
-this License.
-^L
-  11. 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 Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library 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 Library.
-
-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.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library 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.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-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 Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-^L
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-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
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. 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 LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-^L
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms
-of the ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.
-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 library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library 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
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; 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.
-
-You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the library,
-if necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James
-  Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/tags/gpgme-1-1-1/ChangeLog b/tags/gpgme-1-1-1/ChangeLog
deleted file mode 100644 (file)
index 539ca87..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-2006-02-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 1.1.1.
-
-       * configure.ac (LIBGPGME_LT_CURRENT, LIBGPGME_LT_AGE): Bump for
-       release.
-       (LIBGPGME_LT_REVISION): Reset to 0 for release.
-
-2006-01-05  Werner Koch  <wk@g10code.com>
-
-       * configure.ac: Test for inline feature.
-       (AH_BOTTOM): New to define the pure attribute.
-
-2006-01-03  Werner Koch  <wk@g10code.com>
-
-       * configure.ac: Append SVN revision to the version.
-
-2005-11-18  Werner Koch  <wk@g10code.com>
-
-       * configure.ac (BUILD_REVISION): New.
-
-2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Add support for --enable-w32-glib (disabled by
-       default).  Invoke AM_PATH_GLIB_2_0.
-
-2005-11-16  Werner Koch  <wk@g10code.com>
-
-       * configure.ac (CFLAGS) [W32]: Make sure that -mms-bitfields are used.
-
-2005-11-15  Werner Koch  <wk@g10code.com>
-
-       * configure.ac: Create BUILD_FILEVERSION from SVN Revision.
-
-       * autogen.sh [W32]: Build shared and static versions of the library.
-
-2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-dll/ChangeLog, w32-dll/build-dll, w32-dll/gpgme.def: Remove
-       files.
-
-       * configure.ac: Instead checking for windres and dlltool, invoke
-       AC_LIBTOOL_WIN32_DLL and AC_LIBTOOL_RC.
-       * src/Makefile.am [HAVE_W32_SYSTEM]: Use libtool, which simplifies
-       the rules.
-
-2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 1.1.0.
-
-       * configure.ac (LIBGPGME_LT_CURRENT, LIBGPGME_LT_AGE): Bump for
-       release.
-       (LIBGPGME_LT_REVISION): Reset to 0 for release.
-
-2005-09-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (HAVE_PTH): Don't add $PTH_CFLAGS to $CFLAGS here.
-
-2005-08-26  Werner Koch  <wk@g10code.com>
-
-       * configure.ac (SEPCONSTANTS): New to define DIRSEP_C et al.
-
-2005-08-19  Werner Koch  <wk@g10code.com>
-
-       * configure.ac [W32]: Create values for versioninfo.rc and list
-       substuture versioninfo.rc.
-       * configure.ac: Define ENABLE_GPGSM.
-
-2005-08-08  Werner Koch  <wk@g10code.com>
-
-       * configure.ac (stpcpy): Changed from replace to test.
-
-2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AH_BOTTOM): Removed.
-
-2005-03-09  Werner Koch  <wk@g10code.com>
-
-       * acinclude.m4 (GNUPG_CHECK_VA_COPY): Assume no when cross-compiling.
-
-       * Makefile.am (EXTRA_DIST): Include autogen.sh
-
-       * autogen.sh: Added the usual code to build for W32 (--build-w32).
-
-       * configure.ac: Fixed the mingw32 host string, removed OS/2 stuff.
-       (HAVE_DRIVE_LETTERS): Removed.
-       (HAVE_W32_SYSTEM): Added.
-       (AC_GNU_SOURCE): New to replace the identical AH_VERBATIM.
-       (AH_BOTTOM): Added.
-
-2004-12-28  Werner Koch  <wk@g10code.com>
-
-       Released 1.0.2.
-
-       * Makefile.am (AUTOMAKE_OPTIONS): Build bzip 2 version.
-       (ACLOCAL_AMFLAGS): Add -I m4.
-       * configure.ac: Require automake 1.9.3 and autoconf 2.59.
-       * acinclude.m4: Changed quoting for automake 1.9.
-       * README: Use SHA1 instead of MD5.
-
-2004-12-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Replace ttyname_r if it doesn't exist (and warn in
-       that case).
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * README: Refer to COPYING.LESSER and "each file" instead of
-       COPYING.
-       * COPYING.LESSER: New file.
-       * gpgme.spec.in (%doc): Add COPYING.LESSER.
-       * acinclude.m4, configure.ac, Makefile.am: Change license to LGPL
-       2.1 or later.
-       * TODO: Add copyright notice.
-       * README.CVS: Likewise.
-
-       * configure.ac (GPGSM_VERSION): Fix filter to get it.
-
-2004-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 1.0.1.
-
-       * configure.ac (LIBGPGME_LT_REVISION): Bump up to 2.
-       (AC_INIT): Set version to 1.0.1.
-
-       * configure.ac: Set HAVE_GPGSM to true only if $GPGSM is not "no".
-
-2004-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 1.0.0.
-
-       * configure.ac (LIBGPGME_LT_REVISION): Bump up to 1.
-       (AC_INIT): Set version to 1.0.0.
-
-       * Makefile.am (EXTRA_DIST): Remove README-alpha.
-       * README-alpha: Remove file.
-
-2004-09-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Disable AC_CONFIG_MACRO_DIR for now.
-
-2004-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Improve diagnostics with version check.
-
-       * configure.ac: Print diagnostics about found thread libraries at
-       the end.  Check for the versions of GPG and GPGSM and print the
-       found versions at the end.
-       (HAVE_GPGSM): Do not require GPGSM to exist and be readable.
-       (AC_CONFIG_MACRO_DIR): Invoke with argument m4.
-
-       * acinclude.m4: Add copyright notice.
-       (jm_GLIBC21, AM_PATH_GPG_ERROR, _AC_PTH_ERROR, _AC_PTH_VERBOSE,
-       AC_CHECK_PTH): Removed.
-
-2004-06-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Check for <sys/uio.h>.
-
-2004-06-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.9.0.
-
-       * configure.ac (AC_INIT): Set version number to 0.9.0.
-       (LIBGPGME_LT_CURRENT, LIBGPGME_LT_AGE): Bump up by one.
-       (LIBGPGME_LT_REVISION): Reset to zero.
-
-2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (GPGME_CONFIG_API_VERSION): New variable,
-       substitute it.
-
-2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.4.7.
-
-       * configure.ac (LIBGPGME_LT_REVISION): Bump it up.
-
-2004-04-02  Thomas Schwinge  <schwinge@nic-nac-project.de>
-
-       * autogen.sh: Added ACLOCAL_FLAGS.
-
-2004-04-06  Werner Koch  <wk@gnupg.org>
-
-       Released 0.4.6.
-       
-       * config.guess, config.sub, ltmain.sh: Updated to those from
-       libtools 1.5.4.
-
-2004-03-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.4.5.
-
-       * configure.ac (NEED_GPGSM_VERSION): Bump up to 1.9.6.
-
-       * Makefile.am (EXTRA_DIST): Remove autogen.sh and README.CVS.
-
-2004-02-18  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac: Make the check for funopen fail with just a
-       warning.
-
-2004-02-11  Werner Koch  <wk@gnupg.org>
-
-       * autogen.sh (check_version): Removed bashism and simplified.
-
-2004-02-10  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac: Fixed funopen test change.
-
-2004-02-06  Moritz Schulte  <mo@g10code.com>
-
-       * configure.ac: Fix funopen replacement mechanism.
-
-2004-01-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Add invocation of AC_SYS_LARGEFILE, AC_TYPE_OFF_T
-       and AC_FUNC_FSEEKO.
-
-2004-01-12  Werner Koch  <wk@gnupg.org>
-
-       Released 0.4.4.
-       
-       * configure.ac: Bumbed LT_Revision; now at C12/A1/R1. 
-       (NEED_GPGSM_VERSION): Set to 1.9.3.
-       (min_automake_version): Added.
-       * README.CVS: New.
-       * Makefile.am (EXTRA_DIST): Added README.CVS.
-       * autogen.sh: Updated.
-
-2003-11-19  Werner Koch  <wk@gnupg.org>
-
-       * acinclude.m4: Add AM_PATH_GPG_ERROR.
-       * configure.ac: Check for timegm.  Made warning messages more
-       prominent.
-
-2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.4.3.
-
-       * configure.ac (LIBGPGME_LT_CURRENT, LIBGPGME_LT_AGE): Bump up by 1.
-       (LIBGPGME_LT_REVISION): Set to 0.
-
-2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Require libgpg-error 0.5.
-
-       * acinclude.m4: Remove libtool cruft, add jm_GLIBC21.
-       * configure.ac: Add check for getenv_r, and call jm_GLIBC21.
-       Define HAVE_THREAD_SAFE_GETENV if appropriate.
-
-2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Remove GPGME_CONFIG_LIBS and GPGME_CONFIG_CFLAGS.
-
-2003-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Move invocation of AC_CANONICAL_HOST up to
-       suppress warning by autoconf.
-
-2003-08-30  Robert Schiele <rschiele@uni-mannheim.de>
-
-       * gpgme.spec.in: %{_infodir}/dir is not packaged,
-       remove to prevent checking failure.
-
-2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: If building Assuan, check for funopen and
-       fopencookie, and make isascii, putc_unlocked and memrchr
-       replacement functions.
-       (AM_PATH_GPG_ERROR): Require 0.3.
-
-2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_INIT): Bump version to 0.4.3.
-
-2003-07-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (LIBGPGME_LT_REVISION): Bump up to 1.
-
-       Released 0.4.2.
-
-2003-07-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Complain if libgpg-error is not found.
-
-2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_INIT): Bump version to 0.4.2.
-
-2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (LIBGPGME_LT_CURRENT): Bump up to 11.
-
-       * configure.ac: Use AM_PATH_GPG_ERROR.
-
-       * configure.ac: Check for libgpg-error.  Define
-       GPG_ERR_SOURCE_DEFAULT.
-
-2003-05-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (NEED_GPG_VERSION): Bump up to 1.2.2.
-
-2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       In all files, replace the Gpgme* type names with the new gpgme_*
-       type names.
-
-2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan/: Update files to 2002-11-10 version of assuan.
-
-2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * bonobo/gpgme.c, bonobo/main.c, bonobo/main.h, bonobo/Makefile,
-       bonobo/Makefile.am, bonobo/Makefile.in: Dead files removed.
-       * configure.ac: Remove automake conditional BUILD_BONOBO
-       (AC_CONFIG_FILES): Remove bonobo/Makefile.
-       * Makefile.am (bonobo): Remove variable.
-       (SUBDIRS): Remove ${bonobo}.
-       
-       * configure.ac: Remove all uses of GNUPG_CHECK_TYPEDEF, for byte,
-       ushort, ulong, u16 and u32.
-       * acinclude.m4 (GNUPG_CHECK_TYPEDEF): Remove macro.
-
-2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: New conditional HAVE_LD_VERSION_SCRIPT.
-       Call AC_CANONICAL_HOST, use host instead target.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Bump up to 0.4.1.
-       
-       Released 0.4.0.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * autogen.sh (automake_vers): Require 1.7 (really 1.7.1) for the
-       conditional source distribution bug fix.
-
-2002-12-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (LIBGPGME_LT_CURRENT): Increase by one.
-       (LIBGPGME_LT_AGE, LIBGPGME_LT_REVISION): Set to 0.
-
-2002-11-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * NEWS: Add note about moving "gpgmeplug" to the "cryptplug"
-       package.
-       * README: Remove instructions related to "gpgmeplug".
-       * configure.ac: Remove enable option "gpgmeplug" and automake
-       conditional BUILD_GPGMEPLUG, as well as the status info about it.
-       (GPGMEPLUG): Remove variable.
-       * Makefile.am (gpgmeplug): Remove variable.
-       (SUBDIRS): Remove ${gpgmeplug}.
-       * cryptplug.h, gpgme-openpgp.c, gpgmeplug.dox, gpgme-smime.c,
-       Makefile.am, gpgmeplug.c, ChangeLog: Files removed.
-
-2002-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Disable GPGSM for all dosish systems.
-
-2002-10-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Add automake conditional HAVE_GPGSM.
-
-2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_INIT): Bump version up to 0.4.0.
-       (NEED_GPG_VERSION): Bump up to 1.2.0.
-       (NEED_GPGSM_VERSION): Bump up to 0.9.0.
-       * README: Update version numbers.
-       * NEWS: Start entry for 0.4.0.
-
-2002-09-20  Werner Koch  <wk@gnupg.org>
-
-       Released 0.3.11.
-       
-       * configure.ac: Bump up LIBGPGME_LT_REVISION.
-
-       * configure.ac (AC_CHECK_HEADERS): Check for sys/select.h.
-
-2002-09-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * autogen.sh (autoconf_vers): Bump up to 2.53 to get the @&t@
-       quadrigraph.  Always cutting the edge!
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Create and substitute LTLIBOBJS.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.3.10.
-
-       * NEWS: Update for 0.3.9 release.
-       * configure.ac: Bump up LIBGPGME_LT_REVISION.
-
-2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.spec.in: Changed user name in Wojciech Polak's email
-       address from ghostface to polak per request by himself.
-
-2002-08-28  Werner Koch  <wk@gnupg.org>
-
-       * acinclude.m4 (GNUPG_CHECK_VA_COPY): New.
-       * configure.ac: Use it.
-
-2002-08-23  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac (GPGME_CONFIG_CFLAGS): Renamed from GPGME_CFLAGS
-       and removed the libpath because it is set by the config script.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Bump version number to 0.3.10.
-
-       * NEWS: Add template for development version.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.3.9.
-
-       * NEWS: Update for 0.3.9 release.
-       * Makefile.am (EXTRA_DIST): Add gpgme.spec.in.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * jnlib/argparse.c, jnlib/argparse.h, jnlib/ChangeLog,
-       jnlib/dotlock.c, jnlib/dotlock.h, jnlib/libjnlib-config.h,
-       jnlib/logging.c, jnlib/logging.h,jnlib/Makefile.am,
-       jnlib/mischelp.h, jnlib/README, jnlib/stringhelp.c,
-       jnlib/stringhelp.h, jnlib/strlist.c, jnlib/strlist.h,
-       jnlib/types.h, jnlib/xmalloc.c, jnlib/xmalloc.h: Remove files.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (SUBDIRS): Remove jnlib.
-       * configure.ac: Don't check for unsigned short or unsigned long.
-       Don't check for memicmp, strlwr, strtoul, memmove, stricmp.
-       Make stpcpy a replaced function.
-       Don't define HAVE_JNLIB_LOGGING.
-       Don't generate jnlib/Makefile.
-
-2002-07-02  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac: Bumbed version number to 0.3.9; add a comment on
-       when to change it.
-
-       * gpgme.spec.in: New. Contributed by Wojciech Polak.
-       * Makefile.am (dist-hook): New.
-
-       * AUTHORS: Added Wojciech and bug reporting addresses.
-
-2002-06-25  Werner Koch  <wk@gnupg.org>
-
-       Released 0.3.8.
-       
-       * configure.ac: Bumbed LT version to 9/3/0.
-       (NEED_GPGSM_VERSION): Need 0.3.8 due to fixed export command.
-
-2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       Released 0.3.7.
-
-       * configure.ac (AC_INIT): Set version to 0.3.7.
-       (LIBGPGME_LT_REVISION): Add one.
-
-       * README: Document version requirement correctly.
-
-2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * acinclude.m4: Fix Pth check so that it doesn't error out if pth
-       is not found.
-
-2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Add checks for Pth and pthreads.
-       * acinclude.m4: Add slightly hacked check for pth (seems to be an
-       autoconf version problem).
-
-2002-05-21  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac (NEED_GPGSM_VERSION): We need gpgsm 0.3.7.
-
-2002-05-03  Werner Koch  <wk@gnupg.org>
-
-       Released 0.3.6.
-
-2002-04-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * acconfig.h: File removed.
-       * configure.ac (NEED_GPG_VERSION): Add description.
-       (NEED_GPGSM_VERSION): Likewise.
-       (HAVE_DOSISH_SYSTEM): Likewise.
-       (HAVE_DRIVE_LETTERS): Likewise.
-       (GPG_PATH): Likewise.
-       (GPGSM_PATH): Likewise.
-       * acinclude.m4 (GNUPG_CHECK_TYPEDEF): Likewise.
-
-2002-04-01  Werner Koch  <wk@gnupg.org>
-
-       Released 0.3.5.
-
-2002-03-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac: Add automake conditional HAVE_DOSISH_SYSTEM.
-
-2002-03-04  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac: Bumbed version to 0.3.4-cvs to continue development.
-
-       Released 0.3.4.
-       
-       * configure.ac: Bumbed LT version numbers to (7,1,0), requires
-       gpgsm 0.3.1.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_INIT): Change version number to snapshot CVS
-       version.
-
-2002-02-13  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac (vasprintf,fopencookie): Add checks.
-
-2002-02-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_INIT): Bump version to 0.3.3.
-       * jnlib/Makefile.am: Rever to older version that includes xmalloc
-       but not dotlock and some other files.  Reported by Stéphane
-       Corthésy.
-       
-2002-02-10  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Released 0.3.2.
-
-       * configure.ac (AC_INIT): Bump version to 0.3.2.
-       * jnlib/libjnlibconfig.h: Revert to older version that doesn't
-       expect libgcrypt.  Reported by Jose Carlos Garcia Sogo
-       <jsogo@debian.org>.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Released 0.3.1.
-
-       * configure.ac (LIBGPGME_LT_CURRENT): Bump it up to 6!
-       (NEED_GPGSM_VERSION): Bump it up to 0.3.0!
-       (AC_INIT): Bump version to 0.3.1
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (HAVE_JNLIB_LOGGING): Define always for assuan.
-
-2001-12-19  Werner Koch  <wk@gnupg.org>
-
-       * configure.ac (VERSION,PACKAGE): Defined and subst.  Used for
-       AM_INIT_AUTOMAKE and moved all version number more to the top.
-
-2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * autogen.sh (libtool_vers): Bump to 1.4.
-
-       * configure.ac (LIBGPGME_LT_CURRENT): Increment.
-       (LIBGPGME_LT_AGE): Reset.
-       Improve comment.
-       Fix wrong comment character.
-
-2001-12-18  Werner Koch  <wk@gnupg.org>
-
-       * acinclude.m4 (GNUPG_FIX_HDR_VERSION): Fixed for new automake.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (GPG): Substitute this variable.
-       (GPGSM): Likewise.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (AC_CONFIG_FILES): Add tests/gpg/Makefile and
-       tests/gpgsm/Makefile.
-
-2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (gpgmeplug): New variable, set to gpgmeplug if
-       [BUILD_GPGMEPLUG].
-       * configure.ac (AC_CONFIG_FILES): Add gpgmeplug/Makefile.
-       Support --enable-gpgmeplug.
-
-2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * autogen.sh: Tighten version dependencies.
-
-2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (SUBDIRS): Support building the assuan library
-       (currently if GPGSM_PATH is set)..
-       * configure.ac: Support building the assuan library.
-       * assuan: New directory, populated with the Assuan library
-       (copied from the newpg repository).
-
-2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.ac (NEED_GPGSM_VERSION): New variable.  Treat it
-       similarly to NEED_GPG_VERSION.
-       * acconfig.h: Likewise.
-
-2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * configure.in: Renamed to ...
-       * configure.ac: ... this.  Update to autoconf 2.52.  Lots of small
-       changes in the transition.  Support --with-gpg=PATH and
-       --with-gpgsm=PATH options.  Check if test suites can be run.
-       * acconfig.h: Add GPGSM_PATH.
-       * Makefile.am: New variable `tests', set to `tests' if
-       RUN_GPG_TESTS.
-       (SUBDIRS): Replace string `tests' with variable `tests'.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * autogen.sh: Invoke automake with `-a' (add missing files).
-       Do not invoke configure.
-
-2001-09-17  Werner Koch  <wk@gnupg.org>
-
-       Released 0.2.3.
-       
-       * configure.in (NEED_GPG_VERSION): Set to 1.0.6. Incremented LT
-       current and age.
-
-       * Makefile.am (SUBDIRS): Add doc
-
-2001-06-12  Werner Koch  <wk@gnupg.org>
-
-       Released 0.2.2.
-
-2001-04-05  Werner Koch  <wk@gnupg.org>
-
-       * configure.in (NEED_GPG_VERSION): Set to 1.0.4g 
-
-2001-04-02  Werner Koch  <wk@gnupg.org>
-
-       Released 0.2.1.
-
-       Changed the copyright notices all over the place.
-       
-2001-02-28  Werner Koch  <wk@gnupg.org>
-
-       Released 0.2.0.
-
-2001-01-18  Werner Koch  <wk@gnupg.org>
-
-       * autogen.sh: Added option --build-w32.
-
-
- Copyright 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/INSTALL b/tags/gpgme-1-1-1/INSTALL
deleted file mode 100644 (file)
index 54caf7c..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
-Foundation, Inc.
-
-   This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
-
-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, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  (Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.)
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You only need
-`configure.ac' if you want to change it or regenerate `configure' using
-a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  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.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you 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 support 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' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of the options to `configure', and exit.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
-
diff --git a/tags/gpgme-1-1-1/Makefile.am b/tags/gpgme-1-1-1/Makefile.am
deleted file mode 100644 (file)
index 905c3ce..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Makefile.am - Top level Makefile for GPGME.
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2002, 2004, 2005 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-ACLOCAL_AMFLAGS = -I m4
-AUTOMAKE_OPTIONS = dist-bzip2
-
-EXTRA_DIST = gpgme.spec.in autogen.sh 
-
-if BUILD_ASSUAN
-assuan = assuan
-else
-assuan =
-endif
-
-if BUILD_COMPLUS
-complus = complus
-else
-complus = 
-endif
-
-if RUN_GPG_TESTS
-tests = tests
-else
-tests = 
-endif
-
-SUBDIRS = ${assuan} gpgme ${tests} doc ${complus}
-
-# Fix the version of the spec file and create a file named VERSION 
-# to be used for patch's Prereq: feature.
-dist-hook:
-       @set -e; \
-       sed -e 's/@pkg_version@/$(VERSION)/g' \
-           $(top_srcdir)/gpgme.spec.in  > $(distdir)/gpgme.spec
-       echo "$(VERSION)" > $(distdir)/VERSION
diff --git a/tags/gpgme-1-1-1/NEWS b/tags/gpgme-1-1-1/NEWS
deleted file mode 100644 (file)
index 78aeda0..0000000
+++ /dev/null
@@ -1,1164 +0,0 @@
-Noteworthy changes in version 1.1.1 (2006-02-23)
-------------------------------------------------
-
- * Fixed a bug in that the fingerprints of subkeys are not available.
-
- * Clarified usage of the SECRET flag in key listings.  It is now
-   reset for stub keys.
-
- * Reading signature notations and policy URLs on key signatures is
-   supported.  They can be found in the new field notations of the
-   gpgme_key_sig_t structure.  This has to be enabled with the keylist
-   mode flag GPGME_KEYLIST_MODE_SIG_NOTATIONS.
-
- * A new gpgme_free() function solves the problem of using different
-   allocators in a single program.  This function should now be used
-   instead calling free() to release the buffer returned by
-   gpgme_data_release_and_get_mem.  It is recommended that you always
-   do this, but it is only necessary on certain platforms, so backwards
-   compatibility is provided.  In other words: If free() worked for
-   you before, it will keep working.
-
- * New status codes GPGME_PKA_TRUST_GOOD and GPGME_PKA_TRUST_BAD.
-   They are analyzed by the verify handlers and made available in the
-   new PKA_TRUST and PKA_ADDRESS fields of the signature result structure.
-
- * Interface changes relative to the 1.1.0 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_key_sig_t                        EXTENDED: New field notations.
-GPGME_KEYLIST_MODE_SIG_NOTATIONS NEW
-gpgme_free                     NEW
-GPGME_STATUS_PKA_TRUST_BAD      NEW
-GPGME_STATUS_PKA_TRUST_GOOD     NEW
-gpgme_signature_t               EXTENDED: New field pka_trust.
-gpgme_signature_t               EXTENDED: New field pka_address.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Noteworthy changes in version 1.1.0 (2005-10-01)
-------------------------------------------------
-
- * You can now configure the backend engine file name and home
-   directory to be used, as default and per context.
-
- * Information about the recipients of an encrypted text is now
-   available at decryption time.
-
- * New status GPGME_STATUS_PLAINTEXT.  This is analyzed by the decrypt
-   and verify handlers, the information about the plaintext filename,
-   if available is made available in the new field file_name of the
-   respective result structure.
-
- * The code for "automagically detecting the thread library" has been
-   removed from libgpgme.  It is deprecated since version 0.4.3.
-   Since then, you had to link against libgpgme-pthread for
-   applications using pthread and libgpgme-pth for applications using
-   GNU Pth.
-
-   The code was removed because it caused compilation problems on
-   systems where the pthread.h header from GNU Pth is available in
-   addition to the system header (FreeBSD 6 and later for example).
-
- * "./autogen.sh --build-w32" does now build gpgme.dll.
-
- * [W32] The environment variable GPGME_DEBUG now uses a semicolon as
-   delimiter.  The standard install directory is used when locating
-   gpg or gpgsm before finally falling back to the hardwired name.
-
- * There is a new flag for keys and subkeys, is_qualified, which
-   indicates if a key can be used for qualified signatures according
-   to local government regulations.
-
- * You can associate a filename with a data object using the new
-   function gpgme_data_set_file_name().  This filename will be stored
-   in the output when encrypting or signing the data and will be
-   returned when decrypting or verifying the output data.
-
- * You can now set notation data at signature creation with the new
-   function gpgme_sig_notation_add().
-
- * Interface changes relative to the 1.0.3 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_set_engine_info          NEW
-gpgme_ctx_get_engine_info      NEW
-gpgme_ctx_set_engine_info      NEW
-gpgme_recipient_t              NEW
-gpgme_decrypt_result_t         EXTENDED: New field recipients.
-gpgme_verify_result_t          EXTENDED: New fields pubkey_algo, hash_algo.
-gpgme_decrypt_result_t         EXTENDED: New field plaintext_filename.
-gpgme_verify_result_t          EXTENDED: New field plaintext_filename.
-GPGME_STATUS_PLAINTEXT         NEW
-gpgme_key_t                    EXTENDED: New field is_qualified.
-gpgme_subkey_t                 EXTENDED: New field is_qualified.
-gpgme_data_get_file_name       NEW
-gpgme_data_set_file_name       NEW
-gpgme_sig_notation_flags_t     NEW
-GPGME_SIG_NOTATION_HUMAN_READABLE NEW
-GPGME_SIG_NOTATAION_CRITICAL   NEW
-gpgme_sig_notation_clear       NEW
-gpgme_sig_notation_add         NEW
-gpgme_sig_notation_get         NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Noteworthy changes in version 1.0.3 (2005-06-20)
-------------------------------------------------
-
- * Previousy, GPGME would use a default "include certs" of 1.  This
-   has been changed.  Now GPGME will use the crypto backend engines
-   default unless you set the value with gpgme_set_include_certs()
-   explicitely.  A new macro GPGME_INCLUDE_CERTS_DEFAULT can be used
-   as a value to explicitely request the new default behaviour.
-
-   Because the default changes, this is a slight change of the API
-   semantics.  We consider it to be a bug fix.
-
- * A bug which made GPGME hang has been fixed.  If you have
-   experienced hanging before, please try out this version and let me
-   know if you still experience hanging problems.
-
- * Interface changes relative to the 0.9.0 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_set_include_certs                CHANGED DEFAULT
-GPGME_INCLUDE_CERTS_DEFAULT    NEW
-GPGME_STATUS_SIG_SUBPACKET     NEW
-GPGME_STATUS_NEED_PASSPHRASE_PIN NEW
-GPGME_STATUS_SC_OP_FAILURE     NEW
-GPGME_STATUS_SC_OP_SUCCESS     NEW
-GPGME_STATUS_CARDCTRL          NEW
-GPGME_STATUS_BACKUP_KEY_CREATED        NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Noteworthy changes in version 1.0.2 (2004-12-28)
-------------------------------------------------
-
- * Changed the license of the library to the GNU Lesser General Public
-   License (LGPL), version 2.1 or later.
-
-
-Noteworthy changes in version 1.0.1 (2004-10-22)
-------------------------------------------------
-
- * Only bug fixes.
-
-
-Noteworthy changes in version 1.0.0 (2004-09-30)
-------------------------------------------------
-
- * Version 1.0.0!  We are proud to present you with a thoroughly
-   tested and stable version of the GPGME library.  A big Thank You!
-   to all the people who made this possible.
-
-   The development will be branched into a stable 1.x.y series and the
-   head.
-
- * The gpgme.m4 macro supports checking the API version.  Just prepend
-   it to the required version string, separated by a colon.  For
-   example, this release has the version "1:1.0.0".  The last release
-   to which this version is (mostly) ABI compatible is "1:0.4.2",
-   which is the default required version.
-
-
-Noteworthy changes in version 0.9.0 (2004-06-08)
-------------------------------------------------
-
- * The type gpgme_key_t has now a new field keylist_mode that contains
-   the keylist mode that was active at the time the key was retrieved.
-
- * The type gpgme_decrypt_result_t has a new field "wrong_key_usage"
-   that contains a flag indicating that the key should not have been
-   used for encryption.
-
- * Verifying a signature of a revoked key gives the correct result now
-   (GPG_ERR_CERT_REVOKED error code).
-
- * Clarified that the error code GPG_ERR_NO_DATA from the decrypt &
-   verify operations still allows you to look at the signature
-   verification result.
-
- * Clarified that patterns in keylisting operations have an upper
-   limit, and thus are not suited to list many keys at once by their
-   fingerprint.  Also improve the error message if the pattern is too
-   long for the CMS protocol to handle.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_key_t                    EXTENDED: New field keylist_mode.
-gpgme_decrypt_result_t         EXTENDED: New field wrong_key_usage.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Noteworthy changes in version 0.4.7 (2004-04-29)
-------------------------------------------------
-
- * Correctly initialize the fields expired, revoked, invalid, and
-   disabled in the gpgme_key_t structures.
-
- * A bug fix: The flag wrong_key_usage of gpgme_signature_t was
-   accidently of type int instead unsigned int.
-
- * Interface changes relative to the 0.4.5 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_signature_t              CHANGED: wrong_key_usage is unsigned int now.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.4.6 (2004-04-06)
-------------------------------------------------
-
- * Bug fixes
-
-
-Noteworthy changes in version 0.4.5 (2004-03-07)
-------------------------------------------------
-
- * GPGME is now compiled with LFS (large file support) by default.
-   This means that _all_ programs using GPGME must be compiled with
-   LFS support enabled by default.  You can do this easily with
-   autoconf, by using the AC_SYS_LARGEFILE macro.  Or you can do this
-   without autoconf by defining the preprocessor symbol
-   _FILE_OFFSET_BITS to 64 (by passing the -D_FILE_OFFSET_BITS=64 to
-   the C compiler command line, or by defining this preprocessor
-   symbol before including any system header files).  For more
-   details, read the section on LFS in the manual.
-
-   Up to now, it was undocumented that GPGME was not using LFS.
-   But the public interfaces use off_t, and file descriptors are
-   exchanged between the application and GPGME.  This was an oversight,
-   and bound to cause troubles in the future.
-
-   Writing GPGME as a dual mode library that seamlessly supports LFS
-   while keeping backwards compatibility is possible, but does not
-   solve the problem: Many applications already expect GPGME to have
-   LFS (they are compiled with off_t being a 64bit value).  This is true
-   in particular for the popular Gtk+ and Qt programs.
-
-   So, although this is an ABI (but not an API) break, we will not
-   change the library version to reflect that.  Because the interfaces
-   affected are probably not used yet in any GPGME 0.4 based
-   application, we don't expect any real failures from this change.
-   In fact, applications already using LFS will have some subtle bugs
-   fixed.
-
-   However, if you encounter an application using GPGME 0.4.x that
-   does _not_ use LFS by default (off_t is a 32bit value), _and_
-   uses at least one of the functions gpgme_data_seek,
-   gpgme_data_new_from_filepart, or a gpgme_data_seek_cb_t with
-   gpgme_data_new_from_cbs, then indeed this library will be ABI
-   incompatible with the program.  As said above, we don't believe
-   such a program exists.  If we are in error, then you have two
-   options: As a quick hack, you can configure GPGME with the
-   --disable-largefile option.  This will revert the change, and GPGME
-   will not use LFS.  However, GPGME will be incompatible with
-   programs that expect GPGME to use LFS.  All applications are
-   required to use LFS when using GPGME, so this is only good as a
-   temporary local work-around.
-
-   The other option is to change the versioning of the library and
-   recompile all applications.  We have reserved a special version of
-   the library for that, so you can do that without expecting a
-   version clash in the future.  Furthermore, everyone who does this
-   will agree on the version to use (this is important for
-   distribution makers).  Read the comment in configure.ac (before
-   LIBGPGME_LT_AGE) if you want to do this.  Please don't do this
-   blindly: As stated above, we think it is unlikely this measure is
-   needed.  Still, it is there if necessary.  If in doubt, contact us
-   and we will give our advise for your specific situation.
-
- * New key listing mode GPGME_KEYLIST_MODE_VALIDATE for validation of
-   the listed keys.
-
- * New interface gpgme_cancel() that can be used to cancel
-   asynchronous operations.
-
- * Interface changes relative to the 0.4.4 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_data_seek_cb_t           CHANGED: off_t is now a largefile type.
-gpgme_data_seek                        CHANGED: off_t is now a largefile type.
-gpgme_data_new_from_filepart   CHANGED: off_t is now a largefile type.
-GPGME_KEYLIST_MODE_VALIDATE     NEW
-gpgme_cancel                   NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.4.4 (2004-01-12)
-------------------------------------------------
-
- * The member "class" in gpgme_key_sig_t and gpgme_new_signature_t has
-   been renamed to "sig_class", to avoid clash with C++ compilers.  In
-   the C API, the old name "class" has been preserved for backwards
-   compatibility, but is deprecated.
-
- * Interface changes relative to the 0.4.3 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_key_sig_t                        CHANGED: class deprecated, use new sig_class.
-gpgme_new_signature_t          CHANGED: class deprecated, use new sig_class.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.4.3 (2003-10-06)
-------------------------------------------------
-
- * libgpgme should not be used for threaded programs anymore.  This
-   never worked reliably in all cases, because you had to
-   be careful about the linking order and libtool wouldn't do that for
-   you automatically.  Instead, now you have to link against
-   libgpgme-pthread for applications using pthread and libgpgme-pth for
-   applications using GNU Pth.
-
-   The old code for automagically detecting the thread library is
-   still part of libgpgme, but it is DEPRECATED.
-
- * There are new automake macros AM_PATH_GPGME_PTH and
-   AM_PATH_GPGME_PTHREAD, which support checking for thread-enabled
-   versions of GPGME.  They define GPGME_PTH_CFLAGS, GPGME_PTH_LIBS,
-   GPGME_PTHREAD_CFLAGS and GPGME_PTHREAD_LIBS respectively.  These
-   variables of course also include the configuration for the thread
-   package itself.  Alternatively, use libtool.
-
- * gpgme_strerror_r as a thread safe variant of gpgme_strerror was
-   added.
-
- * gpgme-config doesn't support setting the prefix or exec prefix
-   anymore.  I don't think it ever worked correctly, and it seems to
-   be pointless.
-
- * gpgme_get_key fails with GPG_ERR_AMBIGUOUS_NAME if the key ID
-   provided was not unique, instead returning the first matching key.
-
- * gpgme_key_t and gpgme_subkey_t have a new field, can_authenticate,
-   that indicates if the key can be used for authentication.
-
- * gpgme_signature_t's status field is now correctly set to an error
-   with error code GPG_ERR_NO_PUBKEY if public key is not found.
-
- * gpgme_new_signature_t's class field is now an unsigned int, rather
-   than an unsigned long (the old class field is preserved for
-   backwards compatibility).
-
- * A new function gpgme_set_locale() is provided to allow configuring
-   the locale for the crypto backend.  This is necessary for text
-   terminals so that programs like the pinentry can be started with
-   the right locale settings for the terminal the application is running
-   on, in case the terminal has different settings than the system
-   default (for example, if it is a remote terminal).  You are highly
-   recommended to call the following functions directly after
-   gpgme_check_version:
-
-   #include <locale.h>
-
-   setlocale (LC_ALL, "");
-   gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
-   gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
-
-   GPGME can not do this for you, as setlocale is not thread safe, and
-   there is no alternative.
-
- * The signal action for SIGPIPE is now set to SIG_IGN by
-   gpgme_check_version, instead the first time a crypto engine is
-   started (which is not well defined).
-
- * In the output of gpgme_hash_algo_name, change RMD160 to RIPEMD160,
-   TIGER to TIGER192, CRC32-RFC1510 to CRC32RFC1510, and CRC24-RFC2440
-   to CRC24RFC2440.  For now, these strings can be used as the MIC
-   parameter for PGP/MIME (if appropriately modified).
-
- * Interface changes relative to the 0.4.2 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_strerror_t               NEW
-gpgme_get_key                  CHANGED: Fails correctly if key ID not unique.
-gpgme_key_t                    EXTENDED: New field can_authenticate.
-gpgme_subkey_t                 EXTENDED: New field can_authenticate.
-gpgme_new_signature_t          CHANGED: New type for class field.
-gpgme_set_locale               NEW
-gpgme_hash_algo_name           CHANGED: Slight adjustment of algo names.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.4.2 (2003-07-30)
-------------------------------------------------
-
- * Allow gpg-error to be in non-standard place when linking the test suite.
-
- * Configure will fail now if gpg-error can not be found.
-
- * Fixed initialized memory backed data objects for writing, which
-   caused the test program to crash (but only on Mac OS, surprisingly).
-
- * Eliminate use of C99 constructs.
-
- * Small improvements to the manual.
-
-
-Noteworthy changes in version 0.4.1 (2003-06-06)
-------------------------------------------------
-
- This is the release that 0.4.0 should have been.  There are many
- interface changes, please see below for the details.  The changes are
- sometimes the result of new functionality, but more often express a
- paradigm shift.  Others are an overdue cleanup to get GPGME in line
- with the GNU coding standards and to make the interface more
- self-consistent.  Here is an overview on the changes:
-
- All types have been renamed to conform to the GNU coding standards,
- most of the time by keeping the whole name in lowercase and inserting
- underscores between words.
-
- All operations consistently only accept input parameters in their
- invocation function, and return only an error code directly.  Further
- information about the result of the operation has to be retrieved
- afterwards by calling one of the result functions.  This unifies the
- synchronous and the asynchronous interface.
-
- The error values have been completely replaced by a more
- sophisticated model that allows GPGME to transparently and accurately
- report all errors from the other GnuPG components, irregardless of
- process boundaries.  This is achieved by using the library
- libgpg-errors, which is shared by all GnuPG components.  This library
- is now required for GPGME.
-
- The results of all operations are now provided by pointers to C
- structs rather than by XML structs or in other ways.
-
- Objects which used to be opaque (for example a key) are now pointers
- to accessible structs, so no accessor functions are necessary.
-
- Backward compatibility is provided where it was possible without too
- much effort and did not collide with the overall sanitization effort.
- However, this is only for ease of transition.  NO DEPRECATED FUNCTION
- OR DATA TYPE IS CONSIDERED A PART OF THE API OR ABI AND WILL BE
- DROPPED IN THE FUTURE WITHOUT CHANGING THE SONAME OF THE LIBRARY.
- Recommendations how to replace deprecated or removed functionality
- can be found within the description of each change.
-
- What follows are all changes to the interface and behaviour of GPGME
- in detail.
-
- * If gpgme.h is included in sources compiled by GCC 3.1 or later,
-   deprecated attributes will warn about use of obsolete functions and
-   type definitions.  You can suppress these warnings by passing
-   -Wno-deprecated-declarations to the gcc command.
-
- * The following types have been renamed.  The old types are still
-   available as aliases, but they are deprecated now:
-   Old name:           New name:
-   GpgmeCtx            gpgme_ctx_t
-   GpgmeData           gpgme_data_t
-   GpgmeError          gpgme_error_t
-   GpgmeDataEncoding   gpgme_data_encoding_t
-   GpgmeSigStat                gpgme_sig_stat_t
-   GpgmeSigMode                gpgme_sig_mode_t
-   GpgmeAttr           gpgme_attr_t
-   GpgmeValidity       gpgme_validity_t
-   GpgmeProtocol       gpgme_protocol_t
-   GpgmeKey            gpgme_key_t
-   GpgmePassphraseCb   gpgme_passphrase_cb_t
-   GpgmeProgressCb     gpgme_progress_cb_t
-   GpgmeIOCb           gpgme_io_cb_t
-   GpgmeRegisterIOCb   gpgme_register_io_cb_t
-   GpgmeRemoveIOCb     gpgme_remove_io_cb_t
-   GpgmeEventIO                gpgme_event_io_t
-   GpgmeEventIOCb      gpgme_event_io_cb_t
-   GpgmeIOCbs          gpgme_io_cbs
-   GpgmeDataReadCb     gpgme_data_read_cb_t
-   GpgmeDataWriteCb    gpgme_data_write_cb_t
-   GpgmeDataSeekCb     gpgme_data_seek_cb_t
-   GpgmeDataReleaseCb  gpgme_data_release_cb_t
-   GpgmeDataCbs                gpgme_data_cbs_t
-   GpgmeTrustItem      gpgme_trust_item_t
-   GpgmeStatusCode     gpgme_status_code_t
-
- * gpgme_error_t is now identical to gpg_error_t, the error type
-   provided by libgpg-error.  More about using libgpg-error with GPGME
-   can be found in the manual.  All error symbols have been removed!
-
- * All functions and types in libgpg-error have been wrapped in GPGME.
-   The new types are gpgme_err_code_t and gpgme_err_source_t.  The new
-   functions are gpgme_err_code, gpgme_err_source, gpgme_error,
-   gpgme_err_make, gpgme_error_from_errno, gpgme_err_make_from_errno,
-   gpgme_err_code_from_errno, gpgme_err_code_to_errno,
-   gpgme_strsource.
-
- * GPGME_ATTR_IS_SECRET is not anymore representable as a string.
-
- * GnuPG 1.2.2 is required.  The progress callback is now also invoked
-   for encrypt, sign, encrypt-sign, decrypt, verify, and
-   decrypt-verify operations.  For verify operations on detached
-   signatures, the progress callback is invoked for both the detached
-   signature and the plaintext message, though.
-
- * gpgme_passphrase_cb_t has been changed to not provide a complete
-   description, but the UID hint, passphrase info and a flag
-   indicating if this is a repeated attempt individually, so the user
-   can compose his own description from this information.
-
-   The passphrase is not returned as a C string, but must be written
-   to a file descriptor directly.  This allows for secure passphrase
-   entries.
-
-   The return type has been changed to gpgme_error_t value.  This
-   allowed to remove the gpgme_cancel function; just return
-   the error code GPG_ERR_CANCELED in the passphrase callback directly.
-
- * gpgme_edit_cb_t has been changed to take a file descriptor argument.
-   The user is expected to write the response to the file descriptor,
-   followed by a newline.
-
- * The recipients interface has been removed.  Instead, you use
-   NULL-terminated lists of keys for specifying the recipients of an
-   encryption operation.  Use the new encryption flag
-   GPGME_ENCRYPT_ALWAYS_TRUST if you want to override the validity of
-   the keys (but note that in general this is not a good idea).
-
-   This change has been made to the prototypes of gpgme_op_encrypt,
-   gpgme_op_encrypt_start, gpgme_op_encrypt_sign and
-   gpgme_op_encrypt_sign_start.
-
-   The export interface has been changed to use pattern strings like
-   the keylist interface.  Thus, new functions gpgme_op_export_ext and
-   gpgme_op_export_ext_start have been added as well.  Now the
-   prototypes of gpgme_op_export_start and gpgme_op_export finally
-   make sense.
-
- * gpgme_op_verify and gpgme_op_decrypt_verify don't return a status
-   summary anymore.  Use gpgme_get_sig_status to retrieve the individual
-   stati.
-
- * gpgme_io_cb_t changed from a void function to a function returning
-   a gpgme_error_t value.  However, it will always return 0, so you
-   can safely ignore the return value.
-
- * A new I/O callback event GPGME_EVENT_START has been added.  The new
-   requirement is that you must wait until this event until you are
-   allowed to call the I/O callback handlers previously registered for
-   this context operation.  Calling I/O callback functions for this
-   context operation before the start event happened is unsafe because
-   it can lead to race conditions in a multi-threaded environment.
-
- * The idle function feature has been removed.  It was not precisely
-   defined in a multi-threaded environment and is obsoleted by the
-   user I/O callback functions.  If you still need a simple way to
-   call something while waiting on one or multiple asynchronous
-   operations to complete, don't set the HANG flag in gpgme_wait (note
-   that this will return to your program more often than the idle
-   function did).
-
- * gpgme_wait can return NULL even if hang is true, if an error
-   occurs.  In that case *status contains the error code.
-
- * gpgme_get_engine_info was radically changed.  Instead an XML
-   string, an info structure of the new type gpgme_engine_info_t is
-   returned.  This makes it easier and more robust to evaluate the
-   information in an application.
-
- * The new function gpgme_get_protocol_name can be used to convert a
-   gpgme_protocol_t value into a string.
-
- * The status of a context operation is not checked anymore.  Starting
-   a new operation will silently cancel the previous one.  Calling a
-   function that requires you to have started an operation before without
-   doing so is undefined.
-
- * The FPR argument to gpgme_op_genkey was removed.  Instead, use the
-   gpgme_op_genkey_result function to retrieve a gpgme_genkey_result_t
-   pointer to a structure which contains the fingerprint.  This also
-   works with gpgme_op_genkey_start.  The structure also provides
-   other information about the generated keys.
-
-   So, instead:
-
-   char *fpr;
-   err = gpgme_op_genkey (ctx, NULL, NULL, &fpr); 
-   if (!err && fpr)
-     printf ("%s\n", fpr);
-
-   you should now do:
-
-   gpgme_genkey_result_t result;
-   err = gpgme_op_genkey (ctx, NULL, NULL);
-   if (!err)
-     {
-       result = gpgme_op_genkey_result (ctx);
-       if (result->fpr)
-         printf ("%s\n", result->fpr);
-     }
-
- * The new gpgme_op_import_result function provides detailed
-   information about the result of an import operation in
-   gpgme_import_result_t and gpgme_import_status_t objects.
-   Thus, the gpgme_op_import_ext variant is deprecated.
-
- * The new gpgme_op_sign_result function provides detailed information
-   about the result of a signing operation in gpgme_sign_result_t,
-   gpgme_invalid_key_t and gpgme_new_signature_t objects.
-
- * The new gpgme_op_encrypt_result function provides detailed
-   information about the result of an encryption operation in
-   a GpgmeEncryptResult object.
-
- * The new gpgme_op_decrypt_result function provides detailed
-   information about the result of a decryption operation in
-   a GpgmeDecryptResult object.
-
- * The new gpgme_op_verify_result function provides detailed
-   information about the result of an verify operation in
-   a GpgmeVerifyResult object.  Because of this, the GPGME_SIG_STAT_*
-   values, gpgme_get_sig_status, gpgme_get_sig_ulong_attr,
-   gpgme_get_sig_string_attr and gpgme_get_sig_key are now deprecated,
-   and gpgme_get_notation is removed.
-
- * GpgmeTrustItem objects have now directly accessible data, so the
-   gpgme_trust_item_get_string_attr and gpgme_trust_item_get_ulong_attr
-   accessor functions are deprecated.  Also, reference counting is
-   available through gpgme_trust_item_ref and gpgme_trust_item_unref
-   (the gpgme_trust_item_release alias for the latter is deprecated).
-
- * Keys are not cached internally anymore, so the force_update argument
-   to gpgme_get_key has been removed.
-
- * GpgmeKey objects have now directly accessible data so the
-   gpgme_key_get_string_attr, gpgme_key_get_ulong_attr,
-   gpgme_key_sig_get_string_attr and gpgme_key_sig_get_ulong_attr
-   functions are deprecated.  Also, gpgme_key_release is now
-   deprecated.  The gpgme_key_get_as_xml function has been dropped.
-
- * Because all interfaces using attributes are deprecated, the
-   GpgmeAttr data type is also deprecated.
-
- * The new gpgme_op_keylist_result function provides detailed
-   information about the result of a key listing operation in
-   a GpgmeKeyListResult object.
-
- * Now that each function comes with its own result retrieval
-   interface, the generic gpgme_get_op_info interface is not useful
-   anymore and dropped.
-
- * The type and mode of data objects is not available anymore.
-
- * Interface changes relative to the 0.4.0 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GpgmeCtx                       DEPRECATED: Use gpgme_ctx_t.
-GpgmeData                      DEPRECATED: Use gpgme_data_t.
-GpgmeError                     DEPRECATED: Use gpgme_error_t.
-GpgmeDataEncoding              DEPRECATED: Use gpgme_data_encoding_t.
-GpgmeSigStat                   DEPRECATED: Use gpgme_sig_stat_t.
-GpgmeSigMode                   DEPRECATED: Use gpgme_sig_mode_t.
-GpgmeAttr                      DEPRECATED: Use gpgme_attr_t.
-GpgmeValidity                  DEPRECATED: Use gpgme_validity_t.
-GpgmeProtocol                  DEPRECATED: Use gpgme_protocol_t.
-GpgmeKey                       DEPRECATED: Use gpgme_key_t.
-GpgmePassphraseCb              DEPRECATED: Use gpgme_passphrase_cb_t.
-GpgmeProgressCb                        DEPRECATED: Use gpgme_progress_cb_t.
-GpgmeIOCb                      DEPRECATED: Use gpgme_io_cb_t.
-GpgmeRegisterIOCb              DEPRECATED: Use gpgme_register_io_cb_t.
-GpgmeRemoveIOCb                        DEPRECATED: Use gpgme_remove_io_cb_t.
-GpgmeEventIO                   DEPRECATED: Use gpgme_event_io_t.
-GpgmeEventIOCb                 DEPRECATED: Use gpgme_event_io_cb_t.
-GpgmeIOCbs                     DEPRECATED: Use gpgme_io_cbs.
-GpgmeDataReadCb                        DEPRECATED: Use gpgme_data_read_cb_t.
-GpgmeDataWriteCb               DEPRECATED: Use gpgme_data_write_cb_t.
-GpgmeDataSeekCb                        DEPRECATED: Use gpgme_data_seek_cb_t.
-GpgmeDataReleaseCb             DEPRECATED: Use gpgme_data_release_cb_t.
-GpgmeDataCbs                   DEPRECATED: Use gpgme_data_cbs_t.
-GpgmeTrustItem                 DEPRECATED: Use gpgme_trust_item_t.
-GpgmeStatusCode                        DEPRECATED: Use gpgme_status_code_t.
-gpgme_ctx_t                    NEW
-gpgme_data_t                   NEW
-gpgme_recipients_t             NEW
-gpgme_error_t                  NEW
-gpgme_data_encoding_t          NEW
-gpgme_sig_stat_t               NEW
-gpgme_sig_mode_t               NEW
-gpgme_attr_t                   NEW
-gpgme_validity_t               NEW
-gpgme_protocol_t               NEW
-gpgme_key_t                    NEW
-gpgme_passphrase_cb_t          NEW
-gpgme_progress_cb_t            NEW
-gpgme_io_cb_t                  NEW
-gpgme_register_io_cb_t         NEW
-gpgme_remove_io_cb_t           NEW
-gpgme_event_io_t               NEW
-gpgme_event_io_cb_t            NEW
-gpgme_io_cbs                   NEW
-gpgme_data_read_cb_t           NEW
-gpgme_data_write_cb_t          NEW
-gpgme_data_seek_cb_t           NEW
-gpgme_data_release_cb_t                NEW
-gpgme_data_cbs_t               NEW
-gpgme_trust_item_t             NEW
-gpgme_status_code_t            NEW
-GPGME_{some error code}                REMOVED! Use GPG_ERR_* from libgpg-error.
-gpgme_err_code_t               NEW
-gpgme_err_source_t             NEW
-gpgme_err_code                 NEW
-gpgme_err_source               NEW
-gpgme_error                    NEW
-gpgme_err_make                 NEW
-gpgme_error_from_errno         NEW
-gpgme_err_make_from_errno      NEW
-gpgme_err_code_from_errno      NEW
-gpgme_err_code_to_errno                NEW
-gpgme_strsource                        NEW
-gpgme_io_cb_t                  CHANGED: Return type from void to GpgmeError.
-gpgme_event_io_t               CHANGED: New event type (all numbers changed).
-gpgme_passphrase_cb_t          CHANGED: Desc decomposed, write directly to FD.
-gpgme_edit_cb_t                        CHANGED: Write directly to FD.
-gpgme_key_get_string_attr      CHANGED: Don't handle GPGME_ATTR_IS_SECRET.
-gpgme_op_verify                        CHANGED: Drop R_STAT argument.
-gpgme_op_decrypt_verify                CHANGED: Drop R_STAT argument.
-gpgme_wait                     CHANGED: Can return NULL even if hang is true.
-GpgmeIdleFunc                   REMOVED
-gpgme_register_idle             REMOVED
-GpgmeRecipients                        REMOVED
-gpgme_recipients_new           REMOVED
-gpgme_recipients_release       REMOVED
-gpgme_recipients_add_name      REMOVED
-gpgme_recipients_add_name_with_validity        REMOVED
-gpgme_recipients_count         REMOVED
-gpgme_recipients_enum_open     REMOVED
-gpgme_recipients_enum_read     REMOVED
-gpgme_recipients_enum_close    REMOVED
-gpgme_encrypt_flags_t          NEW
-GPGME_ENCRYPT_ALWAYS_TRUST     NEW
-gpgme_op_encrypt               CHANGED: Recipients passed as gpgme_key_t[].
-gpgme_op_encrypt_start         CHANGED: Recipients passed as gpgme_key_t[].
-gpgme_op_encrypt_sign          CHANGED: Recipients passed as gpgme_key_t[].
-gpgme_op_encrypt_sign_start    CHANGED: Recipients passed as gpgme_key_t[].
-gpgme_op_export_start          CHANGED: User IDs passed as patterns.
-gpgme_op_export                        CHANGED: User IDs passed as patterns.
-gpgme_op_export_ext_start      NEW
-gpgme_op_export_ext            NEW
-gpgme_keylist_mode_t           NEW
-gpgme_sigsum_t                 NEW
-gpgme_engine_info_t            NEW
-gpgme_get_engine_info          CHANGED: Return info structure instead XML.
-gpgme_get_protocol_name                NEW
-gpgme_cancel                   REMOVED: Return error in callback directly.
-gpgme_op_genkey                        CHANGED: FPR argument dropped.
-gpgme_op_genkey_result         NEW
-gpgme_genkey_result_t          NEW
-gpgme_op_import_ext            DEPRECATED: Use gpgme_op_import_result.
-gpgme_op_import_result         NEW
-gpgme_import_status_t          NEW
-gpgme_import_result_t          NEW
-gpgme_pubkey_algo_t            NEW
-gpgme_hash_algo_t              NEW
-gpgme_invalid_key_t            NEW
-gpgme_new_signature_t          NEW
-gpgme_sign_result_t            NEW
-gpgme_op_sign_result           NEW
-gpgme_pubkey_algo_name         NEW
-gpgme_hash_algo_name           NEW
-gpgme_encrypt_result_t         NEW
-gpgme_op_encrypt_result                NEW
-gpgme_decrypt_result_t         NEW
-gpgme_op_decrypt_result                NEW
-gpgme_verify_result_t          NEW
-gpgme_op_verify_result         NEW
-gpgme_get_notation             REMOVED: Access verify result directly instead.
-gpgme_get_sig_key              DEPRECATED: Use gpgme_get_key with fingerprint.
-gpgme_get_sig_ulong_attr       DEPRECATED: Use verify result directly.
-gpgme_get_sig_string_attr      DEPRECATED: Use verify result directly.
-GPGME_SIG_STAT_*               DEPRECATED: Use error value in sig status.
-gpgme_get_sig_status           DEPRECATED: Use verify result directly.
-gpgme_trust_item_t             CHANGED: Now has user accessible data members.
-gpgme_trust_item_ref           NEW
-gpgme_trust_item_unref         NEW
-gpgme_trust_item_release       DEPRECATED: Use gpgme_trust_item_unref.
-gpgme_trust_item_get_string_attr DEPRECATED
-gpgme_trust_item_get_ulong_attr        DEPRECATED
-gpgme_get_key                  CHANGED: Removed force_update argument.
-gpgme_sub_key_t                        NEW
-gpgme_key_sig_t                        NEW
-gpgme_user_id_t                        NEW
-gpgme_key_t                    CHANGED: Now has user accessible data members.
-gpgme_key_get_string_attr      DEPRECATED
-gpgme_key_get_ulong_attr       DEPRECATED
-gpgme_key_sig_get_string_attr  DEPRECATED
-gpgme_key_sig_get_ulong_attr   DEPRECATED
-gpgme_key_get_as_xml           REMOVED
-gpgme_key_list_result_t                NEW
-gpgme_op_keylist_result                NEW
-gpgme_get_op_info              REMOVED
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.4.0 (2002-12-23)
-------------------------------------------------
-
- * Key generation returns the fingerprint of the generated key.
-
- * New convenience function gpgme_get_key.
-
- * Supports signatures of user IDs in keys via the new
-   GPGME_KEYLIST_MODE_SIGS keylist mode and the
-   gpgme_key_sig_get_string_attr and gpgme_key_sig_get_ulong_attr
-   interfaces.  The XML info about a key also includes the signatures
-   if available.
-
- * New data object interface, which is more flexible and transparent.
-
- * Interface changes relative to the 0.3.9 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GpgmeDataReadCb                        NEW
-GpgmeDataWriteCb               NEW
-GpgmeDataSeekCb                        NEW
-GpgmeDataReleaseCb             NEW
-GpgmeDataCbs                   NEW
-gpgme_data_read                        CHANGED: Match read() closely.
-gpgme_data_write               CHANGED: Match write() closely.
-gpgme_data_seek                        NEW
-gpgme_data_new_from_fd         NEW
-gpgme_data_new_from_stream     NEW
-gpgme_data_new_from_cbs                NEW
-gpgme_data_rewind              DEPRECATED: Replaced by gpgme_data_seek().
-gpgme_data_new_from_read_cb    DEPRECATED: Replaced by gpgme_data_from_cbs().
-gpgme_data_get_type            REMOVED: No replacement.
-gpgme_op_verify                        CHANGED: Take different data objects for
-                               signed text and plain text.
-gpgme_op_verify_start          CHANGED: See gpgme_op_verify.
-gpgme_check_engine             REMOVED: Deprecated since 0.3.0.
-gpgme_op_genkey                        CHANGED: New parameter FPR.
-GPGME_KEYLIST_MODE_SIGS                NEW
-gpgme_key_sig_get_string_attr  NEW
-gpgme_key_sig_get_ulong_attr   NEW
-gpgme_get_key                  NEW
-GPGME_ATTR_SIG_CLASS           NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.16 (2003-11-19)
--------------------------------------------------
-
- * Compatibility fixes for GnuPG 1.9.x
-
-Noteworthy changes in version 0.3.15 (2003-02-18)
--------------------------------------------------
-
- * The progress status is sent via the progress callbacks in
-   gpgme_op_edit.
-
- * Bug fix for signing operations with explicit signer settings for
-   the CMS protocol.
-
-Noteworthy changes in version 0.3.14 (2002-12-04)
--------------------------------------------------
-
- * GPGME-Plug is now in its own package "cryptplug".
-
- * Workaround for a setlocale problem.  Fixed a segv related to not
-   correctly as closed marked file descriptors.
-
-Noteworthy changes in version 0.3.13 (2002-11-20)
--------------------------------------------------
-
- * Release due to changes in gpgmeplug.
-
-Noteworthy changes in version 0.3.12 (2002-10-15)
--------------------------------------------------
-
- * Fixed some bux with key listings.  
-
- * The development has been branched to clean up some API issues.
-   This 0.3 series will be kept for compatibility reasons; so do don't
-   expect new features.
-
-Noteworthy changes in version 0.3.11 (2002-09-20)
--------------------------------------------------
-        
- * Bug fixes.
-
-Noteworthy changes in version 0.3.10 (2002-09-02)
--------------------------------------------------
-
- * Setting the signing keys for the CMS protocol does now work.
-
- * The signers setting is honoured by gpgme_op_edit.
-
-Noteworthy changes in version 0.3.9 (2002-08-21)
-------------------------------------------------
-
- * A spec file for creating RPMs has been added.
-
- * An experimental interface to GnuPG's --edit-key functionality is
-   introduced, see gpgme_op_edit.
-
- * The new gpgme_import_ext function provides a convenient access to
-   the number of processed keys.
-
- * Interface changes relative to the 0.3.8 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GpgmeStatusCode                        NEW
-GpgmeEditCb                    NEW
-gpgme_op_edit_start            NEW
-gpgme_op_edit                  NEW
-gpgme_op_import_ext            NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.8 (2002-06-25)
-------------------------------------------------
-
- * It is possible to use an outside event loop for the I/O to the
-   crypto engine by setting the I/O callbacks with gpgme_set_io_cbs.
-
- * Interface changes relative to the 0.3.6 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GpgmeIOCb                      NEW
-GpgmeRegisterIOCb              NEW
-GpgmeRemoveIOCb                        NEW
-GpgmeEventIO                   NEW
-GpgmeEventIOCb                 NEW
-struct GpgmeIOCbs              NEW
-gpgme_set_io_cbs               NEW
-gpgme_get_io_cbs               NEW
-GPGME_ATTR_ERRTOK              NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.7 (2002-06-04)
-------------------------------------------------
-
- * GPGME_ATTR_OTRUST is implemented now.
-
- * A first step toward thread safeness has been achieved, see the
-   documentation for details.  Supported thread libraries are pthread
-   and Pth.
-
-Noteworthy changes in version 0.3.6 (2002-05-03)
-------------------------------------------------
-
- * All error output of the gpgsm backend is send to the bit bucket.
-
- * The signature verification functions are extended.  Instead of
-   always returning GPGME_SIG_STATUS_GOOD, the functions new codes for
-   expired signatures.  2 new functions may be used to retrieve more
-   detailed information like the signature expiration time and a
-   validity information of the key without an extra key looking.
-
- * The current passphrase callback and progress meter callback can be
-   retrieved with the new functions gpgme_get_passphrase_cb and
-   gpgme_get_progress_cb respectively.
-
- * Interface changes relative to the 0.3.5 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_get_passphrase_cb                NEW
-gpgme_get_progress_cb          NEW
-GpgmeDataEncoding               NEW
-gpgme_data_set_encoding         NEW
-gpgme_data_get_encoding         NEW
-GPGME_SIG_STAT_GOOD_EXP         NEW
-GPGME_SIG_STAT_GOOD_EXPKEY      NEW
-gpgme_op_verify                 CHANGED: Returns more status codes.
-GPGME_ATTR_SIG_STATUS           NEW
-gpgme_get_sig_string_attr       NEW
-gpgme_get_sig_ulong_attr        NEW
-gpgme_get_protocol              NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.5 (2002-04-01)
-------------------------------------------------
-
- * gpgme_op_encrypt can be called with RECIPIENTS being 0.  In this
-   case, symmetric encryption is performed.  Note that this requires a
-   passphrase from the user.
-
- * More information is returned for X.509 certificates.
-
- * Interface changes relative to the 0.3.4 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_op_encrypt               EXTENDED: Symmetric encryption possible
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.4 (2002-03-04)
-------------------------------------------------
-
- * gpgme_op_encrypt does now fail with GPGME_Invalid_Recipients if
-   some recipients have been invalid, whereas earlier versions
-   succeeded in this case.  The plaintext is still encrypted for all valid
-   recipients, so the application might take this error as a hint that
-   the ciphertext is not usable for all requested recipients.
-   Information about invalid recipients is available with gpgme_get_op_info.
-
- * gpgme_op_verify now allows to pass an uninitialized data object as
-   its plaintext argument to check for normal and cleartext
-   signatures.  The plaintext is then returned in the data object.
-
- * New interfaces gpgme_set_include_certs and gpgme_get_include_certs
-   to set and get the number of certifications to include in S/MIME
-   signed messages.
-
- * New interfaces gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start
-   to encrypt and sign a message in a combined operation.
-
- * New interface gpgme_op_keylist_ext_start to search for multiple patterns.
-
- * gpgme_key_get_ulong_attr supports the GPGME_ATTR_EXPIRE attribute.
-
- * Interface changes relative to the 0.3.3 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_op_encrypt               CHANGED: Can fail with GPGME_Invalid_Recipients
-gpgme_op_verify                        EXTENDED: Accepts uninitialized text argument
-gpgme_key_get_ulong_attr       EXTENDED: Supports GPGME_ATTR_EXPIRE
-gpgme_set_include_certs                NEW
-gpgme_get_include_certs                NEW
-gpgme_op_encrypt_sign          NEW
-gpgme_op_encrypt_sign_start    NEW
-gpgme_op_keylist_ext_start     NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.3 (2002-02-12)
-------------------------------------------------
-
- * Fix the Makefile in jnlib.
-
- * Fix the test suite (hopefully).  It should clean up all its state
-   with `make check' now.
-
-
-Noteworthy changes in version 0.3.2 (2002-02-10)
-------------------------------------------------
-
- * Remove erroneous dependency on libgcrypt in jnlib.
-
-
-Noteworthy changes in version 0.3.1 (2002-02-09)
-------------------------------------------------
-
- * There is a Texinfo manual documenting the API.
-
- * The gpgme_set_keylist_mode function returns an error, and changed
-   its meaning.  It is no longer usable to select between normal and
-   fast mode (newer versions of GnuPG will always be fast), but
-   selects between local keyring, remote keyserver, or both.
-   For this, two new macros are defined, GPGME_KEYLIST_MODE_LOCAL
-   and GPGME_KEYLIST_MODE_EXTERN.  To make it possible to modify the
-   current setting, a fucntion gpgme_get_keylist_mode was added to
-   retrieve the current mode.
-
- * gpgme_wait accepts a new argument STATUS to return the error status
-   of the operation on the context.  Its definition is closer to
-   waitpid() now than before.
-
- * The LENGTH argument to gpgme_data_new_from_filepart changed its
-   type from off_t to the unsigned size_t.
-
- * The R_HD argument to the GpgmePassphraseCb type changed its type
-   from void* to void**.
-
- * New interface gpgme_op_trustlist_end() to match
-   gpgme_op_keylist_end().
-
- * The CryptPlug modules have been renamed to gpgme-openpgp and
-   gpgme-smime, and they are installed in pkglibdir by `make install'.
-
- * An idle function can be registered with gpgme_register_idle().
-
- * The GpgSM backend supports key generation with gpgme_op_genkey().
-
- * Interface changes relative to the 0.3.0 release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_data_new_from_filepart   CHANGED: Type of LENGTH is size_t.
-GpgmePassphraseCb               CHANGED: Type of R_HD is void **.
-gpgme_wait                      CHANGED: New argument STATUS.
-gpgme_set_keylist_mode          CHANGED: Type of return value is GpgmeError.
-                                The function has a new meaning!
-gpgme_get_keylist_mode          NEW
-GPGME_KEYLIST_MODE_LOCAL        NEW
-GPGME_KEYLIST_MODE_EXTERN       NEW
-gpgme_op_trustlist_next                NEW
-GpgmeIdleFunc                   NEW
-gpgme_register_idle             NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Noteworthy changes in version 0.3.0 (2001-12-19)
-------------------------------------------------
- * New interface gpgme_set_protocol() to set the protocol and thus the
-   crypto engine to be used by the context.  Currently, the OpenPGP
-   and the CMS protocols are supported.  They are specified by the new
-   preprocessor symbols GPGME_PROTOCOL_OpenPGP and GPGME_PROTOCOL_CMS.
-   A new context uses the OpenPGP engine by default.
-
- * gpgme_get_engine_info() returns information for all crypto engines
-   compiled into the library.  The XML format has changed.  To
-   reliably get the version of a crypto engine, the <version> tag
-   after the appropriate <protocol> tag has to be looked for.
-
- * New interface gpgme_engine_check_version(), obsoleting
-   gpgme_check_engine().  Check the version of all engines you are
-   supporting in your software.
-
- * GpgmeKey lists the user ids in the order as they are returned by
-   GnuPG, first the primary key with index 0, then the sub-user ids.
-
- * New operation gpgme_op_decrypt_verify() to decrypt and verify
-   signatures simultaneously.
-
- * The new interface gpgme_op_keylist_end() terminates a pending
-   keylist operation.  A keylist operation is also terminated when
-   gpgme_op_keylist_next() returns GPGME_EOF.
-
- * GPGME can be compiled without GnuPG being installed (`--with-gpg=PATH'),
-   cross-compiled, or even compiled without support for GnuPG
-   (`--without-gpg').
-
- * GPGME can be compiled with support for GpgSM (GnuPG for S/MIME,
-   `--with-gpgsm=PATH').  It is enabled by default if the `gpgsm' is found
-   in the path, but it can also be compiled without support for GpgSM
-   (`--without-gpgsm').
-
- * CryptPlug modules for GPGME are included and can be enabled at
-   configure time (`--enable-gpgmeplug').  There is one module which
-   uses the GnuPG engine (`gpgmeplug') and one module which uses the
-   GpgSM engine (`gpgsmplug').
-
- * Interface changes relative to the latest 0.2.x release:
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-gpgme_key_get_as_xml           CHANGED: Sub-user ids reversed in order.
-gpgme_key_get_string_attr      CHANGED: User ids reversed in order.
-gpgme_key_get_ulong_attr       CHANGED: User ids reversed in order.
-gpgme_get_engine_info          CHANGED: New format, extended content.
-gpgme_engine_check_version     NEW
-gpgme_decrypt_verify_start     NEW
-gpgme_decrypt_verify           NEW
-gpgme_op_keylist_next          NEW
-gpgme_set_protocol             NEW
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-
-Noteworthy changes in version 0.2.3 (2001-09-17)
-------------------------------------------------
-
- * New function gpgme_get_op_info which can be used to get the micalg
-   parameter needed for MOSS.
-
- * New functions gpgme_get_armor and gpgme_get_textmode.
-
- * The usual bug fixes and some minor functionality improvements.
-
- * Added a simple encryption component for MS-Windows; however the
-   build procedure might have some problems.
-
-
-Noteworthy changes in version 0.2.2 (2001-06-12)
-------------------------------------------------
- * Implemented a key cache.
-
- * Fixed a race condition under W32 and some other bug fixes.
-
-
-Noteworthy changes in version 0.2.1 (2001-04-02)
-------------------------------------------------
-
- * Changed debug output and GPGME_DEBUG variable (gpgme/debug.c)
-
- * Handle GnuPG's new key capabilities output and support revocation
-   et al. attributes
-
- * Made the W32 support more robust.
-
-
- Copyright 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/README b/tags/gpgme-1-1-1/README
deleted file mode 100644 (file)
index bee7482..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-                  GPGME - GnuPG Made Easy
-                ---------------------------
-
-               Copyright 2004 g10 Code GmbH
-
-This file is free software; as a special exception the author gives
-unlimited permission to copy and/or distribute it, with or without
-modifications, as long as this notice is preserved.
-
-This file 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.
-
-
-Introduction
---------------
-
-GnuPG Made Easy (GPGME) is a C language library that allows to add
-support for cryptography to a program.  It is designed to make access
-to public key crypto engines like GnuPG or GpgSM easier for
-applications.  GPGME provides a high-level crypto API for encryption,
-decryption, signing, signature verification and key management.
-
-GPGME uses GnuPG and GpgSM as its backends to support OpenPGP and the
-Cryptographic Message Syntax (CMS).
-
-GPGME runs best on GNU/Linux or *BSD systems.  Other Unices may
-require small portability fixes, send us your patches.
-
-See the file COPYING.LESSER and each file for copyright and warranty
-information.
-
-
-Installation
---------------
-
-See the file INSTALL for generic installation instructions.
-
-Check that you have unmodified sources.  See below on how to do this.
-Don't skip it - this is an important step!
-
-To build GPGME, you need to install libgpg-error.  You need at least
-libgpg-error 0.5.
-
-For support of the OpenPGP protocol (default), you should use the
-latest version of GnuPG 1.2 or 1.4, available at:
-ftp://ftp.gnupg.org/gcrypt/gnupg/
-
-You need at least GnuPG 1.2.2.
-
-If configure can't find the `gpg' binary in your path, you can specify
-the location with the --with-gpg=/path/to/gpg argument to configure.
-
-For support of the CMS (Cryptographic Message Syntax) protocol, you
-need the latest CVS version of GnuPG 1.9, which is available in the
-GnuPG repository:
-http://www.gnupg.org/download/cvs_access.html
-Use the tag `GNUPG-1-9-BRANCH'.  There are also snapshots available at:
-ftp://ftp.gnupg.org/gcrypt/alpha/gnupg/
-
-You need at least GpgSM 1.9.6.
-
-If configure can't find the `gpgsm' binary in your path, you can
-specify the location with the --with-gpgsm=/path/to/gpgsm argument to
-configure.
-
-For building the CVS version of GPGME please see the file README.CVS
-for more information.
-
-
-How to Verify the Source
---------------------------
-
-In order to check that the version of GPGME which you are going to
-install is an original and unmodified one, you can do it in one of the
-following ways:
-
-a) If you have a trusted Version of GnuPG installed, you can simply check
-   the supplied signature:
-
-       $ gpg --verify gpgme-x.y.z.tar.gz.sig
-
-   This checks that the detached signature gpgme-x.y.z.tar.gz.sig is
-   indeed a a signature of gpgme-x.y.z.tar.gz.  The key used to create
-   this signature is either of:
-
-   "pub  1024D/57548DCD 1998-07-07 Werner Koch (gnupg sig) <dd9jn@gnu.org>"
-   "pub  1024D/87978569 1999-05-13
-                        Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>
-                        Marcus Brinkmann <mb@g10code.com>"
-
-   If you do not have this key, you can get it from any keyserver.  You
-   have to make sure that this is really the key and not a faked one.
-   You can do this by comparing the output of:
-
-       $ gpg --fingerprint 0x57548DCD
-
-   with the fingerprint published elsewhere.
-
-b) If you don't have any of the above programs, you have to verify
-   the SHA1 checksum:
-
-       $ sha1sum gpgme-x.y.z.tar.gz
-
-   This should yield an output _similar_ to this:
-
-   fd9351b26b3189c1d577f0970f9dcadc3412def1  gpgme-x.y.z.tar.gz
-
-   Now check that this checksum is _exactly_ the same as the one
-   published via the announcement list and probably via Usenet.
-
-
-Documentation
----------------
-
-For information how to use the library you can read the info manual,
-which is also a reference book, in the doc/ directory.  The programs
-in the tests/gpg/ directory may also prove useful.
-
-Please subscribe to the gnupg-devel@gnupg.org mailing list if you want
-to do serious work.
diff --git a/tags/gpgme-1-1-1/README.CVS b/tags/gpgme-1-1-1/README.CVS
deleted file mode 100644 (file)
index 642dda0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-If you are building from CVS, run the script
-
-./autogen.sh
-
-first, to make sure that you have all the necessary maintainer tools
-are installed and to build the actual configuration files.  Then run
-
-./configure --enable-maintainer-mode
-
-followed by the usual make.
-
-If autogen.sh complains about insufficient versions of the required
-tools, or the tools are not installed, you may use environment
-variables to override the default tool names:
-
- AUTOMAKE_SUFFIX  is used as a suffix for all tools from the automake
-                  package.  For example 
-                     AUTOMAKE_SUFFIX="-1.7" ./autogen.sh
-                  uses "automake-1.7" and "aclocal-1.7.
- AUTOMAKE_PREFIX  is used as a prefix for all tools from the automake
-                  page and may be combined with AUTOMAKE_SUFFIX. e.g.:
-                    AUTOMAKE_PREFIX=/usr/foo/bin ./autogen.sh
-                  uses "automake" and "aclocal" in the /usr/foo/bin
-                  directory.
- AUTOCONF_SUFFIX  is used as a suffix for all tools from the automake
-                  package
- AUTOCONF_PREFIX  is used as a prefix for all tools from the automake
-                  package
- GETTEXT_SUFFIX   is used as a suffix for all tools from the gettext
-                  package
- GETTEXT_PREFIX   is used as a prefix for all tools from the gettext
-                  package
-
-It is also possible to use the variable name AUTOMAKE, AUTOCONF,
-ACLOCAL, AUTOHEADER, GETTEXT and MSGMERGE to directly specify the name
-of the programs to run.  It is however better to use the suffix and
-prefix forms as described above because that does not require
-knowledge about the actual tools used by autgen.sh.
-
-
-Please don't use autopoint, libtoolize or autoreconf unless you are
-the current maintainer and want to update the standard configuration
-files.  All those files should be in the CVS and only updated manually
-if the maintainer decides that newer versions are required.  The
-maintainer should also make sure that the required version of automake
-et al. are properly indicated at the top of configure.ac and take care
-to copy the files and not merely use symlinks.
-
-
-Copyright 2004 g10 Code GmbH
-
-This file is free software; as a special exception the author gives
-unlimited permission to copy and/or distribute it, with or without
-modifications, as long as this notice is preserved.
-
-This file 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.
diff --git a/tags/gpgme-1-1-1/THANKS b/tags/gpgme-1-1-1/THANKS
deleted file mode 100644 (file)
index 4fda3d5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-For a list of the authors of the source code of GPGME, please see the
-file AUTHORS.  The following people supported GPGME development in
-various ways (for example by finding bugs or giving advice), and we
-want to thank them for their help.  If we forgot you, please let us
-know.
-
-Adriaan de Groot        adridg@cs.kun.nl
-Albrecht Dreß          albrecht.dress@arcor.de
-Alfons Hoogervorst      alfons@proteus.demon.nl
-Enno Cramer             uebergeek@web.de
-Frank Heckenbach        frank@g-n-u.de
-Igor Belyi             gpgme@katehok.ac93.org
-Jan-Oliver Wagner       jan@intevation.de
-Johannes Poehlmann      jhp@caldera.de
-Jose C. García Sogo     jose@jaimedelamo.eu.org
-Mark Mutz               mutz@kde.org
-Miguel Coca            mcoca@gnu.org
-Noel Torres            envite@rolamasao.org
-Stéphane Corthésy       stephane@sente.ch
-Timo Schulz             twoaday@freakmail.de
-Tommy Reynolds          reynolds@redhat.com
-                        
-
- Copyright 2001, 2002, 2004 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/TODO b/tags/gpgme-1-1-1/TODO
deleted file mode 100644 (file)
index 477d868..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-Hey Emacs, this is -*- outline -*- mode!
-
-* Before release:
-** Some gpg tests fail with gpg 1.3.4-cvs (gpg/t-keylist-sig)
-   The test is currently disabled there and in gpg/t-import.
-** When gpg supports it, write binary subpackets directly,
-   and parse SUBPACKET status lines.
-
-* ABI's to break:
-** gpgme_edit_cb_t: Add "processed" return argument
-   (see edit.c::command_handler).
-** I/O and User Data could be made extensible.  But this can be done
-   without breaking the ABI hopefully.
-*  All enums that should be enums need to have a maximum value to ensure
-   a certain minimum width for extensibility.
-** Compatibility interfaces that can be removed in future versions:
-*** gpgme_data_new_from_filepart
-*** gpgme_data_new_from_file
-*** gpgme_data_new_with_read_cb
-*** gpgme_data_rewind
-*** gpgme_op_import_ext
-*** gpgme_get_sig_key
-*** gpgme_get_sig_ulong_attr
-*** gpgme_get_sig_string_attr
-*** GPGME_SIG_STAT_*
-*** gpgme_get_sig_status
-*** gpgme_trust_item_release
-*** gpgme_trust_item_get_string_attr
-*** gpgme_trust_item_get_ulong_attr
-*** gpgme_attr_t
-*** All Gpgme* typedefs.
-
-
-* Thread support:
-** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
-** Without timegm (3) support our ISO time parser is not thread safe.
-   There is a configure time warning, though.
-
-* New features:
-** Extended notation support.  When gpg supports arbitrary binary
-   notation data, provide a user interface for that.
-** notification system
-   We need a simple notification system, probably a simple callback
-   with a string and some optional arguments.  This is for example
-   required to notify an application of a changed smartcard, The
-   application can then do whatever is required.  There are other
-   usages too.  This notfication system should be independent of any
-   contextes of course.
-** --learn-code support
-   This might be integrated with import. we still need to work out how
-   to learn a card when gpg and gpgsm have support for smartcards.
-** Might need a stat() for data objects and use it for length param to gpg.
-** Implement support for photo ids.
-** Allow selection of subkeys
-** Allow to return time stamps in ISO format
-  This allows us to handle years later than 2037 properly.  With the
-  time_t interface they are all mapped to 2037-12-31
-** New features requested by our dear users, but rejected or left for
-   later consideration:
-*** Allow to export secret keys.
-    Rejected because this is conceptually flawed.  Secret keys on a
-    smart card can not be exported, for example.
-*** Selecting the key ring, setting the version or comment in output.
-    Rejected because the naive implementation is engine specific, the
-    configuration is part of the engine's configuration or readily
-    worked around in a different way
-*** Selecting the symmetric cipher.
-*** Exchanging keys with key servers.
-
-* Documentation
-** Document validity and trust issues.
-** In gpgme.texi: Register callbacks under the right letter in the index.
-
-* Engines
-** Do not create/destroy engines, but create engine and then reset it.
-   Internally the reset operation still spawns a new engine process,
-   but this can be replaced with a reset later.  Also, be very sure to
-   release everything properly at a reset and at an error.  Think hard
-   about where to guarantee what (ie, what happens if start fails, are
-   the fds unregistered immediately - i think so?)
-** Optimize the case where a data object has 0an underlying fd we can pass
-   directly to the engine.  This will be automatic with socket I/O and
-   descriptor passing.
-** Move code common to all engines up from gpg to engine.
-** engine operations can return General Error on unknown protocol
-   (it's an internal error, as select_protocol checks already).
-** When server mode is implemented properly, more care has to be taken to
-   release all resources on error (for example to free assuan_cmd).
-
-* Operations
-** If an operation failed, make sure that the result functions don't return
-   corrupt partial information. !!!
-   NOTE: The EOF status handler is not called in this case !!!
-** Verify must not fail on NODATA premature if auto-key-retrieval failed.
-   It should not fail silently if it knows there is an error. !!!
-** All operations: Better error reporting. !!
-** Export status handler need much more work. !!!
-** Import should return a useful error when one happened.
-*** Import does not take notice of NODATA status report.
-*** When GPGSM does issue IMPORT_OK status reports, make sure to check for
-    them in tests/gpgs m/t-import.c.
-** Verify can include info about version/algo/class, but currently
-   this is only available for gpg, not gpgsm.
-** Return ENC_TO output in verify result.  Again, this is not available
-   for gpgsm.
-** Genkey should return something more useful than General_Error.
-** If possible, use --file-setsize to set the file size for proper progress
-   callback handling.  Write data interface for file size.
-** Optimize the file descriptor list, so the number of open fds is
-   always known easily.
-** Encryption: It should be verified that the behaviour for partially untrusted
-   recipients is correct.
-** When GPG issues INV_something for invalid signers, catch them.
-
-* Error Values
-** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
-** Some error values should identify the source more correctly (mostly error
-   values derived from status messages).
-
-* Tests
-** Write a fake gpg-agent so that we can supply known passphrases to
-   gpgsm and setup the configuration files to use the agent.  Without
-   this we are testing a currently running gpg-agent which is not a
-   clever idea. !
-** t-data
-*** Test gpgme_data_release_and_get_mem.
-*** Test gpgme_data_seek for invalid types.
-** t-keylist
-   Write a test for ext_keylist.
-** Test reading key signatures.
-
-* Debug
-** Handle malloc and vasprintf errors.  But decide first if they should be
-   ignored (and logged with 255?!), or really be assertions. !
-
-* Build suite
-** Make sure everything is cleaned correctly (esp. test area).
-** Enable AC_CONFIG_MACRO_DIR and bump up autoconf version requirement.
-   (To fix "./autogen.sh; ./configure --enable-maintainer-mode; touch
-   configure.ac; make").  Currently worked around with ACLOCAL_AMFLAGS???
-
-* Error checking 
-** engine-gpgsm, with-validation
-   Add error checking some time after releasing a new gpgsm.
-
-
-Copyright 2004, 2005 g10 Code GmbH
-
-This file is free software; as a special exception the author gives
-unlimited permission to copy and/or distribute it, with or without
-modifications, as long as this notice is preserved.
-
-This file 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.
diff --git a/tags/gpgme-1-1-1/acinclude.m4 b/tags/gpgme-1-1-1/acinclude.m4
deleted file mode 100644 (file)
index 9676656..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-dnl Macros to configure GPGME
-dnl Copyright (C) 2004 g10 Code GmbH
-dnl
-dnl This file is part of GPGME.
-dnl
-dnl GPGME is free software; you can redistribute it and/or modify it
-dnl under the terms of the GNU Lesser General Public License as
-dnl published by the Free Software Foundation; either version 2.1 of the
-dnl License, or (at your option) any later version.
-dnl 
-dnl GPGME is distributed in the hope that it will be useful, but WITHOUT
-dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-dnl or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
-dnl Public License for more details.
-dnl 
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this program; if not, write to the Free Software
-dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-dnl GNUPG_FIX_HDR_VERSION(FILE, NAME)
-dnl   Make the version number stored in NAME in the header file FILE the
-dnl   same as the one here.  This is easier than to have a .in file just
-dnl   for one substitution.
-dnl   We must use a temp file in the current directory because make
-dnl   distcheck installs all sourcefiles RO.
-dnl   (wk 2001-12-18)
-AC_DEFUN([GNUPG_FIX_HDR_VERSION],
-  [ sed "s/^#define $2 \".*/#define $2 \"$VERSION\"/" $srcdir/$1 > fixhdr.tmp
-    if cmp -s $srcdir/$1 fixhdr.tmp 2>/dev/null; then
-        rm -f fixhdr.tmp
-    else
-        rm -f $srcdir/$1
-        if mv fixhdr.tmp $srcdir/$1 ; then
-            :
-        else
-            AC_MSG_ERROR([[
-***
-*** Failed to fix the version string macro $2 in $1.
-*** The old file has been saved as fixhdr.tmp
-***]])
-        fi
-        AC_MSG_WARN([fixed the $2 macro in $1])
-    fi
-  ])
-
-dnl GNUPG_CHECK_VA_COPY()
-dnl   Do some check on how to implement va_copy.
-dnl   May define MUST_COPY_VA_BY_VAL.
-dnl   Actual test code taken from glib-1.1.
-AC_DEFUN([GNUPG_CHECK_VA_COPY],
-[ AC_MSG_CHECKING(whether va_lists must be copied by value)
-  AC_CACHE_VAL(gnupg_cv_must_copy_va_byval,[
-    if test "$cross_compiling" = yes; then
-      gnupg_cv_must_copy_va_byval=no
-    else
-      gnupg_cv_must_copy_va_byval=no
-      AC_TRY_RUN([
-       #include <stdarg.h>
-       void f (int i, ...)
-       {
-          va_list args1, args2;
-          va_start (args1, i);
-          args2 = args1;
-          if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-            exit (1);
-          va_end (args1);
-          va_end (args2);
-       }
-      
-       int main()
-       {
-          f (0, 42);
-            return 0;
-       }
-      ],gnupg_cv_must_copy_va_byval=yes)
-    fi
-  ])
-  if test "$gnupg_cv_must_copy_va_byval" = yes; then
-     AC_DEFINE(MUST_COPY_VA_BYVAL,1,[used to implement the va_copy macro])
-  fi
-  if test "$cross_compiling" = yes; then
-    AC_MSG_RESULT(assuming $gnupg_cv_must_copy_va_byval)
-  else
-    AC_MSG_RESULT($gnupg_cv_must_copy_va_byval)
-  fi
-])
diff --git a/tags/gpgme-1-1-1/assuan/ChangeLog b/tags/gpgme-1-1-1/assuan/ChangeLog
deleted file mode 100644 (file)
index 3aef839..0000000
+++ /dev/null
@@ -1,594 +0,0 @@
-2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan.h (assuan_pipe_connect, assuan_pipe_connect2): Make type
-       of ARGV parameter const in prototype.
-       * assuan-pipe-connect.c (assuan_pipe_connect,
-       assuan_pipe_connect2): Likewise in declaration.
-       (assuan_pipe_connect2): Add braindead cast to make execv happy.
-
-       * assuan-client.c (assuan_transact): Change LINE, S and D from
-       unsigned char * to char * to silence gcc warning.
-       * assuan-util.c (_assuan_log_sanitized_string): Add explicit cast
-       to silence gcc warning.
-       * assuan-inquire.c (assuan_inquire): Likewise.
-
-2005-08-19  Werner Koch  <wk@g10code.com>
-
-       * funopen.c, assuan-socket.c: Copied from libassuan CVS.
-       * assuan-pipe-connect.c (assuan_pipe_connect2): Add missing
-       declaration of PID.
-
-2005-08-09  Werner Koch  <wk@g10code.com>
-
-       * README.1st: Adjusted to cope with changes done in upstream Assuan.
-
-       Merged changes for W32 support from libassuan.
-       
-       * assuan.h [_ASSUAN_EXT_SYM_PREFIX]: New.
-       * assuan-io.c [_ASSUAN_NO_PTH]: New.
-       * assuan-pipe-connect.c (fix_signals) [_ASSUAN_NO_FIXED_SIGNALS]: New.
-       (assuan_pipe_connect2) [_ASSUAN_USE_DOUBLE_FORK]: Use double fork.
-       (fix_signals) [_ASSUAN_USE_DOUBLE_FORK]: Do not wait..
-       * assuan-logging.c, assuan-io.c: Include config.h
-       Replaced all usages of _WIN32 by the new HAVE_W32_SYSTEM because
-       there is nothing winning in this API.
-       * assuan-pipe-connect.c (assuan_pipe_connect2) [_WIN32]: Return
-       error Not Imlemented.
-       * assuan-logging.c (_assuan_w32_strerror): New. 
-       * assuan-defs.h (w32_strerror): new.
-       * assuan-pipe-connect.c (assuan_pipe_connect2, fix_signals):
-       Factored signal code out to new function.
-       (build_w32_commandline, create_inheritable_pipe): New.  Taken
-       from gnupg 1.9.
-       (assuan_pipe_connect2) [W32]: Implemented for W32.
-       * assuan-pipe-server.c (assuan_init_pipe_server) [W32]: Map file
-       descriptors using _get_osfhandle.
-       * assuan-socket-connect.c (assuan_socket_connect) [W32]: Allow for
-       a drive letter in the path.
-       * assuan-client.c (assuan_transact): Handle empty and comment
-       commands correctly.
-       * assuan-util.c (_assuan_calloc): Avoid integer overflow.
-       * assuan-util.c (assuan_set_flag, assuan_get_flag): New.
-       * assuan-defs.h (struct assuan_context_s): New field flags.
-       * assuan.h (assuan_flag_t): New with one flag value
-       ASSUAN_NO_WAITPID for now.
-       * assuan-pipe-connect.c (do_finish): Take care of the no_waitpid
-       flag.
-       * mkerrors: Include config.h into assuan-errors.c.  This is
-       required so that assuan.h knows about the W32 macro.
-
-2005-08-09 Timo Schulz  <twoaday@g10code.com> (ported from libassuan by wk)
-       
-       * assuan-io.c (_assuan_simple_read, _assuan_simple_write): W32
-       support.
-       * assuan-socket.c (_assuan_close): New.
-       (_assuan_sock_new): New.
-       (_assuan_sock_bind): New.
-
-2005-03-22  Werner Koch  <wk@g10code.com>
-
-       * assuan-defs.h (struct assuan_io): Renamed elements READ and
-       WRITE to READFNC and WRITEFNC to avoid problems with read defined
-       as macro.  Changed callers.  Noted by Ville Skyttä.
-
-2004-12-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-pipe-connect.c (do_finish): Do not wait for child to finish.
-       (assuan_pipe_connect): Use double-fork approach.
-       * assuan-connect.c (assuan_disconnect): Do not write BYE to the
-       status line.
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * README.1st: Add copyright notice.
-
-2004-06-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-domain-connect.c [HAVE_SYS_UIO_H]: Include <sys/uio.h>.
-
-       * assuan-handler.c: Include <errno.h>.
-
-2004-06-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-buffer.c (assuan_write_line): If the line is longer than
-       the maximum line length, bail out early.
-
-2004-04-19  Werner Koch  <wk@gnupg.org>
-
-       * assuan-socket-connect.c: Include sys/types.h
-       * assuan-socket-server.c: Ditto
-       * assuan-domain-connect.c: Ditto.
-
-2004-02-18  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (assuan_get_data_fp): Fail with ENOSYS if we
-       can't implement this.
-
-2004-02-13  Werner Koch  <wk@gnupg.org>
-
-       * assuan-domain-connect.c: Removed the unneeded alloca.h
-
-2003-08-13  Werner Koch  <wk@gnupg.org>
-
-       * assuan-inquire.c (assuan_inquire): Increase length of cmdbuf to
-       the Assuan limit.
-
-2003-06-24  Werner Koch  <wk@gnupg.org>
-
-       * mkerrors: Kludge to print libgpg-error values in an easier
-       readable way.
-
-2003-04-29  Werner Koch  <wk@gnupg.org>
-
-       * libassuan.m4: New. Based on libgrypt.m4.
-       * Makefile.am (m4data_DATA): New.
-
-       * assuan.h (AssuanCommand): Removed.
-
-       * assuan-handler.c: Remove the cmd_id element,
-       (assuan_register_command): Likewise.  Note that semantics changed.
-       (_assuan_register_std_commands): Adjusted.
-
-2003-02-22  Neal H. Walfield  <neal@g10code.de>
-
-       * Makefile.am (bin_SCRIPTS): Renamed from bin_PROGRAMS.
-
-2003-02-18  Neal H. Walfield  <neal@g10code.de>
-
-       * Makefile.am (libassuan_a_LIBADD): New variable.
-       * funopen.c: Move from ../common.
-       * isascii.c: Likewise.
-       * memrchr.c: Likewise.
-       * putc_unlocked.c: Likewise.
-       
-2003-02-18  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-handler.c (_IO_cookie_io_functions_t): Remove.
-       (cookie_io_functions_t): Remove.
-       (fopencookie): Remove prototype.
-       (assuan_get_data_fp): Use funopen, not fopencookie.
-
-2003-02-18  Neal H. Walfield  <neal@g10code.de>
-
-       * libassuan-config.in: New file.
-       * Makefile.am (bin_PROGRAMS): New variable.
-
-2003-02-17  Neal H. Walfield  <neal@g10code.de>
-
-       * .cvsignore: New file.
-
-2003-02-17  Neal H. Walfield  <neal@g10code.de>
-
-       * Makefile.am (lib_LIBRARIES): Use this instead of . . .
-       (noinst_LIBRARIES): . . . this.
-       (include_HEADERS): New variable.
-       (libassuan_a_SOURCES): Remove assuan.h, add assuan-logging.c.
-
-       * assuan.h (assuan_set_assuan_log_stream): New prototype.
-       (assuan_get_assuan_log_stream): Likewise.
-       (assuan_get_assuan_log_prefix): Likewise.
-       * assuan-logging.c: New file.
-
-       * assuan-buffer.c [HAVE_JNLIB_LOGGIN]: Do not include
-       "../jnlib/logging.h".
-       (my_log_prefix): Remove function.
-       (_assuan_read_line): Use assuan_get_assuan_log_prefix in lieu of
-       my_log_prefix.
-       (assuan_write_line): Likewise.
-       (_assuan_cookie_write_data): Likewise.
-       (_assuan_cookie_write_flush): Likewise.
-       * assuan-domain-connect.c (LOGERROR, LOGERROR1, LOGERROR2,
-       LOGERRORX):  Remove.
-       (LOG): New macro.
-       (domain_reader): Use it.
-       (domain_writer): Likewise.
-       (domain_sendfd): Likewise.
-       (domain_receivefd): Likewise.
-       (_assuan_domain_init): Likewise.
-       (assuan_domain_connect): Likewise.
-       * assuan-pipe-connect.c [HAVE_JNLIB_LOGGIN]: Do not include
-       "../jnlib/logging.h".
-       (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX):  Remove.
-       (LOG): New macro.
-       (assuan_pipe_connect): Use it.
-       * assuan-socket-connect.c [HAVE_JNLIB_LOGGIN]: Do not include
-       "../jnlib/logging.h".
-       (LOGERROR, LOGERROR1, LOGERROR2, LOGERRORX):  Remove.
-       (LOG): New macro.
-       (assuan_socket_connect): Use it.
-       (socket_reader): Remove dead code.
-       (socket_writer): Likewise.
-       * assuan-util.c [HAVE_JNLIB_LOGGIN]: Do not include
-       "../jnlib/logging.h".
-       (_assuan_log_sanitized_string): Use assuan_get_assuan_log_stream,
-       not jnlib.
-
-2002-11-24  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan.h (assuan_command_parse_fd): New prototype.
-       * assuan-handler.c (assuan_command_parse_fd): Rename from
-       parse_cmd_input_output.  Export.
-       (std_handler_input): Update to use assuan_command_parse_fd.
-       (std_handler_output): Likewise.
-
-2002-11-24  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan.h (assuan_sendfd): New prototype.
-       (assuan_receivefd): New prototype.
-       * assuan-buffer.c (assuan_sendfd): New function.
-       (assuan_receivefd): New function.
-       * assuan-handler.c (parse_cmd_input_output): Recognize incoming
-       file descriptors and act appropriately.
-       * assuan-defs.h (struct assuan_io): Add fields sendfd and
-       receivefd.
-       (struct assuan_context_s): Add fields pendingfds and
-       pendingfdscount.
-       * assuan-pipe-server.c (_assuan_new_context): Update IO to reflect
-       new features.
-       * assuan-domain-connect.c (do_deinit): Cleanup any unreceived file
-       descriptors.
-       (domain_reader): Receive file descriptors.
-       (domain_sendfd): New function.
-       (domain_receivefd): New function.
-       (_assuan_domain_init): Update initialization code to reflect new
-       features.
-
-2002-11-24  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-domain-connect.c (do_finish): Remove.
-       (_assuan_domain_init): Use default handlers where possible.
-       Add an assert and update comments.
-       * assuan-domain-server.c (accept_connection): Remove.
-       (assuan_init_domain_server): Use default handlers where possible.
-       Put the server in pipe mode: it can only be used by a single
-       client.
-
-2002-11-24  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan.h: Add prototype for assuan_domain_connect and
-       assuan_init_domain_server.
-       * assuan-defs.h: Include <unistd.h>.
-       Add prototype for _assuan_domain_init.
-       * assuan-domain-connect.c: New file.
-       * assuan-domain-server.c: New file.
-       * Makefile.am (libassuan_a_SOURCES): Add assuan-domain-connect.c
-       and assuan-domain-server.c
-
-2002-11-23  Neal H. Walfield  <neal@g10code.de>
-
-       * Makefile.am (libassuan_a_SOURCES): Add assuan-io.c.
-       * assuan-io.c: Restore.
-       (_assuan_simple_read): Rename from _assuan_read.
-       (_assuan_simple_write): Rename from _assuan_write.
-       * assuan-defs.h (_assuan_simple_read): New prototype.
-       (_assuan_simple_write): Likewise.
-       * assuan-pipe-server.c (pipe_reader): Remove.
-       (pipe_writer): Remove.
-       (_assuan_new_context): Initialize IO is with _assuan_simple_read
-       and _assuan_simple_write.
-       * assuan-socket-connect.c (socket_reader): Remove.
-       (socket_writer): Remove.
-       (assuan_socket_connect): Initialize IO is with _assuan_simple_read
-       and _assuan_simple_write.
-       * assuan-socket-server.c (io): New local variable.
-       (assuan_init_socket_server): Initialize CTX->io.
-       (assuan_init_connected_socket_server): Likewise.
-
-2002-11-23  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-buffer.c (readline): Use memrchr.
-       (_assuan_read_line): Rewritten to use the string functions.
-
-2002-11-20  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-socket-connect.c (assuan_socket_connect): Pass PF_LOCAL
-       to socket(), not AF_UNIX: it expects a PF_* macro and the former
-       is more portable.
-       (assuan_socket_connect): Use AF_LOCAL, not AF_UNIX which is more
-       POSIXy.
-
-2002-11-20  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-defs.h (struct assuan_io): New structure.
-       (struct assuan_context_s): New field, io.
-       (_assuan_read): Depreciated.
-       (_assuan_write): Likewise.
-       * assuan-pipe-server.c: Include <unistd.h>.
-       (pipe_reader): New function.
-       (pipe_writer): Likewise.
-       (_assuan_new_context.IO): New local static.  Set to pipe_reader
-       and pipe_writer.  Use it to initialize new context.
-       * assuan-socket-connect.c (socket_reader): New function.
-       (socket_writer): New function.
-       (assuan_socket_connect.IO): New local static.  Set to socket_reader
-       and socket_writer.  Use it to initialize new context.
-       * assuan-buffer.c (writen): Take an ASSUAN_CONTEXT rather than a
-       file descriptor.  Do not use _assuan_write but the write method
-       in the supplied context.
-       (readline): Likewise for _assuan_read.
-       (assuan_write_line): When calling writen, pass CTX; not the file
-       descriptor directly.
-       (_assuan_cookie_write_data): Likewise.
-       (_assuan_cookie_write_flush): Likewise.
-       (_assuan_read_line): Likewise for readline.
-       * Makefile.am (libassuan_a_SOURCES): Remove assuan-io.c.
-       * assuan-io.c: Removed.
-
-2002-11-10  Werner Koch  <wk@gnupg.org>
-
-       * assuan-pipe-connect.c (assuan_pipe_connect): Changed the order
-       of the dups to handle cases where we have already used fd 2 for
-       other things.
-
-2002-10-31  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-util.c: Include <ctype.h>.
-       (_assuan_log_print_buffer): Elide the magic numbers preferring the
-       standard isfoo functions.  Use putc_unlocked where possible.
-       (_assuan_log_sanitized_string): Rewrite to use putc_unlocked and
-       the isfoo functions.
-
-2002-09-05  Neal H. Walfield  <neal@g10code.de>
-
-       * assuan-defs.h (_assuan_read_wrapper): Depreciated.
-       * assuan-util.c (_assuan_read_wrapper): Removed.
-       * assuan-defs.h (_assuan_write_wrapper): Depreciated.
-       * assuan-util.c (_assuan_write_wrapper): Removed.
-       * assuan.h (assuan_set_io_fun): Depreciated.
-       * assuan-util.c (assuan_set_io_fun): Removed.
-
-       * assuan-defs.h (_assuan_read): New function.
-       (_assuan_write): Likewise.
-       * assuan-io.c: New file.
-
-       * assuan-buffer.c (writen): Use _assuan_write rather than doing
-       the work here.
-       (readline): Likewise for _assuan_read.
-
-       * Makefile.am (libassuan_a_SOURCES): Add assuan-io.c.
-
-2002-08-16  Werner Koch  <wk@gnupg.org>
-
-       * assuan.h: Renamed Bad_Certificate_Path to Bad_Certificate_Chain.
-
-2002-07-30  Werner Koch  <wk@gnupg.org>
-
-       Changed the license from GPL to LGPL.
-
-2002-07-23  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (_IO_cookie_io_functions_t): Define it here if
-       it does not exists.
-
-2002-06-27  Werner Koch  <wk@gnupg.org>
-
-       * assuan-pipe-connect.c (assuan_pipe_connect): No special handling
-       for the log_fd and stderr.  Connect stderr to /dev/null if it
-       should not be retained.
-
-2002-06-26  Werner Koch  <wk@gnupg.org>
-
-       * assuan-buffer.c (assuan_write_line): Make sure we never
-       accidently print an extra LF.
-
-2002-05-23  Werner Koch  <wk@gnupg.org>
-
-       * assuan-util.c (assuan_set_io_func): New.
-       * assuan-buffer.c (writen, readline): Use the new functions
-       instead of pth.
-       * assuan-socket-server.c (accept_connection): Don't use the
-       pth_accept - using the assuan included accept code would be a bad
-       idea within Pth so we don't need a replacement function.
-
-2002-05-22  Werner Koch  <wk@gnupg.org>
-
-       * assuan-socket-server.c (assuan_init_connected_socket_server): New.
-       (accept_connection): Factored most code out to..
-       (accept_connection_bottom): .. new function.
-
-2002-04-04  Werner Koch  <wk@gnupg.org>
-
-       * assuan-buffer.c (my_log_prefix): New.  Use it for all i/o debug
-       output.
-
-2002-03-06  Werner Koch  <wk@gnupg.org>
-
-       * assuan-client.c (_assuan_read_from_server): Detect END.
-       (assuan_transact): Pass it to the data callback.
-
-2002-02-27  Werner Koch  <wk@gnupg.org>
-
-       * assuan-client.c (assuan_transact): Add 2 more arguments to
-       support status lines. Passing NULL yields the old behaviour.
-
-       * assuan-handler.c (process_request): Flush data lines send
-       without using the data fp.
-
-2002-02-14  Werner Koch  <wk@gnupg.org>
-
-       * assuan-inquire.c (assuan_inquire): Check for a cancel command
-       and return ASSUAN_Canceled.  Allow for non-data inquiry.
-
-       * assuan.h: Add a few token specific error codes.
-
-2002-02-13  Werner Koch  <wk@gnupg.org>
-
-       * assuan-defs.h (assuan_context_s): New var CLIENT_PID.
-       * assuan-pipe-server.c (_assuan_new_context): set default value.
-       * assuan-socket-server.c (accept_connection): get the actual pid.
-
-2002-02-12  Werner Koch  <wk@gnupg.org>
-
-       * assuan-buffer.c (writen,readline) [USE_GNU_PT]: Use pth_read/write.
-       * assuan-socket-server.c (accept_connection) [USE_GNU_PTH]: Ditto.
-
-2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (MOSTLYCLEANFILES): New variable.
-
-2002-01-23  Werner Koch  <wk@gnupg.org>
-
-       * assuan-socket-connect.c (LOGERRORX): and removed typo.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-socket-connect.c (LOGERRORX): Reverse arguments to fputs.
-
-2002-01-21  Werner Koch  <wk@gnupg.org>
-
-       * assuan-connect.c: Move all except assuan_get_pid to...
-       * assuan-pipe-connect.c: this.
-       (assuan_pipe_disconnect): Removed.
-       (do_finish, do_deinit): New 
-       (assuan_pipe_connect): and set them into the context.
-       * assuan-socket-connect.c: New.
-       
-       * assuan-util.c (_assuan_log_sanitized_string): New.
-
-       * assuan-pipe-server.c (assuan_init_pipe_server): Factored most
-       code out to ...
-       (_assuan_new_context): new func.
-       (_assuan_release_context): New
-       * assuan-connect.c (assuan_pipe_connect): Use the new functions.
-
-2002-01-20  Werner Koch  <wk@gnupg.org>
-
-       * assuan.h: Added Invalid Option error code.
-
-       * assuan-handler.c (std_handler_option): New.
-       (std_cmd_tbl): Add OPTION as standard command.
-       (assuan_register_option_handler): New.
-       (dispatch_command): Use case insensitive matching as a fallback.
-       (my_strcasecmp): New.
-
-2002-01-19  Werner Koch  <wk@gnupg.org>
-
-       * assuan-buffer.c (_assuan_read_line): Add output logging.
-       (assuan_write_line): Ditto.
-       (_assuan_cookie_write_data): Ditto.
-       (_assuan_cookie_write_flush): Ditto.
-       * assuan-util.c (_assuan_log_print_buffer): New.
-       (assuan_set_log_stream): New.
-       (assuan_begin_confidential): New.
-       (assuan_end_confidential): New.
-
-       * assuan-defs.h: Add a few handler variables.
-       * assuan-pipe-server.c (assuan_deinit_pipe_server): Removed.
-       (deinit_pipe_server): New.
-       (assuan_deinit_server): New.  Changed all callers to use this.
-       * assuan-listen.c (assuan_accept): Use the accept handler.
-       * assuan-handler.c (process_request): Use the close Handler.
-       * assuan-socket-server.c: New.
-
-2002-01-14  Werner Koch  <wk@gnupg.org>
-
-       * assuan-client.c (_assuan_read_from_server): Skip spaces after
-       the keyword.
-
-2002-01-03  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (assuan_set_okay_line): New.
-       (process_request): And use it here.
-
-2002-01-02  Werner Koch  <wk@gnupg.org>
-
-       * assuan-inquire.c (init_membuf,put_membuf,get_membuf): Apply a
-       hidden 0 behind the buffer so that the buffer can be used as a
-       string in certain contexts.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-connect.c (assuan_pipe_connect): New argument
-       FD_CHILD_LIST.  Don't close those fds.
-       * assuan.h: Likewise for prototype.
-
-2001-12-14  Werner Koch  <wk@gnupg.org>
-
-       * assuan-listen.c (assuan_close_input_fd): New.
-       (assuan_close_output_fd): New.
-       * assuan-handler.c (std_handler_reset): Always close them after a
-       reset command.
-       (std_handler_bye): Likewise.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-buffer.c (_assuan_read_line): New variable ATTICLEN, use
-       it to save the length of the attic line.
-       Rediddle the code a bit to make it more clear what happens.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-defs.h (LINELENGTH): Define as ASSUAN_LINELENGTH.
-       assuan.h: Define ASSUAN_LINELENGTH.
-
-2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * assuan-buffer.c (assuan_read_line): Fix order of execution to
-       get correct return values.
-
-2001-12-13  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (assuan_get_active_fds): Fixed silly bug,
-       pretty obvious that nobody ever tested this function.
-
-2001-12-12  Werner Koch  <wk@gnupg.org>
-
-       * assuan-connect.c (assuan_pipe_connect): Implemented the inital
-       handshake.
-       * assuan-client.c (read_from_server): Renamed to  
-       (_assuan_read_from_server): this and made external.
-
-       * assuan-listen.c (assuan_set_hello_line): New.
-       (assuan_accept): Use a custom hello line is available.
-
-       * assuan-buffer.c (assuan_read_line): New.
-       (assuan_pending_line): New.
-       (_assuan_write_line): Renamed to ..
-       (assuan_write_line): this, made public and changed all callers.
-
-2001-12-04  Werner Koch  <wk@gnupg.org>
-
-       * assuan-connect.c (assuan_pipe_connect): Add more error reporting.
-       * assuan-client.c: New.
-
-       * assuan-inquire.c: New.
-       * assuan-handler.c (process_request): Check for nested invocations.
-
-2001-11-27  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (assuan_register_input_notify): New.
-       (assuan_register_output_notify): New.
-
-2001-11-26  Werner Koch  <wk@gnupg.org>
-
-       * assuan.h: Added more status codes.
-
-2001-11-25  Werner Koch  <wk@gnupg.org>
-
-       * assuan-handler.c (assuan_register_bye_notify)
-       (assuan_register_reset_notify)
-       (assuan_register_cancel_notify): New and call them from the
-       standard handlers.
-       (assuan_process): Moved bulk of function to ..
-       (process_request): .. new.
-       (assuan_process_next): One shot version of above.
-       (assuan_get_active_fds): New.
-
-2001-11-24  Werner Koch  <wk@gnupg.org>
-
-       * assuan-connect.c (assuan_get_pid): New.
-
-       * assuan-buffer.c (_assuan_read_line): Deal with reads of more
-       than a line.
-       * assuan-defs.h: Add space in the context for this.
-
-       
- Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/assuan/Makefile.am b/tags/gpgme-1-1-1/assuan/Makefile.am
deleted file mode 100644 (file)
index b88b7dc..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# Assuan Makefile
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-#
-# This file is part of Assuan.
-#
-# Assuan is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# Assuan 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser 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 
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = mkerrors
-INCLUDES = -I.. -I$(top_srcdir)/include
-BUILT_SOURCES = assuan-errors.c
-MOSTLYCLEANFILES = assuan-errors.c
-
-noinst_LTLIBRARIES = libassuan.la
-
-AM_CPPFLAGS = -D_ASSUAN_IN_GPGME_BUILD_ASSUAN
-
-#libassuan_la_LDFLAGS =
-libassuan_la_SOURCES = \
-       assuan.h \
-       assuan-defs.h \
-       assuan-util.c \
-       assuan-errors.c \
-       assuan-buffer.c \
-       assuan-handler.c \
-       assuan-inquire.c \
-       assuan-listen.c \
-       assuan-connect.c \
-       assuan-client.c \
-       assuan-pipe-server.c \
-       assuan-socket-server.c \
-       assuan-pipe-connect.c \
-       assuan-socket-connect.c  \
-       assuan-socket.c \
-       funopen.c \
-       assuan-io.c \
-       assuan-domain-connect.c \
-       assuan-domain-server.c \
-       assuan-logging.c
-
-assuan-errors.c : assuan.h
-       $(srcdir)/mkerrors < $(srcdir)/assuan.h > assuan-errors.c
diff --git a/tags/gpgme-1-1-1/assuan/README.1st b/tags/gpgme-1-1-1/assuan/README.1st
deleted file mode 100644 (file)
index 670efb5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-This is a modified copy of the libassuan library.  Don't modify it,
-but instead modify the original Assuan library and merge the changes
-back into this copy.
-
-The changes to the original libassuan, that have to preserved when
-updating this directory, are:
-
-* Makefile.am
-** Build the library with libtool as a convenience library, which can
-   be linked into the shared library GPGME.
-** Do not install the library or the header file.
-** Define -D_ASSUAN_IN_GPGME_BUILD_ASSUAN to wrap some POSIX functions
-   with ATH replacements.
-
-* assuan.h
-** Preserve the block between "Begin/End GPGME specific modifications".
-   In particular make sure that
-     #define _ASSUAN_EXT_SYM_PREFIX _gpgme_
-     #define _ASSUAN_NO_PTH 
-     #define _ASSUAN_NO_FIXED_SIGNALS 
-     #define _ASSUAN_USE_DOUBLE_FORK
-   are defined.  This puts all exported Assuan functions in the _gpgme
-   namespace.  It also wraps all system functions that are wrapped by
-   GNU Pth to _gpgme wrappers.
-
-
- Copyright 2004 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/assuan/assuan-buffer.c b/tags/gpgme-1-1-1/assuan/assuan-buffer.c
deleted file mode 100644 (file)
index 99ea72e..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/* assuan-buffer.c - read and send data
- *     Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <assert.h>
-#ifdef HAVE_W32_SYSTEM
-#include <process.h>
-#endif
-#include "assuan-defs.h"
-
-static int
-writen (ASSUAN_CONTEXT ctx, const char *buffer, size_t length)
-{
-  while (length)
-    {
-      ssize_t nwritten = ctx->io->writefnc (ctx, buffer, length);
-      
-      if (nwritten < 0)
-        {
-          if (errno == EINTR)
-            continue;
-          return -1; /* write error */
-        }
-      length -= nwritten;
-      buffer += nwritten;
-    }
-  return 0;  /* okay */
-}
-
-/* Read an entire line.  */
-static int
-readline (ASSUAN_CONTEXT ctx, char *buf, size_t buflen,
-         int *r_nread, int *r_eof)
-{
-  size_t nleft = buflen;
-  char *p;
-
-  *r_eof = 0;
-  *r_nread = 0;
-  while (nleft > 0)
-    {
-      ssize_t n = ctx->io->readfnc (ctx, buf, nleft);
-
-      if (n < 0)
-        {
-          if (errno == EINTR)
-            continue;
-          return -1; /* read error */
-        }
-      else if (!n)
-        {
-          *r_eof = 1;
-          break; /* allow incomplete lines */
-        }
-      p = buf;
-      nleft -= n;
-      buf += n;
-      *r_nread += n;
-
-      p = memrchr (p, '\n', n);
-      if (p)
-        break; /* at least one full line available - that's enough for now */
-    }
-
-  return 0;
-}
-
-
-int
-_assuan_read_line (ASSUAN_CONTEXT ctx)
-{
-  char *line = ctx->inbound.line;
-  int nread, atticlen;
-  int rc;
-  char *endp = 0;
-
-  if (ctx->inbound.eof)
-    return -1;
-
-  atticlen = ctx->inbound.attic.linelen;
-  if (atticlen)
-    {
-      memcpy (line, ctx->inbound.attic.line, atticlen);
-      ctx->inbound.attic.linelen = 0;
-
-      endp = memchr (line, '\n', atticlen);
-      if (endp)
-       /* Found another line in the attic.  */
-       {
-         rc = 0;
-         nread = atticlen;
-         atticlen = 0;
-       }
-      else
-       /* There is pending data but not a full line.  */
-        {
-          assert (atticlen < LINELENGTH);
-          rc = readline (ctx, line + atticlen,
-                        LINELENGTH - atticlen, &nread, &ctx->inbound.eof);
-        }
-    }
-  else
-    /* No pending data.  */
-    rc = readline (ctx, line, LINELENGTH,
-                   &nread, &ctx->inbound.eof);
-  if (rc)
-    {
-      if (ctx->log_fp)
-       fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [Error: %s]\n",
-                assuan_get_assuan_log_prefix (),
-                 (unsigned int)getpid (), ctx, strerror (errno));
-      return ASSUAN_Read_Error;
-    }
-  if (!nread)
-    {
-      assert (ctx->inbound.eof);
-      if (ctx->log_fp)
-       fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [EOF]\n",
-                assuan_get_assuan_log_prefix (),
-                 (unsigned int)getpid (), ctx);
-      return -1;
-    }
-
-  ctx->inbound.attic.pending = 0;
-  nread += atticlen;
-
-  if (! endp)
-    endp = memchr (line, '\n', nread);
-
-  if (endp)
-    {
-      int n = endp - line + 1;
-      if (n < nread)
-       /* LINE contains more than one line.  We copy it to the attic
-          now as handlers are allowed to modify the passed
-          buffer.  */
-       {
-         int len = nread - n;
-         memcpy (ctx->inbound.attic.line, endp + 1, len);
-         ctx->inbound.attic.pending = memrchr (endp + 1, '\n', len) ? 1 : 0;
-         ctx->inbound.attic.linelen = len;
-       }
-
-      if (endp != line && endp[-1] == '\r')
-       endp --;
-      *endp = 0;
-
-      ctx->inbound.linelen = endp - line;
-      if (ctx->log_fp)
-       {
-         fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- ",
-                  assuan_get_assuan_log_prefix (),
-                   (unsigned int)getpid (), ctx);
-         if (ctx->confidential)
-           fputs ("[Confidential data not shown]", ctx->log_fp);
-         else
-           _assuan_log_print_buffer (ctx->log_fp,
-                                     ctx->inbound.line,
-                                     ctx->inbound.linelen);
-         putc ('\n', ctx->log_fp);
-       }
-      return 0;
-    }
-  else
-    {
-      if (ctx->log_fp)
-       fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [Invalid line]\n",
-                assuan_get_assuan_log_prefix (),
-                 (unsigned int)getpid (), ctx);
-      *line = 0;
-      ctx->inbound.linelen = 0;
-      return ctx->inbound.eof ? ASSUAN_Line_Not_Terminated
-       : ASSUAN_Line_Too_Long;
-    }
-}
-
-
-/* Read the next line from the client or server and return a pointer
-   in *LINE to a buffer holding the line.  LINELEN is the length of
-   *LINE.  The buffer is valid until the next read operation on it.
-   The caller may modify the buffer.  The buffer is invalid (i.e. must
-   not be used) if an error is returned.
-
-   Returns 0 on success or an assuan error code.
-   See also: assuan_pending_line().
-*/
-assuan_error_t
-assuan_read_line (ASSUAN_CONTEXT ctx, char **line, size_t *linelen)
-{
-  assuan_error_t err;
-
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-
-  err = _assuan_read_line (ctx);
-  *line = ctx->inbound.line;
-  *linelen = ctx->inbound.linelen;
-  return err;
-}
-
-
-/* Return true if a full line is buffered (i.e. an entire line may be
-   read without any I/O).  */
-int
-assuan_pending_line (ASSUAN_CONTEXT ctx)
-{
-  return ctx && ctx->inbound.attic.pending;
-}
-
-
-assuan_error_t 
-_assuan_write_line (assuan_context_t ctx, const char *prefix,
-                    const char *line, size_t len)
-{
-  int rc = 0;
-  size_t prefixlen = prefix? strlen (prefix):0;
-
-  /* Make sure that the line is short enough. */
-  if (len + prefixlen + 2 > ASSUAN_LINELENGTH)
-    {
-      if (ctx->log_fp)
-        fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> "
-                 "[supplied line too long -truncated]\n",
-                 assuan_get_assuan_log_prefix (),
-                 (unsigned int)getpid (), ctx);
-      if (prefixlen > 5)
-        prefixlen = 5;
-      if (len > ASSUAN_LINELENGTH - prefixlen - 2)
-        len = ASSUAN_LINELENGTH - prefixlen - 2 - 1;
-    }
-
-  /* Fixme: we should do some kind of line buffering.  */
-  if (ctx->log_fp)
-    {
-      fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ",
-              assuan_get_assuan_log_prefix (),
-               (unsigned int)getpid (), ctx);
-      if (ctx->confidential)
-       fputs ("[Confidential data not shown]", ctx->log_fp);
-      else
-       _assuan_log_print_buffer (ctx->log_fp, line, len);
-      putc ('\n', ctx->log_fp);
-    }
-
-  if (prefixlen)
-    {
-      rc = writen (ctx, prefix, prefixlen);
-      if (rc)
-        rc = ASSUAN_Write_Error;
-    }
-  if (!rc)
-    {
-      rc = writen (ctx, line, len);
-      if (rc)
-        rc = ASSUAN_Write_Error;
-      if (!rc)
-        {
-          rc = writen (ctx, "\n", 1);
-          if (rc)
-            rc = ASSUAN_Write_Error;
-        }
-    }
-  return rc;
-}
-
-
-assuan_error_t 
-assuan_write_line (ASSUAN_CONTEXT ctx, const char *line)
-{
-  size_t len;
-  const char *s;
-
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-
-  /* Make sure that we never take a LF from the user - this might
-     violate the protocol. */
-  s = strchr (line, '\n');
-  len = s? (s-line) : strlen (line);
-
-  if (ctx->log_fp && s)
-    fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> "
-             "[supplied line contained a LF -truncated]\n",
-             assuan_get_assuan_log_prefix (),
-             (unsigned int)getpid (), ctx);
-
-  return _assuan_write_line (ctx, NULL, line, len);
-}
-
-
-\f
-/* Write out the data in buffer as datalines with line wrapping and
-   percent escaping.  This function is used for GNU's custom streams */
-int
-_assuan_cookie_write_data (void *cookie, const char *buffer, size_t orig_size)
-{
-  ASSUAN_CONTEXT ctx = cookie;
-  size_t size = orig_size;
-  char *line;
-  size_t linelen;
-
-  if (ctx->outbound.data.error)
-    return 0;
-
-  line = ctx->outbound.data.line;
-  linelen = ctx->outbound.data.linelen;
-  line += linelen;
-  while (size)
-    {
-      /* insert data line header */
-      if (!linelen)
-        {
-          *line++ = 'D';
-          *line++ = ' ';
-          linelen += 2;
-        }
-      
-      /* copy data, keep some space for the CRLF and to escape one character */
-      while (size && linelen < LINELENGTH-2-2)
-        {
-          if (*buffer == '%' || *buffer == '\r' || *buffer == '\n')
-            {
-              sprintf (line, "%%%02X", *(unsigned char*)buffer);
-              line += 3;
-              linelen += 3;
-              buffer++;
-            }
-          else
-            {
-              *line++ = *buffer++;
-              linelen++;
-            }
-          size--;
-        }
-      
-      if (linelen >= LINELENGTH-2-2)
-        {
-          if (ctx->log_fp)
-            {
-             fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ",
-                      assuan_get_assuan_log_prefix (),
-                       (unsigned int)getpid (), ctx);
-
-              if (ctx->confidential)
-                fputs ("[Confidential data not shown]", ctx->log_fp);
-              else 
-                _assuan_log_print_buffer (ctx->log_fp, 
-                                          ctx->outbound.data.line,
-                                          linelen);
-              putc ('\n', ctx->log_fp);
-            }
-          *line++ = '\n';
-          linelen++;
-          if (writen (ctx, ctx->outbound.data.line, linelen))
-            {
-              ctx->outbound.data.error = ASSUAN_Write_Error;
-              return 0;
-            }
-          line = ctx->outbound.data.line;
-          linelen = 0;
-        }
-    }
-
-  ctx->outbound.data.linelen = linelen;
-  return (int)orig_size;
-}
-
-
-/* Write out any buffered data 
-   This function is used for GNU's custom streams */
-int
-_assuan_cookie_write_flush (void *cookie)
-{
-  ASSUAN_CONTEXT ctx = cookie;
-  char *line;
-  size_t linelen;
-
-  if (ctx->outbound.data.error)
-    return 0;
-
-  line = ctx->outbound.data.line;
-  linelen = ctx->outbound.data.linelen;
-  line += linelen;
-  if (linelen)
-    {
-      if (ctx->log_fp)
-       {
-         fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ",
-                  assuan_get_assuan_log_prefix (),
-                   (unsigned int)getpid (), ctx);
-         if (ctx->confidential)
-           fputs ("[Confidential data not shown]", ctx->log_fp);
-         else
-           _assuan_log_print_buffer (ctx->log_fp,
-                                     ctx->outbound.data.line, linelen);
-         putc ('\n', ctx->log_fp);
-       }
-      *line++ = '\n';
-      linelen++;
-      if (writen (ctx, ctx->outbound.data.line, linelen))
-        {
-          ctx->outbound.data.error = ASSUAN_Write_Error;
-          return 0;
-        }
-      ctx->outbound.data.linelen = 0;
-    }
-  return 0;
-}
-
-
-/**
- * assuan_send_data:
- * @ctx: An assuan context
- * @buffer: Data to send or NULL to flush
- * @length: length of the data to send/
- * 
- * This function may be used by the server or the client to send data
- * lines.  The data will be escaped as required by the Assuan protocol
- * and may get buffered until a line is full.  To force sending the
- * data out @buffer may be passed as NULL (in which case @length must
- * also be 0); however when used by a client this flush operation does
- * also send the terminating "END" command to terminate the reponse on
- * a INQUIRE response.  However, when assuan_transact() is used, this
- * function takes care of sending END itself.
- * 
- * Return value: 0 on success or an error code
- **/
-\f
-assuan_error_t
-assuan_send_data (ASSUAN_CONTEXT ctx, const void *buffer, size_t length)
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  if (!buffer && length)
-    return ASSUAN_Invalid_Value;
-
-  if (!buffer)
-    { /* flush what we have */
-      _assuan_cookie_write_flush (ctx);
-      if (ctx->outbound.data.error)
-        return ctx->outbound.data.error;
-      if (!ctx->is_server)
-        return assuan_write_line (ctx, "END");
-    }
-  else
-    {
-      _assuan_cookie_write_data (ctx, buffer, length);
-      if (ctx->outbound.data.error)
-        return ctx->outbound.data.error;
-    }
-
-  return 0;
-}
-
-assuan_error_t
-assuan_sendfd (ASSUAN_CONTEXT ctx, int fd)
-{
-  if (! ctx->io->sendfd)
-    return set_error (ctx, Not_Implemented,
-                     "server does not support sending and receiving "
-                     "of file descriptors");
-  return ctx->io->sendfd (ctx, fd);
-}
-
-assuan_error_t
-assuan_receivefd (ASSUAN_CONTEXT ctx, int *fd)
-{
-  if (! ctx->io->receivefd)
-    return set_error (ctx, Not_Implemented,
-                     "server does not support sending and receiving "
-                     "of file descriptors");
-  return ctx->io->receivefd (ctx, fd);
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-client.c b/tags/gpgme-1-1-1/assuan/assuan-client.c
deleted file mode 100644 (file)
index 2f78d0c..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/* assuan-client.c - client functions
- *     Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include "assuan-defs.h"
-
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-assuan_error_t
-_assuan_read_from_server (ASSUAN_CONTEXT ctx, int *okay, int *off)
-{
-  char *line;
-  int linelen;
-  assuan_error_t rc;
-
-  *okay = 0;
-  *off = 0;
-  do 
-    {
-      rc = _assuan_read_line (ctx);
-      if (rc)
-        return rc;
-      line = ctx->inbound.line;
-      linelen = ctx->inbound.linelen;
-    }    
-  while (*line == '#' || !linelen);
-
-  if (linelen >= 1
-      && line[0] == 'D' && line[1] == ' ')
-    {
-      *okay = 2; /* data line */
-      *off = 2;
-    }
-  else if (linelen >= 1
-           && line[0] == 'S' 
-           && (line[1] == '\0' || line[1] == ' '))
-    {
-      *okay = 4;
-      *off = 1;
-      while (line[*off] == ' ')
-        ++*off;
-    }  
-  else if (linelen >= 2
-           && line[0] == 'O' && line[1] == 'K'
-           && (line[2] == '\0' || line[2] == ' '))
-    {
-      *okay = 1;
-      *off = 2;
-      while (line[*off] == ' ')
-        ++*off;
-    }
-  else if (linelen >= 3
-           && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
-           && (line[3] == '\0' || line[3] == ' '))
-    {
-      *okay = 0;
-      *off = 3;
-      while (line[*off] == ' ')
-        ++*off;
-    }  
-  else if (linelen >= 7
-           && line[0] == 'I' && line[1] == 'N' && line[2] == 'Q'
-           && line[3] == 'U' && line[4] == 'I' && line[5] == 'R'
-           && line[6] == 'E' 
-           && (line[7] == '\0' || line[7] == ' '))
-    {
-      *okay = 3;
-      *off = 7;
-      while (line[*off] == ' ')
-        ++*off;
-    }
-  else if (linelen >= 3
-           && line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
-           && (line[3] == '\0' || line[3] == ' '))
-    {
-      *okay = 5; /* end line */
-      *off = 3;
-    }
-  else
-    rc = ASSUAN_Invalid_Response;
-  return rc;
-}
-
-
-\f
-/**
- * assuan_transact:
- * @ctx: The Assuan context
- * @command: Coimmand line to be send to server
- * @data_cb: Callback function for data lines
- * @data_cb_arg: first argument passed to @data_cb
- * @inquire_cb: Callback function for a inquire response
- * @inquire_cb_arg: first argument passed to @inquire_cb
- * @status_cb: Callback function for a status response
- * @status_cb_arg: first argument passed to @status_cb
- * 
- * FIXME: Write documentation
- * 
- * Return value: 0 on success or error code.  The error code may be
- * the one one returned by the server in error lines or from the
- * callback functions.
- **/
-assuan_error_t
-assuan_transact (ASSUAN_CONTEXT ctx,
-                 const char *command,
-                 assuan_error_t (*data_cb)(void *, const void *, size_t),
-                 void *data_cb_arg,
-                 assuan_error_t (*inquire_cb)(void*, const char *),
-                 void *inquire_cb_arg,
-                 assuan_error_t (*status_cb)(void*, const char *),
-                 void *status_cb_arg)
-{
-  int rc, okay, off;
-  char *line;
-  int linelen;
-
-  rc = assuan_write_line (ctx, command);
-  if (rc)
-    return rc;
-
-  if (*command == '#' || !*command)
-    return 0; /* Don't expect a response for a comment line.  */
-
- again:
-  rc = _assuan_read_from_server (ctx, &okay, &off);
-  if (rc)
-    return rc; /* error reading from server */
-
-  line = ctx->inbound.line + off;
-  linelen = ctx->inbound.linelen - off;
-
-  if (!okay)
-    {
-      rc = atoi (line);
-      if (rc < 100)
-        rc = ASSUAN_Server_Fault;
-    }
-  else if (okay == 2)
-    {
-      if (!data_cb)
-        rc = ASSUAN_No_Data_Callback;
-      else 
-        {
-          char *s, *d;
-
-          for (s=d=line; linelen; linelen--)
-            {
-              if (*s == '%' && linelen > 2)
-                { /* handle escaping */
-                  s++;
-                  *d++ = xtoi_2 (s);
-                  s += 2;
-                  linelen -= 2;
-                }
-              else
-                *d++ = *s++;
-            }
-          *d = 0; /* add a hidden string terminator */
-          rc = data_cb (data_cb_arg, line, d - line);
-          if (!rc)
-            goto again;
-        }
-    }
-  else if (okay == 3)
-    {
-      if (!inquire_cb)
-        {
-          assuan_write_line (ctx, "END"); /* get out of inquire mode */
-          _assuan_read_from_server (ctx, &okay, &off); /* dummy read */
-          rc = ASSUAN_No_Inquire_Callback;
-        }
-      else
-        {
-          rc = inquire_cb (inquire_cb_arg, line);
-          if (!rc)
-            rc = assuan_send_data (ctx, NULL, 0); /* flush and send END */
-          if (!rc)
-            goto again;
-        }
-    }
-  else if (okay == 4)
-    {
-      if (status_cb)
-        rc = status_cb (status_cb_arg, line);
-      if (!rc)
-        goto again;
-    }
-  else if (okay == 5)
-    {
-      if (!data_cb)
-        rc = ASSUAN_No_Data_Callback;
-      else 
-        {
-          rc = data_cb (data_cb_arg, NULL, 0);
-          if (!rc)
-            goto again;
-        }
-    }
-
-  return rc;
-}
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-connect.c b/tags/gpgme-1-1-1/assuan/assuan-connect.c
deleted file mode 100644 (file)
index ff1f6ff..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* assuan-connect.c - Establish a connection (client) 
- *     Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/wait.h>
-#endif
-
-#include "assuan-defs.h"
-
-/* Disconnect and release the context CTX. */
-void
-assuan_disconnect (assuan_context_t ctx)
-{
-  if (ctx)
-    {
-      assuan_write_line (ctx, "BYE");
-      ctx->finish_handler (ctx);
-      ctx->deinit_handler (ctx);
-      ctx->deinit_handler = NULL;
-      _assuan_release_context (ctx);
-    }
-}
-
-/* Return the PID of the peer or -1 if not known. */
-pid_t
-assuan_get_pid (assuan_context_t ctx)
-{
-  return (ctx && ctx->pid)? ctx->pid : -1;
-}
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-defs.h b/tags/gpgme-1-1-1/assuan/assuan-defs.h
deleted file mode 100644 (file)
index 2917fe8..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/* assuan-defs.c - Internal definitions to Assuan
- *     Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifndef ASSUAN_DEFS_H
-#define ASSUAN_DEFS_H
-
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/socket.h>
-#include <sys/un.h>
-#else
-#include <windows.h>
-#endif
-#include <unistd.h>
-
-#include "assuan.h"
-
-#ifndef HAVE_W32_SYSTEM
-#define DIRSEP_C '/'
-#else
-#define DIRSEP_C '\\'
-#endif
-
-#ifdef HAVE_W32_SYSTEM
-#define AF_LOCAL AF_UNIX
-/* We need to prefix the structure with a sockaddr_in header so we can
-   use it later for sendto and recvfrom. */
-struct sockaddr_un
-{
-  short          sun_family;
-  unsigned short sun_port;
-  struct         in_addr sun_addr;
-  char           sun_path[108-2-4]; /* Path name.  */
-};
-
-/* Not needed anymore because the current mingw32 defines this in
-   sys/types.h */
-/* typedef int ssize_t; */
-
-/* Missing W32 functions */
-int putc_unlocked (int c, FILE *stream);
-void * memrchr (const void *block, int c, size_t size);
-char * stpcpy (char *dest, const char *src);
-#endif
-
-#define LINELENGTH ASSUAN_LINELENGTH
-
-struct cmdtbl_s
-{
-  const char *name;
-  int (*handler)(ASSUAN_CONTEXT, char *line);
-};
-
-struct assuan_io
-{
-  /* Routine to read from input_fd.  */
-  ssize_t (*readfnc) (ASSUAN_CONTEXT, void *, size_t);
-  /* Routine to write to output_fd.  */
-  ssize_t (*writefnc) (ASSUAN_CONTEXT, const void *, size_t);
-  /* Send a file descriptor.  */
-  assuan_error_t (*sendfd) (ASSUAN_CONTEXT, int);
-  /* Receive a file descriptor.  */
-  assuan_error_t (*receivefd) (ASSUAN_CONTEXT, int *);
-};  
-
-struct assuan_context_s
-{
-  assuan_error_t err_no;
-  const char *err_str;
-  int os_errno;       /* Last system error number used with certain
-                         error codes. */
-
-  /* Context specific flags (cf. assuan_flag_t). */
-  struct 
-  {
-    unsigned int no_waitpid:1; /* See ASSUAN_NO_WAITPID. */
-  } flags; 
-
-  int confidential;
-  int is_server;      /* Set if this is context belongs to a server */
-  int in_inquire;
-  char *hello_line;
-  char *okay_line;    /* See assuan_set_okay_line() */
-  
-  void *user_pointer;  /* For assuan_get_pointer and assuan-set_pointer (). */
-
-  FILE *log_fp;
-
-  struct {
-    int fd;
-    int eof;
-    char line[LINELENGTH];
-    int linelen;  /* w/o CR, LF - might not be the same as
-                     strlen(line) due to embedded nuls. However a nul
-                     is always written at this pos */
-    struct {
-      char line[LINELENGTH];
-      int linelen ;
-      int pending; /* i.e. at least one line is available in the attic */
-    } attic;
-  } inbound;
-
-  struct {
-    int fd;
-    struct {
-      FILE *fp;
-      char line[LINELENGTH];
-      int linelen; 
-      int error;
-    } data; 
-  } outbound;
-
-  int pipe_mode;  /* We are in pipe mode, i.e. we can handle just one
-                     connection and must terminate then */
-  pid_t pid;     /* The the pid of the peer. */
-  int listen_fd;  /* The fd we are listening on (used by socket servers) */
-  int connected_fd; /* helper */
-
-
-  /* Used for Unix domain sockets.  */
-  struct sockaddr_un myaddr;
-  struct sockaddr_un serveraddr;
-  /* When reading from datagram sockets, we must read an entire
-     message at a time.  This means that we have to do our own
-     buffering to be able to get the semantics of read.  */
-  void *domainbuffer;
-  /* Offset of start of buffer.  */
-  int domainbufferoffset;
-  /* Bytes buffered.  */
-  int domainbuffersize;
-  /* Memory allocated.  */
-  int domainbufferallocated;
-
-  int *pendingfds;
-  int pendingfdscount;
-
-  void (*deinit_handler)(ASSUAN_CONTEXT);  
-  int (*accept_handler)(ASSUAN_CONTEXT);
-  int (*finish_handler)(ASSUAN_CONTEXT);
-
-  struct cmdtbl_s *cmdtbl;
-  size_t cmdtbl_used; /* used entries */
-  size_t cmdtbl_size; /* allocated size of table */
-
-  void (*bye_notify_fnc)(ASSUAN_CONTEXT);
-  void (*reset_notify_fnc)(ASSUAN_CONTEXT);
-  void (*cancel_notify_fnc)(ASSUAN_CONTEXT);
-  int  (*option_handler_fnc)(ASSUAN_CONTEXT,const char*, const char*);
-  void (*input_notify_fnc)(ASSUAN_CONTEXT, const char *);
-  void (*output_notify_fnc)(ASSUAN_CONTEXT, const char *);
-
-  int input_fd;   /* set by INPUT command */
-  int output_fd;  /* set by OUTPUT command */
-
-  /* io routines.  */
-  struct assuan_io *io;
-};
-
-/*-- assuan-pipe-server.c --*/
-int _assuan_new_context (ASSUAN_CONTEXT *r_ctx);
-void _assuan_release_context (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-domain-connect.c --*/
-/* Make a connection to the Unix domain socket NAME and return a new
-   Assuan context in CTX.  SERVER_PID is currently not used but may
-   become handy in the future.  */
-assuan_error_t _assuan_domain_init (ASSUAN_CONTEXT *r_ctx,
-                                int rendezvousfd,
-                                pid_t peer);
-
-/*-- assuan-handler.c --*/
-int _assuan_register_std_commands (ASSUAN_CONTEXT ctx);
-
-/*-- assuan-buffer.c --*/
-int _assuan_read_line (ASSUAN_CONTEXT ctx);
-int _assuan_cookie_write_data (void *cookie, const char *buffer, size_t size);
-int _assuan_cookie_write_flush (void *cookie);
-assuan_error_t _assuan_write_line (assuan_context_t ctx, const char *prefix,
-                                   const char *line, size_t len);
-
-/*-- assuan-client.c --*/
-assuan_error_t _assuan_read_from_server (ASSUAN_CONTEXT ctx, int *okay, int *off);
-
-
-/*-- assuan-util.c --*/
-void *_assuan_malloc (size_t n);
-void *_assuan_calloc (size_t n, size_t m);
-void *_assuan_realloc (void *p, size_t n);
-void  _assuan_free (void *p);
-
-#define xtrymalloc(a)    _assuan_malloc ((a))
-#define xtrycalloc(a,b)  _assuan_calloc ((a),(b))
-#define xtryrealloc(a,b) _assuan_realloc((a),(b))
-#define xfree(a)         _assuan_free ((a))
-
-#define set_error(c,e,t) assuan_set_error ((c), ASSUAN_ ## e, (t))
-
-void _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t  length);
-void _assuan_log_sanitized_string (const char *string);
-
-#ifdef HAVE_W32_SYSTEM
-const char *_assuan_w32_strerror (int ec);
-#define w32_strerror(e) _assuan_w32_strerror ((e))
-#endif /*HAVE_W32_SYSTEM*/
-
-
-/*-- assuan-logging.c --*/
-void _assuan_set_default_log_stream (FILE *fp);
-
-void _assuan_log_printf (const char *format, ...)
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 )
- __attribute__ ((format (printf,1,2)))
-#endif
-     ;
-
-/*-- assuan-io.c --*/
-ssize_t _assuan_simple_read (ASSUAN_CONTEXT ctx, void *buffer, size_t size);
-ssize_t _assuan_simple_write (ASSUAN_CONTEXT ctx, const void *buffer,
-                             size_t size);
-
-/*-- assuan-socket.c --*/
-int _assuan_close (int fd);
-int _assuan_sock_new (int domain, int type, int proto);
-int _assuan_sock_bind (int sockfd, struct sockaddr *addr, int addrlen);
-int _assuan_sock_connect (int sockfd, struct sockaddr *addr, int addrlen);
-
-#ifdef HAVE_FOPENCOOKIE
-/* We have to implement funopen in terms of glibc's fopencookie. */
-FILE *_assuan_funopen(void *cookie,
-                      cookie_read_function_t *readfn,
-                      cookie_write_function_t *writefn,
-                      cookie_seek_function_t *seekfn,
-                      cookie_close_function_t *closefn);
-#define funopen(a,r,w,s,c) _assuan_funopen ((a), (r), (w), (s), (c))
-#endif /*HAVE_FOPENCOOKIE*/
-
-#endif /*ASSUAN_DEFS_H*/
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-domain-connect.c b/tags/gpgme-1-1-1/assuan/assuan-domain-connect.c
deleted file mode 100644 (file)
index b55e9c3..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-/* assuan-domain-connect.c - Assuan unix domain socket based client
- *     Copyright (C) 2002, 2003 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/socket.h>
-#include <sys/un.h>
-#else
-#include <windows.h>
-#endif
-#if HAVE_SYS_UIO_H
-#include <sys/uio.h>
-#endif
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <assert.h>
-
-#include "assuan-defs.h"
-
-#ifndef PF_LOCAL
-# ifdef PF_UNIX
-#  define PF_LOCAL PF_UNIX
-# else
-#  define PF_LOCAL AF_UNIX
-# endif
-# ifndef AF_LOCAL
-#  define AF_LOCAL AF_UNIX
-# endif
-#endif
-
-
-static void
-do_deinit (assuan_context_t ctx)
-{
-  if (ctx->inbound.fd != -1)
-    _assuan_close (ctx->inbound.fd);
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-
-  if (ctx->domainbuffer)
-    {
-      assert (ctx->domainbufferallocated);
-      free (ctx->domainbuffer);
-    }
-
-  if (ctx->pendingfds)
-    {
-      int i;
-
-      assert (ctx->pendingfdscount > 0);
-      for (i = 0; i < ctx->pendingfdscount; i ++)
-       _assuan_close (ctx->pendingfds[i]);
-
-      free (ctx->pendingfds);
-    }
-
-  unlink (ctx->myaddr.sun_path);
-}
-
-
-/* Read from the socket server.  */
-static ssize_t
-domain_reader (assuan_context_t ctx, void *buf, size_t buflen)
-{
-  int len = ctx->domainbuffersize;
-
-#ifndef HAVE_W32_SYSTEM
- start:
-  if (len == 0)
-    /* No data is buffered.  */
-    {
-      struct msghdr msg;
-      struct iovec iovec;
-      struct sockaddr_un sender;
-      struct
-      {
-       struct cmsghdr hdr;
-       int fd;
-      }
-      cmsg;
-
-      memset (&msg, 0, sizeof (msg));
-
-      for (;;)
-       {
-         msg.msg_name = &sender;
-         msg.msg_namelen = sizeof (struct sockaddr_un);
-         msg.msg_iov = &iovec;
-         msg.msg_iovlen = 1;
-         iovec.iov_base = ctx->domainbuffer;
-         iovec.iov_len = ctx->domainbufferallocated;
-         msg.msg_control = &cmsg;
-         msg.msg_controllen = sizeof cmsg;
-
-         /* Peek first: if the buffer we have is too small then it
-            will be truncated.  */
-         len = recvmsg (ctx->inbound.fd, &msg, MSG_PEEK);
-         if (len < 0)
-           {
-             printf ("domain_reader: %m\n");
-             return -1;
-           }
-
-         if (strcmp (ctx->serveraddr.sun_path,
-                     ((struct sockaddr_un *) msg.msg_name)->sun_path) != 0)
-           {
-             /* XXX: Arg.  Not from whom we expected!  What do we
-                want to do?  Should we just ignore it?  Either way,
-                we still need to consume the message.  */
-             break;
-           }
-
-         if (msg.msg_flags & MSG_TRUNC)
-           /* Enlarge the buffer and try again.  */
-           {
-             int size = ctx->domainbufferallocated;
-             void *tmp;
-
-             if (size == 0)
-               size = 4 * 1024;
-             else
-               size *= 2;
-
-             tmp = malloc (size);
-             if (! tmp)
-               return -1;
-
-             free (ctx->domainbuffer);
-             ctx->domainbuffer = tmp;
-             ctx->domainbufferallocated = size;
-           }
-         else
-           /* We have enough space!  */
-           break;
-       }
-
-      /* Now we have to actually consume it (remember, we only
-        peeked).  */
-      msg.msg_name = &sender;
-      msg.msg_namelen = sizeof (struct sockaddr_un);
-      msg.msg_iov = &iovec;
-      msg.msg_iovlen = 1;
-      iovec.iov_base = ctx->domainbuffer;
-      iovec.iov_len = ctx->domainbufferallocated;
-      msg.msg_control = &cmsg;
-      msg.msg_controllen = sizeof cmsg;
-
-      if (strcmp (ctx->serveraddr.sun_path,
-                 ((struct sockaddr_un *) msg.msg_name)->sun_path) != 0)
-       {
-         /* XXX: Arg.  Not from whom we expected!  What do we want to
-            do?  Should we just ignore it?  We shall do the latter
-            for the moment.  */
-         _assuan_log_printf ("not setup to receive messages from `%s'\n",
-                              ((struct sockaddr_un *) msg.msg_name)->sun_path);
-         goto start;
-       }
-
-      len = recvmsg (ctx->inbound.fd, &msg, 0);
-      if (len < 0)
-       {
-         _assuan_log_printf ("domain_reader: %s\n", strerror (errno));
-         return -1;
-       }
-
-      ctx->domainbuffersize = len;
-      ctx->domainbufferoffset = 0;
-
-      if (sizeof (cmsg) == msg.msg_controllen)
-       /* We received a file descriptor.  */
-       {
-         void *tmp;
-
-         tmp = realloc (ctx->pendingfds,
-                        sizeof (int) * (ctx->pendingfdscount + 1));
-         if (! tmp)
-           {
-             _assuan_log_printf ("domain_reader: %s\n", strerror (errno));
-             return -1;
-           }
-
-         ctx->pendingfds = tmp;
-         ctx->pendingfds[ctx->pendingfdscount++]
-           = *(int *) CMSG_DATA (&cmsg.hdr);
-
-         _assuan_log_printf ("received file descriptor %d from peer\n",
-              ctx->pendingfds[ctx->pendingfdscount - 1]);
-       }
-
-      if (len == 0)
-       goto start;
-    }
-#else
-  len = recvfrom (ctx->inbound.fd, buf, buflen, 0, NULL, NULL);
-#endif
-
-  /* Return some data to the user.  */
-
-  if (len > buflen)
-    /* We have more than the user requested.  */
-    len = buflen;
-
-  memcpy (buf, ctx->domainbuffer + ctx->domainbufferoffset, len);
-  ctx->domainbuffersize -= len;
-  assert (ctx->domainbuffersize >= 0);
-  ctx->domainbufferoffset += len;
-  assert (ctx->domainbufferoffset <= ctx->domainbufferallocated);
-
-  return len;
-}
-
-/* Write to the domain server.  */
-static ssize_t
-domain_writer (assuan_context_t ctx, const void *buf, size_t buflen)
-{
-#ifndef HAVE_W32_SYSTEM
-  struct msghdr msg;
-  struct iovec iovec;
-  ssize_t len;
-
-  memset (&msg, 0, sizeof (msg));
-
-  msg.msg_name = &ctx->serveraddr;
-  msg.msg_namelen = offsetof (struct sockaddr_un, sun_path)
-    + strlen (ctx->serveraddr.sun_path) + 1;
-
-  msg.msg_iovlen = 1;
-  msg.msg_iov = &iovec;
-  iovec.iov_base = (void *) buf;
-  iovec.iov_len = buflen;
-  msg.msg_control = 0;
-  msg.msg_controllen = 0;
-
-  len = sendmsg (ctx->outbound.fd, &msg, 0);
-  if (len < 0)
-    _assuan_log_printf ("domain_writer: %s\n", strerror (errno));
-#else
-  int len;
-  
-  len = sendto (ctx->outbound.fd, buf, buflen, 0,
-                (struct sockaddr *)&ctx->serveraddr,
-                sizeof (struct sockaddr_in));
-#endif  
-  return len;
-}
-
-static assuan_error_t
-domain_sendfd (assuan_context_t ctx, int fd)
-{
-#ifndef HAVE_W32_SYSTEM
-  struct msghdr msg;
-  struct
-  {
-    struct cmsghdr hdr;
-    int fd;
-  }
-  cmsg;
-  int len;
-
-  memset (&msg, 0, sizeof (msg));
-
-  msg.msg_name = &ctx->serveraddr;
-  msg.msg_namelen = offsetof (struct sockaddr_un, sun_path)
-    + strlen (ctx->serveraddr.sun_path) + 1;
-
-  msg.msg_iovlen = 0;
-  msg.msg_iov = 0;
-
-  cmsg.hdr.cmsg_level = SOL_SOCKET;
-  cmsg.hdr.cmsg_type = SCM_RIGHTS;
-  cmsg.hdr.cmsg_len = sizeof (cmsg);
-
-  msg.msg_control = &cmsg;
-  msg.msg_controllen = sizeof (cmsg);
-
-  *(int *) CMSG_DATA (&cmsg.hdr) = fd;
-
-  len = sendmsg (ctx->outbound.fd, &msg, 0);
-  if (len < 0)
-    {
-      _assuan_log_printf ("domain_sendfd: %s\n", strerror (errno));
-      return ASSUAN_General_Error;
-    }
-  else
-    return 0;
-#else
-  return 0;
-#endif
-}
-
-static assuan_error_t
-domain_receivefd (assuan_context_t ctx, int *fd)
-{
-#ifndef HAVE_W32_SYSTEM
-  if (ctx->pendingfds == 0)
-    {
-      _assuan_log_printf ("no pending file descriptors!\n");
-      return ASSUAN_General_Error;
-    }
-
-  *fd = ctx->pendingfds[0];
-  if (-- ctx->pendingfdscount == 0)
-    {
-      free (ctx->pendingfds);
-      ctx->pendingfds = 0;
-    }
-  else
-    /* Fix the array.  */
-    {
-      memmove (ctx->pendingfds, ctx->pendingfds + 1,
-              ctx->pendingfdscount * sizeof (int));
-      ctx->pendingfds = realloc (ctx->pendingfds,
-                                ctx->pendingfdscount * sizeof (int));
-    }
-#endif
-  return 0;
-}
-
-
-
-/* Make a connection to the Unix domain socket NAME and return a new
-   Assuan context in CTX.  SERVER_PID is currently not used but may
-   become handy in the future.  */
-assuan_error_t
-_assuan_domain_init (assuan_context_t *r_ctx, int rendezvousfd, pid_t peer)
-{
-  static struct assuan_io io = { domain_reader, domain_writer,
-                                domain_sendfd, domain_receivefd };
-
-  assuan_error_t err;
-  assuan_context_t ctx;
-  int fd;
-  size_t len;
-  int tries;
-
-  if (!r_ctx)
-    return ASSUAN_Invalid_Value;
-  *r_ctx = NULL;
-
-  err = _assuan_new_context (&ctx); 
-  if (err)
-    return err;
-
-  /* Save it in case we need it later.  */
-  ctx->pid = peer;
-
-  /* Override the default (NOP) handlers.  */
-  ctx->deinit_handler = do_deinit;
-
-  /* Setup the socket.  */
-
-  fd = _assuan_sock_new (PF_LOCAL, SOCK_DGRAM, 0);
-  if (fd == -1)
-    {
-      _assuan_log_printf ("can't create socket: %s\n", strerror (errno));
-      _assuan_release_context (ctx);
-      return ASSUAN_General_Error;
-    }
-  
-  ctx->inbound.fd = fd;
-  ctx->outbound.fd = fd;
-  
-  /* And the io buffers.  */
-
-  ctx->io = &io;
-  ctx->domainbuffer = 0;
-  ctx->domainbufferoffset = 0;
-  ctx->domainbuffersize = 0;
-  ctx->domainbufferallocated = 0;
-  ctx->pendingfds = 0;
-  ctx->pendingfdscount = 0;
-
-  /* Get usable name and bind to it.  */
-
-  for (tries = 0; tries < TMP_MAX; tries ++)
-    {
-      char *p;
-      char buf[L_tmpnam];
-
-      /* XXX: L_tmpnam must be shorter than sizeof (sun_path)!  */
-      assert (L_tmpnam < sizeof (ctx->myaddr.sun_path));
-
-      /* XXX: W32 tmpnam is broken */
-      p = tmpnam (buf);
-      if (! p)
-       {
-         _assuan_log_printf ("cannot determine an appropriate temporary file "
-            "name.  DoS in progress?\n");
-         _assuan_release_context (ctx);
-         _assuan_close (fd);
-         return ASSUAN_General_Error;
-       }
-
-      memset (&ctx->myaddr, 0, sizeof ctx->myaddr);
-      ctx->myaddr.sun_family = AF_LOCAL;
-      len = strlen (buf) + 1;
-      memcpy (ctx->myaddr.sun_path, buf, len);
-      len += offsetof (struct sockaddr_un, sun_path);
-
-      err = _assuan_sock_bind (fd, (struct sockaddr *) &ctx->myaddr, len);
-      if (! err)
-       break;
-    }
-
-  if (err)
-    {
-      _assuan_log_printf ("can't bind to `%s': %s\n", ctx->myaddr.sun_path,
-           strerror (errno));
-      _assuan_release_context (ctx);
-      _assuan_close (fd);
-      return ASSUAN_Connect_Failed;
-    }
-
-  /* Rendezvous with our peer.  */
-  {
-    FILE *fp;
-    char *p;
-
-    fp = fdopen (rendezvousfd, "w+");
-    if (! fp)
-      {
-       _assuan_log_printf ("can't open rendezvous port: %s\n", strerror (errno));
-       return ASSUAN_Connect_Failed;
-      }
-
-    /* Send our address.  */
-    fprintf (fp, "%s\n", ctx->myaddr.sun_path);
-    fflush (fp);
-
-    /* And receive our peer's.  */
-    memset (&ctx->serveraddr, 0, sizeof ctx->serveraddr);
-    for (p = ctx->serveraddr.sun_path;
-        p < (ctx->serveraddr.sun_path
-             + sizeof ctx->serveraddr.sun_path - 1);
-        p ++)
-      {
-       *p = fgetc (fp);
-       if (*p == '\n')
-         break;
-      }
-    *p = '\0';
-    fclose (fp);
-
-    ctx->serveraddr.sun_family = AF_LOCAL;
-  }
-
-  *r_ctx = ctx;
-  return 0;
-}
-
-assuan_error_t
-assuan_domain_connect (assuan_context_t * r_ctx, int rendezvousfd, pid_t peer)
-{
-  assuan_error_t aerr;
-  int okay, off;
-
-  aerr = _assuan_domain_init (r_ctx, rendezvousfd, peer);
-  if (aerr)
-    return aerr;
-
-  /* Initial handshake.  */
-  aerr = _assuan_read_from_server (*r_ctx, &okay, &off);
-  if (aerr)
-    _assuan_log_printf ("can't connect to server: %s\n",
-                        assuan_strerror (aerr));
-  else if (okay != 1)
-    {
-      _assuan_log_printf ("can't connect to server: `");
-      _assuan_log_sanitized_string ((*r_ctx)->inbound.line);
-      fprintf (assuan_get_assuan_log_stream (), "'\n");
-      aerr = ASSUAN_Connect_Failed;
-    }
-
-  if (aerr)
-    assuan_disconnect (*r_ctx);
-
-  return aerr;
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-domain-server.c b/tags/gpgme-1-1-1/assuan/assuan-domain-server.c
deleted file mode 100644 (file)
index 45d53c2..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* assuan-socket-server.c - Assuan socket based server
- *     Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <unistd.h>
-
-#include "assuan-defs.h"
-
-/* Initialize a server.  */
-assuan_error_t
-assuan_init_domain_server (ASSUAN_CONTEXT *r_ctx,
-                          int rendezvousfd,
-                          pid_t peer)
-{
-  assuan_error_t err;
-
-  err = _assuan_domain_init (r_ctx, rendezvousfd, peer);
-  if (err)
-    return err;
-
-  (*r_ctx)->is_server = 1;
-  /* A domain server can only be used once.  */
-  (*r_ctx)->pipe_mode = 1;
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-handler.c b/tags/gpgme-1-1-1/assuan/assuan-handler.c
deleted file mode 100644 (file)
index 21501a3..0000000
+++ /dev/null
@@ -1,727 +0,0 @@
-/* assuan-handler.c - dispatch commands 
- *     Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "assuan-defs.h"
-
-
-
-#define spacep(p)  (*(p) == ' ' || *(p) == '\t')
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-
-static int my_strcasecmp (const char *a, const char *b);
-
-
-
-static int
-dummy_handler (ASSUAN_CONTEXT ctx, char *line)
-{
-  return set_error (ctx, Server_Fault, "no handler registered");
-}
-
-
-static int
-std_handler_nop (ASSUAN_CONTEXT ctx, char *line)
-{
-  return 0; /* okay */
-}
-  
-static int
-std_handler_cancel (ASSUAN_CONTEXT ctx, char *line)
-{
-  if (ctx->cancel_notify_fnc)
-    ctx->cancel_notify_fnc (ctx);
-  return set_error (ctx, Not_Implemented, NULL); 
-}
-
-static int
-std_handler_option (ASSUAN_CONTEXT ctx, char *line)
-{
-  char *key, *value, *p;
-
-  for (key=line; spacep (key); key++)
-    ;
-  if (!*key)
-    return set_error (ctx, Syntax_Error, "argument required");
-  if (*key == '=')
-    return set_error (ctx, Syntax_Error, "no option name given");
-  for (value=key; *value && !spacep (value) && *value != '='; value++)
-    ;
-  if (*value)
-    {
-      if (spacep (value))
-        *value++ = 0; /* terminate key */
-      for (; spacep (value); value++)
-        ;
-      if (*value == '=')
-        {
-          *value++ = 0; /* terminate key */
-          for (; spacep (value); value++)
-            ;
-          if (!*value)
-            return set_error (ctx, Syntax_Error, "option argument expected");
-        }
-      if (*value)
-        {
-          for (p = value + strlen(value) - 1; p > value && spacep (p); p--)
-            ;
-          if (p > value)
-            *++p = 0; /* strip trailing spaces */
-        }
-    }
-
-  if (*key == '-' && key[1] == '-' && key[2])
-    key += 2; /* the double dashes are optional */
-  if (*key == '-')
-    return set_error (ctx, Syntax_Error,
-                      "option should not begin with one dash");
-
-  if (ctx->option_handler_fnc)
-    return ctx->option_handler_fnc (ctx, key, value);
-  return 0;
-}
-  
-static int
-std_handler_bye (ASSUAN_CONTEXT ctx, char *line)
-{
-  if (ctx->bye_notify_fnc)
-    ctx->bye_notify_fnc (ctx);
-  assuan_close_input_fd (ctx);
-  assuan_close_output_fd (ctx);
-  return -1; /* pretty simple :-) */
-}
-  
-static int
-std_handler_auth (ASSUAN_CONTEXT ctx, char *line)
-{
-  return set_error (ctx, Not_Implemented, NULL); 
-}
-  
-static int
-std_handler_reset (ASSUAN_CONTEXT ctx, char *line)
-{
-  if (ctx->reset_notify_fnc)
-    ctx->reset_notify_fnc (ctx);
-  assuan_close_input_fd (ctx);
-  assuan_close_output_fd (ctx);
-  return 0;
-}
-  
-static int
-std_handler_end (ASSUAN_CONTEXT ctx, char *line)
-{
-  return set_error (ctx, Not_Implemented, NULL); 
-}
-
-assuan_error_t
-assuan_command_parse_fd (ASSUAN_CONTEXT ctx, char *line, int *rfd)
-{
-  char *endp;
-
-  if (strncmp (line, "FD", 2) != 0 || (line[2] != '=' && line[2] != '\0'))
-    return set_error (ctx, Syntax_Error, "FD[=<n>] expected");
-  line += 2;
-  if (*line == '=')
-    {
-      line ++;
-      if (!digitp (*line))
-       return set_error (ctx, Syntax_Error, "number required");
-      *rfd = strtoul (line, &endp, 10);
-      /* remove that argument so that a notify handler won't see it */
-      memset (line, ' ', endp? (endp-line):strlen(line));
-
-      if (*rfd == ctx->inbound.fd)
-       return set_error (ctx, Parameter_Conflict, "fd same as inbound fd");
-      if (*rfd == ctx->outbound.fd)
-       return set_error (ctx, Parameter_Conflict, "fd same as outbound fd");
-      return 0;
-    }
-  else
-    /* Our peer has sent the file descriptor.  */
-    return assuan_receivefd (ctx, rfd);
-}
-
-/* Format is INPUT FD=<n> */
-static int
-std_handler_input (ASSUAN_CONTEXT ctx, char *line)
-{
-  int rc, fd;
-
-  rc = assuan_command_parse_fd (ctx, line, &fd);
-  if (rc)
-    return rc;
-  ctx->input_fd = fd;
-  if (ctx->input_notify_fnc)
-    ctx->input_notify_fnc (ctx, line);
-  return 0;
-}
-
-/* Format is OUTPUT FD=<n> */
-static int
-std_handler_output (ASSUAN_CONTEXT ctx, char *line)
-{
-  int rc, fd;
-
-  rc = assuan_command_parse_fd (ctx, line, &fd);
-  if (rc)
-    return rc;
-  ctx->output_fd = fd;
-  if (ctx->output_notify_fnc)
-    ctx->output_notify_fnc (ctx, line);
-  return 0;
-}
-
-
-
-  
-
-/* This is a table with the standard commands and handler for them.
-   The table is used to initialize a new context and associate strings
-   with default handlers */
-static struct {
-  const char *name;
-  int (*handler)(ASSUAN_CONTEXT, char *line);
-  int always; /* always initialize this command */
-} std_cmd_table[] = {
-  { "NOP",    std_handler_nop, 1 },
-  { "CANCEL", std_handler_cancel, 1 },
-  { "OPTION", std_handler_option, 1 },
-  { "BYE",    std_handler_bye, 1 },
-  { "AUTH",   std_handler_auth, 1 },
-  { "RESET",  std_handler_reset, 1 },
-  { "END",    std_handler_end, 1 },
-              
-  { "INPUT",  std_handler_input },
-  { "OUTPUT", std_handler_output },
-  { "OPTION", std_handler_option, 1 },
-  { NULL }
-};
-
-
-/**
- * assuan_register_command:
- * @ctx: the server context
- * @cmd_name: A string with the command name
- * @handler: The handler function to be called or NULL to use a default
- *           handler.
- * 
- * Register a handler to be used for a given command.  Note that
- * several default handlers are already regsitered with a new context.
- * This function however allows to override them.
- * 
- * Return value: 0 on success or an error code
- **/
-int
-assuan_register_command (ASSUAN_CONTEXT ctx,
-                         const char *cmd_name,
-                         int (*handler)(ASSUAN_CONTEXT, char *))
-{
-  int i;
-  const char *s;
-
-  if (cmd_name && !*cmd_name)
-    cmd_name = NULL;
-
-  if (!cmd_name)
-    return ASSUAN_Invalid_Value;
-
-  if (!handler)
-    { /* find a default handler. */
-      for (i=0; (s=std_cmd_table[i].name) && strcmp (cmd_name, s); i++)
-        ;
-      if (!s)
-        { /* Try again but case insensitive. */
-          for (i=0; (s=std_cmd_table[i].name)
-                    && my_strcasecmp (cmd_name, s); i++)
-            ;
-        }
-      if (s)
-        handler = std_cmd_table[i].handler;
-      if (!handler)
-        handler = dummy_handler; /* Last resort is the dummy handler. */
-    }
-  
-  if (!ctx->cmdtbl)
-    {
-      ctx->cmdtbl_size = 50;
-      ctx->cmdtbl = xtrycalloc ( ctx->cmdtbl_size, sizeof *ctx->cmdtbl);
-      if (!ctx->cmdtbl)
-        return ASSUAN_Out_Of_Core;
-      ctx->cmdtbl_used = 0;
-    }
-  else if (ctx->cmdtbl_used >= ctx->cmdtbl_size)
-    {
-      struct cmdtbl_s *x;
-
-      x = xtryrealloc ( ctx->cmdtbl, (ctx->cmdtbl_size+10) * sizeof *x);
-      if (!x)
-        return ASSUAN_Out_Of_Core;
-      ctx->cmdtbl = x;
-      ctx->cmdtbl_size += 50;
-    }
-
-  ctx->cmdtbl[ctx->cmdtbl_used].name = cmd_name;
-  ctx->cmdtbl[ctx->cmdtbl_used].handler = handler;
-  ctx->cmdtbl_used++;
-  return 0;
-}
-
-int
-assuan_register_bye_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->bye_notify_fnc = fnc;
-  return 0;
-}
-
-int
-assuan_register_reset_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->reset_notify_fnc = fnc;
-  return 0;
-}
-
-int
-assuan_register_cancel_notify (ASSUAN_CONTEXT ctx, void (*fnc)(ASSUAN_CONTEXT))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->cancel_notify_fnc = fnc;
-  return 0;
-}
-
-int
-assuan_register_option_handler (ASSUAN_CONTEXT ctx,
-                               int (*fnc)(ASSUAN_CONTEXT,
-                                          const char*, const char*))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->option_handler_fnc = fnc;
-  return 0;
-}
-
-int
-assuan_register_input_notify (ASSUAN_CONTEXT ctx,
-                              void (*fnc)(ASSUAN_CONTEXT, const char *))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->input_notify_fnc = fnc;
-  return 0;
-}
-
-int
-assuan_register_output_notify (ASSUAN_CONTEXT ctx,
-                              void (*fnc)(ASSUAN_CONTEXT, const char *))
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  ctx->output_notify_fnc = fnc;
-  return 0;
-}
-
-
-/* Helper to register the standards commands */
-int
-_assuan_register_std_commands (ASSUAN_CONTEXT ctx)
-{
-  int i, rc;
-
-  for (i=0; std_cmd_table[i].name; i++)
-    {
-      if (std_cmd_table[i].always)
-        {
-          rc = assuan_register_command (ctx, std_cmd_table[i].name, NULL);
-          if (rc)
-            return rc;
-        }
-    } 
-  return 0;
-}
-
-
-\f
-/* Process the special data lines.  The "D " has already been removed
-   from the line.  As all handlers this function may modify the line.  */
-static int
-handle_data_line (ASSUAN_CONTEXT ctx, char *line, int linelen)
-{
-  return set_error (ctx, Not_Implemented, NULL);
-}
-
-/* like ascii_strcasecmp but assume that B is already uppercase */
-static int
-my_strcasecmp (const char *a, const char *b)
-{
-    if (a == b)
-        return 0;
-
-    for (; *a && *b; a++, b++)
-      {
-       if (((*a >= 'a' && *a <= 'z')? (*a&~0x20):*a) != *b)
-           break;
-      }
-    return *a == *b? 0 : (((*a >= 'a' && *a <= 'z')? (*a&~0x20):*a) - *b);
-}
-
-/* Parse the line, break out the command, find it in the command
-   table, remove leading and white spaces from the arguments, call the
-   handler with the argument line and return the error */
-static int 
-dispatch_command (ASSUAN_CONTEXT ctx, char *line, int linelen)
-{
-  char *p;
-  const char *s;
-  int shift, i;
-
-  if (*line == 'D' && line[1] == ' ') /* divert to special handler */
-    return handle_data_line (ctx, line+2, linelen-2);
-
-  for (p=line; *p && *p != ' ' && *p != '\t'; p++)
-    ;
-  if (p==line)
-    return set_error (ctx, Invalid_Command, "leading white-space"); 
-  if (*p) 
-    { /* Skip over leading WS after the keyword */
-      *p++ = 0;
-      while ( *p == ' ' || *p == '\t')
-        p++;
-    }
-  shift = p - line;
-
-  for (i=0; (s=ctx->cmdtbl[i].name); i++)
-    {
-      if (!strcmp (line, s))
-        break;
-    }
-  if (!s)
-    { /* and try case insensitive */
-      for (i=0; (s=ctx->cmdtbl[i].name); i++)
-        {
-          if (!my_strcasecmp (line, s))
-            break;
-        }
-    }
-  if (!s)
-    return set_error (ctx, Unknown_Command, NULL);
-  line += shift;
-  linelen -= shift;
-
-/*    fprintf (stderr, "DBG-assuan: processing %s `%s'\n", s, line); */
-  return ctx->cmdtbl[i].handler (ctx, line);
-}
-
-
-
-\f
-static int
-process_request (ASSUAN_CONTEXT ctx)
-{
-  int rc;
-
-  if (ctx->in_inquire)
-    return ASSUAN_Nested_Commands;
-
-  rc = _assuan_read_line (ctx);
-  if (rc)
-    return rc;
-  if (*ctx->inbound.line == '#' || !ctx->inbound.linelen)
-    return 0; /* comment line - ignore */
-
-  ctx->outbound.data.error = 0;
-  ctx->outbound.data.linelen = 0;
-  /* dispatch command and return reply */
-  rc = dispatch_command (ctx, ctx->inbound.line, ctx->inbound.linelen);
-  /* check from data write errors */
-  if (ctx->outbound.data.fp)
-    { /* Flush the data lines */
-      fclose (ctx->outbound.data.fp);
-      ctx->outbound.data.fp = NULL;
-      if (!rc && ctx->outbound.data.error)
-        rc = ctx->outbound.data.error;
-    }
-  else /* flush any data send w/o using the data fp */
-    {
-      assuan_send_data (ctx, NULL, 0);
-      if (!rc && ctx->outbound.data.error)
-        rc = ctx->outbound.data.error;
-    }
-  /* Error handling */
-  if (!rc)
-    {
-      rc = assuan_write_line (ctx, ctx->okay_line? ctx->okay_line : "OK");
-    }
-  else if (rc == -1)
-    { /* No error checking because the peer may have already disconnect */ 
-      assuan_write_line (ctx, "OK closing connection");
-      ctx->finish_handler (ctx);
-    }
-  else 
-    {
-      char errline[300];
-
-      if (rc < 100)
-        sprintf (errline, "ERR %d server fault (%.50s)",
-                 ASSUAN_Server_Fault, assuan_strerror (rc));
-      else
-        {
-          const char *text = ctx->err_no == rc? ctx->err_str:NULL;
-
-#if defined(__GNUC__) && defined(__ELF__)
-          /* If we have weak symbol support we try to use the error
-             strings from libgpg-error without creating a dependency.
-             They are used for debugging purposes only, so there is no
-             problem if they are not available.  We need to make sure
-             that we are using elf because only this guarantees that
-             weak symbol support is available in case GNU ld is not
-             used. */
-          unsigned int source, code;
-
-          int gpg_strerror_r (unsigned int err, char *buf, size_t buflen)
-            __attribute__ ((weak));
-
-          const char *gpg_strsource (unsigned int err)
-            __attribute__ ((weak));
-
-          source = ((rc >> 24) & 0xff);
-          code = (rc & 0x00ffffff);
-          if (source && gpg_strsource && gpg_strerror_r)
-            {
-              /* Assume this is an libgpg-error. */
-              char ebuf[50];
-
-              gpg_strerror_r (rc, ebuf, sizeof ebuf );
-              sprintf (errline, "ERR %d %.50s <%.30s>%s%.100s",
-                       rc,
-                       ebuf,
-                       gpg_strsource (rc),
-                       text? " - ":"", text?text:"");
-            }
-          else
-#endif /* __GNUC__  && __ELF__ */
-            sprintf (errline, "ERR %d %.50s%s%.100s",
-                     rc, assuan_strerror (rc), text? " - ":"", text?text:"");
-        }
-      rc = assuan_write_line (ctx, errline);
-    }
-
-  ctx->confidential = 0;
-  if (ctx->okay_line)
-    {
-      xfree (ctx->okay_line);
-      ctx->okay_line = NULL;
-    }
-  return rc;
-}
-
-/**
- * assuan_process:
- * @ctx: assuan context
- * 
- * This function is used to handle the assuan protocol after a
- * connection has been established using assuan_accept().  This is the
- * main protocol handler.
- * 
- * Return value: 0 on success or an error code if the assuan operation
- * failed.  Note, that no error is returned for operational errors.
- **/
-int
-assuan_process (ASSUAN_CONTEXT ctx)
-{
-  int rc;
-
-  do {
-    rc = process_request (ctx);
-  } while (!rc);
-
-  if (rc == -1)
-    rc = 0;
-
-  return rc;
-}
-
-
-/**
- * assuan_process_next:
- * @ctx: Assuan context
- * 
- * Same as assuan_process() but the user has to provide the outer
- * loop.  He should loop as long as the return code is zero and stop
- * otherwise; -1 is regular end.
- * 
- * See also: assuan_get_active_fds()
- * Return value: -1 for end of server, 0 on success or an error code
- **/
-int 
-assuan_process_next (ASSUAN_CONTEXT ctx)
-{
-  return process_request (ctx);
-}
-
-
-/**
- * assuan_get_active_fds:
- * @ctx: Assuan context
- * @what: 0 for read fds, 1 for write fds
- * @fdarray: Caller supplied array to store the FDs
- * @fdarraysize: size of that array
- * 
- * Return all active filedescriptors for the given context.  This
- * function can be used to select on the fds and call
- * assuan_process_next() if there is an active one.  The first fd in
- * the array is the one used for the command connection.
- *
- * Note, that write FDs are not yet supported.
- * 
- * Return value: number of FDs active and put into @fdarray or -1 on
- * error which is most likely a too small fdarray.
- **/
-int 
-assuan_get_active_fds (ASSUAN_CONTEXT ctx, int what,
-                       int *fdarray, int fdarraysize)
-{
-  int n = 0;
-
-  if (!ctx || fdarraysize < 2 || what < 0 || what > 1)
-    return -1;
-
-  if (!what)
-    {
-      if (ctx->inbound.fd != -1)
-        fdarray[n++] = ctx->inbound.fd;
-    }
-  else
-    {
-      if (ctx->outbound.fd != -1)
-        fdarray[n++] = ctx->outbound.fd;
-      if (ctx->outbound.data.fp)
-        fdarray[n++] = fileno (ctx->outbound.data.fp);
-    }
-
-  return n;
-}
-
-/* Return a FP to be used for data output.  The FILE pointer is valid
-   until the end of a handler.  So a close is not needed.  Assuan does
-   all the buffering needed to insert the status line as well as the
-   required line wappping and quoting for data lines.
-
-   We use GNU's custom streams here.  There should be an alternative
-   implementaion for systems w/o a glibc, a simple implementation
-   could use a child process */
-FILE *
-assuan_get_data_fp (ASSUAN_CONTEXT ctx)
-{
-#if defined (HAVE_FOPENCOOKIE) || defined (HAVE_FUNOPEN)
-  if (ctx->outbound.data.fp)
-    return ctx->outbound.data.fp;
-  
-
-  ctx->outbound.data.fp = funopen (ctx, 0,
-                                  _assuan_cookie_write_data,
-                                  0, _assuan_cookie_write_flush);
-  ctx->outbound.data.error = 0;
-  return ctx->outbound.data.fp;
-#else
-  errno = ENOSYS;
-  return NULL;
-#endif
-}
-
-
-/* Set the text used for the next OK reponse.  This string is
-   automatically reset to NULL after the next command. */
-assuan_error_t
-assuan_set_okay_line (ASSUAN_CONTEXT ctx, const char *line)
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  if (!line)
-    {
-      xfree (ctx->okay_line);
-      ctx->okay_line = NULL;
-    }
-  else
-    {
-      /* FIXME: we need to use gcry_is_secure() to test whether
-         we should allocate the entire line in secure memory */
-      char *buf = xtrymalloc (3+strlen(line)+1);
-      if (!buf)
-        return ASSUAN_Out_Of_Core;
-      strcpy (buf, "OK ");
-      strcpy (buf+3, line);
-      xfree (ctx->okay_line);
-      ctx->okay_line = buf;
-    }
-  return 0;
-}
-
-
-
-assuan_error_t
-assuan_write_status (ASSUAN_CONTEXT ctx, const char *keyword, const char *text)
-{
-  char buffer[256];
-  char *helpbuf;
-  size_t n;
-  assuan_error_t ae;
-
-  if ( !ctx || !keyword)
-    return ASSUAN_Invalid_Value;
-  if (!text)
-    text = "";
-
-  n = 2 + strlen (keyword) + 1 + strlen (text) + 1;
-  if (n < sizeof (buffer))
-    {
-      strcpy (buffer, "S ");
-      strcat (buffer, keyword);
-      if (*text)
-        {
-          strcat (buffer, " ");
-          strcat (buffer, text);
-        }
-      ae = assuan_write_line (ctx, buffer);
-    }
-  else if ( (helpbuf = xtrymalloc (n)) )
-    {
-      strcpy (helpbuf, "S ");
-      strcat (helpbuf, keyword);
-      if (*text)
-        {
-          strcat (helpbuf, " ");
-          strcat (helpbuf, text);
-        }
-      ae = assuan_write_line (ctx, helpbuf);
-      xfree (helpbuf);
-    }
-  else
-    ae = 0;
-  return ae;
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-inquire.c b/tags/gpgme-1-1-1/assuan/assuan-inquire.c
deleted file mode 100644 (file)
index 0547aae..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/* assuan-inquire.c - handle inquire stuff
- *     Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "assuan-defs.h"
-
-#define digitp(a) ((a) >= '0' && (a) <= '9')
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-
-struct membuf
-{
-  size_t len;
-  size_t size;
-  char *buf;
-  int out_of_core;
-  int too_large;
-  size_t maxlen;
-};
-
-
-\f
-/* A simple implemnation of a dynamic buffer.  Use init_membuf() to
-   create a buffer, put_membuf to append bytes and get_membuf to
-   release and return the buffer.  Allocation errors are detected but
-   only returned at the final get_membuf(), this helps not to clutter
-   the code with out of core checks.  */
-
-static void
-init_membuf (struct membuf *mb, int initiallen, size_t maxlen)
-{
-  mb->len = 0;
-  mb->size = initiallen;
-  mb->out_of_core = 0;
-  mb->too_large = 0;
-  mb->maxlen = maxlen;
-  /* we need to allocate one byte more for get_membuf */
-  mb->buf = xtrymalloc (initiallen+1);
-  if (!mb->buf)
-      mb->out_of_core = 1;
-}
-
-static void
-put_membuf (struct membuf *mb, const void *buf, size_t len)
-{
-  if (mb->out_of_core || mb->too_large)
-    return;
-
-  if (mb->maxlen && mb->len + len > mb->maxlen)
-    {
-      mb->too_large = 1;
-      return;
-    }
-
-  if (mb->len + len >= mb->size)
-    {
-      char *p;
-      
-      mb->size += len + 1024;
-      /* we need to allocate one byte more for get_membuf */
-      p = xtryrealloc (mb->buf, mb->size+1);
-      if (!p)
-        {
-          mb->out_of_core = 1;
-          return;
-        }
-      mb->buf = p;
-    }
-  memcpy (mb->buf + mb->len, buf, len);
-  mb->len += len;
-}
-
-static void *
-get_membuf (struct membuf *mb, size_t *len)
-{
-  char *p;
-
-  if (mb->out_of_core || mb->too_large)
-    {
-      xfree (mb->buf);
-      mb->buf = NULL;
-      return NULL;
-    }
-
-  mb->buf[mb->len] = 0; /* there is enough space for the hidden eos */
-  p = mb->buf;
-  *len = mb->len;
-  mb->buf = NULL;
-  mb->out_of_core = 1; /* don't allow a reuse */
-  return p;
-}
-
-static void
-free_membuf (struct membuf *mb)
-{
-  xfree (mb->buf);
-  mb->buf = NULL;
-}
-
-
-/**
- * assuan_inquire:
- * @ctx: An assuan context
- * @keyword: The keyword used for the inquire
- * @r_buffer: Returns an allocated buffer
- * @r_length: Returns the length of this buffer
- * @maxlen: If not 0, the size limit of the inquired data.
- * 
- * A Server may use this to Send an inquire.  r_buffer, r_length and
- * maxlen may all be NULL/0 to indicate that no real data is expected.
- * 
- * Return value: 0 on success or an ASSUAN error code
- **/
-assuan_error_t
-assuan_inquire (assuan_context_t ctx, const char *keyword,
-                unsigned char **r_buffer, size_t *r_length, size_t maxlen)
-{
-  assuan_error_t rc;
-  struct membuf mb;
-  char cmdbuf[LINELENGTH-10]; /* (10 = strlen ("INQUIRE ")+CR,LF) */
-  unsigned char *line, *p;
-  int linelen;
-  int nodataexpected;
-
-  if (!ctx || !keyword || (10 + strlen (keyword) >= sizeof (cmdbuf)))
-    return ASSUAN_Invalid_Value;
-  nodataexpected = !r_buffer && !r_length && !maxlen;
-  if (!nodataexpected && (!r_buffer || !r_length))
-    return ASSUAN_Invalid_Value;
-  if (!ctx->is_server)
-    return ASSUAN_Not_A_Server;
-  if (ctx->in_inquire)
-    return ASSUAN_Nested_Commands;
-  
-  ctx->in_inquire = 1;
-  if (nodataexpected)
-    memset (&mb, 0, sizeof mb); /* avoid compiler warnings */
-  else
-    init_membuf (&mb, maxlen? maxlen:1024, maxlen);
-
-  strcpy (stpcpy (cmdbuf, "INQUIRE "), keyword);
-  rc = assuan_write_line (ctx, cmdbuf);
-  if (rc)
-    goto leave;
-
-  for (;;)
-    {
-      do 
-        {
-          rc = _assuan_read_line (ctx);
-          if (rc)
-            goto leave;
-          line = (unsigned char *) ctx->inbound.line;
-          linelen = ctx->inbound.linelen;
-        }    
-      while (*line == '#' || !linelen);
-      if (line[0] == 'E' && line[1] == 'N' && line[2] == 'D'
-          && (!line[3] || line[3] == ' '))
-        break; /* END command received*/
-      if (line[0] == 'C' && line[1] == 'A' && line[2] == 'N')
-        {
-          rc = ASSUAN_Canceled;
-          goto leave;
-        }
-      if (line[0] != 'D' || line[1] != ' ' || nodataexpected)
-        {
-          rc = ASSUAN_Unexpected_Command;
-          goto leave;
-        }
-      if (linelen < 3)
-        continue;
-      line += 2;
-      linelen -= 2;
-
-      p = line;
-      while (linelen)
-        {
-          for (;linelen && *p != '%'; linelen--, p++)
-            ;
-          put_membuf (&mb, line, p-line);
-          if (linelen > 2)
-            { /* handle escaping */
-              unsigned char tmp[1];
-              p++;
-              *tmp = xtoi_2 (p);
-              p += 2;
-              linelen -= 3;
-              put_membuf (&mb, tmp, 1);
-            }
-          line = p;
-        }
-      if (mb.too_large)
-        {
-          rc = ASSUAN_Too_Much_Data;
-          goto leave;
-        }
-    }
-
-  if (!nodataexpected)
-    {
-      *r_buffer = get_membuf (&mb, r_length);
-      if (!*r_buffer)
-        rc = ASSUAN_Out_Of_Core;
-    }
-
- leave:
-  if (!nodataexpected)
-    free_membuf (&mb);
-  ctx->in_inquire = 0;
-  return rc;
-}
-
-
-
-
-
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-io.c b/tags/gpgme-1-1-1/assuan/assuan-io.c
deleted file mode 100644 (file)
index 321f2ba..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* assuan-io.c - Wraps the read and write functions.
- *     Copyright (C) 2002, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "assuan-defs.h"
-#include <sys/types.h>
-#include <unistd.h>
-#ifdef HAVE_W32_SYSTEM
-#include <windows.h>
-#endif
-
-#ifndef _ASSUAN_NO_PTH
-extern ssize_t pth_read (int fd, void *buffer, size_t size);
-extern ssize_t pth_write (int fd, const void *buffer, size_t size);
-
-#ifndef HAVE_W32_SYSTEM
-#pragma weak pth_read
-#pragma weak pth_write
-#endif
-#endif /*!_ASSUAN_NO_PTH*/
-
-ssize_t
-_assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size)
-{
-#ifdef _ASSUAN_NO_PTH
-  return read (ctx->inbound.fd, buffer, size);
-#else
-# ifndef HAVE_W32_SYSTEM
-  return (pth_read ? pth_read : read) (ctx->inbound.fd, buffer, size);
-# else
-  return pth_read ? pth_read (ctx->inbound.fd, buffer, size)
-                  : recv (ctx->inbound.fd, buffer, size, 0);
-# endif
-# endif
-}
-
-ssize_t
-_assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size)
-{
-#ifdef _ASSUAN_NO_PTH
-  return write (ctx->outbound.fd, buffer, size);
-#else
-# ifndef HAVE_W32_SYSTEM
-  return (pth_write ? pth_write : write) (ctx->outbound.fd, buffer, size);
-# else
-  return pth_write ? pth_write (ctx->outbound.fd, buffer, size)
-                   : send (ctx->outbound.fd, buffer, size, 0);
-# endif
-#endif
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-listen.c b/tags/gpgme-1-1-1/assuan/assuan-listen.c
deleted file mode 100644 (file)
index 04f138e..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/* assuan-listen.c - Wait for a connection (server) 
- *     Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "assuan-defs.h"
-
-assuan_error_t
-assuan_set_hello_line (assuan_context_t ctx, const char *line)
-{
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-  if (!line)
-    {
-      xfree (ctx->hello_line);
-      ctx->hello_line = NULL;
-    }
-  else
-    {
-      char *buf = xtrymalloc (3+strlen(line)+1);
-      if (!buf)
-        return ASSUAN_Out_Of_Core;
-      if (strchr (line, '\n'))
-        strcpy (buf, line);
-      else
-        {
-          strcpy (buf, "OK ");
-          strcpy (buf+3, line);
-        }
-      xfree (ctx->hello_line);
-      ctx->hello_line = buf;
-    }
-  return 0;
-}
-
-
-/**
- * assuan_accept:
- * @ctx: context
- * 
- * Cancel any existing connection and wait for a connection from a
- * client.  The initial handshake is performed which may include an
- * initial authentication or encryption negotiation.
- * 
- * Return value: 0 on success or an error if the connection could for
- * some reason not be established.
- **/
-assuan_error_t
-assuan_accept (assuan_context_t ctx)
-{
-  int rc;
-  const char *p, *pend;
-
-  if (!ctx)
-    return ASSUAN_Invalid_Value;
-
-  if (ctx->pipe_mode > 1)
-    return -1; /* second invocation for pipemode -> terminate */
-  ctx->finish_handler (ctx);
-
-  rc = ctx->accept_handler (ctx);
-  if (rc)
-    return rc;
-
-  /* Send the hello. */
-  p = ctx->hello_line;
-  if (p && (pend = strchr (p, '\n')))
-    { /* This is a multi line hello.  Send all but the last line as
-         comments. */
-      do
-        {
-          rc = _assuan_write_line (ctx, "# ", p, pend - p);
-          if (rc)
-            return rc;
-          p = pend + 1;
-          pend = strchr (p, '\n');
-        }
-      while (pend);
-      rc = _assuan_write_line (ctx, "OK ", p, strlen (p));
-    }
-  else if (p)
-    rc = assuan_write_line (ctx, p);
-  else
-    rc = assuan_write_line (ctx, "OK Pleased to meet you");
-  if (rc)
-    return rc;
-  
-  if (ctx->pipe_mode)
-    ctx->pipe_mode = 2;
-  
-  return 0;
-}
-
-
-
-int
-assuan_get_input_fd (assuan_context_t ctx)
-{
-  return ctx? ctx->input_fd : -1;
-}
-
-
-int
-assuan_get_output_fd (assuan_context_t ctx)
-{
-  return ctx? ctx->output_fd : -1;
-}
-
-
-/* Close the fd descriptor set by the command INPUT FD=n.  We handle
-   this fd inside assuan so that we can do some initial checks */
-assuan_error_t
-assuan_close_input_fd (assuan_context_t ctx)
-{
-  if (!ctx || ctx->input_fd == -1)
-    return ASSUAN_Invalid_Value;
-  _assuan_close (ctx->input_fd);
-  ctx->input_fd = -1;
-  return 0;
-}
-
-/* Close the fd descriptor set by the command OUTPUT FD=n.  We handle
-   this fd inside assuan so that we can do some initial checks */
-assuan_error_t
-assuan_close_output_fd (assuan_context_t ctx)
-{
-  if (!ctx || ctx->output_fd == -1)
-    return ASSUAN_Invalid_Value;
-
-  _assuan_close (ctx->output_fd);
-  ctx->output_fd = -1;
-  return 0;
-}
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-logging.c b/tags/gpgme-1-1-1/assuan/assuan-logging.c
deleted file mode 100644 (file)
index 7c65d57..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* assuan-logging.c - Default logging function.
- *     Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-#ifdef HAVE_W32_SYSTEM
-#include <windows.h>
-#endif /*HAVE_W32_SYSTEM*/
-
-#include "assuan-defs.h"
-
-static char prefix_buffer[80];
-static FILE *_assuan_log;
-
-void
-_assuan_set_default_log_stream (FILE *fp)
-{
-  if (!_assuan_log)
-    _assuan_log = fp;
-}
-
-void
-assuan_set_assuan_log_stream (FILE *fp)
-{
-  _assuan_log = fp;
-}
-
-FILE *
-assuan_get_assuan_log_stream (void)
-{
-  return _assuan_log ? _assuan_log : stderr;
-}
-
-
-/* Set the prefix to be used for logging to TEXT or
-   resets it to the default if TEXT is NULL. */
-void
-assuan_set_assuan_log_prefix (const char *text)
-{
-  if (text)
-    {
-      strncpy (prefix_buffer, text, sizeof (prefix_buffer)-1);
-      prefix_buffer[sizeof (prefix_buffer)-1] = 0;
-    }
-  else
-    *prefix_buffer = 0;
-}
-
-const char *
-assuan_get_assuan_log_prefix (void)
-{
-  return prefix_buffer;
-}
-
-
-void
-_assuan_log_printf (const char *format, ...)
-{
-  va_list arg_ptr;
-  FILE *fp;
-  const char *prf;
-
-  fp = assuan_get_assuan_log_stream ();
-  prf = assuan_get_assuan_log_prefix ();
-  if (*prf)
-    {
-      fputs (prf, fp);
-      fputs (": ", fp);
-    }
-
-  va_start (arg_ptr, format);
-  vfprintf (fp, format, arg_ptr );
-  va_end (arg_ptr);
-}
-
-
-
-#ifdef HAVE_W32_SYSTEM
-const char *
-_assuan_w32_strerror (int ec)
-{
-  static char strerr[256];
-  
-  if (ec == -1)
-    ec = (int)GetLastError ();
-  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, ec,
-                 MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-                 strerr, sizeof (strerr)-1, NULL);
-  return strerr;    
-}
-#endif /*HAVE_W32_SYSTEM*/
diff --git a/tags/gpgme-1-1-1/assuan/assuan-pipe-connect.c b/tags/gpgme-1-1-1/assuan/assuan-pipe-connect.c
deleted file mode 100644 (file)
index ecedb16..0000000
+++ /dev/null
@@ -1,619 +0,0 @@
-/* assuan-pipe-connect.c - Establish a pipe connection (client) 
- *     Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/wait.h>
-#else
-#include <windows.h>
-#endif
-
-#include "assuan-defs.h"
-
-#ifdef _POSIX_OPEN_MAX
-#define MAX_OPEN_FDS _POSIX_OPEN_MAX
-#else
-#define MAX_OPEN_FDS 20
-#endif
-
-#ifdef HAVE_W32_SYSTEM
-/* We assume that a HANDLE can be represented by an int which should
-   be true for all i386 systems (HANDLE is defined as void *) and
-   these are the only systems for which Windows is available.  Further
-   we assume that -1 denotes an invalid handle.  */
-#define fd_to_handle(a)  ((HANDLE)(a))
-#define handle_to_fd(a)  ((int)(a))
-#define pid_to_handle(a) ((HANDLE)(a))
-#define handle_to_pid(a) ((int)(a))
-#endif /*HAVE_W32_SYSTEM*/
-
-
-/* This should be called to make sure that SIGPIPE gets ignored.  */
-static void
-fix_signals (void)
-{
-#ifndef _ASSUAN_NO_FIXED_SIGNALS
-#ifndef HAVE_DOSISH_SYSTEM  /* No SIGPIPE for these systems.  */
-  static int fixed_signals;
-
-  if (!fixed_signals)
-    { 
-      struct sigaction act;
-        
-      sigaction (SIGPIPE, NULL, &act);
-      if (act.sa_handler == SIG_DFL)
-       {
-         act.sa_handler = SIG_IGN;
-         sigemptyset (&act.sa_mask);
-         act.sa_flags = 0;
-         sigaction (SIGPIPE, &act, NULL);
-        }
-      fixed_signals = 1;
-      /* FIXME: This is not MT safe */
-    }
-#endif /*HAVE_DOSISH_SYSTEM*/
-#endif /*!_ASSUAN_NO_FIXED_SIGNALS*/
-}
-
-
-#ifndef HAVE_W32_SYSTEM
-static int
-writen (int fd, const char *buffer, size_t length)
-{
-  while (length)
-    {
-      int nwritten = write (fd, buffer, length);
-      
-      if (nwritten < 0)
-        {
-          if (errno == EINTR)
-            continue;
-          return -1; /* write error */
-        }
-      length -= nwritten;
-      buffer += nwritten;
-    }
-  return 0;  /* okay */
-}
-#endif
-
-static int
-do_finish (assuan_context_t ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      _assuan_close (ctx->inbound.fd);
-      ctx->inbound.fd = -1;
-    }
-  if (ctx->outbound.fd != -1)
-    {
-      _assuan_close (ctx->outbound.fd);
-      ctx->outbound.fd = -1;
-    }
-  if (ctx->pid != -1 && ctx->pid)
-    {
-#ifndef HAVE_W32_SYSTEM
-#ifndef _ASSUAN_USE_DOUBLE_FORK
-      if (!ctx->flags.no_waitpid)
-        waitpid (ctx->pid, NULL, 0); 
-      ctx->pid = -1;
-#endif
-#endif /*!HAVE_W32_SYSTEM*/
-    }
-  return 0;
-}
-
-static void
-do_deinit (assuan_context_t ctx)
-{
-  do_finish (ctx);
-}
-
-
-#ifdef HAVE_W32_SYSTEM
-/* Build a command line for use with W32's CreateProcess.  On success
-   CMDLINE gets the address of a newly allocated string.  */
-static int
-build_w32_commandline (char * const *argv, char **cmdline)
-{
-  int i, n;
-  const char *s;
-  char *buf, *p;
-
-  *cmdline = NULL;
-  n = 0;
-  for (i=0; (s=argv[i]); i++)
-    {
-      n += strlen (s) + 1 + 2;  /* (1 space, 2 quoting */
-      for (; *s; s++)
-        if (*s == '\"')
-          n++;  /* Need to double inner quotes.  */
-    }
-  n++;
-
-  buf = p = xtrymalloc (n);
-  if (!buf)
-    return -1;
-
-  for (i=0; argv[i]; i++) 
-    {
-      if (i)
-        p = stpcpy (p, " ");
-      if (!*argv[i]) /* Empty string. */
-        p = stpcpy (p, "\"\"");
-      else if (strpbrk (argv[i], " \t\n\v\f\""))
-        {
-          p = stpcpy (p, "\"");
-          for (s=argv[i]; *s; s++)
-            {
-              *p++ = *s;
-              if (*s == '\"')
-                *p++ = *s;
-            }
-          *p++ = '\"';
-          *p = 0;
-        }
-      else
-        p = stpcpy (p, argv[i]);
-    }
-
-  *cmdline= buf;
-  return 0;
-}
-#endif /*HAVE_W32_SYSTEM*/
-
-
-#ifdef HAVE_W32_SYSTEM
-/* Create pipe where one end end is inheritable.  */
-static int
-create_inheritable_pipe (int filedes[2], int for_write)
-{
-  HANDLE r, w, h;
-  SECURITY_ATTRIBUTES sec_attr;
-
-  memset (&sec_attr, 0, sizeof sec_attr );
-  sec_attr.nLength = sizeof sec_attr;
-  sec_attr.bInheritHandle = FALSE;
-    
-  if (!CreatePipe (&r, &w, &sec_attr, 0))
-    {
-      _assuan_log_printf ("CreatePipe failed: %s\n", w32_strerror (-1));
-      return -1;
-    }
-
-  if (!DuplicateHandle (GetCurrentProcess(), for_write? r : w,
-                        GetCurrentProcess(), &h, 0,
-                        TRUE, DUPLICATE_SAME_ACCESS ))
-    {
-      _assuan_log_printf ("DuplicateHandle failed: %s\n", w32_strerror (-1));
-      CloseHandle (r);
-      CloseHandle (w);
-      return -1;
-    }
-  if (for_write)
-    {
-      CloseHandle (r);
-      r = h;
-    }
-  else
-    {
-      CloseHandle (w);
-      w = h;
-    }
-
-  filedes[0] = handle_to_fd (r);
-  filedes[1] = handle_to_fd (w);
-  return 0;
-}
-#endif /*HAVE_W32_SYSTEM*/
-
-
-/* Connect to a server over a pipe, creating the assuan context and
-   returning it in CTX.  The server filename is NAME, the argument
-   vector in ARGV.  FD_CHILD_LIST is a -1 terminated list of file
-   descriptors not to close in the child.  ATFORK is called in the
-   child right after the fork; ATFORKVALUE is passed as the first
-   argument and 0 is passed as the second argument. The ATFORK
-   function should only act if the second value is 0. */
-assuan_error_t
-assuan_pipe_connect2 (assuan_context_t *ctx,
-                      const char *name, const char *const argv[],
-                      int *fd_child_list,
-                      void (*atfork) (void *opaque, int reserved),
-                      void *atforkvalue)
-{
-#ifdef HAVE_W32_SYSTEM
-  assuan_error_t err;
-  int rp[2];
-  int wp[2];
-  char mypidstr[50];
-  char *cmdline;
-  SECURITY_ATTRIBUTES sec_attr;
-  PROCESS_INFORMATION pi = 
-    {
-      NULL,      /* Returns process handle.  */
-      0,         /* Returns primary thread handle.  */
-      0,         /* Returns pid.  */
-      0          /* Returns tid.  */
-    };
-  STARTUPINFO si;
-  int fd, *fdp;
-  HANDLE nullfd = INVALID_HANDLE_VALUE;
-
-  if (!ctx || !name || !argv || !argv[0])
-    return ASSUAN_Invalid_Value;
-
-  fix_signals ();
-
-  sprintf (mypidstr, "%lu", (unsigned long)getpid ());
-
-  /* Build the command line.  */
-  if (build_w32_commandline (argv, &cmdline))
-    return ASSUAN_Out_Of_Core;
-
-  /* Create thew two pipes. */
-  if (create_inheritable_pipe (rp, 0))
-    {
-      xfree (cmdline);
-      return ASSUAN_General_Error;
-    }
-  
-  if (create_inheritable_pipe (wp, 1))
-    {
-      CloseHandle (fd_to_handle (rp[0]));
-      CloseHandle (fd_to_handle (rp[1]));
-      xfree (cmdline);
-      return ASSUAN_General_Error;
-    }
-
-  
-  err = _assuan_new_context (ctx);
-  if (err)
-    {
-      CloseHandle (fd_to_handle (rp[0]));
-      CloseHandle (fd_to_handle (rp[1]));
-      CloseHandle (fd_to_handle (wp[0]));
-      CloseHandle (fd_to_handle (wp[1]));
-      xfree (cmdline);
-      return ASSUAN_General_Error;
-    }
-
-  (*ctx)->pipe_mode = 1;
-  (*ctx)->inbound.fd  = rp[0];  /* Our inbound is read end of read pipe. */
-  (*ctx)->outbound.fd = wp[1];  /* Our outbound is write end of write pipe. */
-  (*ctx)->deinit_handler = do_deinit;
-  (*ctx)->finish_handler = do_finish;
-
-
-  /* fixme: Actually we should set the "_assuan_pipe_connect_pid" env
-     variable.  However this requires us to write a full environment
-     handler, because the strings are expected in sorted order.  The
-     suggestion given in the MS Reference Library, to save the old
-     value, changeit, create proces and restore it, is not thread
-     safe.  */
-
-  /* Start the process.  */
-  memset (&sec_attr, 0, sizeof sec_attr );
-  sec_attr.nLength = sizeof sec_attr;
-  sec_attr.bInheritHandle = FALSE;
-  
-  memset (&si, 0, sizeof si);
-  si.cb = sizeof (si);
-  si.dwFlags = STARTF_USESTDHANDLES;
-  si.hStdInput  = fd_to_handle (wp[0]);
-  si.hStdOutput = fd_to_handle (rp[1]);
-
-  /* Dup stderr to /dev/null unless it is in the list of FDs to be
-     passed to the child. */
-  fd = fileno (stderr);
-  fdp = fd_child_list;
-  if (fdp)
-    {
-      for (; *fdp != -1 && *fdp != fd; fdp++)
-        ;
-    }
-  if (!fdp || *fdp == -1)
-    {
-      nullfd = CreateFile ("nul", GENERIC_WRITE,
-                           FILE_SHARE_READ | FILE_SHARE_WRITE,
-                           NULL, OPEN_EXISTING, 0, NULL);
-      if (nullfd == INVALID_HANDLE_VALUE)
-        {
-          _assuan_log_printf ("can't open `nul': %s\n", w32_strerror (-1));
-          CloseHandle (fd_to_handle (rp[0]));
-          CloseHandle (fd_to_handle (rp[1]));
-          CloseHandle (fd_to_handle (wp[0]));
-          CloseHandle (fd_to_handle (wp[1]));
-          xfree (cmdline);
-          _assuan_release_context (*ctx); 
-          return -1;
-        }
-      si.hStdError = nullfd;
-    }
-  else
-    si.hStdError = fd_to_handle (_get_osfhandle (fd));
-
-
-  /* Note: We inherit all handles flagged as inheritable.  This seems
-     to be a security flaw but there seems to be no way of selecting
-     handles to inherit. */
-  /*   _assuan_log_printf ("CreateProcess, path=`%s' cmdline=`%s'\n", */
-  /*                       name, cmdline); */
-  if (!CreateProcess (name,                 /* Program to start.  */
-                      cmdline,              /* Command line arguments.  */
-                      &sec_attr,            /* Process security attributes.  */
-                      &sec_attr,            /* Thread security attributes.  */
-                      TRUE,                 /* Inherit handles.  */
-                      (CREATE_DEFAULT_ERROR_MODE
-                       | GetPriorityClass (GetCurrentProcess ())
-                       | CREATE_SUSPENDED), /* Creation flags.  */
-                      NULL,                 /* Environment.  */
-                      NULL,                 /* Use current drive/directory.  */
-                      &si,                  /* Startup information. */
-                      &pi                   /* Returns process information.  */
-                      ))
-    {
-      _assuan_log_printf ("CreateProcess failed: %s\n", w32_strerror (-1));
-      CloseHandle (fd_to_handle (rp[0]));
-      CloseHandle (fd_to_handle (rp[1]));
-      CloseHandle (fd_to_handle (wp[0]));
-      CloseHandle (fd_to_handle (wp[1]));
-      if (nullfd != INVALID_HANDLE_VALUE)
-        CloseHandle (nullfd);
-      xfree (cmdline);
-      _assuan_release_context (*ctx); 
-      return ASSUAN_General_Error;
-    }
-  xfree (cmdline);
-  cmdline = NULL;
-  if (nullfd != INVALID_HANDLE_VALUE)
-    {
-      CloseHandle (nullfd);
-      nullfd = INVALID_HANDLE_VALUE;
-    }
-
-  CloseHandle (fd_to_handle (rp[1]));
-  CloseHandle (fd_to_handle (wp[0]));
-
-  /*   _assuan_log_printf ("CreateProcess ready: hProcess=%p hThread=%p" */
-  /*                       " dwProcessID=%d dwThreadId=%d\n", */
-  /*                       pi.hProcess, pi.hThread, */
-  /*                       (int) pi.dwProcessId, (int) pi.dwThreadId); */
-
-  ResumeThread (pi.hThread);
-  CloseHandle (pi.hThread); 
-  (*ctx)->pid = 0;  /* We don't use the PID. */
-  CloseHandle (pi.hProcess); /* We don't need to wait for the process. */
-
-#else /*!HAVE_W32_SYSTEM*/
-  assuan_error_t err;
-  int rp[2];
-  int wp[2];
-  char mypidstr[50];
-
-  if (!ctx || !name || !argv || !argv[0])
-    return ASSUAN_Invalid_Value;
-
-  fix_signals ();
-
-  sprintf (mypidstr, "%lu", (unsigned long)getpid ());
-
-  if (pipe (rp) < 0)
-    return ASSUAN_General_Error;
-
-  if (pipe (wp) < 0)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      return ASSUAN_General_Error;
-    }
-  
-  err = _assuan_new_context (ctx);
-  if (err)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      close (wp[0]);
-      close (wp[1]);
-      return err;
-    }
-  (*ctx)->pipe_mode = 1;
-  (*ctx)->inbound.fd  = rp[0];  /* Our inbound is read end of read pipe. */
-  (*ctx)->outbound.fd = wp[1];  /* Our outbound is write end of write pipe. */
-  (*ctx)->deinit_handler = do_deinit;
-  (*ctx)->finish_handler = do_finish;
-
-  /* FIXME: For GPGME we should better use _gpgme_io_spawn.  The PID
-     stored here is actually soon useless.  */
-  (*ctx)->pid = fork ();
-  if ((*ctx)->pid < 0)
-    {
-      close (rp[0]);
-      close (rp[1]);
-      close (wp[0]);
-      close (wp[1]);
-      _assuan_release_context (*ctx); 
-      return ASSUAN_General_Error;
-    }
-
-  if ((*ctx)->pid == 0)
-    {
-#ifdef _ASSUAN_USE_DOUBLE_FORK      
-      pid_t pid;
-
-      if ((pid = fork ()) == 0)
-#endif
-       {
-          int i, n;
-          char errbuf[512];
-          int *fdp;
-          
-          if (atfork)
-            atfork (atforkvalue, 0);
-
-          /* Dup handles to stdin/stdout. */
-          if (rp[1] != STDOUT_FILENO)
-            {
-              if (dup2 (rp[1], STDOUT_FILENO) == -1)
-                {
-                  _assuan_log_printf ("dup2 failed in child: %s\n",
-                                      strerror (errno));
-                  _exit (4);
-                }
-            }
-          if (wp[0] != STDIN_FILENO)
-            {
-              if (dup2 (wp[0], STDIN_FILENO) == -1)
-                {
-                  _assuan_log_printf ("dup2 failed in child: %s\n",
-                                      strerror (errno));
-                  _exit (4);
-                }
-            }
-
-          /* Dup stderr to /dev/null unless it is in the list of FDs to be
-             passed to the child. */
-          fdp = fd_child_list;
-          if (fdp)
-            {
-              for (; *fdp != -1 && *fdp != STDERR_FILENO; fdp++)
-                ;
-            }
-          if (!fdp || *fdp == -1)
-            {
-              int fd = open ("/dev/null", O_WRONLY);
-              if (fd == -1)
-                {
-                  _assuan_log_printf ("can't open `/dev/null': %s\n",
-                                      strerror (errno));
-                  _exit (4);
-                }
-              if (dup2 (fd, STDERR_FILENO) == -1)
-                {
-                  _assuan_log_printf ("dup2(dev/null, 2) failed: %s\n",
-                                      strerror (errno));
-                  _exit (4);
-                }
-            }
-
-
-          /* Close all files which will not be duped and are not in the
-             fd_child_list. */
-          n = sysconf (_SC_OPEN_MAX);
-          if (n < 0)
-            n = MAX_OPEN_FDS;
-          for (i=0; i < n; i++)
-            {
-              if ( i == STDIN_FILENO || i == STDOUT_FILENO
-                   || i == STDERR_FILENO)
-                continue;
-              fdp = fd_child_list;
-              if (fdp)
-                {
-                  while (*fdp != -1 && *fdp != i)
-                    fdp++;
-                }
-
-              if (!(fdp && *fdp != -1))
-                close(i);
-            }
-          errno = 0;
-
-          /* We store our parents pid in the environment so that the
-             execed assuan server is able to read the actual pid of the
-             client.  The server can't use getppid becuase it might have
-             been double forked before the assuan server has been
-             initialized. */
-          setenv ("_assuan_pipe_connect_pid", mypidstr, 1);
-
-          execv (name, (char *const *) argv); 
-          /* oops - use the pipe to tell the parent about it */
-          snprintf (errbuf, sizeof(errbuf)-1,
-                    "ERR %d can't exec `%s': %.50s\n",
-                    ASSUAN_Problem_Starting_Server, name, strerror (errno));
-          errbuf[sizeof(errbuf)-1] = 0;
-          writen (1, errbuf, strlen (errbuf));
-          _exit (4);
-        }
-#ifdef _ASSUAN_USE_DOUBLE_FORK
-      if (pid == -1)
-       _exit (1);
-      else
-       _exit (0);
-#endif
-    }
-
-#ifdef _ASSUAN_USE_DOUBLE_FORK
-  waitpid ((*ctx)->pid, NULL, 0);
-  (*ctx)->pid = -1;
-#endif
-
-  close (rp[1]);
-  close (wp[0]);
-
-#endif /*!HAVE_W32_SYSTEM*/
-
-  /* initial handshake */
-  {
-    int okay, off;
-
-    err = _assuan_read_from_server (*ctx, &okay, &off);
-    if (err)
-      _assuan_log_printf ("can't connect server: %s\n",
-                          assuan_strerror (err));
-    else if (okay != 1)
-      {
-       _assuan_log_printf ("can't connect server: `%s'\n",
-                            (*ctx)->inbound.line);
-       err = ASSUAN_Connect_Failed;
-      }
-  }
-
-  if (err)
-    {
-      assuan_disconnect (*ctx);
-      *ctx = NULL;
-    }
-
-  return err;
-}
-
-
-/* Connect to a server over a pipe, creating the assuan context and
-   returning it in CTX.  The server filename is NAME, the argument
-   vector in ARGV.  FD_CHILD_LIST is a -1 terminated list of file
-   descriptors not to close in the child.  */
-assuan_error_t
-assuan_pipe_connect (assuan_context_t *ctx, const char *name,
-                    const char *const argv[], int *fd_child_list)
-{
-  return assuan_pipe_connect2 (ctx, name, argv, fd_child_list, NULL, NULL);
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-pipe-server.c b/tags/gpgme-1-1-1/assuan/assuan-pipe-server.c
deleted file mode 100644 (file)
index beff9a3..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/* assuan-pipe-server.c - Assuan server working over a pipe 
- *     Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_W32_SYSTEM
-#include <windows.h>
-#include <fcntl.h>
-#endif
-
-#include "assuan-defs.h"
-
-
-static void
-deinit_pipe_server (ASSUAN_CONTEXT ctx)
-{
-  /* nothing to do for this simple server */
-}
-
-static int
-accept_connection (ASSUAN_CONTEXT ctx)
-{
-  /* This is a NOP for a pipe server */
-  return 0;
-}
-
-static int
-finish_connection (ASSUAN_CONTEXT ctx)
-{
-  /* This is a NOP for a pipe server */
-  return 0;
-}
-
-/* Create a new context.  Note that the handlers are set up for a pipe
-   server/client - this way we don't need extra dummy functions */
-int
-_assuan_new_context (ASSUAN_CONTEXT *r_ctx)
-{
-  static struct assuan_io io = { _assuan_simple_read,
-                                _assuan_simple_write,
-                                0, 0 };
-
-  ASSUAN_CONTEXT ctx;
-  int rc;
-
-  *r_ctx = NULL;
-  ctx = xtrycalloc (1, sizeof *ctx);
-  if (!ctx)
-    return ASSUAN_Out_Of_Core;
-  ctx->input_fd = -1;
-  ctx->output_fd = -1;
-
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-  ctx->io = &io;
-
-  ctx->listen_fd = -1;
-  /* Use the pipe server handler as a default.  */
-  ctx->deinit_handler = deinit_pipe_server;
-  ctx->accept_handler = accept_connection;
-  ctx->finish_handler = finish_connection;
-
-  rc = _assuan_register_std_commands (ctx);
-  if (rc)
-    xfree (ctx);
-  else
-    *r_ctx = ctx;
-  return rc;
-}
-
-
-int
-assuan_init_pipe_server (ASSUAN_CONTEXT *r_ctx, int filedes[2])
-{
-  int rc;
-
-  rc = _assuan_new_context (r_ctx);
-  if (!rc)
-    {
-      ASSUAN_CONTEXT ctx = *r_ctx;
-      const char *s;
-      unsigned long ul;
-
-      ctx->is_server = 1;
-#ifdef HAVE_W32_SYSTEM
-      /* MS Windows has so many different types of handle that one
-         needs to tranlsate them at many place forth and back.  Also
-         make sure that the fiel descriptos are in binary mode.  */
-      setmode (filedes[0], O_BINARY);
-      setmode (filedes[1], O_BINARY);
-      ctx->inbound.fd  = _get_osfhandle (filedes[0]);
-      ctx->outbound.fd = _get_osfhandle (filedes[1]);
-#else
-      ctx->inbound.fd  = filedes[0];
-      ctx->outbound.fd = filedes[1];
-#endif
-      ctx->pipe_mode = 1;
-
-      s = getenv ("_assuan_pipe_connect_pid");
-      if (s && (ul=strtoul (s, NULL, 10)) && ul)
-        ctx->pid = (pid_t)ul;
-      else
-        ctx->pid = (pid_t)-1;
-
-    }
-  return rc;
-}
-
-
-void
-_assuan_release_context (ASSUAN_CONTEXT ctx)
-{
-  if (ctx)
-    {
-      xfree (ctx->hello_line);
-      xfree (ctx->okay_line);
-      xfree (ctx);
-    }
-}
-
-void
-assuan_deinit_server (ASSUAN_CONTEXT ctx)
-{
-  if (ctx)
-    {
-      /* We use this function pointer to avoid linking other server
-         when not needed but still allow for a generic deinit function.  */
-      ctx->deinit_handler (ctx);
-      ctx->deinit_handler = NULL;
-      _assuan_release_context (ctx);
-    }
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-socket-connect.c b/tags/gpgme-1-1-1/assuan/assuan-socket-connect.c
deleted file mode 100644 (file)
index 9937c7a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/* assuan-socket-connect.c - Assuan socket based client
- *     Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/socket.h>
-#include <sys/un.h>
-#else
-#include <windows.h>
-#endif
-
-#include "assuan-defs.h"
-
-/* Hacks for Slowaris.  */
-#ifndef PF_LOCAL
-# ifdef PF_UNIX
-#  define PF_LOCAL PF_UNIX
-# else
-#  define PF_LOCAL AF_UNIX
-# endif
-#endif
-#ifndef AF_LOCAL
-# define AF_LOCAL AF_UNIX
-#endif
-
-#ifndef SUN_LEN
-# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
-                      + strlen ((ptr)->sun_path))
-#endif
-
-static int
-do_finish (ASSUAN_CONTEXT ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      _assuan_close (ctx->inbound.fd);
-    }
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-  return 0;
-}
-
-static void
-do_deinit (ASSUAN_CONTEXT ctx)
-{
-  do_finish (ctx);
-}
-/* Make a connection to the Unix domain socket NAME and return a new
-   Assuan context in CTX.  SERVER_PID is currently not used but may
-   become handy in the future.  */
-assuan_error_t
-assuan_socket_connect (ASSUAN_CONTEXT *r_ctx,
-                       const char *name, pid_t server_pid)
-{
-  static struct assuan_io io = { _assuan_simple_read,
-                                _assuan_simple_write };
-
-  assuan_error_t err;
-  ASSUAN_CONTEXT ctx;
-  int fd;
-  struct sockaddr_un srvr_addr;
-  size_t len;
-  const char *s;
-
-  if (!r_ctx || !name)
-    return ASSUAN_Invalid_Value;
-  *r_ctx = NULL;
-
-  /* We require that the name starts with a slash, so that we can
-     alter reuse this function for other socket types.  To make things
-     easier we allow an optional dirver prefix.  */
-  s = name;
-  if (*s && s[1] == ':')
-    s += 2;
-  if (*s != DIRSEP_C && *s != '/')
-    return ASSUAN_Invalid_Value;
-
-  if (strlen (name)+1 >= sizeof srvr_addr.sun_path)
-    return ASSUAN_Invalid_Value;
-
-  err = _assuan_new_context (&ctx); 
-  if (err)
-      return err;
-  ctx->deinit_handler = do_deinit;
-  ctx->finish_handler = do_finish;
-
-
-  fd = _assuan_sock_new (PF_LOCAL, SOCK_STREAM, 0);
-  if (fd == -1)
-    {
-      _assuan_log_printf ("can't create socket: %s\n", strerror (errno));
-      _assuan_release_context (ctx);
-      return ASSUAN_General_Error;
-    }
-
-  memset (&srvr_addr, 0, sizeof srvr_addr);
-  srvr_addr.sun_family = AF_LOCAL;
-  strncpy (srvr_addr.sun_path, name, sizeof (srvr_addr.sun_path) - 1);
-  srvr_addr.sun_path[sizeof (srvr_addr.sun_path) - 1] = 0;
-  len = SUN_LEN (&srvr_addr);
-
-
-  if (_assuan_sock_connect (fd, (struct sockaddr *) &srvr_addr, len) == -1)
-    {
-      _assuan_log_printf ("can't connect to `%s': %s\n",
-                          name, strerror (errno));
-      _assuan_release_context (ctx);
-      _assuan_close (fd);
-      return ASSUAN_Connect_Failed;
-    }
-
-  ctx->inbound.fd = fd;
-  ctx->outbound.fd = fd;
-  ctx->io = &io;
-
-  /* initial handshake */
-  {
-    int okay, off;
-
-    err = _assuan_read_from_server (ctx, &okay, &off);
-    if (err)
-      _assuan_log_printf ("can't connect to server: %s\n",
-                          assuan_strerror (err));
-    else if (okay != 1)
-      {
-        /*LOG ("can't connect to server: `");*/
-       _assuan_log_sanitized_string (ctx->inbound.line);
-       fprintf (assuan_get_assuan_log_stream (), "'\n");
-       err = ASSUAN_Connect_Failed;
-      }
-  }
-
-  if (err)
-    {
-      assuan_disconnect (ctx); 
-    }
-  else
-    *r_ctx = ctx;
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/assuan/assuan-socket-server.c b/tags/gpgme-1-1-1/assuan/assuan-socket-server.c
deleted file mode 100644 (file)
index 275af42..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* assuan-socket-server.c - Assuan socket based server
- *     Copyright (C) 2002 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/socket.h>
-#include <sys/un.h>
-#else
-#include <windows.h>
-#endif
-
-#include "assuan-defs.h"
-
-static int
-accept_connection_bottom (assuan_context_t ctx)
-{
-  int fd = ctx->connected_fd;
-
-#ifdef HAVE_SO_PEERCRED
-  {
-    /* This overrides any already set PID if the function returns a
-       valid one. */
-    struct ucred cr; 
-    int cl = sizeof cr;
-
-    if ( !getsockopt (fd, SOL_SOCKET, SO_PEERCRED, &cr, &cl)
-         && cr.pid != (pid_t)-1 && cr.pid ) 
-      ctx->pid = cr.pid;
-  }
-#endif
-
-  ctx->inbound.fd = fd;
-  ctx->inbound.eof = 0;
-  ctx->inbound.linelen = 0;
-  ctx->inbound.attic.linelen = 0;
-  ctx->inbound.attic.pending = 0;
-
-  ctx->outbound.fd = fd;
-  ctx->outbound.data.linelen = 0;
-  ctx->outbound.data.error = 0;
-  
-  ctx->confidential = 0;
-
-  return 0;
-}
-
-
-static int
-accept_connection (assuan_context_t ctx)
-{
-  int fd;
-  struct sockaddr_un clnt_addr;
-  size_t len = sizeof clnt_addr;
-
-  fd = accept (ctx->listen_fd, (struct sockaddr*)&clnt_addr, &len );
-  if (fd == -1)
-    {
-      ctx->os_errno = errno;
-      return ASSUAN_Accept_Failed;
-    }
-
-  ctx->connected_fd = fd;
-  return accept_connection_bottom (ctx);
-}
-
-static int
-finish_connection (assuan_context_t ctx)
-{
-  if (ctx->inbound.fd != -1)
-    {
-      _assuan_close (ctx->inbound.fd);
-    }
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-  return 0;
-}
-
-
-static void
-deinit_socket_server (assuan_context_t ctx)
-{
-  finish_connection (ctx);
-}
-
-static struct assuan_io io = { _assuan_simple_read,
-                              _assuan_simple_write };
-
-/* Initialize a server for the socket LISTEN_FD which has already be
-   put into listen mode */
-int
-assuan_init_socket_server (assuan_context_t *r_ctx, int listen_fd)
-{
-  assuan_context_t ctx;
-  int rc;
-
-  *r_ctx = NULL;
-  ctx = xtrycalloc (1, sizeof *ctx);
-  if (!ctx)
-    return ASSUAN_Out_Of_Core;
-  ctx->is_server = 1;
-  ctx->input_fd = -1;
-  ctx->output_fd = -1;
-
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-
-  ctx->listen_fd = listen_fd;
-  ctx->connected_fd = -1;
-  ctx->deinit_handler = deinit_socket_server;
-  ctx->accept_handler = accept_connection;
-  ctx->finish_handler = finish_connection;
-
-  ctx->io = &io;
-
-  rc = _assuan_register_std_commands (ctx);
-  if (rc)
-    xfree (ctx);
-  else
-    *r_ctx = ctx;
-  return rc;
-}
-
-/* Initialize a server using the already accepted socket FD. */
-int
-assuan_init_connected_socket_server (assuan_context_t *r_ctx, int fd)
-{
-  assuan_context_t ctx;
-  int rc;
-
-  *r_ctx = NULL;
-  ctx = xtrycalloc (1, sizeof *ctx);
-  if (!ctx)
-    return ASSUAN_Out_Of_Core;
-  ctx->is_server = 1;
-  ctx->pipe_mode = 1; /* we want a second accept to indicate EOF */
-  ctx->input_fd = -1;
-  ctx->output_fd = -1;
-
-  ctx->inbound.fd = -1;
-  ctx->outbound.fd = -1;
-
-  ctx->io = &io;
-
-  ctx->listen_fd = -1;
-  ctx->connected_fd = fd;
-  ctx->deinit_handler = deinit_socket_server;
-  ctx->accept_handler = accept_connection_bottom;
-  ctx->finish_handler = finish_connection;
-
-  rc = _assuan_register_std_commands (ctx);
-  if (rc)
-    xfree (ctx);
-  else
-    *r_ctx = ctx;
-  return rc;
-}
-
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-socket.c b/tags/gpgme-1-1-1/assuan/assuan-socket.c
deleted file mode 100644 (file)
index 005f730..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* assuan-socket.c
- * Copyright (C) 2004 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG 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.
- *
- * GnuPG 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
- */
-#include <config.h>
-#include <stdio.h>
-#ifdef HAVE_W32_SYSTEM
-#include <windows.h>
-#include <io.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#endif
-#include "assuan-defs.h"
-
-int
-_assuan_close (int fd)
-{
-#ifndef HAVE_W32_SYSTEM
-  return close (fd);
-#else
-  int rc = closesocket (fd);
-  if (rc && WSAGetLastError () == WSAENOTSOCK)
-      rc = close (fd);
-  return rc;
-#endif
-}
-
-
-int
-_assuan_sock_new (int domain, int type, int proto)
-{
-#ifndef HAVE_W32_SYSTEM
-  return socket (domain, type, proto);
-#else
-  if (domain == AF_UNIX || domain == AF_LOCAL)
-    domain = AF_INET;
-  return socket (domain, type, proto);
-#endif
-}
-
-
-int
-_assuan_sock_connect (int sockfd, struct sockaddr * addr, int addrlen)
-{
-#ifndef HAVE_W32_SYSTEM
-  return connect (sockfd, addr, addrlen);
-#else
-  struct sockaddr_in myaddr;
-  struct sockaddr_un * unaddr;
-  FILE * fp;
-  int port = 0;
-  
-  unaddr = (struct sockaddr_un *)addr;
-  fp = fopen (unaddr->sun_path, "rb");
-  if (!fp)
-      return -1;
-  fscanf (fp, "%d", &port);
-  fclose (fp);
-  /* XXX: set errno in this case */
-  if (port < 0 || port > 65535)
-      return -1;
-  
-  myaddr.sin_family = AF_INET;
-  myaddr.sin_port = port; 
-  myaddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
-
-  /* we need this later. */
-  unaddr->sun_family = myaddr.sin_family;
-  unaddr->sun_port = myaddr.sin_port;
-  unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr;
-  
-  return connect (sockfd, (struct sockaddr *)&myaddr, sizeof myaddr);
-#endif
-}
-
-
-int
-_assuan_sock_bind (int sockfd, struct sockaddr * addr, int addrlen)
-{
-#ifndef HAVE_W32_SYSTEM
-  return bind (sockfd, addr, addrlen);
-#else
-  if (addr->sa_family == AF_LOCAL || addr->sa_family == AF_UNIX)
-    {
-      struct sockaddr_in myaddr;
-      struct sockaddr_un * unaddr;
-      FILE * fp;
-      int len = sizeof myaddr;
-      int rc;
-
-      myaddr.sin_port = 0;
-      myaddr.sin_family = AF_INET;
-      myaddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
-
-      rc = bind (sockfd, (struct sockaddr *)&myaddr, len);
-      if (rc)
-        return rc;
-      rc = getsockname (sockfd, (struct sockaddr *)&myaddr, &len);
-      if (rc)
-        return rc;
-      unaddr = (struct sockaddr_un *)addr;
-      fp = fopen (unaddr->sun_path, "wb");
-      if (!fp)
-        return -1;
-      fprintf (fp, "%d", myaddr.sin_port);
-      fclose (fp);
-
-      /* we need this later. */
-      unaddr->sun_family = myaddr.sin_family;
-      unaddr->sun_port = myaddr.sin_port;
-      unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr;
-      
-      return 0;
-    }
-  return bind (sockfd, addr, addrlen);
-#endif
-}
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan-util.c b/tags/gpgme-1-1-1/assuan/assuan-util.c
deleted file mode 100644 (file)
index 2c2f744..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/* assuan-util.c - Utility functions for Assuan 
- * Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "assuan-defs.h"
-
-static void *(*alloc_func)(size_t n) = malloc;
-static void *(*realloc_func)(void *p, size_t n) = realloc;
-static void (*free_func)(void*) = free;
-
-void
-assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
-                          void *(*new_realloc_func)(void *p, size_t n),
-                          void (*new_free_func)(void*) )
-{
-  alloc_func       = new_alloc_func;
-  realloc_func      = new_realloc_func;
-  free_func        = new_free_func;
-}
-
-void *
-_assuan_malloc (size_t n)
-{
-  return alloc_func (n);
-}
-
-void *
-_assuan_realloc (void *a, size_t n)
-{
-  return realloc_func (a, n);
-}
-
-void *
-_assuan_calloc (size_t n, size_t m)
-{
-  void *p;
-  size_t nbytes;
-    
-  nbytes = n * m;
-  if (m && nbytes / m != n) 
-    {
-      errno = ENOMEM;
-      return NULL;
-    }
-
-  p = _assuan_malloc (nbytes);
-  if (p)
-    memset (p, 0, nbytes);
-  return p;
-}
-
-void
-_assuan_free (void *p)
-{
-  if (p)
-    free_func (p);
-}
-
-\f
-/* Store the error in the context so that the error sending function
-  can take out a descriptive text.  Inside the assuan code, use the
-  macro set_error instead of this function. */
-int
-assuan_set_error (assuan_context_t ctx, int err, const char *text)
-{
-  ctx->err_no = err;
-  ctx->err_str = text;
-  return err;
-}
-
-void
-assuan_set_pointer (assuan_context_t ctx, void *pointer)
-{
-  if (ctx)
-    ctx->user_pointer = pointer;
-}
-
-void *
-assuan_get_pointer (assuan_context_t ctx)
-{
-  return ctx? ctx->user_pointer : NULL;
-}
-
-
-void
-assuan_set_log_stream (assuan_context_t ctx, FILE *fp)
-{
-  if (ctx)
-    {
-      if (ctx->log_fp)
-        fflush (ctx->log_fp);
-      ctx->log_fp = fp;
-      _assuan_set_default_log_stream (fp);
-    }
-}
-
-
-void
-assuan_begin_confidential (assuan_context_t ctx)
-{
-  if (ctx)
-    {
-      ctx->confidential = 1;
-    }
-}
-
-void
-assuan_end_confidential (assuan_context_t ctx)
-{
-  if (ctx)
-    {
-      ctx->confidential = 0;
-    }
-}
-
-
-
-/* For context CTX, set the flag FLAG to VALUE.  Values for flags
-   are usually 1 or 0 but certain flags might allow for other values;
-   see the description of the type assuan_flag_t for details. */
-void
-assuan_set_flag (assuan_context_t ctx, assuan_flag_t flag, int value)
-{
-  if (!ctx)
-    return;
-  switch (flag)
-    {
-    case ASSUAN_NO_WAITPID: ctx->flags.no_waitpid = value; break;
-    }
-}
-
-/* Return the VALUE of FLAG in context CTX. */ 
-int
-assuan_get_flag (assuan_context_t ctx, assuan_flag_t flag)
-{
-  if (!ctx)
-    return 0;
-  switch (flag)
-    {
-    case ASSUAN_NO_WAITPID: return ctx->flags.no_waitpid;
-    }
-  return 0;
-}
-
-
-/* Dump a possibly binary string (used for debugging).  Distinguish
-   ascii text from binary and print it accordingly.  */
-void
-_assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length)
-{
-  const unsigned char *s;
-  int n;
-
-  for (n=length,s=buffer; n; n--, s++)
-    if  ((!isascii (*s) || iscntrl (*s) || !isprint (*s)) && !(*s >= 0x80))
-      break;
-
-  s = buffer;
-  if (!n && *s != '[')
-    fwrite (buffer, length, 1, fp);
-  else
-    {
-#ifdef HAVE_FLOCKFILE
-      flockfile (fp);
-#endif
-      putc_unlocked ('[', fp);
-      for (n=0; n < length; n++, s++)
-          fprintf (fp, " %02x", *s);
-      putc_unlocked (' ', fp);
-      putc_unlocked (']', fp);
-#ifdef HAVE_FUNLOCKFILE
-      funlockfile (fp);
-#endif
-    }
-}
-
-/* Log a user supplied string.  Escapes non-printable before
-   printing.  */
-void
-_assuan_log_sanitized_string (const char *string)
-{
-  const unsigned char *s = (const unsigned char *) string;
-  FILE *fp = assuan_get_assuan_log_stream ();
-
-  if (! *s)
-    return;
-
-#ifdef HAVE_FLOCKFILE
-  flockfile (fp);
-#endif
-
-  for (; *s; s++)
-    {
-      int c = 0;
-
-      switch (*s)
-       {
-       case '\r':
-         c = 'r';
-         break;
-
-       case '\n':
-         c = 'n';
-         break;
-
-       case '\f':
-         c = 'f';
-         break;
-
-       case '\v':
-         c = 'v';
-         break;
-
-       case '\b':
-         c = 'b';
-         break;
-
-       default:
-         if ((isascii (*s) && isprint (*s)) || (*s >= 0x80))
-           putc_unlocked (*s, fp);
-         else
-           {
-             putc_unlocked ('\\', fp);
-             fprintf (fp, "x%02x", *s);
-           }
-       }
-
-      if (c)
-       {
-         putc_unlocked ('\\', fp);
-         putc_unlocked (c, fp);
-       }
-    }
-
-#ifdef HAVE_FUNLOCKFILE
-  funlockfile (fp);
-#endif
-}
-
diff --git a/tags/gpgme-1-1-1/assuan/assuan.h b/tags/gpgme-1-1-1/assuan/assuan.h
deleted file mode 100644 (file)
index b2641b2..0000000
+++ /dev/null
@@ -1,485 +0,0 @@
-/* assuan.c - Definitions for the Assuan IPC library
- * Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
- *
- * This file is part of Assuan.
- *
- * Assuan is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * Assuan 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 
- */
-
-#ifndef ASSUAN_H
-#define ASSUAN_H
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-
-/* To use this file with libraries the following macros are often
-   useful:
-
-   #define _ASSUAN_EXT_SYM_PREFIX _foo_
-   
-     This prefixes all external symbols with "_foo_".
-
-   #define _ASSUAN_NO_PTH 
-
-     This avoids inclusion of special GNU Pth hacks.
-
-   #define _ASSUAN_NO_FIXED_SIGNALS 
-
-     This disables changing of certain signal handler; i.e. SIGPIPE.
-
-   #define _ASSUAN_USE_DOUBLE_FORK
-
-     Use a double fork approach when connecting to a server through a pipe.
- */
-/**** Begin GPGME specific modifications. ******/
-#define _ASSUAN_EXT_SYM_PREFIX _gpgme_
-#define _ASSUAN_NO_PTH 
-#define _ASSUAN_NO_FIXED_SIGNALS 
-#define _ASSUAN_USE_DOUBLE_FORK
-
-#ifdef _ASSUAN_IN_GPGME_BUILD_ASSUAN
-int _gpgme_io_read (int fd, void *buffer, size_t count);
-int _gpgme_io_write (int fd, const void *buffer, size_t count);
-ssize_t _gpgme_ath_waitpid (pid_t pid, int *status, int options);
-#ifdef HAVE_W32_SYSTEM
-int _gpgme_ath_accept (int s, void *addr, int *length_ptr);
-#else /*!HAVE_W32_SYSTEM*/
-struct sockaddr;
-struct msghdr;
-ssize_t _gpgme_ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-                           struct timeval *timeout);
-int _gpgme_ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr);
-int _gpgme_ath_connect (int s, struct sockaddr *addr, socklen_t length);
-int _gpgme_ath_sendmsg (int s, const struct msghdr *msg, int flags);
-int _gpgme_ath_recvmsg (int s, struct msghdr *msg, int flags);
-#endif /*!HAVE_W32_SYSTEM*/
-
-#define read          _gpgme_io_read
-#define write         _gpgme_io_write
-#define waitpid              _gpgme_ath_waitpid
-#define select       _gpgme_ath_select
-#define accept        _gpgme_ath_accept
-#define connect       _gpgme_ath_connect
-#define sendmsg              _gpgme_ath_sendmsg
-#define recvmsg       _gpgme_ath_recvmsg
-#endif /*_ASSUAN_IN_GPGME_BUILD_ASSUAN*/
-/**** End GPGME specific modifications. ******/
-
-
-#ifdef _ASSUAN_EXT_SYM_PREFIX
-#define _ASSUAN_PREFIX1(x,y) x ## y
-#define _ASSUAN_PREFIX2(x,y) _ASSUAN_PREFIX1(x,y)
-#define _ASSUAN_PREFIX(x) _ASSUAN_PREFIX2(_ASSUAN_EXT_SYM_PREFIX,x)
-#define assuan_ _ASSUAN_PREFIX(assuan_)
-#define assuan_register_command _ASSUAN_PREFIX(assuan_register_command)
-#define assuan_register_bye_notify _ASSUAN_PREFIX(assuan_register_bye_notify)
-#define assuan_register_reset_notify \
-  _ASSUAN_PREFIX(assuan_register_reset_notify)
-#define assuan_register_cancel_notify \
-  _ASSUAN_PREFIX(assuan_register_cancel_notify)
-#define assuan_register_input_notify \
-  _ASSUAN_PREFIX(assuan_register_input_notify)
-#define assuan_register_output_notify \
-  _ASSUAN_PREFIX(assuan_register_output_notify)
-#define assuan_register_option_handler \
-  _ASSUAN_PREFIX(assuan_register_option_handler)
-#define assuan_process _ASSUAN_PREFIX(assuan_process)
-#define assuan_process_next _ASSUAN_PREFIX(assuan_process_next)
-#define assuan_get_active_fds _ASSUAN_PREFIX(assuan_get_active_fds)
-#define assuan_get_data_fp _ASSUAN_PREFIX(assuan_get_data_fp)
-#define assuan_set_okay_line _ASSUAN_PREFIX(assuan_set_okay_line)
-#define assuan_write_status _ASSUAN_PREFIX(assuan_write_status)
-#define assuan_command_parse_fd _ASSUAN_PREFIX(assuan_command_parse_fd)
-#define assuan_set_hello_line _ASSUAN_PREFIX(assuan_set_hello_line)
-#define assuan_accept _ASSUAN_PREFIX(assuan_accept)
-#define assuan_get_input_fd _ASSUAN_PREFIX(assuan_get_input_fd)
-#define assuan_get_output_fd _ASSUAN_PREFIX(assuan_get_output_fd)
-#define assuan_close_input_fd _ASSUAN_PREFIX(assuan_close_input_fd)
-#define assuan_close_output_fd _ASSUAN_PREFIX(assuan_close_output_fd)
-#define assuan_init_pipe_server _ASSUAN_PREFIX(assuan_init_pipe_server)
-#define assuan_deinit_server _ASSUAN_PREFIX(assuan_deinit_server)
-#define assuan_init_socket_server _ASSUAN_PREFIX(assuan_init_socket_server)
-#define assuan_init_connected_socket_server \
-  _ASSUAN_PREFIX(assuan_init_connected_socket_server)
-#define assuan_pipe_connect _ASSUAN_PREFIX(assuan_pipe_connect)
-#define assuan_socket_connect _ASSUAN_PREFIX(assuan_socket_connect)
-#define assuan_domain_connect _ASSUAN_PREFIX(assuan_domain_connect)
-#define assuan_init_domain_server _ASSUAN_PREFIX(assuan_init_domain_server)
-#define assuan_disconnect _ASSUAN_PREFIX(assuan_disconnect)
-#define assuan_get_pid _ASSUAN_PREFIX(assuan_get_pid)
-#define assuan_transact _ASSUAN_PREFIX(assuan_transact)
-#define assuan_inquire _ASSUAN_PREFIX(assuan_inquire)
-#define assuan_read_line _ASSUAN_PREFIX(assuan_read_line)
-#define assuan_pending_line _ASSUAN_PREFIX(assuan_pending_line)
-#define assuan_write_line _ASSUAN_PREFIX(assuan_write_line)
-#define assuan_send_data _ASSUAN_PREFIX(assuan_send_data)
-#define assuan_sendfd _ASSUAN_PREFIX(assuan_sendfd)
-#define assuan_receivefd _ASSUAN_PREFIX(assuan_receivefd)
-#define assuan_set_malloc_hooks _ASSUAN_PREFIX(assuan_set_malloc_hooks)
-#define assuan_set_log_stream _ASSUAN_PREFIX(assuan_set_log_stream)
-#define assuan_set_error _ASSUAN_PREFIX(assuan_set_error)
-#define assuan_set_pointer _ASSUAN_PREFIX(assuan_set_pointer)
-#define assuan_get_pointer _ASSUAN_PREFIX(assuan_get_pointer)
-#define assuan_begin_confidential _ASSUAN_PREFIX(assuan_begin_confidential)
-#define assuan_end_confidential _ASSUAN_PREFIX(assuan_end_confidential)
-#define assuan_strerror _ASSUAN_PREFIX(assuan_strerror)
-#define assuan_set_assuan_log_stream \
-  _ASSUAN_PREFIX(assuan_set_assuan_log_stream)
-#define assuan_get_assuan_log_stream \
-  _ASSUAN_PREFIX(assuan_get_assuan_log_stream)
-#define assuan_get_assuan_log_prefix \
-  _ASSUAN_PREFIX(assuan_get_assuan_log_prefix)
-#define assuan_set_flag _ASSUAN_PREFIX(assuan_set_flag)
-#define assuan_get_flag _ASSUAN_PREFIX(assuan_get_flag)
-
-/* And now the internal functions, argh...  */
-#define _assuan_read_line _ASSUAN_PREFIX(_assuan_read_line)
-#define _assuan_cookie_write_data _ASSUAN_PREFIX(_assuan_cookie_write_data)
-#define _assuan_cookie_write_flush _ASSUAN_PREFIX(_assuan_cookie_write_flush)
-#define _assuan_read_from_server _ASSUAN_PREFIX(_assuan_read_from_server)
-#define _assuan_domain_init _ASSUAN_PREFIX(_assuan_domain_init)
-#define _assuan_register_std_commands \
-  _ASSUAN_PREFIX(_assuan_register_std_commands)
-#define _assuan_simple_read _ASSUAN_PREFIX(_assuan_simple_read)
-#define _assuan_simple_write _ASSUAN_PREFIX(_assuan_simple_write)
-#define _assuan_simple_read _ASSUAN_PREFIX(_assuan_simple_read)
-#define _assuan_simple_write _ASSUAN_PREFIX(_assuan_simple_write)
-#define _assuan_new_context _ASSUAN_PREFIX(_assuan_new_context)
-#define _assuan_release_context _ASSUAN_PREFIX(_assuan_release_context)
-#define _assuan_malloc _ASSUAN_PREFIX(_assuan_malloc)
-#define _assuan_realloc _ASSUAN_PREFIX(_assuan_realloc)
-#define _assuan_calloc _ASSUAN_PREFIX(_assuan_calloc)
-#define _assuan_free _ASSUAN_PREFIX(_assuan_free)
-#define _assuan_log_print_buffer _ASSUAN_PREFIX(_assuan_log_print_buffer)
-#define _assuan_log_sanitized_string \
-  _ASSUAN_PREFIX(_assuan_log_sanitized_string)
-#define _assuan_log_printf _ASSUAN_PREFIX(_assuan_log_printf)
-#define _assuan_set_default_log_stream \
-  _ASSUAN_PREFIX(_assuan_set_default_log_stream)
-#define _assuan_w32_strerror _ASSUAN_PREFIX(_assuan_w32_strerror)
-#define _assuan_write_line _ASSUAN_PREFIX(_assuan_write_line)
-#define _assuan_close _ASSUAN_PREFIX(_assuan_close)   
-#define _assuan_sock_new _ASSUAN_PREFIX(_assuan_sock_new)  
-#define _assuan_sock_bind _ASSUAN_PREFIX(_assuan_sock_bind)
-#define _assuan_sock_connect _ASSUAN_PREFIX(_assuan_sock_connect)
-
-#endif /*_ASSUAN_EXT_SYM_PREFIX*/
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#if 0
-}
-#endif
-#endif
-
-
-typedef enum
-{
-  ASSUAN_No_Error = 0,
-  ASSUAN_General_Error = 1,
-  ASSUAN_Out_Of_Core = 2,
-  ASSUAN_Invalid_Value = 3,
-  ASSUAN_Timeout = 4,
-  ASSUAN_Read_Error = 5,
-  ASSUAN_Write_Error = 6,
-  ASSUAN_Problem_Starting_Server = 7,
-  ASSUAN_Not_A_Server = 8,
-  ASSUAN_Not_A_Client = 9,
-  ASSUAN_Nested_Commands = 10,
-  ASSUAN_Invalid_Response = 11,
-  ASSUAN_No_Data_Callback = 12,
-  ASSUAN_No_Inquire_Callback = 13,
-  ASSUAN_Connect_Failed = 14,
-  ASSUAN_Accept_Failed = 15,
-
-  /* Error codes above 99 are meant as status codes */
-  ASSUAN_Not_Implemented = 100,
-  ASSUAN_Server_Fault    = 101,
-  ASSUAN_Invalid_Command = 102,
-  ASSUAN_Unknown_Command = 103,
-  ASSUAN_Syntax_Error    = 104,
-  ASSUAN_Parameter_Error = 105,
-  ASSUAN_Parameter_Conflict = 106,
-  ASSUAN_Line_Too_Long = 107,
-  ASSUAN_Line_Not_Terminated = 108,
-  ASSUAN_No_Input = 109,
-  ASSUAN_No_Output = 110,
-  ASSUAN_Canceled = 111,
-  ASSUAN_Unsupported_Algorithm = 112,
-  ASSUAN_Server_Resource_Problem = 113,
-  ASSUAN_Server_IO_Error = 114,
-  ASSUAN_Server_Bug = 115,
-  ASSUAN_No_Data_Available = 116,
-  ASSUAN_Invalid_Data = 117,
-  ASSUAN_Unexpected_Command = 118,
-  ASSUAN_Too_Much_Data = 119,
-  ASSUAN_Inquire_Unknown = 120,
-  ASSUAN_Inquire_Error = 121,
-  ASSUAN_Invalid_Option = 122,
-  ASSUAN_Invalid_Index = 123,
-  ASSUAN_Unexpected_Status = 124,
-  ASSUAN_Unexpected_Data = 125,
-  ASSUAN_Invalid_Status = 126,
-  ASSUAN_Locale_Problem = 127,
-  ASSUAN_Not_Confirmed = 128,
-
-  /* Warning: Don't use the rror codes, below they are deprecated. */
-  ASSUAN_Bad_Certificate = 201,
-  ASSUAN_Bad_Certificate_Chain = 202,
-  ASSUAN_Missing_Certificate = 203,
-  ASSUAN_Bad_Signature = 204,
-  ASSUAN_No_Agent = 205,
-  ASSUAN_Agent_Error = 206,
-  ASSUAN_No_Public_Key = 207,
-  ASSUAN_No_Secret_Key = 208,
-  ASSUAN_Invalid_Name = 209,
-
-  ASSUAN_Cert_Revoked = 301,
-  ASSUAN_No_CRL_For_Cert = 302,
-  ASSUAN_CRL_Too_Old = 303,
-  ASSUAN_Not_Trusted = 304,
-
-  ASSUAN_Card_Error = 401,
-  ASSUAN_Invalid_Card = 402,
-  ASSUAN_No_PKCS15_App = 403,
-  ASSUAN_Card_Not_Present = 404,
-  ASSUAN_Invalid_Id = 405,
-
-  /* Error codes in the range 1000 to 9999 may be used by applications
-     at their own discretion. */
-  ASSUAN_USER_ERROR_FIRST = 1000,
-  ASSUAN_USER_ERROR_LAST = 9999
-
-} assuan_error_t;
-
-typedef assuan_error_t AssuanError; /* Deprecated. */
-
-/* This is a list of pre-registered ASSUAN commands */
-/* NOTE, these command IDs are now deprectated and solely exists for
-   compatibility reasons. */
-typedef enum
-{
-  ASSUAN_CMD_NOP = 0,
-  ASSUAN_CMD_CANCEL,    /* cancel the current request */
-  ASSUAN_CMD_BYE,
-  ASSUAN_CMD_AUTH,
-  ASSUAN_CMD_RESET,
-  ASSUAN_CMD_OPTION,
-  ASSUAN_CMD_DATA,
-  ASSUAN_CMD_END,
-  ASSUAN_CMD_INPUT,
-  ASSUAN_CMD_OUTPUT,
-
-  ASSUAN_CMD_USER = 256  /* Other commands should be used with this offset*/
-} AssuanCommand;
-
-
-/* Definitions of flags for assuan_set_flag(). */
-typedef enum
-  {
-    /* When using a pipe server, by default Assuan will wait for the
-       forked process to die in assuan_disconnect.  In certain cases
-       this is not desirable.  By setting this flag, the waitpid will
-       be skipped and the caller is responsible to cleanup a forked
-       process. */
-    ASSUAN_NO_WAITPID = 1
-  } 
-assuan_flag_t;
-
-#define ASSUAN_LINELENGTH 1002 /* 1000 + [CR,]LF */
-
-struct assuan_context_s;
-typedef struct assuan_context_s *assuan_context_t;
-typedef struct assuan_context_s *ASSUAN_CONTEXT;
-
-/*-- assuan-handler.c --*/
-int assuan_register_command (assuan_context_t ctx,
-                             const char *cmd_string,
-                             int (*handler)(assuan_context_t, char *));
-int assuan_register_bye_notify (assuan_context_t ctx,
-                                void (*fnc)(assuan_context_t));
-int assuan_register_reset_notify (assuan_context_t ctx,
-                                  void (*fnc)(assuan_context_t));
-int assuan_register_cancel_notify (assuan_context_t ctx,
-                                   void (*fnc)(assuan_context_t));
-int assuan_register_input_notify (assuan_context_t ctx,
-                                  void (*fnc)(assuan_context_t, const char *));
-int assuan_register_output_notify (assuan_context_t ctx,
-                                  void (*fnc)(assuan_context_t, const char *));
-
-int assuan_register_option_handler (assuan_context_t ctx,
-                                    int (*fnc)(assuan_context_t,
-                                               const char*, const char*));
-
-int assuan_process (assuan_context_t ctx);
-int assuan_process_next (assuan_context_t ctx);
-int assuan_get_active_fds (assuan_context_t ctx, int what,
-                           int *fdarray, int fdarraysize);
-
-
-FILE *assuan_get_data_fp (assuan_context_t ctx);
-assuan_error_t assuan_set_okay_line (assuan_context_t ctx, const char *line);
-assuan_error_t assuan_write_status (assuan_context_t ctx,
-                                    const char *keyword, const char *text);
-
-/* Negotiate a file descriptor.  If LINE contains "FD=N", returns N
-   assuming a local file descriptor.  If LINE contains "FD" reads a
-   file descriptor via CTX and stores it in *RDF (the CTX must be
-   capable of passing file descriptors).  */
-assuan_error_t assuan_command_parse_fd (assuan_context_t ctx, char *line,
-                                    int *rfd);
-
-/*-- assuan-listen.c --*/
-assuan_error_t assuan_set_hello_line (assuan_context_t ctx, const char *line);
-assuan_error_t assuan_accept (assuan_context_t ctx);
-int assuan_get_input_fd (assuan_context_t ctx);
-int assuan_get_output_fd (assuan_context_t ctx);
-assuan_error_t assuan_close_input_fd (assuan_context_t ctx);
-assuan_error_t assuan_close_output_fd (assuan_context_t ctx);
-
-
-/*-- assuan-pipe-server.c --*/
-int assuan_init_pipe_server (assuan_context_t *r_ctx, int filedes[2]);
-void assuan_deinit_server (assuan_context_t ctx);
-
-/*-- assuan-socket-server.c --*/
-int assuan_init_socket_server (assuan_context_t *r_ctx, int listen_fd);
-int assuan_init_connected_socket_server (assuan_context_t *r_ctx, int fd);
-
-
-/*-- assuan-pipe-connect.c --*/
-assuan_error_t assuan_pipe_connect (assuan_context_t *ctx, const char *name,
-                                   const char *const argv[],
-                                   int *fd_child_list);
-assuan_error_t assuan_pipe_connect2 (assuan_context_t *ctx, const char *name,
-                                     const char *const argv[],
-                                    int *fd_child_list,
-                                     void (*atfork) (void*, int),
-                                     void *atforkvalue);
-/*-- assuan-socket-connect.c --*/
-assuan_error_t assuan_socket_connect (assuan_context_t *ctx, const char *name,
-                                      pid_t server_pid);
-
-/*-- assuan-domain-connect.c --*/
-
-/* Connect to a Unix domain socket server.  RENDEZVOUSFD is
-   bidirectional file descriptor (normally returned via socketpair)
-   which the client can use to rendezvous with the server.  SERVER s
-   the server's pid.  */
-assuan_error_t assuan_domain_connect (assuan_context_t *r_ctx,
-                                  int rendezvousfd,
-                                  pid_t server);
-
-/*-- assuan-domain-server.c --*/
-
-/* RENDEZVOUSFD is a bidirectional file descriptor (normally returned
-   via socketpair) that the domain server can use to rendezvous with
-   the client.  CLIENT is the client's pid.  */
-assuan_error_t assuan_init_domain_server (assuan_context_t *r_ctx,
-                                      int rendezvousfd,
-                                      pid_t client);
-
-
-/*-- assuan-connect.c --*/
-void assuan_disconnect (assuan_context_t ctx);
-pid_t assuan_get_pid (assuan_context_t ctx);
-
-/*-- assuan-client.c --*/
-assuan_error_t 
-assuan_transact (assuan_context_t ctx,
-                 const char *command,
-                 assuan_error_t (*data_cb)(void *, const void *, size_t),
-                 void *data_cb_arg,
-                 assuan_error_t (*inquire_cb)(void*, const char *),
-                 void *inquire_cb_arg,
-                 assuan_error_t (*status_cb)(void*, const char *),
-                 void *status_cb_arg);
-
-
-/*-- assuan-inquire.c --*/
-assuan_error_t assuan_inquire (assuan_context_t ctx, const char *keyword,
-                               unsigned char **r_buffer, size_t *r_length,
-                               size_t maxlen);
-
-/*-- assuan-buffer.c --*/
-assuan_error_t assuan_read_line (assuan_context_t ctx,
-                              char **line, size_t *linelen);
-int assuan_pending_line (assuan_context_t ctx);
-assuan_error_t assuan_write_line (assuan_context_t ctx, const char *line );
-assuan_error_t assuan_send_data (assuan_context_t ctx,
-                              const void *buffer, size_t length);
-
-/* The file descriptor must be pending before assuan_receivefd is
-   call.  This means that assuan_sendfd should be called *before* the
-   trigger is sent (normally via assuan_send_data ("I sent you a
-   descriptor")).  */
-assuan_error_t assuan_sendfd (assuan_context_t ctx, int fd);
-assuan_error_t assuan_receivefd (assuan_context_t ctx, int *fd);
-
-/*-- assuan-util.c --*/
-void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
-                               void *(*new_realloc_func)(void *p, size_t n),
-                               void (*new_free_func)(void*) );
-void assuan_set_log_stream (assuan_context_t ctx, FILE *fp);
-int assuan_set_error (assuan_context_t ctx, int err, const char *text);
-void assuan_set_pointer (assuan_context_t ctx, void *pointer);
-void *assuan_get_pointer (assuan_context_t ctx);
-
-void assuan_begin_confidential (assuan_context_t ctx);
-void assuan_end_confidential (assuan_context_t ctx);
-
-/* For context CTX, set the flag FLAG to VALUE.  Values for flags
-   are usually 1 or 0 but certain flags might allow for other values;
-   see the description of the type assuan_flag_t for details. */
-void assuan_set_flag (assuan_context_t ctx, assuan_flag_t flag, int value);
-
-/* Return the VALUE of FLAG in context CTX. */ 
-int  assuan_get_flag (assuan_context_t ctx, assuan_flag_t flag);
-
-
-/*-- assuan-errors.c (built) --*/
-const char *assuan_strerror (assuan_error_t err);
-
-/*-- assuan-logging.c --*/
-
-/* Set the stream to which assuan should log message not associated
-   with a context.  By default, this is stderr.  The default value
-   will be changed when the first log stream is associated with a
-   context.  Note, that this function is not thread-safe and should
-   in general be used right at startup. */
-extern void assuan_set_assuan_log_stream (FILE *fp);
-
-/* Return the stream which is currently being using for global logging.  */
-extern FILE *assuan_get_assuan_log_stream (void);
-
-/* Set the prefix to be used at the start of a line emitted by assuan
-   on the log stream.  The default is the empty string.  Note, that
-   this function is not thread-safe and should in general be used
-   right at startup. */
-void assuan_set_assuan_log_prefix (const char *text);
-
-/* Return a prefix to be used at the start of a line emitted by assuan
-   on the log stream.  The default implementation returns the empty
-   string, i.e. ""  */
-const char *assuan_get_assuan_log_prefix (void);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* ASSUAN_H */
diff --git a/tags/gpgme-1-1-1/assuan/funopen.c b/tags/gpgme-1-1-1/assuan/funopen.c
deleted file mode 100644 (file)
index 47f3370..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* funopen.c - Replacement for funopen.
- * Copyright (C) 2003 Free Software Foundation, Inc.
- *
- * This file is part of GnuPG.
- *
- * GnuPG 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.
- *
- * GnuPG 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
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-
-/* Replacement for the *BSD function:
-
-  FILE *funopen (void *cookie,
-                 int (*readfn)(void *, char *, int),
-                 int (*writefn)(void *, const char *, int),
-                 fpos_t (*seekfn)(void *, fpos_t, int),
-                 int (*closefn)(void *));
-
-  The functions to provide my either be NULL if not required or
-  similar to the unistd function with the exception of using the
-  cookie instead of the fiel descripor.
-*/
-
-
-#ifdef HAVE_FOPENCOOKIE
-FILE *
-_assuan_funopen(void *cookie,
-                cookie_read_function_t *readfn,
-                cookie_write_function_t *writefn,
-                cookie_seek_function_t *seekfn,
-                cookie_close_function_t *closefn)
-{
-  cookie_io_functions_t io = { NULL };
-
-  io.read = readfn;
-  io.write = writefn;
-  io.seek = seekfn;
-  io.close = closefn;
-
-   return fopencookie (cookie,
-                     readfn ? ( writefn ? "rw" : "r" )
-                     : ( writefn ? "w" : ""), io);
-}
-#else
-#error No known way to implement funopen.
-#endif
diff --git a/tags/gpgme-1-1-1/assuan/mkerrors b/tags/gpgme-1-1-1/assuan/mkerrors
deleted file mode 100755 (executable)
index e00011b..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/sh
-# mkerrors - Extract error strings from assuan.h
-#            and create C source for assuan_strerror
-#      Copyright (C) 2001, 2002 Free Software Foundation, Inc.
-#
-# This file is part of Assuan.
-#
-# Assuan is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# Assuan 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser 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 
-
-cat <<EOF
-/* Generated automatically by mkerrors */
-/* Do not edit! */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "assuan.h"
-
-/**
- * assuan_strerror:
- * @err:  Error code 
- * 
- * This function returns a textual representaion of the given
- * errorcode. If this is an unknown value, a string with the value
- * is returned (Beware: it is hold in a static buffer).
- * 
- * Return value: String with the error description.
- **/
-const char *
-assuan_strerror (AssuanError err)
-{
-  const char *s;
-  static char buf[50];
-
-  switch (err)
-    {
-EOF
-
-awk '
-/ASSUAN_No_Error/    { okay=1 }
-!okay              {next}
-/}/                { exit 0 }
-/ASSUAN_[A-Za-z_]*/ { print_code($1) }
-
-
-function print_code( s )
-{
-printf "    case %s: s=\"", s ;
-gsub(/_/, " ", s );
-printf "%s\"; break;\n", tolower(substr(s,8));
-}
-'
-
-cat <<EOF
-    default: 
-      {
-        unsigned int source, code;
-
-        source = ((err >> 24) & 0xff);
-        code = (err & 0x00ffffff);
-        if (source) /* Assume this is an libgpg-error. */
-          sprintf (buf, "ec=%u.%u", source, code ); 
-        else
-          sprintf (buf, "ec=%d", err ); 
-        s=buf; break;
-      }
-    }
-
-  return s;
-}
-
-EOF
\ No newline at end of file
diff --git a/tags/gpgme-1-1-1/autogen.sh b/tags/gpgme-1-1-1/autogen.sh
deleted file mode 100755 (executable)
index bad5cab..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#! /bin/sh
-# Run this to generate all the initial makefiles, etc. 
-#
-# Copyright (C) 2003 g10 Code GmbH
-#
-# This file is free software; as a special exception the author 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.
-
-configure_ac="configure.ac"
-
-cvtver () {
-  awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}'
-}
-
-check_version () {
-    if [ `("$1" --version || echo "0") | cvtver` -ge "$2" ]; then
-       return 0
-    fi
-    echo "**Error**: "\`$1\'" not installed or too old." >&2
-    echo '           Version '$3' or newer is required.' >&2
-    [ -n "$4" ] && echo '           Note that this is part of '\`$4\''.' >&2
-    DIE="yes"
-    return 1
-}
-
-
-DIE=no
-
-# Used to cross-compile for Windows.
-if test "$1" = "--build-w32"; then
-    tmp=`dirname $0`
-    tsdir=`cd "$tmp"; pwd`
-    shift
-    if [ ! -f $tsdir/config.guess ]; then
-        echo "$tsdir/config.guess not found" >&2
-        exit 1
-    fi
-    build=`$tsdir/config.guess`
-
-    [ -z "$w32root" ] && w32root="$HOME/w32root"
-    echo "Using $w32root as standard install directory" >&2
-    
-    # See whether we have the Debian cross compiler package or the
-    # old mingw32/cpd system
-    if i586-mingw32msvc-gcc --version >/dev/null 2>&1 ; then
-        host=i586-mingw32msvc
-        crossbindir=/usr/$host/bin
-    else
-       host=i386--mingw32
-       if ! mingw32 --version >/dev/null; then
-          echo "We need at least version 0.3 of MingW32/CPD" >&2
-          exit 1
-       fi
-       crossbindir=`mingw32 --install-dir`/bin
-       # Old autoconf version required us to setup the environment
-       # with the proper tool names.
-       CC=`mingw32 --get-path gcc`
-       CPP=`mingw32 --get-path cpp`
-       AR=`mingw32 --get-path ar`
-       RANLIB=`mingw32 --get-path ranlib`
-       export CC CPP AR RANLIB 
-    fi
-   
-    if [ -f "$tsdir/config.log" ]; then
-        if ! head $tsdir/config.log | grep "$host" >/dev/null; then
-            echo "Pease run a 'make distclean' first" >&2
-            exit 1
-        fi
-    fi
-
-    ./configure --enable-maintainer-mode  --prefix=${w32root}  \
-            --host=i586-mingw32msvc --build=${build} \
-            --with-gpg-error-prefix=${w32root} --without-gpgsm \
-            --enable-shared --enable-static --enable-w32-glib \
-            PKG_CONFIG_LIBDIR="$w32root/lib/pkgconfig"
-
-    exit $?
-fi
-
-
-
-
-
-# Grep the required versions from configure.ac
-autoconf_vers=`sed -n '/^AC_PREREQ(/ { 
-s/^.*(\(.*\))/\1/p
-q
-}' ${configure_ac}`
-autoconf_vers_num=`echo "$autoconf_vers" | cvtver`
-
-automake_vers=`sed -n '/^min_automake_version=/ { 
-s/^.*="\(.*\)"/\1/p
-q
-}' ${configure_ac}`
-automake_vers_num=`echo "$automake_vers" | cvtver`
-
-#gettext_vers=`sed -n '/^AM_GNU_GETTEXT_VERSION(/ { 
-#s/^.*(\(.*\))/\1/p
-#q
-#}' ${configure_ac}`
-#gettext_vers_num=`echo "$gettext_vers" | cvtver`
-
-
-if [ -z "$autoconf_vers" -o -z "$automake_vers" ]
-then
-  echo "**Error**: version information not found in "\`${configure_ac}\'"." >&2
-  exit 1
-fi
-
-# Allow to override the default tool names
-AUTOCONF=${AUTOCONF_PREFIX}${AUTOCONF:-autoconf}${AUTOCONF_SUFFIX}
-AUTOHEADER=${AUTOCONF_PREFIX}${AUTOHEADER:-autoheader}${AUTOCONF_SUFFIX}
-
-AUTOMAKE=${AUTOMAKE_PREFIX}${AUTOMAKE:-automake}${AUTOMAKE_SUFFIX}
-ACLOCAL=${AUTOMAKE_PREFIX}${ACLOCAL:-aclocal}${AUTOMAKE_SUFFIX}
-
-#GETTEXT=${GETTEXT_PREFIX}${GETTEXT:-gettext}${GETTEXT_SUFFIX}
-#MSGMERGE=${GETTEXT_PREFIX}${MSGMERGE:-msgmerge}${GETTEXT_SUFFIX}
-
-DIE=no
-
-
-if check_version $AUTOCONF $autoconf_vers_num $autoconf_vers ; then
-    check_version $AUTOHEADER $autoconf_vers_num $autoconf_vers autoconf
-fi
-if check_version $AUTOMAKE $automake_vers_num $automake_vers; then
-  check_version $ACLOCAL $automake_vers_num $autoconf_vers automake
-fi
-#if check_version $GETTEXT $gettext_vers_num $gettext_vers; then
-#  check_version $MSGMERGE $gettext_vers_num $gettext_vers gettext
-#fi
-
-if test "$DIE" = "yes"; then
-    cat <<EOF
-
-Note that you may use alternative versions of the tools by setting 
-the corresponding environment variables; see README.CVS for details.
-                   
-EOF
-    exit 1
-fi
-
-echo "Running aclocal -I m4 ${ACLOCAL_FLAGS:+$ACLOCAL_FLAGS }..."
-$ACLOCAL -I m4 $ACLOCAL_FLAGS
-echo "Running autoheader..."
-$AUTOHEADER
-echo "Running automake --gnu ..."
-$AUTOMAKE --gnu;
-echo "Running autoconf..."
-$AUTOCONF
-
-echo "You may now run \"./configure --enable-maintainer-mode && make\"."
diff --git a/tags/gpgme-1-1-1/compile b/tags/gpgme-1-1-1/compile
deleted file mode 100755 (executable)
index 9bb997a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#! /bin/sh
-
-# Wrapper for compilers which do not understand `-c -o'.
-
-# Copyright 1999, 2000 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, 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.
-
-# Usage:
-# compile PROGRAM [ARGS]...
-# `-o FOO.o' is removed from the args passed to the actual compile.
-
-prog=$1
-shift
-
-ofile=
-cfile=
-args=
-while test $# -gt 0; do
-   case "$1" in
-    -o)
-       # configure might choose to run compile as `compile cc -o foo foo.c'.
-       # So we do something ugly here.
-       ofile=$2
-       shift
-       case "$ofile" in
-       *.o | *.obj)
-          ;;
-       *)
-          args="$args -o $ofile"
-          ofile=
-          ;;
-       esac
-       ;;
-    *.c)
-       cfile=$1
-       args="$args $1"
-       ;;
-    *)
-       args="$args $1"
-       ;;
-   esac
-   shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-   # If no `-o' option was seen then we might have been invoked from a
-   # pattern rule where we don't need one.  That is ok -- this is a
-   # normal compilation that the losing compiler can handle.  If no
-   # `.c' file was seen then we are probably linking.  That is also
-   # ok.
-   exec "$prog" $args
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
-while true; do
-   if mkdir $lockdir > /dev/null 2>&1; then
-      break
-   fi
-   sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir $lockdir; exit 1" 1 2 15
-
-# Run the compile.
-"$prog" $args
-status=$?
-
-if test -f "$cofile"; then
-   mv "$cofile" "$ofile"
-fi
-
-rmdir $lockdir
-exit $status
diff --git a/tags/gpgme-1-1-1/complus/ChangeLog b/tags/gpgme-1-1-1/complus/ChangeLog
deleted file mode 100644 (file)
index fe34a66..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-2001-07-30  Werner Koch  <wk@gnupg.org>
-
-       Encryption basically works. 
-       
-
- Copyright 2001 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
-       
\ No newline at end of file
diff --git a/tags/gpgme-1-1-1/complus/Makefile.am b/tags/gpgme-1-1-1/complus/Makefile.am
deleted file mode 100644 (file)
index 1965b9f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME 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.
-# 
-# GPGME 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
-
-## Process this file with automake to produce Makefile.in
-
-# Because there is no free IDL compiler for OLE, we have to distribute
-# a binary typelibrary.  To generate a new one, copy the idl file to a
-# system with an install MIDL and run the command
-#   midl /nocpp gpgcom.idl
-# Sorry, there is no other way yet.  
-EXTRA_DIST = gpgcom.idl gpgcom.tlb gpgcom.rc vbtest.html vbtest.vbs README
-
-# No need to install this because we are cross-compiling anyway.
-noinst_PROGRAMS = gpgcom tgpgcom 
-
-INCLUDES = -I$(top_srcdir)/jnlib
-LDADD = ../gpgme/libgpgme.la -L ../jnlib -ljnlib -lole32 -loleaut32 
-gpgcom_LDADD = gpgcom_res.o $(LDADD)
-
-gpgcom_SOURCES = gpgcom.c main.h \
-               debug.c utf8.c \
-               igpgme.h igpgme.c
-
-tgpgcom_SOURCES = tgpgcom.c\
-               debug.c \
-               igpgme.h 
-
-#regtlb_SOURCES = regtlb.c 
-#guidgen_SOURCES = guidgen.c 
-
-gpgcom_res.o: gpgcom.rc
-       mingw32 windres $<  gpgcom_res.o
-
diff --git a/tags/gpgme-1-1-1/complus/README b/tags/gpgme-1-1-1/complus/README
deleted file mode 100644 (file)
index 7dc3bb1..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-          How to install and use the Gpgcom Windows Component
-          ===================================================
-                              2001-07-31
-
-
-Installation should be pretty easy:
------------------------------------
-
-  * Get and install the latest GnuPG binary for windows
-    (ftp://ftp.gnupg.org/gcrypt/binary/gnupg-w32-1.0.6.zip)
-  
-  * Check that you have an untampered version of this package by
-    comparing an MD5SUM against the one on the webpage or by checking
-    the signature of the package using "gpg --verify".  See the
-    webpacge for details.
-
-  * Because you are reading this file, you probably have already
-    unpacked it distribution using a unzip utility :-). You should
-    find these files:
-
-       README      - This file
-       gpgcom.exe  - The Gpgcom server
-       vbtest.html - A Test webpage 
-       vbtest.vbs  - A VB script to be used with the cscript utility
-
-   * If you are updating Gpgcom, run the old Gpgcom like this:
-
-       c:\gnupg\gpgcom -UnregServer
-
-     (Replace c:\gnupg with the actually used path)
-
-   * Copy the file gpgcom.exe to a some location. C:\gnupg seems to be
-     a good choice. 
-
-   * Register the component using this command:
-
-      c:\gnupg\gpgcom -RegServer
-
-   * Ready
-
-Testing the installation:
--------------------------
-
-  * Make sure that you have a working GnuPG (gpg.exe) and that at least
-    one key is installed.
-
-  * Edit the vbtest.vbs script and replace "alice" in the line
-
-      gpg.AddRecipient "alice"
-
-   with a keyID or user name you have in your key ring.
-
-  * Run the test script:
-
-      cscript vbtest.vbs
-
-    and you should see a valid MIME message with the encrypted text.
-
-    
-Using Gpgcom
------------- 
-
-Gpgcom currently support only encryption but will be extended to the
-full range of operations GnuPG provides. The 2 examples should goive
-yopu a hint on how to use it.  We suggest that you always set armor to
-true, so that the returned text is a string.  If you don't use armor,
-the "ciphertext" property will return an array with the binary
-message.
-
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/debug.c b/tags/gpgme-1-1-1/complus/debug.c
deleted file mode 100644 (file)
index d7cb0a0..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* debug.c - COM+ debug helpers
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <windows.h>
-#include <ole2.h>
-
-
-const char *
-debugstr_guid (const GUID *id)
-{
-    static char str[100];
-
-    if (!id)
-        return "(null)";
-    sprintf( str, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
-             id->Data1, id->Data2, id->Data3,
-             id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
-             id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
-    return str;
-}
-
diff --git a/tags/gpgme-1-1-1/complus/example.c b/tags/gpgme-1-1-1/complus/example.c
deleted file mode 100644 (file)
index a7d838d..0000000
+++ /dev/null
@@ -1,598 +0,0 @@
-/*                                
- * Copyright 1999 Marcus Meissner
- */
-#include <string.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include "winbase.h"
-#include "winnls.h"
-#include "mmsystem.h"
-#include "winerror.h"
-#include "debugtools.h"
-
-#include "initguid.h"
-#include "vfw.h"
-
-DEFAULT_DEBUG_CHANNEL(avifile);
-
-static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile* iface,REFIID refiid,LPVOID *obj);
-static ULONG WINAPI IAVIFile_fnAddRef(IAVIFile* iface);
-static ULONG WINAPI IAVIFile_fnRelease(IAVIFile* iface);
-static HRESULT WINAPI IAVIFile_fnInfo(IAVIFile*iface,AVIFILEINFOW*afi,LONG size);
-static HRESULT WINAPI IAVIFile_fnGetStream(IAVIFile*iface,PAVISTREAM*avis,DWORD fccType,LONG lParam);
-static HRESULT WINAPI IAVIFile_fnCreateStream(IAVIFile*iface,PAVISTREAM*avis,AVISTREAMINFOW*asi);
-static HRESULT WINAPI IAVIFile_fnWriteData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG size);
-static HRESULT WINAPI IAVIFile_fnReadData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG *size);
-static HRESULT WINAPI IAVIFile_fnEndRecord(IAVIFile*iface);
-static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile*iface,DWORD fccType,LONG lParam);
-
-struct ICOM_VTABLE(IAVIFile) iavift = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-    IAVIFile_fnQueryInterface,
-    IAVIFile_fnAddRef,
-    IAVIFile_fnRelease,
-    IAVIFile_fnInfo,
-    IAVIFile_fnGetStream,
-    IAVIFile_fnCreateStream,
-    IAVIFile_fnWriteData,
-    IAVIFile_fnReadData,
-    IAVIFile_fnEndRecord,
-    IAVIFile_fnDeleteStream
-};
-
-static HRESULT WINAPI IAVIStream_fnQueryInterface(IAVIStream*iface,REFIID refiid,LPVOID *obj);
-static ULONG WINAPI IAVIStream_fnAddRef(IAVIStream*iface);
-static ULONG WINAPI IAVIStream_fnRelease(IAVIStream* iface);
-static HRESULT WINAPI IAVIStream_fnCreate(IAVIStream*iface,LPARAM lParam1,LPARAM lParam2);
-static HRESULT WINAPI IAVIStream_fnInfo(IAVIStream*iface,AVISTREAMINFOW *psi,LONG size);
-static LONG WINAPI IAVIStream_fnFindSample(IAVIStream*iface,LONG pos,LONG flags);
-static HRESULT WINAPI IAVIStream_fnReadFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG *formatsize);
-static HRESULT WINAPI IAVIStream_fnSetFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG formatsize);
-static HRESULT WINAPI IAVIStream_fnRead(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread);
-static HRESULT WINAPI IAVIStream_fnWrite(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten);
-static HRESULT WINAPI IAVIStream_fnDelete(IAVIStream*iface,LONG start,LONG samples);
-static HRESULT WINAPI IAVIStream_fnReadData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG *lpread);
-static HRESULT WINAPI IAVIStream_fnWriteData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG size);
-static HRESULT WINAPI IAVIStream_fnSetInfo(IAVIStream*iface,AVISTREAMINFOW*info,LONG infolen);
-
-struct ICOM_VTABLE(IAVIStream) iavist = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-    IAVIStream_fnQueryInterface,
-    IAVIStream_fnAddRef,
-    IAVIStream_fnRelease,
-    IAVIStream_fnCreate,
-    IAVIStream_fnInfo,
-    IAVIStream_fnFindSample,
-    IAVIStream_fnReadFormat,
-    IAVIStream_fnSetFormat,
-    IAVIStream_fnRead,
-    IAVIStream_fnWrite,
-    IAVIStream_fnDelete,
-    IAVIStream_fnReadData,
-    IAVIStream_fnWriteData,
-    IAVIStream_fnSetInfo
-};
-
-typedef struct IAVIStreamImpl {
-       /* IUnknown stuff */
-       ICOM_VFIELD(IAVIStream);
-       DWORD           ref;
-       /* IAVIStream stuff */
-       LPVOID          lpInputFormat;
-       DWORD           inputformatsize;
-       BOOL            iscompressing;
-       DWORD           curframe;
-
-           /* Compressor stuff */
-           HIC hic;
-           LPVOID      lpCompressFormat;
-           ICINFO      icinfo;
-           DWORD       compbufsize;
-           LPVOID      compbuffer;
-
-           DWORD       decompbufsize;
-           LPVOID      decompbuffer;
-           LPVOID      decompformat;
-           AVICOMPRESSOPTIONS  aco;
-
-           LPVOID      lpPrev; /* pointer to decompressed frame later */
-           LPVOID      lpPrevFormat; /* pointer to decompressed info later */
-} IAVIStreamImpl;
-
-/***********************************************************************
- *             AVIFileInit
- */
-void WINAPI
-AVIFileInit(void) {
-       FIXME("(),stub!\n");
-}
-
-typedef struct IAVIFileImpl {
-       /* IUnknown stuff */
-       ICOM_VFIELD(IAVIFile);
-       DWORD                           ref;
-       /* IAVIFile stuff... */
-} IAVIFileImpl;
-
-static HRESULT WINAPI IAVIFile_fnQueryInterface(IAVIFile* iface,REFIID refiid,LPVOID *obj) {
-       ICOM_THIS(IAVIFileImpl,iface);
-
-       TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
-       if (    !memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
-               !memcmp(&IID_IAVIFile,refiid,sizeof(IID_IAVIFile))
-       ) {
-               *obj = iface;
-               return S_OK;
-       }
-       return OLE_E_ENUM_NOMORE;
-}
-
-static ULONG WINAPI IAVIFile_fnAddRef(IAVIFile* iface) {
-       ICOM_THIS(IAVIFileImpl,iface);
-       
-       FIXME("(%p)->AddRef()\n",iface);
-       return ++(This->ref);
-}
-
-static ULONG WINAPI IAVIFile_fnRelease(IAVIFile* iface) {
-       ICOM_THIS(IAVIFileImpl,iface);
-       
-       FIXME("(%p)->Release()\n",iface);
-       if (!--(This->ref)) {
-               HeapFree(GetProcessHeap(),0,iface);
-               return 0;
-       }
-       return This->ref;
-}
-
-static HRESULT WINAPI IAVIFile_fnInfo(IAVIFile*iface,AVIFILEINFOW*afi,LONG size) {
-       FIXME("(%p)->Info(%p,%ld)\n",iface,afi,size);
-
-       /* FIXME: fill out struct? */
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIFile_fnGetStream(IAVIFile*iface,PAVISTREAM*avis,DWORD fccType,LONG lParam) {
-       FIXME("(%p)->GetStream(%p,0x%08lx,%ld)\n",iface,avis,fccType,lParam);
-       /* FIXME: create interface etc. */
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIFile_fnCreateStream(IAVIFile*iface,PAVISTREAM*avis,AVISTREAMINFOW*asi) {
-       ICOM_THIS(IAVIStreamImpl,iface);
-       char            fcc[5];
-       IAVIStreamImpl  *istream;
-
-       FIXME("(%p,%p,%p)\n",This,avis,asi);
-       istream = (IAVIStreamImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IAVIStreamImpl));
-       istream->ref = 1;
-       ICOM_VTBL(istream) = &iavist;
-       fcc[4]='\0';
-       memcpy(fcc,(char*)&(asi->fccType),4);
-       FIXME("\tfccType '%s'\n",fcc);
-       memcpy(fcc,(char*)&(asi->fccHandler),4);
-       FIXME("\tfccHandler '%s'\n",fcc);
-       FIXME("\tdwFlags 0x%08lx\n",asi->dwFlags);
-       FIXME("\tdwCaps 0x%08lx\n",asi->dwCaps);
-       FIXME("\tname '%s'\n",debugstr_w(asi->szName));
-
-       istream->curframe = 0;
-       *avis = (PAVISTREAM)istream;
-       return S_OK;
-}
-
-static HRESULT WINAPI IAVIFile_fnWriteData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG size) {
-       FIXME("(%p)->WriteData(0x%08lx,%p,%ld)\n",iface,ckid,lpData,size);
-       /* FIXME: write data to file */
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIFile_fnReadData(IAVIFile*iface,DWORD ckid,LPVOID lpData,LONG *size) {
-       FIXME("(%p)->ReadData(0x%08lx,%p,%p)\n",iface,ckid,lpData,size);
-       /* FIXME: read at most size bytes from file */
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIFile_fnEndRecord(IAVIFile*iface) {
-       FIXME("(%p)->EndRecord()\n",iface);
-       /* FIXME: end record? */
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIFile_fnDeleteStream(IAVIFile*iface,DWORD fccType,LONG lParam) {
-       FIXME("(%p)->DeleteStream(0x%08lx,%ld)\n",iface,fccType,lParam);
-       /* FIXME: delete stream? */
-       return E_FAIL;
-}
-
-/***********************************************************************
- *             AVIFileOpenA
- */
-HRESULT WINAPI AVIFileOpenA(
-       PAVIFILE * ppfile,LPCSTR szFile,UINT uMode,LPCLSID lpHandler
-) {
-       IAVIFileImpl    *iavi;
-
-       FIXME("(%p,%s,0x%08lx,%s),stub!\n",ppfile,szFile,(DWORD)uMode,debugstr_guid(lpHandler));
-       iavi = (IAVIFileImpl*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IAVIFileImpl));
-       iavi->ref = 1;
-       ICOM_VTBL(iavi) = &iavift;
-       *ppfile = (LPVOID)iavi;
-       return S_OK;
-}
-
-static HRESULT WINAPI IAVIStream_fnQueryInterface(IAVIStream*iface,REFIID refiid,LPVOID *obj) {
-       ICOM_THIS(IAVIStreamImpl,iface);
-
-       TRACE("(%p)->QueryInterface(%s,%p)\n",This,debugstr_guid(refiid),obj);
-       if (    !memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
-               !memcmp(&IID_IAVIStream,refiid,sizeof(IID_IAVIStream))
-       ) {
-               *obj = This;
-               return S_OK;
-       }
-       /* can return IGetFrame interface too */
-       return OLE_E_ENUM_NOMORE;
-}
-
-static ULONG WINAPI IAVIStream_fnAddRef(IAVIStream*iface) {
-       ICOM_THIS(IAVIStreamImpl,iface);
-       
-       FIXME("(%p)->AddRef()\n",iface);
-       return ++(This->ref);
-}
-
-static ULONG WINAPI IAVIStream_fnRelease(IAVIStream* iface) {
-       ICOM_THIS(IAVIStreamImpl,iface);
-       
-       FIXME("(%p)->Release()\n",iface);
-       if (!--(This->ref)) {
-               HeapFree(GetProcessHeap(),0,This);
-               return 0;
-       }
-       return This->ref;
-}
-
-static HRESULT WINAPI IAVIStream_fnCreate(IAVIStream*iface,LPARAM lParam1,LPARAM lParam2) {
-       FIXME("(%p)->Create(0x%08lx,0x%08lx)\n",iface,lParam1,lParam2);
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIStream_fnInfo(IAVIStream*iface,AVISTREAMINFOW *psi,LONG size) {
-       FIXME("(%p)->Info(%p,%ld)\n",iface,psi,size);
-       return E_FAIL;
-}
-
-static LONG WINAPI IAVIStream_fnFindSample(IAVIStream*iface,LONG pos,LONG flags) {
-       FIXME("(%p)->FindSample(%ld,0x%08lx)\n",iface,pos,flags);
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIStream_fnReadFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG *formatsize) {
-       FIXME("(%p)->ReadFormat(%ld,%p,%p)\n",iface,pos,format,formatsize);
-       return E_FAIL;
-}
-
-/***********************************************************************
- *             IAVIStream::SetFormat
- */
-static HRESULT WINAPI IAVIStream_fnSetFormat(IAVIStream*iface,LONG pos,LPVOID format,LONG formatsize) {
-       IAVIStreamImpl  *as = (IAVIStreamImpl*)iface;
-
-       FIXME("(%p)->SetFormat(%ld,%p,%ld)\n",iface,pos,format,formatsize);
-       if (as->lpInputFormat) HeapFree(GetProcessHeap(),0,as->lpInputFormat);
-       as->inputformatsize = formatsize;
-       as->lpInputFormat = HeapAlloc(GetProcessHeap(),0,formatsize);
-       memcpy(as->lpInputFormat,format,formatsize);
-       if (as->iscompressing) {
-               int     xsize; 
-               /* Set up the Compressor part */
-               xsize = ICCompressGetFormatSize(as->hic,as->lpInputFormat);
-               as->lpCompressFormat = HeapAlloc(GetProcessHeap(),0,xsize);
-               ICCompressGetFormat(as->hic,as->lpInputFormat,as->lpCompressFormat);
-               ICCompressBegin(as->hic,as->lpInputFormat,as->lpCompressFormat);
-               as->compbufsize = ICCompressGetSize(as->hic,as->lpInputFormat,as->lpCompressFormat);
-               as->compbuffer = HeapAlloc(GetProcessHeap(),0,as->compbufsize);
-
-               /* Set up the Decompressor part (for prev frames?) */
-               xsize=ICDecompressGetFormatSize(as->hic,as->lpCompressFormat);
-               as->decompformat = HeapAlloc(GetProcessHeap(),0,xsize);
-               ICDecompressGetFormat(as->hic,as->lpCompressFormat,as->decompformat);
-               as->decompbufsize=((LPBITMAPINFOHEADER)as->decompbuffer)->biSizeImage;
-               as->decompbuffer = HeapReAlloc(GetProcessHeap(),0,as->decompbuffer,as->decompbufsize);
-               memset(as->decompbuffer,0xff,as->decompbufsize);
-               assert(HeapValidate(GetProcessHeap(),0,NULL));
-
-               ICDecompressGetFormat(as->hic,as->lpCompressFormat,as->decompformat);
-               ICDecompressBegin(as->hic,as->lpCompressFormat,as->decompformat);
-               as->lpPrev = as->lpPrevFormat = NULL;
-       }
-       return S_OK;
-}
-
-static HRESULT WINAPI IAVIStream_fnRead(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread) {
-       FIXME("(%p)->Read(%ld,%ld,%p,%ld,%p,%p)\n",iface,start,samples,buffer,buffersize,bytesread,samplesread);
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIStream_fnWrite(IAVIStream*iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten) {
-       IAVIStreamImpl  *as = (IAVIStreamImpl*)iface;
-       DWORD           ckid,xflags;
-
-       FIXME("(%p)->Write(%ld,%ld,%p,%ld,0x%08lx,%p,%p)\n",iface,start,samples,buffer,buffersize,flags,sampwritten,byteswritten);
-
-       ICCompress(
-               as->hic,flags,
-               as->lpCompressFormat,
-               as->compbuffer,
-               as->lpInputFormat,buffer,
-               &ckid,&xflags,
-               as->curframe,0xffffff/*framesize*/,as->aco.dwQuality,
-               as->lpPrevFormat,as->lpPrev
-       );
-       ICDecompress(
-               as->hic,
-               flags,  /* FIXME: check */
-               as->lpCompressFormat,
-               as->compbuffer,
-               as->decompformat,
-               as->decompbuffer
-       );
-       /* We now have a prev format for the next compress ... */
-       as->lpPrevFormat = as->decompformat;
-       as->lpPrev = as->decompbuffer;
-       return S_OK;
-}
-
-static HRESULT WINAPI IAVIStream_fnDelete(IAVIStream*iface,LONG start,LONG samples) {
-       FIXME("(%p)->Delete(%ld,%ld)\n",iface,start,samples);
-       return E_FAIL;
-}
-static HRESULT WINAPI IAVIStream_fnReadData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG *lpread) {
-       FIXME("(%p)->ReadData(0x%08lx,%p,%p)\n",iface,fcc,lp,lpread);
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIStream_fnWriteData(IAVIStream*iface,DWORD fcc,LPVOID lp,LONG size) {
-       FIXME("(%p)->WriteData(0x%08lx,%p,%ld)\n",iface,fcc,lp,size);
-       return E_FAIL;
-}
-
-static HRESULT WINAPI IAVIStream_fnSetInfo(IAVIStream*iface,AVISTREAMINFOW*info,LONG infolen) {
-       FIXME("(%p)->SetInfo(%p,%ld)\n",iface,info,infolen);
-       return E_FAIL;
-}
-
-/***********************************************************************
- *             AVIFileCreateStreamA
- */
-HRESULT WINAPI AVIFileCreateStreamA(PAVIFILE iface,PAVISTREAM *ppavi,AVISTREAMINFOA * psi) {
-       AVISTREAMINFOW  psiw;
-       
-       /* Only the szName at the end is different */
-       memcpy(&psiw,psi,sizeof(*psi)-sizeof(psi->szName));
-        MultiByteToWideChar( CP_ACP, 0, psi->szName, -1,
-                             psiw.szName, sizeof(psiw.szName) / sizeof(WCHAR) );
-       return IAVIFile_CreateStream(iface,ppavi,&psiw);
-}
-
-/***********************************************************************
- *             AVIFileCreateStreamW
- */
-HRESULT WINAPI AVIFileCreateStreamW(IAVIFile*iface,PAVISTREAM*avis,AVISTREAMINFOW*asi) {
-       return IAVIFile_CreateStream(iface,avis,asi);
-}
-
-
-/***********************************************************************
- *             AVIFileGetStream
- */
-HRESULT WINAPI AVIFileGetStream(IAVIFile*iface,PAVISTREAM*avis,DWORD fccType,LONG lParam) {
-       return IAVIFile_GetStream(iface,avis,fccType,lParam);
-}
-
-/***********************************************************************
- *             AVIFileInfoA
- */
-HRESULT WINAPI AVIFileInfoA(PAVIFILE iface,LPAVIFILEINFOA afi,LONG size) {
-       AVIFILEINFOW    afiw;
-       HRESULT         hres;
-
-       if (size < sizeof(AVIFILEINFOA))
-               return AVIERR_BADSIZE;
-       hres = IAVIFile_Info(iface,&afiw,sizeof(afiw));
-       memcpy(afi,&afiw,sizeof(*afi)-sizeof(afi->szFileType));
-        WideCharToMultiByte( CP_ACP, 0, afiw.szFileType, -1,
-                             afi->szFileType, sizeof(afi->szFileType), NULL, NULL );
-        afi->szFileType[sizeof(afi->szFileType)-1] = 0;
-       return hres;
-}
-
-/***********************************************************************
- *             AVIStreamInfoW
- */
-HRESULT WINAPI AVIStreamInfoW(PAVISTREAM iface,AVISTREAMINFOW *asi,LONG
- size) {
-       return IAVIFile_Info(iface,asi,size);
-}
-
-/***********************************************************************
- *             AVIStreamInfoA
- */
-HRESULT WINAPI AVIStreamInfoA(PAVISTREAM iface,AVISTREAMINFOA *asi,LONG
- size) {
-       AVISTREAMINFOW  asiw;
-       HRESULT                 hres;
-
-       if (size<sizeof(AVISTREAMINFOA))
-               return AVIERR_BADSIZE;
-       hres = IAVIFile_Info(iface,&asiw,sizeof(asiw));
-       memcpy(asi,&asiw,sizeof(asiw)-sizeof(asiw.szName));
-        WideCharToMultiByte( CP_ACP, 0, asiw.szName, -1,
-                             asi->szName, sizeof(asi->szName), NULL, NULL );
-        asi->szName[sizeof(asi->szName)-1] = 0;
-       return hres;
-}
-
-/***********************************************************************
- *             AVIFileInfoW
- */
-HRESULT WINAPI AVIFileInfoW(PAVIFILE iface,LPAVIFILEINFOW afi,LONG size) {
-       return IAVIFile_Info(iface,afi,size);
-}
-
-/***********************************************************************
- *             AVIMakeCompressedStream
- */
-HRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM *ppsCompressed,PAVISTREAM ppsSource,AVICOMPRESSOPTIONS *aco,CLSID *pclsidHandler) {
-       char                    fcc[5];
-       IAVIStreamImpl  *as;
-       FIXME("(%p,%p,%p,%p)\n",ppsCompressed,ppsSource,aco,pclsidHandler);
-       fcc[4]='\0';
-       memcpy(fcc,&(aco->fccType),4);
-       FIXME("\tfccType: '%s'\n",fcc);
-       memcpy(fcc,&(aco->fccHandler),4);
-       FIXME("\tfccHandler: '%s'\n",fcc);
-       FIXME("\tdwFlags: 0x%08lx\n",aco->dwFlags);
-
-       /* we just create a duplicate for now */
-       IAVIStream_AddRef(ppsSource);
-       *ppsCompressed = ppsSource;
-       as = (IAVIStreamImpl*)ppsSource;
-
-       /* this is where the fun begins. Open a compressor and prepare it. */
-       as->hic = ICOpen(aco->fccType,aco->fccHandler,ICMODE_COMPRESS);
-
-       /* May happen. for instance if the codec is not able to compress */
-       if (!as->hic) 
-               return AVIERR_UNSUPPORTED;
-
-       ICGetInfo(as->hic,&(as->icinfo),sizeof(ICINFO));
-       FIXME("Opened compressor: '%s' '%s'\n",debugstr_w(as->icinfo.szName),debugstr_w(as->icinfo.szDescription));
-       as->iscompressing = TRUE;
-       memcpy(&(as->aco),aco,sizeof(*aco));
-       if (as->icinfo.dwFlags & VIDCF_COMPRESSFRAMES) {
-               ICCOMPRESSFRAMES        icf;
-
-               /* now what to fill in there ... Hmm */
-               memset(&icf,0,sizeof(icf));
-               icf.lDataRate   = aco->dwBytesPerSecond;
-               icf.lQuality    = aco->dwQuality;
-               icf.lKeyRate    = aco->dwKeyFrameEvery;
-
-               icf.GetData = (void *)0xdead4242;
-               icf.PutData = (void *)0xdead4243;
-               ICSendMessage(as->hic,ICM_COMPRESS_FRAMES_INFO,(LPARAM)&icf,sizeof(icf));
-       }
-       return S_OK;
-}
-
-/***********************************************************************
- *             AVIStreamSetFormat
- */
-HRESULT WINAPI AVIStreamSetFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG formatsize) {
-       return IAVIStream_SetFormat(iface,pos,format,formatsize);
-}
-
-/***********************************************************************
- *             AVIStreamReadFormat
- */
-HRESULT WINAPI AVIStreamReadFormat(PAVISTREAM iface,LONG pos,LPVOID format,LONG *formatsize) {
-       return IAVIStream_ReadFormat(iface,pos,format,formatsize);
-}
-
-/***********************************************************************
- *             AVIStreamWrite(
- */
-HRESULT WINAPI AVIStreamWrite(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,DWORD flags,LONG *sampwritten,LONG *byteswritten) {
-       return IAVIStream_Write(iface,start,samples,buffer,buffersize,flags,sampwritten,byteswritten);
-}
-
-/***********************************************************************
- *             AVIStreamRead
- */
-HRESULT WINAPI AVIStreamRead(PAVISTREAM iface,LONG start,LONG samples,LPVOID buffer,LONG buffersize,LONG *bytesread,LONG *samplesread) {
-       return IAVIStream_Read(iface,start,samples,buffer,buffersize,bytesread,samplesread);
-}
-
-/***********************************************************************
- *             AVIStreamWriteData
- */
-HRESULT WINAPI AVIStreamWriteData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG size) {
-       return IAVIStream_WriteData(iface,fcc,lp,size);
-}
-
-/***********************************************************************
- *             AVIStreamReadData
- */
-HRESULT WINAPI AVIStreamReadData(PAVISTREAM iface,DWORD fcc,LPVOID lp,LONG *lpread) {
-       return IAVIStream_ReadData(iface,fcc,lp,lpread);
-}
-
-/***********************************************************************
- *             AVIStreamStart
- */
-LONG WINAPI AVIStreamStart(PAVISTREAM iface) {
-       AVISTREAMINFOW  si;
-
-       IAVIStream_Info(iface,&si,sizeof(si));
-       return si.dwStart;
-}
-
-/***********************************************************************
- *             AVIStreamLength
- */
-LONG WINAPI AVIStreamLength(PAVISTREAM iface) {
-       AVISTREAMINFOW  si;
-       HRESULT                 ret;
-
-       ret = IAVIStream_Info(iface,&si,sizeof(si));
-       if (ret) /* error */
-               return 1;
-       return si.dwLength;
-}
-
-/***********************************************************************
- *             AVIStreamRelease
- */
-ULONG WINAPI AVIStreamRelease(PAVISTREAM iface) {
-       return IAVIStream_Release(iface);
-}
-
-/***********************************************************************
- *             AVIStreamGetFrameOpen
- */
-PGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM iface,LPBITMAPINFOHEADER bmi) {
-       FIXME("(%p)->(%p),stub!\n",iface,bmi);
-       return NULL;
-}
-
-/***********************************************************************
- *             AVIStreamGetFrame
- */
-LPVOID WINAPI AVIStreamGetFrame(PGETFRAME pg,LONG pos) {
-       return IGetFrame_GetFrame(pg,pos);
-}
-
-/***********************************************************************
- *             AVIStreamGetFrameClose
- */
-HRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME pg) {
-       if (pg) IGetFrame_Release(pg);
-       return 0;
-}
-
-/***********************************************************************
- *             AVIFileRelease
- */
-ULONG WINAPI AVIFileRelease(PAVIFILE iface) {
-       return IAVIFile_Release(iface);
-}
-
-/***********************************************************************
- *             AVIFileExit
- */
-void WINAPI AVIFileExit(void) {
-       FIXME("(), stub.\n");
-}
diff --git a/tags/gpgme-1-1-1/complus/gpgcom.c b/tags/gpgme-1-1-1/complus/gpgcom.c
deleted file mode 100644 (file)
index 6670369..0000000
+++ /dev/null
@@ -1,545 +0,0 @@
-/* gpgcom.c - COM+ component to access GnuPG
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <windows.h>
-
-#include <ole2.h>
-
-#include "argparse.h"
-
-#include "main.h"
-#include "igpgme.h"
-
-static void register_server (void);
-static void unregister_server (void);
-static void enter_complus (void);
-
-
-enum cmd_and_opt_values { aNull = 0,
-    oQuiet       = 'q',
-    oVerbose     = 'v',
-
-    oNoVerbose = 500,
-    oOptions,
-    oDebug,
-    oDebugAll,
-    oNoGreeting,
-    oNoOptions,
-    oHomedir,
-    oGPGBinary,
-    oRegServer,
-    oUnregServer,
-    oEmbedding,
-aTest };
-
-
-static ARGPARSE_OPTS opts[] = {
-
-    { 301, NULL, 0, N_("@Options:\n ") },
-
-    { oVerbose, "verbose",   0, N_("verbose") },
-    { oQuiet,  "quiet",     0, N_("be somewhat more quiet") },
-    { oOptions, "options"  , 2, N_("read options from file")},
-    { oDebug,  "debug"     ,4|16, N_("set debugging flags")},
-    { oDebugAll, "debug-all" ,0, N_("enable full debugging")},
-    { oGPGBinary, "gpg-program", 2 , "" },
-    { oRegServer, "RegServer" , 0, "" },
-    { oUnregServer, "UnregServer" , 0, "" },
-    { oEmbedding, "Embedding" , 0, "" },
-{0} };
-
-
-
-
-static const char *
-my_strusage( int level )
-{
-    const char *p;
-    switch( level ) {
-      case 11: p = "gpgcom";
-       break;
-      case 13: p = VERSION; break;
-      /*case 17: p = PRINTABLE_OS_NAME; break;*/
-      case 19: p =
-           _("Please report bugs to <gpgme-bugs@gnupg.org>.\n");
-       break;
-      case 1:
-      case 40: p =
-           _("Usage: gpgcom [options] (-h for help)");
-       break;
-      case 41: p =
-           _("Syntax: gpgcom [options]\n"
-             "GnuPG COM+ component\n");
-       break;
-
-      default: p = NULL;
-    }
-    return p;
-}
-
-
-int
-main (int argc, char **argv )
-{
-    ARGPARSE_ARGS pargs;
-    int orig_argc;
-    char **orig_argv;
-    FILE *configfp = NULL;
-    char *configname = NULL;
-    unsigned configlineno;
-    int parse_debug = 0;
-    int default_config =1;
-    int greeting = 0;
-    int nogreeting = 0;
-    int action = 0;
-
-    set_strusage( my_strusage );
-    /*log_set_name ("gpa"); not yet implemented in logging.c */
-
-    opt.homedir = getenv("GNUPGHOME");
-    if( !opt.homedir || !*opt.homedir ) {
-      #ifdef HAVE_DOSISH_SYSTEM
-       opt.homedir = "c:/gnupg";
-      #else
-       opt.homedir = "~/.gnupg";
-      #endif
-    }
-
-    /* check whether we have a config file on the commandline */
-    orig_argc = argc;
-    orig_argv = argv;
-    pargs.argc = &argc;
-    pargs.argv = &argv;
-    pargs.flags= 1|(1<<6);  /* do not remove the args, ignore version */
-    while( arg_parse( &pargs, opts) ) {
-       if( pargs.r_opt == oDebug || pargs.r_opt == oDebugAll )
-           parse_debug++;
-       else if( pargs.r_opt == oOptions ) {
-           /* yes there is one, so we do not try the default one, but
-            * read the option file when it is encountered at the commandline
-            */
-           default_config = 0;
-       }
-       else if( pargs.r_opt == oNoOptions )
-           default_config = 0; /* --no-options */
-       else if( pargs.r_opt == oHomedir )
-           opt.homedir = pargs.r.ret_str;
-    }
-
-    if( default_config )
-       configname = make_filename(opt.homedir, "gpgme.conf", NULL );
-
-
-    argc = orig_argc;
-    argv = orig_argv;
-    pargs.argc = &argc;
-    pargs.argv = &argv;
-    pargs.flags=  1 | (1<<5);  /* do not remove the args, allow one dash */
-  next_pass:
-    if( configname ) {
-       configlineno = 0;
-       configfp = fopen( configname, "r" );
-       if( !configfp ) {
-           if( default_config ) {
-               if( parse_debug )
-                   log_info(_("NOTE: no default option file `%s'\n"),
-                                                           configname );
-           }
-           else {
-               log_error(_("option file `%s': %s\n"),
-                                   configname, strerror(errno) );
-               exit(2);
-           }
-           free(configname); configname = NULL;
-       }
-       if( parse_debug && configname )
-           log_info(_("reading options from `%s'\n"), configname );
-       default_config = 0;
-    }
-
-    while( optfile_parse( configfp, configname, &configlineno,
-                                               &pargs, opts) ) {
-       switch( pargs.r_opt ) {
-         case oQuiet: opt.quiet = 1; break;
-         case oVerbose: opt.verbose++; break;
-
-         case oDebug: opt.debug |= pargs.r.ret_ulong; break;
-         case oDebugAll: opt.debug = ~0; break;
-
-         case oOptions:
-           /* config files may not be nested (silently ignore them) */
-           if( !configfp ) {
-               free(configname);
-               configname = xstrdup(pargs.r.ret_str);
-               goto next_pass;
-           }
-           break;
-         case oNoGreeting: nogreeting = 1; break;
-         case oNoVerbose: opt.verbose = 0; break;
-         case oNoOptions: break; /* no-options */
-         case oHomedir: opt.homedir = pargs.r.ret_str; break;
-         case oGPGBinary:  break;
-
-          case oRegServer: action = 1; break;
-          case oUnregServer: action = 2; break;
-          case oEmbedding: action = 3; break;
-
-         default : pargs.err = configfp? 1:2; break;
-       }
-    }
-    if( configfp ) {
-       fclose( configfp );
-       configfp = NULL;
-       free(configname); configname = NULL;
-       goto next_pass;
-    }
-    free( configname ); configname = NULL;
-    if( log_get_errorcount(0) )
-       exit(2);
-    if( nogreeting )
-       greeting = 0;
-
-    if( greeting ) {
-       fprintf(stderr, "%s %s; %s\n",
-                       strusage(11), strusage(13), strusage(14) );
-       fprintf(stderr, "%s\n", strusage(15) );
-    }
-  #ifdef IS_DEVELOPMENT_VERSION
-    log_info("NOTE: this is a development version!\n");
-  #endif
-
-    if ( action == 1 )
-        register_server ();
-    else if (action == 2 )
-        unregister_server ();
-    else if (action == 3 )
-        enter_complus ();
-    else {
-        fprintf (stderr, "This is a COM+ component with no user interface.\n"
-                 "gpgme --help will give you a list of options\n" );
-        exit (1);
-    }
-
-    return 0;
-}
-
-
-static void
-register_progid ( const char *name )
-{
-    HKEY hk = 0;
-    char buf[500];
-
-    /* Create a ProgID entry to point to the ClassID */
-    sprintf (buf, "%.400s", name);
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    sprintf (buf, "g10 Code's GnuPG made easy COMponent" );
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, buf, 0)) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    sprintf (buf, "%.400s\\CLSID", name);
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    sprintf (buf, "%.100s", debugstr_guid (&CLSID_Gpgme) );
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-}
-
-
-static void
-register_typelib (void)
-{
-    ITypeLib  *pTypeLib;
-    HRESULT hr;
-    char name[500];
-    wchar_t *wname;
-    size_t n;
-
-    if ( !GetModuleFileNameA (0, name, sizeof (name)-10) ) {
-        fprintf (stderr,"GetModuleFileName() failed: %d\n",
-                 (int)GetLastError());
-        exit (1);
-    }
-    n = mbstowcs (NULL, name, strlen(name)+1);
-    wname = xmalloc ((n+1)*sizeof *wname);
-    mbstowcs (wname, name, strlen (name)+1);
-
-    hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED); 
-    if (hr)
-        fprintf (stderr, "CoInitializeEx() failed: hr=%lu\n", hr);
-
-    hr = LoadTypeLibEx (wname, REGKIND_REGISTER, &pTypeLib);
-    if (hr)
-        fprintf (stderr, "LoadTypeLibEx() failed: hr=%lx\n", hr);
-
-    ITypeLib_Release (pTypeLib);
-    CoUninitialize ();
-    free (wname);
-}
-
-static void
-unregister_typelib (void)
-{
-    UnRegisterTypeLib (&TLBID_Gpgcom, 1, 0, LANG_NEUTRAL, SYS_WIN32);
-}
-
-static void
-register_server ()
-{
-    HKEY hk = 0;
-    char buf[500];
-
-
-    register_typelib ();
-
-    /* Create a key for the CLSID */
-    sprintf (buf, "CLSID\\%.100s", debugstr_guid (&CLSID_Gpgme) );
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    /* Store our class name as default value */
-    strcpy (buf, "Gpgme");
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    
-    /* Set the application ID */
-    sprintf (buf, "%.100s", debugstr_guid (&APPID_Gpgcom) );
-    if (RegSetValueExA (hk, "AppID", 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-    
-    /* Create the LocalServer32 subkey under the CLSID key */
-    sprintf (buf, "CLSID\\%.100s\\LocalServer32",
-             debugstr_guid (&CLSID_Gpgme) );
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    /* retrieve the module name and add it under the key */
-    if ( !GetModuleFileNameA (0, buf, sizeof (buf)-10) ) {
-        fprintf (stderr,"GetModuleFileName() failed\n");
-        exit (1);
-    }
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-
-    /* Create the ProgID subkey under the CLSID key */
-    sprintf (buf, "CLSID\\%.100s\\ProgID",
-             debugstr_guid (&CLSID_Gpgme) );
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, "Gpgcom.Gpgme.1", 0)) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-    /* Create the VersionIndependentProgID subkey under the CLSID key */
-    sprintf (buf, "CLSID\\%.100s\\VersionIndependentProgID",
-             debugstr_guid (&CLSID_Gpgme) );
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, "Gpgcom.Gpgme", 0)) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-
-    
-    /* Create a key to store AppID info */
-    sprintf (buf, "AppID\\%.100s",  debugstr_guid (&APPID_Gpgcom) );
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    /* Store the name as default value */
-    strcpy (buf, "Gpgcom");
-    if (RegSetValueExA (hk, 0, 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-
-    register_progid ("Gpgcom.Gpgme");
-    register_progid ("Gpgcom.Gpgme.1");
-
-    /* Create a convenience cross reference to the AppID */
-    sprintf (buf, "AppID\\gpgcom.exe");
-    if (RegCreateKeyA (HKEY_CLASSES_ROOT, buf, &hk)) {
-        fprintf (stderr,"RegCreateKey(`%s') failed\n", buf);
-        exit (1);
-    }
-    sprintf (buf, "%.100s", debugstr_guid (&APPID_Gpgcom) );
-    if (RegSetValueExA (hk, "AppID", 0, REG_SZ, buf, strlen (buf))) {
-        fprintf (stderr,"RegSetValueEx(`%s') failed\n", buf);
-        exit (1);
-    }
-    if (RegCloseKey (hk)) {
-        fprintf (stderr,"RegCloseKey() failed\n");
-        exit (1);
-    }
-    hk = 0;
-
-    fprintf (stderr,"*** Component registered\n");
-}
-
-static void
-unregister_server ()
-{
-    char buf[500];
-
-    unregister_typelib ();
-    sprintf (buf, "CLSID\\%.100s\\LocalServer32",
-             debugstr_guid (&CLSID_Gpgme) );
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    sprintf (buf, "CLSID\\%.100s\\ProgID",  debugstr_guid (&CLSID_Gpgme) );
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    sprintf (buf, "CLSID\\%.100s", debugstr_guid (&CLSID_Gpgme) );
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    sprintf (buf, "Gpgcom.Gpgme.1\\CLSID");
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-    sprintf (buf, "Gpgcom.Gpgme.1");
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    sprintf (buf, "Gpgcom.Gpgme\\CLSID");
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-    sprintf (buf, "Gpgcom.Gpgme");
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-
-    sprintf (buf, "AppID\\%.100s", debugstr_guid (&APPID_Gpgcom) );
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    sprintf (buf, "AppID\\gpgcom.exe" );
-    if (RegDeleteKey (HKEY_CLASSES_ROOT, buf))
-        fprintf (stderr,"RegDeleteKey(`%s') failed\n", buf);
-
-    fprintf (stderr,"*** component unregistered\n");
-}
-
-
-static void
-enter_complus ()
-{
-    HANDLE running;
-    DWORD reg;
-    IClassFactory *factory;
-    CLSID clsid;
-    HRESULT hr;
-
-    fprintf (stderr,"*** enter enter_complus()\n");
-    CoInitializeEx (NULL, COINIT_MULTITHREADED); 
-    running = CreateEvent (NULL, FALSE, FALSE, NULL );
-    fprintf (stderr,"*** CoInitialize() done; event=%lx\n", (unsigned long)running );
-
-    igpgme_register_exit_event (running);
-    factory = igpgme_factory_new ( &clsid ); 
-    fprintf (stderr,"*** igpgme_factory_new() done; got=%p\n", factory );
-    hr = CoRegisterClassObject (&clsid, (IUnknown*)factory, 
-                           CLSCTX_LOCAL_SERVER,
-                           REGCLS_SUSPENDED|REGCLS_MULTIPLEUSE, &reg );
-    if (hr) {
-        fprintf (stderr, "CoRegisterClassObject() failed: hr=%lx\n", hr);
-        exit (1);
-    }
-    hr = CoResumeClassObjects ();
-    if (hr) 
-        fprintf (stderr, "CoRegisterClassObject() failed: hr=%lx\n", hr);
-    fprintf (stderr,"*** class object registered; waiting\n" );
-
-    WaitForSingleObject ( running, INFINITE );
-    fprintf (stderr,"*** shutting down\n" );
-    igpgme_register_exit_event (NULL);
-    CloseHandle (running);
-    CoRevokeClassObject ( reg );
-    fprintf (stderr,"*** class object revoked\n" );
-    igpgme_factory_release (factory);
-    fprintf (stderr,"*** factory released\n" );
-    CoUninitialize (); 
-    fprintf (stderr,"*** leave enter_complus()\n" );
-}
-
diff --git a/tags/gpgme-1-1-1/complus/gpgcom.idl b/tags/gpgme-1-1-1/complus/gpgcom.idl
deleted file mode 100644 (file)
index 654eec0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ignupg.idl - Interface definition for the COM+ class GnuPG
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-import "unknwn.idl";
-import "oaidl.idl";
-
-
-[ object, uuid(3811fd50-7f72-11d5-8c9e-0080ad190cd5), dual]
-interface IGpgme : IDispatch
-{
-  HRESULT GetVersion([out] BSTR *retval);
-  HRESULT GetEngineInfo([out] BSTR *retval);
-  HRESULT Cancel(void);
-  [propput] HRESULT Armor([in] BOOL flag);
-  [propget] HRESULT Armor([out, retval] BOOL *retval);
-  [propput] HRESULT Textmode([in] BOOL flag);
-  [propget] HRESULT Textmode([out, retval] BOOL *retval);
-  [propput] HRESULT Plaintext([in] VARIANT val);
-  [propget] HRESULT Plaintext([out, retval] VARIANT *retval);
-  [propput] HRESULT Ciphertext([in] VARIANT val);
-  [propget] HRESULT Ciphertext([out,retval] VARIANT *retval);
-  HRESULT ClearRecipients(void);
-  HRESULT AddRecipient([in] BSTR name,
-                       [in, optional, defaultvalue(-1)] signed short trust);
-  HRESULT ResetSignKeys(void);
-  HRESULT AddSignKey([in] BSTR name);
-  HRESULT Encrypt(void);              
-  HRESULT Sign([in,optional,defaultvalue(0)] signed short signmode);
-  HRESULT SignEncrypt([in,optional,defaultvalue(0)] signed short signmode);
-
-};
-
-
-[ uuid(3811fd48-7f72-11d5-8c9e-0080ad190cd5),
-  helpstring("g10Code.gpgcom, type library"),
-  version(1.0) ]
-library GpgcomLib
-{
-  [ uuid(3811fd40-7f72-11d5-8c9e-0080ad190cd5) ]
-    coclass Gpgcom
-    {
-      [default] interface IGpgme;
-    }
-};
diff --git a/tags/gpgme-1-1-1/complus/gpgcom.rc b/tags/gpgme-1-1-1/complus/gpgcom.rc
deleted file mode 100644 (file)
index d9ac566..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* gpgcom.rc - Resource file for gpgcom
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-1 TYPELIB "gpgcom.tlb"
-
diff --git a/tags/gpgme-1-1-1/complus/gpgcom.tlb b/tags/gpgme-1-1-1/complus/gpgcom.tlb
deleted file mode 100644 (file)
index ae3d162..0000000
Binary files a/tags/gpgme-1-1-1/complus/gpgcom.tlb and /dev/null differ
diff --git a/tags/gpgme-1-1-1/complus/guidgen.c b/tags/gpgme-1-1-1/complus/guidgen.c
deleted file mode 100644 (file)
index a4ac07d..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* guidgen.c - Tool to create GUIDs
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <windows.h>
-
-#include "obj_base.h"
-
-#include "argparse.h"
-
-
-enum cmd_and_opt_values { aNull = 0,
-    oVerbose     = 'v',
-
-aTest };
-
-
-static ARGPARSE_OPTS opts[] = {
-
-    { 301, NULL, 0, "@Options:\n " },
-
-    { oVerbose, "verbose",   0, "verbose" },
-{0} };
-
-static struct {
-    int verbose;
-} opt;
-
-
-static void create_guid (void);
-
-static const char *
-my_strusage( int level )
-{
-    const char *p;
-    switch( level ) {
-      case 11: p = "guidgen";
-       break;
-      case 13: p = VERSION; break;
-      /*case 17: p = PRINTABLE_OS_NAME; break;*/
-      case 19: p =
-           "Please report bugs to <gpgme-bugs@gnupg.org>.\n";
-       break;
-      case 1:
-      case 40: p =
-           "Usage: guidgen [options] (-h for help)";
-       break;
-      case 41: p =
-           "Syntax: guidgen [options]\n"
-             "Generate GUIDs\n";
-       break;
-
-      default: p = NULL;
-    }
-    return p;
-}
-
-
-int
-main (int argc, char **argv )
-{
-    ARGPARSE_ARGS pargs;
-
-    set_strusage( my_strusage );
-    /*log_set_name ("gpa"); not yet implemented in logging.c */
-
-    pargs.argc = &argc;
-    pargs.argv = &argv;
-    pargs.flags=  0;
-    while( arg_parse( &pargs, opts) ) {
-       switch( pargs.r_opt ) {
-         case oVerbose: opt.verbose++; break;
-
-         default : pargs.err = 2; break;
-       }
-    }
-
-    if (!argc)
-        create_guid();
-    else {
-        int n;
-
-        for (n = atoi (argv[0]); n > 0; n-- )
-            create_guid ();
-    }
-
-    return 0;
-}
-
-
-static void
-create_guid ()
-{
-    GUID guid, *id;
-    id = &guid;
-    if ( CoCreateGuid (id) ) {
-        fprintf (stderr,"failed to create GUID\n");
-        exit (1);
-    }
-    printf( "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
-            id->Data1, id->Data2, id->Data3,
-            id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
-            id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] );
-}
-
-
diff --git a/tags/gpgme-1-1-1/complus/igpgme.c b/tags/gpgme-1-1-1/complus/igpgme.c
deleted file mode 100644 (file)
index 9aa64a2..0000000
+++ /dev/null
@@ -1,859 +0,0 @@
-/* igpgme.c - COM+ class IGpgme
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <windows.h>
-
-#include "../gpgme/gpgme.h"
-
-/* FIXME: Put them into an extra header */
-void *_gpgme_malloc (size_t n );
-void *_gpgme_calloc (size_t n, size_t m );
-void *_gpgme_realloc (void *p, size_t n);
-char *_gpgme_strdup (const char *p);
-void  _gpgme_free ( void *a );
-
-
-
-#define INITGUID
-#include "igpgme.h"
-
-/*
- * Declare the interface implementation structures
- */
-typedef struct IGpgmeImpl IGpgmeImpl;
-typedef struct IClassFactoryImpl IClassFactoryImpl;
-
-static HANDLE my_exit_event;
-
-struct IGpgmeImpl {
-    /* IUnknown required stuff */
-    ICOM_VFIELD (IGpgme);
-    DWORD       ref;
-    /* Delegation to IDispatch */
-    struct {
-        IUnknown *disp;
-        ITypeInfo *tinfo;
-    } std_disp;
-    /* Our stuff */
-    GpgmeCtx mainctx;
-    GpgmeData plaintext;
-    int plaintext_given_as_bstr;
-    GpgmeData ciphertext;
-    int ciphertext_is_armored;
-    GpgmeRecipients rset;
-};
-
-
-struct IClassFactoryImpl {
-    /* IUnknown fields */
-    ICOM_VFIELD(IClassFactory);
-    DWORD       ref;
-};
-
-/**********************************************************
- **************  helper functions  ************************
- *********************************************************/
-static HRESULT
-map_gpgme_error (GpgmeError err)
-{
-    HRESULT hr;
-
-    if (!err)
-        return 0;
-    if ( err < 0 || err > 0x1000 ) {
-        fprintf (stderr,"*** GpgmeError `%s' mapped to GPGME_General_Error\n",
-                 gpgme_strerror (err) );
-        err = GPGME_General_Error;
-    }
-    hr = MAKE_HRESULT (SEVERITY_ERROR, FACILITY_ITF, 0x1000 + err);
-    fprintf (stderr,"*** GpgmeError `%s' mapped to %lx\n",
-             gpgme_strerror (err), (unsigned long)hr );
-    return hr;
-}
-
-
-/**********************************************************
- **************  IGpgme Implementation  *******************
- *********************************************************/
-
-static HRESULT WINAPI
-m_IGpgme_QueryInterface (IGpgme *iface, REFIID refiid, LPVOID *obj)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    /*fprintf (stderr,"*** m_IGpgme_QueryInterface(%p,%s)",
-      This, debugstr_guid(refiid));*/
-    if ( IsEqualGUID (&IID_IUnknown, refiid)
-         || IsEqualGUID (&IID_IGpgme, refiid) ) {
-        *obj = This;
-        IGpgme_AddRef (iface);
-        fprintf (stderr," -> got %p\n", *obj);
-        return 0;
-    }
-    else if ( IsEqualGUID (&IID_IDispatch, refiid) ) {
-        HRESULT hr = IDispatch_QueryInterface (This->std_disp.disp,
-                                               refiid, obj);
-        /*fprintf (stderr," -> delegated, hr=%lx, got %p\n",
-           hr, hr? NULL: *obj);*/
-        return hr;
-    }
-    /*fprintf (stderr," -> none\n");*/
-    *obj = NULL;
-    return E_NOINTERFACE;
-}
-
-
-static ULONG WINAPI
-m_IGpgme_AddRef (IGpgme *iface)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-       
-    return ++This->ref;
-}
-
-
-static ULONG WINAPI
-m_IGpgme_Release (IGpgme *iface)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-       
-    if (--This->ref)
-        return This->ref;
-
-    gpgme_release (This->mainctx); This->mainctx = NULL;
-    gpgme_data_release (This->plaintext); This->plaintext = NULL;
-    gpgme_data_release (This->ciphertext); This->ciphertext = NULL;
-    gpgme_recipients_release (This->rset); This->rset = NULL;
-    if (This->std_disp.disp)
-        IDispatch_Release (This->std_disp.disp);
-    if (This->std_disp.tinfo)
-        ITypeInfo_Release (This->std_disp.tinfo);
-    HeapFree(GetProcessHeap(),0,iface);
-    {
-        ULONG count = CoReleaseServerProcess ();
-        if (!count && my_exit_event)
-            SetEvent (my_exit_event);
-    }
-    return 0;
-}
-
-
-static HRESULT WINAPI
-m_stub_IDispatch_GetTypeInfoCount (IGpgme *iface, unsigned int *pctinfo)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-m_stub_IDispatch_GetTypeInfo (IGpgme *iface, UINT iTInfo,
-                              LCID lcid, ITypeInfo **ppTInfo)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI 
-m_stub_IDispatch_GetIDsOfNames (IGpgme *iface, REFIID riid, 
-                                LPOLESTR *rgszNames, UINT cNames, 
-                                LCID lcid, DISPID *rgDispId)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI 
-m_stub_IDispatch_Invoke (IGpgme *iface, DISPID dispIdMember, 
-                         REFIID riid, LCID lcid, WORD wFlags,
-                         DISPPARAMS *pDispParams, VARIANT *pVarResult, 
-                         EXCEPINFO *pExepInfo,  UINT *puArgErr)
-{
-  return E_NOTIMPL;
-}
-
-
-
-static HRESULT WINAPI
-m_IGpgme_GetVersion (IGpgme *iface, BSTR *retvat)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-m_IGpgme_GetEngineInfo (IGpgme *iface, BSTR *retval)
-{
-    return E_NOTIMPL;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_Cancel (IGpgme *iface)
-{
-    return E_NOTIMPL;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_SetArmor (IGpgme *iface, BOOL yes)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    gpgme_set_armor (This->mainctx, yes);
-    return 0;
-}
-
-static HRESULT WINAPI
-m_IGpgme_GetArmor (IGpgme *iface, BOOL *retval)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    *retval = gpgme_get_armor (This->mainctx);
-    return 0;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_SetTextmode (IGpgme *iface, BOOL yes)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    gpgme_set_textmode (This->mainctx, yes);
-    return 0;
-}
-
-static HRESULT WINAPI
-m_IGpgme_GetTextmode (IGpgme *iface, BOOL *retval)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    *retval = gpgme_get_textmode (This->mainctx);
-    return 0;
-}
-
-
-/* 
- * Put the data from VAL into a a Gpgme data object, which is passed by
- * reference.  Valid types of the Variant are: BSTR, SAFEARRAY of BYTE and
- * SAFEARRAY of VARIANTS of signed or unsigned integers.
- */
-static HRESULT WINAPI
-set_data_from_variant (GpgmeData *data, VARIANT val, int *given_as_bstr)
-{
-    GpgmeError err = 0;
-    HRESULT hr;
-    unsigned char *buf;
-    SAFEARRAY *array;
-    size_t len;
-    int i;
-
-    if ( val.vt == VT_BSTR) {
-        len = bstrtoutf8 (val.u.bstrVal, NULL, 0);
-        buf = _gpgme_malloc (len);
-        if (!buf) 
-            return E_OUTOFMEMORY;
-        
-        if (bstrtoutf8 (val.u.bstrVal, buf, len) < 0) {
-            fprintf (stderr,"problem with bstrtoutf8\n");
-            _gpgme_free (buf);
-            return E_FAIL;
-        }
-
-        #if 0
-        fprintf (stderr,"Got a BSTR (utf8):");
-        for (i=0; i < len; i++)
-            fprintf (stderr, " %0X", buf[i] );
-        putc ('\n', stderr);
-        #endif
-        gpgme_data_release (*data); *data = NULL; 
-        err = gpgme_data_new_from_mem (data, buf, len, 0 /*no need to copy*/ );
-        if (!err && given_as_bstr)
-            *given_as_bstr = 1;
-    }
-    else if ( val.vt == (VT_ARRAY|VT_UI1)) {
-        array = val.u.parray;
-
-        /*fprintf (stderr,"Got an ARRAY of bytes:");*/
-        hr = SafeArrayAccessData (array, (void**)&buf);
-        if (hr) {
-            fprintf (stderr,"*** SafeArrayAccessData failed: hr=%lx\n", hr);
-            return hr;
-        }
-        len = array->rgsabound[0].cElements;
-        /*for (i=0; i < len; i++)
-          fprintf (stderr, " %0X", buf[i] );
-          putc ('\n', stderr);*/
-        
-        gpgme_data_release (*data); *data = NULL; 
-        err = gpgme_data_new_from_mem (data, buf, len, 1 );
-        SafeArrayUnaccessData (array);
-        if (given_as_bstr)
-            *given_as_bstr = 0;
-    }
-    else if ( val.vt == (VT_ARRAY|VT_VARIANT)) {
-        VARIANT *vp;
-        array = val.u.parray;
-
-        /*fprintf (stderr,"Got an ARRAY of VARIANTS:");*/
-        hr = SafeArrayAccessData (array, (void**)&vp);
-        if (hr) {
-            fprintf (stderr,"*** SafeArrayAccessData failed: hr=%lx\n", hr);
-            return hr;
-        }
-        len = array->rgsabound[0].cElements;
-        /* allocate the array using the gpgme allocator so that we can
-         * later use a new without the copy set*/
-        buf = _gpgme_malloc (len);
-        if (!buf) {
-            SafeArrayUnaccessData (array);
-            return E_OUTOFMEMORY;
-        }
-        /* coerce all array elements into rawtext */
-        for (i=0; i < len; i++) {
-            switch (vp[i].vt) {
-              case VT_I1:   buf[i] = (BYTE)vp[i].u.cVal; break; 
-              case VT_I2:   buf[i] = ((UINT)vp[i].u.iVal) & 0xff; break; 
-              case VT_I4:   buf[i] = ((ULONG)vp[i].u.lVal) & 0xff; break; 
-              case VT_INT:  buf[i] = ((UINT)vp[i].u.intVal) & 0xff; break; 
-              case VT_UI1:  buf[i] = vp[i].u.bVal; break; 
-              case VT_UI2:  buf[i] = vp[i].u.uiVal & 0xff; break; 
-              case VT_UI4:  buf[i] = vp[i].u.ulVal & 0xff; break; 
-              case VT_UINT: buf[i] = vp[i].u.uintVal & 0xff; break; 
-              default: 
-                fprintf (stderr, "Invalid value in array as pos %d\n", i);
-                _gpgme_free (buf);
-                SafeArrayUnaccessData (array);
-                return E_INVALIDARG; 
-            }
-        }
-
-        /*for (i=0; i < len; i++)
-          fprintf (stderr, " %0X", buf[i] );
-          putc ('\n', stderr);*/
-        
-        gpgme_data_release (*data); *data = NULL;
-        err = gpgme_data_new_from_mem (data, buf, len, 0);
-        SafeArrayUnaccessData (array);
-        if (given_as_bstr)
-            *given_as_bstr = 0;
-    }
-    else {
-        fprintf (stderr, "Got a variant type = %d (0x%x)\n",
-                 (int)val.vt, (int)val.vt );
-        return E_INVALIDARG; /* not a safearray of bytes */
-    }
-    return map_gpgme_error (err);
-}
-
-
-static HRESULT WINAPI
-set_data_to_variant (GpgmeData data, VARIANT *retval, int use_bstr)
-{
-    GpgmeError err;
-    HRESULT hr;
-    SAFEARRAY *array;
-    char *p;
-    size_t nread, len;
-    int i;
-
-    /* Get some info on the data */
-    err = gpgme_data_rewind (data);
-    if (err ) {
-        fprintf (stderr, "*** gpgme_data_rewind failed: %d\n", err);
-        return map_gpgme_error (err);
-    }
-    err = gpgme_data_read (data, NULL, 0, &nread);
-    if (err && err != GPGME_EOF ) {
-        fprintf (stderr, "*** gpgme_data_read [length] failed: %d\n", err);
-        return map_gpgme_error (err);
-    }
-    len = nread;  /*(eof returns a length of 0)*/
-    /*fprintf (stderr,"*** %d bytes are availabe\n", (int)len);*/
-
-    /* convert it to the target data type */
-    if (use_bstr) {
-        BSTR bs;
-        unsigned char *helpbuf;
-
-        /* It is easier to allocate some helper storage */
-        helpbuf = _gpgme_malloc (len);
-        if (!helpbuf) 
-            return E_OUTOFMEMORY;
-        err = gpgme_data_read (data, helpbuf, len, &nread);
-        if (err ) {
-            _gpgme_free (helpbuf);
-            fprintf (stderr, "*** gpgme_data_read [data] failed: %d\n", err);
-            return map_gpgme_error (err);
-        }
-
-        bs = SysAllocStringLen (NULL, len+1);
-        if (!bs) {
-            _gpgme_free (helpbuf);
-            return E_OUTOFMEMORY;
-        }
-
-        for (i=0, p=helpbuf; i < len; i++, p++) 
-            bs[i] = *p;
-        bs[i] = 0;
-        _gpgme_free (helpbuf);
-
-        /* Ready */
-        VariantInit (retval);
-        retval->vt = VT_BSTR;
-        retval->u.bstrVal = bs;
-    }
-#if 0
-    else if (use_byte_array) {
-        array = SafeArrayCreateVector (VT_UI1, 0, len);
-        if (!array)
-            return E_OUTOFMEMORY;
-
-        p = NULL;
-        hr = SafeArrayAccessData (array, (void**)&p);
-        if (hr) {
-            fprintf (stderr,"*** SafeArrayAccessData failed: hr=%lx\n", hr);
-            SafeArrayDestroyData (array);
-            SafeArrayDestroy (array);
-            return hr;
-        }
-        if (len) {
-            err = gpgme_data_read (data, p, len, &nread);
-            if (err ) {
-                SafeArrayUnaccessData (array);
-                SafeArrayDestroyData (array);
-                SafeArrayDestroy (array);
-                fprintf (stderr, "*** gpgme_data_read [data] failed: %d\n",
-                         err);
-                return map_gpgme_error (err);
-            }
-        }
-        SafeArrayUnaccessData (array);
-        
-        /* pass the data to the caller */
-        VariantInit (retval);
-        retval->vt = (VT_ARRAY|VT_UI1);
-        retval->u.parray = array;
-    }
-#endif
-    else { /* Create an array of variants of bytes */
-        VARIANT *v;
-        unsigned char *helpbuf;
-
-        /* It is easier to allocate some helper storage */
-        helpbuf = _gpgme_malloc (len);
-        if (!helpbuf)
-            return E_OUTOFMEMORY;
-        err = gpgme_data_read (data, helpbuf, len, &nread);
-        if (err ) {
-            _gpgme_free (helpbuf);
-            fprintf (stderr, "*** gpgme_data_read [data] failed: %d\n", err);
-            return map_gpgme_error (err);
-        }
-
-        /* The create the array */
-        array = SafeArrayCreateVector (VT_VARIANT, 0, len);
-        if (!array) {
-            _gpgme_free (helpbuf);
-            return E_OUTOFMEMORY;
-        }
-        
-        v = NULL;
-        hr = SafeArrayAccessData (array, (void**)&v);
-        if (hr) {
-            fprintf (stderr,"*** SafeArrayAccessData failed: hr=%lx\n", hr);
-            _gpgme_free (helpbuf);
-            SafeArrayDestroyData (array);
-            SafeArrayDestroy (array);
-            return hr;
-        }
-
-        for (p=helpbuf; len; len--, v++) {
-            VariantInit (v);
-            v->vt = VT_UI1;
-            v->u.bVal = *p;
-        }
-        SafeArrayUnaccessData (array);
-        _gpgme_free (helpbuf);
-        
-        /* pass the data to the caller */
-        VariantInit (retval);
-        retval->vt = (VT_ARRAY|VT_VARIANT);
-        retval->u.parray = array;
-    }
-    return 0;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_SetPlaintext (IGpgme *iface, VARIANT val)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    return set_data_from_variant (&This->plaintext, val,
-                                  &This->plaintext_given_as_bstr); 
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_GetPlaintext (IGpgme *iface, VARIANT *retval)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    /*fprintf (stderr,"*** " __PRETTY_FUNCTION__ "(%p)\n", This );*/
-    return set_data_to_variant (This->plaintext, retval,
-                                This->plaintext_given_as_bstr);
-}
-
-static HRESULT WINAPI
-m_IGpgme_SetCiphertext (IGpgme *iface, VARIANT val)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    return set_data_from_variant (&This->ciphertext, val, NULL); 
-}
-
-static HRESULT WINAPI
-m_IGpgme_GetCiphertext (IGpgme *iface, VARIANT *retval)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    return set_data_to_variant (This->ciphertext, retval,
-                                This->ciphertext_is_armored);
-}
-
-static HRESULT WINAPI
-m_IGpgme_ClearRecipients (IGpgme *iface)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    gpgme_recipients_release (This->rset); This->rset = NULL;
-    return 0;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_AddRecipient (IGpgme *iface, BSTR name, signed short int trust)
-{
-    GpgmeError err;
-    int n;
-    char *p;
-    ICOM_THIS (IGpgmeImpl,iface);
-    
-    /*fprintf (stderr,"*** " __PRETTY_FUNCTION__ "(%p, %d)\n",
-      This, (int)trust);*/
-    if (!This->rset) {
-        err = gpgme_recipients_new (&This->rset);
-        if (err)
-            return map_gpgme_error (err);
-    }
-
-    n = bstrtoutf8 (name, NULL, 0);
-    p = HeapAlloc (GetProcessHeap(), 0, n );
-    if (!p) {
-        fprintf (stderr,"HeapAlloc failed: ec=%d\n", (int)GetLastError () );
-        return E_OUTOFMEMORY;
-    }
-    if (bstrtoutf8 (name, p, n) < 0) {
-        fprintf (stderr,"problem with bstrtoutf8\n");
-        HeapFree (GetProcessHeap(), 0, p);
-        return E_FAIL;
-    }
-    err = gpgme_recipients_add_name (This->rset, p);
-    HeapFree (GetProcessHeap(), 0, p);
-    return map_gpgme_error (err);
-}
-
-static HRESULT WINAPI
-m_IGpgme_ResetSignKeys (IGpgme *iface)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-m_IGpgme_AddSignKey (IGpgme *iface, BSTR name)
-{
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-m_IGpgme_Encrypt (IGpgme *iface)
-{
-    GpgmeError err;
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    gpgme_data_release (This->ciphertext);
-    err = gpgme_data_new (&This->ciphertext);
-    if (err)
-        return map_gpgme_error (err);
-
-    
-    This->ciphertext_is_armored = gpgme_get_armor (This->mainctx);
-    err = gpgme_op_encrypt (This->mainctx, This->rset,
-                            This->plaintext, This->ciphertext);
-#if 0
-    if (!err ) {
-        char buf[100];
-        size_t nread;
-
-        err = gpgme_data_rewind ( This->ciphertext );
-        if (err ) 
-            fprintf (stderr, "*** gpgme_data_rewind failed: %d\n", err);
-        while ( !(err = gpgme_data_read ( This->ciphertext,
-                                          buf, 100, &nread )) ) {
-            fwrite ( buf, nread, 1, stderr );
-        }
-        if (err != GPGME_EOF) 
-            fprintf (stderr, "*** gpgme_data_read failed: %d\n", err);
-        err = 0;
-    }
-#endif
-
-    return map_gpgme_error (err);
-}
-
-static HRESULT WINAPI
-m_IGpgme_Sign (IGpgme *iface, short int signmode)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    fprintf (stderr,"*** " __PRETTY_FUNCTION__ "(%p)\n", This );
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-m_IGpgme_SignEncrypt (IGpgme *iface, short int signmode)
-{
-    ICOM_THIS (IGpgmeImpl,iface);
-
-    fprintf (stderr,"*** " __PRETTY_FUNCTION__ "(%p)\n", This );
-
-    return E_NOTIMPL;
-}
-
-#if 0
-static HRESULT WINAPI
-m_IGpgme_GetSigStatus(GpgmeCtx c, int idx,
-                                  GpgmeSigStat *r_stat, time_t *r_created );
-{
-    return 0;
-}
-
-
-static HRESULT WINAPI
-m_IGpgme_GetSigKey (GpgmeCtx c, int idx, GpgmeKey *r_key);
-{
-    return 0;
-}
-
-static HRESULT WINAPI
-m_IGpgme_GetNotation(IGpgme *c, BSTR *retval)
-{
-    return 0;
-}
-#endif
-
-
-static ICOM_VTABLE(IGpgme) igpgme_vtbl = 
-{
-    /* IUnknown methods */
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-    m_IGpgme_QueryInterface,
-    m_IGpgme_AddRef,
-    m_IGpgme_Release,
-    /* IDispatch methods */
-    m_stub_IDispatch_GetTypeInfoCount,
-    m_stub_IDispatch_GetTypeInfo,
-    m_stub_IDispatch_GetIDsOfNames,
-    m_stub_IDispatch_Invoke,
-    /* Our methods */
-    m_IGpgme_GetVersion,
-    m_IGpgme_GetEngineInfo,
-    m_IGpgme_Cancel,             
-    m_IGpgme_SetArmor,            
-    m_IGpgme_GetArmor,            
-    m_IGpgme_SetTextmode,         
-    m_IGpgme_GetTextmode,         
-    m_IGpgme_SetPlaintext,
-    m_IGpgme_GetPlaintext,
-    m_IGpgme_SetCiphertext,
-    m_IGpgme_GetCiphertext,
-    m_IGpgme_ClearRecipients,
-    m_IGpgme_AddRecipient,
-    m_IGpgme_ResetSignKeys,
-    m_IGpgme_AddSignKey,
-    m_IGpgme_Encrypt, 
-    m_IGpgme_Sign, 
-    m_IGpgme_SignEncrypt
-};
-
-
-
-/***************************************************************
- ******************  Gpgme Factory  ****************************
- ***************************************************************/
-
-static HRESULT WINAPI 
-m_GpgmeFactory_QueryInterface (IClassFactory *iface,
-                               REFIID refiid, LPVOID *obj)
-{
-    ICOM_THIS (IClassFactoryImpl,iface);
-
-    /*fprintf (stderr,"*** m_GpgmeFactory_QueryInterface(%p,%s)",
-      This, debugstr_guid(refiid));*/
-    if ( IsEqualGUID (&IID_IUnknown, refiid)
-         || IsEqualGUID (&IID_IClassFactory, refiid) ) {
-        *obj = This;
-        /*fprintf (stderr," -> got %p\n", obj);*/
-        return 0;
-    }
-    *obj = NULL;
-    /*fprintf (stderr," -> none\n");*/
-    return E_NOINTERFACE;
-}
-
-static ULONG WINAPI
-m_GpgmeFactory_AddRef (IClassFactory *iface)
-{
-    ICOM_THIS(IClassFactoryImpl,iface);
-    return ++(This->ref);
-}
-
-static ULONG WINAPI
-m_GpgmeFactory_Release (IClassFactory *iface)
-{
-    ICOM_THIS(IClassFactoryImpl,iface);
-    return --(This->ref);
-}
-
-static HRESULT WINAPI
-m_GpgmeFactory_CreateInstance (IClassFactory *iface, IUnknown *outer,
-                               REFIID refiid, LPVOID *r_obj )
-{
-    /*ICOM_THIS(IClassFactoryImpl,iface);*/
-
-    fprintf (stderr,"*** m_GpgmeFactory_CreateInstance(%s)",
-             debugstr_guid(refiid) );
-    if (   IsEqualGUID (&IID_IUnknown, refiid)
-        || IsEqualGUID (&IID_IGpgme, refiid) ) {
-       IGpgmeImpl *obj;
-        GpgmeCtx ctx;
-        GpgmeError err;
-
-
-        err = gpgme_new (&ctx);
-        if (err) {
-            fprintf (stderr," -> gpgme_new failed: %s\n", gpgme_strerror (err));
-            return E_OUTOFMEMORY;
-        }
-
-       obj = HeapAlloc (GetProcessHeap(), 0, sizeof *obj );
-       if ( !obj) {
-            fprintf (stderr," -> out of core\n");
-            gpgme_release (ctx);
-            return E_OUTOFMEMORY;
-        }
-        memset (obj, 0, sizeof *obj);
-
-       ICOM_VTBL(obj) = &igpgme_vtbl;
-       obj->ref = 1;
-        obj->mainctx = ctx;
-        {   /* Fixme: need to release some stuff on error */
-            HRESULT hr;
-            ITypeLib *pTypeLib;
-
-            hr = LoadRegTypeLib (&TLBID_Gpgcom, 1, 0, LANG_NEUTRAL, &pTypeLib);
-            if (hr) {
-                fprintf (stderr," -> LoadRegTypeLib failed: %lx\n", hr);
-                return hr;
-            }
-            hr = ITypeLib_GetTypeInfoOfGuid (pTypeLib, &IID_IGpgme,
-                                             &obj->std_disp.tinfo);
-            ITypeLib_Release (pTypeLib);
-            if (hr) {
-                fprintf (stderr," -> GetTypeInfoOfGuid failed: %lx\n", hr);
-                return hr;
-            }
-            hr = CreateStdDispatch ((IUnknown*)obj, obj, obj->std_disp.tinfo,
-                                     &obj->std_disp.disp);
-            if (hr) {
-                fprintf (stderr," -> CreateStdDispatch failed: %lx\n", hr);
-                return hr;
-            }
-        }
-
-        CoAddRefServerProcess ();
-        *r_obj = obj;
-        fprintf (stderr," -> created %p\n", obj );
-       return 0;
-    }
-    fprintf (stderr," -> no interface\n" );
-    *r_obj = NULL;
-    return E_NOINTERFACE;
-}
-
-static HRESULT WINAPI
-m_GpgmeFactory_LockServer (IClassFactory *iface, BOOL dolock )
-{
-    if (dolock) {
-        CoAddRefServerProcess ();
-    }
-    else {
-        ULONG count = CoReleaseServerProcess ();
-        if (!count && my_exit_event)
-            SetEvent (my_exit_event);
-    }
-    return 0;
-}
-
-static ICOM_VTABLE(IClassFactory) igpgme_factory_vtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
-    m_GpgmeFactory_QueryInterface,
-    m_GpgmeFactory_AddRef,
-    m_GpgmeFactory_Release,
-    m_GpgmeFactory_CreateInstance,
-    m_GpgmeFactory_LockServer
-};
-static IClassFactoryImpl igpgme_CF = {&igpgme_factory_vtbl, 1 };
-
-void
-igpgme_register_exit_event (HANDLE ev)
-{
-    my_exit_event = ev;
-}
-
-
-IClassFactory *
-igpgme_factory_new ( CLSID *r_clsid )
-{
-    *r_clsid = CLSID_Gpgme;
-    IClassFactory_AddRef((IClassFactory*)&igpgme_CF);
-    return (IClassFactory*)&igpgme_CF;
-}
-
-void
-igpgme_factory_release ( IClassFactory *factory )
-{
-    /* it's static - nothing to do */
-}
diff --git a/tags/gpgme-1-1-1/complus/igpgme.h b/tags/gpgme-1-1-1/complus/igpgme.h
deleted file mode 100644 (file)
index fa96762..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* igpgme.h - COM+ class IGpgme
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-#ifndef IGPGME_H
-#define IGPGME_H 1
-
-#include <ole2.h>
-
-DEFINE_GUID(CLSID_Gpgme,      0x3811fd40, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-#if 0
-DEFINE_GUID(CLSID_GpgmeData,  0x3811fd41, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-DEFINE_GUID(CLSID_GpgmeKey,   0x3811fd42, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-DEFINE_GUID(CLSID_GpgmeRSet,  0x3811fd43, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-#endif
-
-DEFINE_GUID(TLBID_Gpgcom,     0x3811fd48, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-DEFINE_GUID(APPID_Gpgcom,     0x3811fd4f, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-
-
-DEFINE_GUID(IID_IGpgme,       0x3811fd50, 0x7f72, 0x11d5,
-            0x8c, 0x9e, 0x00, 0x80, 0xad, 0x19, 0x0c, 0xd5);
-
-typedef struct IGpgme IGpgme;
-
-void igpgme_register_exit_event (HANDLE ev);
-IClassFactory *igpgme_factory_new( CLSID *r_clsid );
-void igpgme_factory_release ( IClassFactory *factory );
-
-
-/********************************************
- ***** The IGpgme interface *****************
- ********************************************/
-
-#define ICOM_INTERFACE IGpgme
-
-#define IGpgme_METHODS \
-    ICOM_METHOD1(HRESULT,GetVersion,    BSTR*,) \
-    ICOM_METHOD1(HRESULT,GetEngineInfo, BSTR*,) \
-    ICOM_METHOD(HRESULT,Cancel)               \
-    ICOM_METHOD1(HRESULT,SetArmor,BOOL,)        \
-    ICOM_METHOD1(HRESULT,GetArmor,BOOL*,)       \
-    ICOM_METHOD1(HRESULT,SetTextmode,BOOL,)     \
-    ICOM_METHOD1(HRESULT,GetTextmode,BOOL*,)    \
-    ICOM_METHOD1(HRESULT,SetPlaintext,VARIANT,)    \
-    ICOM_METHOD1(HRESULT,GetPlaintext,VARIANT*,)   \
-    ICOM_METHOD1(HRESULT,SetCiphertext,VARIANT,)   \
-    ICOM_METHOD1(HRESULT,GetCiphertext,VARIANT*,)  \
-    ICOM_METHOD(HRESULT,ClearRecipients)      \
-    ICOM_METHOD2(HRESULT,AddRecipient,BSTR,,signed short int,)  \
-    ICOM_METHOD(HRESULT,ResetSignKeys)      \
-    ICOM_METHOD1(HRESULT,AddSignKey,BSTR,)  \
-    ICOM_METHOD(HRESULT,Encrypt)            \
-    ICOM_METHOD1(HRESULT,Sign,signed short int,)   \
-    ICOM_METHOD1(HRESULT,SignEncrypt,signed short int,)
-
-#if 0
-    ICOM_METHOD1(HRESULT,SetKeylistMode,)      
-    ICOM_METHOD1(HRESULT,SetPassphraseCB,)      
-    ICOM_METHOD1(HRESULT,SetProgressCB,)      
-    ICOM_METHOD1(HRESULT,SignersClear,)      
-    ICOM_METHOD1(HRESULT,SignersAdd,)      
-    ICOM_METHOD1(HRESULT,SignersEnum,)      
-    ICOM_METHOD1(HRESULT,GetSigStatus,)   
-    ICOM_METHOD1(HRESULT,GetNotation,) 
-#endif
-
-#define IGpgme_IMETHODS \
-    IDispatch_IMETHODS \
-    IGpgme_METHODS
-
-ICOM_DEFINE(IGpgme,IDispatch)
-#undef ICOM_INTERFACE
-
-
-/*** IUnknown methods ***/
-#define IGpgme_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IGpgme_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IGpgme_Release(p)            ICOM_CALL (Release,p)
-/*** IGpgme methods ***/
-#define IGpgme_GetVersion(p,r)       ICOM_CALL1(GetVersion,p,r)
-#define IGpgme_GetEngineInfo(p,r)    ICOM_CALL1(GetEngineInfo,p,r)
-#define IGpgme_Cancel(p,a)           ICOM_CALL1(Cancel,p,a)             
-#define IGpgme_SetArmor(p,a)         ICOM_CALL1(SetArmor,p,a)      
-#define IGpgme_GetArmor(p,a)         ICOM_CALL1(GetArmor,p,a)      
-#define IGpgme_SetTextmode(p,a)      ICOM_CALL1(SetTextmode,p,a)      
-#define IGpgme_GetTextmode(p,a)      ICOM_CALL1(GetTextmode,p,a)      
-#define IGpgme_SetPlaintext(p,a)     ICOM_CALL1(SetPlaintext,p,a)
-#define IGpgme_GetPlaintext(p,a)     ICOM_CALL1(GetPlaintext,p,a)
-#define IGpgme_SetCiphertext(p,a)    ICOM_CALL1(SetCiphertext,p,a)
-#define IGpgme_GetCiphertext(p,a)    ICOM_CALL1(GetCiphertext,p,a)
-#define IGpgme_ClearRecipients(p)    ICOM_CALL (ClearRecipients,p)
-#define IGpgme_AddRecipient(p,a,b)   ICOM_CALL2(AddRecipient,p,a,b)
-#define IGpgme_ResetSignKeys(p)      ICOM_CALL (ResetSignKeys,p)
-#define IGpgme_AddSignKey(p,a)       ICOM_CALL (AddSignKey,p,a)
-#define IGpgme_Encrypt(p)            ICOM_CALL (Encrypt,p)
-#define IGpgme_Sign(p,a)             ICOM_CALL (Sign,p,a)
-#define IGpgme_SignEncrypt(p,a)      ICOM_CALL (SignEncrypt,p,a)
-#if 0
-#define IGpgme_SetKeylistMode(p,a)   ICOM_CALL1(SetKeylistMode,p,a)      
-#define IGpgme_SetPassphraseCB(p,a)  ICOM_CALL1(SetPassphraseCB,p,a)     
-#define IGpgme_SetProgressCB(p,a)    ICOM_CALL1(SetProgressCB,p,a)     
-#define IGpgme_SignersClear(p,a)     ICOM_CALL1(SignersClear,p,a)     
-#define IGpgme_SignersAdd(p,a)       ICOM_CALL1(SignersAdd,p,a)     
-#define IGpgme_SignersEnum(p,a)      ICOM_CALL1(SignersEnum,p,a)     
-#define IGpgme_GetSigStatus(p,a)     ICOM_CALL1(GetSigStatus,p,a)      
-#define IGpgme_GetSigKey(p,a)        ICOM_CALL1(GetSigKey,p,a)
-#define IGpgme_GetNotation(p,a)      ICOM_CALL1(GetNotation,p,a)      
-#endif
-
-
-#if 0
-/********************************************
- ***** The IGpgmeKey interface **************
- ********************************************/
-
-#define ICOM_INTERFACE IGpgmeKey
-
-#define IGpgmeKey_METHODS \
-    ICOM_METHOD1(HRESULT,GetVersion,    BSTR,) \
-    ICOM_METHOD1(HRESULT,GetEngineInfo, BSTR,)
-
-
-#define IGpgmeKey_IMETHODS \
-    IUnknown_IMETHODS \
-    IGpgmeKey_METHODS
-
-ICOM_DEFINE(IGpgmeKey,IUnknown)
-#undef ICOM_INTERFACE
-
-/*** IUnknown methods ***/
-#define IGpgmeKey_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
-#define IGpgmeKey_AddRef(p)             ICOM_CALL (AddRef,p)
-#define IGpgmeKey_Release(p)            ICOM_CALL (Release,p)
-/*** IGpgmeKey methods ***/
-#define IGpgmeKey_GetVersion(p,r)       ICOM_CALL1(GetVersion,p,r)
-#define IGpgmeKey_GetEngineInfo(p,r)    ICOM_CALL1(GetEngineInfo,p,r)
-#endif
-
-#endif /*IGPGME_H*/
-
diff --git a/tags/gpgme-1-1-1/complus/main.h b/tags/gpgme-1-1-1/complus/main.h
deleted file mode 100644 (file)
index 7e48ad4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* main.h -  GPGME COM+ component
- *     Copyright (C) 2000 Werner Koch (dd9jn)
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-#ifndef COMPLUS_MAIN_H
-#define COMPLUS_MAIN_H
-
-#include "xmalloc.h"
-#include "stringhelp.h"
-#include "logging.h"
-
-
-#define _(a) (a)
-#define N_(a) (a)
-
-
-struct {
-    int verbose;
-    int quiet;
-    unsigned int debug;
-    char *homedir;
-} opt;
-
-
-
-#endif /* COMPLUS_MAIN_H */
-
-
-
-
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/regtlb.c b/tags/gpgme-1-1-1/complus/regtlb.c
deleted file mode 100644 (file)
index 4ea1342..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* regtlb.c - Register a type library
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <windows.h>
-
-#include "xmalloc.h"
-#include "oleauto.h"
-
-int 
-main (int argc, char **argv)
-{
-    ITypeLib  *pTypeLib;
-    wchar_t *fname;
-    HRESULT hr;
-    size_t n;
-
-    if ( argc != 2 ) {
-        fprintf (stderr,"usage: regtlb foo.tlb\n");
-        return 1;
-    }
-    
-    n = mbstowcs (NULL, argv[1], strlen(argv[1])+1);
-    fprintf (stderr, "need %d bytes\n", (int)n);
-    fname = xmalloc ((n+1)*sizeof *fname);
-    mbstowcs (fname, argv[1], strlen (argv[1])+1);
-
-    hr = CoInitializeEx (NULL, COINIT_MULTITHREADED); 
-    if (hr)
-        fprintf (stderr, "CoInitializeEx() failed: hr=%lu\n", hr);
-
-    hr = LoadTypeLibEx (fname, REGKIND_REGISTER, &pTypeLib);
-    if (hr)
-        fprintf (stderr, "LoadTypeLibEx() failed: hr=%lx\n", hr);
-
-    ITypeLib_Release (pTypeLib);
-
-    CoUninitialize ();
-    return 0;
-}
-    
-
-
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/tgpgcom.c b/tags/gpgme-1-1-1/complus/tgpgcom.c
deleted file mode 100644 (file)
index 27516b1..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* tgpgcom.c - Test the IGpgme classes
- *     Copyright (C) 2001 g10 Code GmbH
- *
- * This file is part of GPGME.
- *
- * GPGME 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.
- *
- * GPGME 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
- */
-
-
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-#include <time.h>
-#include <windows.h>
-
-#define INITGUID
-#include "igpgme.h"
-
-
-int 
-main (int argc, char **argv)
-{
-    IUnknown *pUnknown = NULL;
-    IGpgme   *pGpgme;
-    HRESULT hr;
-    BSTR bs;
-    
-    hr = CoInitializeEx (NULL, COINIT_APARTMENTTHREADED); 
-    if (hr)
-        fprintf (stderr, "CoInitializeEx() failed: hr=%lu\n", hr);
-
-    fprintf (stderr, "system initialized\n");
-    hr = CoCreateInstance (&CLSID_Gpgme, NULL, CLSCTX_LOCAL_SERVER,
-                           &IID_IUnknown, (void**)&pUnknown );
-    if (hr)
-        fprintf (stderr, "CoCreateInstance() failed: hr=%lx\n", hr);
-    if (!pUnknown)
-        exit (1);
-
-    fprintf (stderr,"got object %p - querying %s\n",
-             pUnknown, debugstr_guid(&IID_IGpgme));
-    hr = IGpgme_QueryInterface (pUnknown, &IID_IGpgme, (void**)&pGpgme);
-    if (hr) {
-        fprintf (stderr, "QueryInterface() failed: hr=%lx\n", hr);
-        goto leave;
-    }
-    fprintf (stderr, "got interface %p\n", pGpgme);
-
-    hr = IGpgme_SetArmor (pGpgme, 1);
-    fprintf (stderr, "SetArmor returned %lx\n", hr);
-
-    hr = IGpgme_SetTextmode (pGpgme, 0);
-    fprintf (stderr, "SetTextmode returned %lx\n", hr);
-
-    hr = IGpgme_ClearRecipients (pGpgme);
-    fprintf (stderr, "ClearRecipients returned %lx\n", hr);
-
-    bs = SysAllocString (L"alice");
-    if (!bs)
-      fprintf (stderr, "SysAllocString failed: ec=%d\n", (int)GetLastError());
-    else {
-      int i;
-      
-      for (i=-4; i < 12; i++ )
-        fprintf (stderr," %02X", ((unsigned char*)bs)[i] );
-      putc ('\n', stderr);
-    }
-    hr = IGpgme_AddRecipient (pGpgme, bs, -1);
-    fprintf (stderr, "AddRecipients returned %lx\n", hr);
-    
-    {
-      SAFEARRAY *sa;
-      VARIANT v;
-      char *p;
-      
-      sa = SafeArrayCreateVector (VT_UI1, 0, 20);
-      if (!sa) {
-        fprintf (stderr, "SafeArrayCreateVector failed\n");
-        goto leave;
-      }
-
-      hr = SafeArrayAccessData (sa, (void**)&p);
-      if (hr) {
-        fprintf (stderr,"SafeArrayAccessData failed: hr=%lx\n", hr);
-        goto leave;
-      }
-
-      memcpy (p, "=> Omnis enim res <=", 20 );
-      SafeArrayUnaccessData (sa);
-
-      VariantInit (&v);
-      v.vt = (VT_ARRAY|VT_UI1);
-      v.u.parray = sa;
-      
-      hr = IGpgme_SetPlaintext (pGpgme, v );
-      fprintf (stderr, "SetPlaintext returned %lx\n", hr);
-      SafeArrayDestroyData (sa);
-      SafeArrayDestroy (sa);
-
-      VariantClear (&v);
-    }
-
-    hr = IGpgme_Encrypt (pGpgme);
-    fprintf (stderr, "Encrypt returned %lx\n", hr);
-
-    {
-      VARIANT v;
-    
-      hr = IGpgme_GetCiphertext (pGpgme, &v);
-      fprintf (stderr, "GetCiphertext returned %lx\n", hr);
-      if (!hr) {
-          if (v.vt != (VT_ARRAY|VT_UI1)) 
-              fprintf (stderr, "Invalid array typed returned\n");
-          else {
-              unsigned char *p;
-              
-              hr = SafeArrayAccessData (v.u.parray, (void**)&p);
-              if (hr) 
-                  fprintf (stderr,"*** SafeArrayAccessData failed: %lx\n", hr);
-              else {
-                  size_t arraysize = v.u.parray->rgsabound[0].cElements;
-                  fprintf (stderr,"*** got %d bytes\n", (int)arraysize);
-                  for (;arraysize; arraysize--, p++ )
-                      putc (*p, stderr);
-                  SafeArrayUnaccessData (v.u.parray);
-              }
-          }
-      }
-    }
-    IGpgme_Release (pGpgme);
-
- leave:
-    CoUninitialize ();
-    fprintf (stderr, "system uninitialized\n");
-    return 0;
-}
-    
-
-
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/utf8.c b/tags/gpgme-1-1-1/complus/utf8.c
deleted file mode 100644 (file)
index 0237a62..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * UTF-8 support routines
- *
- * Copyright 2000 Alexandre Julliard
- * 
- * Taken from WINE, so the usual WINE copyright applies:
-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
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <windows.h>
-
-#include <ole2.h>
-
-/* number of following bytes in sequence based on first byte value (for bytes above 0x7f) */
-static const char utf8_length[128] =
-{
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x80-0x8f */
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x90-0x9f */
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xa0-0xaf */
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0xb0-0xbf */
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xc0-0xcf */
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 0xd0-0xdf */
-    2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 0xe0-0xef */
-    3,3,3,3,3,3,3,3,4,4,4,4,5,5,0,0  /* 0xf0-0xff */
-};
-
-/* first byte mask depending on UTF-8 sequence length */
-static const unsigned char utf8_mask[6] = { 0x7f, 0x1f, 0x0f, 0x07, 0x03, 0x01 };
-
-/* minimum Unicode value depending on UTF-8 sequence length */
-static const unsigned int utf8_minval[6] = { 0x0, 0x80, 0x800, 0x10000, 0x200000, 0x4000000 };
-
-
-/* query necessary dst length for src string */
-inline static int get_length_wcs_utf8( const WCHAR *src, unsigned int srclen )
-{
-    int len;
-
-    for (len = 0; srclen; srclen--, src++, len++)
-    {
-        if (*src >= 0x80)
-        {
-            len++;
-            if (*src >= 0x800) len++;
-        }
-    }
-    return len;
-}
-
-/* wide char to UTF-8 string conversion */
-/* return -1 on dst buffer overflow */
-int utf8_wcstombs( const WCHAR *src, int srclen, char *dst, int dstlen )
-{
-    char *orig_dst = dst;
-
-    if (!dstlen) return get_length_wcs_utf8( src, srclen );
-
-    for (; srclen; srclen--, src++)
-    {
-        WCHAR ch = *src;
-
-        if (ch < 0x80)  /* 0x00-0x7f: 1 byte */
-        {
-            if (!dstlen--) return -1;  /* overflow */
-            *dst++ = ch;
-            continue;
-        }
-
-        if (ch < 0x800)  /* 0x80-0x7ff: 2 bytes */
-        {
-            if ((dstlen -= 2) < 0) return -1;  /* overflow */
-            dst[1] = 0x80 | (ch & 0x3f);
-            ch >>= 6;
-            dst[0] = 0xc0 | ch;
-            dst += 2;
-            continue;
-        }
-
-        /* 0x800-0xffff: 3 bytes */
-
-        if ((dstlen -= 3) < 0) return -1;  /* overflow */
-        dst[2] = 0x80 | (ch & 0x3f);
-        ch >>= 6;
-        dst[1] = 0x80 | (ch & 0x3f);
-        ch >>= 6;
-        dst[0] = 0xe0 | ch;
-        dst += 3;
-    }
-    return dst - orig_dst;
-}
-
-/* query necessary dst length for src string */
-inline static int get_length_mbs_utf8( const unsigned char *src, int srclen )
-{
-    int ret;
-    const unsigned char *srcend = src + srclen;
-
-    for (ret = 0; src < srcend; ret++)
-    {
-        unsigned char ch = *src++;
-        if (ch < 0xc0) continue;
-
-        switch(utf8_length[ch-0x80])
-        {
-        case 5:
-            if (src >= srcend) return ret;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) continue;
-            src++;
-        case 4:
-            if (src >= srcend) return ret;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) continue;
-            src++;
-        case 3:
-            if (src >= srcend) return ret;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) continue;
-            src++;
-        case 2:
-            if (src >= srcend) return ret;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) continue;
-            src++;
-        case 1:
-            if (src >= srcend) return ret;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) continue;
-            src++;
-        }
-    }
-    return ret;
-}
-
-/* UTF-8 to wide char string conversion */
-/* return -1 on dst buffer overflow, -2 on invalid input char */
-int utf8_mbstowcs( int flags, const char *src, int srclen, WCHAR *dst, int dstlen )
-{
-    int len, count;
-    unsigned int res;
-    const char *srcend = src + srclen;
-
-    if (!dstlen) return get_length_mbs_utf8( src, srclen );
-
-    for (count = dstlen; count && (src < srcend); count--, dst++)
-    {
-        unsigned char ch = *src++;
-        if (ch < 0x80)  /* special fast case for 7-bit ASCII */
-        {
-            *dst = ch;
-            continue;
-        }
-        len = utf8_length[ch-0x80];
-        res = ch & utf8_mask[len];
-
-        switch(len)
-        {
-        case 5:
-            if (src >= srcend) goto done;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) goto bad;
-            res = (res << 6) | ch;
-            src++;
-        case 4:
-            if (src >= srcend) goto done;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) goto bad;
-            res = (res << 6) | ch;
-            src++;
-        case 3:
-            if (src >= srcend) goto done;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) goto bad;
-            res = (res << 6) | ch;
-            src++;
-        case 2:
-            if (src >= srcend) goto done;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) goto bad;
-            res = (res << 6) | ch;
-            src++;
-        case 1:
-            if (src >= srcend) goto done;  /* ignore partial char */
-            if ((ch = *src ^ 0x80) >= 0x40) goto bad;
-            res = (res << 6) | ch;
-            src++;
-            if (res < utf8_minval[len]) goto bad;
-            if (res >= 0x10000) goto bad;  /* FIXME: maybe we should do surrogates here */
-            *dst = res;
-            continue;
-        }
-    bad:
-        if (flags & MB_ERR_INVALID_CHARS) return -2;  /* bad char */
-        *dst = (WCHAR)'?';
-    }
-    if (src < srcend) return -1;  /* overflow */
-done:
-    return dstlen - count;
-}
-
-
-int
-bstrtoutf8 ( BSTR src, char *dst, size_t dstlen )
-{
-    size_t srclen, needed;
-    int n;
-
-    srclen = src? SysStringLen (src): 0;
-
-    needed = srclen? (utf8_wcstombs (src, srclen, NULL, 0) + 1) : 1;
-    if (!dst || !dstlen)
-        return needed;
-    if (dstlen < needed)
-        return -1;
-    if (srclen) {
-        n = utf8_wcstombs (src, srclen, dst, dstlen);
-        if (n < 0)
-            return -1;
-    }
-    else 
-        n = 0;
-    dst[n] = 0;
-    return n;
-}
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/vbtest.html b/tags/gpgme-1-1-1/complus/vbtest.html
deleted file mode 100644 (file)
index 03df463..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<html>
-<head><title>g10 code - GPGCOM test</title>
-
-<object id="gpg"
-        classid="CLSID:3811fd40-7f72-11d5-8c9e-0080ad190cd5">
-</object>
-
-<script language="VBScript">
-Sub encrypt_text
-     On error resume next
-     Dim TheForm, plain
-
-     set TheForm = Document.forms ("MyForm")
-     gpg.armor = True
-     gpg.plaintext = TheForm.clear.value
-     gpg.ClearRecipients
-     gpg.AddRecipient TheForm.recp.value
-     Err.Clear
-     gpg.Encrypt
-     if Err <> 0 then
-         TheForm.encoded.value = "Error: " & CStr(Err.Number)
-     else
-         TheForm.encoded.value = gpg.ciphertext
-     end if
-end sub
-</script>
-</head>
-<body>
-<h1>Silly Gpgcom test page</h1>
-
-<form id="MyForm">
-<textarea name="clear" rows = 3 cols=40>Please enter the text here</textarea>
-<p>
-Encrypt for <input name="recp" value="alice">
-<input type="button" name="MyAction" value="Encrypt" 
-       language="VBScript" onclick="encrypt_text()">
-<p>
-<textarea name="encoded" rows=10 cols=75></textarea>
-</form>
-
-<p>
-
-</body>
-</html>     
-
-
-
diff --git a/tags/gpgme-1-1-1/complus/vbtest.vbs b/tags/gpgme-1-1-1/complus/vbtest.vbs
deleted file mode 100644 (file)
index 8246b45..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-' Demo script to generate a RFC2015 compliant message using Gpgcom
-Dim gpg, body, crlf
-
-crlf = chr(10) & chr(13)
-
-' Create out Gpgcom object
-set gpg = CreateObject("Gpgcom.Gpgme")
-' We must use the ASCII armor and switch to textmode
-gpg.armor = true
-gpg.textmode = true
-
-' Set the secret message
-gpg.plaintext = "This is the secret message."  'or: InputBox('Enter message:")
-
-' Set the Recipient.  You may also use a keyID or an fingerprint
-gpg.AddRecipient "alice"
-
-' And encrypt the stuff
-gpg.encrypt
-
-' Build the MIME message
-body = "Content-Type: multipart/encrypted; boundary=" 
-body = body & Chr(34) & "=-=-=-=" & Chr(34) & crlf & "    protocol=" & Chr(34)
-body = body & "application/pgp-encrypted" & Chr(34) & crlf & crlf
-body = body & "--=-=-=-=" & crlf
-body = body & "Content-Type: application/pgp-encrypted" & crlf & crlf
-body = body & "Version: 1" & crlf & crlf
-body = body & "--=-=-=-=" & crlf
-body = body & "Content-Type: application/octet-stream" & crlf & crlf
-body = body & gpg.ciphertext 
-body = body & "--=-=-=-=--" & crlf 
-
-' And display it
-Print body
-
-' output function for the windows scripting host
-sub Print(x)
-     WScript.Echo x
-end sub
diff --git a/tags/gpgme-1-1-1/config.guess b/tags/gpgme-1-1-1/config.guess
deleted file mode 100755 (executable)
index e8c6fc0..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2004-01-05'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 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 Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep __ELF__ >/dev/null
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit 0 ;;
-    amiga:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    arc:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    hp300:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mac68k:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    macppc:OpenBSD:*:*)
-       echo powerpc-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-       echo m88k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    mvmeppc:OpenBSD:*:*)
-       echo powerpc-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    pegasos:OpenBSD:*:*)
-       echo powerpc-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    pmax:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    sgi:OpenBSD:*:*)
-       echo mipseb-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    sun3:OpenBSD:*:*)
-       echo m68k-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-       echo mipsel-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    *:OpenBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-       exit 0 ;;
-    alpha:OSF1:*:*)
-       if test $UNAME_RELEASE = "V4.0"; then
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-       fi
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit 0 ;;
-    Alpha*:OpenVMS:*:*)
-       echo alpha-hp-vms
-       exit 0 ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit 0 ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit 0 ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit 0;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit 0 ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
-       exit 0 ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit 0 ;;
-    *:OS400:*:*)
-        echo powerpc-ibm-os400
-       exit 0 ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit 0;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit 0;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit 0 ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit 0 ;;
-    DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit 0 ;;
-    DRS?6000:UNIX_SV:4.2*:7*)
-       case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7 && exit 0 ;;
-       esac ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    i86pc:SunOS:5.*:*)
-       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    sun4*:SunOS:6*:*)
-       # According to config.sub, this is the proper way to canonicalize
-       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-       # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
-           Series*|S4*)
-               UNAME_RELEASE=`uname -v`
-               ;;
-       esac
-       # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-       exit 0 ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit 0 ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-       case "`/bin/arch`" in
-           sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
-               ;;
-           sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
-               ;;
-       esac
-       exit 0 ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit 0 ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
-       exit 0 ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit 0 ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit 0 ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit 0 ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit 0 ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit 0 ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-       #if defined (host_mips) && defined (MIPSEB)
-       #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-       #endif
-       #endif
-         exit (-1);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c \
-         && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-         && exit 0
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit 0 ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit 0 ;;
-    Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit 0 ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit 0 ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit 0 ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit 0 ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit 0 ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit 0 ;;
-    AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-       then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
-           then
-               echo m88k-dg-dgux${UNAME_RELEASE}
-           else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
-           fi
-       else
-           echo i586-dg-dgux${UNAME_RELEASE}
-       fi
-       exit 0 ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit 0 ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit 0 ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit 0 ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit 0 ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit 0 ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit 0 ;;
-    ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-       exit 0 ;;
-    *:AIX:2:3)
-       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
-               #include <sys/systemcfg.h>
-
-               main()
-                       {
-                       if (!__power_pc())
-                               exit(1);
-                       puts("powerpc-ibm-aix3.2.5");
-                       exit(0);
-                       }
-EOF
-               $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-               echo rs6000-ibm-aix3.2.5
-       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
-       else
-               echo rs6000-ibm-aix3.2
-       fi
-       exit 0 ;;
-    *:AIX:*:[45])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit 0 ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit 0 ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit 0 ;;                           # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit 0 ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit 0 ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit 0 ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit 0 ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           # avoid double evaluation of $set_cc_for_build
-           test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
-           then
-               HP_ARCH="hppa2.0w"
-           else
-               HP_ARCH="hppa64"
-           fi
-       fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit 0 ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit 0 ;;
-    3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <unistd.h>
-       int
-       main ()
-       {
-         long cpu = sysconf (_SC_CPU_VERSION);
-         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-            results, however.  */
-         if (CPU_IS_PA_RISC (cpu))
-           {
-             switch (cpu)
-               {
-                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-                 default: puts ("hppa-hitachi-hiuxwe2"); break;
-               }
-           }
-         else if (CPU_IS_HP_MC68K (cpu))
-           puts ("m68k-hitachi-hiuxwe2");
-         else puts ("unknown-hitachi-hiuxwe2");
-         exit (0);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-       echo unknown-hitachi-hiuxwe2
-       exit 0 ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit 0 ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit 0 ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit 0 ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit 0 ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit 0 ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit 0 ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit 0 ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-        exit 0 ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-        exit 0 ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-        exit 0 ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-        exit 0 ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-        exit 0 ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-             -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    *:UNICOS/mp:*:*)
-       echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit 0 ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit 0 ;;
-    5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit 0 ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit 0 ;;
-    *:FreeBSD:*:*)
-       # Determine whether the default compiler uses glibc.
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <features.h>
-       #if __GLIBC__ >= 2
-       LIBC=gnu
-       #else
-       LIBC=
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-       # GNU/KFreeBSD systems have a "k" prefix to indicate we are using
-       # FreeBSD's kernel, but not the complete OS.
-       case ${LIBC} in gnu) kernel_only='k' ;; esac
-       echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
-       exit 0 ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit 0 ;;
-    i*:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit 0 ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit 0 ;;
-    x86:Interix*:[34]*)
-       echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-       exit 0 ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit 0 ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit 0 ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit 0 ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit 0 ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit 0 ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit 0 ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-       exit 0 ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit 0 ;;
-    arm*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    cris:Linux:*:*)
-       echo cris-axis-linux-gnu
-       exit 0 ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    mips:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef mips
-       #undef mipsel
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mipsel
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-       test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-       ;;
-    mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef mips64
-       #undef mips64el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mips64el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips64
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-       test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-       ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit 0 ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit 0 ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-       exit 0 ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-       # Look for CPU level
-       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
-       esac
-       exit 0 ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
-       exit 0 ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
-       exit 0 ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit 0 ;;
-    x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
-       exit 0 ;;
-    i*86:Linux:*:*)
-       # The BFD linker knows what the default object file format is, so
-       # first see if it will tell us. cd to the root directory to prevent
-       # problems with other programs or directories called `ld' in the path.
-       # Set LC_ALL=C to ensure ld outputs messages in English.
-       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-                        | sed -ne '/supported targets:/!d
-                                   s/[         ][      ]*/ /g
-                                   s/.*supported targets: *//
-                                   s/ .*//
-                                   p'`
-        case "$ld_supported_targets" in
-         elf32-i386)
-               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-               ;;
-         a.out-i386-linux)
-               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-               exit 0 ;;
-         coff-i386)
-               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-               exit 0 ;;
-         "")
-               # Either a pre-BFD a.out linker (linux-gnuoldld) or
-               # one that does not give us useful --help.
-               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-               exit 0 ;;
-       esac
-       # Determine whether the default compiler is a.out or elf
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <features.h>
-       #ifdef __ELF__
-       # ifdef __GLIBC__
-       #  if __GLIBC__ >= 2
-       LIBC=gnu
-       #  else
-       LIBC=gnulibc1
-       #  endif
-       # else
-       LIBC=gnulibc1
-       # endif
-       #else
-       #ifdef __INTEL_COMPILER
-       LIBC=gnu
-       #else
-       LIBC=gnuaout
-       #endif
-       #endif
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-       test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-       test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-       ;;
-    i*86:DYNIX/ptx:4*:*)
-       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-       # earlier versions are messed up and put the nodename in both
-       # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit 0 ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
-       # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-       exit 0 ;;
-    i*86:OS/2:*:*)
-       # If we were able to find `uname', then EMX Unix compatibility
-       # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
-       exit 0 ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit 0 ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit 0 ;;
-       i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
-       exit 0 ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit 0 ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-       else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-       fi
-       exit 0 ;;
-    i*86:*:5:[78]*)
-       case `/bin/uname -X | grep "^Machine"` in
-           *486*)           UNAME_MACHINE=i486 ;;
-           *Pentium)        UNAME_MACHINE=i586 ;;
-           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-       esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-       exit 0 ;;
-    i*86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-       elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit 0 ;;
-    pc:*:*:*)
-       # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-       echo i386-pc-msdosdjgpp
-        exit 0 ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit 0 ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit 0 ;;
-    i860:*:4.*:*) # i860-SVR4
-       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-       else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-       fi
-       exit 0 ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit 0 ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit 0 ;;
-    M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit 0 ;;
-    M68*:*:R3V[567]*:*)
-       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
-       OS_REL=''
-       test -r /etc/.relid \
-       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit 0 ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit 0 ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit 0 ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit 0 ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit 0 ;;
-    *:SINIX-*:*:*)
-       if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
-       else
-               echo ns32k-sni-sysv
-       fi
-       exit 0 ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit 0 ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit 0 ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit 0 ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit 0 ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit 0 ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit 0 ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
-       else
-               echo mips-unknown-sysv${UNAME_RELEASE}
-       fi
-        exit 0 ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit 0 ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit 0 ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit 0 ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit 0 ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit 0 ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit 0 ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit 0 ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit 0 ;;
-    *:Darwin:*:*)
-       case `uname -p` in
-           *86) UNAME_PROCESSOR=i686 ;;
-           powerpc) UNAME_PROCESSOR=powerpc ;;
-       esac
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit 0 ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit 0 ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit 0 ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit 0 ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit 0 ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit 0 ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit 0 ;;
-    *:Plan9:*:*)
-       # "uname -m" is not consistent, so use $cputype instead. 386
-       # is converted to i386 for consistency with other x86
-       # operating systems.
-       if test "$cputype" = "386"; then
-           UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
-       fi
-       echo ${UNAME_MACHINE}-unknown-plan9
-       exit 0 ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit 0 ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit 0 ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit 0 ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit 0 ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit 0 ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit 0 ;;
-    SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
-       exit 0 ;;
-    *:DRAGONFLY:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly${UNAME_RELEASE}
-       exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-         ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-       printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-       printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-       echo c1-convex-bsd
-       exit 0 ;;
-    c2*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit 0 ;;
-    c34*)
-       echo c34-convex-bsd
-       exit 0 ;;
-    c38*)
-       echo c38-convex-bsd
-       exit 0 ;;
-    c4*)
-       echo c4-convex-bsd
-       exit 0 ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-    ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/tags/gpgme-1-1-1/config.sub b/tags/gpgme-1-1-1/config.sub
deleted file mode 100755 (executable)
index 463186d..0000000
+++ /dev/null
@@ -1,1537 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-
-timestamp='2004-01-05'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 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.
-
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
-    --version | -v )
-       echo "$version" ; exit 0 ;;
-    --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit 0;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
-  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis)
-               os=
-               basic_machine=$1
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*)
-               os=-lynxos
-               ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-               ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
-       -psos*)
-               os=-psos
-               ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-       | c4x | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | m32r | m68000 | m68k | m88k | mcore \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64vr | mips64vrel \
-       | mips64orion | mips64orionel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | msp430 \
-       | ns16k | ns32k \
-       | openrisc | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-       | pyramid \
-       | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
-       | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
-       | v850 | v850e \
-       | we32k \
-       | x86 | xscale | xstormy16 | xtensa \
-       | z8k)
-               basic_machine=$basic_machine-unknown
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12)
-               # Motorola 68HC11/12.
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* \
-       | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-       | clipper-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | m32r-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | mcore-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipstx39-* | mipstx39el-* \
-       | msp430-* \
-       | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-       | pyramid-* \
-       | romp-* | rs6000-* \
-       | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-       | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tron-* \
-       | v850-* | v850e-* | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-       | xtensa-* \
-       | ymp-* \
-       | z8k-*)
-               ;;
-       # Recognize the various machine names and aliases which stand
-       # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
-       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
-               ;;
-       3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
-               ;;
-       decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
-               ;;
-       encore | umax | mmax)
-               basic_machine=ns32k-encore
-               ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
-               ;;
-       fx2800)
-               basic_machine=i860-alliant
-               ;;
-       genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
-               ;;
-       h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
-               ;;
-       hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
-               ;;
-       hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
-               ;;
-       hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k78[0-9] | hp78[0-9])
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
-               ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       mingw32)
-               basic_machine=i386-pc
-               os=-mingw32
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       mmix*)
-               basic_machine=mmix-knuth
-               os=-mmixware
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
-               ;;
-       news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
-               ;;
-       next | m*-next )
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
-                       ;;
-                   -ns2*)
-                     os=-nextstep2
-                       ;;
-                   *)
-                     os=-nextstep3
-                       ;;
-               esac
-               ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
-       np1)
-               basic_machine=np1-gould
-               ;;
-       nv1)
-               basic_machine=nv1-cray
-               os=-unicosmp
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       or32 | or32-*)
-               basic_machine=or32-unknown
-               os=-coff
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
-               ;;
-       pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       pbd)
-               basic_machine=sparc-tti
-               ;;
-       pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc)    basic_machine=powerpc-unknown
-               ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       sun2)
-               basic_machine=m68000-sun
-               ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
-               ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
-               ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
-               ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
-               ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
-               ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
-               ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
-               ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
-               ;;
-       sun4)
-               basic_machine=sparc-sun
-               ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
-               ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
-               ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
-               ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
-               ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
-               ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
-               ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
-               ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
-               ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
-               ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
-               ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
-               ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
-               ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
-               ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
-               ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
-               ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
-               ;;
-       none)
-               basic_machine=none-none
-               os=-none
-               ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
-               ;;
-       vax)
-               basic_machine=vax-dec
-               ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
-               ;;
-       pdp11)
-               basic_machine=pdp11-dec
-               ;;
-       we32k)
-               basic_machine=we32k-att
-               ;;
-       sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparc | sparcv9 | sparcv9b)
-               basic_machine=sparc-sun
-               ;;
-       cydra)
-               basic_machine=cydra-cydrome
-               ;;
-       orion)
-               basic_machine=orion-highlevel
-               ;;
-       orion105)
-               basic_machine=clipper-highlevel
-               ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
-               ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
-               ;;
-       *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-               ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-               ;;
-       *)
-               ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
-               ;;
-       -solaris)
-               os=-solaris2
-               ;;
-       -svr4*)
-               os=-sysv4
-               ;;
-       -unixware*)
-               os=-sysv4.2uw
-               ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-               ;;
-       # First accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
-             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-        -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-        -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -kaos*)
-               os=-kaos
-               ;;
-       -none)
-               ;;
-       *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-    c4x-* | tic4x-*)
-        os=-coff
-        ;;
-       # This must come before the *-dec entry.
-       pdp10-*)
-               os=-tops20
-               ;;
-       pdp11-*)
-               os=-none
-               ;;
-       *-dec | vax-*)
-               os=-ultrix4.2
-               ;;
-       m68*-apollo)
-               os=-domain
-               ;;
-       i386-sun)
-               os=-sunos4.0.2
-               ;;
-       m68000-sun)
-               os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
-               ;;
-       m68*-cisco)
-               os=-aout
-               ;;
-       mips*-cisco)
-               os=-elf
-               ;;
-       mips*-*)
-               os=-elf
-               ;;
-       or32-*)
-               os=-coff
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-wec)
-               os=-proelf
-               ;;
-       *-winbond)
-               os=-proelf
-               ;;
-       *-oki)
-               os=-proelf
-               ;;
-       *-hp)
-               os=-hpux
-               ;;
-       *-hitachi)
-               os=-hiux
-               ;;
-       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
-               ;;
-       *-cbm)
-               os=-amigaos
-               ;;
-       *-dg)
-               os=-dgux
-               ;;
-       *-dolphin)
-               os=-sysv3
-               ;;
-       m68k-ccur)
-               os=-rtu
-               ;;
-       m88k-omron*)
-               os=-luna
-               ;;
-       *-next )
-               os=-nextstep
-               ;;
-       *-sequent)
-               os=-ptx
-               ;;
-       *-crds)
-               os=-unos
-               ;;
-       *-ns)
-               os=-genix
-               ;;
-       i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
-               ;;
-       *-gould)
-               os=-sysv
-               ;;
-       *-highlevel)
-               os=-bsd
-               ;;
-       *-encore)
-               os=-bsd
-               ;;
-       *-sgi)
-               os=-irix
-               ;;
-       *-siemens)
-               os=-sysv4
-               ;;
-       *-masscomp)
-               os=-rtu
-               ;;
-       f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
-               ;;
-       *-rom68k)
-               os=-coff
-               ;;
-       *-*bug)
-               os=-coff
-               ;;
-       *-apple)
-               os=-macos
-               ;;
-       *-atari*)
-               os=-mint
-               ;;
-       *)
-               os=-none
-               ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
-                               vendor=acorn
-                               ;;
-                       -sunos*)
-                               vendor=sun
-                               ;;
-                       -aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/tags/gpgme-1-1-1/configure.ac b/tags/gpgme-1-1-1/configure.ac
deleted file mode 100644 (file)
index 68de390..0000000
+++ /dev/null
@@ -1,553 +0,0 @@
-# configure.ac for GPGME
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-# (Process this file with autoconf to produce a configure script.)
-AC_PREREQ(2.59)
-min_automake_version="1.9.3"
-
-# Version number: Remember to change it immediately *after* a release.
-#                 Make sure to run  "svn up" before a "make dist".
-#                 See below for the LT versions.
-#
-# The CVS version is usually the next intended release version with
-# the string "-cvs" appended.  The reason for this is that tests for a
-# specific feature can already be done under the assumption that the
-# CVS version is the most recent one in a branch.  To disable the CVS
-# version for the real release, just comment out the my_iscvs macro.
-# Note, that we are now using Subversion instead of CVS and append the
-# SVN revision number to the "cvs" suffix.  To make this most useful
-# for snapshot releases please do an "svn up" right before recreating
-# the configure script, so that a proper revision number for all files
-# is available when running a "make distcheck".
-m4_define(my_version, [1.1.1])
-#m4_define(my_iscvs, yes)
-AC_INIT([gpgme], my_version[]m4_ifdef([my_iscvs], [-cvs[]m4_translit(
-               [$Revision$],[Ra-z $:])]),
-               [bug-gpgme@gnupg.org])
-
-# LT Version numbers, remember to change them just *before* a release.
-#   (Code changed:                     REVISION++)
-#   (Interfaces added/removed/changed: CURRENT++, REVISION=0)
-#   (Interfaces added:                 AGE++)
-#   (Interfaces removed/changed:       AGE=0)
-#
-LIBGPGME_LT_CURRENT=17
-# Subtract 2 from this value if you want to make the LFS transition an
-# ABI break.  [Note to self: Remove this comment with the next regular break.]
-LIBGPGME_LT_AGE=6
-LIBGPGME_LT_REVISION=0
-
-# If the API is changed in an incompatible way: increment the next counter.
-GPGME_CONFIG_API_VERSION=1
-
-NEED_GPG_VERSION=1.2.2
-NEED_GPGSM_VERSION=1.9.6
-##############################################
-
-
-PACKAGE=$PACKAGE_NAME
-VERSION=$PACKAGE_VERSION
-
-AC_CONFIG_SRCDIR(gpgme/gpgme.h)
-dnl FIXME: Enable this with autoconf 2.59.
-dnl AC_CONFIG_MACRO_DIR(m4)
-AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
-AM_MAINTAINER_MODE
-AC_CANONICAL_HOST
-
-# Enable GNU extensions on systems that have them.
-AC_GNU_SOURCE
-
-AH_VERBATIM([_REENTRANT],
-[/* To allow the use of GPGME in multithreaded programs we have to use
-  special features from the library.
-  IMPORTANT: gpgme is not yet fully reentrant and you should use it
-  only from one thread.  */
-#ifndef _REENTRANT
-# define _REENTRANT 1
-#endif])
-
-AC_PROG_CC
-
-AC_SUBST(LIBGPGME_LT_CURRENT)
-AC_SUBST(LIBGPGME_LT_AGE)
-AC_SUBST(LIBGPGME_LT_REVISION)
-AC_DEFINE_UNQUOTED(NEED_GPG_VERSION, "$NEED_GPG_VERSION",
-                                    [Min. needed GnuPG version.])
-AC_DEFINE_UNQUOTED(NEED_GPGSM_VERSION, "$NEED_GPGSM_VERSION",
-                                      [Min. needed GPGSM version.])
-
-AC_SUBST(PACKAGE)
-AC_SUBST(VERSION)
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
-
-# Don't default to build static libs.
-AC_DISABLE_STATIC
-AC_LIBTOOL_WIN32_DLL
-AC_LIBTOOL_RC
-AC_PROG_LIBTOOL
-
-# For now we hardcode the use of version scripts.  It would be better
-# to write a test for this or even implement this within libtool.
-have_ld_version_script=no
-case "${host}" in
-    *-*-linux*)
-       have_ld_version_script=yes
-        ;;
-    *-*-gnu*)
-       have_ld_version_script=yes
-        ;;
-esac
-AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
-
-GPG_DEFAULT=no
-GPGSM_DEFAULT=no
-component_system=None
-have_dosish_system=no
-have_w32_system=no
-case "${host}" in
-    *-mingw32*)
-        # special stuff for Windoze NT
-       have_dosish_system=yes
-        have_w32_system=yes
-        GPG_DEFAULT='c:\\gnupg\\gpg.exe'
-       # XXX Assuan is not supported in this configuration.
-       #GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
-        #component_system='COM+'
-        ;;
-    *)
-       AC_CHECK_PTH(1.2.0,,,no,have_pth=yes)
-       if test "$have_pth" = yes; then
-         AC_DEFINE(HAVE_PTH, ,[Define if we have Pth.])
-       fi
-       AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
-       if test "$have_pthread" = yes; then
-         AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
-       fi
-
-       # XXX: Probably use exec-prefix here?
-#      GPG_DEFAULT='/usr/bin/gpg'
-#      GPGSM_DEFAULT='/usr/bin/gpgsm'
-       ;;
-esac
-
-if test "$have_dosish_system" = yes; then
-   AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
-             [Defined if we run on some of the PCDOS like systems 
-              (DOS, Windoze. OS/2) with special properties like
-              no file modes])
-fi
-AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
-
-if test "$have_w32_system" = yes; then
-   AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system])
-fi
-AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
-
-build_w32_glib=no
-AM_PATH_GLIB_2_0
-AC_ARG_ENABLE(w32-glib,
-           AC_HELP_STRING([--enable-w32-glib], [build GPGME Glib for W32]),
-           build_w32_glib=$withval)
-AM_CONDITIONAL(BUILD_W32_GLIB, test "$build_w32_glib" = yes)
-
-AM_CONDITIONAL(HAVE_PTH, test "$have_pth" = "yes")
-AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
-
-
-# Checks for header files.
-AC_CHECK_HEADERS(sys/select.h)
-
-
-# Type checks.
-AC_C_INLINE
-AC_CHECK_SIZEOF(unsigned int)
-AC_SYS_LARGEFILE
-AC_TYPE_OFF_T
-
-# Checks for compiler features.
-if test "$GCC" = yes; then
-    CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
-    if test "$have_w32_system" = yes; then
-       CFLAGS="$CFLAGS -mms-bitfields"
-    fi
-fi
-
-
-# Checks for library functions.
-AC_FUNC_FSEEKO
-
-AC_CHECK_FUNCS(stpcpy)
-
-AC_REPLACE_FUNCS(vasprintf)
-if test "$ac_cv_func_vasprintf" != yes; then
-  GNUPG_CHECK_VA_COPY
-fi
-
-# Try to find a thread-safe version of ttyname().
-AC_REPLACE_FUNCS(ttyname_r)
-if test "$ac_cv_func_ttyname_r" != yes; then
-  AC_MSG_WARN([
-***
-*** ttyname() is not thread-safe and ttyname_r() does not exist
-***])
-fi
-
-# Try to find a thread-safe version of getenv().
-have_thread_safe_getenv=no
-jm_GLIBC21
-if test $GLIBC21 = yes; then
-  have_thread_safe_getenv=yes
-fi
-if test $have_thread_safe_getenv = yes; then
-  AC_DEFINE(HAVE_THREAD_SAFE_GETENV, [1], [Define if getenv() is thread-safe])
-fi
-have_getenv_r=no
-AC_CHECK_FUNCS(getenv_r, have_getenv_r=yes)
-if test $have_getenv_r = no && test $have_thread_safe_getenv = no; then
-  AC_MSG_WARN([
-***
-*** getenv() is not thread-safe and getenv_r() does not exist
-***])
-fi
-
-# For converting time strings to seconds since Epoch, we need the timegm
-# function.
-AC_CHECK_FUNCS(timegm)
-if test "$ac_cv_func_timegm" != yes; then
-  AC_MSG_WARN([
-***
-*** timegm() not available - a non-thread-safe kludge will be used
-*** and the TZ variable might be changed at runtime.
-***])
-fi
-
-# Checking for libgpg-error.
-AM_PATH_GPG_ERROR(0.5,, AC_MSG_ERROR([libgpg-error was not found]))
-AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GPGME,
-          [The default error source for GPGME.])
-
-
-
-# Checks for system services
-NO_OVERRIDE=no
-AC_ARG_WITH(gpg,
-           AC_HELP_STRING([--with-gpg=PATH], [use GnuPG binary at PATH]),
-           GPG=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$GPG" = "yes"; then
-  GPG=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    AC_PATH_PROG(GPG, gpg)
-  fi
-  if test -z "$GPG"; then
-    GPG="$GPG_DEFAULT"
-  fi
-fi
-if test "$GPG" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find GnuPG, install GnuPG or use --with-gpg=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to GnuPG when cross-compiling, use --with-gpg=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(GPG_PATH, "$GPG", [Path to the GnuPG binary.])
-  AC_SUBST(GPG)
-fi
-dnl Check for GnuPG version requirement.
-GPG_VERSION=unknown
-ok=maybe
-if test -z "$GPG" -o "x$GPG" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([GnuPG version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$GPG"; then
-      AC_MSG_WARN([GnuPG not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GnuPG >= $NEED_GPG_VERSION)
-  req_major=`echo $NEED_GPG_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_GPG_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_GPG_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  gpg_version=`$GPG --version | grep ^gpg`
-  major=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $gpg_version | \
-        sed 's/^gpg (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-  GPG_VERSION=`echo $gpg_version | sed 's/^gpg (GnuPG) //'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([GnuPG must be at least version $NEED_GPG_VERSION])
-  fi
-fi
-AM_CONDITIONAL(RUN_GPG_TESTS, test "$ok" = "yes")
-AC_SUBST(GPG_PATH)
-
-NO_OVERRIDE=no
-AC_ARG_WITH(gpgsm,
-           AC_HELP_STRING([--with-gpgsm=PATH], [use GpgSM binary at PATH]),
-           GPGSM=$withval, NO_OVERRIDE=yes)
-if test "$NO_OVERRIDE" = "yes" || test "$GPGSM" = "yes"; then
-  GPGSM=
-  NO_OVERRIDE=yes
-  if test "$cross_compiling" != "yes"; then
-    AC_PATH_PROG(GPGSM, gpgsm)
-  fi
-  if test -z "$GPGSM"; then
-    GPGSM="$GPGSM_DEFAULT"
-  fi
-fi
-if test "$GPGSM" = no; then
-  if test "$NO_OVERRIDE" = "yes"; then
-    if test "$cross_compiling" != "yes"; then
-      AC_MSG_WARN([
-***
-*** Could not find GpgSM, install GpgSM or use --with-gpgsm=PATH to enable it
-***])
-    else
-      AC_MSG_ERROR([
-***
-*** Can not determine path to GpgSM when cross-compiling, use --with-gpgsm=PATH
-***])
-    fi
-  fi
-else
-  AC_DEFINE_UNQUOTED(GPGSM_PATH, "$GPGSM", [Path to the GPGSM binary.])
-  AC_DEFINE(ENABLE_GPGSM,1,[Whether GPGSM support is enabled])
-fi
-AM_CONDITIONAL(HAVE_GPGSM, test "$GPGSM" != "no")
-
-
-dnl Check for GPGSM version requirement.
-GPGSM_VERSION=unknown
-ok=maybe
-if test -z "$GPGSM" -o "x$GPGSM" = "xno"; then
-  ok=no
-else
-  if test "$cross_compiling" = "yes"; then
-    AC_MSG_WARN([GPGSM version can not be checked when cross compiling])
-    ok=no
-  else
-    if test ! -x "$GPGSM"; then
-      AC_MSG_WARN([GPGSM not executable, version check disabled])
-      ok=no
-    fi
-  fi
-fi
-if test "$ok" = "maybe"; then
-  AC_MSG_CHECKING(for GPGSM >= $NEED_GPGSM_VERSION)
-  req_major=`echo $NEED_GPGSM_VERSION | \
-             sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-  req_minor=`echo $NEED_GPGSM_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-  req_micro=`echo $NEED_GPGSM_VERSION | \
-            sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-  gpgsm_version=`$GPGSM --version | grep ^gpgsm`
-  major=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  minor=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  micro=`echo $gpgsm_version | \
-        sed 's/^gpgsm (GnuPG) \([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-  GPGSM_VERSION=`echo $gpgsm_version | sed 's/^gpgsm (GnuPG) //'`
-
-  if test "$major" -gt "$req_major"; then
-    ok=yes
-  else
-    if test "$major" -eq "$req_major"; then
-      if test "$minor" -gt "$req_minor"; then
-        ok=yes
-      else
-        if test "$minor" -eq "$req_minor"; then
-          if test "$micro" -ge "$req_micro"; then
-            ok=yes
-         fi
-        fi
-      fi
-    fi
-  fi
-  if test "$ok" = "yes"; then
-    AC_MSG_RESULT(yes)
-  else
-    AC_MSG_RESULT(no)
-    AC_MSG_WARN([GPGSM must be at least version $NEED_GPGSM_VERSION])
-  fi
-fi
-AM_CONDITIONAL(RUN_GPGSM_TESTS, test "$ok" = "yes")
-
-# FIXME: Only build if supported.
-AM_CONDITIONAL(BUILD_ASSUAN, test "$GPGSM" != "no")
-
-
-# The assuan code uses funopen but it will also build without it.  So
-# test for it.  Frankly, this is not required in gpgme, but thats the
-# way we handle it in libassuan.
-AC_CHECK_FUNCS(funopen)
-if test $ac_cv_func_funopen != yes; then
-    # No funopen but we can implement that in terms of fopencookie.
-    AC_CHECK_FUNCS(fopencookie)
-    if test $ac_cv_func_fopencookie = yes; then
-        AC_LIBOBJ([funopen])
-    else
-        AC_MSG_WARN([
-***
-*** No implementation of fopencookie or funopen available
-***])
-    fi
-fi
-
-# More assuan replacement functions.
-AC_REPLACE_FUNCS(isascii)
-AC_REPLACE_FUNCS(putc_unlocked)
-AC_REPLACE_FUNCS(memrchr)
-
-# More assuan checks.
-AC_CHECK_HEADERS([sys/uio.h])
-
-# End of assuan checks.
-
-AM_CONDITIONAL(BUILD_COMPLUS, test "$component_system" = "COM+")
-
-# Make the version number in gpgme/gpgme.h the same as the one here.
-# (this is easier than to have a *.in file just for one substitution)
-GNUPG_FIX_HDR_VERSION(gpgme/gpgme.h, GPGME_VERSION)
-
-# Generate values for the DLL version info
-changequote(,)dnl 
-BUILD_REVISION="`echo '$Revision$' | sed 's/[^0-9]//g'`"
-changequote([,])dnl
-test -z "$BUILD_REVISION" && BUILD_REVISION="0"
-if test "$have_w32_system" = yes; then
-    BUILD_TIMESTAMP=`date --iso-8601=minutes`
-    changequote(,)dnl 
-    BUILD_FILEVERSION=`echo "$VERSION" | sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
-    changequote([,])dnl
-    BUILD_FILEVERSION="${BUILD_FILEVERSION}${BUILD_REVISION}"
-fi
-AC_SUBST(BUILD_REVISION)
-AC_SUBST(BUILD_TIMESTAMP)
-AC_SUBST(BUILD_FILEVERSION)
-
-# Add a few constants to help porting to W32
-AH_VERBATIM([SEPCONSTANTS],
-[
-/* Separators as used in file names and $PATH. Please note that the
-   string version must not contain more than one character because
-   the using code assumes strlen()==1 */
-#ifdef HAVE_DOSISH_SYSTEM
-#define DIRSEP_C '\\\\'
-#define EXTSEP_C '.'
-#define DIRSEP_S "\\\\"
-#define EXTSEP_S "."
-#define PATHSEP_C ';'
-#define PATHSEP_S ";"
-#else
-#define DIRSEP_C '/'
-#define EXTSEP_C '.'
-#define DIRSEP_S "/"
-#define EXTSEP_S "."
-#define PATHSEP_C ':'
-#define PATHSEP_S ":"
-#endif
-])
-
-AH_BOTTOM([
-/* Definition of GCC specific attributes.  */
-#if __GNUC__ > 2 
-# define GPGME_GCC_A_PURE  __attribute__ ((__pure__))
-#else
-# define GPGME_GCC_A_PURE
-#endif
-])
-
-
-# Substitution used for gpgme-config 
-GPGME_CONFIG_LIBS="-lgpgme"
-GPGME_CONFIG_CFLAGS=""
-AC_SUBST(GPGME_CONFIG_API_VERSION)
-AC_SUBST(GPGME_CONFIG_LIBS)
-AC_SUBST(GPGME_CONFIG_CFLAGS)
-
-# Frob'da Variables
-LTLIBOBJS=`echo "$LIB@&t@OBJS" |
-           sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
-AC_SUBST(LTLIBOBJS)
-
-#
-# Create config files 
-
-AC_CONFIG_FILES(Makefile assuan/Makefile gpgme/Makefile
-               tests/Makefile tests/gpg/Makefile tests/gpgsm/Makefile
-               doc/Makefile complus/Makefile
-                gpgme/versioninfo.rc)
-AC_CONFIG_FILES(gpgme/gpgme-config, chmod +x gpgme/gpgme-config)
-AC_OUTPUT
-
-echo "
-       GPGME v${VERSION} has been configured as follows:
-
-       GnuPG path:    $GPG
-        GnuPG version: $GPG_VERSION, min. $NEED_GPG_VERSION
-
-       GpgSM path:    $GPGSM
-        GpgSM version: $GPGSM_VERSION, min. $NEED_GPGSM_VERSION
-
-       GPGME Pthread: $have_pthread
-       GPGME Pth:     $have_pth
-"
diff --git a/tags/gpgme-1-1-1/depcomp b/tags/gpgme-1-1-1/depcomp
deleted file mode 100755 (executable)
index aea3d00..0000000
+++ /dev/null
@@ -1,472 +0,0 @@
-#! /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@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"
-  ;;
-
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-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'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
-  "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # 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 ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the 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/tags/gpgme-1-1-1/doc/ChangeLog b/tags/gpgme-1-1-1/doc/ChangeLog
deleted file mode 100644 (file)
index 394ca8f..0000000
+++ /dev/null
@@ -1,735 +0,0 @@
-2005-12-20  Werner Koch  <wk@g10code.com>
-
-       * gpgme.texi (Verify): Document pka_trust.
-
-2005-12-06  Werner Koch  <wk@g10code.com>
-
-       * gpgme.texi (Key Management): Updated to match the fixes for
-       subkey fingerprints and theg secret flag.
-
-2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Destroying Data Buffers): Document gpgme_free.
-
-2005-10-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Add the new member notations of
-       gpgme_sig_key_t.
-       (Key Listing Mode): Document GPGME_KEYLIST_MODE_SIG_NOTATIONS.
-
-2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Enclose all return parameters of deftypefuns in
-       curly brackets.
-
-       * gpgme.texi (Signature Notation Data): New section.
-       (Verify): Added more about the notation data structure.
-
-2005-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Data Buffer I/O Operations, Data Buffer Meta-Data):
-       New subsections.
-
-       * gpgme.texi: Replace plaintext_filename with file_name.
-
-       * gpgme.texi (Key Management): Document is_qualified.
-
-2005-07-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Decrypt): Add plaintext_filename to
-       gpgme_decrypt_result_t.
-       (Verify): Likewise for gpgme_verify_result_t.
-
-2005-06-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Add information about new fields in
-       gpgme_signature_t.
-
-       * gpgme.texi (Decrypt): Add gpgme_recipient_t.
-
-2005-05-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Listing Mode): Fix return type of
-       gpgme_set_keylist_mode.
-       Reported by "Sergio" <ml_sergico@virgilio.it>.
-
-2005-04-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Included Certificates): Document
-       GPGME_INCLUDE_CERTS_DEFAULT.
-
-2005-01-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Engine Configuration): New section.
-       (Crypto Engine): New subsection.
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * lesser.texi (Library Copying): Change from @appendixsec to
-       @appendix.
-       * gpgme.texi (Features): Change reference to GPL to one to LGPL.
-
-       * Makefile.am: Change license to LGPL.
-       (gpgme_TEXINFOS): Replace gpl.texi with lesser.texi.
-
-       * gpgme.texi: Change license to LGPL (also for documentation of
-       GPGME's license).
-       * lesser.texi: New file.
-       * gpl.texi: File removed.
-
-       * gpgme.texi (Creating Contexts): Fix cut&paste error.  Reported
-       by Noel Torres <envite@rolamasao.org>.
-
-2004-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (gpgme_TEXINFOS): Remove fdl.texi.
-       * gpgme.texi: Do not include fdl.texi.  Change license to GPL.
-       * fdl.texi: File removed.
-
-2004-09-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Change type of keylist_mode in
-       gpgme_key_t to gpgme_keylist_mode_t.
-
-2004-09-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Passphrase Callback): Fix last change.
-
-2004-09-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Passphrase Callback): Document
-       GPG_ERR_NOT_IMPLEMENTED.
-
-       * gpgme.texi: Update copyright year for tex version.
-
-2004-07-29  Moritz Schulte  <moritz@g10code.com>
-
-       * gpgme.texi (Verify): Fix gpgme_get_key example (ancient
-       force_update argument was still there).
-
-2004-06-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Listing Keys): Elaborate on the length restrictions
-       on search patterns.
-
-       * gpgme.texi (Decrypt and Verify): Document the NO_DATA error
-       code.
-       (Verify): Document the relationship between gpgme_op_verify_result
-       and the decrypt and verify operations.
-
-2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.text (Verify): Document GPG_ERR_CERT_REVOKED status.
-
-       * gpgme.texi (Decrypt): Add note about new field wrong_key_usage
-       of gpgme_decrypt_result_t.
-
-       * gpgme.texi (Key Management): Add note about new field
-       keylist_mode of gpgme_key_t.
-
-2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Correct type of member wrong_key_usage.
-
-2004-03-29  Moritz Schulte  <moritz@duesseldorf.ccc.de>
-
-       * gpgme.texi (Verify): Fix type of gpgme_op_verify_result.
-       * gpgme.texi (Key Listing Mode): Typo fix.
-
-2004-03-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Library Version Check): Fix the instruction when to
-       set the locale.
-
-2004-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (I/O Callback Example Qt): New section by Marc Mutz.
-
-2004-02-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (cancellation): New section.
-
-2004-02-17  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Key Listing Mode): Doc KEYLIST_MODE_VALIDATE.
-
-2004-02-06  Moritz Schulte  <mo@g10code.com>
-
-       * gpgme.texi: A couple of small fixes regarding the Largfile
-       Support section.
-
-2004-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Largefile Support): New section.
-
-2004-01-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Fix exportable field.
-
-2003-12-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Rename member class in
-       gpgme_key_sig_t to sig_class.
-       (Creating a Signature): Likewise for gpgme_signature_t.
-
-2003-12-23  Moritz Schulte  <mo@g10code.com>
-
-       * gpgme.texi (Listing Keys): Minor clarification for
-       gpgme_get_key.
-
-2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Signal Handling): New section.
-
-2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Correct documentation on memory
-       synchronization requirement.
-
-       * gpgme.texi (Locale): New section.
-       (Multi Threading): Set locale in example.
-
-2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Error Strings): Add gpgme_strerror_r.
-
-2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Update documentation.
-
-2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Header): We don't use the assuan namespace anymore.
-       Document new thread options.
-
-2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Creating a Signature): Change type of member class
-       to unsigned int.
-
-2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Get error code from SIG->status in the code
-       for gpgme_get_sig_status.
-
-2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Add can_authenticate flag.
-
-       * gpgme.texi (Listing Keys): Document GPG_ERR_AMBIGUOUS_NAME for
-       gpgme_get_key.
-
-2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (EXTRA_DIST): Remove variable.
-
-       * gpgme.texi (Encrypting a Plaintext): Bad passphrase is only
-       possible with symmetric encryption, change the wording to reflect
-       that.
-
-       * gpgme.texi (Creating a Signature): Document
-       GPG_ERR_UNUSABLE_SECKEY.
-
-       * gpgme.texi (Encrypting a Plaintext): Mention encrypt and sign
-       operations in result function.
-       (Creating a Signature): Likewise.
-
-2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Listing Mode): Remove word duplication.
-       (Listing Keys): Remove mentioning of force argument.
-       (Verify): Don't mention r_stat.  Fix some typos.
-       (Decrypt and Verify): Correct info how to get the result.  Don't
-       mention r_stat.
-       (Manipulating Data Buffers): Fix documentation of return value.
-       (Listing Keys): Update examples.
-       (Decrypt): Result might also be available when operation failed.
-       (Verify): Result might also be available when operation failed.
-       All spotted by Stéphane Corthésy.
-
-2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Error Sources): Fix cut and paste error.
-
-2003-07-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Management): Clarify difference between can_sign
-       and can_certify.
-       (Information About Keys): Likewise for GPGME_ATTR_CAN_SIGN and
-       GPGME_ATTR_CAN_CERTIFY.
-
-2003-07-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Progress Meter Callback): Change return type of
-       gpgme_progress_cb_t to void.
-
-2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Add 2003 to copyright notice.
-
-       * gpgme.texi (Header): Fix name space documentation on
-       libgpg-error.
-
-2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Remove reference to
-       gpgme_recipients_t.
-
-2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Crypto Operations): Rename gpgme_invalid_user_id_t
-       to gpgme_invalid_key_t.
-
-2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Change error codes to GPG_ERR_* variants.
-       (Error Handling): Rewritten.
-
-2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Exporting Keys): Change and document prototypes.
-       Add new gpgme_op_export_ext and gpgme_op_export_ext_start
-       variants.
-       (Selecting Recipients): Section removed.
-       (Encrypting a Plaintext): Change prototypes and document the
-       changes.
-
-2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Exporting Keys): Change argument type from
-       gpgme_recipient_t to gpgme_user_id_t.
-       (Encrypting a Plaintext): Likewise.
-       (Selecting Recipients): Rewritten.
-
-2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Protocol Selection): Do not use @acronym in @node
-       because that breaks texi2dvi.
-
-       * gpgme.texi (Passphrase Callback): Document new prototype.
-
-2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Header): Remove Gpgme as namespace prefix.  Add
-       _GPGME to namespace prefix.
-       * gpgme.texi (Multi Threading): Add note about link order.
-
-2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Listing Keys): Document what happens if key is not
-       found.
-
-       * gpgme.texi (Importing Keys): Fix cut and paste error.
-
-2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Encrypting a Plaintext): Remove reference to
-       gpgme_get_op_info.
-       (Detailed Results): Subsection removed.
-
-       * gpgme.texi (Key Listing Mode): Add GPGME_KEYLIST_MODE_SIGS.
-       (Manipulating Keys): Add obsoleteness note.
-       (Key Signatures): Likewise.
-       (Information About Keys): Likewise.
-       (Key Management): Add new data types GpgmeSubkey, GpgmeKeySig,
-       GpgmeUserID, and all the information about GpgmeKey.
-
-2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Listing Keys): Remove force_update argument from
-       gpgme_get_key.
-
-       * gpgme.texi (Trust Item Management): Add data members of
-       GpgmeTrustItem type.
-       (Information About Trust Items): Add note about obsoleteness.
-       (Manipulating Trust Items): Add gpgme_trust_item_ref and
-       gpgme_trust_item_unref.
-
-2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Rewritten to take into account new and
-       deprecated functions and data types.
-
-       * gpgme.texi (Decrypt): Descript gpgme_op_decrypt_result and
-       GpgmeDecryptResult.
-
-2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Encrypting a Plaintext): Add info about
-       GpgmeEncryptResult and gpgme_op_encrypt_result.
-
-       * gpgme.texi (Creating a Signature): Add info about
-       GpgmeNewSignature, GpgmeSignResult and gpgme_op_sign_result.
-       (Crypto Operations): Add GpgmeInvalidUserID.
-       (Algorithms): New chapter.
-
-       * gpgme.texi (Deleting Keys): Document
-       GPGME_Ambiguous_Specification.
-       (Error Values): Remove GPGME_Invalid_Type and GPGME_Invalid_Mode.
-       Add GPGME_Unknown_Reason, GPGME_Not_Found,
-       GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
-       GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
-       GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
-       GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
-       GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
-       GPGME_Bad_Signature, GPGME_No_Public_Key.
-
-2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Importing Keys): Change GPGME_IMPORT_PRIVATE to
-       GPGME_IMPORT_SECRET.
-
-       * gpgme.texi (Importing Keys): Remove note about gpgme_get_op_info.
-       (Detailed Results): Remove note about import.
-
-       * gpgme.texi (Importing Keys): Add documentation for
-       GpgmeImportStatus, GpgmeImportResult and gpgme_op_import_result.
-
-       * gpgme.texi (Generating Keys): Fix documentation of public and
-       secret arguments.
-
-2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Generating Keys): Document changed gpgme_op_genkey
-       and new gpgme_op_genkey_result function.  Document
-       GpgmeGenKeyResult data type.
-
-       * gpgme.texi (Error Values): Rename GPGME_No_Passphrase to
-       GPGME_Bad_Passphrase.
-       * gpgme.texi (Decrypt): Likewise.
-       (Decrypt and Verify): Likewise.
-       (Creating a Signature): Likewise.
-       (Encrypting a Plaintext): Likewise.
-
-       * gpgme.texi (Error Values): Rename GPGME_No_Recipients to
-       GPGME_No_UserID and GPGME_Invalid_Recipient to
-       GPGME_Invalid_UserID.
-       (Encrypting a Plaintext): Likewise.
-
-       * gpgme.texi (Error Values): Remove GPGME_Busy and GPGME_No_Request.
-       (Listing Keys): Likewise.
-       (Listing Trust Items): Likewise.
-
-2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Cancelling an Operation): Removed.
-       (Passphrase Callback): Document new type for GpgmePassphraseCb.
-
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Engine Information): Rename member part to
-       file_name.
-
-       * gpgme.texi (Protocols and Engines): Document
-       gpgme_get_protocol_name.
-
-       * gpgme.texi (Engine Information): Rewritten.
-
-2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (I/O Callback Interface): Document new even
-       GPGME_EVENT_START.
-       (Waiting For Completion): Document new possible return values.
-       (I/O Callback Interface): Document return type of GpgmeIOCb.
-
-2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Hooking Up Into Idle Time): Section removed.
-
-2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Drop R_STAT argument in gpgme_op_verify.
-       * gpgme.texi (Decrypt and Verify): Likewise for
-       gpgme_op_decrypt_verify.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Information About Keys): Document that
-       GPGME_ATTR_IS_SECRET is not representable as a string anymore.
-
-2002-12-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Signatures): New section.
-       (Listing Keys): Add gpgme_get_key.
-
-2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Memory Based Data Buffers): New subsection.
-       (File Based Data Buffers): Likewise.
-       (Callback Based Data Buffers): Likewise.
-       (Manipulating Data Buffers): Update interfaces.  Add
-       gpgme_data_seek.
-       * gpgme.texi (Engine Version Check): Remove gpgme_check_engine.
-       
-2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Document the new interface.
-
-2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Generating Keys): Document new argument to
-       gpgme_op_genkey.
-
-2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Fix prototype of gpgme_get_sig_key.
-       Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
-
-2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Selecting Signers): Fix reference count.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Header): Document name space.
-
-2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Importing Keys): Document gpgme_op_import_ext.
-
-       * gpgme.texi (Importing Keys): Undocument EOF.
-
-2002-08-14  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Information About Keys): Changed GPGME_ATTR_TYPE.
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Deleting Keys): Say that secret keys might not be
-       deleted.
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Information About Keys): Document (badly) the new
-       key attributes.
-
-       * gpgme.texi (Manipulating Data Buffers): Mention that backend
-       tries to detect encoding automatically.
-
-2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Run Control): Update this section.
-       (Waiting For Completion): Likewise for this subsection.
-       (Cancelling an Operation): Likewise for this subsection.
-       (Using External Event Loops): New subsection with several
-       subsubsections.
-
-2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Remove item about the need to
-       synchronize anything against gpgme_wait (except gpgme_wait
-       itself).
-
-2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Information About Keys): Fix documentation for IDX.
-       (Information About Trust Items): Likewise.
-
-2002-06-26  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Importing Keys): Document the return value -1 of
-       gpgme_op_import.
-
-2002-06-20  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Verify): Explain the new whatidx variable.
-
-2002-06-10  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Verify): Document attribute GPGME_ATTR_ERRTOK.
-
-2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Document new autodetection.
-
-2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (DISTCLEANFILES): New variable.
-
-2002-05-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Some typographical correctons throughout.
-
-2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Using Automake): New section.
-
-2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Multi Threading): Escape { and }.
-
-2002-05-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Overview): Replace note about thread-safeness.
-       (Multi Threading): New section.
-
-2002-05-03  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Manipulating Data Buffers): Changed some data types
-       to void*.
-       (Protocol Selection): Added gpgme_get_protocol.
-       (Verify): Updated to include the new attribute fucntions and
-       status codes.
-
-2002-04-27  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Manipulating Data Buffers): New type GpgmeDataEncoding.
-
-2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Passphrase Callback): Document that either return
-       argument can be NULL.
-       (Progress Meter Callback): Likewise.
-
-2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Passphrase Callback): Fix small typo.  Document the
-       new function gpgme_get_passphrase_cb.
-       (Progress Meter Callback): Document the new function
-       gpgme_get_progress_cb.
-
-2002-04-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Creating a Signature): Fix function name.  Reported
-       by Wichert Ackerman <wichert@debian.org>.
-
-2002-03-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (direntry): End index entry with a full stop.
-       Patch submitted by Jose Carlos Garcia Sogo <jsogo@debian.org>.
-       
-2002-03-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Detailed Results): Fix syntax error in last change.
-
-2002-03-08  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.texi (Detailed Results): Import does also return info.
-
-2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Encrypting a Plaintext): Document symmetric
-       encryption.
-
-2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Error Strings): Add example.
-       * gpgme.texi (Listing Keys): Likewise.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Information About Keys): Document GPGME_ATTR_EXPIRE.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Verify): Document verification of normal and
-       cleartext signatures.
-
-2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Listing Keys): Document gpgme_op_keylist_ext_start.
-
-2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Encrypting a Plaintext): Document
-       GPGME_Invalid_Recipients.
-       (Error Values): Likewise.
-
-2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Encrypting a Plaintext): Document
-       gpgme_op_encrypt_sign and gpgme_op_encrypt_sign_start.
-
-2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Creating a Signature): Add a note about
-       certificates to include.
-       (Included Certificates): New section.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Detailed Results): Remove literal tags.
-       (Generating Keys): Update documentation.
-
-       * gpgme.texi (Generating Keys): Fix syntax error.
-
-2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Waiting For Completion): Adjust doc to changes in
-       the code.
-
-2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Key Listing Mode): Update documentation.
-
-2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Generating Keys): Document error at creation
-       failure.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Deleting Keys): Document new error values.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Importing Keys): Add reference to gpgme_get_op_info.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Some spell checking.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: Add all the gpgme_op_*_start functions.
-       Fill the concept index with many, many entries.
-
-2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Run Control): New section.
-       (Verify): Docuent gpgme_get_notation.
-       (More Information): New section describing gpgme_get_op_info.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Passphrase callback): Change GpgmePassphraseCb's
-       R_HD type from void* to void**.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Creating data buffers): Change
-       gpgme_data_new_from_filepart's LENGTH type from off_t to size_t.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi (Generating keys): New subsection.
-       (Exporting keys): Likewise.
-       (Importing keys): Likewise.
-       (Deleting keys): Likewise.
-
-2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.texi: g10Code -> g10 Code
-
-       * gpgme.texi (Top): Complete detailmenu.
-       
-       * gpgme.texi: Convert embarassing cruft to the real thing.
-
-2002-01-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * ChangeLog: New file.
-       * gpgme.texi: Likewise.
-       * gpl.texi: Likewise.
-       * fdl.texi: Likewise.
-       * Makefile.am (info_TEXINFOS): New variable.
-       (gpgme_TEXINFOS): Likewise.
-
- Copyright 2002, 2003, 2004 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/doc/Makefile.am b/tags/gpgme-1-1-1/doc/Makefile.am
deleted file mode 100644 (file)
index c5aeb2f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# doc - Automake template
-# Copyright (C) 2001, 2004 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-DISTCLEANFILES = gpgme.tmp
-
-info_TEXINFOS = gpgme.texi
-gpgme_TEXINFOS = lesser.texi
diff --git a/tags/gpgme-1-1-1/doc/gpgme.texi b/tags/gpgme-1-1-1/doc/gpgme.texi
deleted file mode 100644 (file)
index 1fc4849..0000000
+++ /dev/null
@@ -1,5398 +0,0 @@
-\input texinfo                  @c -*- Texinfo -*-
-@setfilename gpgme.info
-@settitle The `GnuPG Made Easy' Reference Manual
-
-@dircategory GNU Libraries
-@direntry
-* @acronym{GPGME}: (gpgme).          Adding support for cryptography to your program.
-@end direntry
-
-@include version.texi
-
-@c Unify some of the indices.
-@syncodeindex tp fn
-@syncodeindex pg fn
-
-@ifinfo
-This file documents the @acronym{GPGME} library.
-
-This is Edition @value{EDITION}, last updated @value{UPDATED}, of
-@cite{The `GnuPG Made Easy' Reference Manual}, for Version
-@value{VERSION}.
-
-@c NOTE: Don't forget to update the year for the TeX version, too.
-Copyright @copyright{} 2002, 2003, 2004, 2005 g10 Code GmbH.
-
-The GPGME reference manual is free software; you can redistribute it
-and/or modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either version
-2.1 of the License, or (at your option) any later version.
-
-The GPGME reference manual 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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser 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
-
-@end ifinfo
-
-@iftex
-@shorttitlepage The `GnuPG Made Easy' Reference Manual
-@end iftex
-@titlepage
-@center @titlefont{The `GnuPG Made Easy'}
-@sp 1
-@center @titlefont{Reference Manual}
-@sp 6
-@center Edition @value{EDITION}
-@sp 1
-@center last updated @value{UPDATED}
-@sp 1
-@center for version @value{VERSION}
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 2002, 2003, 2004, 2005 g10 Code GmbH.
-
-
-The GPGME reference manual is free software; you can redistribute it
-and/or modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either version
-2.1 of the License, or (at your option) any later version.
-
-The GPGME reference manual 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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser 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
-@end titlepage
-@page
-
-@ifnottex
-@node Top
-@top Main Menu
-This is Edition @value{EDITION}, last updated @value{UPDATED}, of
-@cite{The `GnuPG Made Easy' Reference Manual}, for Version
-@value{VERSION} of the @acronym{GPGME} library.
-@end ifnottex
-
-@menu
-* Introduction::                  How to use this manual.
-* Preparation::                   What you should do before using the library.
-* Protocols and Engines::         Supported crypto protocols.
-* Algorithms::                    Supported algorithms.
-* Error Handling::                Error numbers and their meanings.
-* Exchanging Data::               Passing data to and from @acronym{GPGME}.
-* Contexts::                      Handling @acronym{GPGME} contexts.
-
-Appendices
-
-* Library Copying::               The GNU Lesser General Public License says
-                                  how you can copy and share `GnuPG Made Easy'.
-
-Indices
-
-* Concept Index::                 Index of concepts and programs.
-* Function and Data Index::       Index of functions, variables and data types.
-
-
-@detailmenu
- --- The Detailed Node Listing ---
-
-Introduction
-
-* Getting Started::               Purpose of the manual, and how to use it.
-* Features::                      Reasons to install and use @acronym{GPGME}.
-* Overview::                      Basic architecture of the @acronym{GPGME} library.
-
-Preparation
-
-* Header::                        What header file you need to include.
-* Building the Source::           Compiler options to be used.
-* Largefile Support (LFS)::       How to use @acronym{GPGME} with LFS.
-* Using Automake::                Compiler options to be used the easy way.
-* Using Libtool::                 Avoiding compiler options entirely.
-* Library Version Check::         Getting and verifying the library version.
-* Signal Handling::               How @acronym{GPGME} affects signal handling.
-* Multi Threading::               How @acronym{GPGME} can be used in an MT environment.
-
-Protocols and Engines
-
-* Engine Version Check::          Verifying the engine version.
-* Engine Information::            Obtaining more information about the engines.
-* Engine Configuration::          Changing the engine configuration.
-* OpenPGP::                       Support for the OpenPGP protocol.
-* Cryptographic Message Syntax::  Support for the CMS.
-
-Algorithms
-
-* Public Key Algorithms::         A list of all public key algorithms.
-* Hash Algorithms::               A list of all hash algorithms.
-
-Error Handling
-
-* Error Values::                  The error value and what it means.
-* Error Codes::                   A list of important error codes.
-* Error Sources::                 A list of important error sources.
-* Error Strings::                 How to get a descriptive string from a value.
-
-Exchanging Data 
-
-* Creating Data Buffers::         Creating new data buffers.
-* Destroying Data Buffers::       Releasing data buffers.
-* Manipulating Data Buffers::     Operations on data buffers.
-
-Creating Data Buffers
-
-* Memory Based Data Buffers::     Creating memory based data buffers.
-* File Based Data Buffers::       Creating file based data buffers.
-* Callback Based Data Buffers::   Creating callback based data buffers.
-
-Manipulating Data Buffers
-
-* Data Buffer I/O Operations::    I/O operations on data buffers.
-* Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
-
-Contexts
-
-* Creating Contexts::             Creating new @acronym{GPGME} contexts.
-* Destroying Contexts::           Releasing @acronym{GPGME} contexts.
-* Context Attributes::            Setting properties of a context.
-* Key Management::                Managing keys with @acronym{GPGME}.
-* Trust Item Management::         Managing trust items with @acronym{GPGME}.
-* Crypto Operations::             Using a context for cryptography.
-* Run Control::                   Controlling how operations are run.
-
-Context Attributes
-
-* Protocol Selection::            Selecting the protocol used by a context.
-* Crypto Engine::                 Configuring the crypto engine.
-* ASCII Armor::                   Requesting @acronym{ASCII} armored output.
-* Text Mode::                     Choosing canonical text mode.
-* Included Certificates::         Including a number of certificates.
-* Key Listing Mode::              Selecting key listing mode.
-* Passphrase Callback::           Getting the passphrase from the user.
-* Progress Meter Callback::       Being informed about the progress.
-* Locale::                        Setting the locale of a context.
-
-Key Management
-
-* Listing Keys::                  Browsing the list of available keys.
-* Information About Keys::        Requesting detailed information about keys.
-* Key Signatures::                Listing the signatures on a key.
-* Manipulating Keys::             Operations on keys.
-* Generating Keys::               Creating new key pairs.
-* Exporting Keys::                Retrieving key data from the key ring.
-* Importing Keys::                Adding keys to the key ring.
-* Deleting Keys::                 Removing keys from the key ring.
-
-Trust Item Management
-
-* Listing Trust Items::           Browsing the list of available trust items.
-* Information About Trust Items:: Requesting information about trust items.
-* Manipulating Trust Items::      Operations on trust items.
-
-Crypto Operations
-
-* Decrypt::                       Decrypting a ciphertext.
-* Verify::                        Verifying a signature.
-* Decrypt and Verify::            Decrypting a signed ciphertext.
-* Sign::                          Creating a signature.
-* Encrypt::                       Encrypting a plaintext.
-
-Sign
-
-* Selecting Signers::             How to choose the keys to sign with.
-* Creating a Signature::          How to create a signature.
-* Signature Notation Data::       How to add notation data to a signature.
-
-Encrypt
-
-* Encrypting a Plaintext::        How to encrypt a plaintext.
-
-Run Control
-
-* Waiting For Completion::        Waiting until an operation is completed.
-* Using External Event Loops::    Advanced control over what happens when.
-* Cancellation::                  How to end pending operations prematurely.
-
-Using External Event Loops
-
-* I/O Callback Interface::        How I/O callbacks are registered.
-* Registering I/O Callbacks::     How to use I/O callbacks for a context.
-* I/O Callback Example::          An example how to use I/O callbacks.
-* I/O Callback Example GTK+::     How to integrate @acronym{GPGME} in GTK+.
-* I/O Callback Example GDK::      How to integrate @acronym{GPGME} in GDK.
-* I/O Callback Example Qt::       How to integrate @acronym{GPGME} in Qt.
-
-@end detailmenu
-@end menu
-
-@node Introduction
-@chapter Introduction
-
-`GnuPG Made Easy' (@acronym{GPGME}) is a C language library that
-allows to add support for cryptography to a program.  It is designed
-to make access to public key crypto engines like GnuPG or GpgSM easier
-for applications.  @acronym{GPGME} provides a high-level crypto API
-for encryption, decryption, signing, signature verification and key
-management.
-
-@acronym{GPGME} uses GnuPG and GpgSM as its backends to support
-OpenPGP and the Cryptographic Message Syntax (CMS).
-
-@menu
-* Getting Started::               Purpose of the manual, and how to use it.
-* Features::                      Reasons to install and use @acronym{GPGME}.
-* Overview::                      Basic architecture of the @acronym{GPGME} library.
-@end menu
-
-
-@node Getting Started
-@section Getting Started
-
-This manual documents the @acronym{GPGME} library programming
-interface.  All functions and data types provided by the library are
-explained.
-
-The reader is assumed to possess basic knowledge about cryptography in
-general, and public key cryptography in particular.  The underlying
-cryptographic engines that are used by the library are not explained,
-but where necessary, special features or requirements by an engine are
-mentioned as far as they are relevant to @acronym{GPGME} or its users.
-
-This manual can be used in several ways.  If read from the beginning
-to the end, it gives a good introduction into the library and how it
-can be used in an application.  Forward references are included where
-necessary.  Later on, the manual can be used as a reference manual to
-get just the information needed about any particular interface of the
-library.  Experienced programmers might want to start looking at the
-examples at the end of the manual, and then only read up those parts
-of the interface which are unclear.
-
-
-@node Features
-@section Features
-
-@acronym{GPGME} has a couple of advantages over other libraries doing
-a similar job, and over implementing support for GnuPG or other crypto
-engines into your application directly.
-
-@table @asis
-@item it's free software
-Anybody can use, modify, and redistribute it under the terms of the GNU
-Lesser General Public License (@pxref{Library Copying}).
-
-@item it's flexible
-@acronym{GPGME} provides transparent support for several cryptographic
-protocols by different engines.  Currently, @acronym{GPGME} supports
-the OpenPGP protocol using GnuPG as the backend, and the Cryptographic
-Message Syntax using GpgSM as the backend.
-
-@item it's easy
-@acronym{GPGME} hides the differences between the protocols and
-engines from the programmer behind an easy-to-use interface.  This way
-the programmer can focus on the other parts of the program, and still
-integrate strong cryptography in his application.  Once support for
-@acronym{GPGME} has been added to a program, it is easy to add support
-for other crypto protocols once @acronym{GPGME} backends provide them.
-@end table
-
-
-@node Overview
-@section Overview
-
-@acronym{GPGME} provides a data abstraction that is used to pass data
-to the crypto engine, and receive returned data from it.  Data can be
-read from memory or from files, but it can also be provided by a
-callback function.
-
-The actual cryptographic operations are always set within a context.
-A context provides configuration parameters that define the behaviour
-of all operations performed within it.  Only one operation per context
-is allowed at any time, but when one operation is finished, you can
-run the next operation in the same context.  There can be more than
-one context, and all can run different operations at the same time.
-
-Furthermore, @acronym{GPGME} has rich key management facilities
-including listing keys, querying their attributes, generating,
-importing, exporting and deleting keys, and acquiring information
-about the trust path.
-
-With some precautions, @acronym{GPGME} can be used in a multi-threaded
-environment, although it is not completely thread safe and thus needs
-the support of the application.
-
-
-@node Preparation
-@chapter Preparation
-
-To use @acronym{GPGME}, you have to perform some changes to your
-sources and the build system.  The necessary changes are small and
-explained in the following sections.  At the end of this chapter, it
-is described how the library is initialized, and how the requirements
-of the library are verified.
-
-@menu
-* Header::                        What header file you need to include.
-* Building the Source::           Compiler options to be used.
-* Largefile Support (LFS)::       How to use @acronym{GPGME} with LFS.
-* Using Automake::                Compiler options to be used the easy way.
-* Using Libtool::                 Avoiding compiler options entirely.
-* Library Version Check::         Getting and verifying the library version.
-* Signal Handling::               How @acronym{GPGME} affects signal handling.
-* Multi Threading::               How @acronym{GPGME} can be used in an MT environment.
-@end menu
-
-
-@node Header
-@section Header
-@cindex header file
-@cindex include file
-
-All interfaces (data types and functions) of the library are defined
-in the header file `gpgme.h'.  You must include this in all programs
-using the library, either directly or through some other header file,
-like this:
-
-@example
-#include <gpgme.h>
-@end example
-
-The name space of @acronym{GPGME} is @code{gpgme_*} for function names
-and data types and @code{GPGME_*} for other symbols.  Symbols internal
-to @acronym{GPGME} take the form @code{_gpgme_*} and @code{_GPGME_*}.
-
-Because @acronym{GPGME} makes use of the GPG Error library, using
-@acronym{GPGME} will also use the @code{GPG_ERR_*} name space
-directly, and the @code{gpg_err*} and @code{gpg_str*} name space
-indirectly.
-
-
-@node Building the Source
-@section Building the Source
-@cindex compiler options
-@cindex compiler flags
-
-If you want to compile a source file including the `gpgme.h' header
-file, you must make sure that the compiler can find it in the
-directory hierarchy.  This is accomplished by adding the path to the
-directory in which the header file is located to the compilers include
-file search path (via the @option{-I} option).
-
-However, the path to the include file is determined at the time the
-source is configured.  To solve this problem, gpgme ships with a small
-helper program @command{gpgme-config} that knows about the path to the
-include file and other configuration options.  The options that need
-to be added to the compiler invocation at compile time are output by
-the @option{--cflags} option to @command{gpgme-config}.  The following
-example shows how it can be used at the command line:
-
-@example
-gcc -c foo.c `gpgme-config --cflags`
-@end example
-
-Adding the output of @samp{gpgme-config --cflags} to the compiler
-command line will ensure that the compiler can find the
-@acronym{GPGME} header file.
-
-A similar problem occurs when linking the program with the library.
-Again, the compiler has to find the library files.  For this to work,
-the path to the library files has to be added to the library search
-path (via the @option{-L} option).  For this, the option
-@option{--libs} to @command{gpgme-config} can be used.  For
-convenience, this option also outputs all other options that are
-required to link the program with @acronym{GPGME} (in particular, the
-@samp{-lgpgme} option).  The example shows how to link @file{foo.o}
-with the @acronym{GPGME} library to a program @command{foo}.
-
-@example
-gcc -o foo foo.o `gpgme-config --libs`
-@end example
-
-Of course you can also combine both examples to a single command by
-specifying both options to @command{gpgme-config}:
-
-@example
-gcc -o foo foo.c `gpgme-config --cflags --libs`
-@end example
-
-If you want to link to one of the thread-safe versions of
-@acronym{GPGME}, you must specify the @option{--thread} option before
-any other option to select the thread package you want to link with.
-Supported thread packages are @option{--thread=pth} and
-@option{--thread=pthread}.
-
-
-@node Largefile Support (LFS)
-@section Largefile Support (LFS)
-@cindex largefile support
-@cindex LFS
-
-@acronym{GPGME} is compiled with largefile support by default, if it
-is available on the system.  This means that GPGME supports files
-larger than two gigabyte in size, if the underlying operating system
-can.  On some systems, largefile support is already the default.  On
-such systems, nothing special is required.  However, some systems
-provide only support for files up to two gigabyte in size by default.
-Support for larger file sizes has to be specifically enabled.
-
-To make a difficult situation even more complex, such systems provide
-two different types of largefile support.  You can either get all
-relevant functions replaced with alternatives that are largefile
-capable, or you can get new functions and data types for largefile
-support added.  Those new functions have the same name as their
-smallfile counterparts, but with a suffix of 64.
-
-An example: The data type @code{off_t} is 32 bit wide on GNU/Linux PC
-systems.  To address offsets in large files, you can either enable
-largefile support add-on.  Then a new data type @code{off64_t} is
-provided, which is 64 bit wide.  Or you can replace the existing
-@code{off_t} data type with its 64 bit wide counterpart.  All
-occurences of @code{off_t} are then automagically replaced.
-
-As if matters were not complex enough, there are also two different
-types of file descriptors in such systems.  This is important because
-if file descriptors are exchanged between programs that use a
-different maximum file size, certain errors must be produced on some
-file descriptors to prevent subtle overflow bugs from occuring.
-
-As you can see, supporting two different maximum file sizes at the
-same time is not at all an easy task.  However, the maximum file size
-does matter for @acronym{GPGME}, because some data types it uses in
-its interfaces are affected by that.  For example, the @code{off_t}
-data type is used in the @code{gpgme_data_seek} function, to match its
-@acronym{POSIX} counterpart.  This affects the call-frame of the
-function, and thus the ABI of the library.  Furthermore, file
-descriptors can be exchanged between GPGME and the application.
-
-For you as the user of the library, this means that your program must
-be compiled in the same file size mode as the library.  Luckily, there
-is absolutely no valid reason for new programs to not enable largefile
-support by default and just use that.  The compatibility modes (small
-file sizes or dual mode) can be considered an historic artefact, only
-useful to allow for a transitional period.
-
-@acronym{GPGME} is compiled using largefile support by default.  This
-means that your application must do the same, at least as far as it is
-relevant for using the @file{gpgme.h} header file.  All types in this
-header files refer to their largefile counterparts, if they are
-different from any default types on the system.
-
-You can enable largefile support, if it is different from the default
-on the system the application is compiled on, by using the Autoconf
-macro @code{AC_SYS_LARGEFILE}.  If you do this, then you don't need to
-worry about anything else: It will just work.  In this case you might
-also want to use @code{AC_FUNC_FSEEKO} to take advantage of some new
-interfaces, and @code{AC_TYPE_OFF_T} (just in case).
-
-If you do not use Autoconf, you can define the preprocessor symbol
-@code{_FILE_OFFSET_BITS} to 64 @emph{before} including any header
-files, for example by specifying the option
-@code{-D_FILE_OFFSET_BITS=64} on the compiler command line.  You will
-also want to define the preprocessor symbol @code{LARGEFILE_SOURCE} to
-1 in this case, to take advantage of some new interfaces.
-
-If you do not want to do either of the above, you probably know enough
-about the issue to invent your own solution.  Just keep in mind that
-the @acronym{GPGME} header file expects that largefile support is
-enabled, if it is available.  In particular, we do not support dual
-mode (@code{_LARGEFILE64_SOURCE}).
-
-
-@node Using Automake
-@section Using Automake
-@cindex automake
-@cindex autoconf
-
-It is much easier if you use GNU Automake instead of writing your own
-Makefiles.  If you do that you do not have to worry about finding and
-invoking the @command{gpgme-config} script at all.  @acronym{GPGME}
-provides an extension to Automake that does all the work for you.
-
-@c A simple macro for optional variables.
-@macro ovar{varname}
-@r{[}@var{\varname\}@r{]}
-@end macro
-@defmac AM_PATH_GPGME (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
-@defmacx AM_PATH_GPGME_PTH (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
-@defmacx AM_PATH_GPGME_PTHREAD (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
-Check whether @acronym{GPGME} (at least version @var{minimum-version},
-if given) exists on the host system.  If it is found, execute
-@var{action-if-found}, otherwise do @var{action-if-not-found}, if
-given.
-
-Additionally, the function defines @code{GPGME_CFLAGS} to the flags
-needed for compilation of the program to find the @file{gpgme.h}
-header file, and @code{GPGME_LIBS} to the linker flags needed to link
-the program to the @acronym{GPGME} library.
-
-@code{AM_PATH_GPGME_PTH} checks for the version of @acronym{GPGME}
-that can be used with GNU Pth, and defines @code{GPGME_PTH_CFLAGS} and
-@code{GPGME_PTH_LIBS}.
-
-@code{AM_PATH_GPGME_PTHREAD} checks for the version of @acronym{GPGME}
-that can be used with the native pthread implementation, and defines
-@code{GPGME_PTHREAD_CFLAGS} and @code{GPGME_PTHREAD_LIBS}.
-@end defmac
-
-You can use the defined Autoconf variables like this in your
-@file{Makefile.am}:
-
-@example
-AM_CPPFLAGS = $(GPGME_CFLAGS)
-LDADD = $(GPGME_LIBS)
-@end example
-
-
-@node Using Libtool
-@section Using Libtool
-@cindex libtool
-
-The easiest way is to just use GNU Libtool.  If you use libtool, and
-link to @code{libgpgme.la}, @code{libgpgme-pth.la} or
-@code{libgpgme-pthread.la} respectively, everything will be done
-automatically by Libtool.
-
-
-@node Library Version Check
-@section Library Version Check
-@cindex version check, of the library
-
-@deftypefun {const char *} gpgme_check_version (@w{const char *@var{required_version}})
-The function @code{gpgme_check_version} has three purposes.  It can be
-used to retrieve the version number of the library.  In addition it
-can verify that the version number is higher than a certain required
-version number.  In either case, the function initializes some
-sub-systems, and for this reason alone it must be invoked early in
-your program, before you make use of the other functions in
-@acronym{GPGME}.
-
-If @var{required_version} is @code{NULL}, the function returns a
-pointer to a statically allocated string containing the version number
-of the library.
-
-If @var{required_version} is not @code{NULL}, it should point to a
-string containing a version number, and the function checks that the
-version of the library is at least as high as the version number
-provided.  In this case, the function returns a pointer to a
-statically allocated string containing the version number of the
-library.  If @var{REQUIRED_VERSION} is not a valid version number, or
-if the version requirement is not met, the function returns
-@code{NULL}.
-
-If you use a version of a library that is backwards compatible with
-older releases, but contains additional interfaces which your program
-uses, this function provides a run-time check if the necessary
-features are provided by the installed version of the library.
-@end deftypefun
-
-
-After initializing @acronym{GPGME}, you should set the locale
-information to the locale required for your output terminal.  This
-locale information is needed for example for the curses and Gtk
-pinentry.  Here is an example of a complete initialization:
-
-@example
-#include <locale.h>
-#include <gpgme.h>
-
-void
-init_program (void)
-@{
-  /* Initialize the locale environment.  */
-  setlocale (LC_ALL, "");
-  gpgme_check_version (NULL);
-  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
-  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
-@}
-@end example
-
-Note that you are highly recommended to initialize the locale settings
-like this.  @acronym{GPGME} can not do this for you because it would
-not be thread safe.
-
-
-@node Signal Handling
-@section Signal Handling
-@cindex signals
-@cindex signal handling
-
-The @acronym{GPGME} library communicates with child processes (the
-crypto engines).  If a child process dies unexpectedly, for example
-due to a bug, or system problem, a @code{SIGPIPE} signal will be
-delivered to the application.  The default action is to abort the
-program.  To protect against this, @code{gpgme_check_version} sets the
-@code{SIGPIPE} signal action to @code{SIG_IGN}, which means that the
-signal will be ignored.
-
-@acronym{GPGME} will only do that if the signal action for
-@code{SIGPIPE} is @code{SIG_DEF} at the time
-@code{gpgme_check_version} is called.  If it is something different,
-@code{GPGME} will take no action.
-
-This means that if your application does not install any signal
-handler for @code{SIGPIPE}, you don't need to take any precautions.
-If you do install a signal handler for @code{SIGPIPE}, you must be
-prepared to handle any @code{SIGPIPE} events that occur due to
-@acronym{GPGME} writing to a defunct pipe.  Furthermore, if your
-application is multi-threaded, and you install a signal action for
-@code{SIGPIPE}, you must make sure you do this either before
-@code{gpgme_check_version} is called or afterwards.
-
-
-@node Multi Threading
-@section Multi Threading
-@cindex thread-safeness
-@cindex multi-threading
-
-The @acronym{GPGME} library is not entirely thread-safe, but it can
-still be used in a multi-threaded environment if some care is taken.
-If the following requirements are met, there should be no race
-conditions to worry about:
-
-@itemize @bullet
-@item
-@acronym{GPGME} supports the thread libraries pthread and GNU Pth.
-The support for this has to be enabled at compile time.
-@acronym{GPGME} will automatically detect the location in which the
-thread libraries are installed and activate the support for them at
-build time.
-
-Support for other thread libraries is very easy to add.  Please
-contact us if you have the need.
-
-@item
-If you want to use @acronym{GPGME} with threads, you must link to the
-right version of the library.  The name of the right library is
-@code{libgpgme-} followed by the name of the thread package you use.
-For example, if you use GNU Pth, the right name is
-@code{libgpgme-pth}.  Use the Automake macros or
-@command{gpgme-config} program for simplicity.
-
-
-@item
-The function @code{gpgme_check_version} must be called before any
-other function in the library, because it initializes the thread
-support subsystem in @acronym{GPGME}.  To achieve this in
-multi-threaded programs, you must synchronize the memory with respect
-to other threads that also want to use @acronym{GPGME}.  For this, it
-is sufficient to call @code{gpgme_check_version} before creating the
-other threads using @acronym{GPGME}@footnote{At least this is true for
-POSIX threads, as @code{pthread_create} is a function that
-synchronizes memory with respects to other threads.  There are many
-functions which have this property, a complete list can be found in
-POSIX, IEEE Std 1003.1-2003, Base Definitions, Issue 6, in the
-definition of the term ``Memory Synchronization''.  For other thread
-packages other, more relaxed or more strict rules may apply.}.
-
-@item
-Any @code{gpgme_data_t} and @code{gpgme_ctx_t} object must only be
-accessed by one thread at a time.  If multiple threads want to deal
-with the same object, the caller has to make sure that operations on
-that object are fully synchronized.
-
-@item
-Only one thread at any time is allowed to call @code{gpgme_wait}.  If
-multiple threads call this function, the caller must make sure that
-all invocations are fully synchronized.  It is safe to start
-asynchronous operations while a thread is running in gpgme_wait.
-
-@item
-The function @code{gpgme_strerror} is not thread safe.  You have to
-use @code{gpgme_strerror_r} instead.
-@end itemize
-
-
-@node Protocols and Engines
-@chapter Protocols and Engines
-@cindex protocol
-@cindex engine
-@cindex crypto engine
-@cindex backend
-@cindex crypto backend
-
-@acronym{GPGME} supports several cryptographic protocols, however, it
-does not implement them.  Rather it uses backends (also called
-engines) which implement the protocol.  @acronym{GPGME} uses
-inter-process communication to pass data back and forth between the
-application and the backend, but the details of the communication
-protocol and invocation of the backend is completely hidden by the
-interface.  All complexity is handled by @acronym{GPGME}.  Where an
-exchange of information between the application and the backend is
-necessary, @acronym{GPGME} provides the necessary callback function
-hooks and further interfaces.
-
-@deftp {Data type} {enum gpgme_protocol_t}
-@tindex gpgme_protocol_t
-The @code{gpgme_protocol_t} type specifies the set of possible protocol
-values that are supported by @acronym{GPGME}.  The following protocols
-are supported:
-
-@table @code
-@item GPGME_PROTOCOL_OpenPGP
-This specifies the OpenPGP protocol.
-
-@item GPGME_PROTOCOL_CMS
-This specifies the Cryptographic Message Syntax.
-@end table
-@end deftp
-
-
-@deftypefun {const char *} gpgme_get_protocol_name (@w{gpgme_protocol_t @var{protocol}})
-The function @code{gpgme_get_protocol_name} returns a statically
-allocated string describing the protocol @var{protocol}, or
-@code{NULL} if the protocol number is not valid.
-@end deftypefun
-
-@menu
-* Engine Version Check::          Verifying the engine version.
-* Engine Information::            Obtaining more information about the engines.
-* Engine Configuration::          Changing the engine configuration.
-* OpenPGP::                       Support for the OpenPGP protocol.
-* Cryptographic Message Syntax::  Support for the CMS.
-@end menu
-
-
-@node Engine Version Check
-@section Engine Version Check
-@cindex version check, of the engines
-
-@deftypefun gpgme_error_t gpgme_engine_check_version (@w{gpgme_protocol_t @var{protocol}})
-The function @code{gpgme_engine_check_version} verifies that the
-engine implementing the protocol @var{PROTOCOL} is installed in the
-expected path and meets the version requirement of @acronym{GPGME}.
-
-This function returns the error code @code{GPG_ERR_NO_ERROR} if the
-engine is available and @code{GPG_ERR_INV_ENGINE} if it is not.
-@end deftypefun
-
-
-@node Engine Information
-@section Engine Information
-@cindex engine, information about
-
-@deftp {Data type} {gpgme_engine_info_t}
-@tindex gpgme_protocol_t
-The @code{gpgme_engine_info_t} type specifies a pointer to a structure
-describing a crypto engine.  The structure contains the following
-elements:
-
-@table @code
-@item gpgme_engine_info_t next
-This is a pointer to the next engine info structure in the linked
-list, or @code{NULL} if this is the last element.
-
-@item gpgme_protocol_t protocol
-This is the protocol for which the crypto engine is used.  You can
-convert this to a string with @code{gpgme_get_protocol_name} for
-printing.
-
-@item const char *file_name
-This is a string holding the file name of the executable of the crypto
-engine.  Currently, it is never @code{NULL}, but using @code{NULL} is
-reserved for future use, so always check before you use it.
-
-@item const char *home_dir
-This is a string holding the directory name of the crypto engine's
-configuration directory.  If it is @code{NULL}, then the default
-directory is used.
-
-@item const char *version
-This is a string containing the version number of the crypto engine.
-It might be @code{NULL} if the version number can not be determined,
-for example because the executable doesn't exist or is invalid.
-
-@item const char *req_version
-This is a string containing the minimum required version number of the
-crypto engine for @acronym{GPGME} to work correctly.  This is the
-version number that @code{gpgme_engine_check_version} verifies
-against.  Currently, it is never @code{NULL}, but using @code{NULL} is
-reserved for future use, so always check before you use it.
-@end table
-@end deftp
-
-@deftypefun gpgme_error_t gpgme_get_engine_info (@w{gpgme_engine_info_t *@var{info}})
-The function @code{gpgme_get_engine_info} returns a linked list of
-engine info structures in @var{info}.  Each info structure describes
-the defaults of one configured backend.
-
-The memory for the info structures is allocated the first time this
-function is invoked, and must not be freed by the caller.
-
-This function returns the error code @code{GPG_ERR_NO_ERROR} if
-successful, and a system error if the memory could not be allocated.
-@end deftypefun
-
-Here is an example how you can provide more diagnostics if you receive
-an error message which indicates that the crypto engine is invalid.
-
-@example
-gpgme_ctx_t ctx;
-gpgme_error_t err;
-
-[...]
-
-if (gpgme_err_code (err) == GPG_ERR_INV_ENGINE)
-  @{
-    gpgme_engine_info_t info;
-    err = gpgme_get_engine_info (&info);
-    if (!err)
-      @{
-        while (info && info->protocol != gpgme_get_protocol (ctx))
-          info = info->next;
-        if (!info)
-          fprintf (stderr, "GPGME compiled without support for protocol %s",
-                   gpgme_get_protocol_name (info->protocol));
-        else if (info->path && !info->version)
-          fprintf (stderr, "Engine %s not installed properly",
-                   info->path);
-        else if (info->path && info->version && info->req_version)
-          fprintf (stderr, "Engine %s version %s installed, "
-                   "but at least version %s required", info->path,
-                   info->version, info->req_version);
-        else
-          fprintf (stderr, "Unknown problem with engine for protocol %s",
-                   gpgme_get_protocol_name (info->protocol));
-      @}
-  @}
-@end example
-
-
-@node Engine Configuration
-@section Engine Configuration
-@cindex engine, configuration of
-@cindex configuration of crypto backend
-
-You can change the configuration of a backend engine, and thus change
-the executable program and configuration directory to be used.  You
-can make these changes the default or set them for some contexts
-individually.
-
-@deftypefun gpgme_error_t gpgme_set_engine_info (@w{gpgme_protocol_t @var{proto}}, @w{const char *@var{file_name}}, @w{const char *@var{home_dir}})
-The function @code{gpgme_set_engine_info} changes the default
-configuration of the crypto engine implementing the protocol
-@var{proto}.
-
-@var{file_name} is the file name of the executable program
-implementing this protocol, and @var{home_dir} is the directory name
-of the configuration directory for this crypto engine.  If
-@var{home_dir} is @code{NULL}, the engine's default will be used.
-
-The new defaults are not applied to already created GPGME contexts.
-
-This function returns the error code @code{GPG_ERR_NO_ERROR} if
-successful, or an eror code on failure.
-@end deftypefun
-
-The functions @code{gpgme_ctx_get_engine_info} and
-@code{gpgme_ctx_set_engine_info} can be used to change the engine
-configuration per context.  @xref{Crypto Engine}.
-
-
-@node OpenPGP
-@section OpenPGP
-@cindex OpenPGP
-@cindex GnuPG
-@cindex protocol, GnuPG
-@cindex engine, GnuPG
-
-OpenPGP is implemented by GnuPG, the @acronym{GNU} Privacy Guard.
-This is the first protocol that was supported by @acronym{GPGME}.
-
-The OpenPGP protocol is specified by @code{GPGME_PROTOCOL_OpenPGP}.
-
-
-@node Cryptographic Message Syntax
-@section Cryptographic Message Syntax
-@cindex CMS
-@cindex cryptographic message syntax
-@cindex GpgSM
-@cindex protocol, CMS
-@cindex engine, GpgSM
-@cindex S/MIME
-@cindex protocol, S/MIME
-
-@acronym{CMS} is implemented by GpgSM, the S/MIME implementation for
-GnuPG.
-
-The @acronym{CMS} protocol is specified by @code{GPGME_PROTOCOL_CMS}.
-
-
-@node Algorithms
-@chapter Algorithms
-@cindex algorithms
-
-The crypto backends support a variety of algorithms used in public key
-cryptography.  The following sections list the identifiers used to
-denote such an algorithm.
-
-@menu
-* Public Key Algorithms::         A list of all public key algorithms.
-* Hash Algorithms::               A list of all hash algorithms.
-@end menu
-
-
-@node Public Key Algorithms
-@section Public Key Algorithms
-@cindex algorithms, public key
-@cindex public key algorithms
-
-Public key algorithms are used for encryption, decryption, signing and
-verification of signatures.
-
-@deftp {Data type} {enum gpgme_pubkey_algo_t}
-@tindex gpgme_pubkey_algo_t
-The @code{gpgme_pubkey_algo_t} type specifies the set of all public key
-algorithms that are supported by @acronym{GPGME}.  Possible values
-are:
-
-@table @code
-@item GPGME_PK_RSA
-This value indicates the RSA (Rivest, Shamir, Adleman) algorithm.
-
-@item GPGME_PK_RSA_E
-Deprecated.  This value indicates the RSA (Rivest, Shamir, Adleman)
-algorithm for encryption and decryption only.
-
-@item GPGME_PK_RSA_S
-Deprecated.  This value indicates the RSA (Rivest, Shamir, Adleman)
-algorithm for signing and verification only.
-
-@item GPGME_PK_DSA
-This value indicates DSA, the Digital Signature Algorithm.
-
-@item GPGME_PK_ELG
-This value indicates ElGamal.
-
-@item GPGME_PK_ELG_E
-This value also indicates ElGamal and is used specifically in GnuPG.
-@end table
-@end deftp
-
-@deftypefun {const char *} gpgme_pubkey_algo_name (@w{gpgme_pubkey_algo_t @var{algo}})
-The function @code{gpgme_pubkey_algo_name} returns a pointer to a
-statically allocated string containing a description of the public key
-algorithm @var{algo}.  This string can be used to output the name of
-the public key algorithm to the user.
-
-If @var{algo} is not a valid public key algorithm, @code{NULL} is
-returned.
-@end deftypefun
-
-
-@node Hash Algorithms
-@section Hash Algorithms
-@cindex algorithms, hash
-@cindex algorithms, message digest
-@cindex hash algorithms
-@cindex message digest algorithms
-
-Hash (message digest) algorithms are used to compress a long message
-to make it suitable for public key cryptography.
-
-@deftp {Data type} {enum gpgme_hash_algo_t}
-@tindex gpgme_hash_algo_t
-The @code{gpgme_hash_algo_t} type specifies the set of all hash algorithms
-that are supported by @acronym{GPGME}.  Possible values are:
-
-@table @code
-@item GPGME_MD_MD5
-@item GPGME_MD_SHA1
-@item GPGME_MD_RMD160
-@item GPGME_MD_MD2
-@item GPGME_MD_TIGER
-@item GPGME_MD_HAVAL
-@item GPGME_MD_SHA256
-@item GPGME_MD_SHA384
-@item GPGME_MD_SHA512
-@item GPGME_MD_MD4
-@item GPGME_MD_CRC32
-@item GPGME_MD_CRC32_RFC1510
-@item GPGME_MD_CRC24_RFC2440
-@end table
-@end deftp
-
-@deftypefun {const char *} gpgme_hash_algo_name (@w{gpgme_hash_algo_t @var{algo}})
-The function @code{gpgme_hash_algo_name} returns a pointer to a
-statically allocated string containing a description of the hash
-algorithm @var{algo}.  This string can be used to output the name of
-the hash algorithm to the user.
-
-If @var{algo} is not a valid hash algorithm, @code{NULL} is returned.
-@end deftypefun
-
-
-@node Error Handling
-@chapter Error Handling
-@cindex error handling
-
-Many functions in @acronym{GPGME} can return an error if they fail.
-For this reason, the application should always catch the error
-condition and take appropriate measures, for example by releasing the
-resources and passing the error up to the caller, or by displaying a
-descriptive message to the user and cancelling the operation.
-
-Some error values do not indicate a system error or an error in the
-operation, but the result of an operation that failed properly.  For
-example, if you try to decrypt a tempered message, the decryption will
-fail.  Another error value actually means that the end of a data
-buffer or list has been reached.  The following descriptions explain
-for many error codes what they mean usually.  Some error values have
-specific meanings if returned by a certain functions.  Such cases are
-described in the documentation of those functions.
-
-@acronym{GPGME} uses the @code{libgpg-error} library.  This allows to
-share the error codes with other components of the GnuPG system, and
-thus pass error values transparently from the crypto engine, or some
-helper application of the crypto engine, to the user.  This way no
-information is lost.  As a consequence, @acronym{GPGME} does not use
-its own identifiers for error codes, but uses those provided by
-@code{libgpg-error}.  They usually start with @code{GPG_ERR_}.
-
-However, @acronym{GPGME} does provide aliases for the functions
-defined in libgpg-error, which might be preferred for name space
-consistency.
-
-@menu
-* Error Values::                  The error value and what it means.
-* Error Sources::                 A list of important error sources.
-* Error Codes::                   A list of important error codes.
-* Error Strings::                 How to get a descriptive string from a value.
-@end menu
-
-
-@node Error Values
-@section Error Values
-@cindex error values
-@cindex error codes
-@cindex error sources
-
-@deftp {Data type} {gpgme_err_code_t}
-The @code{gpgme_err_code_t} type is an alias for the @code{libgpg-error}
-type @code{gpg_err_code_t}.  The error code indicates the type of an
-error, or the reason why an operation failed.
-
-A list of important error codes can be found in the next section.
-@end deftp
-
-@deftp {Data type} {gpgme_err_source_t}
-The @code{gpgme_err_source_t} type is an alias for the
-@code{libgpg-error} type @code{gpg_err_source_t}.  The error source
-has not a precisely defined meaning.  Sometimes it is the place where
-the error happened, sometimes it is the place where an error was
-encoded into an error value.  Usually the error source will give an
-indication to where to look for the problem.  This is not always true,
-but it is attempted to achieve this goal.
-
-A list of important error sources can be found in the next section.
-@end deftp
-
-@deftp {Data type} {gpgme_error_t}
-The @code{gpgme_error_t} type is an alias for the @code{libgpg-error}
-type @code{gpg_error_t}.  An error value like this has always two
-components, an error code and an error source.  Both together form the
-error value.
-
-Thus, the error value can not be directly compared against an error
-code, but the accessor functions described below must be used.
-However, it is guaranteed that only 0 is used to indicate success
-(@code{GPG_ERR_NO_ERROR}), and that in this case all other parts of
-the error value are set to 0, too.
-
-Note that in @acronym{GPGME}, the error source is used purely for
-diagnostical purposes.  Only the error code should be checked to test
-for a certain outcome of a function.  The manual only documents the
-error code part of an error value.  The error source is left
-unspecified and might be anything.
-@end deftp
-
-@deftypefun {static inline gpgme_err_code_t} gpgme_err_code (@w{gpgme_error_t @var{err}})
-The static inline function @code{gpgme_err_code} returns the
-@code{gpgme_err_code_t} component of the error value @var{err}.  This
-function must be used to extract the error code from an error value in
-order to compare it with the @code{GPG_ERR_*} error code macros.
-@end deftypefun
-
-@deftypefun {static inline gpgme_err_source_t} gpgme_err_source (@w{gpgme_error_t @var{err}})
-The static inline function @code{gpgme_err_source} returns the
-@code{gpgme_err_source_t} component of the error value @var{err}.  This
-function must be used to extract the error source from an error value in
-order to compare it with the @code{GPG_ERR_SOURCE_*} error source macros.
-@end deftypefun
-
-@deftypefun {static inline gpgme_error_t} gpgme_err_make (@w{gpgme_err_source_t @var{source}}, @w{gpgme_err_code_t @var{code}})
-The static inline function @code{gpgme_err_make} returns the error
-value consisting of the error source @var{source} and the error code
-@var{code}.
-
-This function can be used in callback functions to construct an error
-value to return it to the library.
-@end deftypefun
-
-@deftypefun {static inline gpgme_error_t} gpgme_error (@w{gpgme_err_code_t @var{code}})
-The static inline function @code{gpgme_error} returns the error value
-consisting of the default error source and the error code @var{code}.
-
-For @acronym{GPGME} applications, the default error source is
-@code{GPG_ERR_SOURCE_USER_1}.  You can define
-@code{GPGME_ERR_SOURCE_DEFAULT} before including @file{gpgme.h} to
-change this default.
-
-This function can be used in callback functions to construct an error
-value to return it to the library.
-@end deftypefun
-
-The @code{libgpg-error} library provides error codes for all system
-error numbers it knows about.  If @var{err} is an unknown error
-number, the error code @code{GPG_ERR_UNKNOWN_ERRNO} is used.  The
-following functions can be used to construct error values from system
-errnor numbers.
-
-@deftypefun {gpgme_error_t} gpgme_err_make_from_errno (@w{gpgme_err_source_t @var{source}}, @w{int @var{err}})
-The function @code{gpgme_err_make_from_errno} is like
-@code{gpgme_err_make}, but it takes a system error like @code{errno}
-instead of a @code{gpgme_err_code_t} error code.
-@end deftypefun
-
-@deftypefun {gpgme_error_t} gpgme_error_from_errno (@w{int @var{err}})
-The function @code{gpgme_error_from_errno} is like @code{gpgme_error},
-but it takes a system error like @code{errno} instead of a
-@code{gpgme_err_code_t} error code.
-@end deftypefun
-
-Sometimes you might want to map system error numbers to error codes
-directly, or map an error code representing a system error back to the
-system error number.  The following functions can be used to do that.
-
-@deftypefun {gpgme_err_code_t} gpgme_err_code_from_errno (@w{int @var{err}})
-The function @code{gpgme_err_code_from_errno} returns the error code
-for the system error @var{err}.  If @var{err} is not a known system
-error, the function returns @code{GPG_ERR_UNKNOWN_ERRNO}.
-@end deftypefun
-
-@deftypefun {int} gpgme_err_code_to_errno (@w{gpgme_err_code_t @var{err}})
-The function @code{gpgme_err_code_to_errno} returns the system error
-for the error code @var{err}.  If @var{err} is not an error code
-representing a system error, or if this system error is not defined on
-this system, the function returns @code{0}.
-@end deftypefun
-
-
-@node Error Sources
-@section Error Sources
-@cindex error codes, list of
-
-The library @code{libgpg-error} defines an error source for every
-component of the GnuPG system.  The error source part of an error
-value is not well defined.  As such it is mainly useful to improve the
-diagnostic error message for the user.
-
-If the error code part of an error value is @code{0}, the whole error
-value will be @code{0}.  In this case the error source part is of
-course @code{GPG_ERR_SOURCE_UNKNOWN}.
-
-The list of error sources that might occur in applications using
-@acronym{GPGME} is:
-
-@table @code
-@item GPG_ERR_SOURCE_UNKNOWN
-The error source is not known.  The value of this error source is
-@code{0}.
-
-@item GPG_ERR_SOURCE_GPGME
-The error source is @acronym{GPGME} itself.  This is the default for
-errors that occur in the @acronym{GPGME} library.
-
-@item GPG_ERR_SOURCE_GPG
-The error source is GnuPG, which is the crypto engine used for the
-OpenPGP protocol.
-
-@item GPG_ERR_SOURCE_GPGSM
-The error source is GPGSM, which is the crypto engine used for the
-CMS protocol.
-
-@item GPG_ERR_SOURCE_GCRYPT
-The error source is @code{libgcrypt}, which is used by crypto engines
-to perform cryptographic operations.
-
-@item GPG_ERR_SOURCE_GPGAGENT
-The error source is @command{gpg-agent}, which is used by crypto
-engines to perform operations with the secret key.
-
-@item GPG_ERR_SOURCE_PINENTRY
-The error source is @command{pinentry}, which is used by
-@command{gpg-agent} to query the passphrase to unlock a secret key.
-
-@item GPG_ERR_SOURCE_SCD
-The error source is the SmartCard Daemon, which is used by
-@command{gpg-agent} to delegate operations with the secret key to a
-SmartCard.
-
-@item GPG_ERR_SOURCE_KEYBOX
-The error source is @code{libkbx}, a library used by the crypto
-engines to manage local keyrings.
-
-@item GPG_ERR_SOURCE_USER_1
-@item GPG_ERR_SOURCE_USER_2
-@item GPG_ERR_SOURCE_USER_3
-@item GPG_ERR_SOURCE_USER_4
-These error sources are not used by any GnuPG component and can be
-used by other software.  For example, applications using
-@acronym{GPGME} can use them to mark error values coming from callback
-handlers.  Thus @code{GPG_ERR_SOURCE_USER_1} is the default for errors
-created with @code{gpgme_error} and @code{gpgme_error_from_errno},
-unless you define @code{GPGME_ERR_SOURCE_DEFAULT} before including
-@file{gpgme.h}.
-@end table
-
-
-@node Error Codes
-@section Error Codes
-@cindex error codes, list of
-
-The library @code{libgpg-error} defines many error values.  Most of
-them are not used by @code{GPGME} directly, but might be returned by
-@acronym{GPGME} because it received them from the crypto engine.  The
-below list only includes such error codes that have a specific meaning
-in @code{GPGME}, or which are so common that you should know about
-them.
-
-@table @code
-@item GPG_ERR_EOF
-This value indicates the end of a list, buffer or file.
-
-@item GPG_ERR_NO_ERROR
-This value indicates success.  The value of this error code is
-@code{0}.  Also, it is guaranteed that an error value made from the
-error code @code{0} will be @code{0} itself (as a whole).  This means
-that the error source information is lost for this error code,
-however, as this error code indicates that no error occured, this is
-generally not a problem.
-
-@item GPG_ERR_GENERAL
-This value means that something went wrong, but either there is not
-enough information about the problem to return a more useful error
-value, or there is no separate error value for this type of problem.
-
-@item GPG_ERR_ENOMEM
-This value means that an out-of-memory condition occurred.
-
-@item GPG_ERR_E...
-System errors are mapped to GPG_ERR_FOO where FOO is the symbol for
-the system error.
-
-@item GPG_ERR_INV_VALUE
-This value means that some user provided data was out of range.  This
-can also refer to objects.  For example, if an empty
-@code{gpgme_data_t} object was expected, but one containing data was
-provided, this error value is returned.
-
-@item GPG_ERR_UNUSABLE_PUBKEY
-This value means that some recipients for a message were invalid.
-
-@item GPG_ERR_UNUSABLE_SECKEY
-This value means that some signers were invalid.
-
-@item GPG_ERR_NO_DATA
-This value means that a @code{gpgme_data_t} object which was expected
-to have content was found empty.
-
-@item GPG_ERR_CONFLICT
-This value means that a conflict of some sort occurred.
-
-@item GPG_ERR_NOT_IMPLEMENTED
-This value indicates that the specific function (or operation) is not
-implemented.  This error should never happen.  It can only occur if
-you use certain values or configuration options which do not work,
-but for which we think that they should work at some later time.
-
-@item GPG_ERR_DECRYPT_FAILED
-This value indicates that a decryption operation was unsuccessful.
-
-@item GPG_ERR_BAD_PASSPHRASE
-This value means that the user did not provide a correct passphrase
-when requested.
-
-@item GPG_ERR_CANCELED
-This value means that the operation was canceled.
-
-@item GPG_ERR_INV_ENGINE
-This value means that the engine that implements the desired protocol
-is currently not available.  This can either be because the sources
-were configured to exclude support for this engine, or because the
-engine is not installed properly.
-
-@item GPG_ERR_AMBIGUOUS_NAME
-This value indicates that a user ID or other specifier did not specify
-a unique key.
-
-@item GPG_ERR_WRONG_KEY_USAGE
-This value indicates that a key is not used appropriately.
-
-@item GPG_ERR_CERT_REVOKED
-This value indicates that a key signature was revoced.
-
-@item GPG_ERR_CERT_EXPIRED
-This value indicates that a key signature expired.
-
-@item GPG_ERR_NO_CRL_KNOWN
-This value indicates that no certificate revocation list is known for
-the certificate.
-
-@item GPG_ERR_NO_POLICY_MATCH
-This value indicates that a policy issue occured.
-
-@item GPG_ERR_NO_SECKEY
-This value indicates that no secret key for the user ID is available.
-
-@item GPG_ERR_MISSING_CERT
-This value indicates that a key could not be imported because the
-issuer certificate is missing.
-
-@item GPG_ERR_BAD_CERT_CHAIN
-This value indicates that a key could not be imported because its
-certificate chain is not good, for example it could be too long.
-
-@item GPG_ERR_UNSUPPORTED_ALGORITHM
-This value means a verification failed because the cryptographic
-algorithm is not supported by the crypto backend.
-
-@item GPG_ERR_BAD_SIGNATURE
-This value means a verification failed because the signature is bad.
-
-@item GPG_ERR_NO_PUBKEY
-This value means a verification failed because the public key is not
-available.
-
-@item GPG_ERR_USER_1
-@item GPG_ERR_USER_2
-@item ...
-@item GPG_ERR_USER_16
-These error codes are not used by any GnuPG component and can be
-freely used by other software.  Applications using @acronym{GPGME}
-might use them to mark specific errors returned by callback handlers
-if no suitable error codes (including the system errors) for
-these errors exist already.
-@end table
-
-
-@node Error Strings
-@section Error Strings
-@cindex error values, printing of
-@cindex error codes, printing of
-@cindex error sources, printing of
-@cindex error strings
-
-@deftypefun {const char *} gpgme_strerror (@w{gpgme_error_t @var{err}})
-The function @code{gpgme_strerror} returns a pointer to a statically
-allocated string containing a description of the error code contained
-in the error value @var{err}.  This string can be used to output a
-diagnostic message to the user.
-
-This function is not thread safe.  Use @code{gpgme_strerror_r} in
-multi-threaded programs.
-@end deftypefun
-
-
-@deftypefun {char *} gpgme_strerror_r (@w{gpgme_error_t @var{err}})
-The function @code{gpgme_strerror_r} returns a pointer to a
-dynamically allocated string containing a description of the error
-code contained in the error value @var{err}.  This string can be used
-to output a diagnostic message to the user.  When it is not needed
-anymore, the user must deallocate it with @code{free}.
-@end deftypefun
-
-
-@deftypefun {const char *} gpgme_strsource (@w{gpgme_error_t @var{err}})
-The function @code{gpgme_strerror} returns a pointer to a statically
-allocated string containing a description of the error source
-contained in the error value @var{err}.  This string can be used to
-output a diagnostic message to the user.
-@end deftypefun
-
-The following example illustrates the use of @code{gpgme_strerror}:
-
-@example
-gpgme_ctx_t ctx;
-gpgme_error_t err = gpgme_new (&ctx);
-if (err)
-  @{
-    fprintf (stderr, "%s: creating GpgME context failed: %s: %s\n",
-             argv[0], gpgme_strsource (err), gpgme_strerror (err));
-    exit (1);
-  @}
-@end example
-
-
-@node Exchanging Data
-@chapter Exchanging Data
-@cindex data, exchanging
-
-A lot of data has to be exchanged between the user and the crypto
-engine, like plaintext messages, ciphertext, signatures and
-information about the keys.  The technical details about exchanging
-the data information are completely abstracted by @acronym{GPGME}.
-The user provides and receives the data via @code{gpgme_data_t} objects,
-regardless of the communication protocol between @acronym{GPGME} and
-the crypto engine in use.
-
-@deftp {Data type} {gpgme_data_t}
-The @code{gpgme_data_t} type is a handle for a container for generic
-data, which is used by @acronym{GPGME} to exchange data with the user.
-@end deftp
-
-@menu
-* Creating Data Buffers::         Creating new data buffers.
-* Destroying Data Buffers::       Releasing data buffers.
-* Manipulating Data Buffers::     Operations on data buffers.
-@end menu
-
-
-@node Creating Data Buffers
-@section Creating Data Buffers
-@cindex data buffer, creation
-
-Data objects can be based on memory, files, or callback functions
-provided by the user.  Not all operations are supported by all
-objects.
-
-
-@menu
-* Memory Based Data Buffers::     Creating memory based data buffers.
-* File Based Data Buffers::       Creating file based data buffers.
-* Callback Based Data Buffers::   Creating callback based data buffers.
-@end menu
-
-
-@node Memory Based Data Buffers
-@subsection Memory Based Data Buffers
-
-Memory based data objects store all data in allocated memory.  This is
-convenient, but only practical for an amount of data that is a
-fraction of the available physical memory.  The data has to be copied
-from its source and to its destination, which can often be avoided by
-using one of the other data object 
-
-@deftypefun gpgme_error_t gpgme_data_new (@w{gpgme_data_t *@var{dh}})
-The function @code{gpgme_data_new} creates a new @code{gpgme_data_t}
-object and returns a handle for it in @var{dh}.  The data object is
-memory based and initially empty.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{dh} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_data_new_from_mem (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{buffer}}, @w{size_t @var{size}}, @w{int @var{copy}})
-The function @code{gpgme_data_new_from_mem} creates a new
-@code{gpgme_data_t} object and fills it with @var{size} bytes starting
-from @var{buffer}.
-
-If @var{copy} is not zero, a private copy of the data is made.  If
-@var{copy} is zero, the data is taken from the specified buffer as
-needed, and the user has to ensure that the buffer remains valid for
-the whole life span of the data object.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{dh} or @var{buffer} is not a valid pointer, and
-@code{GPG_ERR_ENOMEM} if not enough memory is available.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_data_new_from_file (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{filename}}, @w{int @var{copy}})
-The function @code{gpgme_data_new_from_file} creates a new
-@code{gpgme_data_t} object and fills it with the content of the file
-@var{filename}.
-
-If @var{copy} is not zero, the whole file is read in at initialization
-time and the file is not used anymore after that.  This is the only
-mode supported currently.  Later, a value of zero for @var{copy} might
-cause all reads to be delayed until the data is needed, but this is
-not yet implemented.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{dh} or @var{filename} is not a valid pointer,
-@code{GPG_ERR_NOT_IMPLEMENTED} if @var{code} is zero, and
-@code{GPG_ERR_ENOMEM} if not enough memory is available.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_data_new_from_filepart (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{filename}}, @w{FILE *@var{fp}}, @w{off_t @var{offset}}, @w{size_t @var{length}})
-The function @code{gpgme_data_new_from_filepart} creates a new
-@code{gpgme_data_t} object and fills it with a part of the file specified
-by @var{filename} or @var{fp}.
-
-Exactly one of @var{filename} and @var{fp} must be non-zero, the other
-must be zero.  The argument that is not zero specifies the file from
-which @var{length} bytes are read into the data object, starting from
-@var{offset}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{dh} and exactly one of @var{filename} and @var{fp} is not a valid
-pointer, and @code{GPG_ERR_ENOMEM} if not enough memory is available.
-@end deftypefun
-
-
-@node File Based Data Buffers
-@subsection File Based Data Buffers
-
-File based data objects operate directly on file descriptors or
-streams.  Only a small amount of data is stored in core at any time,
-so the size of the data objects is not limited by @acronym{GPGME}.
-
-@deftypefun gpgme_error_t gpgme_data_new_from_fd (@w{gpgme_data_t *@var{dh}}, @w{int @var{fd}})
-The function @code{gpgme_data_new_from_fd} creates a new
-@code{gpgme_data_t} object and uses the file descriptor @var{fd} to read
-from (if used as an input data object) and write to (if used as an
-output data object).
-
-When using the data object as an input buffer, the function might read
-a bit more from the file descriptor than is actually needed by the
-crypto engine in the desired operation because of internal buffering.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_data_new_from_stream (@w{gpgme_data_t *@var{dh}}, @w{FILE *@var{stream}})
-The function @code{gpgme_data_new_from_stream} creates a new
-@code{gpgme_data_t} object and uses the I/O stream @var{stream} to read
-from (if used as an input data object) and write to (if used as an
-output data object).
-
-When using the data object as an input buffer, the function might read
-a bit more from the stream than is actually needed by the crypto
-engine in the desired operation because of internal buffering.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-
-@node Callback Based Data Buffers
-@subsection Callback Based Data Buffers
-
-If neither memory nor file based data objects are a good fit for your
-application, you can implement the functions a data object provides
-yourself and create a data object from these callback functions.
-
-@deftp {Data type} {ssize_t (*gpgme_data_read_cb_t) (@w{void *@var{handle}}, @w{void @var{*buffer}}, @w{size_t @var{size}})}
-@tindex gpgme_data_read_cb_t
-The @code{gpgme_data_read_cb_t} type is the type of functions which
-@acronym{GPGME} calls if it wants to read data from a user-implemented
-data object.  The function should read up to @var{size} bytes from the
-current read position into the space starting at @var{buffer}.  The
-@var{handle} is provided by the user at data object creation time.
-
-The function should return the number of bytes read, 0 on EOF, and -1
-on error.  If an error occurs, @var{errno} should be set to describe
-the type of the error.
-@end deftp
-
-@deftp {Data type} {ssize_t (*gpgme_data_write_cb_t) (@w{void *@var{handle}}, @w{const void @var{*buffer}}, @w{size_t @var{size}})}
-@tindex gpgme_data_write_cb_t
-The @code{gpgme_data_write_cb_t} type is the type of functions which
-@acronym{GPGME} calls if it wants to write data to a user-implemented
-data object.  The function should write up to @var{size} bytes to the
-current write position from the space starting at @var{buffer}.  The
-@var{handle} is provided by the user at data object creation time.
-
-The function should return the number of bytes written, and -1 on
-error.  If an error occurs, @var{errno} should be set to describe the
-type of the error.
-@end deftp
-
-@deftp {Data type} {off_t (*gpgme_data_seek_cb_t) (@w{void *@var{handle}}, @w{off_t @var{offset}}, @w{int @var{whence}})}
-@tindex gpgme_data_seek_cb_t
-The @code{gpgme_data_seek_cb_t} type is the type of functions which
-@acronym{GPGME} calls if it wants to change the current read/write
-position in a user-implemented data object, just like the @code{lseek}
-function.
-
-The function should return the new read/write position, and -1 on
-error.  If an error occurs, @var{errno} should be set to describe the
-type of the error.
-@end deftp
-
-@deftp {Data type} {void (*gpgme_data_release_cb_t) (@w{void *@var{handle}})}
-@tindex gpgme_data_release_cb_t
-The @code{gpgme_data_release_cb_t} type is the type of functions which
-@acronym{GPGME} calls if it wants to destroy a user-implemented data
-object.  The @var{handle} is provided by the user at data object
-creation time.
-@end deftp
-
-@deftp {Data type} {struct gpgme_data_cbs}
-This structure is used to store the data callback interface functions
-described above.  It has the following members:
-
-@table @code
-@item gpgme_data_read_cb_t read
-This is the function called by @acronym{GPGME} to read data from the
-data object.  It is only required for input data object.
-
-@item gpgme_data_write_cb_t write
-This is the function called by @acronym{GPGME} to write data to the
-data object.  It is only required for output data object.
-
-@item gpgme_data_seek_cb_t seek
-This is the function called by @acronym{GPGME} to change the current
-read/write pointer in the data object (if available).  It is optional.
-
-@item gpgme_data_release_cb_t release
-This is the function called by @acronym{GPGME} to release a data
-object.  It is optional.
-@end table
-@end deftp
-
-@deftypefun gpgme_error_t gpgme_data_new_from_cbs (@w{gpgme_data_t *@var{dh}}, @w{gpgme_data_cbs_t @var{cbs}}, @w{void *@var{handle}})
-The function @code{gpgme_data_new_from_cbs} creates a new
-@code{gpgme_data_t} object and uses the user-provided callback functions
-to operate on the data object.
-
-The handle @var{handle} is passed as first argument to the callback
-functions.  This can be used to identify this data object.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-The following interface is deprecated and only provided for backward
-compatibility.  Don't use it.  It will be removed in a future version
-of @acronym{GPGME}.
-
-@deftypefun gpgme_error_t gpgme_data_new_with_read_cb (@w{gpgme_data_t *@var{dh}}, @w{int (*@var{readfunc})} (@w{void *@var{hook}}, @w{char *@var{buffer}}, @w{size_t @var{count}}, @w{size_t *@var{nread}}), @w{void *@var{hook_value}})
-The function @code{gpgme_data_new_with_read_cb} creates a new
-@code{gpgme_data_t} object and uses the callback function @var{readfunc}
-to retrieve the data on demand.  As the callback function can supply
-the data in any way it wants, this is the most flexible data type
-@acronym{GPGME} provides.  However, it can not be used to write data.
-
-The callback function receives @var{hook_value} as its first argument
-whenever it is invoked.  It should return up to @var{count} bytes in
-@var{buffer}, and return the number of bytes actually read in
-@var{nread}.  It may return @code{0} in @var{nread} if no data is
-currently available.  To indicate @code{EOF} the function should
-return with an error code of @code{-1} and set @var{nread} to
-@code{0}.  The callback function may support to reset its internal
-read pointer if it is invoked with @var{buffer} and @var{nread} being
-@code{NULL} and @var{count} being @code{0}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-data object was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{dh} or @var{readfunc} is not a valid pointer, and
-@code{GPG_ERR_ENOMEM} if not enough memory is available.
-@end deftypefun
-
-
-@node Destroying Data Buffers
-@section Destroying Data Buffers
-@cindex data buffer, destruction
-
-@deftypefun void gpgme_data_release (@w{gpgme_data_t @var{dh}})
-The function @code{gpgme_data_release} destroys the data object with
-the handle @var{dh}.  It releases all associated resources that were
-not provided by the user in the first place.
-@end deftypefun
-
-@deftypefun {char *} gpgme_data_release_and_get_mem (@w{gpgme_data_t @var{dh}}, @w{size_t *@var{length}})
-The function @code{gpgme_data_release_and_get_mem} is like
-@code{gpgme_data_release}, except that it returns the data buffer and
-its length that was provided by the object.
-
-The user has to release the buffer with @code{gpgme_free}.  In case
-the user provided the data buffer in non-copy mode, a copy will be
-made for this purpose.
-
-In case an error returns, or there is no suitable data buffer that can
-be returned to the user, the function will return @code{NULL}.
-@end deftypefun
-
-
-@deftypefun void gpgme_free (@w{void *@var{buffer}})
-The function @code{gpgme_free} releases the memory returned by
-@code{gpgme_data_release_and_get_mem}.  It should be used instead of
-the system libraries @code{free} function in case different allocators
-are used in a single program.
-@end deftypefun
-
-
-@node Manipulating Data Buffers
-@section Manipulating Data Buffers
-@cindex data buffer, manipulation
-
-Data buffers contain data and meta-data.  The following operations can
-be used to manipulate both.
-
-
-@menu
-* Data Buffer I/O Operations::    I/O operations on data buffers.
-* Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
-@end menu
-
-
-@node Data Buffer I/O Operations
-@subsection Data Buffer I/O Operations
-@cindex data buffer, I/O operations
-@cindex data buffer, read
-@cindex data buffer, write
-@cindex data buffer, seek
-
-@deftypefun ssize_t gpgme_data_read (@w{gpgme_data_t @var{dh}}, @w{void *@var{buffer}}, @w{size_t @var{length}})
-The function @code{gpgme_data_read} reads up to @var{length} bytes
-from the data object with the handle @var{dh} into the space starting
-at @var{buffer}.
-
-If no error occurs, the actual amount read is returned.  If the end of
-the data object is reached, the function returns 0.
-
-In all other cases, the function returns -1 and sets @var{errno}.
-@end deftypefun
-
-@deftypefun ssize_t gpgme_data_write (@w{gpgme_data_t @var{dh}}, @w{const void *@var{buffer}}, @w{size_t @var{size}})
-The function @code{gpgme_data_write} writes up to @var{size} bytes
-starting from @var{buffer} into the data object with the handle
-@var{dh} at the current write position.
-
-The function returns the number of bytes actually written, or -1 if an
-error occurs.  If an error occurs, @var{errno} is set.
-@end deftypefun
-
-@deftypefun off_t gpgme_data_seek (@w{gpgme_data_t @var{dh}}, @w{off_t *@var{offset}}, @w{int @var{whence}})
-The function @code{gpgme_data_seek} changes the current read/write
-position.
-
-The @var{whence} argument specifies how the @var{offset} should be
-interpreted.  It must be one of the following symbolic constants:
-
-@table @code
-@item SEEK_SET
-Specifies that @var{whence} is a count of characters from the
-beginning of the data object.
-
-@item SEEK_CUR
-Specifies that @var{whence} is a count of characters from the current
-file position.  This count may be positive or negative.
-
-@item SEEK_END
-Specifies that @var{whence} is a count of characters from the end of
-the data object.  A negative count specifies a position within the
-current extent of the data object; a positive count specifies a
-position past the current end.  If you set the position past the
-current end, and actually write data, you will extend the data object
-with zeros up to that position.
-@end table
-
-If successful, the function returns the resulting file position,
-measured in bytes from the beginning of the data object.  You can use
-this feature together with @code{SEEK_CUR} to read the current
-read/write position.
-
-If the function fails, -1 is returned and @var{errno} is set.
-@end deftypefun
-
-The following function is deprecated and should not be used.  It will
-be removed in a future version of @acronym{GPGME}.
-
-@deftypefun gpgme_error_t gpgme_data_rewind (@w{gpgme_data_t @var{dh}})
-The function @code{gpgme_data_rewind} is equivalent to:
-
-@example
-  return (gpgme_data_seek (dh, 0, SEEK_SET) == -1)
-    ? gpgme_error_from_errno (errno) : 0;
-@end example
-@end deftypefun
-
-
-
-
-@node Data Buffer Meta-Data
-@subsection Data Buffer Meta-Data
-@cindex data buffer, meta-data
-@cindex data buffer, file name
-@cindex data buffer, encoding
-
-@deftypefun {char *} gpgme_data_get_file_name (@w{gpgme_data_t @var{dh}})
-The function @code{gpgme_data_get_file_name} returns a pointer to a
-string containing the file name associated with the data object.  The
-file name will be stored in the output when encrypting or signing the
-data and will be returned to the user when decrypting or verifying the
-output data.
-
-If no error occurs, the string containing the file name is returned.
-Otherwise, @code{NULL} will be returned.
-@end deftypefun
-
-
-@deftypefun gpgme_error_t gpgme_data_set_file_name (@w{gpgme_data_t @var{dh}}, @w{const char *@var{file_name}})
-The function @code{gpgme_data_set_file_name} sets the file name
-associated with the data object.  The file name will be stored in the
-output when encrypting or signing the data and will be returned to the
-user when decrypting or verifying the output data.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{dh} is not a valid pointer and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-
-@deftp {Data type} {enum gpgme_data_encoding_t}
-@tindex gpgme_data_encoding_t
-The @code{gpgme_data_encoding_t} type specifies the encoding of a
-@code{gpgme_data_t} object.  This encoding is useful to give the backend
-a hint on the type of data.  The following data types are available:
-
-@table @code
-@item GPGME_DATA_ENCODING_NONE
-This specifies that the encoding is not known.  This is the default
-for a new data object.  The backend will try its best to detect the
-encoding automatically.
-
-@item GPGME_DATA_ENCODING_BINARY
-This specifies that the data is encoding in binary form; i.e. there is
-no special encoding.
-
-@item GPGME_DATA_ENCODING_BASE64
-This specifies that the data is encoded using the Base-64 encoding
-scheme as used by @acronym{MIME} and other protocols.
-
-@item GPGME_DATA_ENCODING_ARMOR
-This specifies that the data is encoded in an armored form as used by
-OpenPGP and PEM.
-@end table
-@end deftp
-
-@deftypefun gpgme_data_encoding_t gpgme_data_get_encoding (@w{gpgme_data_t @var{dh}})
-The function @code{gpgme_data_get_encoding} returns the encoding of
-the data object with the handle @var{dh}.  If @var{dh} is not a valid
-pointer (e.g. @code{NULL}) @code{GPGME_DATA_ENCODING_NONE} is
-returned.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_data_set_encoding (@w{gpgme_data_t @var{dh}, gpgme_data_encoding_t @var{enc}})
-The function @code{gpgme_data_set_encoding} changes the encoding of
-the data object with the handle @var{dh} to @var{enc}.
-@end deftypefun
-
-
-@c
-@c    Chapter Contexts
-@c 
-@node Contexts
-@chapter Contexts
-@cindex context
-
-All cryptographic operations in @acronym{GPGME} are performed within a
-context, which contains the internal state of the operation as well as
-configuration parameters.  By using several contexts you can run
-several cryptographic operations in parallel, with different
-configuration.
-
-@deftp {Data type} {gpgme_ctx_t}
-The @code{gpgme_ctx_t} type is a handle for a @acronym{GPGME} context,
-which is used to hold the configuration, status and result of
-cryptographic operations.
-@end deftp
-
-@menu
-* Creating Contexts::             Creating new @acronym{GPGME} contexts.
-* Destroying Contexts::           Releasing @acronym{GPGME} contexts.
-* Context Attributes::            Setting properties of a context.
-* Key Management::                Managing keys with @acronym{GPGME}.
-* Trust Item Management::         Managing trust items with @acronym{GPGME}.
-* Crypto Operations::             Using a context for cryptography.
-* Run Control::                   Controlling how operations are run.
-@end menu
-
-
-@node Creating Contexts
-@section Creating Contexts
-@cindex context, creation
-
-@deftypefun gpgme_error_t gpgme_new (@w{gpgme_ctx_t *@var{ctx}})
-The function @code{gpgme_new} creates a new @code{gpgme_ctx_t} object
-and returns a handle for it in @var{ctx}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-context was successfully created, @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if not
-enough memory is available.
-@end deftypefun
-
-
-@node Destroying Contexts
-@section Destroying Contexts
-@cindex context, destruction
-
-@deftypefun void gpgme_release (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_release} destroys the context with the handle
-@var{ctx} and releases all associated resources.
-@end deftypefun
-
-
-@node Context Attributes
-@section Context Attributes
-@cindex context, attributes
-
-@menu
-* Protocol Selection::            Selecting the protocol used by a context.
-* Crypto Engine::                 Configuring the crypto engine.
-* ASCII Armor::                   Requesting @acronym{ASCII} armored output.
-* Text Mode::                     Choosing canonical text mode.
-* Included Certificates::       Including a number of certificates.
-* Key Listing Mode::              Selecting key listing mode.
-* Passphrase Callback::           Getting the passphrase from the user.
-* Progress Meter Callback::       Being informed about the progress.
-* Locale::                        Setting the locale of a context.
-@end menu
-
-
-@node Protocol Selection
-@subsection Protocol Selection
-@cindex context, selecting protocol
-@cindex protocol, selecting
-
-@deftypefun gpgme_error_t gpgme_set_protocol (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_protocol_t @var{proto}})
-The function @code{gpgme_set_protocol} sets the protocol used within
-the context @var{ctx} to @var{proto}.  All crypto operations will be
-performed by the crypto engine configured for that protocol.
-@xref{Protocols and Engines}.
-
-Setting the protocol with @code{gpgme_set_protocol} does not check if
-the crypto engine for that protocol is available and installed
-correctly.  @xref{Engine Version Check}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-protocol could be set successfully, and @code{GPG_ERR_INV_VALUE} if
-@var{protocol} is not a valid protocol.
-@end deftypefun
-
-@deftypefun gpgme_protocol_t gpgme_get_protocol (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_get_protocol} retrieves the protocol currently
-use with the context @var{ctx}.
-@end deftypefun
-
-
-@node Crypto Engine
-@subsection Crypto Engine
-@cindex context, configuring engine
-@cindex engine, configuration per context
-
-The following functions can be used to set and retrieve the
-configuration of the crypto engines of a specific context.  The
-default can also be retrieved without any particular context.
-@xref{Engine Information}.  The default can also be changed globally.
-@xref{Engine Configuration}.
-
-@deftypefun gpgme_engine_info_t gpgme_ctx_get_engine_info (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_ctx_get_engine_info} returns a linked list of
-engine info structures.  Each info structure describes the
-configuration of one configured backend, as used by the context
-@var{ctx}.
-
-The result is valid until the next invocation of
-@code{gpgme_ctx_set_engine_info} for this particular context.
-
-This function can not fail.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_ctx_set_engine_info (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_protocol_t @var{proto}}, @w{const char *@var{file_name}}, @w{const char *@var{home_dir}})
-The function @code{gpgme_ctx_set_engine_info} changes the
-configuration of the crypto engine implementing the protocol
-@var{proto} for the context @var{ctx}.
-
-@var{file_name} is the file name of the executable program
-implementing this protocol, and @var{home_dir} is the directory name
-of the configuration directory for this crypto engine.  If
-@var{home_dir} is @code{NULL}, the engine's default will be used.
-
-Currently this function must be used before starting the first crypto
-operation.  It is unspecified if and when the changes will take effect
-if the function is called after starting the first operation on the
-context @var{ctx}.
-
-This function returns the error code @code{GPG_ERR_NO_ERROR} if
-successful, or an eror code on failure.
-@end deftypefun
-
-
-@c FIXME: Unfortunately, using @acronym here breaks texi2dvi.
-@node ASCII Armor
-@subsection @acronym{ASCII} Armor
-@cindex context, armor mode
-@cindex @acronym{ASCII} armor
-@cindex armor mode
-
-@deftypefun void gpgme_set_armor (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
-The function @code{gpgme_set_armor} specifies if the output should be
-@acronym{ASCII} armored.  By default, output is not @acronym{ASCII}
-armored.
-
-@acronym{ASCII} armored output is disabled if @var{yes} is zero, and
-enabled otherwise.
-@end deftypefun
-
-@deftypefun int gpgme_get_armor (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_get_armor} returns 1 if the output is
-@acronym{ASCII} armored, and @code{0} if it is not, or if @var{ctx} is
-not a valid pointer.
-@end deftypefun
-
-
-@node Text Mode
-@subsection Text Mode
-@cindex context, text mode
-@cindex text mode
-@cindex canonical text mode
-
-@deftypefun void gpgme_set_textmode (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
-The function @code{gpgme_set_textmode} specifies if canonical text mode
-should be used.  By default, text mode is not used.
-
-Text mode is for example used for the RFC2015 signatures; note that
-the updated RFC 3156 mandates that the mail user agent does some
-preparations so that text mode is not needed anymore.
-
-This option is only relevant to the OpenPGP crypto engine, and ignored
-by all other engines.
-
-Canonical text mode is disabled if @var{yes} is zero, and enabled
-otherwise.
-@end deftypefun
-
-@deftypefun int gpgme_get_textmode (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_get_textmode} returns 1 if canonical text
-mode is enabled, and @code{0} if it is not, or if @var{ctx} is not a
-valid pointer.
-@end deftypefun
-
-
-@node Included Certificates
-@subsection Included Certificates
-@cindex certificates, included
-
-@deftypefun void gpgme_set_include_certs (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{nr_of_certs}})
-The function @code{gpgme_set_include_certs} specifies how many
-certificates should be included in an S/MIME signed message.  By
-default, only the sender's certificate is included.  The possible
-values of @var{nr_of_certs} are:
-
-@table @code
-@item GPGME_INCLUDE_CERTS_DEFAULT
-Fall back to the default of the crypto backend.  This is the default
-for GPGME.
-@item -2
-Include all certificates except the root certificate.
-@item -1
-Include all certificates.
-@item 0
-Include no certificates.
-@item 1
-Include the sender's certificate only.
-@item n
-Include the first n certificates of the certificates path, starting
-from the sender's certificate.  The number @code{n} must be positive.
-@end table
-
-Values of @var{nr_of_certs} smaller than -2 are undefined.
-
-This option is only relevant to the CMS crypto engine, and ignored by
-all other engines.
-@end deftypefun
-
-@deftypefun int gpgme_get_include_certs (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_get_include_certs} returns the number of
-certificates to include into an S/MIME signed message.
-@end deftypefun
-
-
-@node Key Listing Mode
-@subsection Key Listing Mode
-@cindex key listing mode
-@cindex key listing, mode of
-
-@deftypefun gpgme_error_t gpgme_set_keylist_mode (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_keylist_mode_t @var{mode}})
-The function @code{gpgme_set_keylist_mode} changes the default
-behaviour of the key listing functions.  The value in @var{mode} is a
-bitwise-or combination of one or multiple of the following bit values:
-
-@table @code
-@item GPGME_KEYLIST_MODE_LOCAL
-The @code{GPGME_KEYLIST_MODE_LOCAL} symbol specifies that the local
-keyring should be searched for keys in the keylisting operation.  This
-is the default.
-
-@item GPGME_KEYLIST_MODE_EXTERN
-The @code{GPGME_KEYLIST_MODE_EXTERN} symbol specifies that an external
-source should be searched for keys in the keylisting
-operation.  The type of external source is dependant on the crypto
-engine used.  For example, it can be a remote keyserver or LDAP
-certificate server.
-
-@item GPGME_KEYLIST_MODE_SIGS
-The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key
-signatures should be included in the listed keys.
-
-@item GPGME_KEYLIST_MODE_SIG_NOTATIONS
-The @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} symbol specifies that the
-signature notations on key signatures should be included in the listed
-keys.  This only works if @code{GPGME_KEYLIST_MODE_SIGS} is also
-enabled.
-
-@item GPGME_KEYLIST_MODE_VALIDATE
-The @code{GPGME_KEYLIST_MODE_VALIDATE} symbol specifies that the
-backend should do key or certificate validation and not just get the
-validity information from an internal cache.  This might be an
-expensive operation and is in general not useful.  Currently only
-implemented for the S/MIME backend and ignored for other backends.
-
-@end table
-
-At least one of @code{GPGME_KEYLIST_MODE_LOCAL} and
-@code{GPGME_KEYLIST_MODE_EXTERN} must be specified.  For future binary
-compatibility, you should get the current mode with
-@code{gpgme_get_keylist_mode} and modify it by setting or clearing the
-appropriate bits, and then using that calulcated value in the
-@code{gpgme_set_keylisting_mode} operation.  This will leave all other
-bits in the mode value intact (in particular those that are not used
-in the current version of the library).
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-mode could be set correctly, and @code{GPG_ERR_INV_VALUE} if @var{ctx}
-is not a valid pointer or @var{mode} is not a valid mode.
-@end deftypefun
-
-
-@deftypefun gpgme_keylist_mode_t gpgme_get_keylist_mode (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_get_keylist_mode} returns the current key
-listing mode of the context @var{ctx}.  This value can then be
-modified and used in a subsequent @code{gpgme_set_keylist_mode}
-operation to only affect the desired bits (and leave all others
-intact).
-
-The function returns 0 if @var{ctx} is not a valid pointer, and the
-current mode otherwise.  Note that 0 is not a valid mode value.
-@end deftypefun
-
-
-@node Passphrase Callback
-@subsection Passphrase Callback
-@cindex callback, passphrase
-@cindex passphrase callback
-
-@deftp {Data type} {gpgme_error_t (*gpgme_passphrase_cb_t)(void *@var{hook}, const char *@var{uid_hint}, const char *@var{passphrase_info}, @w{int @var{prev_was_bad}}, @w{int @var{fd}})}
-@tindex gpgme_passphrase_cb_t
-The @code{gpgme_passphrase_cb_t} type is the type of functions usable as
-passphrase callback function.
-
-The argument @var{uid_hint} might contain a string that gives an
-indication for which user ID the passphrase is required.  If this is
-not available, or not applicable (in the case of symmetric encryption,
-for example), @var{uid_hint} will be @code{NULL}.
-
-The argument @var{passphrase_info}, if not @code{NULL}, will give
-further information about the context in which the passphrase is
-required.  This information is engine and operation specific.
-
-If this is the repeated attempt to get the passphrase, because
-previous attempts failed, then @var{prev_was_bad} is 1, otherwise it
-will be 0.
-
-The user must write the passphrase, followed by a newline character,
-to the file descriptor @var{fd}.  If the user does not return 0
-indicating success, the user must at least write a newline character
-before returning from the callback.
-
-If an error occurs, return the corresponding @code{gpgme_error_t}
-value.  You can use the error code @code{GPG_ERR_CANCELED} to abort
-the operation.  Otherwise, return @code{0}.
-@end deftp
-
-@deftypefun void gpgme_set_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t @var{passfunc}}, @w{void *@var{hook_value}})
-The function @code{gpgme_set_passphrase_cb} sets the function that is
-used when a passphrase needs to be provided by the user to
-@var{passfunc}.  The function @var{passfunc} needs to implemented by
-the user, and whenever it is called, it is called with its first
-argument being @var{hook_value}.  By default, no passphrase callback
-function is set.
-
-Not all crypto engines require this callback to retrieve the
-passphrase.  It is better if the engine retrieves the passphrase from
-a trusted agent (a daemon process), rather than having each user to
-implement their own passphrase query.  Some engines do not even
-support an external passphrase callback at all, in this case the error
-code @code{GPG_ERR_NOT_SUPPORTED} is returned.
-
-The user can disable the use of a passphrase callback function by
-calling @code{gpgme_set_passphrase_cb} with @var{passfunc} being
-@code{NULL}.
-@end deftypefun
-
-@deftypefun void gpgme_get_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t *@var{passfunc}}, @w{void **@var{hook_value}})
-The function @code{gpgme_get_passphrase_cb} returns the function that
-is used when a passphrase needs to be provided by the user in
-@var{*passfunc}, and the first argument for this function in
-@var{*hook_value}.  If no passphrase callback is set, or @var{ctx} is
-not a valid pointer, @code{NULL} is returned in both variables.
-
-@var{passfunc} or @var{hook_value} can be @code{NULL}.  In this case,
-the corresponding value will not be returned.
-@end deftypefun
-
-
-@node Progress Meter Callback
-@subsection Progress Meter Callback
-@cindex callback, progress meter
-@cindex progress meter callback
-
-@deftp {Data type} {void (*gpgme_progress_cb_t)(void *@var{hook}, const char *@var{what}, int @var{type}, int @var{current}, int @var{total})}
-@tindex gpgme_progress_cb_t
-The @code{gpgme_progress_cb_t} type is the type of functions usable as
-progress callback function.
-
-The arguments are specific to the crypto engine.  More information
-about the progress information returned from the GnuPG engine can be
-found in the GnuPG source code in the file @file{doc/DETAILS} in the
-section PROGRESS.
-@end deftp
-
-@deftypefun void gpgme_set_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t @var{progfunc}}, @w{void *@var{hook_value}})
-The function @code{gpgme_set_progress_cb} sets the function that is
-used when progress information about a cryptographic operation is
-available.  The function @var{progfunc} needs to implemented by the
-user, and whenever it is called, it is called with its first argument
-being @var{hook_value}.  By default, no progress callback function
-is set.
-
-Setting a callback function allows an interactive program to display
-progress information about a long operation to the user.
-
-The user can disable the use of a progress callback function by
-calling @code{gpgme_set_progress_cb} with @var{progfunc} being
-@code{NULL}.
-@end deftypefun
-
-@deftypefun void gpgme_get_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t *@var{progfunc}}, @w{void **@var{hook_value}})
-The function @code{gpgme_get_progress_cb} returns the function that is
-used to inform the user about the progress made in @var{*progfunc},
-and the first argument for this function in @var{*hook_value}.  If no
-progress callback is set, or @var{ctx} is not a valid pointer,
-@code{NULL} is returned in both variables.
-
-@var{progfunc} or @var{hook_value} can be @code{NULL}.  In this case,
-the corresponding value will not be returned.
-@end deftypefun
-
-
-@node Locale
-@subsection Locale
-@cindex locale, default
-@cindex locale, of a context
-
-A locale setting can be associated with a context.  This locale is
-passed to the crypto engine, and used for applications like the PIN
-entry, which is displayed to the user when entering a passphrase is
-required.
-
-The default locale is used to initialize the locale setting of all
-contexts created afterwards.
-
-@deftypefun gpgme_error_t gpgme_set_locale (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{category}}, @w{const char *@var{value}})
-The function @code{gpgme_set_locale} sets the locale of the context
-@var{ctx}, or the default locale if @var{ctx} is a null pointer.
-
-The locale settings that should be changed are specified by
-@var{category}.  Supported categories are @code{LC_CTYPE},
-@code{LC_MESSAGES}, and @code{LC_ALL}, which is a wildcard you can use
-if you want to change all the categories at once.
-
-The value to be used for the locale setting is @var{value}, which will
-be copied to @acronym{GPGME}'s internal data structures.  @var{value}
-can be a null pointer, which disables setting the locale, and will
-make PIN entry and other applications use their default setting, which
-is usually not what you want.
-
-Note that the settings are only used if the application runs on a text
-terminal, and that the settings should fit the configuration of the
-output terminal.  Normally, it is sufficient to initialize the default
-value at startup.
-
-The function returns an error if not enough memory is available.
-@end deftypefun
-
-
-@node Key Management
-@section Key Management
-@cindex key management
-
-Some of the cryptographic operations require that recipients or
-signers are specified.  This is always done by specifying the
-respective keys that should be used for the operation.  The following
-section describes how such keys can be selected and manipulated.
-
-@deftp {Data type} gpgme_sub_key_t
-The @code{gpgme_sub_key_t} type is a pointer to a subkey structure.
-Sub keys are one component of a @code{gpgme_key_t} object.  In fact,
-subkeys are those parts that contains the real information about the
-individual cryptographic keys that belong to the same key object.  One
-@code{gpgme_key_t} can contain several subkeys.  The first subkey in
-the linked list is also called the primary key.
-
-The subkey structure has the following members:
-
-@table @code
-@item gpgme_sub_key_t next
-This is a pointer to the next subkey structure in the linked list, or
-@code{NULL} if this is the last element.
-
-@item unsigned int revoked : 1
-This is true if the subkey is revoked.
-
-@item unsigned int expired : 1
-This is true if the subkey is expired.
-
-@item unsigned int disabled : 1
-This is true if the subkey is disabled.
-
-@item unsigned int invalid : 1
-This is true if the subkey is invalid.
-
-@item unsigned int can_encrypt : 1
-This is true if the subkey can be used for encryption.
-
-@item unsigned int can_sign : 1
-This is true if the subkey can be used to create data signatures.
-
-@item unsigned int can_certify : 1
-This is true if the subkey can be used to create key certificates.
-
-@item unsigned int can_authenticate : 1
-This is true if the subkey can be used for authentication.
-
-@item unsigned int is_qualified : 1
-This is true if the subkey can be used for qualified signatures
-according to local government regulations.
-
-@item unsigned int secret : 1
-This is true if the subkey is a secret key.  Note that it will be false
-if the key is actually a stub key; i.e. a secret key operation is
-currently not possible (offline-key).
-
-@item gpgme_pubkey_algo_t pubkey_algo
-This is the public key algorithm supported by this subkey.
-
-@item unsigned int length
-This is the length of the subkey (in bits).
-
-@item char *keyid
-This is the key ID of the subkey in hexadecimal digits.
-
-@item char *fpr
-This is the fingerprint of the subkey in hexadecimal digits, if
-available.
-
-@item long int timestamp
-This is the creation timestamp of the subkey.  This is -1 if the
-timestamp is invalid, and 0 if it is not available.
-
-@item long int expires
-This is the expiration timestamp of the subkey, or 0 if the subkey
-does not expire.
-@end table
-@end deftp
-
-@deftp {Data type} gpgme_key_sig_t
-The @code{gpgme_key_sig_t} type is a pointer to a key signature structure.
-Key signatures are one component of a @code{gpgme_key_t} object, and
-validate user IDs on the key.
-
-The signatures on a key are only available if the key was retrieved
-via a listing operation with the @code{GPGME_KEYLIST_MODE_SIGS} mode
-enabled, because it can be expensive to retrieve all signatures of a
-key.
-
-The signature notations on a key signature are only available if the
-key was retrieved via a listing operation with the
-@code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} mode enabled, because it can
-be expensive to retrieve all signature notations.
-
-The key signature structure has the following members:
-
-@table @code
-@item gpgme_key_sig_t next
-This is a pointer to the next key signature structure in the linked
-list, or @code{NULL} if this is the last element.
-
-@item unsigned int revoked : 1
-This is true if the key signature is a revocation signature.
-
-@item unsigned int expired : 1
-This is true if the key signature is expired.
-
-@item unsigned int invalid : 1
-This is true if the key signature is invalid.
-
-@item unsigned int exportable : 1
-This is true if the key signature is exportable.
-
-@item gpgme_pubkey_algo_t pubkey_algo
-This is the public key algorithm used to create the signature.
-
-@item char *keyid
-This is the key ID of the key (in hexadecimal digits) used to create
-the signature.
-
-@item long int timestamp
-This is the creation timestamp of the key signature.  This is -1 if
-the timestamp is invalid, and 0 if it is not available.
-
-@item long int expires
-This is the expiration timestamp of the key signature, or 0 if the key
-signature does not expire.
-
-@item gpgme_error_t status
-This is the status of the signature and has the same meaning as the
-member of the same name in a @code{gpgme_signature_t} object.
-
-@item unsigned int sig_class
-This specifies the signature class of the key signature.  The meaning
-is specific to the crypto engine.
-
-@item char *uid
-This is the main user ID of the key used to create the signature.
-
-@item char *name
-This is the name component of @code{uid}, if available.
-
-@item char *comment
-This is the comment component of @code{uid}, if available.
-
-@item char *email
-This is the email component of @code{uid}, if available.
-
-@item gpgme_sig_notation_t notations
-This is a linked list with the notation data and policy URLs.
-@end table
-@end deftp
-
-@deftp {Data type} gpgme_user_id_t
-A user ID is a component of a @code{gpgme_key_t} object.  One key can
-have many user IDs.  The first one in the list is the main (or
-primary) user ID.
-
-The user ID structure has the following members.
-
-@table @code
-@item gpgme_user_id_t next
-This is a pointer to the next user ID structure in the linked list, or
-@code{NULL} if this is the last element.
-
-@item unsigned int revoked : 1
-This is true if the user ID is revoked.
-
-@item unsigned int invalid : 1
-This is true if the user ID is invalid.
-
-@item gpgme_validity_t validity
-This specifies the validity of the user ID.
-
-@item char *uid
-This is the user ID string.
-
-@item char *name
-This is the name component of @code{uid}, if available.
-
-@item char *comment
-This is the comment component of @code{uid}, if available.
-
-@item char *email
-This is the email component of @code{uid}, if available.
-
-@item gpgme_key_sig_t signatures
-This is a linked list with the signatures on this user ID.
-@end table
-@end deftp
-
-@deftp {Data type} gpgme_key_t
-The @code{gpgme_key_t} type is a pointer to a key object.  It has the
-following members:
-
-@table @code
-@item gpgme_keylist_mode_t keylist_mode
-The keylist mode that was active when the key was retrieved.
-
-@item unsigned int revoked : 1
-This is true if the key is revoked.
-
-@item unsigned int expired : 1
-This is true if the key is expired.
-
-@item unsigned int disabled : 1
-This is true if the key is disabled.
-
-@item unsigned int invalid : 1
-This is true if the key is invalid. This might have several reasons,
-for a example for the S/MIME backend, it will be set in during key
-listsing if the key could not be validated due to a missing
-certificates or unmatched policies.
-
-@item unsigned int can_encrypt : 1
-This is true if the key (ie one of its subkeys) can be used for
-encryption.
-
-@item unsigned int can_sign : 1
-This is true if the key (ie one of its subkeys) can be used to create
-data signatures.
-
-@item unsigned int can_certify : 1
-This is true if the key (ie one of its subkeys) can be used to create
-key certificates.
-
-@item unsigned int can_authenticate : 1
-This is true if the key (ie one of its subkeys) can be used for
-authentication.
-
-@item unsigned int is_qualified : 1
-This is true if the key can be used for qualified signatures according
-to local government regulations.
-
-@item unsigned int secret : 1
-This is true if the key is a secret key.  Note, that this will always be
-true even if the corresponding subkey flag may be false (offline/stub
-keys).
-
-@item gpgme_protocol_t protocol
-This is the protocol supported by this key.
-
-@item char *issuer_serial
-If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
-issuer serial.
-
-@item char *issuer_name
-If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
-issuer name.
-
-@item char *chain_id
-If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
-chain ID, which can be used to built the certificate chain.
-@item gpgme_validity_t owner_trust
-If @code{protocol} is @code{GPGME_PROTOCOL_OpenPGP}, then this is the
-owner trust.
-
-@item gpgme_sub_key_t subkeys
-This is a linked list with the subkeys of the key.  The first subkey
-in the list is the primary key and usually available.
-
-@item gpgme_user_id_t uids
-This is a linked list with the user IDs of the key.  The first user ID
-in the list is the main (or primary) user ID.
-@end table
-@end deftp
-
-@menu
-* Listing Keys::                  Browsing the list of available keys.
-* Information About Keys::        Requesting detailed information about keys.
-* Key Signatures::                Listing the signatures on a key.
-* Manipulating Keys::             Operations on keys.
-* Generating Keys::               Creating new key pairs.
-* Exporting Keys::                Retrieving key data from the key ring.
-* Importing Keys::                Adding keys to the key ring.
-* Deleting Keys::                 Removing keys from the key ring.
-@end menu
-
-
-@node Listing Keys
-@subsection Listing Keys
-@cindex listing keys
-@cindex key listing
-@cindex key listing, start
-@cindex key ring, list
-@cindex key ring, search
-
-@deftypefun gpgme_error_t gpgme_op_keylist_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{int @var{secret_only}})
-The function @code{gpgme_op_keylist_start} initiates a key listing
-operation inside the context @var{ctx}.  It sets everything up so that
-subsequent invocations of @code{gpgme_op_keylist_next} return the keys
-in the list.
-
-If @var{pattern} is @code{NULL}, all available keys are returned.
-Otherwise, @var{pattern} contains an engine specific expression that
-is used to limit the list to all keys matching the pattern.  Note that
-the total length of the pattern is restricted to an engine-specific
-maximum (a couple of hundred characters are usually accepted).  The
-pattern should be used to restrict the search to a certain common name
-or user, not to list many specific keys at once by listing their
-fingerprints or key IDs.
-
-If @var{secret_only} is not @code{0}, the list is restricted to secret
-keys only.
-
-The context will be busy until either all keys are received (and
-@code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
-@code{gpgme_op_keylist_end} is called to finish the operation.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and passes through any errors that
-are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_keylist_ext_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{int @var{secret_only}}, @w{int @var{reserved}})
-The function @code{gpgme_op_keylist_ext_start} initiates an extended
-key listing operation inside the context @var{ctx}.  It sets
-everything up so that subsequent invocations of
-@code{gpgme_op_keylist_next} return the keys in the list.
-
-If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
-are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
-array of strings that are used to limit the list to all keys matching
-at least one of the patterns verbatim.  Note that the total length of
-all patterns is restricted to an engine-specific maximum (the exact
-limit also depends on the number of patterns and amount of quoting
-required, but a couple of hundred characters are usually accepted).
-Patterns should be used to restrict the search to a certain common
-name or user, not to list many specific keys at once by listing their
-fingerprints or key IDs.
-
-If @var{secret_only} is not @code{0}, the list is restricted to secret
-keys only.
-
-The value of @var{reserved} must be @code{0}.
-
-The context will be busy until either all keys are received (and
-@code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
-@code{gpgme_op_keylist_end} is called to finish the operation.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and passes through any errors that
-are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_keylist_next (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{r_key}})
-The function @code{gpgme_op_keylist_next} returns the next key in the
-list created by a previous @code{gpgme_op_keylist_start} operation in
-the context @var{ctx}.  The key will have one reference for the user.
-@xref{Manipulating Keys}.
-
-This is the only way to get at @code{gpgme_key_t} objects in
-@acronym{GPGME}.
-
-If the last key in the list has already been returned,
-@code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} or @var{r_key} is not a valid pointer, and
-@code{GPG_ERR_ENOMEM} if there is not enough memory for the operation.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_keylist_end (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_keylist_next} ends a pending key list
-operation in the context @var{ctx}.
-
-After the operation completed successfully, the result of the key
-listing operation can be retrieved with
-@code{gpgme_op_keylist_result}.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if at some
-time during the operation there was not enough memory available.
-@end deftypefun
-
-The following example illustrates how all keys containing a certain
-string (@code{g10code}) can be listed with their key ID and the name
-and e-mail address of the main user ID:
-
-@example
-gpgme_ctx_t ctx;
-gpgme_error_t err = gpgme_new (&ctx);
-
-if (!err)
-  @{
-    err = gpgme_op_keylist_start (ctx, "g10code", 0);
-    while (!err)
-      @{
-        err = gpgme_op_keylist_next (ctx, &key);
-        if (err)
-          break;
-        printf ("%s: %s <%s>\n", key->keyid, key->name, key->email);
-        gpgme_key_release (key);
-      @}
-    gpgme_release (ctx);
-  @}
-if (gpg_err_code (err) != GPG_ERR_EOF)
-  @{
-    fprintf (stderr, "%s: can not list keys: %s\n",
-             argv[0], gpgme_strerror (err));
-    exit (1);
-  @}
-@end example
-
-@deftp {Data type} {gpgme_keylist_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_keylist_*} operation.  After successfully ending a key
-listing operation, you can retrieve the pointer to the result with
-@code{gpgme_op_keylist_result}.  The structure contains the following
-member:
-
-@table @code
-@item unsigned int truncated : 1
-This is true if the crypto backend had to truncate the result, and
-less than the desired keys could be listed.
-@end table
-@end deftp
-
-@deftypefun gpgme_keylist_result_t gpgme_op_keylist_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_keylist_result} returns a
-@code{gpgme_keylist_result_t} pointer to a structure holding the
-result of a @code{gpgme_op_keylist_*} operation.  The pointer is only
-valid if the last operation on the context was a key listing
-operation, and if this operation finished successfully.  The returned
-pointer is only valid until the next operation is started on the
-context.
-@end deftypefun
-
-In a simple program, for which a blocking operation is acceptable, the
-following function can be used to retrieve a single key.
-
-@deftypefun gpgme_error_t gpgme_get_key (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{fpr}}, @w{gpgme_key_t *@var{r_key}}, @w{int @var{secret}})
-The function @code{gpgme_get_key} gets the key with the fingerprint
-(or key ID) @var{fpr} from the crypto backend and return it in
-@var{r_key}.  If @var{secret} is true, get the secret key.  The
-currently active keylist mode is used to retrieve the key.  The key
-will have one reference for the user.
-
-If the key is not found in the keyring, @code{gpgme_get_key} returns
-the error code @code{GPG_ERR_NO_ERROR} and *@var{r_key} will be set to
-@code{NULL}.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} or @var{r_key} is not a valid pointer or @var{fpr} is not a
-fingerprint or key ID, @code{GPG_ERR_AMBIGUOUS_NAME} if the key ID was
-not a unique specifier for a key, and @code{GPG_ERR_ENOMEM} if at some
-time during the operation there was not enough memory available.
-@end deftypefun
-
-
-@node Information About Keys
-@subsection Information About Keys
-@cindex key, information about
-@cindex key, attributes
-@cindex attributes, of a key
-
-Please see the beginning of this section for more information about
-@code{gpgme_key_t} objects.
-
-@deftp {Data type} gpgme_validity_t
-The @code{gpgme_validity_t} type is used to specify the validity of a user ID
-in a key.  The following validities are defined:
-
-@table @code
-@item GPGME_VALIDITY_UNKNOWN
-The user ID is of unknown validity.  The string representation of this
-validity is ``?''.
-
-@item GPGME_VALIDITY_UNDEFINED
-The validity of the user ID is undefined.  The string representation of this
-validity is ``q''.
-
-@item GPGME_VALIDITY_NEVER
-The user ID is never valid.  The string representation of this
-validity is ``n''.
-
-@item GPGME_VALIDITY_MARGINAL
-The user ID is marginally valid.  The string representation of this
-validity is ``m''.
-
-@item GPGME_VALIDITY_FULL
-The user ID is fully valid.  The string representation of this
-validity is ``f''.
-
-@item GPGME_VALIDITY_ULTIMATE
-The user ID is ultimately valid.  The string representation of this
-validity is ``u''.
-@end table
-@end deftp
-
-
-The following interfaces are deprecated and only provided for backward
-compatibility.  Don't use them.  They will be removed in a future
-version of @acronym{GPGME}.
-
-@deftp {Data type} gpgme_attr_t
-The @code{gpgme_attr_t} type is used to specify a key or trust item
-attribute.  The following attributes are defined:
-
-@table @code
-@item GPGME_ATTR_KEYID
-This is the key ID of a sub key.  It is representable as a string.
-
-For trust items, the trust item refers to the key with this ID.
-
-@item GPGME_ATTR_FPR
-This is the fingerprint of a sub key.  It is representable as a
-string.
-
-@item GPGME_ATTR_ALGO
-This is the crypto algorithm for which the sub key can be used.  It
-is representable as a string and as a number.  The numbers correspond
-to the @code{enum gcry_pk_algos} values in the gcrypt library.
-
-@item GPGME_ATTR_LEN
-This is the key length of a sub key.  It is representable as a
-number.
-
-@item GPGME_ATTR_CREATED
-This is the timestamp at creation time of a sub key.  It is
-representable as a number.
-
-@item GPGME_ATTR_EXPIRE
-This is the expiration time of a sub key.  It is representable as a
-number.
-
-@item GPGME_ATTR_OTRUST
-XXX FIXME  (also for trust items)
-
-@item GPGME_ATTR_USERID
-This is a user ID.  There can be more than one user IDs in a
-@var{gpgme_key_t} object.  The first one (with index 0) is the primary
-user ID.  The user ID is representable as a number.
-
-For trust items, this is the user ID associated with this trust item.
-
-@item GPGME_ATTR_NAME
-This is the name belonging to a user ID.  It is representable as a string.
-
-@item GPGME_ATTR_EMAIL
-This is the email address belonging to a user ID.  It is representable
-as a string.
-
-@item GPGME_ATTR_COMMENT
-This is the comment belonging to a user ID.  It is representable as a
-string.
-
-@item GPGME_ATTR_VALIDITY
-This is the validity belonging to a user ID.  It is representable as a
-string and as a number.  See below for a list of available validities.
-
-For trust items, this is the validity that is associated with this
-trust item.
-
-@item GPGME_ATTR_UID_REVOKED
-This specifies if a user ID is revoked.  It is representable as a
-number, and is @code{1} if the user ID is revoked, and @code{0}
-otherwise.
-
-@item GPGME_ATTR_UID_INVALID
-This specifies if a user ID is invalid.  It is representable as a
-number, and is @code{1} if the user ID is invalid, and @code{0}
-otherwise.
-
-@item GPGME_ATTR_LEVEL
-This is the trust level of a trust item.
-
-@item GPGME_ATTR_TYPE
-This returns information about the type of key.  For the string function
-this will eother be "PGP" or "X.509".  The integer function returns 0
-for PGP and 1 for X.509.  It is also used for the type of a trust item.
-
-@item GPGME_ATTR_IS_SECRET
-This specifies if the key is a secret key.  It is representable as a
-number, and is @code{1} if the key is revoked, and @code{0} otherwise.
-
-@item GPGME_ATTR_KEY_REVOKED
-This specifies if a sub key is revoked.  It is representable as a
-number, and is @code{1} if the key is revoked, and @code{0} otherwise.
-
-@item GPGME_ATTR_KEY_INVALID
-This specifies if a sub key is invalid.  It is representable as a
-number, and is @code{1} if the key is invalid, and @code{0} otherwise.
-
-@item GPGME_ATTR_KEY_EXPIRED
-This specifies if a sub key is expired.  It is representable as a
-number, and is @code{1} if the key is expired, and @code{0} otherwise.
-
-@item GPGME_ATTR_KEY_DISABLED
-This specifies if a sub key is disabled.  It is representable as a
-number, and is @code{1} if the key is disabled, and @code{0} otherwise.
-
-@item GPGME_ATTR_KEY_CAPS
-This is a description of the capabilities of a sub key.  It is
-representable as a string.  The string contains the letter ``e'' if
-the key can be used for encryption, ``s'' if the key can be used for
-signatures, and ``c'' if the key can be used for certifications.
-
-@item GPGME_ATTR_CAN_ENCRYPT
-This specifies if a sub key can be used for encryption.  It is
-representable as a number, and is @code{1} if the sub key can be used
-for encryption, and @code{0} otherwise.
-
-@item GPGME_ATTR_CAN_SIGN
-This specifies if a sub key can be used to create data signatures.  It
-is representable as a number, and is @code{1} if the sub key can be
-used for signatures, and @code{0} otherwise.
-
-@item GPGME_ATTR_CAN_CERTIFY
-This specifies if a sub key can be used to create key certificates.
-It is representable as a number, and is @code{1} if the sub key can be
-used for certifications, and @code{0} otherwise.
-
-@item GPGME_ATTR_SERIAL
-The X.509 issuer serial attribute of the key.  It is representable as
-a string.
-
-@item GPGME_ATTR_ISSUE
-The X.509 issuer name attribute of the key.  It is representable as a
-string.
-
-@item GPGME_ATTR_CHAINID
-The X.509 chain ID can be used to build the certification chain.  It
-is representable as a string.
-@end table
-@end deftp
-
-@deftypefun {const char *} gpgme_key_get_string_attr (@w{gpgme_key_t @var{key}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_key_get_string_attr} returns the value of the
-string-representable attribute @var{what} of key @var{key}.  If the
-attribute is an attribute of a sub key or an user ID, @var{idx}
-specifies the sub key or user ID of which the attribute value is
-returned.  The argument @var{reserved} is reserved for later use and
-should be @code{NULL}.
-
-The string returned is only valid as long as the key is valid.
-
-The function returns @code{0} if an attribute can't be returned as a
-string, @var{key} is not a valid pointer, @var{idx} out of range,
-or @var{reserved} not @code{NULL}.
-@end deftypefun
-
-@deftypefun {unsigned long} gpgme_key_get_ulong_attr (@w{gpgme_key_t @var{key}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_key_get_ulong_attr} returns the value of the
-number-representable attribute @var{what} of key @var{key}.  If the
-attribute is an attribute of a sub key or an user ID, @var{idx}
-specifies the sub key or user ID of which the attribute value is
-returned.  The argument @var{reserved} is reserved for later use and
-should be @code{NULL}.
-
-The function returns @code{0} if the attribute can't be returned as a
-number, @var{key} is not a valid pointer, @var{idx} out of range, or
-@var{reserved} not @code{NULL}.
-@end deftypefun
-
-
-@node Key Signatures
-@subsection Key Signatures
-@cindex key, signatures
-@cindex signatures, on a key
-
-The following interfaces are deprecated and only provided for backward
-compatibility.  Don't use them.  They will be removed in a future
-version of @acronym{GPGME}.
-
-The signatures on a key are only available if the key was retrieved
-via a listing operation with the @code{GPGME_KEYLIST_MODE_SIGS} mode
-enabled, because it is expensive to retrieve all signatures of a key.
-
-So, before using the below interfaces to retrieve the signatures on a
-key, you have to make sure that the key was listed with signatures
-enabled.  One convenient, but blocking, way to do this is to use the
-function @code{gpgme_get_key}.
-
-@deftp {Data type} gpgme_attr_t
-The @code{gpgme_attr_t} type is used to specify a key signature
-attribute.  The following attributes are defined:
-
-@table @code
-@item GPGME_ATTR_KEYID
-This is the key ID of the key which was used for the signature.  It is
-representable as a string.
-
-@item GPGME_ATTR_ALGO
-This is the crypto algorithm used to create the signature.  It is
-representable as a string and as a number.  The numbers correspond to
-the @code{enum gcry_pk_algos} values in the gcrypt library.
-
-@item GPGME_ATTR_CREATED
-This is the timestamp at creation time of the signature.  It is
-representable as a number.
-
-@item GPGME_ATTR_EXPIRE
-This is the expiration time of the signature.  It is representable as
-a number.
-
-@item GPGME_ATTR_USERID
-This is the user ID associated with the signing key.  The user ID is
-representable as a number.
-
-@item GPGME_ATTR_NAME
-This is the name belonging to a user ID.  It is representable as a string.
-
-@item GPGME_ATTR_EMAIL
-This is the email address belonging to a user ID.  It is representable
-as a string.
-
-@item GPGME_ATTR_COMMENT
-This is the comment belonging to a user ID.  It is representable as a
-string.
-
-@item GPGME_ATTR_KEY_REVOKED
-This specifies if a key signature is a revocation signature.  It is
-representable as a number, and is @code{1} if the key is revoked, and
-@code{0} otherwise.
-
-@c @item GPGME_ATTR_KEY_EXPIRED
-@c This specifies if a key signature is expired.  It is representable as
-@c a number, and is @code{1} if the key is revoked, and @code{0}
-@c otherwise.
-@c
-@item GPGME_ATTR_SIG_CLASS
-This specifies the signature class of a key signature.  It is
-representable as a number.  The meaning is specific to the crypto
-engine.
-
-@item GPGME_ATTR_SIG_CLASS
-This specifies the signature class of a key signature.  It is
-representable as a number.  The meaning is specific to the crypto
-engine.
-
-@item GPGME_ATTR_SIG_STATUS
-This is the same value as returned by @code{gpgme_get_sig_status}.
-@end table
-@end deftp
-
-@deftypefun {const char *} gpgme_key_sig_get_string_attr (@w{gpgme_key_t @var{key}}, @w{int @var{uid_idx}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_key_sig_get_string_attr} returns the value of
-the string-representable attribute @var{what} of the signature
-@var{idx} on the user ID @var{uid_idx} in the key @var{key}.  The
-argument @var{reserved} is reserved for later use and should be
-@code{NULL}.
-
-The string returned is only valid as long as the key is valid.
-
-The function returns @code{0} if an attribute can't be returned as a
-string, @var{key} is not a valid pointer, @var{uid_idx} or @var{idx}
-out of range, or @var{reserved} not @code{NULL}.
-@end deftypefun
-
-@deftypefun {unsigned long} gpgme_key_sig_get_ulong_attr (@w{gpgme_key_t @var{key}}, @w{int @var{uid_idx}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_key_sig_get_ulong_attr} returns the value of
-the number-representable attribute @var{what} of the signature
-@var{idx} on the user ID @var{uid_idx} in the key @var{key}.  The
-argument @var{reserved} is reserved for later use and should be
-@code{NULL}.
-
-The function returns @code{0} if an attribute can't be returned as a
-string, @var{key} is not a valid pointer, @var{uid_idx} or @var{idx}
-out of range, or @var{reserved} not @code{NULL}.
-@end deftypefun
-
-
-@node Manipulating Keys
-@subsection Manipulating Keys
-@cindex key, manipulation
-
-@deftypefun void gpgme_key_ref (@w{gpgme_key_t @var{key}})
-The function @code{gpgme_key_ref} acquires an additional reference for
-the key @var{key}.
-@end deftypefun
-
-@deftypefun void gpgme_key_unref (@w{gpgme_key_t @var{key}})
-The function @code{gpgme_key_unref} releases a reference for the key
-@var{key}.  If this was the last reference, the key will be destroyed
-and all resources associated to it will be released.
-@end deftypefun
-
-
-The following interface is deprecated and only provided for backward
-compatibility.  Don't use it.  It will be removed in a future version
-of @acronym{GPGME}.
-
-@deftypefun void gpgme_key_release (@w{gpgme_key_t @var{key}})
-The function @code{gpgme_key_release} is equivalent to
-@code{gpgme_key_unref}.
-@end deftypefun
-
-
-@node Generating Keys
-@subsection Generating Keys
-@cindex key, creation
-@cindex key ring, add
-
-@deftypefun gpgme_error_t gpgme_op_genkey (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{parms}}, @w{gpgme_data_t @var{public}}, @w{gpgme_data_t @var{secret}})
-The function @code{gpgme_op_genkey} generates a new key pair in the
-context @var{ctx}.  The meaning of @var{public} and @var{secret}
-depends on the crypto backend.
-
-GnuPG does not support @var{public} and @var{secret}, they should be
-@code{NULL}.  GnuPG will generate a key pair and add it to the
-standard key ring.  The fingerprint of the generated key is available
-with @code{gpgme_op_genkey_result}.
-
-GpgSM requires @var{public} to be a writable data object.  GpgSM will
-generate a secret key (which will be stored by @command{gpg-agent},
-and return a certificate request in @var{public}, which then needs to
-be signed by the certification authority and imported before it can be
-used.  GpgSM does not make the fingerprint available.
-
-The argument @var{parms} specifies parameters for the key in an XML
-string.  The details about the format of @var{parms} are specific to
-the crypto engine used by @var{ctx}.  Here is an example for GnuPG as
-the crypto engine:
-
-@example
-<GnupgKeyParms format="internal">
-Key-Type: DSA
-Key-Length: 1024
-Subkey-Type: ELG-E
-Subkey-Length: 1024
-Name-Real: Joe Tester
-Name-Comment: with stupid passphrase
-Name-Email: joe@@foo.bar
-Expire-Date: 0
-Passphrase: abc
-</GnupgKeyParms>
-@end example
-
-Here is an example for GpgSM as the crypto engine:
-
-@example
-<GnupgKeyParms format="internal">
-Key-Type: RSA
-Key-Length: 1024
-Name-DN: C=de,O=g10 code,OU=Testlab,CN=Joe 2 Tester
-Name-Email: joe@@foo.bar
-</GnupgKeyParms>
-@end example
-
-Strings should be given in UTF-8 encoding.  The only format supported
-for now is ``internal''.  The content of the @code{GnupgKeyParms}
-container is passed verbatim to the crypto backend.  Control
-statements are not allowed.
-
-After the operation completed successfully, the result can be
-retrieved with @code{gpgme_op_genkey_result}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{parms} is not a valid XML string, @code{GPG_ERR_NOT_SUPPORTED} if
-@var{public} or @var{secret} is not valid, and @code{GPG_ERR_GENERAL}
-if no key was created by the backend.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_genkey_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{parms}}, @w{gpgme_data_t @var{public}}, @w{gpgme_data_t @var{secret}})
-The function @code{gpgme_op_genkey_start} initiates a
-@code{gpgme_op_genkey} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{parms} is not a valid XML string, and
-@code{GPG_ERR_NOT_SUPPORTED} if @var{public} or @var{secret} is not
-@code{NULL}.
-@end deftypefun
-
-@deftp {Data type} {gpgme_genkey_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_genkey} operation.  After successfully generating a
-key, you can retrieve the pointer to the result with
-@code{gpgme_op_genkey_result}.  The structure contains the following
-members:
-
-@table @code
-@item unsigned int primary : 1
-This is a flag that is set to 1 if a primary key was created and to 0
-if not.
-
-@item unsigned int sub : 1
-This is a flag that is set to 1 if a subkey was created and to 0
-if not.
-
-@item char *fpr
-This is the fingerprint of the key that was created.  If both a
-primary and a sub key were generated, the fingerprint of the primary
-key will be returned.  If the crypto engine does not provide the
-fingerprint, @code{fpr} will be a null pointer.
-@end table
-@end deftp
-
-@deftypefun gpgme_genkey_result_t gpgme_op_genkey_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_genkey_result} returns a
-@code{gpgme_genkey_result_t} pointer to a structure holding the result of
-a @code{gpgme_op_genkey} operation.  The pointer is only valid if the
-last operation on the context was a @code{gpgme_op_genkey} or
-@code{gpgme_op_genkey_start} operation, and if this operation finished
-successfully.  The returned pointer is only valid until the next
-operation is started on the context.
-@end deftypefun
-
-
-@node Exporting Keys
-@subsection Exporting Keys
-@cindex key, export
-@cindex key ring, export from
-
-@deftypefun gpgme_error_t gpgme_op_export (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{unsigned int @var{reserved}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_export} extracts public keys and returns
-them in the data buffer @var{keydata}.  The output format of the key
-data returned is determined by the @acronym{ASCII} armor attribute set
-for the context @var{ctx}.
-
-If @var{pattern} is @code{NULL}, all available keys are returned.
-Otherwise, @var{pattern} contains an engine specific expression that
-is used to limit the list to all keys matching the pattern.
-
-@var{reserved} is reserved for future use and must be @code{0}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation completed successfully, @code{GPG_ERR_INV_VALUE} if
-@var{keydata} is not a valid empty data buffer, and passes through any
-errors that are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_export_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{unsigned int @var{reserved}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_export_start} initiates a
-@code{gpgme_op_export} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
-if @var{keydata} is not a valid empty data buffer.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_export_ext (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{unsigned int @var{reserved}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_export} extracts public keys and returns
-them in the data buffer @var{keydata}.  The output format of the key
-data returned is determined by the @acronym{ASCII} armor attribute set
-for the context @var{ctx}.
-
-If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
-are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
-array of strings that are used to limit the list to all keys matching
-at least one of the patterns verbatim.
-
-@var{reserved} is reserved for future use and must be @code{0}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation completed successfully, @code{GPG_ERR_INV_VALUE} if
-@var{keydata} is not a valid empty data buffer, and passes through any
-errors that are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_export_ext_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{unsigned int @var{reserved}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_export_ext_start} initiates a
-@code{gpgme_op_export_ext} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
-if @var{keydata} is not a valid empty data buffer.
-@end deftypefun
-
-
-@node Importing Keys
-@subsection Importing Keys
-@cindex key, import
-@cindex key ring, import to
-
-@deftypefun gpgme_error_t gpgme_op_import (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_import} adds the keys in the data buffer
-@var{keydata} to the key ring of the crypto engine used by @var{ctx}.
-The format of @var{keydata} can be @acronym{ASCII} armored, for example,
-but the details are specific to the crypto engine.
-
-After the operation completed successfully, the result can be
-retrieved with @code{gpgme_op_import_result}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-import was completed successfully, @code{GPG_ERR_INV_VALUE} if
-@var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
-and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_import_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
-The function @code{gpgme_op_import_start} initiates a
-@code{gpgme_op_import} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-import could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
-and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
-@end deftypefun
-
-@deftp {Data type} {gpgme_import_status_t}
-This is a pointer to a structure used to store a part of the result of
-a @code{gpgme_op_import} operation.  For each considered key one
-status is added that contains information about the result of the
-import.  The structure contains the following members:
-
-@table @code
-@item gpgme_import_status_t next
-This is a pointer to the next status structure in the linked list, or
-@code{NULL} if this is the last element.
-
-@item char *fpr
-This is the fingerprint of the key that was considered.
-
-@item gpgme_error_t result
-If the import was not successful, this is the error value that caused
-the import to fail.  Otherwise the error code is
-@code{GPG_ERR_NO_ERROR}.
-
-@item unsigned int status
-This is a bit-wise OR of the following flags that give more
-information about what part of the key was imported.  If the key was
-already known, this might be 0.
-
-@table @code
-@item GPGME_IMPORT_NEW
-The key was new.
-
-@item GPGME_IMPORT_UID
-The key contained new user IDs.
-
-@item GPGME_IMPORT_SIG
-The key contained new signatures.
-
-@item GPGME_IMPORT_SUBKEY
-The key contained new sub keys.
-
-@item GPGME_IMPORT_SECRET
-The key contained a secret key.
-@end table
-@end table
-@end deftp
-
-@deftp {Data type} {gpgme_import_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_import} operation.  After a successful import
-operation, you can retrieve the pointer to the result with
-@code{gpgme_op_import_result}.  The structure contains the following
-members:
-
-@table @code
-@item int considered
-The total number of considered keys.
-
-@item int no_user_id
-The number of keys without user ID.
-
-@item int imported
-The total number of imported keys.
-
-@item imported_rsa
-The number of imported RSA keys.
-
-@item unchanged
-The number of unchanged keys.
-
-@item new_user_ids
-The number of new user IDs.
-
-@item new_sub_keys
-The number of new sub keys.
-
-@item new_signatures
-The number of new signatures.
-
-@item new_revocations
-The number of new revocations.
-
-@item secret_read
-The total number of secret keys read.
-
-@item secret_imported
-The number of imported secret keys.
-
-@item secret_unchanged
-The number of unchanged secret keys.
-
-@item not_imported
-The number of keys not imported.
-
-@item gpgme_import_status_t imports
-A list of gpgme_import_status_t objects which contain more information
-about the keys for which an import was attempted.
-@end table
-@end deftp
-
-@deftypefun gpgme_import_result_t gpgme_op_import_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_import_result} returns a
-@code{gpgme_import_result_t} pointer to a structure holding the result
-of a @code{gpgme_op_import} operation.  The pointer is only valid if
-the last operation on the context was a @code{gpgme_op_import} or
-@code{gpgme_op_import_start} operation, and if this operation finished
-successfully.  The returned pointer is only valid until the next
-operation is started on the context.
-@end deftypefun
-
-The following interface is deprecated and only provided for backward
-compatibility.  Don't use it.  It will be removed in a future version
-of @acronym{GPGME}.
-
-@deftypefun gpgme_error_t gpgme_op_import_ext (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}}, @w{int *@var{nr}})
-The function @code{gpgme_op_import_ext} is equivalent to:
-
-@example
-  gpgme_error_t err = gpgme_op_import (ctx, keydata);
-  if (!err)
-    @{
-      gpgme_import_result_t result = gpgme_op_import_result (ctx);
-      *nr = result->considered;
-    @}
-@end example
-@end deftypefun
-
-
-@node Deleting Keys
-@subsection Deleting Keys
-@cindex key, delete
-@cindex key ring, delete from
-
-@deftypefun gpgme_error_t gpgme_op_delete (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
-The function @code{gpgme_op_delete} deletes the key @var{key} from the
-key ring of the crypto engine used by @var{ctx}.  If
-@var{allow_secret} is @code{0}, only public keys are deleted,
-otherwise secret keys are deleted as well, if that is supported.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the key
-was deleted successfully, @code{GPG_ERR_INV_VALUE} if @var{ctx} or
-@var{key} is not a valid pointer, @code{GPG_ERR_NO_PUBKEY} if
-@var{key} could not be found in the keyring,
-@code{GPG_ERR_AMBIGUOUS_NAME} if the key was not specified
-unambiguously, and @code{GPG_ERR_CONFLICT} if the secret key for
-@var{key} is available, but @var{allow_secret} is zero.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_delete_start (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
-The function @code{gpgme_op_delete_start} initiates a
-@code{gpgme_op_delete} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation was started successfully, and @code{GPG_ERR_INV_VALUE} if
-@var{ctx} or @var{key} is not a valid pointer.
-@end deftypefun
-
-
-@node Trust Item Management
-@section Trust Item Management
-@cindex trust item
-
-@strong{Caution:} The trust items interface is experimental.
-
-@deftp {Data type} gpgme_trust_item_t
-The @code{gpgme_trust_item_t} type is a pointer to a trust item object.
-It has the following members:
-
-@table @code
-@item char *keyid
-This is a string describing the key to which this trust items belongs.
-
-@item int type
-This is the type of the trust item.  A value of 1 refers to a key, a
-value of 2 refers to a user ID.
-
-@item int level
-This is the trust level.
-
-@item char *owner_trust
-The owner trust if @code{type} is 1.
-
-@item char *validity
-The calculated validity.
-
-@item char *name
-The user name if @code{type} is 2.
-@end table
-@end deftp
-
-@menu
-* Listing Trust Items::           Browsing the list of available trust items.
-* Information About Trust Items:: Requesting information about trust items.
-* Manipulating Trust Items::      Operations on trust items.
-@end menu
-
-
-@node Listing Trust Items
-@subsection Listing Trust Items
-@cindex trust item list
-
-@deftypefun gpgme_error_t gpgme_op_trustlist_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{int @var{max_level}})
-The function @code{gpgme_op_trustlist_start} initiates a trust item
-listing operation inside the context @var{ctx}.  It sets everything up
-so that subsequent invocations of @code{gpgme_op_trustlist_next} return
-the trust items in the list.
-
-The string @var{pattern} contains an engine specific expression that
-is used to limit the list to all trust items matching the pattern.  It
-can not be the empty string.
-
-The argument @var{max_level} is currently ignored.
-
-The context will be busy until either all trust items are received
-(and @code{gpgme_op_trustlist_next} returns @code{GPG_ERR_EOF}), or
-@code{gpgme_op_trustlist_end} is called to finish the operation.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and passes through any errors that
-are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_trustlist_next (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_trust_item_t *@var{r_item}})
-The function @code{gpgme_op_trustlist_next} returns the next trust
-item in the list created by a previous @code{gpgme_op_trustlist_start}
-operation in the context @var{ctx}.  The trust item can be destroyed
-with @code{gpgme_trust_item_release}.  @xref{Manipulating Trust Items}.
-
-This is the only way to get at @code{gpgme_trust_item_t} objects in
-@acronym{GPGME}.
-
-If the last trust item in the list has already been returned,
-@code{gpgme_op_trustlist_next} returns @code{GPG_ERR_EOF}.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if @var{ctx} or
-@var{r_item} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if
-there is not enough memory for the operation.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_trustlist_end (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_trustlist_next} ends a pending key list
-operation in the context @var{ctx}.
-
-The function returns the error code @code{GPG_ERR_INV_VALUE} if
-@var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if at some
-time during the operation there was not enough memory available.
-@end deftypefun
-
-
-@node Information About Trust Items
-@subsection Information About Trust Items
-@cindex trust item, information about
-@cindex trust item, attributes
-@cindex attributes, of a trust item
-
-The following interfaces are deprecated and only provided for backward
-compatibility.  Don't use them.  They will be removed in a future
-version of @acronym{GPGME}.
-
-Trust items have attributes which can be queried using the interfaces
-below.  The attribute identifiers are shared with those for key
-attributes.  @xref{Information About Keys}.
-
-@deftypefun {const char *} gpgme_trust_item_get_string_attr (@w{gpgme_trust_item_t @var{item}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_trust_item_get_string_attr} returns the value
-of the string-representable attribute @var{what} of trust item
-@var{item}.  The arguments @var{idx} and @var{reserved} are reserved
-for later use and should be @code{0} and @code{NULL} respectively.
-
-The string returned is only valid as long as the key is valid.
-
-The function returns @code{0} if an attribute can't be returned as a
-string, @var{key} is not a valid pointer, @var{idx} out of range,
-or @var{reserved} not @code{NULL}.
-@end deftypefun
-
-@deftypefun int gpgme_trust_item_get_int_attr (@w{gpgme_trust_item_t @var{item}}, @w{gpgme_attr_t @var{what}}, @w{const void *@var{reserved}}, @w{int @var{idx}})
-The function @code{gpgme_trust_item_get_int_attr} returns the value of
-the number-representable attribute @var{what} of trust item
-@var{item}.  If the attribute occurs more than once in the trust item,
-the index is specified by @var{idx}.  However, currently no such
-attribute exists, so @var{idx} should be @code{0}.  The argument
-@var{reserved} is reserved for later use and should be @code{NULL}.
-
-The function returns @code{0} if the attribute can't be returned as a
-number, @var{key} is not a valid pointer, @var{idx} out of range,
-or @var{reserved} not @code{NULL}.
-@end deftypefun
-
-
-@node Manipulating Trust Items
-@subsection Manipulating Trust Items
-@cindex trust item, manipulation
-
-@deftypefun void gpgme_trust_item_ref (@w{gpgme_trust_item_t @var{item}})
-The function @code{gpgme_trust_item_ref} acquires an additional
-reference for the trust item @var{item}.
-@end deftypefun
-
-@deftypefun void gpgme_trust_item_unref (@w{gpgme_trust_item_t @var{item}})
-The function @code{gpgme_trust_item_unref} releases a reference for
-the trust item @var{item}.  If this was the last reference, the trust
-item will be destroyed and all resources associated to it will be
-released.
-@end deftypefun
-
-
-The following interface is deprecated and only provided for backward
-compatibility.  Don't use it.  It will be removed in a future version
-of @acronym{GPGME}.
-
-@deftypefun void gpgme_trust_item_release (@w{gpgme_trust_item_t @var{item}})
-The function @code{gpgme_trust_item_release} is an alias for
-@code{gpgme_trust_item_unref}.
-@end deftypefun
-
-
-@node Crypto Operations
-@section Crypto Operations
-@cindex cryptographic operation
-
-Sometimes, the result of a crypto operation returns a list of invalid
-keys encountered in processing the request.  The following structure
-is used to hold information about such a key.
-
-@deftp {Data type} {gpgme_invalid_key_t}
-This is a pointer to a structure used to store a part of the result of
-a crypto operation which takes user IDs as one input parameter.  The
-structure contains the following members:
-
-@table @code
-@item gpgme_invalid_key_t next
-This is a pointer to the next invalid key structure in the linked
-list, or @code{NULL} if this is the last element.
-
-@item char *fpr
-The fingerprint or key ID of the invalid key encountered.
-
-@item gpgme_error_t reason
-An error code describing the reason why the key was found invalid.
-@end table
-@end deftp
-
-
-@menu
-* Decrypt::                       Decrypting a ciphertext.
-* Verify::                        Verifying a signature.
-* Decrypt and Verify::            Decrypting a signed ciphertext.
-* Sign::                          Creating a signature.
-* Encrypt::                       Encrypting a plaintext.
-@end menu
-
-
-@node Decrypt
-@subsection Decrypt
-@cindex decryption
-@cindex cryptographic operation, decryption
-
-@deftypefun gpgme_error_t gpgme_op_decrypt (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{cipher}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_decrypt} decrypts the ciphertext in the
-data object @var{cipher} and stores it into the data object
-@var{plain}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-ciphertext could be decrypted successfully, @code{GPG_ERR_INV_VALUE}
-if @var{ctx}, @var{cipher} or @var{plain} is not a valid pointer,
-@code{GPG_ERR_NO_DATA} if @var{cipher} does not contain any data to
-decrypt, @code{GPG_ERR_DECRYPT_FAILED} if @var{cipher} is not a valid
-cipher text, @code{GPG_ERR_BAD_PASSPHRASE} if the passphrase for the
-secret key could not be retrieved, and passes through any errors that
-are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_decrypt_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{cipher}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_decrypt_start} initiates a
-@code{gpgme_op_decrypt} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
-if @var{cipher} or @var{plain} is not a valid pointer.
-@end deftypefun
-
-@deftp {Data type} {gpgme_recipient_t}
-This is a pointer to a structure used to store information about the
-recipient of an encrypted text which is decrypted in a
-@code{gpgme_op_decrypt} operation.  This information (except for the
-status field) is even available before the operation finished
-successfully, for example in a passphrase callback.  The structure
-contains the following members:
-
-@table @code
-@item gpgme_recipient_t next
-This is a pointer to the next recipient structure in the linked list,
-or @code{NULL} if this is the last element.
-
-@item gpgme_pubkey_algo_t
-The public key algorithm used in the encryption.
-
-@item unsigned int wrong_key_usage : 1
-This is true if the key was not used according to its policy.
-
-@item char *keyid
-This is the key ID of the key (in hexadecimal digits) used as
-recipient.
-
-@item gpgme_error_t status
-This is an error number with the error code GPG_ERR_NO_SECKEY if the
-secret key for this recipient is not available, and 0 otherwise.
-@end table
-@end deftp
-
-@deftp {Data type} {gpgme_decrypt_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_decrypt} operation.  After successfully decrypting
-data, you can retrieve the pointer to the result with
-@code{gpgme_op_decrypt_result}.  The structure contains the following
-members:
-
-@table @code
-@item char *unsupported_algorithm
-If an unsupported algorithm was encountered, this string describes the
-algorithm that is not supported.
-
-@item unsigned int wrong_key_usage : 1
-This is true if the key was not used according to its policy.
-
-@item gpgme_recipient_t recipient
-This is a linked list of recipients to which this message was encrypted.
-
-@item char *file_name
-This is the filename of the original plaintext message file if it is
-known, otherwise this is a null pointer.
-@end table
-@end deftp
-
-@deftypefun gpgme_decrypt_result_t gpgme_op_decrypt_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_decrypt_result} returns a
-@code{gpgme_decrypt_result_t} pointer to a structure holding the
-result of a @code{gpgme_op_decrypt} operation.  The pointer is only
-valid if the last operation on the context was a
-@code{gpgme_op_decrypt} or @code{gpgme_op_decrypt_start} operation.
-If the operation failed this might be a @code{NULL} pointer.  The
-returned pointer is only valid until the next operation is started on
-the context.
-@end deftypefun
-
-
-@node Verify
-@subsection Verify
-@cindex verification
-@cindex signature, verification
-@cindex cryptographic operation, verification
-@cindex cryptographic operation, signature check
-@cindex signature notation data
-@cindex notation data
-
-@deftypefun gpgme_error_t gpgme_op_verify (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{sig}}, @w{gpgme_data_t @var{signed_text}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_verify} verifies that the signature in the
-data object @var{sig} is a valid signature.  If @var{sig} is a
-detached signature, then the signed text should be provided in
-@var{signed_text} and @var{plain} should be a null pointer.
-Otherwise, if @var{sig} is a normal (or cleartext) signature,
-@var{signed_text} should be a null pointer and @var{plain} should be a
-writable data object that will contain the plaintext after successful
-verification.
-
-The results of the individual signature verifications can be retrieved
-with @code{gpgme_op_verify_result}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be completed successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{sig} or @var{plain} is not a valid pointer,
-@code{GPG_ERR_NO_DATA} if @var{sig} does not contain any data to
-verify, and passes through any errors that are reported by the crypto
-engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_verify_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{sig}}, @w{gpgme_data_t @var{signed_text}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_verify_start} initiates a
-@code{gpgme_op_verify} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{sig} or @var{plain} is not a valid pointer, and
-@code{GPG_ERR_NO_DATA} if @var{sig} or @var{plain} does not contain
-any data to verify.
-@end deftypefun
-
-@deftp {Data type} {gpgme_sig_notation_t}
-This is a pointer to a structure used to store a part of the result of
-a @code{gpgme_op_verify} operation.  The structure contains the
-following members:
-
-@table @code
-@item gpgme_sig_notation_t next
-This is a pointer to the next new signature notation structure in the
-linked list, or @code{NULL} if this is the last element.
-
-@item char *name
-The name of the notation field.  If this is @code{NULL}, then the
-member @code{value} will contain a policy URL.
-
-@item int name_len
-The length of the @code{name} field.  For strings the length is
-counted without the trailing binary zero.
-
-@item char *value
-The value of the notation field.  If @code{name} is @code{NULL}, then
-this is a policy URL.
-
-@item int value_len
-The length of the @code{value} field.  For strings the length is
-counted without the trailing binary zero.
-
-@item gpgme_sig_notation_flags_t flags
-The accumulated flags field.  This field contains the flags associated
-with the notation data in an accumulated form which can be used as an
-argument to the function @code{gpgme_sig_notation_add}.  The value
-@code{flags} is a bitwise-or combination of one or multiple of the
-following bit values:
-
-@table @code
-@item GPGME_SIG_NOTATION_HUMAN_READABLE
-The @code{GPGME_SIG_NOTATION_HUMAN_READABLE} symbol specifies that the
-notation data is in human readable form
-
-@item GPGME_SIG_NOTATION_CRITICAL
-The @code{GPGME_SIG_NOTATION_CRITICAL} symbol specifies that the
-notation data is critical.
-
-@end table
-
-@item unsigned int human_readable : 1
-This is true if the @code{GPGME_SIG_NOTATION_HUMAN_READABLE} flag is
-set and false otherwise.  This flag is only valid for notation data,
-not for policy URLs.
-
-@item unsigned int critical : 1
-This is true if the @code{GPGME_SIG_NOTATION_CRITICAL} flag is set and
-false otherwise.  This flag is valid for notation data and policy URLs.
-
-@end table
-@end deftp
-
-@deftp {Data type} {gpgme_signature_t}
-This is a pointer to a structure used to store a part of the result of
-a @code{gpgme_op_verify} operation.  The structure contains the
-following members:
-
-@table @code
-@item gpgme_signature_t next
-This is a pointer to the next new signature structure in the linked
-list, or @code{NULL} if this is the last element.
-
-@item gpgme_sigsum_t summary
-This is a bit vector giving a summary of the signature status.  It
-provides an easy interface to a defined semantic of the signature
-status.  Checking just one bit is sufficient to see whether a
-signature is valid without any restrictions.
-
-The defined bits are:
-  @table @code
-  @item GPGME_SIGSUM_VALID
-  The signature is fully valid.
-
-  @item GPGME_SIGSUM_GREEN
-  The signature is good but one might want to display some extra
-  information.  Check the other bits.
-
-  @item GPGME_SIGSUM_RED
-  The signature is bad. It might be useful to check other bits and
-  display more information, i.e. a revoked certificate might not render a
-  signature invalid when the message was received prior to the cause for
-  the revocation.
-
-  @item GPGME_SIGSUM_KEY_REVOKED
-  The key or at least one certificate has been revoked.
-
-  @item GPGME_SIGSUM_KEY_EXPIRED
-  The key or one of the certificates has expired. It is probably a good
-  idea to display the date of the expiration.
-
-  @item GPGME_SIGSUM_SIG_EXPIRED
-  The signature has expired.
-
-  @item GPGME_SIGSUM_KEY_MISSING
-  Can't verify due to a missing key or certificate.
-
-  @item GPGME_SIGSUM_CRL_MISSING
-  The CRL (or an equivalent mechanism) is not available. 
-
-  @item GPGME_SIGSUM_CRL_TOO_OLD
-  Available CRL is too old.
-
-  @item GPGME_SIGSUM_BAD_POLICY
-  A policy requirement was not met. 
-
-  @item GPGME_SIGSUM_SYS_ERROR
-  A system error occured. 
-  @end table
-
-@item char *fpr
-This is the fingerprint or key ID of the signature.
-
-@item gpgme_error_t status
-This is the status of the signature.  In particular, the following
-status codes are of interest:
-
-  @table @code
-  @item GPG_ERR_NO_ERROR
-  This status indicates that the signature is valid.  For the combined
-  result this status means that all signatures are valid.
-
-  @item GPG_ERR_SIG_EXPIRED
-  This status indicates that the signature is valid but expired.  For
-  the combined result this status means that all signatures are valid
-  and expired.
-
-  @item GPG_ERR_KEY_EXPIRED
-  This status indicates that the signature is valid but the key used to
-  verify the signature has expired.  For the combined result this status
-  means that all signatures are valid and all keys are expired.
-
-  @item GPG_ERR_CERT_REVOKED
-  This status indicates that the signature is valid but the key used
-  to verify the signature has been revoked.  For the combined result
-  this status means that all signatures are valid and all keys are
-  revoked.
-
-  @item GPG_ERR_BAD_SIGNATURE
-  This status indicates that the signature is invalid.  For the combined
-  result this status means that all signatures are invalid.
-
-  @item GPG_ERR_NO_PUBKEY
-  This status indicates that the signature could not be verified due to
-  a missing key.  For the combined result this status means that all
-  signatures could not be checked due to missing keys.
-
-  @item GPG_ERR_GENERAL
-  This status indicates that there was some other error which prevented
-  the signature verification.
-  @end table
-
-@item gpgme_sig_notation_t notations
-This is a linked list with the notation data and policy URLs.
-
-@item unsigned long timestamp
-The creation timestamp of this signature.
-
-@item unsigned long exp_timestamp
-The expiration timestamp of this signature, or 0 if the signature does
-not expire.
-
-@item unsigned int wrong_key_usage : 1
-This is true if the key was not used according to its policy.
-
-@item unsigned int pka_trust : 2
-This is set to the trust information gained by means of the PKA system.
-Values are:
-  @table @code
-  @item 0
-        No PKA information available or verification not possible.
-  @item 1
-        PKA verification failed. 
-  @item 2
-        PKA verification succeeded.
-  @item 3
-        Reserved for future use.
-  @end table
-Depending on the configuration of the engine, this metric may also be
-reflected by the validity of the signature.
-
-@item gpgme_validity_t validity
-The validity of the signature.
-
-@item gpgme_error_t validity_reason
-If a signature is not valid, this provides a reason why.
-
-@item gpgme_pubkey_algo_t
-The public key algorithm used to create this signature.
-
-@item gpgme_hash_algo_t
-The hash algorithm used to create this signature.
-@end table
-@end deftp
-
-@deftp {Data type} {gpgme_verify_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_verify} operation.  After verifying a signature, you
-can retrieve the pointer to the result with
-@code{gpgme_op_verify_result}.  If the operation failed this might be
-a @code{NULL} pointer.  The structure contains the following member:
-
-@table @code
-@item gpgme_signature_t signatures
-A linked list with information about all signatures for which a
-verification was attempted.
-
-@item char *file_name
-This is the filename of the original plaintext message file if it is
-known, otherwise this is a null pointer.
-@end table
-@end deftp
-
-@deftypefun gpgme_verify_result_t gpgme_op_verify_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_verify_result} returns a
-@code{gpgme_verify_result_t} pointer to a structure holding the result
-of a @code{gpgme_op_verify} operation.  The pointer is only valid if
-the last operation on the context was a @code{gpgme_op_verify},
-@code{gpgme_op_verify_start}, @code{gpgme_op_decrypt_verify} or
-@code{gpgme_op_decrypt_verify_start} operation, and if this operation
-finished successfully (for @code{gpgme_op_decrypt_verify} and
-@code{gpgme_op_decrypt_verify_start}, the error code
-@code{GPG_ERR_NO_DATA} counts as successful in this context).  The
-returned pointer is only valid until the next operation is started on
-the context.
-@end deftypefun
-
-
-The following interfaces are deprecated and only provided for backward
-compatibility.  Don't use them.  They will be removed in a future
-version of @acronym{GPGME}.
-
-@deftp {Data type} {enum gpgme_sig_stat_t}
-@tindex gpgme_sig_stat_t
-The @code{gpgme_sig_stat_t} type holds the result of a signature check, or
-the combined result of all signatures.  The following results are
-possible:
-
-@table @code
-@item GPGME_SIG_STAT_NONE
-This status should not occur in normal operation.
-
-@item GPGME_SIG_STAT_GOOD
-This status indicates that the signature is valid.  For the combined
-result this status means that all signatures are valid.
-
-@item GPGME_SIG_STAT_GOOD_EXP
-This status indicates that the signature is valid but expired.  For
-the combined result this status means that all signatures are valid
-and expired.
-
-@item GPGME_SIG_STAT_GOOD_EXPKEY
-This status indicates that the signature is valid but the key used to
-verify the signature has expired.  For the combined result this status
-means that all signatures are valid and all keys are expired.
-
-@item GPGME_SIG_STAT_BAD
-This status indicates that the signature is invalid.  For the combined
-result this status means that all signatures are invalid.
-
-@item GPGME_SIG_STAT_NOKEY
-This status indicates that the signature could not be verified due to
-a missing key.  For the combined result this status means that all
-signatures could not be checked due to missing keys.
-
-@item GPGME_SIG_STAT_NOSIG
-This status indicates that the signature data provided was not a real
-signature.
-
-@item GPGME_SIG_STAT_ERROR
-This status indicates that there was some other error which prevented
-the signature verification.
-
-@item GPGME_SIG_STAT_DIFF
-For the combined result this status means that at least two signatures
-have a different status.  You can get each key's status with
-@code{gpgme_get_sig_status}.
-@end table
-@end deftp
-
-@deftypefun {const char *} gpgme_get_sig_status (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{idx}}, @w{gpgme_sig_stat_t *@var{r_stat}}, @w{time_t *@var{r_created}})
-The function @code{gpgme_get_sig_status} is equivalent to:
-@example
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    @{
-      sig = sig->next;
-      idx--;
-    @}
-  if (!sig || idx)
-    return NULL;
-
-  if (r_stat)
-    @{
-      switch (gpg_err_code (sig->status))
-       @{
-       case GPG_ERR_NO_ERROR:
-         *r_stat = GPGME_SIG_STAT_GOOD;
-         break;
-         
-       case GPG_ERR_BAD_SIGNATURE:
-         *r_stat = GPGME_SIG_STAT_BAD;
-         break;
-         
-       case GPG_ERR_NO_PUBKEY:
-         *r_stat = GPGME_SIG_STAT_NOKEY;
-         break;
-         
-       case GPG_ERR_NO_DATA:
-         *r_stat = GPGME_SIG_STAT_NOSIG;
-         break;
-         
-       case GPG_ERR_SIG_EXPIRED:
-         *r_stat = GPGME_SIG_STAT_GOOD_EXP;
-         break;
-         
-       case GPG_ERR_KEY_EXPIRED:
-         *r_stat = GPGME_SIG_STAT_GOOD_EXPKEY;
-         break;
-         
-       default:
-         *r_stat = GPGME_SIG_STAT_ERROR;
-         break;
-       @}
-    @}
-  if (r_created)
-    *r_created = sig->timestamp;
-  return sig->fpr;
-@end example
-@end deftypefun
-
-@deftypefun {const char *} gpgme_get_sig_string_attr (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{idx}}, @w{gpgme_attr_t @var{what}}, @w{int @var{whatidx}})
-The function @code{gpgme_get_sig_string_attr} is equivalent to:
-@example
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    @{
-      sig = sig->next;
-      idx--;
-    @}
-  if (!sig || idx)
-    return NULL;
-
-  switch (what)
-    @{
-    case GPGME_ATTR_FPR:
-      return sig->fpr;
-
-    case GPGME_ATTR_ERRTOK:
-      if (whatidx == 1)
-        return sig->wrong_key_usage ? "Wrong_Key_Usage" : "";
-      else
-       return "";
-    default:
-      break;
-    @}
-
-  return NULL;
-@end example
-@end deftypefun
-
-@deftypefun {const char *} gpgme_get_sig_ulong_attr (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{idx}}, @w{gpgme_attr_t @var{waht}}, @w{int @var{whatidx}})
-The function @code{gpgme_get_sig_ulong_attr} is equivalent to:
-@example
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    @{
-      sig = sig->next;
-      idx--;
-    @}
-  if (!sig || idx)
-    return 0;
-
-  switch (what)
-    @{
-    case GPGME_ATTR_CREATED:
-      return sig->timestamp;
-
-    case GPGME_ATTR_EXPIRE:
-      return sig->exp_timestamp;
-
-    case GPGME_ATTR_VALIDITY:
-      return (unsigned long) sig->validity;
-
-    case GPGME_ATTR_SIG_STATUS:
-      switch (sig->status)
-       @{
-       case GPG_ERR_NO_ERROR:
-         return GPGME_SIG_STAT_GOOD;
-         
-       case GPG_ERR_BAD_SIGNATURE:
-         return GPGME_SIG_STAT_BAD;
-         
-       case GPG_ERR_NO_PUBKEY:
-         return GPGME_SIG_STAT_NOKEY;
-         
-       case GPG_ERR_NO_DATA:
-         return GPGME_SIG_STAT_NOSIG;
-         
-       case GPG_ERR_SIG_EXPIRED:
-         return GPGME_SIG_STAT_GOOD_EXP;
-         
-       case GPG_ERR_KEY_EXPIRED:
-         return GPGME_SIG_STAT_GOOD_EXPKEY;
-         
-       default:
-         return GPGME_SIG_STAT_ERROR;
-       @}
-
-    case GPGME_ATTR_SIG_SUMMARY:
-      return sig->summary;
-
-    default:
-      break;
-    @}
-  return 0;
-@end example
-@end deftypefun
-
-@deftypefun {const char *} gpgme_get_sig_key (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{idx}}, @w{gpgme_key_t *@var{r_key}})
-The function @code{gpgme_get_sig_key} is equivalent to:
-
-@example
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    @{
-      sig = sig->next;
-      idx--;
-    @}
-  if (!sig || idx)
-    return gpg_error (GPG_ERR_EOF);
-
-  return gpgme_get_key (ctx, sig->fpr, r_key, 0);
-@end example
-@end deftypefun
-
-
-@node Decrypt and Verify
-@subsection Decrypt and Verify
-@cindex decryption and verification
-@cindex verification and decryption
-@cindex signature check
-@cindex cryptographic operation, decryption and verification
-
-@deftypefun gpgme_error_t gpgme_op_decrypt_verify (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{cipher}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_decrypt_verify} decrypts the ciphertext in
-the data object @var{cipher} and stores it into the data object
-@var{plain}.  If @var{cipher} contains signatures, they will be
-verified.
-
-After the operation completed, @code{gpgme_op_decrypt_result} and
-@code{gpgme_op_verify_result} can be used to retrieve more information
-about the signatures.
-
-If the error code @code{GPG_ERR_NO_DATA} is returned, @var{cipher}
-does not contain any data to decrypt.  However, it might still be
-signed.  The information about detected signatures is available with
-@code{gpgme_op_verify_result} in this case.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-ciphertext could be decrypted successfully, @code{GPG_ERR_INV_VALUE}
-if @var{ctx}, @var{cipher} or @var{plain} is not a valid pointer,
-@code{GPG_ERR_NO_DATA} if @var{cipher} does not contain any data to
-decrypt, @code{GPG_ERR_DECRYPT_FAILED} if @var{cipher} is not a valid
-cipher text, @code{GPG_ERR_BAD_PASSPHRASE} if the passphrase for the
-secret key could not be retrieved, and passes through any errors that
-are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_decrypt_verify (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{cipher}}, @w{gpgme_data_t @var{plain}})
-The function @code{gpgme_op_decrypt_verify_start} initiates a
-@code{gpgme_op_decrypt_verify} operation.  It can be completed by
-calling @code{gpgme_wait} on the context.  @xref{Waiting For
-Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{cipher}, @var{plain} or @var{r_stat} is not a valid
-pointer, and @code{GPG_ERR_NO_DATA} if @var{cipher} does not contain
-any data to decrypt.
-@end deftypefun
-
-
-@node Sign
-@subsection Sign
-@cindex signature, creation
-@cindex sign
-@cindex cryptographic operation, signing
-
-A signature can contain signatures by one or more keys.  The set of
-keys used to create a signatures is contained in a context, and is
-applied to all following signing operations in this context (until the
-set is changed).
-
-@menu
-* Selecting Signers::             How to choose the keys to sign with.
-* Creating a Signature::          How to create a signature.
-* Signature Notation Data::       How to add notation data to a signature.
-@end menu
-
-
-@node Selecting Signers
-@subsubsection Selecting Signers
-@cindex signature, selecting signers
-@cindex signers, selecting
-
-@deftypefun void gpgme_signers_clear (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_signers_clear} releases a reference for each
-key on the signers list and removes the list of signers from the
-context @var{ctx}.
-
-Every context starts with an empty list.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_signers_add (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}})
-The function @code{gpgme_signers_add} adds the key @var{key} to the
-list of signers in the context @var{ctx}.
-
-Calling this function acquires an additional reference for the key.
-@end deftypefun
-
-@deftypefun gpgme_key_t gpgme_signers_enum (@w{const gpgme_ctx_t @var{ctx}}, @w{int @var{seq}})
-The function @code{gpgme_signers_enum} returns the @var{seq}th key in
-the list of signers in the context @var{ctx}.  An additional reference
-is acquired for the user.
-
-If @var{seq} is out of range, @code{NULL} is returned.
-@end deftypefun
-
-
-@node Creating a Signature
-@subsubsection Creating a Signature
-
-@deftp {Data type} {enum gpgme_sig_mode_t}
-@tindex gpgme_sig_mode_t
-The @code{gpgme_sig_mode_t} type is used to specify the desired type of a
-signature.  The following modes are available:
-
-@table @code
-@item GPGME_SIG_MODE_NORMAL
-A normal signature is made, the output includes the plaintext and the
-signature.
-
-@item GPGME_SIG_MODE_DETACH
-A detached signature is made.
-
-@item GPGME_SIG_MODE_CLEAR
-A clear text signature is made.  The @acronym{ASCII} armor and text
-mode settings of the context are ignored.
-@end table
-@end deftp
-
-@deftypefun gpgme_error_t gpgme_op_sign (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{sig}}, @w{gpgme_sig_mode_t @var{mode}})
-The function @code{gpgme_op_sign} creates a signature for the text in
-the data object @var{plain} and returns it in the data object
-@var{sig}.  The type of the signature created is determined by the
-@acronym{ASCII} armor and text mode attributes set for the context
-@var{ctx} and the requested signature mode @var{mode}.
-
-After the operation completed successfully, the result can be
-retrieved with @code{gpgme_op_sign_result}.
-
-If an S/MIME signed message is created using the CMS crypto engine,
-the number of certificates to include in the message can be specified
-with @code{gpgme_set_include_certs}.  @xref{Included Certificates}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-signature could be created successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{plain} or @var{sig} is not a valid pointer,
-@code{GPG_ERR_NO_DATA} if the signature could not be created,
-@code{GPG_ERR_BAD_PASSPHRASE} if the passphrase for the secret key
-could not be retrieved, @code{GPG_ERR_UNUSABLE_SECKEY} if there are
-invalid signers, and passes through any errors that are reported by the
-crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_sign_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{sig}}, @w{gpgme_sig_mode_t @var{mode}})
-The function @code{gpgme_op_sign_start} initiates a
-@code{gpgme_op_sign} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the operation could be
-started successfully, and @code{GPG_ERR_INV_VALUE} if @var{ctx},
-@var{plain} or @var{sig} is not a valid pointer.
-@end deftypefun
-
-@deftp {Data type} {gpgme_new_signature_t}
-This is a pointer to a structure used to store a part of the result of
-a @code{gpgme_op_sign} operation.  The structure contains the
-following members:
-
-@table @code
-@item gpgme_new_signature_t next
-This is a pointer to the next new signature structure in the linked
-list, or @code{NULL} if this is the last element.
-
-@item gpgme_sig_mode_t type
-The type of this signature.
-
-@item gpgme_pubkey_algo_t
-The public key algorithm used to create this signature.
-
-@item gpgme_hash_algo_t
-The hash algorithm used to create this signature.
-
-@item unsigned int sig_class
-The signature class of this signature.
-
-@item long int timestamp
-The creation timestamp of this signature.
-
-@item char *fpr
-The fingerprint of the key which was used to create this signature.
-@end table
-@end deftp
-
-@deftp {Data type} {gpgme_sign_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_sign} operation.  After successfully generating a
-signature, you can retrieve the pointer to the result with
-@code{gpgme_op_sign_result}.  The structure contains the following
-members:
-
-@table @code
-@item gpgme_invalid_key_t invalid_signers
-A linked list with information about all invalid keys for which a
-signature could not be created.
-
-@item gpgme_new_signature_t signatures
-A linked list with information about all signatures created.
-@end table
-@end deftp
-
-@deftypefun gpgme_sign_result_t gpgme_op_sign_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_sign_result} returns a
-@code{gpgme_sign_result_t} pointer to a structure holding the result
-of a @code{gpgme_op_sign} operation.  The pointer is only valid if the
-last operation on the context was a @code{gpgme_op_sign},
-@code{gpgme_op_sign_start}, @code{gpgme_op_encrypt_sign} or
-@code{gpgme_op_encrypt_sign_start} operation.  If that operation
-failed, the function might return a @code{NULL} pointer, The returned
-pointer is only valid until the next operation is started on the
-context.
-@end deftypefun
-
-
-@node Signature Notation Data
-@subsubsection Signature Notation Data
-@cindex notation data
-@cindex signature notation data
-@cindex policy URL
-
-Using the following functions, you can attach arbitrary notation data
-to a signature.  This information is then available to the user when
-the signature is verified.
-
-@deftypefun void gpgme_sig_notation_clear (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_sig_notation_clear} removes the notation data
-from the context @var{ctx}.  Subsequent signing operations from this
-context will not include any notation data.
-
-Every context starts with an empty notation data list.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_sig_notation_add (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{name}}, @w{const char *@var{value}}, @w{gpgme_sig_notation_flags_t @var{flags}})
-The function @code{gpgme_sig_notation_add} adds the notation data with
-the name @var{name} and the value @var{value} to the context
-@var{ctx}.
-
-Subsequent signing operations will include this notation data, as well
-as any other notation data that was added since the creation of the
-context or the last @code{gpgme_sig_notation_clear} operation.
-
-The arguments @var{name} and @var{value} must be @code{NUL}-terminated
-strings in human-readable form.  The flag
-@code{GPGME_SIG_NOTATION_HUMAN_READABLE} is implied
-(non-human-readable notation data is currently not supported).  The
-strings must be in UTF-8 encoding.
-
-If @var{name} is @code{NULL}, then @var{value} should be a policy URL.
-
-The function @code{gpgme_sig_notation_add} returns the error code
-@code{GPG_ERR_NO_ERROR} if the notation data could be added
-successfully, @code{GPG_ERR_INV_VALUE} if @var{ctx} is not a valid
-pointer, or if @var{name}, @var{value} and @var{flags} are an invalid
-combination.  The function also passes through any errors that are
-reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_sig_notation_t gpgme_sig_notation_get (@w{const gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_sig_notation_get} returns the linked list of
-notation data structures that are contained in the context @var{ctx}.
-
-If @var{ctx} is not a valid pointer, or there is no notation data
-added for this context, @code{NULL} is returned.
-@end deftypefun
-
-
-@node Encrypt
-@subsection Encrypt
-@cindex encryption
-@cindex cryptographic operation, encryption
-
-One plaintext can be encrypted for several recipients at the same
-time.  The list of recipients is created independently of any context,
-and then passed to the encryption operation.
-
-@menu
-* Encrypting a Plaintext::        How to encrypt a plaintext.
-@end menu
-
-
-@node Encrypting a Plaintext
-@subsubsection Encrypting a Plaintext
-
-@deftypefun gpgme_error_t gpgme_op_encrypt (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{recp}[]}, @w{gpgme_encrypt_flags_t @var{flags}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{cipher}})
-The function @code{gpgme_op_encrypt} encrypts the plaintext in the data
-object @var{plain} for the recipients @var{recp} and stores the
-ciphertext in the data object @var{cipher}.  The type of the
-ciphertext created is determined by the @acronym{ASCII} armor and text
-mode attributes set for the context @var{ctx}.
-
-@var{key} must be a @code{NULL}-terminated array of keys.  The user
-must keep references for all keys during the whole duration of the
-call (but see @code{gpgme_op_encrypt_start} for the requirements with
-the asynchronous variant).
-
-The value in @var{flags} is a bitwise-or combination of one or
-multiple of the following bit values:
-
-@table @code
-@item GPGME_ENCRYPT_ALWAYS_TRUST
-The @code{GPGME_ENCRYPT_ALWAYS_TRUST} symbol specifies that all the
-recipients in @var{recp} should be trusted, even if the keys do not
-have a high enough validity in the keyring.  This flag should be used
-with care; in general it is not a good idea to use any untrusted keys.
-@end table
-
-If @code{GPG_ERR_UNUSABLE_PUBKEY} is returned, some recipients in
-@var{recp} are invalid, but not all.  In this case the plaintext might
-be encrypted for all valid recipients and returned in @var{cipher} (if
-this happens depends on the crypto engine).  More information about
-the invalid recipients is available with
-@code{gpgme_op_encrypt_result}.
-
-If @var{recp} is @code{NULL}, symmetric rather than public key
-encryption is performed.  Symmetrically encrypted cipher text can be
-deciphered with @code{gpgme_op_decrypt}.  Note that in this case the
-crypto backend needs to retrieve a passphrase from the user.
-Symmetric encryption is currently only supported for the OpenPGP
-crypto backend.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-ciphertext could be created successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{recp}, @var{plain} or @var{cipher} is not a valid
-pointer, @code{GPG_ERR_UNUSABLE_PUBKEY} if @var{recp} contains some
-invalid recipients, @code{GPG_ERR_BAD_PASSPHRASE} if the passphrase
-for the symmetric key could not be retrieved, and passes through any
-errors that are reported by the crypto engine support routines.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_encrypt_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{recp}[]}, @w{gpgme_encrypt_flags_t @var{flags}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{cipher}})
-The function @code{gpgme_op_encrypt_start} initiates a
-@code{gpgme_op_encrypt} operation.  It can be completed by calling
-@code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
-
-References to the keys only need to be held for the duration of this
-call.  The user can release its references to the keys after this
-function returns, even if the operation is not yet finished.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
-@var{ctx}, @var{rset}, @var{plain} or @var{cipher} is not a valid
-pointer, and @code{GPG_ERR_UNUSABLE_PUBKEY} if @var{rset} does not
-contain any valid recipients.
-@end deftypefun
-
-@deftp {Data type} {gpgme_encrypt_result_t}
-This is a pointer to a structure used to store the result of a
-@code{gpgme_op_encrypt} operation.  After successfully encrypting
-data, you can retrieve the pointer to the result with
-@code{gpgme_op_encrypt_result}.  The structure contains the following
-members:
-
-@table @code
-@item gpgme_invalid_key_t invalid_recipients
-A linked list with information about all invalid keys for which
-the data could not be encrypted.
-@end table
-@end deftp
-
-@deftypefun gpgme_encrypt_result_t gpgme_op_encrypt_result (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_op_encrypt_result} returns a
-@code{gpgme_encrypt_result_t} pointer to a structure holding the
-result of a @code{gpgme_op_encrypt} operation.  The pointer is only
-valid if the last operation on the context was a
-@code{gpgme_op_encrypt}, @code{gpgme_op_encrypt_start},
-@code{gpgme_op_sign} or @code{gpgme_op_sign_start} operation.  If this
-operation failed, this might be a @code{NULL} pointer.  The returned
-pointer is only valid until the next operation is started on the
-context.
-@end deftypefun
-
-
-@deftypefun gpgme_error_t gpgme_op_encrypt_sign (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{recp}[]}, @w{gpgme_encrypt_flags_t @var{flags}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{cipher}})
-The function @code{gpgme_op_encrypt_sign} does a combined encrypt and
-sign operation.  It is used like @code{gpgme_op_encrypt}, but the
-ciphertext also contains signatures for the signers listed in
-@var{ctx}.
-
-The combined encrypt and sign operation is currently only available
-for the OpenPGP crypto engine.
-@end deftypefun
-
-@deftypefun gpgme_error_t gpgme_op_encrypt_sign_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{recp}}, @w{gpgme_encrypt_flags_t @var{flags}}, @w{gpgme_data_t @var{plain}}, @w{gpgme_data_t @var{cipher}})
-The function @code{gpgme_op_encrypt_sign_start} initiates a
-@code{gpgme_op_encrypt_sign} operation.  It can be completed by
-calling @code{gpgme_wait} on the context.  @xref{Waiting For
-Completion}.
-
-The function returns the error code @code{GPG_ERR_NO_ERROR} if the
-operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
-if @var{ctx}, @var{rset}, @var{plain} or @var{cipher} is not a valid
-pointer.
-@end deftypefun
-
-
-@node Run Control
-@section Run Control
-@cindex run control
-@cindex cryptographic operation, running
-
-@acronym{GPGME} supports running operations synchronously and
-asynchronously.  You can use asynchronous operation to set up a
-context up to initiating the desired operation, but delay performing
-it to a later point.
-
-Furthermore, you can use an external event loop to control exactly
-when @acronym{GPGME} runs.  This ensures that @acronym{GPGME} only
-runs when necessary and also prevents it from blocking for a long
-time.
-
-@menu
-* Waiting For Completion::        Waiting until an operation is completed.
-* Using External Event Loops::    Advanced control over what happens when.
-* Cancellation::                  How to end pending operations prematurely.
-@end menu
-
-
-@node Waiting For Completion
-@subsection Waiting For Completion
-@cindex cryptographic operation, wait for
-@cindex wait for completion
-
-@deftypefun gpgme_ctx_t gpgme_wait (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_error_t *@var{status}}, @w{int @var{hang}})
-The function @code{gpgme_wait} continues the pending operation within
-the context @var{ctx}.  In particular, it ensures the data exchange
-between @acronym{GPGME} and the crypto backend and watches over the
-run time status of the backend process.
-
-If @var{hang} is true, the function does not return until the
-operation is completed or cancelled.  Otherwise the function will not
-block for a long time.
-
-The error status of the finished operation is returned in @var{status}
-if @code{gpgme_wait} does not return @code{NULL}.
-
-The @var{ctx} argument can be @code{NULL}.  In that case,
-@code{gpgme_wait} waits for any context to complete its operation.
-
-@code{gpgme_wait} can be used only in conjunction with any context
-that has a pending operation initiated with one of the
-@code{gpgme_op_*_start} functions except @code{gpgme_op_keylist_start}
-and @code{gpgme_op_trustlist_start} (for which you should use the
-corresponding @code{gpgme_op_*_next} functions).  If @var{ctx} is
-@code{NULL}, all of such contexts are waited upon and possibly
-returned.  Synchronous operations running in parallel, as well as key
-and trust item list operations, do not affect @code{gpgme_wait}.
-
-In a multi-threaded environment, only one thread should ever call
-@code{gpgme_wait} at any time, irregardless if @var{ctx} is specified
-or not.  This means that all calls to this function should be fully
-synchronized by locking primitives.  It is safe to start asynchronous
-operations while a thread is running in @code{gpgme_wait}.
-
-The function returns the @var{ctx} of the context which has finished
-the operation.  If @var{hang} is false, and the timeout expires,
-@code{NULL} is returned and @code{*status} will be set to 0.  If an
-error occurs, @code{NULL} is returned and the error is returned in
-@code{*status}.
-@end deftypefun
-
-
-@node Using External Event Loops
-@subsection Using External Event Loops
-@cindex event loop, external
-
-@acronym{GPGME} hides the complexity of the communication between the
-library and the crypto engine.  The price of this convenience is that
-the calling thread can block arbitrary long waiting for the data
-returned by the crypto engine.  In single-threaded programs, in
-particular if they are interactive, this is an unwanted side-effect.
-OTOH, if @code{gpgme_wait} is used without the @var{hang} option being
-enabled, it might be called unnecessarily often, wasting CPU time that
-could be used otherwise.
-
-The I/O callback interface described in this section lets the user
-take control over what happens when.  @acronym{GPGME} will provide the
-user with the file descriptors that should be monitored, and the
-callback functions that should be invoked when a file descriptor is
-ready for reading or writing.  It is then the user's responsibility to
-decide when to check the file descriptors and when to invoke the
-callback functions.  Usually this is done in an event loop, that also
-checks for events in other parts of the program.  If the callback
-functions are only called when the file descriptors are ready,
-@acronym{GPGME} will never block.  This gives the user more control
-over the program flow, and allows to perform other tasks when
-@acronym{GPGME} would block otherwise.
-
-By using this advanced mechanism, @acronym{GPGME} can be integrated
-smoothly into GUI toolkits like GTK+ even for single-threaded
-programs.
-
-@menu
-* I/O Callback Interface::        How I/O callbacks are registered.
-* Registering I/O Callbacks::     How to use I/O callbacks for a context.
-* I/O Callback Example::          An example how to use I/O callbacks.
-* I/O Callback Example GTK+::     How to use @acronym{GPGME} with GTK+.
-* I/O Callback Example GDK::      How to use @acronym{GPGME} with GDK.
-* I/O Callback Example Qt::       How to use @acronym{GPGME} with Qt.
-@end menu
-
-
-@node I/O Callback Interface
-@subsubsection I/O Callback Interface
-
-@deftp {Data type} {gpgme_error_t (*gpgme_io_cb_t) (@w{void *@var{data}}, @w{int @var{fd}})}
-@tindex gpgme_io_cb_t
-The @code{gpgme_io_cb_t} type is the type of functions which
-@acronym{GPGME} wants to register as I/O callback handlers using the
-@code{gpgme_register_io_cb_t} functions provided by the user.
-
-@var{data} and @var{fd} are provided by @acronym{GPGME} when the I/O
-callback handler is registered, and should be passed through to the
-handler when it is invoked by the user because it noticed activity on
-the file descriptor @var{fd}.
-
-The callback handler always returns @code{0}, but you should consider
-the return value to be reserved for later use.
-@end deftp
-
-@deftp {Data type} {gpgme_error_t (*gpgme_register_io_cb_t) (@w{void *@var{data}}, @w{int @var{fd}}, @w{int @var{dir}}, @w{gpgme_io_cb_t @var{fnc}}, @w{void *@var{fnc_data}}, @w{void **@var{tag}})}
-@tindex gpgme_register_io_cb_t
-The @code{gpgme_register_io_cb_t} type is the type of functions which can
-be called by @acronym{GPGME} to register an I/O callback function
-@var{fnc} for the file descriptor @var{fd} with the user.
-@var{fnc_data} should be passed as the first argument to @var{fnc}
-when the handler is invoked (the second argument should be @var{fd}).
-If @var{dir} is 0, @var{fnc} should be called by the user when
-@var{fd} is ready for writing.  If @var{dir} is 1, @var{fnc} should be
-called when @var{fd} is ready for reading.
-
-@var{data} was provided by the user when registering the
-@code{gpgme_register_io_cb_t} function with @acronym{GPGME} and will always
-be passed as the first argument when registering a callback function.
-For example, the user can use this to determine the event loop to
-which the file descriptor should be added.
-
-@acronym{GPGME} will call this function when a crypto operation is
-initiated in a context for which the user has registered I/O callback
-handler functions with @code{gpgme_set_io_cbs}.  It can also call this
-function when it is in an I/O callback handler for a file descriptor
-associated to this context.
-
-The user should return a unique handle in @var{tag} identifying this
-I/O callback registration, which will be passed to the
-@code{gpgme_register_io_cb_t} function without interpretation when the file
-descriptor should not be monitored anymore.
-@end deftp
-
-@deftp {Data type} {void (*gpgme_remove_io_cb_t) (@w{void *@var{tag}})}
-The @code{gpgme_remove_io_cb_t} type is the type of functions which can be
-called by @acronym{GPGME} to remove an I/O callback handler that was
-registered before.  @var{tag} is the handle that was returned by the
-@code{gpgme_register_io_cb_t} for this I/O callback.
-
-@acronym{GPGME} can call this function when a crypto operation is in
-an I/O callback.  It will also call this function when the context is
-destroyed while an operation is pending.
-@end deftp
-
-@deftp {Data type} {enum gpgme_event_io_t}
-@tindex gpgme_event_io_t
-The @code{gpgme_event_io_t} type specifies the type of an event that is
-reported to the user by @acronym{GPGME} as a consequence of an I/O
-operation.  The following events are defined:
-
-@table @code
-@item GPGME_EVENT_START
-The operation is fully initialized now, and you can start to run the
-registered I/O callback handlers now.  Note that registered I/O
-callback handlers must not be run before this event is signalled.
-@var{type_data} is @code{NULL} and reserved for later use.
-
-@item GPGME_EVENT_DONE
-The operation is finished, the last I/O callback for this operation
-was removed.  The accompanying @var{type_data} points to a
-@code{gpgme_error_t} variable that contains the status of the operation
-that finished.  This event is signalled after the last I/O callback
-has been removed.
-
-@item GPGME_EVENT_NEXT_KEY
-In a @code{gpgme_op_keylist_start} operation, the next key was
-received from the crypto engine.  The accompanying @var{type_data} is
-a @code{gpgme_key_t} variable that contains the key with one reference
-for the user.
-
-@item GPGME_EVENT_NEXT_TRUSTITEM
-In a @code{gpgme_op_trustlist_start} operation, the next trust item
-was received from the crypto engine.  The accompanying @var{type_data}
-is a @code{gpgme_trust_item_t} variable that contains the trust item with
-one reference for the user.
-@end table
-@end deftp
-
-@deftp {Data type} {void (*gpgme_event_io_cb_t) (@w{void *@var{data}}, @w{gpgme_event_io_t @var{type}}, @w{void *@var{type_data}})}
-The @code{gpgme_event_io_cb_t} type is the type of functions which can be
-called by @acronym{GPGME} to signal an event for an operation running
-in a context which has I/O callback functions registered by the user.
-
-@var{data} was provided by the user when registering the
-@code{gpgme_event_io_cb_t} function with @acronym{GPGME} and will always be
-passed as the first argument when registering a callback function.
-For example, the user can use this to determine the context in which
-this event has occured.
-
-@var{type} will specify the type of event that has occured.
-@var{type_data} specifies the event further, as described in the above
-list of possible @code{gpgme_event_io_t} types.
-
-@acronym{GPGME} can call this function in an I/O callback handler.
-@end deftp
-
-
-@node Registering I/O Callbacks
-@subsubsection Registering I/O Callbacks
-
-@deftp {Data type} {struct gpgme_io_cb_ts}
-@tindex gpgme_event_io_t
-This structure is used to store the I/O callback interface functions
-described in the previous section.  It has the following members:
-
-@table @code
-@item gpgme_register_io_cb_t add
-This is the function called by @acronym{GPGME} to register an I/O
-callback handler.  It must be specified.
-
-@item void *add_data
-This is passed as the first argument to the @code{add} function when
-it is called by @acronym{GPGME}.  For example, it can be used to
-determine the event loop to which the file descriptor should be added.
-
-@item gpgme_remove_io_cb_t remove
-This is the function called by @acronym{GPGME} to remove an I/O
-callback handler.  It must be specified.
-
-@item gpgme_event_io_cb_t event
-This is the function called by @acronym{GPGME} to signal an event for
-an operation.  It is optional, but if you don't specify it, you can
-not retrieve the return value of the operation.
-
-@item void *event_data
-This is passed as the first argument to the @code{event} function when
-it is called by @acronym{GPGME}.  For example, it can be used to
-determine the context in which the event has occured.
-@end table
-@end deftp
-
-@deftypefun void gpgme_set_io_cbs (@w{gpgme_ctx_t @var{ctx}}, @w{struct gpgme_io_cb_ts *@var{io_cbs}})
-The function @code{gpgme_set_io_cbs} enables the I/O callback
-interface for the context @var{ctx}.  The I/O callback functions are
-specified by @var{io_cbs}.
-
-If @var{io_cbs}->@code{add} is @code{NULL}, the I/O callback interface
-is disabled for the context, and normal operation is restored.
-@end deftypefun
-
-@deftypefun void gpgme_get_io_cbs (@w{gpgme_ctx_t @var{ctx}}, @w{struct gpgme_io_cb_ts *@var{io_cbs}})
-The function @code{gpgme_get_io_cbs} returns the I/O callback
-functions set with @code{gpgme_set_io_cbs} in @var{io_cbs}.
-@end deftypefun
-
-
-@node I/O Callback Example
-@subsubsection I/O Callback Example
-
-To actually use an external event loop, you have to implement the I/O
-callback functions that are used by @acronym{GPGME} to register and
-unregister file descriptors.  Furthermore, you have to actually
-monitor these file descriptors for activity and call the appropriate
-I/O callbacks.
-
-The following example illustrates how to do that.  The example uses
-locking to show in which way the the callbacks and the event loop can
-run concurrently.  For the event loop, we use a fixed array.  For a
-real-world implementation, you should use a dynamically sized
-structure because the number of file descriptors needed for a crypto
-operation in @acronym{GPGME} is not predictable.
-
-@example
-#include <pthread.h>
-#include <sys/types.h>
-#include <gpgme.h>
-
-/* The following structure holds the result of a crypto operation.  */
-struct op_result
-@{
-  int done;
-  gpgme_error_t err;
-@};
-
-/* The following structure holds the data associated with one I/O
-callback.  */
-struct one_fd
-@{
-  int fd;
-  int dir;
-  gpgme_io_cb_t fnc;
-  void *fnc_data;
-@};
-
-struct event_loop
-@{
-  pthread_mutex_t lock;
-#define MAX_FDS 32
-  /* Unused slots are marked with FD being -1.  */
-  struct one_fd fds[MAX_FDS];
-@};
-@end example
-
-The following functions implement the I/O callback interface.
-
-@example
-gpgme_error_t
-add_io_cb (void *data, int fd, int dir, gpgme_io_cb_t fnc, void *fnc_data,
-          void **r_tag)
-@{
-  struct event_loop *loop = data;
-  struct one_fd *fds = loop->fds;
-  int i;
-
-  pthread_mutex_lock (&loop->lock);
-  for (i = 0; i < MAX_FDS; i++)
-    @{
-      if (fds[i].fd == -1)
-       @{
-         fds[i].fd = fd;
-         fds[i].dir = dir;
-         fds[i].fnc = fnc;
-         fds[i].fnc_data = fnc_data;
-         break;
-       @}
-    @}
-  pthread_mutex_unlock (&loop->lock);
-  if (i == MAX_FDS)
-    return gpg_error (GPG_ERR_GENERAL);
-  *r_tag = &fds[i];
-  return 0;
-@}
-
-void
-remove_io_cb (void *tag)
-@{
-  struct one_fd *fd = tag;
-
-  pthread_mutex_lock (&loop->lock);
-  fd->fd = -1;
-  pthread_mutex_unlock (&loop->lock);
-@}
-
-void
-event_io_cb (void *data, gpgme_event_io_t type, void *type_data)
-@{
-  struct op_result *result = data;
-
-  /* We don't support list operations here.  */
-  if (type == GPGME_EVENT_DONE)
-    @{
-      result->done = 1;
-      result->err = *type_data;
-    @}
-@}
-@end example
-
-The final missing piece is the event loop, which will be presented
-next.  We only support waiting for the success of a single operation.
-
-@example
-int
-do_select (struct event_loop *loop)
-@{
-  fd_set rfds;
-  fd_set wfds;
-  int i, n;
-  int any = 0;
-
-  pthread_mutex_lock (&loop->lock);
-  FD_ZERO (&rfds);
-  FD_ZERO (&wfds);
-  for (i = 0; i < FDLIST_MAX; i++)
-    if (fdlist[i].fd != -1)
-      FD_SET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds);
-  pthread_mutex_unlock (&loop->unlock);
-
-  do
-    @{
-      n = select (FD_SETSIZE, &rfds, &wfds, NULL, 0);
-    @}
-  while (n < 0 && errno == EINTR);
-
-  if (n < 0)
-    return n;  /* Error or timeout.  */
-
-  pthread_mutex_lock (&loop->lock);
-  for (i = 0; i < FDLIST_MAX && n; i++)
-    @{
-      if (fdlist[i].fd != -1)
-       @{
-         if (FD_ISSET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds))
-           @{
-             assert (n);
-             n--;
-             any = 1;
-              /* The I/O callback handler can register/remove callbacks,
-                 so we have to unlock the file descriptor list.  */
-              pthread_mutex_unlock (&loop->lock);
-             (*fdlist[i].fnc) (fdlist[i].fnc_data, fdlist[i].fd);
-              pthread_mutex_lock (&loop->lock);
-           @}
-       @}
-    @}
-  pthread_mutex_unlock (&loop->lock);
-  return any;
-@}
-
-void
-wait_for_op (struct event_loop *loop, struct op_result *result)
-@{
-  int ret;
-
-  do
-    @{
-      ret = do_select (loop);
-    @}
-  while (ret >= 0 && !result->done);
-  return ret;
-@}
-@end example
-
-The main function shows how to put it all together.
-
-@example
-int
-main (int argc, char *argv[])
-@{
-  struct event_loop loop;
-  struct op_result result;
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t sig, text;
-  gpgme_sig_stat_t status;
-  int i;
-  struct gpgme_io_cb_ts io_cbs =
-  @{
-    add_io_cb,
-    &loop,
-    remove_io_cb,
-    event_io_cb,
-    &result
-  @};
-
-  /* Initialize the loop structure.  */
-  loop.lock = PTHREAD_MUTEX_INITIALIZER;
-  for (i = 0; i < MAX_FDS; i++)
-    loop->fds[i].fd = -1;
-
-  /* Initialize the result structure.  */
-  result.done = 0;
-
-  err = gpgme_data_new_from_file (&sig, "signature", 1);
-  if (!err)
-    err = gpgme_data_new_from_file (&text, "text", 1);
-  if (!err)
-    err = gpgme_new (&ctx);
-  if (!err)
-    @{
-       gpgme_set_io_cbs (ctx, &io_cbs);
-       err = gpgme_op_verify_start (ctx, sig, text, &status);
-    @}
-  if (err)
-    @{
-      fprintf (stderr, "gpgme error: %s: %s\n",
-               gpgme_strsource (err), gpgme_strerror (err));
-      exit (1);
-    @}
-
-  wait_for_op (&loop, &result);
-  if (!result.done)
-    @{
-      fprintf (stderr, "select error\n");
-      exit (1);
-    @}
-  if (!result.err)
-    @{
-      fprintf (stderr, "verification failed: %s: %s\n",
-               gpgme_strsource (result.err), gpgme_strerror (result.err));
-      exit (1);
-    @}
-  /* Evaluate STATUS.  */
-  @dots{}
-  return 0;
-@}
-@end example
-
-
-@node I/O Callback Example GTK+
-@subsubsection I/O Callback Example GTK+
-@cindex GTK+, using @acronym{GPGME} with
-
-The I/O callback interface can be used to integrate @acronym{GPGME}
-with the GTK+ event loop.  The following code snippets shows how this
-can be done using the appropriate register and remove I/O callback
-functions.  In this example, the private data of the register I/O
-callback function is unused.  The event notifications is missing
-because it does not require any GTK+ specific setup.
-
-@example
-#include <gtk/gtk.h>
-
-struct my_gpgme_io_cb
-@{
-  gpgme_io_cb_t fnc;
-  void *fnc_data;
-  guint input_handler_id
-@};
-
-void
-my_gpgme_io_cb (gpointer data, gint source, GdkInputCondition condition)
-@{
-  struct my_gpgme_io_cb *iocb = data;
-  (*(iocb->fnc)) (iocb->data, source);
-@}
-
-void
-my_gpgme_remove_io_cb (void *data)
-@{
-  struct my_gpgme_io_cb *iocb = data;
-  gtk_input_remove (data->input_handler_id);
-@}
-
-void
-my_gpgme_register_io_callback (void *data, int fd, int dir, gpgme_io_cb_t fnc,
-                               void *fnc_data, void **tag)
-@{
-  struct my_gpgme_io_cb *iocb = g_malloc (sizeof (struct my_gpgme_io_cb));
-  iocb->fnc = fnc;
-  iocb->data = fnc_data;
-  iocb->input_handler_id = gtk_input_add_full (fd, dir
-                                                   ? GDK_INPUT_READ
-                                                   : GDK_INPUT_WRITE,
-                                               my_gpgme_io_callback,
-                                               0, iocb, NULL);
-  *tag = iocb;
-  return 0;
-@}
-@end example
-
-
-@node I/O Callback Example GDK
-@subsubsection I/O Callback Example GDK
-@cindex GDK, using @acronym{GPGME} with
-
-The I/O callback interface can also be used to integrate
-@acronym{GPGME} with the GDK event loop.  The following code snippets
-shows how this can be done using the appropriate register and remove
-I/O callback functions.  In this example, the private data of the
-register I/O callback function is unused.  The event notifications is
-missing because it does not require any GDK specific setup.
-
-It is very similar to the GTK+ example in the previous section.
-
-@example
-#include <gdk/gdk.h>
-
-struct my_gpgme_io_cb
-@{
-  gpgme_io_cb_t fnc;
-  void *fnc_data;
-  gint tag;
-@};
-
-void
-my_gpgme_io_cb (gpointer data, gint source, GdkInputCondition condition)
-@{
-  struct my_gpgme_io_cb *iocb = data;
-  (*(iocb->fnc)) (iocb->data, source);
-@}
-
-void
-my_gpgme_remove_io_cb (void *data)
-@{
-  struct my_gpgme_io_cb *iocb = data;
-  gdk_input_remove (data->tag);
-@}
-
-void
-my_gpgme_register_io_callback (void *data, int fd, int dir, gpgme_io_cb_t fnc,
-                               void *fnc_data, void **tag)
-@{
-  struct my_gpgme_io_cb *iocb = g_malloc (sizeof (struct my_gpgme_io_cb));
-  iocb->fnc = fnc;
-  iocb->data = fnc_data;
-  iocb->tag = gtk_input_add_full (fd, dir ? GDK_INPUT_READ : GDK_INPUT_WRITE,
-                                  my_gpgme_io_callback, iocb, NULL);
-  *tag = iocb;
-  return 0;
-@}
-@end example
-
-
-@node I/O Callback Example Qt
-@subsubsection I/O Callback Example Qt
-@cindex Qt, using @acronym{GPGME} with
-
-The I/O callback interface can also be used to integrate
-@acronym{GPGME} with the Qt event loop.  The following code snippets
-show how this can be done using the appropriate register and remove
-I/O callback functions.  In this example, the private data of the
-register I/O callback function is unused.  The event notifications is
-missing because it does not require any Qt specific setup.
-
-@example
-#include <qsocketnotifier.h>
-#include <qapplication.h>
-
-struct IOCB @{
-  IOCB( GpgmeIOCb f, void * d, QSocketNotifier * n )
-    : func( f ), data( d ), notifier( n ) @{@}
-  GpgmeIOCb func;
-  void * data;
-  QSocketNotifier * notifier;
-@}
-
-class MyApp : public QApplication @{
-
-  // ...
-  
-  static void registerGpgmeIOCallback( void * data, int fd, int dir,
-                                       GpgmeIOCb func, void * func_data,
-                                       void ** tag ) @{
-    QSocketNotifier * n =
-      new QSocketNotifier( fd, dir ? QSocketNotifier::Read
-                                   : QSocketNotifier::Write );
-    connect( n, SIGNAL(activated(int)),
-             qApp, SLOT(slotGpgmeIOCallback(int)) );
-    qApp->mIOCBs.push_back( IOCB( func, func_data, n ) );
-    *tag = (void*)n;
-  @}
-
-  static void removeGpgmeIOCallback( void * tag ) @{
-    if ( !tag ) return;
-    QSocketNotifier * n = static_cast<QSocketNotifier*>( tag );
-    for ( QValueList<IOCB>::iterator it = qApp->mIOCBs.begin() ;
-          it != qApp->mIOCBs.end() ; ++it )
-      if ( it->notifier == n ) @{
-        delete it->notifier;
-        qApp->mIOCBs.erase( it );
-        return;
-      @}
-  @}
-
-public slots:
-  void slotGpgmeIOCallback( int fd ) @{
-    for ( QValueList<IOCB>::const_iterator it = mIOCBs.begin() ;
-          it != mIOCBs.end() ; ++it )
-      if ( it->notifier && it->notifier->socket() == fd )
-        (*(it->func)) ( it->func_data, fd );
-  @}
-
-  // ...
-
-private:
-  QValueList<IOCB> mIOCBs;
-  // ...
-@};
-@end example
-
-
-@node Cancellation
-@subsection Cancellation
-@cindex cryptographic operation, aborting
-@cindex cryptographic operation, cancelling
-@cindex aborting operations
-@cindex cancelling operations
-
-Sometimes you do not want to wait for an operation to finish.  If you
-use external I/O callbacks, you can cancel a pending operation.
-However, you must ensure that no other thread is currently using the
-context in which the operation you want to cancel runs.  This includes
-callback handlers.  So your external event loop must either be halted
-or otherwise it must be guaranteed that no installed I/O callbacks are
-run for this context.
-
-@deftypefun gpgme_ctx_t gpgme_cancel (@w{gpgme_ctx_t @var{ctx}})
-The function @code{gpgme_cancel} attempts to cancel a pending
-operation in the context @var{ctx}.  This only works if you use the
-global event loop or your own event loop.
-
-If you use the global event loop, you must not call @code{gpgme_wait}
-or @code{gpgme_wait} during cancellation.  After successful
-cancellation, you can call @code{gpgme_wait} (optionally waiting on
-@var{ctx}), and the context @var{ctx} will appear as if it had
-finished with the error code @code{GPG_ERR_CANCEL}.
-
-If you use your an external event loop, you must ensure that no I/O
-callbacks are invoked for this context (for example by halting the
-event loop).  On successful cancellation, all registered I/O callbacks
-for this context will be unregistered, and a @code{GPGME_EVENT_DONE}
-event with the error code @code{GPG_ERR_CANCEL} will be signaled.
-
-The function returns an error code if the cancellation failed (in this
-case the state of @var{ctx} is not modified).
-@end deftypefun
-
-
-@include lesser.texi
-
-
-@node Concept Index
-@unnumbered Concept Index
-
-@printindex cp
-
-
-@node Function and Data Index
-@unnumbered Function and Data Index
-
-@printindex fn
-
-
-@summarycontents
-@contents
-@bye
diff --git a/tags/gpgme-1-1-1/doc/lesser.texi b/tags/gpgme-1-1-1/doc/lesser.texi
deleted file mode 100644 (file)
index ce83628..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-@node Library Copying
-@appendix GNU LESSER GENERAL PUBLIC LICENSE
-
-@cindex LGPL, Lesser General Public License
-@center Version 2.1, February 1999
-
-@display
-Copyright @copyright{} 1991, 1999 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.
-
-[This is the first released version of the Lesser GPL.  It also counts
-as the successor of the GNU Library Public License, version 2, hence the
-version number 2.1.]
-@end display
-
-@appendixsubsec Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software---to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software---typically libraries---of the Free
-Software Foundation and other authors who decide to use it.  You can use
-it too, but we suggest you first think carefully about whether this
-license or the ordinary General Public License is the better strategy to
-use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-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 and use pieces of it
-in new free programs; and that you are informed that you can do these
-things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the @dfn{Lesser} General Public License because it
-does @emph{Less} to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-``work based on the library'' and a ``work that uses the library''.  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-@iftex
-@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center GNU LESSER GENERAL PUBLIC LICENSE
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate 0
-@item
-This License Agreement applies to any software library or other program
-which contains a notice placed by the copyright holder or other
-authorized party saying it may be distributed under the terms of this
-Lesser General Public License (also called ``this License'').  Each
-licensee is addressed as ``you''.
-
-  A ``library'' means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The ``Library'', below, refers to any such software library or work
-which has been distributed under these terms.  A ``work based on the
-Library'' means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term ``modification''.)
-
-  ``Source code'' for a work means the preferred form of the work for
-making modifications to it.  For a library, 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 library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-@item
-You may copy and distribute verbatim copies of the Library's
-complete 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 distribute a copy of this License along with the
-Library.
-
-  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.
-
-@item
-You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-The modified work must itself be a software library.
-
-@item
-You must cause the files modified to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause the whole of the work to be licensed at no
-charge to all third parties under the terms of this License.
-
-@item
-If a facility in the modified Library refers to a function or a
-table of data to be supplied by an application program that uses
-the facility, other than as an argument passed when the facility
-is invoked, then you must make a good faith effort to ensure that,
-in the event an application does not supply such function or
-table, the facility still operates, and performs whatever part of
-its purpose remains meaningful.
-
-(For example, a function in a library to compute square roots has
-a purpose that is entirely well-defined independent of the
-application.  Therefore, Subsection 2d requires that any
-application-supplied function or table used by this function must
-be optional: if the application does not supply it, the square
-root function must still compute square roots.)
-@end enumerate
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-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 Library, 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 Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-@item
-You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you 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.
-
-  If distribution of 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 satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a ``work that uses the Library''.  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a ``work that uses the Library'' with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a ``work that uses the
-library''.  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a ``work that uses the Library'' uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-@item
-As an exception to the Sections above, you may also combine or
-link a ``work that uses the Library'' with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-@enumerate a
-@item
-Accompany the work with the complete corresponding
-machine-readable source code for the Library including whatever
-changes were used in the work (which must be distributed under
-Sections 1 and 2 above); and, if the work is an executable linked
-with the Library, with the complete machine-readable ``work that
-uses the Library'', as object code and/or source code, so that the
-user can modify the Library and then relink to produce a modified
-executable containing the modified Library.  (It is understood
-that the user who changes the contents of definitions files in the
-Library will not necessarily be able to recompile the application
-to use the modified definitions.)
-
-@item
-Use a suitable shared library mechanism for linking with the Library.  A
-suitable mechanism is one that (1) uses at run time a copy of the
-library already present on the user's computer system, rather than
-copying library functions into the executable, and (2) will operate
-properly with a modified version of the library, if the user installs
-one, as long as the modified version is interface-compatible with the
-version that the work was made with.
-
-@item
-Accompany the work with a written offer, valid for at
-least three years, to give the same user the materials
-specified in Subsection 6a, above, for a charge no more
-than the cost of performing this distribution.
-
-@item
-If distribution of the work is made by offering access to copy
-from a designated place, offer equivalent access to copy the above
-specified materials from the same place.
-
-@item
-Verify that the user has already received a copy of these
-materials or that you have already sent this user a copy.
-@end enumerate
-
-  For an executable, the required form of the ``work that uses the
-Library'' must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be 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.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-@item
-You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-@enumerate a
-@item
-Accompany the combined library with a copy of the same work
-based on the Library, uncombined with any other library
-facilities.  This must be distributed under the terms of the
-Sections above.
-
-@item
-Give prominent notice with the combined library of the fact
-that part of it is a work based on the Library, and explaining
-where to find the accompanying uncombined form of the same work.
-@end enumerate
-
-@item
-You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library 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.
-
-@item
-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 Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-@item
-Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-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 with
-this License.
-
-@item
-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 Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library 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 Library.
-
-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.
-
-@item
-If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library 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.
-
-@item
-The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-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 Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-@item
-If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-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.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY ``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
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-@item
-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 LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@appendixsubsec How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  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.
-
-@smallexample
-@var{one line to give the library's name and an idea of what it does.}
-Copyright (C) @var{year}  @var{name of author}
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or (at
-your option) any later version.
-
-This library 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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
-USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the library, if
-necessary.  Here is a sample; alter the names:
-
-@smallexample
-Yoyodyne, Inc., hereby disclaims all copyright interest in the library
-`Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-@var{signature of Ty Coon}, 1 April 1990
-Ty Coon, President of Vice
-@end smallexample
-
-That's all there is to it!
diff --git a/tags/gpgme-1-1-1/doc/mdate-sh b/tags/gpgme-1-1-1/doc/mdate-sh
deleted file mode 100755 (executable)
index b610b47..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/bin/sh
-# Get modification time of a file or directory and pretty-print it.
-# Copyright (C) 1995, 1996, 1997, 2003  Free Software Foundation, Inc.
-# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
-#
-# 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.
-
-# Prevent date giving response in another language.
-LANG=C
-export LANG
-LC_ALL=C
-export LC_ALL
-LC_TIME=C
-export LC_TIME
-
-save_arg1="$1"
-
-# Find out how to get the extended ls output of a file or directory.
-if ls -L /dev/null 1>/dev/null 2>&1; then
-  ls_command='ls -L -l -d'
-else
-  ls_command='ls -l -d'
-fi
-
-# A `ls -l' line looks as follows on OS/2.
-#  drwxrwx---        0 Aug 11  2001 foo
-# This differs from Unix, which adds ownership information.
-#  drwxrwx---   2 root  root      4096 Aug 11  2001 foo
-#
-# To find the date, we split the line on spaces and iterate on words
-# until we find a month.  This cannot work with files whose owner is a
-# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'
-# will be owned by a user whose name is a month.  So we first look at
-# the extended ls output of the root directory to decide how many
-# words should be skipped to get the date.
-
-# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
-set - x`$ls_command /`
-
-# Find which argument is the month.
-month=
-command=
-until test $month
-do
-  shift
-  # Add another shift to the command.
-  command="$command shift;"
-  case $1 in
-    Jan) month=January; nummonth=1;;
-    Feb) month=February; nummonth=2;;
-    Mar) month=March; nummonth=3;;
-    Apr) month=April; nummonth=4;;
-    May) month=May; nummonth=5;;
-    Jun) month=June; nummonth=6;;
-    Jul) month=July; nummonth=7;;
-    Aug) month=August; nummonth=8;;
-    Sep) month=September; nummonth=9;;
-    Oct) month=October; nummonth=10;;
-    Nov) month=November; nummonth=11;;
-    Dec) month=December; nummonth=12;;
-  esac
-done
-
-# Get the extended ls output of the file or directory.
-set - x`eval "$ls_command \"\$save_arg1\""`
-
-# Remove all preceding arguments
-eval $command
-
-# Get the month.  Next argument is day, followed by the year or time.
-case $1 in
-  Jan) month=January; nummonth=1;;
-  Feb) month=February; nummonth=2;;
-  Mar) month=March; nummonth=3;;
-  Apr) month=April; nummonth=4;;
-  May) month=May; nummonth=5;;
-  Jun) month=June; nummonth=6;;
-  Jul) month=July; nummonth=7;;
-  Aug) month=August; nummonth=8;;
-  Sep) month=September; nummonth=9;;
-  Oct) month=October; nummonth=10;;
-  Nov) month=November; nummonth=11;;
-  Dec) month=December; nummonth=12;;
-esac
-
-day=$2
-
-# Here we have to deal with the problem that the ls output gives either
-# the time of day or the year.
-case $3 in
-  *:*) set `date`; eval year=\$$#
-       case $2 in
-        Jan) nummonthtod=1;;
-        Feb) nummonthtod=2;;
-        Mar) nummonthtod=3;;
-        Apr) nummonthtod=4;;
-        May) nummonthtod=5;;
-        Jun) nummonthtod=6;;
-        Jul) nummonthtod=7;;
-        Aug) nummonthtod=8;;
-        Sep) nummonthtod=9;;
-        Oct) nummonthtod=10;;
-        Nov) nummonthtod=11;;
-        Dec) nummonthtod=12;;
-       esac
-       # For the first six month of the year the time notation can also
-       # be used for files modified in the last year.
-       if (expr $nummonth \> $nummonthtod) > /dev/null;
-       then
-        year=`expr $year - 1`
-       fi;;
-  *) year=$3;;
-esac
-
-# The result.
-echo $day $month $year
diff --git a/tags/gpgme-1-1-1/doc/texinfo.tex b/tags/gpgme-1-1-1/doc/texinfo.tex
deleted file mode 100644 (file)
index e9293f3..0000000
+++ /dev/null
@@ -1,6773 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-%
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{2003-05-04.08}
-%
-% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-%
-% This texinfo.tex file is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License as
-% published by the Free Software Foundation; either version 2, or (at
-% your option) any later version.
-%
-% This texinfo.tex file 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 texinfo.tex file; see the file COPYING.  If not, write
-% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-% Boston, MA 02111-1307, USA.
-%
-% In other words, you are welcome to use, share and improve this program.
-% You are forbidden to forbid anyone else to use, share and improve
-% what you give them.   Help stamp out software-hoarding!
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-%   ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex
-%     (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
-%   ftp://tug.org/tex/texinfo.tex
-%     (and all CTAN mirrors, see http://www.ctan.org),
-%   and /home/gd/gnu/doc/texinfo.tex on the GNU machines.
-%
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-%
-% The texinfo.tex in any given Texinfo distribution could well be out
-% of date, so if that's what you're using, please check.
-%
-% Send bug reports to bug-texinfo@gnu.org.  Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem.  Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution.  For a simple
-% manual foo.texi, however, you can get away with this:
-%   tex foo.texi
-%   texindex foo.??
-%   tex foo.texi
-%   tex foo.texi
-%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
-% The extra TeX runs get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages, to some
-% extent.  You can get the existing language-specific files from the
-% full Texinfo distribution.
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
-  \catcode`+=\active \catcode`\_=\active}
-
-\message{Basics,}
-\chardef\other=12
-
-% We never want plain's \outer definition of \+ in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Save some plain tex macros whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexgtr=>
-\let\ptexhat=^
-\let\ptexi=\i
-\let\ptexindent=\indent
-\let\ptexlbrace=\{
-\let\ptexless=<
-\let\ptexplus=+
-\let\ptexrbrace=\}
-\let\ptexslash=\/
-\let\ptexstar=\*
-\let\ptext=\t
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
-\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi
-\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
-\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi
-
-% In some macros, we cannot use the `\? notation---the left quote is
-% in some cases the escape char.
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
-\chardef\dotChar   = `\.
-\chardef\equalChar = `\=
-\chardef\exclamChar= `\!
-\chardef\questChar = `\?
-\chardef\semiChar  = `\;
-\chardef\spaceChar = `\ %
-\chardef\underChar = `\_
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-% True if #1 is the empty string, i.e., called like `\ifempty{}'.
-%
-\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}%
-\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}%
-
-% Hyphenation fixes.
-\hyphenation{ap-pen-dix}
-\hyphenation{eshell}
-\hyphenation{mini-buf-fer mini-buf-fers}
-\hyphenation{time-stamp}
-\hyphenation{white-space}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.  We also make
-% some effort to order the tracing commands to reduce output in the log
-% file; cf. trace.sty in LaTeX.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{%
-  \tracingstats2
-  \tracingpages1
-  \tracinglostchars2  % 2 gives us more in etex
-  \tracingparagraphs1
-  \tracingoutput1
-  \tracingmacros2
-  \tracingrestores1
-  \showboxbreadth\maxdimen \showboxdepth\maxdimen
-  \ifx\eTeXversion\undefined\else % etex gives us more logging
-    \tracingscantokens1
-    \tracingifs1
-    \tracinggroups1
-    \tracingnesting2
-    \tracingassigns1
-  \fi
-  \tracingcommands3  % 3 gives us more in etex
-  \errorcontextlines\maxdimen
-}%
-
-% add check for \lastpenalty to plain's definitions.  If the last thing
-% we did was a \nobreak, we don't want to insert more space.
-%
-\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
-  \removelastskip\penalty-50\smallskip\fi\fi}
-\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
-  \removelastskip\penalty-100\medskip\fi\fi}
-\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
-  \removelastskip\penalty-200\bigskip\fi\fi}
-
-% For @cropmarks command.
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong  \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
-  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
-  %
-  \ifodd\pageno  \advance\hoffset by \bindingoffset
-  \else \advance\hoffset by -\bindingoffset\fi
-  %
-  % Do this outside of the \shipout so @code etc. will be expanded in
-  % the headline as they should be, not taken literally (outputting ''code).
-  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
-  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
-  %
-  {%
-    % Have to do this stuff outside the \shipout because we want it to
-    % take effect in \write's, yet the group defined by the \vbox ends
-    % before the \shipout runs.
-    %
-    \escapechar = `\\     % use backslash in output files.
-    \indexdummies         % don't expand commands in the output.
-    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
-                   % the page break happens to be in the middle of an example.
-    \shipout\vbox{%
-      % Do this early so pdf references go to the beginning of the page.
-      \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi
-      %
-      \ifcropmarks \vbox to \outervsize\bgroup
-        \hsize = \outerhsize
-        \vskip-\topandbottommargin
-        \vtop to0pt{%
-          \line{\ewtop\hfil\ewtop}%
-          \nointerlineskip
-          \line{%
-            \vbox{\moveleft\cornerthick\nstop}%
-            \hfill
-            \vbox{\moveright\cornerthick\nstop}%
-          }%
-          \vss}%
-        \vskip\topandbottommargin
-        \line\bgroup
-          \hfil % center the page within the outer (page) hsize.
-          \ifodd\pageno\hskip\bindingoffset\fi
-          \vbox\bgroup
-      \fi
-      %
-      \unvbox\headlinebox
-      \pagebody{#1}%
-      \ifdim\ht\footlinebox > 0pt
-        % Only leave this space if the footline is nonempty.
-        % (We lessened \vsize for it in \oddfootingxxx.)
-        % The \baselineskip=24pt in plain's \makefootline has no effect.
-        \vskip 2\baselineskip
-        \unvbox\footlinebox
-      \fi
-      %
-      \ifcropmarks
-          \egroup % end of \vbox\bgroup
-        \hfil\egroup % end of (centering) \line\bgroup
-        \vskip\topandbottommargin plus1fill minus1fill
-        \boxmaxdepth = \cornerthick
-        \vbox to0pt{\vss
-          \line{%
-            \vbox{\moveleft\cornerthick\nsbot}%
-            \hfill
-            \vbox{\moveright\cornerthick\nsbot}%
-          }%
-          \nointerlineskip
-          \line{\ewbot\hfil\ewbot}%
-        }%
-      \egroup % \vbox from first cropmarks clause
-      \fi
-    }% end of \shipout\vbox
-  }% end of group with \normalturnoffactive
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
-  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1 \unvbox#1
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1.  The argument is the rest of
-% the input line (except we remove a trailing comment).  #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg#1{%
-  \let\next = #1%
-  \begingroup
-    \obeylines
-    \futurelet\temp\parseargx
-}
-
-% If the next token is an obeyed space (from an @example environment or
-% the like), remove it and recurse.  Otherwise, we're done.
-\def\parseargx{%
-  % \obeyedspace is defined far below, after the definition of \sepspaces.
-  \ifx\obeyedspace\temp
-    \expandafter\parseargdiscardspace
-  \else
-    \expandafter\parseargline
-  \fi
-}
-
-% Remove a single space (as the delimiter token to the macro call).
-{\obeyspaces %
- \gdef\parseargdiscardspace {\futurelet\temp\parseargx}}
-
-{\obeylines %
-  \gdef\parseargline#1^^M{%
-    \endgroup % End of the group started in \parsearg.
-    %
-    % First remove any @c comment, then any @comment.
-    % Result of each macro is put in \toks0.
-    \argremovec #1\c\relax %
-    \expandafter\argremovecomment \the\toks0 \comment\relax %
-    %
-    % Call the caller's macro, saved as \next in \parsearg.
-    \expandafter\next\expandafter{\the\toks0}%
-  }%
-}
-
-% Since all \c{,omment} does is throw away the argument, we can let TeX
-% do that for us.  The \relax here is matched by the \relax in the call
-% in \parseargline; it could be more or less anything, its purpose is
-% just to delimit the argument to the \c.
-\def\argremovec#1\c#2\relax{\toks0 = {#1}}
-\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}}
-
-% \argremovec{,omment} might leave us with trailing spaces, though; e.g.,
-%    @end itemize  @c foo
-% will have two active spaces as part of the argument with the
-% `itemize'.  Here we remove all active spaces from #1, and assign the
-% result to \toks0.
-%
-% This loses if there are any *other* active characters besides spaces
-% in the argument -- _ ^ +, for example -- since they get expanded.
-% Fortunately, Texinfo does not define any such commands.  (If it ever
-% does, the catcode of the characters in questionwill have to be changed
-% here.)  But this means we cannot call \removeactivespaces as part of
-% \argremovec{,omment}, since @c uses \parsearg, and thus the argument
-% that \parsearg gets might well have any character at all in it.
-%
-\def\removeactivespaces#1{%
-  \begingroup
-    \ignoreactivespaces
-    \edef\temp{#1}%
-    \global\toks0 = \expandafter{\temp}%
-  \endgroup
-}
-
-% Change the active space to expand to nothing.
-%
-\begingroup
-  \obeyspaces
-  \gdef\ignoreactivespaces{\obeyspaces\let =\empty}
-\endgroup
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-%% These are used to keep @begin/@end levels from running away
-%% Call \inENV within environments (after a \begingroup)
-\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi}
-\def\ENVcheck{%
-\ifENV\errmessage{Still within an environment; press RETURN to continue}
-\endgroup\fi} % This is not perfect, but it should reduce lossage
-
-% @begin foo  is the same as @foo, for now.
-\newhelp\EMsimple{Press RETURN to continue.}
-
-\outer\def\begin{\parsearg\beginxxx}
-
-\def\beginxxx #1{%
-\expandafter\ifx\csname #1\endcsname\relax
-{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else
-\csname #1\endcsname\fi}
-
-% @end foo executes the definition of \Efoo.
-%
-\def\end{\parsearg\endxxx}
-\def\endxxx #1{%
-  \removeactivespaces{#1}%
-  \edef\endthing{\the\toks0}%
-  %
-  \expandafter\ifx\csname E\endthing\endcsname\relax
-    \expandafter\ifx\csname \endthing\endcsname\relax
-      % There's no \foo, i.e., no ``environment'' foo.
-      \errhelp = \EMsimple
-      \errmessage{Undefined command `@end \endthing'}%
-    \else
-      \unmatchedenderror\endthing
-    \fi
-  \else
-    % Everything's ok; the right environment has been started.
-    \csname E\endthing\endcsname
-  \fi
-}
-
-% There is an environment #1, but it hasn't been started.  Give an error.
-%
-\def\unmatchedenderror#1{%
-  \errhelp = \EMsimple
-  \errmessage{This `@end #1' doesn't have a matching `@#1'}%
-}
-
-% Define the control sequence \E#1 to give an unmatched @end error.
-%
-\def\defineunmatchedend#1{%
-  \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}%
-}
-
-
-%% Simple single-character @ commands
-
-% @@ prints an @
-% Kludge this until the fonts are right (grr).
-\def\@{{\tt\char64}}
-
-% This is turned off because it was never documented
-% and you can use @w{...} around a quote to suppress ligatures.
-%% Define @` and @' to be the same as ` and '
-%% but suppressing ligatures.
-%\def\`{{`}}
-%\def\'{{'}}
-
-% Used to generate quoted braces.
-\def\mylbrace {{\tt\char123}}
-\def\myrbrace {{\tt\char125}}
-\let\{=\mylbrace
-\let\}=\myrbrace
-\begingroup
-  % Definitions to produce \{ and \} commands for indices,
-  % and @{ and @} for the aux file.
-  \catcode`\{ = \other \catcode`\} = \other
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\! = 0 \catcode`\\ = \other
-  !gdef!lbracecmd[\{]%
-  !gdef!rbracecmd[\}]%
-  !gdef!lbraceatcmd[@{]%
-  !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \c
-\let\dotaccent = \.
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \t
-\let\ubaraccent = \b
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
-  \def\temp{#1}%
-  \ifx\temp\imacro \ptexi
-  \else\ifx\temp\jmacro \j
-  \else \errmessage{@dotless can be used only with i or j}%
-  \fi\fi
-}
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\hfil\break\hbox{}\ignorespaces}
-
-% @/ allows a line break.
-\let\/=\allowbreak
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=3000 }
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=3000 }
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=3000 }
-
-% @w prevents a word break.  Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line.  According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0).  If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-% Another complication is that the group might be very large.  This can
-% cause the glue on the previous page to be unduly stretched, because it
-% does not have much material.  In this case, it's better to add an
-% explicit \vfill so that the extra space is at the bottom.  The
-% threshold for doing this is if the group is more than \vfilllimit
-% percent of a page (\vfilllimit can be changed inside of @tex).
-%
-\newbox\groupbox
-\def\vfilllimit{0.7}
-%
-\def\group{\begingroup
-  \ifnum\catcode13=\active \else
-    \errhelp = \groupinvalidhelp
-    \errmessage{@group invalid in context where filling is enabled}%
-  \fi
-  %
-  % The \vtop we start below produces a box with normal height and large
-  % depth; thus, TeX puts \baselineskip glue before it, and (when the
-  % next line of text is done) \lineskip glue after it.  (See p.82 of
-  % the TeXbook.)  Thus, space below is not quite equal to space
-  % above.  But it's pretty close.
-  \def\Egroup{%
-    \egroup           % End the \vtop.
-    % \dimen0 is the vertical size of the group's box.
-    \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
-    % \dimen2 is how much space is left on the page (more or less).
-    \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
-    % if the group doesn't fit on the current page, and it's a big big
-    % group, force a page break.
-    \ifdim \dimen0 > \dimen2
-      \ifdim \pagetotal < \vfilllimit\pageheight
-        \page
-      \fi
-    \fi
-    \copy\groupbox
-    \endgroup         % End the \group.
-  }%
-  %
-  \setbox\groupbox = \vtop\bgroup
-    % We have to put a strut on the last line in case the @group is in
-    % the midst of an example, rather than completely enclosing it.
-    % Otherwise, the interline space between the last line of the group
-    % and the first line afterwards is too small.  But we can't put the
-    % strut in \Egroup, since there it would be on a line by itself.
-    % Hence this just inserts a strut at the beginning of each line.
-    \everypar = {\strut}%
-    %
-    % Since we have a strut on every line, we don't need any of TeX's
-    % normal interline spacing.
-    \offinterlineskip
-    %
-    % OK, but now we have to do something about blank
-    % lines in the input in @example-like environments, which normally
-    % just turn into \lisppar, which will insert no space now that we've
-    % turned off the interline space.  Simplest is to make them be an
-    % empty paragraph.
-    \ifx\par\lisppar
-      \edef\par{\leavevmode \par}%
-      %
-      % Reset ^^M's definition to new definition of \par.
-      \obeylines
-    \fi
-    %
-    % Do @comment since we are called inside an environment such as
-    % @example, where each end-of-line in the input causes an
-    % end-of-line in the output.  We don't want the end-of-line after
-    % the `@group' to put extra space in the output.  Since @group
-    % should appear on a line by itself (according to the Texinfo
-    % manual), we don't worry about eating any user text.
-    \comment
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil  \mil=0.001in
-
-\def\need{\parsearg\needx}
-
-% Old definition--didn't work.
-%\def\needx #1{\par %
-%% This method tries to make TeX break the page naturally
-%% if the depth of the box does not fit.
-%{\baselineskip=0pt%
-%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
-%\prevdepth=-1000pt
-%}}
-
-\def\needx#1{%
-  % Ensure vertical mode, so we don't make a big box in the middle of a
-  % paragraph.
-  \par
-  %
-  % If the @need value is less than one line space, it's useless.
-  \dimen0 = #1\mil
-  \dimen2 = \ht\strutbox
-  \advance\dimen2 by \dp\strutbox
-  \ifdim\dimen0 > \dimen2
-    %
-    % Do a \strut just to make the height of this box be normal, so the
-    % normal leading is inserted relative to the preceding line.
-    % And a page break here is fine.
-    \vtop to #1\mil{\strut\vfil}%
-    %
-    % TeX does not even consider page breaks if a penalty added to the
-    % main vertical list is 10000 or more.  But in order to see if the
-    % empty box we just added fits on the page, we must make it consider
-    % page breaks.  On the other hand, we don't want to actually break the
-    % page after the empty box.  So we use a penalty of 9999.
-    %
-    % There is an extremely small chance that TeX will actually break the
-    % page at this \penalty, if there are no other feasible breakpoints in
-    % sight.  (If the user is using lots of big @group commands, which
-    % almost-but-not-quite fill up a page, TeX will have a hard time doing
-    % good page breaking, for example.)  However, I could not construct an
-    % example where a page broke at this \penalty; if it happens in a real
-    % document, then we can reconsider our strategy.
-    \penalty9999
-    %
-    % Back up by the size of the box, whether we did a page break or not.
-    \kern -#1\mil
-    %
-    % Do not allow a page break right after this kern.
-    \nobreak
-  \fi
-}
-
-% @br   forces paragraph break
-
-\let\br = \par
-
-% @dots{} output an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in a typewriter
-% font as three actual period characters.
-%
-\def\dots{%
-  \leavevmode
-  \hbox to 1.5em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
-  \leavevmode
-  \hbox to 2em{%
-    \hskip 0pt plus 0.25fil minus 0.25fil
-    .\hss.\hss.\hss.%
-    \hskip 0pt plus 0.5fil minus 0.5fil
-  }%
-  \spacefactor=3000
-}
-
-% @page forces the start of a new page.
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\def\exdent{\parsearg\exdentyyy}
-\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}}
-
-% This defn is used inside nofill environments such as @example.
-\def\nofillexdent{\parsearg\nofillexdentyyy}
-\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount
-\leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-% paragraph.  For more general purposes, use the \margin insertion
-% class.  WHICH is `l' or `r'.
-%
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-%
-\def\doinmargin#1#2{\strut\vadjust{%
-  \nobreak
-  \kern-\strutdepth
-  \vtop to \strutdepth{%
-    \baselineskip=\strutdepth
-    \vss
-    % if you have multiple lines of stuff to put here, you'll need to
-    % make the vbox yourself of the appropriate size.
-    \ifx#1l%
-      \llap{\ignorespaces #2\hskip\inmarginspacing}%
-    \else
-      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
-    \fi
-    \null
-  }%
-}}
-\def\inleftmargin{\doinmargin l}
-\def\inrightmargin{\doinmargin r}
-%
-% @inmargin{TEXT [, RIGHT-TEXT]}
-% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-% else use TEXT for both).
-%
-\def\inmargin#1{\parseinmargin #1,,\finish}
-\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-  \setbox0 = \hbox{\ignorespaces #2}%
-  \ifdim\wd0 > 0pt
-    \def\lefttext{#1}%  have both texts
-    \def\righttext{#2}%
-  \else
-    \def\lefttext{#1}%  have only one text
-    \def\righttext{#1}%
-  \fi
-  %
-  \ifodd\pageno
-    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
-  \else
-    \def\temp{\inleftmargin\lefttext}%
-  \fi
-  \temp
-}
-
-% @include file    insert text of that file as input.
-% Allow normal characters that  we make active in the argument (a file name).
-\def\include{\begingroup
-  \catcode`\\=\other
-  \catcode`~=\other
-  \catcode`^=\other
-  \catcode`_=\other
-  \catcode`|=\other
-  \catcode`<=\other
-  \catcode`>=\other
-  \catcode`+=\other
-  \parsearg\includezzz}
-% Restore active chars for included file.
-\def\includezzz#1{\endgroup\begingroup
-  % Read the included file in a group so nested @include's work.
-  \def\thisfile{#1}%
-  \let\value=\expandablevalue
-  \input\thisfile
-\endgroup}
-
-\def\thisfile{}
-
-% @center line
-% outputs that line, centered.
-%
-\def\center{\parsearg\docenter}
-\def\docenter#1{{%
-  \ifhmode \hfil\break \fi
-  \advance\hsize by -\leftskip
-  \advance\hsize by -\rightskip
-  \line{\hfil \ignorespaces#1\unskip \hfil}%
-  \ifhmode \break \fi
-}}
-
-% @sp n   outputs n lines of vertical space
-
-\def\sp{\parsearg\spxxx}
-\def\spxxx #1{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore  is another way to write a comment
-
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% NCHARS can also be the word `asis' or `none'.
-% We cannot feasibly implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\def\paragraphindent{\parsearg\doparagraphindent}
-\def\doparagraphindent#1{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \defaultparindent = 0pt
-    \else
-      \defaultparindent = #1em
-    \fi
-  \fi
-  \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\def\exampleindent{\parsearg\doexampleindent}
-\def\doexampleindent#1{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \lispnarrowing = 0pt
-    \else
-      \lispnarrowing = #1em
-    \fi
-  \fi
-}
-
-% @firstparagraphindent WORD
-% If WORD is `none', then suppress indentation of the first paragraph
-% after a section heading.  If WORD is `insert', then do indentat such
-% paragraphs.
-%
-% The paragraph indentation is suppressed or not by calling
-% \suppressfirstparagraphindent, which the sectioning commands do.  We
-% switch the definition of this back and forth according to WORD.  By
-% default, we suppress indentation.
-%
-\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-\newdimen\currentparindent
-%
-\def\insertword{insert}
-%
-\def\firstparagraphindent{\parsearg\dofirstparagraphindent}
-\def\dofirstparagraphindent#1{%
-  \def\temp{#1}%
-  \ifx\temp\noneword
-    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
-  \else\ifx\temp\insertword
-    \let\suppressfirstparagraphindent = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @firstparagraphindent option `\temp'}%
-  \fi\fi
-}
-
-% Here is how we actually suppress indentation.  Redefine \everypar to
-% \kern backwards by \parindent, and then reset itself to empty.
-%
-% We also make \indent itself not actually do anything until the next
-% paragraph.
-%
-\gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \global\let\indent=\ptexindent
-    \global\everypar = {}%
-  }%
-  \global\everypar = {%
-    \kern-\parindent
-    \global\let\indent=\ptexindent
-    \global\everypar = {}%
-  }%
-}%
-
-
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-% We don't use $'s directly in the definition of \math because we need
-% to set catcodes according to plain TeX first, to allow for subscripts,
-% superscripts, special math chars, etc.
-%
-\let\implicitmath = $%$ font-lock fix
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-% _ within @math be active (mathcode "8000), and distinguish by seeing
-% if the current family is \slfam, which is what @var uses.
-%
-{\catcode\underChar = \active
-\gdef\mathunderscore{%
-  \catcode\underChar=\active
-  \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-}}
-%
-% Another complication: we want \\ (and @\) to output a \ character.
-% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
-% this is not advertised and we don't care.  Texinfo does not
-% otherwise define @\.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
-  \tex
-  \mathcode`\_="8000 \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  \implicitmath\finishmath}
-\def\finishmath#1{#1\implicitmath\Etex}
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an
-% argument to a command which set the catcodes (such as @item or @section).
-%
-{
-  \catcode`^ = \active
-  \catcode`< = \active
-  \catcode`> = \active
-  \catcode`+ = \active
-  \gdef\mathactive{%
-    \let^ = \ptexhat
-    \let< = \ptexless
-    \let> = \ptexgtr
-    \let+ = \ptexplus
-  }
-}
-
-% @bullet and @minus need the same treatment as @math, just above.
-\def\bullet{\implicitmath\ptexbullet\implicitmath}
-\def\minus{\implicitmath-\implicitmath}
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \iflinks
-     \readauxfile
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \global\let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   % Just to be on the safe side, close the input stream before the \input.
-   \openin 1 texinfo.cnf
-   \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi
-   \closein1
-   \temp
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-\newtoks\toksA
-\newtoks\toksB
-\newtoks\toksC
-\newtoks\toksD
-\newbox\boxA
-\newcount\countA
-\newif\ifpdf
-\newif\ifpdfmakepagedest
-
-\ifx\pdfoutput\undefined
-  \pdffalse
-  \let\pdfmkdest = \gobble
-  \let\pdfurl = \gobble
-  \let\endlink = \relax
-  \let\linkcolor = \relax
-  \let\pdfmakeoutlines = \relax
-\else
-  \pdftrue
-  \pdfoutput = 1
-  \input pdfcolor
-  \def\dopdfimage#1#2#3{%
-    \def\imagewidth{#2}%
-    \def\imageheight{#3}%
-    % without \immediate, pdftex seg faults when the same image is
-    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
-    \ifnum\pdftexversion < 14
-      \immediate\pdfimage
-    \else
-      \immediate\pdfximage
-    \fi
-      \ifx\empty\imagewidth\else width \imagewidth \fi
-      \ifx\empty\imageheight\else height \imageheight \fi
-      \ifnum\pdftexversion<13
-         #1.pdf%
-       \else
-         {#1.pdf}%
-       \fi
-    \ifnum\pdftexversion < 14 \else
-      \pdfrefximage \pdflastximage
-    \fi}
-  \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
-  \def\pdfmkpgn#1{#1}
-  \let\linkcolor = \Blue  % was Cyan, but that seems light?
-  \def\endlink{\Black\pdfendlink}
-  % Adding outlines to PDF; macros for calculating structure of outlines
-  % come from Petr Olsak
-  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-    \else \csname#1\endcsname \fi}
-  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-    \advance\tempnum by1
-    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-  \def\pdfmakeoutlines{{%
-    \openin 1 \jobname.toc
-    \ifeof 1\else\begingroup
-      \closein 1
-      % Thanh's hack / proper braces in bookmarks
-      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
-      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
-      %
-      \def\chapentry ##1##2##3{}
-      \def\secentry ##1##2##3##4{\advancenumber{chap##2}}
-      \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
-      \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
-      \let\appendixentry = \chapentry
-      \let\unnumbchapentry = \chapentry
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
-      \input \jobname.toc
-      \def\chapentry ##1##2##3{%
-        \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
-      \def\secentry ##1##2##3##4{%
-        \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}}
-      \def\subsecentry ##1##2##3##4##5{%
-        \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}}
-      \def\subsubsecentry ##1##2##3##4##5##6{%
-        \pdfoutline goto name{\pdfmkpgn{##6}}{##1}}
-      \let\appendixentry = \chapentry
-      \let\unnumbchapentry = \chapentry
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
-      %
-      % Make special characters normal for writing to the pdf file.
-      %
-      \indexnofonts
-      \let\tt=\relax
-      \turnoffactive
-      \input \jobname.toc
-    \endgroup\fi
-  }}
-  \def\makelinks #1,{%
-    \def\params{#1}\def\E{END}%
-    \ifx\params\E
-      \let\nextmakelinks=\relax
-    \else
-      \let\nextmakelinks=\makelinks
-      \ifnum\lnkcount>0,\fi
-      \picknum{#1}%
-      \startlink attr{/Border [0 0 0]}
-        goto name{\pdfmkpgn{\the\pgn}}%
-      \linkcolor #1%
-      \advance\lnkcount by 1%
-      \endlink
-    \fi
-    \nextmakelinks
-  }
-  \def\picknum#1{\expandafter\pn#1}
-  \def\pn#1{%
-    \def\p{#1}%
-    \ifx\p\lbrace
-      \let\nextpn=\ppn
-    \else
-      \let\nextpn=\ppnn
-      \def\first{#1}
-    \fi
-    \nextpn
-  }
-  \def\ppn#1{\pgn=#1\gobble}
-  \def\ppnn{\pgn=\first}
-  \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-    \ifx\PP\D\let\nextsp\relax
-    \else\let\nextsp\skipspaces
-      \ifx\p\space\else\addtokens{\filename}{\PP}%
-        \advance\filenamelength by 1
-      \fi
-    \fi
-    \nextsp}
-  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
-  \ifnum\pdftexversion < 14
-    \let \startlink \pdfannotlink
-  \else
-    \let \startlink \pdfstartlink
-  \fi
-  \def\pdfurl#1{%
-    \begingroup
-      \normalturnoffactive\def\@{@}%
-      \let\value=\expandablevalue
-      \leavevmode\Red
-      \startlink attr{/Border [0 0 0]}%
-        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-        % #1
-    \endgroup}
-  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-  \def\maketoks{%
-    \expandafter\poptoks\the\toksA|ENDTOKS|
-    \ifx\first0\adn0
-    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-    \else
-      \ifnum0=\countA\else\makelink\fi
-      \ifx\first.\let\next=\done\else
-        \let\next=\maketoks
-        \addtokens{\toksB}{\the\toksD}
-        \ifx\first,\addtokens{\toksB}{\space}\fi
-      \fi
-    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-    \next}
-  \def\makelink{\addtokens{\toksB}%
-    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-  \def\pdflink#1{%
-    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-    \linkcolor #1\endlink}
-  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\fi % \ifx\pdfoutput
-
-
-\message{fonts,}
-% Font-change commands.
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf analogous to plain's \rm, etc.
-\newfam\sffam
-\def\sf{\fam=\sffam \tensf}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this one.
-\def\ttsl{\tenttsl}
-
-% Default leading.
-\newdimen\textleading  \textleading = 13.2pt
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-\def\setleading#1{%
-  \normalbaselineskip = #1\relax
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
-}
-
-% Set the font macro #1 to the font named #2, adding on the
-% specified font prefix (normally `cm').
-% #3 is the font's design size, #4 is a scale factor
-\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\undefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx}               %where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-\newcount\mainmagstep
-\ifx\bigger\relax
-  % not really supported.
-  \mainmagstep=\magstep1
-  \setfont\textrm\rmshape{12}{1000}
-  \setfont\texttt\ttshape{12}{1000}
-\else
-  \mainmagstep=\magstephalf
-  \setfont\textrm\rmshape{10}{\mainmagstep}
-  \setfont\texttt\ttshape{10}{\mainmagstep}
-\fi
-% Instead of cmb10, you may want to use cmbx10.
-% cmbx10 is a prettier font on its own, but cmb10
-% looks better when embedded in a line with cmr10
-% (in Bob's opinion).
-\setfont\textbf\bfshape{10}{\mainmagstep}
-\setfont\textit\itshape{10}{\mainmagstep}
-\setfont\textsl\slshape{10}{\mainmagstep}
-\setfont\textsf\sfshape{10}{\mainmagstep}
-\setfont\textsc\scshape{10}{\mainmagstep}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-
-% A few fonts for @defun, etc.
-\setfont\defbf\bxshape{10}{\magstep1} %was 1314
-\setfont\deftt\ttshape{10}{\magstep1}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\setfont\smallrm\rmshape{9}{1000}
-\setfont\smalltt\ttshape{9}{1000}
-\setfont\smallbf\bfshape{10}{900}
-\setfont\smallit\itshape{9}{1000}
-\setfont\smallsl\slshape{9}{1000}
-\setfont\smallsf\sfshape{9}{1000}
-\setfont\smallsc\scshape{10}{900}
-\setfont\smallttsl\ttslshape{10}{900}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-
-% Fonts for small examples (8pt).
-\setfont\smallerrm\rmshape{8}{1000}
-\setfont\smallertt\ttshape{8}{1000}
-\setfont\smallerbf\bfshape{10}{800}
-\setfont\smallerit\itshape{8}{1000}
-\setfont\smallersl\slshape{8}{1000}
-\setfont\smallersf\sfshape{8}{1000}
-\setfont\smallersc\scshape{10}{800}
-\setfont\smallerttsl\ttslshape{10}{800}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-
-% Fonts for title page:
-\setfont\titlerm\rmbshape{12}{\magstep3}
-\setfont\titleit\itbshape{10}{\magstep4}
-\setfont\titlesl\slbshape{10}{\magstep4}
-\setfont\titlett\ttbshape{12}{\magstep3}
-\setfont\titlettsl\ttslshape{10}{\magstep4}
-\setfont\titlesf\sfbshape{17}{\magstep1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\authorrm{\secrm}
-\def\authortt{\sectt}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\setfont\chaprm\rmbshape{12}{\magstep2}
-\setfont\chapit\itbshape{10}{\magstep3}
-\setfont\chapsl\slbshape{10}{\magstep3}
-\setfont\chaptt\ttbshape{12}{\magstep2}
-\setfont\chapttsl\ttslshape{10}{\magstep3}
-\setfont\chapsf\sfbshape{17}{1000}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-
-% Section fonts (14.4pt).
-\setfont\secrm\rmbshape{12}{\magstep1}
-\setfont\secit\itbshape{10}{\magstep2}
-\setfont\secsl\slbshape{10}{\magstep2}
-\setfont\sectt\ttbshape{12}{\magstep1}
-\setfont\secttsl\ttslshape{10}{\magstep2}
-\setfont\secsf\sfbshape{12}{\magstep1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-
-% Subsection fonts (13.15pt).
-\setfont\ssecrm\rmbshape{12}{\magstephalf}
-\setfont\ssecit\itbshape{10}{1315}
-\setfont\ssecsl\slbshape{10}{1315}
-\setfont\ssectt\ttbshape{12}{\magstephalf}
-\setfont\ssecttsl\ttslshape{10}{1315}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{\magstep1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-% The smallcaps and symbol fonts should actually be scaled \magstep1.5,
-% but that is not a standard magnification.
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
-  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-  \textfont\ttfam=\tentt \textfont\sffam=\tensf
-}
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this so that font changes will continue to work
-% in math mode, where it is the current \fam that is relevant in most
-% cases, not the current font.  Plain TeX does \def\bf{\fam=\bffam
-% \tenbf}, for example.  By redefining \tenbf, we obviate the need to
-% redefine \bf itself.
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl
-  \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
-  \resetmathfonts \setleading{25pt}}
-\def\titlefont#1{{\titlefonts\rm #1}}
-\def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl
-  \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl
-  \resetmathfonts \setleading{16pt}}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl
-  \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf?
-\def\smallfonts{%
-  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-  \let\tenttsl=\smallttsl
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
-  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-  \let\tenttsl=\smallerttsl
-  \resetmathfonts \setleading{9.5pt}}
-
-% Set the fonts to use with the @small... environments.
-\let\smallexamplefonts = \smallfonts
-
-% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
-% can fit this many characters:
-%   8.5x11=86   smallbook=72  a4=90  a5=69
-% If we use \smallerfonts (8pt), then we can fit this many characters:
-%   8.5x11=90+  smallbook=80  a4=90+  a5=77
-% For me, subjectively, the few extra characters that fit aren't worth
-% the additional smallness of 8pt.  So I'm making the default 9pt.
-%
-% By the way, for comparison, here's what fits with @example (10pt):
-%   8.5x11=71  smallbook=60  a4=75  a5=58
-%
-% I wish we used A4 paper on this side of the Atlantic.
-%
-% --karl, 24jan03.
-
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\textfonts
-
-% Define these so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}
-\setfont\shortcontbf\bxshape{12}{1000}
-\setfont\shortcontsl\slshape{12}{1000}
-\setfont\shortconttt\ttshape{12}{1000}
-
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
-
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
-                    \ptexslash\fi\fi\fi}
-\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
-
-\let\i=\smartitalic
-\let\var=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-\let\cite=\smartslanted
-
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-% Set sfcode to normal for the chars that usually have another value.
-% Can't use plain's \frenchspacing because it uses the `\x notation, and
-% sometimes \x has an active definition that messes things up.
-%
-\catcode`@=11
-  \def\frenchspacing{%
-    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
-  }
-\catcode`@=\other
-
-\def\t#1{%
-  {\tt \rawbackslash \frenchspacing #1}%
-  \null
-}
-\let\ttfont=\t
-\def\samp#1{`\tclose{#1}'\null}
-\setfont\keyrm\rmshape{8}{1000}
-\font\keysy=cmsy9
-\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-    \vbox{\hrule\kern-0.4pt
-     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-    \kern-0.4pt\hrule}%
-  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-% The old definition, with no lozenge:
-%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @file, @option are the same as @samp.
-\let\file=\samp
-\let\option=\samp
-
-% @code is a modification of @t,
-% which makes spaces the same size as normal in the surrounding text.
-\def\tclose#1{%
-  {%
-    % Change normal interword space to be same as for the current font.
-    \spaceskip = \fontdimen2\font
-    %
-    % Switch to typewriter.
-    \tt
-    %
-    % But `\ ' produces the large typewriter interword space.
-    \def\ {{\spaceskip = 0pt{} }}%
-    %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
-    \rawbackslash
-    \frenchspacing
-    #1%
-  }%
-  \null
-}
-
-% We *must* turn on hyphenation at `-' and `_' in \code.
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash.
-%  -- rms.
-{
-  \catcode`\-=\active
-  \catcode`\_=\active
-  %
-  \global\def\code{\begingroup
-    \catcode`\-=\active \let-\codedash
-    \catcode`\_=\active \let_\codeunder
-    \codex
-  }
-  %
-  % If we end up with any active - characters when handling the index,
-  % just treat them as a normal -.
-  \global\def\indexbreaks{\catcode`\-=\active \let-\realdash}
-}
-
-\def\realdash{-}
-\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{%
-  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
-  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
-  % will therefore expand the active definition of _, which is us
-  % (inside @code that is), therefore an endless loop.
-  \ifusingtt{\ifmmode
-               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
-             \else\normalunderscore \fi
-             \discretionary{}{}{}}%
-            {\_}%
-}
-\def\codex #1{\tclose{#1}\endgroup}
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-%   `example' (@kbd uses ttsl only inside of @example and friends),
-%   or `code' (@kbd uses normal tty font always).
-\def\kbdinputstyle{\parsearg\kbdinputstylexxx}
-\def\kbdinputstylexxx#1{%
-  \def\arg{#1}%
-  \ifx\arg\worddistinct
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-  \else\ifx\arg\wordexample
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-  \else\ifx\arg\wordcode
-    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle option `\arg'}%
-  \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct.'
-\kbdinputstyle distinct
-
-\def\xkey{\key}
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
-\ifx\one\xkey\ifx\threex\three \key{#2}%
-\else{\tclose{\kbdfont\look}}\fi
-\else{\tclose{\kbdfont\look}}\fi}
-
-% For @url, @env, @command quotes seem unnecessary, so use \code.
-\let\url=\code
-\let\env=\code
-\let\command=\code
-
-% @uref (abbreviation for `urlref') takes an optional (comma-separated)
-% second argument specifying the text to display and an optional third
-% arg as text to display instead of (rather than in addition to) the url
-% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
-% a hypertex \special here.
-%
-\def\uref#1{\douref #1,,,\finish}
-\def\douref#1,#2,#3,#4\finish{\begingroup
-  \unsepspaces
-  \pdfurl{#1}%
-  \setbox0 = \hbox{\ignorespaces #3}%
-  \ifdim\wd0 > 0pt
-    \unhbox0 % third arg given, show only that
-  \else
-    \setbox0 = \hbox{\ignorespaces #2}%
-    \ifdim\wd0 > 0pt
-      \ifpdf
-        \unhbox0             % PDF: 2nd arg given, show only it
-      \else
-        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
-      \fi
-    \else
-      \code{#1}% only url given, so show it
-    \fi
-  \fi
-  \endlink
-\endgroup}
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
-  \def\email#1{\doemail#1,,\finish}
-  \def\doemail#1,#2,#3\finish{\begingroup
-    \unsepspaces
-    \pdfurl{mailto:#1}%
-    \setbox0 = \hbox{\ignorespaces #2}%
-    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
-    \endlink
-  \endgroup}
-\else
-  \let\email=\uref
-\fi
-
-% Check if we are currently using a typewriter font.  Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
-\def\sc#1{{\smallcaps#1}}       % smallcaps font
-\def\ii#1{{\it #1}}             % italic font
-
-% @acronym downcases the argument and prints in smallcaps.
-\def\acronym#1{{\smallcaps \lowercase{#1}}}
-
-% @pounds{} is a sterling sign.
-\def\pounds{{\it\$}}
-
-% @registeredsymbol - R in a circle.  For now, only works in text size;
-% we'd have to redo the font mechanism to change the \scriptstyle and
-% \scriptscriptstyle font sizes to make it look right in headings.
-% Adapted from the plain.tex definition of \copyright.
-%
-\def\registeredsymbol{%
-  $^{{\ooalign{\hfil\raise.07ex\hbox{$\scriptstyle\rm R$}\hfil\crcr\Orb}}%
-    }$%
-}
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page.  Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\def\shorttitlepage{\parsearg\shorttitlepagezzz}
-\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-        \endgroup\page\hbox{}\page}
-
-\def\titlepage{\begingroup \parindent=0pt \textfonts
-   \let\subtitlerm=\tenrm
-   \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
-   %
-   \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
-                   \let\tt=\authortt}%
-   %
-   % Leave some space at the very top of the page.
-   \vglue\titlepagetopglue
-   %
-   % Now you can print the title using @title.
-   \def\title{\parsearg\titlezzz}%
-   \def\titlezzz##1{\leftline{\titlefonts\rm ##1}
-                    % print a rule at the page bottom also.
-                    \finishedtitlepagefalse
-                    \vskip4pt \hrule height 4pt width \hsize \vskip4pt}%
-   % No rule at page bottom unless we print one at the top with @title.
-   \finishedtitlepagetrue
-   %
-   % Now you can put text using @subtitle.
-   \def\subtitle{\parsearg\subtitlezzz}%
-   \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}%
-   %
-   % @author should come last, but may come many times.
-   \def\author{\parsearg\authorzzz}%
-   \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi
-      {\authorfont \leftline{##1}}}%
-   %
-   % Most title ``pages'' are actually two pages long, with space
-   % at the top of the second.  We don't want the ragged left on the second.
-   \let\oldpage = \page
-   \def\page{%
-      \iffinishedtitlepage\else
-         \finishtitlepage
-      \fi
-      \oldpage
-      \let\page = \oldpage
-      \hbox{}}%
-%   \def\page{\oldpage \hbox{}}
-}
-
-\def\Etitlepage{%
-   \iffinishedtitlepage\else
-      \finishtitlepage
-   \fi
-   % It is important to do the page break before ending the group,
-   % because the headline and footline are only empty inside the group.
-   % If we use the new definition of \page, we always get a blank page
-   % after the title page, which we certainly don't want.
-   \oldpage
-   \endgroup
-   %
-   % Need this before the \...aftertitlepage checks so that if they are
-   % in effect the toc pages will come out with page numbers.
-   \HEADINGSon
-   %
-   % If they want short, they certainly want long too.
-   \ifsetshortcontentsaftertitlepage
-     \shortcontents
-     \contents
-     \global\let\shortcontents = \relax
-     \global\let\contents = \relax
-   \fi
-   %
-   \ifsetcontentsaftertitlepage
-     \contents
-     \global\let\contents = \relax
-     \global\let\shortcontents = \relax
-   \fi
-}
-
-\def\finishtitlepage{%
-   \vskip4pt \hrule height 2pt width \hsize
-   \vskip\titlepagebottomglue
-   \finishedtitlepagetrue
-}
-
-%%% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline    % headline on even pages
-\newtoks\oddheadline     % headline on odd pages
-\newtoks\evenfootline    % footline on even pages
-\newtoks\oddfootline     % footline on odd pages
-
-% Now make Tex use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                            \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-                            \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what  @headings on  does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\everyheading{\parsearg\everyheadingxxx}
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\everyfooting{\parsearg\everyfootingxxx}
-
-{\catcode`\@=0 %
-
-\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish}
-\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish}
-\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish}
-\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish}
-\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{%
-  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
-  %
-  % Leave some space for the footline.  Hopefully ok to assume
-  % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -\baselineskip
-  \global\advance\vsize by -\baselineskip
-}
-
-\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-%
-}% unbind the catcode of @.
-
-% @headings double      turns headings on for double-sided printing.
-% @headings single      turns headings on for single-sided printing.
-% @headings off         turns them off.
-% @headings on          same as @headings double, retained for compatibility.
-% @headings after       turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\HEADINGSoff{
-\global\evenheadline={\hfil} \global\evenfootline={\hfil}
-\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
-\HEADINGSoff
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% This produces Day Month Year style of output.
-% Only define if not already defined, in case a txi-??.tex file has set
-% up a different format (e.g., txi-cs.tex does this).
-\ifx\today\undefined
-\def\today{%
-  \number\day\space
-  \ifcase\month
-  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
-  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
-  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-  \fi
-  \space\number\year}
-\fi
-
-% @settitle line...  specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg\settitlezzz}
-\def\settitlezzz #1{\gdef\thistitle{#1}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent  \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin  \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @vtable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz}
-\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz}
-
-\def\internalBkitem{\smallbreak \parsearg\kitemzzz}
-\def\internalBkitemx{\itemxpar \parsearg\kitemzzz}
-
-\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}%
-                 \itemzzz {#1}}
-
-\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}%
-                 \itemzzz {#1}}
-
-\def\itemzzz #1{\begingroup %
-  \advance\hsize by -\rightskip
-  \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemfont{#1}}%
-  \itemindex{#1}%
-  \nobreak % This prevents a break before @itemx.
-  %
-  % If the item text does not fit in the space we have, put it on a line
-  % by itself, and do not allow a page break either before or after that
-  % line.  We do not start a paragraph here because then if the next
-  % command is, e.g., @kindex, the whatsit would get put into the
-  % horizontal list on a line by itself, resulting in extra blank space.
-  \ifdim \wd0>\itemmax
-    %
-    % Make this a paragraph so we get the \parskip glue and wrapping,
-    % but leave it ragged-right.
-    \begingroup
-      \advance\leftskip by-\tableindent
-      \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil
-      \leavevmode\unhbox0\par
-    \endgroup
-    %
-    % We're going to be starting a paragraph, but we don't want the
-    % \parskip glue -- logically it's part of the @item we just started.
-    \nobreak \vskip-\parskip
-    %
-    % Stop a page break at the \parskip glue coming up.  (Unfortunately
-    % we can't prevent a possible page break at the following
-    % \baselineskip glue.)  However, if what follows is an environment
-    % such as @example, there will be no \parskip glue; then
-    % the negative vskip we just would cause the example and the item to
-    % crash together.  So we use this bizarre value of 10001 as a signal
-    % to \aboveenvbreak to insert \parskip glue after all.
-    % (Possibly there are other commands that could be followed by
-    % @example which need the same treatment, but not section titles; or
-    % maybe section titles are the only special case and they should be
-    % penalty 10001...)
-    \penalty 10001
-    \endgroup
-    \itemxneedsnegativevskipfalse
-  \else
-    % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.
-    \noindent
-    % Do this with kerns and \unhbox so that if there is a footnote in
-    % the item text, it can migrate to the main vertical list and
-    % eventually be printed.
-    \nobreak\kern-\tableindent
-    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-    \unhbox0
-    \nobreak\kern\dimen0
-    \endgroup
-    \itemxneedsnegativevskiptrue
-  \fi
-}
-
-\def\item{\errmessage{@item while not in a table}}
-\def\itemx{\errmessage{@itemx while not in a table}}
-\def\kitem{\errmessage{@kitem while not in a table}}
-\def\kitemx{\errmessage{@kitemx while not in a table}}
-\def\xitem{\errmessage{@xitem while not in a table}}
-\def\xitemx{\errmessage{@xitemx while not in a table}}
-
-% Contains a kludge to get @end[description] to work.
-\def\description{\tablez{\dontindex}{1}{}{}{}{}}
-
-% @table, @ftable, @vtable.
-\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex}
-{\obeylines\obeyspaces%
-\gdef\tablex #1^^M{%
-\tabley\dontindex#1        \endtabley}}
-
-\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex}
-{\obeylines\obeyspaces%
-\gdef\ftablex #1^^M{%
-\tabley\fnitemindex#1        \endtabley
-\def\Eftable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex}
-{\obeylines\obeyspaces%
-\gdef\vtablex #1^^M{%
-\tabley\vritemindex#1        \endtabley
-\def\Evtable{\endgraf\afterenvbreak\endgroup}%
-\let\Etable=\relax}}
-
-\def\dontindex #1{}
-\def\fnitemindex #1{\doind {fn}{\code{#1}}}%
-\def\vritemindex #1{\doind {vr}{\code{#1}}}%
-
-{\obeyspaces %
-\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup%
-\tablez{#1}{#2}{#3}{#4}{#5}{#6}}}
-
-\def\tablez #1#2#3#4#5#6{%
-\aboveenvbreak %
-\begingroup %
-\def\Edescription{\Etable}% Necessary kludge.
-\let\itemindex=#1%
-\ifnum 0#3>0 \advance \leftskip by #3\mil \fi %
-\ifnum 0#4>0 \tableindent=#4\mil \fi %
-\ifnum 0#5>0 \advance \rightskip by #5\mil \fi %
-\def\itemfont{#2}%
-\itemmax=\tableindent %
-\advance \itemmax by -\itemmargin %
-\advance \leftskip by \tableindent %
-\exdentamount=\tableindent
-\parindent = 0pt
-\parskip = \smallskipamount
-\ifdim \parskip=0pt \parskip=2pt \fi%
-\def\Etable{\endgraf\afterenvbreak\endgroup}%
-\let\item = \internalBitem %
-\let\itemx = \internalBitemx %
-\let\kitem = \internalBkitem %
-\let\kitemx = \internalBkitemx %
-\let\xitem = \internalBxitem %
-\let\xitemx = \internalBxitemx %
-}
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\def\itemize{\parsearg\itemizezzz}
-
-\def\itemizezzz #1{%
-  \begingroup % ended by the @end itemize
-  \itemizey {#1}{\Eitemize}
-}
-
-\def\itemizey#1#2{%
-  \aboveenvbreak
-  \itemmax=\itemindent
-  \advance\itemmax by -\itemmargin
-  \advance\leftskip by \itemindent
-  \exdentamount=\itemindent
-  \parindent=0pt
-  \parskip=\smallskipamount
-  \ifdim\parskip=0pt \parskip=2pt \fi
-  \def#2{\endgraf\afterenvbreak\endgroup}%
-  \def\itemcontents{#1}%
-  % @itemize with no arg is equivalent to @itemize @bullet.
-  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
-  \let\item=\itemizeitem
-}
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list.  No
-% argument is the same as `1'.
-%
-\def\enumerate{\parsearg\enumeratezzz}
-\def\enumeratezzz #1{\enumeratey #1  \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
-  \begingroup % ended by the @end enumerate
-  %
-  % If we were given no argument, pretend we were given `1'.
-  \def\thearg{#1}%
-  \ifx\thearg\empty \def\thearg{1}\fi
-  %
-  % Detect if the argument is a single token.  If so, it might be a
-  % letter.  Otherwise, the only valid thing it can be is a number.
-  % (We will always have one token, because of the test we just made.
-  % This is a good thing, since \splitoff doesn't work given nothing at
-  % all -- the first parameter is undelimited.)
-  \expandafter\splitoff\thearg\endmark
-  \ifx\rest\empty
-    % Only one token in the argument.  It could still be anything.
-    % A ``lowercase letter'' is one whose \lccode is nonzero.
-    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
-    %   not equal to itself.
-    % Otherwise, we assume it's a number.
-    %
-    % We need the \relax at the end of the \ifnum lines to stop TeX from
-    % continuing to look for a <number>.
-    %
-    \ifnum\lccode\expandafter`\thearg=0\relax
-      \numericenumerate % a number (we hope)
-    \else
-      % It's a letter.
-      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
-        \lowercaseenumerate % lowercase letter
-      \else
-        \uppercaseenumerate % uppercase letter
-      \fi
-    \fi
-  \else
-    % Multiple tokens in the argument.  We hope it's a number.
-    \numericenumerate
-  \fi
-}
-
-% An @enumerate whose labels are integers.  The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
-  \itemno = \thearg
-  \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more lowercase letters in @enumerate; get a bigger
-                  alphabet}%
-    \fi
-    \char\lccode\itemno
-  }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more uppercase letters in @enumerate; get a bigger
-                  alphabet}
-    \fi
-    \char\uccode\itemno
-  }%
-}
-
-% Call itemizey, adding a period to the first argument and supplying the
-% common last two arguments.  Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
-  \advance\itemno by -1
-  \itemizey{#1.}\Eenumerate\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-% Definition of @item while inside @itemize.
-
-\def\itemizeitem{%
-\advance\itemno by 1
-{\let\par=\endgraf \smallbreak}%
-\ifhmode \errmessage{In hmode at itemizeitem}\fi
-{\parskip=0in \hskip 0pt
-\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}%
-\vadjust{\penalty 1200}}%
-\flushcr}
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble.  Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-%   @multitable @columnfractions .25 .3 .45
-%   @item ...
-%
-%   Numbers following @columnfractions are the percent of the total
-%   current hsize to be used for each column. You may use as many
-%   columns as desired.
-
-
-% Or use a template:
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item ...
-%   using the widest term desired in each column.
-%
-% For those who want to use more than one line's worth of words in
-% the preamble, break the line within one argument and it
-% will parse correctly, i.e.,
-%
-%     @multitable {Column 1 template} {Column 2 template} {Column 3
-%      template}
-% Not:
-%     @multitable {Column 1 template} {Column 2 template}
-%      {Column 3 template}
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab, @multitable or @end multitable do not need to be on their
-% own lines, but it will not hurt if they are.
-
-% Sample multitable:
-
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item first col stuff @tab second col stuff @tab third col
-%   @item
-%   first col stuff
-%   @tab
-%   second col stuff
-%   @tab
-%   third col
-%   @item first col stuff @tab second col stuff
-%   @tab Many paragraphs of text may be used in any column.
-%
-%         They will wrap at the width determined by the template.
-%   @item@tab@tab This will be in third column.
-%   @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-%                                                            to baseline.
-%   0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the part of the @columnfraction before the decimal point, which
-% is presumably either 0 or the empty string (but we don't check, we
-% just throw it away).  #2 is the decimal part, which we use as the
-% percent of \hsize for this column.
-\def\pickupwholefraction#1.#2 {%
-  \global\advance\colcount by 1
-  \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}%
-  \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
-  \def\firstarg{#1}%
-  \ifx\firstarg\xendsetuptable
-    \let\go = \relax
-  \else
-    \ifx\firstarg\xcolumnfractions
-      \global\setpercenttrue
-    \else
-      \ifsetpercent
-         \let\go\pickupwholefraction
-      \else
-         \global\advance\colcount by 1
-         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
-                   % separator; typically that is always in the input, anyway.
-         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-      \fi
-    \fi
-    \ifx\go\pickupwholefraction
-      % Put the argument back for the \pickupwholefraction call, so
-      % we'll always have a period there to be parsed.
-      \def\go{\pickupwholefraction#1}%
-    \else
-      \let\go = \setuptable
-    \fi%
-  \fi
-  \go
-}
-
-% @multitable ... @end multitable definitions:
-%
-\def\multitable{\parsearg\dotable}
-\def\dotable#1{\bgroup
-  \vskip\parskip
-  \let\item=\crcrwithfootnotes
-  % A \tab used to include \hskip1sp.  But then the space in a template
-  % line is not enough.  That is bad.  So let's go back to just & until
-  % we encounter the problem it was intended to solve again.  --karl,
-  % nathan@acm.org, 20apr99.
-  \let\tab=&%
-  \let\startfootins=\startsavedfootnote
-  \tolerance=9500
-  \hbadness=9500
-  \setmultitablespacing
-  \parskip=\multitableparskip
-  \parindent=\multitableparindent
-  \overfullrule=0pt
-  \global\colcount=0
-  \def\Emultitable{%
-    \global\setpercentfalse
-    \crcrwithfootnotes\crcr
-    \egroup\egroup
-  }%
-  %
-  % To parse everything between @multitable and @item:
-  \setuptable#1 \endsetuptable
-  %
-  % \everycr will reset column counter, \colcount, at the end of
-  % each line. Every column entry will cause \colcount to advance by one.
-  % The table preamble
-  % looks at the current \colcount to find the correct column width.
-  \everycr{\noalign{%
-  %
-  % \filbreak%% keeps underfull box messages off when table breaks over pages.
-  % Maybe so, but it also creates really weird page breaks when the table
-  % breaks over pages. Wouldn't \vfil be better?  Wait until the problem
-  % manifests itself, so it can be fixed for real --karl.
-    \global\colcount=0\relax}}%
-  %
-  % This preamble sets up a generic column definition, which will
-  % be used as many times as user calls for columns.
-  % \vtop will set a single line and will also let text wrap and
-  % continue for many paragraphs if desired.
-  \halign\bgroup&\global\advance\colcount by 1\relax
-    \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname
-  %
-  % In order to keep entries from bumping into each other
-  % we will add a \leftskip of \multitablecolspace to all columns after
-  % the first one.
-  %
-  % If a template has been used, we will add \multitablecolspace
-  % to the width of each template entry.
-  %
-  % If the user has set preamble in terms of percent of \hsize we will
-  % use that dimension as the width of the column, and the \leftskip
-  % will keep entries from bumping into each other.  Table will start at
-  % left margin and final column will justify at right margin.
-  %
-  % Make sure we don't inherit \rightskip from the outer environment.
-  \rightskip=0pt
-  \ifnum\colcount=1
-    % The first column will be indented with the surrounding text.
-    \advance\hsize by\leftskip
-  \else
-    \ifsetpercent \else
-      % If user has not set preamble in terms of percent of \hsize
-      % we will advance \hsize by \multitablecolspace.
-      \advance\hsize by \multitablecolspace
-    \fi
-   % In either case we will make \leftskip=\multitablecolspace:
-  \leftskip=\multitablecolspace
-  \fi
-  % Ignoring space at the beginning and end avoids an occasional spurious
-  % blank line, when TeX decides to break the line at the space before the
-  % box from the multistrut, so the strut ends up on a line by itself.
-  % For example:
-  % @multitable @columnfractions .11 .89
-  % @item @code{#}
-  % @tab Legal holiday which is valid in major parts of the whole country.
-  % Is automatically provided with highlighting sequences respectively marking
-  % characters.
-  \noindent\ignorespaces##\unskip\multistrut}\cr
-}
-
-\def\setmultitablespacing{% test to see if user has set \multitablelinespace.
-% If so, do nothing. If not, give it an appropriate dimension based on
-% current baselineskip.
-\ifdim\multitablelinespace=0pt
-\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-\global\advance\multitablelinespace by-\ht0
-%% strut to put in table in case some entry doesn't have descenders,
-%% to keep lines equally spaced
-\let\multistrut = \strut
-\else
-%% FIXME: what is \box0 supposed to be?
-\gdef\multistrut{\vrule height\multitablelinespace depth\dp0
-width0pt\relax} \fi
-%% Test to see if parskip is larger than space between lines of
-%% table. If not, do nothing.
-%%        If so, set to same dimension as multitablelinespace.
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
-                                      %% than skip between lines in the table.
-\fi}
-
-% In case a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is
-% finished.  Otherwise, the insertion is lost, it never migrates to the
-% main vertical list.  --kasal, 22jan03.
-%
-\newbox\savedfootnotes
-%
-% \dotable \let's \startfootins to this, so that \dofootnote will call
-% it instead of starting the insertion right away.
-\def\startsavedfootnote{%
-  \global\setbox\savedfootnotes = \vbox\bgroup
-    \unvbox\savedfootnotes
-}
-\def\crcrwithfootnotes{%
-  \crcr
-  \ifvoid\savedfootnotes \else
-    \noalign{\insert\footins{\box\savedfootnotes}}%
-  \fi
-}
-
-\message{conditionals,}
-% Prevent errors for section commands.
-% Used in @ignore and in failing conditionals.
-\def\ignoresections{%
-  \let\chapter=\relax
-  \let\unnumbered=\relax
-  \let\top=\relax
-  \let\unnumberedsec=\relax
-  \let\unnumberedsection=\relax
-  \let\unnumberedsubsec=\relax
-  \let\unnumberedsubsection=\relax
-  \let\unnumberedsubsubsec=\relax
-  \let\unnumberedsubsubsection=\relax
-  \let\section=\relax
-  \let\subsec=\relax
-  \let\subsubsec=\relax
-  \let\subsection=\relax
-  \let\subsubsection=\relax
-  \let\appendix=\relax
-  \let\appendixsec=\relax
-  \let\appendixsection=\relax
-  \let\appendixsubsec=\relax
-  \let\appendixsubsection=\relax
-  \let\appendixsubsubsec=\relax
-  \let\appendixsubsubsection=\relax
-  \let\contents=\relax
-  \let\smallbook=\relax
-  \let\titlepage=\relax
-}
-
-% Used in nested conditionals, where we have to parse the Texinfo source
-% and so want to turn off most commands, in case they are used
-% incorrectly.
-%
-% We use \empty instead of \relax for the @def... commands, so that \end
-% doesn't throw an error.  For instance:
-% @ignore
-% @deffn ...
-% @end deffn
-% @end ignore
-%
-% The @end deffn is going to get expanded, because we're trying to allow
-% nested conditionals.  But we don't want to expand the actual @deffn,
-% since it might be syntactically correct and intended to be ignored.
-% Since \end checks for \relax, using \empty does not cause an error.
-%
-\def\ignoremorecommands{%
-  \let\defcodeindex = \relax
-  \let\defcv = \empty
-  \let\defcvx = \empty
-  \let\Edefcv = \empty
-  \let\deffn = \empty
-  \let\deffnx = \empty
-  \let\Edeffn = \empty
-  \let\defindex = \relax
-  \let\defivar = \empty
-  \let\defivarx = \empty
-  \let\Edefivar = \empty
-  \let\defmac = \empty
-  \let\defmacx = \empty
-  \let\Edefmac = \empty
-  \let\defmethod = \empty
-  \let\defmethodx = \empty
-  \let\Edefmethod = \empty
-  \let\defop = \empty
-  \let\defopx = \empty
-  \let\Edefop = \empty
-  \let\defopt = \empty
-  \let\defoptx = \empty
-  \let\Edefopt = \empty
-  \let\defspec = \empty
-  \let\defspecx = \empty
-  \let\Edefspec = \empty
-  \let\deftp = \empty
-  \let\deftpx = \empty
-  \let\Edeftp = \empty
-  \let\deftypefn = \empty
-  \let\deftypefnx = \empty
-  \let\Edeftypefn = \empty
-  \let\deftypefun = \empty
-  \let\deftypefunx = \empty
-  \let\Edeftypefun = \empty
-  \let\deftypeivar = \empty
-  \let\deftypeivarx = \empty
-  \let\Edeftypeivar = \empty
-  \let\deftypemethod = \empty
-  \let\deftypemethodx = \empty
-  \let\Edeftypemethod = \empty
-  \let\deftypeop = \empty
-  \let\deftypeopx = \empty
-  \let\Edeftypeop = \empty
-  \let\deftypevar = \empty
-  \let\deftypevarx = \empty
-  \let\Edeftypevar = \empty
-  \let\deftypevr = \empty
-  \let\deftypevrx = \empty
-  \let\Edeftypevr = \empty
-  \let\defun = \empty
-  \let\defunx = \empty
-  \let\Edefun = \empty
-  \let\defvar = \empty
-  \let\defvarx = \empty
-  \let\Edefvar = \empty
-  \let\defvr = \empty
-  \let\defvrx = \empty
-  \let\Edefvr = \empty
-  \let\clear = \relax
-  \let\down = \relax
-  \let\evenfooting = \relax
-  \let\evenheading = \relax
-  \let\everyfooting = \relax
-  \let\everyheading = \relax
-  \let\headings = \relax
-  \let\include = \relax
-  \let\item = \relax
-  \let\lowersections = \relax
-  \let\oddfooting = \relax
-  \let\oddheading = \relax
-  \let\printindex = \relax
-  \let\pxref = \relax
-  \let\raisesections = \relax
-  \let\ref = \relax
-  \let\set = \relax
-  \let\setchapternewpage = \relax
-  \let\setchapterstyle = \relax
-  \let\settitle = \relax
-  \let\up = \relax
-  \let\verbatiminclude = \relax
-  \let\xref = \relax
-}
-
-% Ignore @ignore, @ifhtml, @ifinfo, and the like.
-%
-\def\direntry{\doignore{direntry}}
-\def\documentdescriptionword{documentdescription}
-\def\documentdescription{\doignore{documentdescription}}
-\def\html{\doignore{html}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\ifplaintext{\doignore{ifplaintext}}
-\def\ifxml{\doignore{ifxml}}
-\def\ignore{\doignore{ignore}}
-\def\menu{\doignore{menu}}
-\def\xml{\doignore{xml}}
-
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory = \comment
-
-% Ignore text until a line `@end #1'.
-%
-\def\doignore#1{\begingroup
-  % Don't complain about control sequences we have declared \outer.
-  \ignoresections
-  %
-  % Define a command to swallow text until we reach `@end #1'.
-  % This @ is a catcode 12 token (that is the normal catcode of @ in
-  % this texinfo.tex file).  We change the catcode of @ below to match.
-  \long\def\doignoretext##1@end #1{\enddoignore}%
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \catcode\spaceChar = 10
-  %
-  % Ignore braces, too, so mismatched braces don't cause trouble.
-  \catcode`\{ = 9
-  \catcode`\} = 9
-  %
-  % We must not have @c interpreted as a control sequence.
-  \catcode`\@ = 12
-  %
-  \def\ignoreword{#1}%
-  \ifx\ignoreword\documentdescriptionword
-    % The c kludge breaks documentdescription, since
-    % `documentdescription' contains a `c'.  Means not everything will
-    % be ignored inside @documentdescription, but oh well...
-  \else
-    % Make the letter c a comment character so that the rest of the line
-    % will be ignored. This way, the document can have (for example)
-    %   @c @end ifinfo
-    % and the @end ifinfo will be properly ignored.
-    % (We've just changed @ to catcode 12.)
-    \catcode`\c = 14
-  \fi
-  %
-  % And now expand the command defined above.
-  \doignoretext
-}
-
-% What we do to finish off ignored text.
-%
-\def\enddoignore{\endgroup\ignorespaces}%
-
-\newif\ifwarnedobs\warnedobsfalse
-\def\obstexwarn{%
-  \ifwarnedobs\relax\else
-  % We need to warn folks that they may have trouble with TeX 3.0.
-  % This uses \immediate\write16 rather than \message to get newlines.
-    \immediate\write16{}
-    \immediate\write16{WARNING: for users of Unix TeX 3.0!}
-    \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).}
-    \immediate\write16{If you are running another version of TeX, relax.}
-    \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.}
-    \immediate\write16{  Then upgrade your TeX installation if you can.}
-    \immediate\write16{  (See ftp://ftp.gnu.org/non-gnu/TeX.README.)}
-    \immediate\write16{If you are stuck with version 3.0, run the}
-    \immediate\write16{  script ``tex3patch'' from the Texinfo distribution}
-    \immediate\write16{  to use a workaround.}
-    \immediate\write16{}
-    \global\warnedobstrue
-    \fi
-}
-
-% **In TeX 3.0, setting text in \nullfont hangs tex.  For a
-% workaround (which requires the file ``dummy.tfm'' to be installed),
-% uncomment the following line:
-%%%%%\font\nullfont=dummy\let\obstexwarn=\relax
-
-% Ignore text, except that we keep track of conditional commands for
-% purposes of nesting, up to an `@end #1' command.
-%
-\def\nestedignore#1{%
-  \obstexwarn
-  % We must actually expand the ignored text to look for the @end
-  % command, so that nested ignore constructs work.  Thus, we put the
-  % text into a \vbox and then do nothing with the result.  To minimize
-  % the chance of memory overflow, we follow the approach outlined on
-  % page 401 of the TeXbook.
-  %
-  \setbox0 = \vbox\bgroup
-    % Don't complain about control sequences we have declared \outer.
-    \ignoresections
-    %
-    % Define `@end #1' to end the box, which will in turn undefine the
-    % @end command again.
-    \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}%
-    %
-    % We are going to be parsing Texinfo commands.  Most cause no
-    % trouble when they are used incorrectly, but some commands do
-    % complicated argument parsing or otherwise get confused, so we
-    % undefine them.
-    %
-    % We can't do anything about stray @-signs, unfortunately;
-    % they'll produce `undefined control sequence' errors.
-    \ignoremorecommands
-    %
-    % Set the current font to be \nullfont, a TeX primitive, and define
-    % all the font commands to also use \nullfont.  We don't use
-    % dummy.tfm, as suggested in the TeXbook, because some sites
-    % might not have that installed.  Therefore, math mode will still
-    % produce output, but that should be an extremely small amount of
-    % stuff compared to the main input.
-    %
-    \nullfont
-    \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont
-    \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont
-    \let\tensf=\nullfont
-    % Similarly for index fonts.
-    \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
-    \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
-    \let\smallsf=\nullfont
-    % Similarly for smallexample fonts.
-    \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
-    \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
-    \let\smallersf=\nullfont
-    %
-    % Don't complain when characters are missing from the fonts.
-    \tracinglostchars = 0
-    %
-    % Don't bother to do space factor calculations.
-    \frenchspacing
-    %
-    % Don't report underfull hboxes.
-    \hbadness = 10000
-    %
-    % Do minimal line-breaking.
-    \pretolerance = 10000
-    %
-    % Do not execute instructions in @tex.
-    \def\tex{\doignore{tex}}%
-    % Do not execute macro definitions.
-    % `c' is a comment character, so the word `macro' will get cut off.
-    \def\macro{\doignore{ma}}%
-}
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.  Make sure the catcode of space is correct to avoid
-% losing inside @example, for instance.
-%
-\def\set{\begingroup\catcode` =10
-  \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR.
-  \parsearg\setxxx}
-\def\setxxx#1{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  \def\temp{#2}%
-  \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty
-  \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted.
-  \fi
-  \endgroup
-}
-% Can't use \xdef to pre-expand #2 and save some time, since \temp or
-% \next or other control sequences that we've defined might get us into
-% an infinite loop. Consider `@set foo @cite{bar}'.
-\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\def\clear{\parsearg\clearxxx}
-\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax}
-
-% @value{foo} gets the text saved in variable foo.
-{
-  \catcode`\_ = \active
-  %
-  % We might end up with active _ or - characters in the argument if
-  % we're called from @code, as @code{@value{foo-bar_}}.  So \let any
-  % such active characters to their normal equivalents.
-  \gdef\value{\begingroup
-    \catcode`\-=\other \catcode`\_=\other
-    \indexbreaks \let_\normalunderscore
-    \valuexxx}
-}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we \let\value to this in \indexdummies).  Ones
-% whose names contain - or _ still won't work, but we can't do anything
-% about that.  The command has to be fully expandable (if the variable
-% is set), since the result winds up in the index file.  This means that
-% if the variable's value contains other Texinfo commands, it's almost
-% certain it will fail (although perhaps we could fix that with
-% sufficient work to do a one-level expansion on the result, instead of
-% complete).
-%
-\def\expandablevalue#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {[No value for ``#1'']}%
-    \message{Variable `#1', used in @value, is not set.}%
-  \else
-    \csname SET#1\endcsname
-  \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-%
-\def\ifset{\parsearg\doifset}
-\def\doifset#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \let\next=\ifsetfail
-  \else
-    \let\next=\ifsetsucceed
-  \fi
-  \next
-}
-\def\ifsetsucceed{\conditionalsucceed{ifset}}
-\def\ifsetfail{\nestedignore{ifset}}
-\defineunmatchedend{ifset}
-
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-\def\ifclear{\parsearg\doifclear}
-\def\doifclear#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    \let\next=\ifclearsucceed
-  \else
-    \let\next=\ifclearfail
-  \fi
-  \next
-}
-\def\ifclearsucceed{\conditionalsucceed{ifclear}}
-\def\ifclearfail{\nestedignore{ifclear}}
-\defineunmatchedend{ifclear}
-
-% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we
-% read the text following, through the first @end iftex (etc.).  Make
-% `@end iftex' (etc.) valid only after an @iftex.
-%
-\def\iftex{\conditionalsucceed{iftex}}
-\def\ifnothtml{\conditionalsucceed{ifnothtml}}
-\def\ifnotinfo{\conditionalsucceed{ifnotinfo}}
-\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
-\defineunmatchedend{iftex}
-\defineunmatchedend{ifnothtml}
-\defineunmatchedend{ifnotinfo}
-\defineunmatchedend{ifnotplaintext}
-
-% True conditional.  Since \set globally defines its variables, we can
-% just start and end a group (to keep the @end definition undefined at
-% the outer level).
-%
-\def\conditionalsucceed#1{\begingroup
-  \expandafter\def\csname E#1\endcsname{\endgroup}%
-}
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within \newindex.
-{\catcode`\@=11
-\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
-    \noexpand\doindex{#1}}
-}
-
-% @defindex foo  ==  \newindex{foo}
-%
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-%
-\def\defcodeindex{\parsearg\newcodeindex}
-%
-\def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%
-    \noexpand\docodeindex{#1}}%
-}
-
-
-% @synindex foo bar    makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-%
-% @syncodeindex foo bar   similar, but put all entries made for index foo
-% inside @code.
-%
-\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-
-% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-% #3 the target index (bar).
-\def\dosynindex#1#2#3{%
-  % Only do \closeout if we haven't already done it, else we'll end up
-  % closing the target index.
-  \expandafter \ifx\csname donesynindex#2\endcsname \undefined
-    % The \closeout helps reduce unnecessary open files; the limit on the
-    % Acorn RISC OS is a mere 16 files.
-    \expandafter\closeout\csname#2indfile\endcsname
-    \expandafter\let\csname\donesynindex#2\endcsname = 1
-  \fi
-  % redefine \fooindfile:
-  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
-  \expandafter\let\csname#2indfile\endcsname=\temp
-  % redefine \fooindex:
-  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
-  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-  \def\ {\realbackslash\space }%
-  % Need these in case \tex is in effect and \{ is a \delimiter again.
-  % But can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.
-  \let\{ = \mylbrace
-  \let\} = \myrbrace
-  %
-  % \definedummyword defines \#1 as \realbackslash #1\space, thus
-  % effectively preventing its expansion.  This is used only for control
-  % words, not control letters, because the \space would be incorrect
-  % for control characters, but is needed to separate the control word
-  % from whatever follows.
-  %
-  % For control letters, we have \definedummyletter, which omits the
-  % space.
-  %
-  % These can be used both for control words that take an argument and
-  % those that do not.  If it is followed by {arg} in the input, then
-  % that will dutifully get written to the index (or wherever).
-  %
-  \def\definedummyword##1{%
-    \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
-  }%
-  \def\definedummyletter##1{%
-    \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
-  }%
-  %
-  % Do the redefinitions.
-  \commondummies
-}
-
-% For the aux file, @ is the escape character.  So we want to redefine
-% everything using @ instead of \realbackslash.  When everything uses
-% @, this will be simpler.
-%
-\def\atdummies{%
-  \def\@{@@}%
-  \def\ {@ }%
-  \let\{ = \lbraceatcmd
-  \let\} = \rbraceatcmd
-  %
-  % (See comments in \indexdummies.)
-  \def\definedummyword##1{%
-    \expandafter\def\csname ##1\endcsname{@##1\space}%
-  }%
-  \def\definedummyletter##1{%
-    \expandafter\def\csname ##1\endcsname{@##1}%
-  }%
-  %
-  % Do the redefinitions.
-  \commondummies
-}
-
-% Called from \indexdummies and \atdummies.  \definedummyword and
-% \definedummyletter must be defined first.
-%
-\def\commondummies{%
-  %
-  \normalturnoffactive
-  %
-  % Control letters and accents.
-  \definedummyletter{_}%
-  \definedummyletter{,}%
-  \definedummyletter{"}%
-  \definedummyletter{`}%
-  \definedummyletter{'}%
-  \definedummyletter{^}%
-  \definedummyletter{~}%
-  \definedummyletter{=}%
-  \definedummyword{u}%
-  \definedummyword{v}%
-  \definedummyword{H}%
-  \definedummyword{dotaccent}%
-  \definedummyword{ringaccent}%
-  \definedummyword{tieaccent}%
-  \definedummyword{ubaraccent}%
-  \definedummyword{udotaccent}%
-  \definedummyword{dotless}%
-  %
-  % Other non-English letters.
-  \definedummyword{AA}%
-  \definedummyword{AE}%
-  \definedummyword{L}%
-  \definedummyword{OE}%
-  \definedummyword{O}%
-  \definedummyword{aa}%
-  \definedummyword{ae}%
-  \definedummyword{l}%
-  \definedummyword{oe}%
-  \definedummyword{o}%
-  \definedummyword{ss}%
-  %
-  % Although these internal commands shouldn't show up, sometimes they do.
-  \definedummyword{bf}%
-  \definedummyword{gtr}%
-  \definedummyword{hat}%
-  \definedummyword{less}%
-  \definedummyword{sf}%
-  \definedummyword{sl}%
-  \definedummyword{tclose}%
-  \definedummyword{tt}%
-  %
-  % Texinfo font commands.
-  \definedummyword{b}%
-  \definedummyword{i}%
-  \definedummyword{r}%
-  \definedummyword{sc}%
-  \definedummyword{t}%
-  %
-  \definedummyword{TeX}%
-  \definedummyword{acronym}%
-  \definedummyword{cite}%
-  \definedummyword{code}%
-  \definedummyword{command}%
-  \definedummyword{dfn}%
-  \definedummyword{dots}%
-  \definedummyword{emph}%
-  \definedummyword{env}%
-  \definedummyword{file}%
-  \definedummyword{kbd}%
-  \definedummyword{key}%
-  \definedummyword{math}%
-  \definedummyword{option}%
-  \definedummyword{samp}%
-  \definedummyword{strong}%
-  \definedummyword{uref}%
-  \definedummyword{url}%
-  \definedummyword{var}%
-  \definedummyword{w}%
-  %
-  % Assorted special characters.
-  \definedummyword{bullet}%
-  \definedummyword{copyright}%
-  \definedummyword{dots}%
-  \definedummyword{enddots}%
-  \definedummyword{equiv}%
-  \definedummyword{error}%
-  \definedummyword{expansion}%
-  \definedummyword{minus}%
-  \definedummyword{pounds}%
-  \definedummyword{point}%
-  \definedummyword{print}%
-  \definedummyword{result}%
-  %
-  % Handle some cases of @value -- where the variable name does not
-  % contain - or _, and the value does not contain any
-  % (non-fully-expandable) commands.
-  \let\value = \expandablevalue
-  %
-  % Normal spaces, not active ones.
-  \unsepspaces
-  %
-  % No macro expansion.
-  \turnoffmacros
-}
-
-% If an index command is used in an @example environment, any spaces
-% therein should become regular spaces in the raw index file, not the
-% expansion of \tie (\leavevmode \penalty \@M \ ).
-{\obeyspaces
- \gdef\unsepspaces{\obeyspaces\let =\space}}
-
-
-% \indexnofonts is used when outputting the strings to sort the index
-% by, and when constructing control sequence names.  It eliminates all
-% control sequences and just writes whatever the best ASCII sort string
-% would be for a given command (usually its argument).
-%
-\def\indexdummytex{TeX}
-\def\indexdummydots{...}
-%
-\def\indexnofonts{%
-  \def\ { }%
-  \def\@{@}%
-  % how to handle braces?
-  \def\_{\normalunderscore}%
-  %
-  \let\,=\asis
-  \let\"=\asis
-  \let\`=\asis
-  \let\'=\asis
-  \let\^=\asis
-  \let\~=\asis
-  \let\==\asis
-  \let\u=\asis
-  \let\v=\asis
-  \let\H=\asis
-  \let\dotaccent=\asis
-  \let\ringaccent=\asis
-  \let\tieaccent=\asis
-  \let\ubaraccent=\asis
-  \let\udotaccent=\asis
-  \let\dotless=\asis
-  %
-  % Other non-English letters.
-  \def\AA{AA}%
-  \def\AE{AE}%
-  \def\L{L}%
-  \def\OE{OE}%
-  \def\O{O}%
-  \def\aa{aa}%
-  \def\ae{ae}%
-  \def\l{l}%
-  \def\oe{oe}%
-  \def\o{o}%
-  \def\ss{ss}%
-  \def\exclamdown{!}%
-  \def\questiondown{?}%
-  %
-  % Don't no-op \tt, since it isn't a user-level command
-  % and is used in the definitions of the active chars like <, >, |, etc.
-  % Likewise with the other plain tex font commands.
-  %\let\tt=\asis
-  %
-  % Texinfo font commands.
-  \let\b=\asis
-  \let\i=\asis
-  \let\r=\asis
-  \let\sc=\asis
-  \let\t=\asis
-  %
-  \let\TeX=\indexdummytex
-  \let\acronym=\asis
-  \let\cite=\asis
-  \let\code=\asis
-  \let\command=\asis
-  \let\dfn=\asis
-  \let\dots=\indexdummydots
-  \let\emph=\asis
-  \let\env=\asis
-  \let\file=\asis
-  \let\kbd=\asis
-  \let\key=\asis
-  \let\math=\asis
-  \let\option=\asis
-  \let\samp=\asis
-  \let\strong=\asis
-  \let\uref=\asis
-  \let\url=\asis
-  \let\var=\asis
-  \let\w=\asis
-}
-
-\let\indexbackslash=0  %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% For \ifx comparisons.
-\def\emptymacro{\empty}
-
-% Most index entries go through here, but \dosubind is the general case.
-%
-\def\doind#1#2{\dosubind{#1}{#2}\empty}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% \empty if called from \doind, as we usually are.  The main exception
-% is with defuns, which call us directly.
-%
-\def\dosubind#1#2#3{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}%
-  \fi
-  {%
-    \count255=\lastpenalty
-    {%
-      \indexdummies % Must do this here, since \bf, etc expand at this stage
-      \escapechar=`\\
-      {%
-        \let\folio = 0% We will expand all macros now EXCEPT \folio.
-        \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now
-        % so it will be output as is; and it will print as backslash.
-        %
-        % The main index entry text.
-        \toks0 = {#2}%
-        %
-        % If third arg is present, precede it with space in sort key.
-        \def\thirdarg{#3}%
-        \ifx\thirdarg\emptymacro \else
-           % If the third (subentry) arg is present, add it to the index
-           % line to write.
-          \toks0 = \expandafter{\the\toks0 \space #3}%
-        \fi
-        %
-        % Process the index entry with all font commands turned off, to
-        % get the string to sort by.
-        {\indexnofonts
-         \edef\temp{\the\toks0}% need full expansion
-         \xdef\indexsorttmp{\temp}%
-        }%
-        %
-        % Set up the complete index entry, with both the sort key and
-        % the original text, including any font commands.  We write
-        % three arguments to \entry to the .?? file (four in the
-        % subentry case), texindex reduces to two when writing the .??s
-        % sorted result.
-        \edef\temp{%
-          \write\csname#1indfile\endcsname{%
-            \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
-        }%
-        %
-        % If a skip is the last thing on the list now, preserve it
-        % by backing up by \lastskip, doing the \write, then inserting
-        % the skip again.  Otherwise, the whatsit generated by the
-        % \write will make \lastskip zero.  The result is that sequences
-        % like this:
-        % @end defun
-        % @tindex whatever
-        % @defun ...
-        % will have extra space inserted, because the \medbreak in the
-        % start of the @defun won't see the skip inserted by the @end of
-        % the previous defun.
-        %
-        % But don't do any of this if we're not in vertical mode.  We
-        % don't want to do a \vskip and prematurely end a paragraph.
-        %
-        % Avoid page breaks due to these extra skips, too.
-        %
-        \iflinks
-          \ifvmode
-            \skip0 = \lastskip
-            \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi
-          \fi
-          %
-          \temp % do the write
-          %
-          \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi
-        \fi
-      }%
-    }%
-    \penalty\count255
-  }%
-}
-
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-%  \initial {c}
-%     before the first topic whose initial is c
-%  \entry {topic}{pagelist}
-%     for a topic that is used without subtopics
-%  \primary {topic}
-%     for the beginning of a topic that is used with subtopics
-%  \secondary {subtopic}{pagelist}
-%     for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\def\printindex{\parsearg\doprintindex}
-\def\doprintindex#1{\begingroup
-  \dobreak \chapheadingskip{10000}%
-  %
-  \smallfonts \rm
-  \tolerance = 9500
-  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
-  \indexbreaks
-  %
-  % See if the index file exists and is nonempty.
-  % Change catcode of @ here so that if the index file contains
-  % \initial {@}
-  % as its first line, TeX doesn't complain about mismatched braces
-  % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
-  \openin 1 \jobname.#1s
-  \ifeof 1
-    % \enddoublecolumns gets confused if there is no text in the index,
-    % and it loses the chapter title and the aux file entries for the
-    % index.  The easiest way to prevent this problem is to make sure
-    % there is some text.
-    \putwordIndexNonexistent
-  \else
-    %
-    % If the index file exists but is empty, then \openin leaves \ifeof
-    % false.  We have to make TeX try to read something from the file, so
-    % it can discover if there is anything in it.
-    \read 1 to \temp
-    \ifeof 1
-      \putwordIndexIsEmpty
-    \else
-      % Index files are almost Texinfo source, but we use \ as the escape
-      % character.  It would be better to use @, but that's too big a change
-      % to make right now.
-      \def\indexbackslash{\rawbackslashxx}%
-      \catcode`\\ = 0
-      \escapechar = `\\
-      \begindoublecolumns
-      \input \jobname.#1s
-      \enddoublecolumns
-    \fi
-  \fi
-  \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
-  % Remove any glue we may have, we'll be inserting our own.
-  \removelastskip
-  %
-  % We like breaks before the index initials, so insert a bonus.
-  \penalty -300
-  %
-  % Typeset the initial.  Making this add up to a whole number of
-  % baselineskips increases the chance of the dots lining up from column
-  % to column.  It still won't often be perfect, because of the stretch
-  % we need before each entry, but it's better.
-  %
-  % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
-  \vskip .33\baselineskip plus .1\baselineskip
-  %
-  % Do our best not to break after the initial.
-  \nobreak
-}}
-
-% This typesets a paragraph consisting of #1, dot leaders, and then #2
-% flush to the right margin.  It is used for index and table of contents
-% entries.  The paragraph is indented by \leftskip.
-%
-\def\entry#1#2{\begingroup
-  %
-  % Start a new paragraph if necessary, so our assignments below can't
-  % affect previous text.
-  \par
-  %
-  % Do not fill out the last line with white space.
-  \parfillskip = 0in
-  %
-  % No extra space above this paragraph.
-  \parskip = 0in
-  %
-  % Do not prefer a separate line ending with a hyphen to fewer lines.
-  \finalhyphendemerits = 0
-  %
-  % \hangindent is only relevant when the entry text and page number
-  % don't both fit on one line.  In that case, bob suggests starting the
-  % dots pretty far over on the line.  Unfortunately, a large
-  % indentation looks wrong when the entry text itself is broken across
-  % lines.  So we use a small indentation and put up with long leaders.
-  %
-  % \hangafter is reset to 1 (which is the value we want) at the start
-  % of each paragraph, so we need not do anything with that.
-  \hangindent = 2em
-  %
-  % When the entry text needs to be broken, just fill out the first line
-  % with blank space.
-  \rightskip = 0pt plus1fil
-  %
-  % A bit of stretch before each entry for the benefit of balancing columns.
-  \vskip 0pt plus1pt
-  %
-  % Start a ``paragraph'' for the index entry so the line breaking
-  % parameters we've set above will have an effect.
-  \noindent
-  %
-  % Insert the text of the index entry.  TeX will do line-breaking on it.
-  #1%
-  % The following is kludged to not output a line of dots in the index if
-  % there are no page numbers.  The next person who breaks this will be
-  % cursed by a Unix daemon.
-  \def\tempa{{\rm }}%
-  \def\tempb{#2}%
-  \edef\tempc{\tempa}%
-  \edef\tempd{\tempb}%
-  \ifx\tempc\tempd\ \else%
-    %
-    % If we must, put the page number on a line of its own, and fill out
-    % this line with blank space.  (The \hfil is overwhelmed with the
-    % fill leaders glue in \indexdotfill if the page number does fit.)
-    \hfil\penalty50
-    \null\nobreak\indexdotfill % Have leaders before the page number.
-    %
-    % The `\ ' here is removed by the implicit \unskip that TeX does as
-    % part of (the primitive) \par.  Without it, a spurious underfull
-    % \hbox ensues.
-    \ifpdf
-      \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-    \else
-      \ #2% The page number ends the paragraph.
-    \fi
-  \fi%
-  \par
-\endgroup}
-
-% Like \dotfill except takes at least 1 em.
-\def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
-  \parfillskip=0in
-  \parskip=0in
-  \hangindent=1in
-  \hangafter=1
-  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-  \ifpdf
-    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-  \else
-    #2
-  \fi
-  \par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
-  % Grab any single-column material above us.
-  \output = {%
-    %
-    % Here is a possibility not foreseen in manmac: if we accumulate a
-    % whole lot of material, we might end up calling this \output
-    % routine twice in a row (see the doublecol-lose test, which is
-    % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case we just ship out what is in \partialpage with the normal
-    % output routine.  Generally, \partialpage will be empty when this
-    % runs and this will be a no-op.  See the indexspread.tex test case.
-    \ifvoid\partialpage \else
-      \onepageout{\pagecontents\partialpage}%
-    \fi
-    %
-    \global\setbox\partialpage = \vbox{%
-      % Unvbox the main output page.
-      \unvbox\PAGE
-      \kern-\topskip \kern\baselineskip
-    }%
-  }%
-  \eject % run that output routine to set \partialpage
-  %
-  % Use the double-column output routine for subsequent pages.
-  \output = {\doublecolumnout}%
-  %
-  % Change the page size parameters.  We could do this once outside this
-  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
-  % format, but then we repeat the same computation.  Repeating a couple
-  % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it in one place.
-  %
-  % First we halve the line length, less a little for the gutter between
-  % the columns.  We compute the gutter based on the line length, so it
-  % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +-<1pt)
-  % as it did when we hard-coded it.
-  %
-  % We put the result in a separate register, \doublecolumhsize, so we
-  % can restore it in \pagesofar, after \hsize itself has (potentially)
-  % been clobbered.
-  %
-  \doublecolumnhsize = \hsize
-    \advance\doublecolumnhsize by -.04154\hsize
-    \divide\doublecolumnhsize by 2
-  \hsize = \doublecolumnhsize
-  %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
-  \splittopskip=\topskip \splitmaxdepth=\maxdepth
-  % Get the available space for the double columns -- the normal
-  % (undoubled) page height minus any material left over from the
-  % previous page.
-  \dimen@ = \vsize
-  \divide\dimen@ by 2
-  \advance\dimen@ by -\ht\partialpage
-  %
-  % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar
-  \unvbox255
-  \penalty\outputpenalty
-}
-%
-% Re-output the contents of the output page -- any previous material,
-% followed by the two boxes we just split, in box0 and box2.
-\def\pagesofar{%
-  \unvbox\partialpage
-  %
-  \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
-}
-%
-% All done with double columns.
-\def\enddoublecolumns{%
-  \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
-    \balancecolumns
-    %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
-    % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
-    \global\output = {\onepageout{\pagecontents\PAGE}}%
-  }%
-  \eject
-  \endgroup % started in \begindoublecolumns
-  %
-  % \pagegoal was set to the doubled \vsize above, since we restarted
-  % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
-}
-%
-% Called at the end of the double column material.
-\def\balancecolumns{%
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
-  \dimen@ = \ht0
-  \advance\dimen@ by \topskip
-  \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
-  %
-  \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-\newcount\chapno
-\newcount\secno        \secno=0
-\newcount\subsecno     \subsecno=0
-\newcount\subsubsecno  \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno  \appendixno = `\@
-% \def\appendixletter{\char\the\appendixno}
-% We do the following for the sake of pdftex, which needs the actual
-% letter in the expansion, not just typeset.
-\def\appendixletter{%
-  \ifnum\appendixno=`A A%
-  \else\ifnum\appendixno=`B B%
-  \else\ifnum\appendixno=`C C%
-  \else\ifnum\appendixno=`D D%
-  \else\ifnum\appendixno=`E E%
-  \else\ifnum\appendixno=`F F%
-  \else\ifnum\appendixno=`G G%
-  \else\ifnum\appendixno=`H H%
-  \else\ifnum\appendixno=`I I%
-  \else\ifnum\appendixno=`J J%
-  \else\ifnum\appendixno=`K K%
-  \else\ifnum\appendixno=`L L%
-  \else\ifnum\appendixno=`M M%
-  \else\ifnum\appendixno=`N N%
-  \else\ifnum\appendixno=`O O%
-  \else\ifnum\appendixno=`P P%
-  \else\ifnum\appendixno=`Q Q%
-  \else\ifnum\appendixno=`R R%
-  \else\ifnum\appendixno=`S S%
-  \else\ifnum\appendixno=`T T%
-  \else\ifnum\appendixno=`U U%
-  \else\ifnum\appendixno=`V V%
-  \else\ifnum\appendixno=`W W%
-  \else\ifnum\appendixno=`X X%
-  \else\ifnum\appendixno=`Y Y%
-  \else\ifnum\appendixno=`Z Z%
-  % The \the is necessary, despite appearances, because \appendixletter is
-  % expanded while writing the .toc file.  \char\appendixno is not
-  % expandable, thus it is written literally, thus all appendixes come out
-  % with the same letter (or @) in the toc without it.
-  \else\char\the\appendixno
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% Each @chapter defines this as the name of the chapter.
-% page headings and footings can use it.  @section does likewise.
-\def\thischapter{}
-\def\thissection{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raise/lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% Choose a numbered-heading macro
-% #1 is heading level if unmodified by @raisesections or @lowersections
-% #2 is text for heading
-\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \chapterzzz{#2}
-\or
-  \seczzz{#2}
-\or
-  \numberedsubseczzz{#2}
-\or
-  \numberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \chapterzzz{#2}
-  \else
-    \numberedsubsubseczzz{#2}
-  \fi
-\fi
-\suppressfirstparagraphindent
-}
-
-% like \numhead, but chooses appendix heading levels
-\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \appendixzzz{#2}
-\or
-  \appendixsectionzzz{#2}
-\or
-  \appendixsubseczzz{#2}
-\or
-  \appendixsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \appendixzzz{#2}
-  \else
-    \appendixsubsubseczzz{#2}
-  \fi
-\fi
-\suppressfirstparagraphindent
-}
-
-% like \numhead, but chooses numberless heading levels
-\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1
-\ifcase\absseclevel
-  \unnumberedzzz{#2}
-\or
-  \unnumberedseczzz{#2}
-\or
-  \unnumberedsubseczzz{#2}
-\or
-  \unnumberedsubsubseczzz{#2}
-\else
-  \ifnum \absseclevel<0
-    \unnumberedzzz{#2}
-  \else
-    \unnumberedsubsubseczzz{#2}
-  \fi
-\fi
-\suppressfirstparagraphindent
-}
-
-% @chapter, @appendix, @unnumbered.
-\def\thischaptername{No Chapter Title}
-\outer\def\chapter{\parsearg\chapteryyy}
-\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
-  \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}%
-  \chapmacro {#1}{\the\chapno}%
-  \gdef\thissection{#1}%
-  \gdef\thischaptername{#1}%
-  % We don't substitute the actual chapter name into \thischapter
-  % because we don't want its macros evaluated now.
-  \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
-  \writetocentry{chap}{#1}{{\the\chapno}}
-  \donoderef
-  \global\let\section = \numberedsec
-  \global\let\subsection = \numberedsubsec
-  \global\let\subsubsection = \numberedsubsubsec
-}
-
-% we use \chapno to avoid indenting back
-\def\appendixbox#1{%
-  \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
-  \hbox to \wd0{#1\hss}}
-
-\outer\def\appendix{\parsearg\appendixyyy}
-\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz
-\def\appendixzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
-  \global\advance \appendixno by 1
-  \message{\putwordAppendix\space \appendixletter}%
-  \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}%
-  \gdef\thissection{#1}%
-  \gdef\thischaptername{#1}%
-  \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
-  \writetocentry{appendix}{#1}{{\appendixletter}}
-  \appendixnoderef
-  \global\let\section = \appendixsec
-  \global\let\subsection = \appendixsubsec
-  \global\let\subsubsection = \appendixsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\def\centerchap{\parsearg\centerchapyyy}
-\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}}
-
-% @top is like @unnumbered.
-\outer\def\top{\parsearg\unnumberedyyy}
-
-\outer\def\unnumbered{\parsearg\unnumberedyyy}
-\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
-\def\unnumberedzzz #1{%
-  \secno=0 \subsecno=0 \subsubsecno=0
-  %
-  % This used to be simply \message{#1}, but TeX fully expands the
-  % argument to \message.  Therefore, if #1 contained @-commands, TeX
-  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-  % expanded @cite (which turns out to cause errors because \cite is meant
-  % to be executed, not expanded).
-  %
-  % Anyway, we don't want the fully-expanded definition of @cite to appear
-  % as a result of the \message, we just want `@cite' itself.  We use
-  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-  % simply yielding the contents of <toks register>.  (We also do this for
-  % the toc entries.)
-  \toks0 = {#1}\message{(\the\toks0)}%
-  %
-  \unnumbchapmacro {#1}%
-  \gdef\thischapter{#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbchap}{#1}{{\the\chapno}}
-  \unnumbnoderef
-  \global\let\section = \unnumberedsec
-  \global\let\subsection = \unnumberedsubsec
-  \global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% Sections.
-\outer\def\numberedsec{\parsearg\secyyy}
-\def\secyyy #1{\numhead1{#1}} % normally calls seczzz
-\def\seczzz #1{%
-  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-  \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
-  \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}}
-  \donoderef
-  \nobreak
-}
-
-\outer\def\appendixsection{\parsearg\appendixsecyyy}
-\outer\def\appendixsec{\parsearg\appendixsecyyy}
-\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz
-\def\appendixsectionzzz #1{%
-  \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
-  \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
-  \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}}
-  \appendixnoderef
-  \nobreak
-}
-
-\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy}
-\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz
-\def\unnumberedseczzz #1{%
-  \plainsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}}
-  \unnumbnoderef
-  \nobreak
-}
-
-% Subsections.
-\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy}
-\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz
-\def\numberedsubseczzz #1{%
-  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-  \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
-  \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
-  \donoderef
-  \nobreak
-}
-
-\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy}
-\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz
-\def\appendixsubseczzz #1{%
-  \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
-  \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
-  \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}}
-  \appendixnoderef
-  \nobreak
-}
-
-\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy}
-\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
-\def\unnumberedsubseczzz #1{%
-  \plainsubsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}}
-  \unnumbnoderef
-  \nobreak
-}
-
-% Subsubsections.
-\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy}
-\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz
-\def\numberedsubsubseczzz #1{%
-  \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-  \subsubsecheading {#1}
-    {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-  \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \donoderef
-  \nobreak
-}
-
-\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy}
-\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz
-\def\appendixsubsubseczzz #1{%
-  \gdef\thissection{#1}\global\advance \subsubsecno by 1 %
-  \subsubsecheading {#1}
-    {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
-  \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \appendixnoderef
-  \nobreak
-}
-
-\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy}
-\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
-\def\unnumberedsubsubseczzz #1{%
-  \plainsubsubsecheading {#1}\gdef\thissection{#1}%
-  \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}
-  \unnumbnoderef
-  \nobreak
-}
-
-% These are variants which are not "outer", so they can appear in @ifinfo.
-% Actually, they should now be obsolete; ordinary section commands should work.
-\def\infotop{\parsearg\unnumberedzzz}
-\def\infounnumbered{\parsearg\unnumberedzzz}
-\def\infounnumberedsec{\parsearg\unnumberedseczzz}
-\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz}
-\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz}
-
-\def\infoappendix{\parsearg\appendixzzz}
-\def\infoappendixsec{\parsearg\appendixseczzz}
-\def\infoappendixsubsec{\parsearg\appendixsubseczzz}
-\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz}
-
-\def\infochapter{\parsearg\chapterzzz}
-\def\infosection{\parsearg\sectionzzz}
-\def\infosubsection{\parsearg\subsectionzzz}
-\def\infosubsubsection{\parsearg\subsubsectionzzz}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\global\let\section = \numberedsec
-\global\let\subsection = \numberedsubsec
-\global\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-% NOTE on use of \vbox for chapter headings, section headings, and such:
-%       1) We use \vbox rather than the earlier \line to permit
-%          overlong headings to fold.
-%       2) \hyphenpenalty is set to 10000 because hyphenation in a
-%          heading is obnoxious; this forbids it.
-%       3) Likewise, headings look best if no \parindent is used, and
-%          if justification is not attempted.  Hence \raggedright.
-
-
-\def\majorheading{\parsearg\majorheadingzzz}
-\def\majorheadingzzz #1{%
-  {\advance\chapheadingskip by 10pt \chapbreak }%
-  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                    \parindent=0pt\raggedright
-                    \rm #1\hfill}}\bigskip \par\penalty 200}
-
-\def\chapheading{\parsearg\chapheadingzzz}
-\def\chapheadingzzz #1{\chapbreak %
-  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                    \parindent=0pt\raggedright
-                    \rm #1\hfill}}\bigskip \par\penalty 200}
-
-% @heading, @subheading, @subsubheading.
-\def\heading{\parsearg\plainsecheading}
-\def\subheading{\parsearg\plainsubsecheading}
-\def\subsubheading{\parsearg\plainsubsubsecheading}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-%%% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-
-%%% Define plain chapter starts, and page on/off switching for it
-% Parameter controlling skip before chapter headings (if needed)
-
-\newskip\chapheadingskip
-
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-\def\CHAPFplain{
-\global\let\chapmacro=\chfplain
-\global\let\unnumbchapmacro=\unnchfplain
-\global\let\centerchapmacro=\centerchfplain}
-
-% Plain chapter opening.
-% #1 is the text, #2 the chapter number or empty if unnumbered.
-\def\chfplain#1#2{%
-  \pchapsepmacro
-  {%
-    \chapfonts \rm
-    \def\chapnum{#2}%
-    \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}%
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 \centerparametersmaybe
-          \unhbox0 #1\par}%
-  }%
-  \nobreak\bigskip % no page break after a chapter title
-  \nobreak
-}
-
-% Plain opening for unnumbered.
-\def\unnchfplain#1{\chfplain{#1}{}}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerchfplain#1{{%
-  \def\centerparametersmaybe{%
-    \advance\rightskip by 3\rightskip
-    \leftskip = \rightskip
-    \parfillskip = 0pt
-  }%
-  \chfplain{#1}{}%
-}}
-
-\CHAPFplain % The default
-
-\def\unnchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt\raggedright
-                       \rm #1\hfill}}\bigskip \par\nobreak
-}
-
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-
-\def\centerchfopen #1{%
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
-                       \parindent=0pt
-                       \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
-}
-
-\def\CHAPFopen{
-\global\let\chapmacro=\chfopen
-\global\let\unnumbchapmacro=\unnchfopen
-\global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip {-1000}}
-\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}}
-\def\plainsecheading#1{\sectionheading{sec}{}{#1}}
-
-% Subsection titles.
-\newskip \subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}}
-\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}}
-\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}}
-
-% Subsubsection titles.
-\let\subsubsecheadingskip = \subsecheadingskip
-\let\subsubsecheadingbreak = \subsecheadingbreak
-\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}}
-\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}}
-
-
-% Print any size section title.
-%
-% #1 is the section type (sec/subsec/subsubsec), #2 is the section
-% number (maybe empty), #3 the text.
-\def\sectionheading#1#2#3{%
-  {%
-    \expandafter\advance\csname #1headingskip\endcsname by \parskip
-    \csname #1headingbreak\endcsname
-  }%
-  {%
-    % Switch to the right set of fonts.
-    \csname #1fonts\endcsname \rm
-    %
-    % Only insert the separating space if we have a section number.
-    \def\secnum{#2}%
-    \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}%
-    %
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
-          \hangindent = \wd0 % zero if no section number
-          \unhbox0 #3}%
-  }%
-  % Add extra space after the heading -- either a line space or a
-  % paragraph space, whichever is more.  (Some people like to set
-  % \parskip to large values for some reason.)  Don't allow stretch, though.
-  \nobreak
-  \ifdim\parskip>\normalbaselineskip
-    \kern\parskip
-  \else
-    \kern\normalbaselineskip
-  \fi
-  \nobreak
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.  We supply {\folio} at the end of the
-% argument, which will end up as the last argument to the \...entry macro.
-%
-% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}}
-% We open the .toc file for writing here instead of at @setfilename (or
-% any other fixed time) so that @contents can be anywhere in the document.
-%
-\newif\iftocfileopened
-\def\writetocentry#1#2#3{%
-  \iftocfileopened\else
-    \immediate\openout\tocfile = \jobname.toc
-    \global\tocfileopenedtrue
-  \fi
-  %
-  \iflinks
-    \toks0 = {#2}%
-    \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}%
-    \temp
-  \fi
-  %
-  % Tell \shipout to create a page destination if we're doing pdf, which
-  % will be the target of the links in the table of contents.  We can't
-  % just do it on every page because the title pages are numbered 1 and
-  % 2 (the page numbers aren't printed), and so are the first two pages
-  % of the document.  Thus, we'd have two destinations named `1', and
-  % two named `2'.
-  \ifpdf \pdfmakepagedesttrue \fi
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Finish up the main text and prepare to read what we've written
-% to \tocfile.
-%
-\def\startcontents#1{%
-   % If @setchapternewpage on, and @headings double, the contents should
-   % start on an odd page, unlike chapters.  Thus, we maintain
-   % \contentsalignmacro in parallel with \pagealignmacro.
-   % From: Torbjorn Granlund <tege@matematik.su.se>
-   \contentsalignmacro
-   \immediate\closeout\tocfile
-   %
-   % Don't need to put `Contents' or `Short Contents' in the headline.
-   % It is abundantly clear what they are.
-   \unnumbchapmacro{#1}\def\thischapter{}%
-   \savepageno = \pageno
-   \begingroup                  % Set up to handle contents files properly.
-      \catcode`\\=0  \catcode`\{=1  \catcode`\}=2  \catcode`\@=11
-      % We can't do this, because then an actual ^ in a section
-      % title fails, e.g., @chapter ^ -- exponentiation.  --karl, 9jul97.
-      %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
-      \raggedbottom             % Worry more about breakpoints than the bottom.
-      \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-      %
-      % Roman numerals for page numbers.
-      \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
-}
-
-
-% Normal (long) toc.
-\def\contents{%
-   \startcontents{\putwordTOC}%
-     \openin 1 \jobname.toc
-     \ifeof 1 \else
-       \closein 1
-       \input \jobname.toc
-     \fi
-     \vfill \eject
-     \contentsalignmacro % in case @setchapternewpage odd is in effect
-     \pdfmakeoutlines
-   \endgroup
-   \lastnegativepageno = \pageno
-   \global\pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
-   \startcontents{\putwordShortTOC}%
-      %
-      \let\chapentry = \shortchapentry
-      \let\appendixentry = \shortappendixentry
-      \let\unnumbchapentry = \shortunnumberedentry
-      % We want a true roman here for the page numbers.
-      \secfonts
-      \let\rm=\shortcontrm \let\bf=\shortcontbf
-      \let\sl=\shortcontsl \let\tt=\shortconttt
-      \rm
-      \hyphenpenalty = 10000
-      \advance\baselineskip by 1pt % Open it up a little.
-      \def\secentry ##1##2##3##4{}
-      \def\subsecentry ##1##2##3##4##5{}
-      \def\subsubsecentry ##1##2##3##4##5##6{}
-      \let\unnumbsecentry = \secentry
-      \let\unnumbsubsecentry = \subsecentry
-      \let\unnumbsubsubsecentry = \subsubsecentry
-      \openin 1 \jobname.toc
-      \ifeof 1 \else
-        \closein 1
-        \input \jobname.toc
-      \fi
-     \vfill \eject
-     \contentsalignmacro % in case @setchapternewpage odd is in effect
-   \endgroup
-   \lastnegativepageno = \pageno
-   \global\pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-\ifpdf
-  \pdfcatalog{/PageMode /UseOutlines}%
-\fi
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Chapters, in the main contents.
-\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-%
-% Chapters, in the short toc.
-% See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
-}
-
-% Appendices, in the main contents.
-\def\appendixentry#1#2#3{%
-  \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
-%
-% Appendices, in the short toc.
-\let\shortappendixentry = \shortchapentry
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter.
-% We could simplify the code here by writing out an \appendixentry
-% command in the toc file for appendices, instead of using \chapentry
-% for both, but it doesn't seem worth it.
-%
-\newdimen\shortappendixwidth
-%
-\def\shortchaplabel#1{%
-  % This space should be enough, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % But use \hss just in case.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  \dimen0 = 1em
-  \hbox to \dimen0{#1\hss}%
-}
-
-% Unnumbered chapters.
-\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}}
-\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}}
-
-% Sections.
-\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}}
-\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
-% Subsections.
-\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}}
-
-% And subsubsections.
-\def\subsubsecentry#1#2#3#4#5#6{%
-  \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}}
-\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}}
-
-% This parameter controls the indentation of the various levels.
-\newdimen\tocindent \tocindent = 3pc
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
-   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
-   \begingroup
-     \chapentryfonts
-     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-   \endgroup
-   \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
-  \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
-  \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
-  \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-% Final typesetting of a toc entry; we use the same \entry macro as for
-% the index entries, but we want to suppress hyphenation here.  (We
-% can't do that in the \entry macro, since index entries might consist
-% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.)
-\def\tocentry#1#2{\begingroup
-  \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks
-  % Do not use \turnoffactive in these arguments.  Since the toc is
-  % typeset in cmr, characters such as _ would come out wrong; we
-  % have to do the usual translation tricks.
-  \entry{#1}{#2}%
-\endgroup}
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\let\subsecentryfonts = \textfonts
-\let\subsubsecentryfonts = \textfonts
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, it should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-%
-\global\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @tex ... @end tex    escapes into raw Tex temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain tex @ character.
-
-\def\tex{\begingroup
-  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
-  \catcode `\%=14
-  \catcode `\+=\other
-  \catcode `\"=\other
-  \catcode `\==\other
-  \catcode `\|=\other
-  \catcode `\<=\other
-  \catcode `\>=\other
-  \escapechar=`\\
-  %
-  \let\b=\ptexb
-  \let\bullet=\ptexbullet
-  \let\c=\ptexc
-  \let\,=\ptexcomma
-  \let\.=\ptexdot
-  \let\dots=\ptexdots
-  \let\equiv=\ptexequiv
-  \let\!=\ptexexclam
-  \let\i=\ptexi
-  \let\indent=\ptexindent
-  \let\{=\ptexlbrace
-  \let\+=\tabalign
-  \let\}=\ptexrbrace
-  \let\/=\ptexslash
-  \let\*=\ptexstar
-  \let\t=\ptext
-  %
-  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-  \def\@{@}%
-\let\Etex=\endgroup}
-
-% Define @lisp ... @end lisp.
-% @lisp does a \begingroup so it can rebind things,
-% including the definition of @end lisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments.  \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% Make each space character in the input produce a normal interword
-% space in the output.  Don't allow a line break at this space, as this
-% is used only in environments like @example, where each line of input
-% should produce a line of output anyway.
-%
-{\obeyspaces %
-\gdef\sepspaces{\obeyspaces\let =\tie}}
-
-% Define \obeyedspace to be our active space, whatever it is.  This is
-% for use in \parsearg.
-{\sepspaces%
-\global\let\obeyedspace= }
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical.  We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip.
-%
-\def\aboveenvbreak{{%
-  % =10000 instead of <10000 because of a special case in \itemzzz, q.v.
-  \ifnum \lastpenalty=10000 \else
-    \advance\envskipamount by \parskip
-    \endgraf
-    \ifdim\lastskip<\envskipamount
-      \removelastskip
-      % it's not a good place to break if the last penalty was \nobreak
-      % or better ...
-      \ifnum\lastpenalty>10000 \else \penalty-50 \fi
-      \vskip\envskipamount
-    \fi
-  \fi
-}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
-        \ctl\leaders\hrule height\circthick\hfil\ctr
-        \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
-        \cbl\leaders\hrule height\circthick\hfil\cbr
-        \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\def\cartouche{%
-\par  % can't be in the midst of a paragraph.
-\begingroup
-        \lskip=\leftskip \rskip=\rightskip
-        \leftskip=0pt\rightskip=0pt %we want these *outside*.
-        \cartinner=\hsize \advance\cartinner by-\lskip
-                          \advance\cartinner by-\rskip
-        \cartouter=\hsize
-        \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-%                                    side, and for 6pt waste from
-%                                    each corner char, and rule thickness
-        \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-        % Flag to tell @lisp, etc., not to narrow margin.
-        \let\nonarrowing=\comment
-        \vbox\bgroup
-                \baselineskip=0pt\parskip=0pt\lineskip=0pt
-                \carttop
-                \hbox\bgroup
-                        \hskip\lskip
-                        \vrule\kern3pt
-                        \vbox\bgroup
-                                \hsize=\cartinner
-                                \kern3pt
-                                \begingroup
-                                        \baselineskip=\normbskip
-                                        \lineskip=\normlskip
-                                        \parskip=\normpskip
-                                        \vskip -\parskip
-\def\Ecartouche{%
-                                \endgroup
-                                \kern3pt
-                        \egroup
-                        \kern3pt\vrule
-                        \hskip\rskip
-                \egroup
-                \cartbot
-        \egroup
-\endgroup
-}}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\def\nonfillstart{%
-  \aboveenvbreak
-  \inENV % This group ends at the end of the body
-  \hfuzz = 12pt % Don't be fussy
-  \sepspaces % Make spaces be word-separators rather than space tokens.
-  \let\par = \lisppar % don't ignore blank lines
-  \obeylines % each line of input is a line of output
-  \parskip = 0pt
-  \parindent = 0pt
-  \emergencystretch = 0pt % don't try to avoid overfull boxes
-  % @cartouche defines \nonarrowing to inhibit narrowing
-  % at next level down.
-  \ifx\nonarrowing\relax
-    \advance \leftskip by \lispnarrowing
-    \exdentamount=\lispnarrowing
-    \let\exdent=\nofillexdent
-    \let\nonarrowing=\relax
-  \fi
-}
-
-% Define the \E... control sequence only if we are inside the particular
-% environment, so the error checking in \end will work.
-%
-% To end an @example-like environment, we first end the paragraph (via
-% \afterenvbreak's vertical glue), and then the group.  That way we keep
-% the zero \parskip that the environments set -- \parskip glue will be
-% inserted at the beginning of the next paragraph in the document, after
-% the environment.
-%
-\def\nonfillfinish{\afterenvbreak\endgroup}
-
-% @lisp: indented, narrowed, typewriter font.
-\def\lisp{\begingroup
-  \nonfillstart
-  \let\Elisp = \nonfillfinish
-  \tt
-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble       % eat return
-}
-
-% @example: Same as @lisp.
-\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp}
-
-% @smallexample and @smalllisp: use smaller fonts.
-% Originally contributed by Pavel@xerox.
-\def\smalllisp{\begingroup
-  \def\Esmalllisp{\nonfillfinish\endgroup}%
-  \def\Esmallexample{\nonfillfinish\endgroup}%
-  \smallexamplefonts
-  \lisp
-}
-\let\smallexample = \smalllisp
-
-
-% @display: same as @lisp except keep current font.
-%
-\def\display{\begingroup
-  \nonfillstart
-  \let\Edisplay = \nonfillfinish
-  \gobble
-}
-%
-% @smalldisplay: @display plus smaller fonts.
-%
-\def\smalldisplay{\begingroup
-  \def\Esmalldisplay{\nonfillfinish\endgroup}%
-  \smallexamplefonts \rm
-  \display
-}
-
-% @format: same as @display except don't narrow margins.
-%
-\def\format{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eformat = \nonfillfinish
-  \gobble
-}
-%
-% @smallformat: @format plus smaller fonts.
-%
-\def\smallformat{\begingroup
-  \def\Esmallformat{\nonfillfinish\endgroup}%
-  \smallexamplefonts \rm
-  \format
-}
-
-% @flushleft (same as @format).
-%
-\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format}
-
-% @flushright.
-%
-\def\flushright{\begingroup
-  \let\nonarrowing = t
-  \nonfillstart
-  \let\Eflushright = \nonfillfinish
-  \advance\leftskip by 0pt plus 1fill
-  \gobble
-}
-
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.
-%
-\def\quotation{%
-  \begingroup\inENV %This group ends at the end of the @quotation body
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \parindent=0pt
-  % We have retained a nonzero parskip for the environment, since we're
-  % doing normal filling. So to avoid extra space below the environment...
-  \def\Equotation{\parskip = 0pt \nonfillfinish}%
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-  \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
-    \advance\rightskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-    \let\nonarrowing = \relax
-  \fi
-}
-
-
-% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter,
-% we need the curly braces so that makeinfo sees the @verb command, eg:
-% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
-%
-% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
-%
-% [Knuth] p.344; only we need to do the other characters Texinfo sets
-% active too.  Otherwise, they get lost as the first character on a
-% verbatim line.
-\def\dospecials{%
-  \do\ \do\\\do\{\do\}\do\$\do\&%
-  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
-  \do\<\do\>\do\|\do\@\do+\do\"%
-}
-%
-% [Knuth] p. 380
-\def\uncatcodespecials{%
-  \def\do##1{\catcode`##1=12}\dospecials}
-%
-% [Knuth] pp. 380,381,391
-% Disable Spanish ligatures ?` and !` of \tt font
-\begingroup
-  \catcode`\`=\active\gdef`{\relax\lq}
-\endgroup
-%
-% Setup for the @verb command.
-%
-% Eight spaces for a tab
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-\endgroup
-%
-\def\setupverb{%
-  \tt  % easiest (and conventionally used) font for verbatim
-  \def\par{\leavevmode\endgraf}%
-  \catcode`\`=\active
-  \tabeightspaces
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count
-  % must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-}
-
-% Setup for the @verbatim environment
-%
-% Real tab expansion
-\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-%
-\def\starttabbox{\setbox0=\hbox\bgroup}
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabexpand{%
-    \catcode`\^^I=\active
-    \def^^I{\leavevmode\egroup
-      \dimen0=\wd0 % the width so far, or since the previous tab
-      \divide\dimen0 by\tabw
-      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
-      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
-      \wd0=\dimen0 \box0 \starttabbox
-    }%
-  }
-\endgroup
-\def\setupverbatim{%
-  % Easiest (and conventionally used) font for verbatim
-  \tt
-  \def\par{\leavevmode\egroup\box0\endgraf}%
-  \catcode`\`=\active
-  \tabexpand
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count
-  % must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-  \everypar{\starttabbox}%
-}
-
-% Do the @verb magic: verbatim text is quoted by unique
-% delimiter characters.  Before first delimiter expect a
-% right brace, after last delimiter expect closing brace:
-%
-%    \def\doverb'{'<char>#1<char>'}'{#1}
-%
-% [Knuth] p. 382; only eat outer {}
-\begingroup
-  \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
-  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-\endgroup
-%
-\def\verb{\begingroup\setupverb\doverb}
-%
-%
-% Do the @verbatim magic: define the macro \doverbatim so that
-% the (first) argument ends when '@end verbatim' is reached, ie:
-%
-%     \def\doverbatim#1@end verbatim{#1}
-%
-% For Texinfo it's a lot easier than for LaTeX,
-% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-% we need not redefine '\', '{' and '}'.
-%
-% Inspired by LaTeX's verbatim command set [latex.ltx]
-%% Include LaTeX hack for completeness -- never know
-%% \begingroup
-%% \catcode`|=0 \catcode`[=1
-%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
-%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
-%% #1|endgroup|def|Everbatim[]|end[verbatim]]
-%% |endgroup
-%
-\begingroup
-  \catcode`\ =\active
-  \obeylines %
-  % ignore everything up to the first ^^M, that's the newline at the end
-  % of the @verbatim input line itself.  Otherwise we get an extra blank
-  % line in the output.
-  \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}%
-\endgroup
-%
-\def\verbatim{%
-  \def\Everbatim{\nonfillfinish\endgroup}%
-  \begingroup
-    \nonfillstart
-    \advance\leftskip by -\defbodyindent
-    \begingroup\setupverbatim\doverbatim
-}
-
-% @verbatiminclude FILE - insert text of file in verbatim environment.
-%
-% Allow normal characters that we make active in the argument (a file name).
-\def\verbatiminclude{%
-  \begingroup
-    \catcode`\\=\other
-    \catcode`~=\other
-    \catcode`^=\other
-    \catcode`_=\other
-    \catcode`|=\other
-    \catcode`<=\other
-    \catcode`>=\other
-    \catcode`+=\other
-    \parsearg\doverbatiminclude
-}
-\def\setupverbatiminclude{%
-  \begingroup
-    \nonfillstart
-    \advance\leftskip by -\defbodyindent
-    \begingroup\setupverbatim
-}
-%
-\def\doverbatiminclude#1{%
-     % Restore active chars for included file.
-  \endgroup
-  \begingroup
-    \let\value=\expandablevalue
-    \def\thisfile{#1}%
-    \expandafter\expandafter\setupverbatiminclude\input\thisfile
-  \endgroup
-  \nonfillfinish
-  \endgroup
-}
-
-% @copying ... @end copying.
-% Save the text away for @insertcopying later.  Many commands won't be
-% allowed in this context, but that's ok.
-%
-% We save the uninterpreted tokens, rather than creating a box.
-% Saving the text in a box would be much easier, but then all the
-% typesetting commands (@smallbook, font changes, etc.) have to be done
-% beforehand -- and a) we want @copying to be done first in the source
-% file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
-%
-\def\copying{\begingroup
-  % Define a command to swallow text until we reach `@end copying'.
-  % \ is the escape char in this texinfo.tex file, so it is the
-  % delimiter for the command; @ will be the escape char when we read
-  % it, but that doesn't matter.
-  \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}%
-  %
-  % We must preserve ^^M's in the input file; see \insertcopying below.
-  \catcode`\^^M = \active
-  \docopying
-}
-
-% What we do to finish off the copying text.
-%
-\def\enddocopying{\endgroup\ignorespaces}
-
-% @insertcopying.  Here we must play games with ^^M's.  On the one hand,
-% we need them to delimit commands such as `@end quotation', so they
-% must be active.  On the other hand, we certainly don't want every
-% end-of-line to be a \par, as would happen with the normal active
-% definition of ^^M.  On the third hand, two ^^M's in a row should still
-% generate a \par.
-%
-% Our approach is to make ^^M insert a space and a penalty1 normally;
-% then it can also check if \lastpenalty=1.  If it does, then manually
-% do \par.
-%
-% This messes up the normal definitions of @c[omment], so we redefine
-% it.  Similarly for @ignore.  (These commands are used in the gcc
-% manual for man page generation.)
-%
-% Seems pretty fragile, most line-oriented commands will presumably
-% fail, but for the limited use of getting the copying text (which
-% should be quite simple) inserted, we can hope it's ok.
-%
-{\catcode`\^^M=\active %
-\gdef\insertcopying{\begingroup %
-  \parindent = 0pt  % looks wrong on title page
-  \def^^M{%
-    \ifnum \lastpenalty=1 %
-      \par %
-    \else %
-      \space \penalty 1 %
-    \fi %
-  }%
-  %
-  % Fix @c[omment] for catcode 13 ^^M's.
-  \def\c##1^^M{\ignorespaces}%
-  \let\comment = \c %
-  %
-  % Don't bother jumping through all the hoops that \doignore does, it
-  % would be very hard since the catcodes are already set.
-  \long\def\ignore##1\end ignore{\ignorespaces}%
-  %
-  \copyingtext %
-\endgroup}%
-}
-
-\message{defuns,}
-% @defun etc.
-
-% Allow user to change definition object font (\df) internally
-\def\setdeffont#1 {\csname DEF#1\endcsname}
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-
-\newcount\parencount
-
-% We want ()&[] to print specially on the defun line.
-%
-\def\activeparens{%
-  \catcode`\(=\active \catcode`\)=\active
-  \catcode`\&=\active
-  \catcode`\[=\active \catcode`\]=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-{\activeparens % Now, smart parens don't turn on until &foo (see \amprm)
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-\global\let(=\lparen \global\let)=\rparen
-\global\let[=\lbrack \global\let]=\rbrack
-
-\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 }
-\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-% This is used to turn on special parens
-% but make & act ordinary (given that it's active).
-\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr}
-
-% Definitions of (, ) and & used in args for functions.
-% This is the definition of ( outside of all parentheses.
-\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested
-  \global\advance\parencount by 1
-}
-%
-% This is the definition of ( when already inside a level of parens.
-\gdef\opnested{\char`\(\global\advance\parencount by 1 }
-%
-\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0.
-  % also in that case restore the outer-level definition of (.
-  \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi
-  \global\advance \parencount by -1 }
-% If we encounter &foo, then turn on ()-hacking afterwards
-\gdef\amprm#1 {{\rm\&#1}\let(=\oprm \let)=\clrm\ }
-%
-\gdef\normalparens{\boldbrax\let&=\ampnr}
-} % End of definition inside \activeparens
-%% These parens (in \boldbrax) actually are a little bolder than the
-%% contained text.  This is especially needed for [ and ]
-\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 }
-\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 }
-\let\ampnr = \&
-\def\lbrb{{\bf\char`\[}}
-\def\rbrb{{\bf\char`\]}}
-
-% Active &'s sneak into the index arguments, so make sure it's defined.
-{
-  \catcode`& = \active
-  \global\let& = \ampnr
-}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the function name.
-% #2 is the type of definition, such as "Function".
-%
-\def\defname#1#2{%
-  % How we'll output the type name.  Putting it in brackets helps
-  % distinguish it from the body text that may end up on the next line
-  % just below it.
-  \ifempty{#2}%
-    \def\defnametype{}%
-  \else
-    \def\defnametype{[\rm #2]}%
-  \fi
-  %
-  % Get the values of \leftskip and \rightskip as they were outside the @def...
-  \dimen2=\leftskip
-  \advance\dimen2 by -\defbodyindent
-  %
-  % Figure out values for the paragraph shape.
-  \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}%
-  \dimen0=\hsize \advance \dimen0 by -\wd0  % compute size for first line
-  \dimen1=\hsize \advance \dimen1 by -\defargsindent  % size for continuations
-  \parshape 2 0in \dimen0 \defargsindent \dimen1
-  %
-  % Output arg 2 ("Function" or some such) but stuck inside a box of
-  % width 0 so it does not interfere with linebreaking.
-  \noindent
-  %
-  {% Adjust \hsize to exclude the ambient margins,
-   % so that \rightline will obey them.
-   \advance \hsize by -\dimen2
-   \dimen3 = 0pt  % was -1.25pc
-   \rlap{\rightline{\defnametype\kern\dimen3}}%
-  }%
-  %
-  % Allow all lines to be underfull without complaint:
-  \tolerance=10000 \hbadness=10000
-  \advance\leftskip by -\defbodyindent
-  \exdentamount=\defbodyindent
-  {\df #1}\enskip        % output function name
-  % \defunargs will be called next to output the arguments, if any.
-}
-
-% Common pieces to start any @def...
-% #1 is the \E... control sequence to end the definition (which we define).
-% #2 is the \...x control sequence (which our caller defines).
-% #3 is the control sequence to process the header, such as \defunheader.
-%
-\def\parsebodycommon#1#2#3{%
-  \begingroup\inENV
-  % If there are two @def commands in a row, we'll have a \nobreak,
-  % which is there to keep the function description together with its
-  % header.  But if there's nothing but headers, we want to allow a
-  % break after all.  Check for penalty 10002 (inserted by
-  % \defargscommonending) instead of 10000, since the sectioning
-  % commands insert a \penalty10000, and we don't want to allow a break
-  % between a section heading and a defun.
-  \ifnum\lastpenalty=10002 \penalty0 \fi
-  \medbreak
-  %
-  % Define the \E... end token that this defining construct specifies
-  % so that it will exit this group.
-  \def#1{\endgraf\endgroup\medbreak}%
-  %
-  \parindent=0in
-  \advance\leftskip by \defbodyindent
-  \exdentamount=\defbodyindent
-}
-
-% Common part of the \...x definitions.
-%
-\def\defxbodycommon{%
-  % As with \parsebodycommon above, allow line break if we have multiple
-  % x headers in a row.  It's not a great place, though.
-  \ifnum\lastpenalty=10000 \penalty1000 \fi
-  %
-  \begingroup\obeylines
-}
-
-% Process body of @defun, @deffn, @defmac, etc.
-%
-\def\defparsebody#1#2#3{%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2{\defxbodycommon \activeparens \spacesplit#3}%
-  \catcode\equalChar=\active
-  \begingroup\obeylines\activeparens
-  \spacesplit#3%
-}
-
-% #1, #2, #3 are the common arguments (see \parsebodycommon above).
-% #4, delimited by the space, is the class name.
-%
-\def\defmethparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}%
-  \begingroup\obeylines\activeparens
-  % The \empty here prevents misinterpretation of a construct such as
-  %   @deffn {whatever} {Enharmonic comma}
-  % See comments at \deftpparsebody, although in our case we don't have
-  % to remove the \empty afterwards, since it is empty.
-  \spacesplit{#3{#4}}\empty
-}
-
-% Used for @deftypemethod and @deftypeivar.
-% #1, #2, #3 are the common arguments (see \defparsebody).
-% #4, delimited by a space, is the class name.
-% #5 is the method's return type.
-%
-\def\deftypemethparsebody#1#2#3#4 #5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#4}{#5}}%
-}
-
-% Used for @deftypeop.  The change from \deftypemethparsebody is an
-% extra argument at the beginning which is the `category', instead of it
-% being the hardwired string `Method' or `Instance Variable'.  We have
-% to account for this both in the \...x definition and in parsing the
-% input at hand.  Thus also need a control sequence (passed as #5) for
-% the \E... definition to assign the category name to.
-%
-\def\deftypeopparsebody#1#2#3#4#5 #6 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 ##3 {\def#4{##1}%
-    \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#5}{#6}}%
-}
-
-% For @defop.
-\def\defopparsebody #1#2#3#4#5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\def#4{##1}%
-    \defxbodycommon \activeparens \spacesplit{#3{##2}}}%
-  \begingroup\obeylines\activeparens
-  \spacesplit{#3{#5}}%
-}
-
-% These parsing functions are similar to the preceding ones
-% except that they do not make parens into active characters.
-% These are used for "variables" since they have no arguments.
-%
-\def\defvarparsebody #1#2#3{%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2{\defxbodycommon \spacesplit#3}%
-  \catcode\equalChar=\active
-  \begingroup\obeylines
-  \spacesplit#3%
-}
-
-% @defopvar.
-\def\defopvarparsebody #1#2#3#4#5 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 ##2 {\def#4{##1}%
-    \defxbodycommon \spacesplit{#3{##2}}}%
-  \begingroup\obeylines
-  \spacesplit{#3{#5}}%
-}
-
-\def\defvrparsebody#1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
-  \begingroup\obeylines
-  \spacesplit{#3{#4}}%
-}
-
-% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the
-% type is just `struct', because we lose the braces in `{struct
-% termios}' when \spacesplit reads its undelimited argument.  Sigh.
-% \let\deftpparsebody=\defvrparsebody
-%
-% So, to get around this, we put \empty in with the type name.  That
-% way, TeX won't find exactly `{...}' as an undelimited argument, and
-% won't strip off the braces.
-%
-\def\deftpparsebody #1#2#3#4 {%
-  \parsebodycommon{#1}{#2}{#3}%
-  \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}%
-  \begingroup\obeylines
-  \spacesplit{\parsetpheaderline{#3{#4}}}\empty
-}
-
-% Fine, but then we have to eventually remove the \empty *and* the
-% braces (if any).  That's what this does.
-%
-\def\removeemptybraces\empty#1\relax{#1}
-
-% After \spacesplit has done its work, this is called -- #1 is the final
-% thing to call, #2 the type name (which starts with \empty), and #3
-% (which might be empty) the arguments.
-%
-\def\parsetpheaderline#1#2#3{%
-  #1{\removeemptybraces#2\relax}{#3}%
-}%
-
-% Split up #2 (the rest of the input line) at the first space token.
-% call #1 with two arguments:
-%  the first is all of #2 before the space token,
-%  the second is all of #2 after that space token.
-% If #2 contains no space token, all of it is passed as the first arg
-% and the second is passed as empty.
-%
-{\obeylines %
- \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}%
- \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{%
-   \ifx\relax #3%
-     #1{#2}{}%
-   \else %
-     #1{#2}{#3#4}%
-   \fi}%
-}
-
-% Define @defun.
-
-% This is called to end the arguments processing for all the @def... commands.
-%
-\def\defargscommonending{%
-  \interlinepenalty = 10000
-  \advance\rightskip by 0pt plus 1fil
-  \endgraf
-  \nobreak\vskip -\parskip
-  \penalty 10002  % signal to \parsebodycommon.
-}
-
-% This expands the args and terminates the paragraph they comprise.
-%
-\def\defunargs#1{\functionparens \sl
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Set the font temporarily and use \font in case \setfont made \tensl a macro.
-{\tensl\hyphenchar\font=0}%
-#1%
-{\tensl\hyphenchar\font=45}%
-\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi%
-  \defargscommonending
-}
-
-\def\deftypefunargs #1{%
-% Expand, preventing hyphenation at `-' chars.
-% Note that groups don't affect changes in \hyphenchar.
-% Use \boldbraxnoamp, not \functionparens, so that & is not special.
-\boldbraxnoamp
-\tclose{#1}% avoid \code because of side effects on active chars
-  \defargscommonending
-}
-
-% Do complete processing of one @defun or @defunx line already parsed.
-
-% @deffn Command forward-char nchars
-
-\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader}
-
-\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defun == @deffn Function
-
-\def\defun{\defparsebody\Edefun\defunx\defunheader}
-
-\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDeffunc}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefun int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader}
-
-% #1 is the data type.  #2 is the name and args.
-\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax}
-% #1 is the data type, #2 the name, #3 the args.
-\def\deftypefunheaderx #1#2 #3\relax{%
-\doind {fn}{\code{#2}}% Make entry in function index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
-\deftypefunargs {#3}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar})
-
-\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-
-% \defheaderxcond#1\relax$.$
-% puts #1 in @code, followed by a space, but does nothing if #1 is null.
-\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi}
-
-% #1 is the classification.  #2 is the data type.  #3 is the name and args.
-\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax}
-% #1 is the classification, #2 the data type, #3 the name, #4 the args.
-\def\deftypefnheaderx #1#2#3 #4\relax{%
-\doind {fn}{\code{#3}}% Make entry in function index
-\begingroup
-\normalparens % notably, turn off `&' magic, which prevents
-%               at least some C++ text from working
-\defname {\defheaderxcond#2\relax$.$#3}{#1}%
-\deftypefunargs {#4}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defmac == @deffn Macro
-
-\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader}
-
-\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefmac}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defspec == @deffn Special Form
-
-\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader}
-
-\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index
-\begingroup\defname {#1}{\putwordDefspec}%
-\defunargs {#2}\endgroup %
-\catcode\equalChar=\other % Turn off change made in \defparsebody
-}
-
-% @defop CATEGORY CLASS OPERATION ARG...
-%
-\def\defop #1 {\def\defoptype{#1}%
-\defopparsebody\Edefop\defopx\defopheader\defoptype}
-%
-\def\defopheader#1#2#3{%
-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry
-  \begingroup
-    \defname{#2}{\defoptype\ \putwordon\ #1}%
-    \defunargs{#3}%
-  \endgroup
-}
-
-% @deftypeop CATEGORY CLASS TYPE OPERATION ARG...
-%
-\def\deftypeop #1 {\def\deftypeopcategory{#1}%
-  \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader
-                       \deftypeopcategory}
-%
-% #1 is the class name, #2 the data type, #3 the operation name, #4 the args.
-\def\deftypeopheader#1#2#3#4{%
-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}
-            {\deftypeopcategory\ \putwordon\ \code{#1}}%
-    \deftypefunargs{#4}%
-  \endgroup
-}
-
-% @deftypemethod CLASS TYPE METHOD ARG...
-%
-\def\deftypemethod{%
-  \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader}
-%
-% #1 is the class name, #2 the data type, #3 the method name, #4 the args.
-\def\deftypemethodheader#1#2#3#4{%
-  \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
-    \deftypefunargs{#4}%
-  \endgroup
-}
-
-% @deftypeivar CLASS TYPE VARNAME
-%
-\def\deftypeivar{%
-  \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader}
-%
-% #1 is the class name, #2 the data type, #3 the variable name.
-\def\deftypeivarheader#1#2#3{%
-  \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
-  \begingroup
-    \defname{\defheaderxcond#2\relax$.$#3}
-            {\putwordInstanceVariableof\ \code{#1}}%
-    \defvarargs{#3}%
-  \endgroup
-}
-
-% @defmethod == @defop Method
-%
-\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader}
-%
-% #1 is the class name, #2 the method name, #3 the args.
-\def\defmethodheader#1#2#3{%
-  \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index
-  \begingroup
-    \defname{#2}{\putwordMethodon\ \code{#1}}%
-    \defunargs{#3}%
-  \endgroup
-}
-
-% @defcv {Class Option} foo-class foo-flag
-
-\def\defcv #1 {\def\defcvtype{#1}%
-\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype}
-
-\def\defcvarheader #1#2#3{%
-  \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry
-  \begingroup
-    \defname{#2}{\defcvtype\ \putwordof\ #1}%
-    \defvarargs{#3}%
-  \endgroup
-}
-
-% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME
-%
-\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader}
-%
-\def\defivarheader#1#2#3{%
-  \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index
-  \begingroup
-    \defname{#2}{\putwordInstanceVariableof\ #1}%
-    \defvarargs{#3}%
-  \endgroup
-}
-
-% @defvar
-% First, define the processing that is wanted for arguments of @defvar.
-% This is actually simple: just print them in roman.
-% This must expand the args and terminate the paragraph they make up
-\def\defvarargs #1{\normalparens #1%
-  \defargscommonending
-}
-
-% @defvr Counter foo-count
-
-\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader}
-
-\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}%
-\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup}
-
-% @defvar == @defvr Variable
-
-\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader}
-
-\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefvar}%
-\defvarargs {#2}\endgroup %
-}
-
-% @defopt == @defvr {User Option}
-
-\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader}
-
-\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index
-\begingroup\defname {#1}{\putwordDefopt}%
-\defvarargs {#2}\endgroup %
-}
-
-% @deftypevar int foobar
-
-\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader}
-
-% #1 is the data type.  #2 is the name, perhaps followed by text that
-% is actually part of the data type, which should not be put into the index.
-\def\deftypevarheader #1#2{%
-\dovarind#2 \relax% Make entry in variables index
-\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
-  \defargscommonending
-\endgroup}
-\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}}
-
-% @deftypevr {Global Flag} int enable
-
-\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
-
-\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
-  \defargscommonending
-\endgroup}
-
-% Now define @deftp
-% Args are printed in bold, a slight difference from @defvar.
-
-\def\deftpargs #1{\bf \defvarargs{#1}}
-
-% @deftp Class window height width ...
-
-\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader}
-
-\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}%
-\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup}
-
-% These definitions are used if you use @defunx (etc.)
-% anywhere other than immediately after a @defun or @defunx.
-%
-\def\defcvx#1 {\errmessage{@defcvx in invalid context}}
-\def\deffnx#1 {\errmessage{@deffnx in invalid context}}
-\def\defivarx#1 {\errmessage{@defivarx in invalid context}}
-\def\defmacx#1 {\errmessage{@defmacx in invalid context}}
-\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}}
-\def\defoptx #1 {\errmessage{@defoptx in invalid context}}
-\def\defopx#1 {\errmessage{@defopx in invalid context}}
-\def\defspecx#1 {\errmessage{@defspecx in invalid context}}
-\def\deftpx#1 {\errmessage{@deftpx in invalid context}}
-\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}}
-\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}}
-\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}}
-\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}}
-\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}}
-\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}}
-\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}}
-\def\defunx#1 {\errmessage{@defunx in invalid context}}
-\def\defvarx#1 {\errmessage{@defvarx in invalid context}}
-\def\defvrx#1 {\errmessage{@defvrx in invalid context}}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\undefined
- \newwrite\macscribble
- \def\scanmacro#1{%
-   \begingroup \newlinechar`\^^M
-   % Undo catcode changes of \startcontents and \doprintindex
-   \catcode`\@=0 \catcode`\\=\other \escapechar=`\@
-   % Append \endinput to make sure that TeX does not see the ending newline.
-   \toks0={#1\endinput}%
-   \immediate\openout\macscribble=\jobname.tmp
-   \immediate\write\macscribble{\the\toks0}%
-   \immediate\closeout\macscribble
-   \let\xeatspaces\eatspaces
-   \input \jobname.tmp
-   \endgroup
-}
-\else
-\def\scanmacro#1{%
-\begingroup \newlinechar`\^^M
-% Undo catcode changes of \startcontents and \doprintindex
-\catcode`\@=0 \catcode`\\=\other \escapechar=`\@
-\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup}
-\fi
-
-\newcount\paramno   % Count of parameters
-\newtoks\macname    % Macro name
-\newif\ifrecursive  % Is it recursive?
-\def\macrolist{}    % List of all defined macros in the form
-                    % \do\macro1\do\macro2...
-
-% Utility routines.
-% Thisdoes \let #1 = #2, except with \csnames.
-\def\cslet#1#2{%
-\expandafter\expandafter
-\expandafter\let
-\expandafter\expandafter
-\csname#1\endcsname
-\csname#2\endcsname}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=\other \catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \.
-
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-
-\def\macrobodyctxt{%
-  \catcode`\~=\other
-  \catcode`\^=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\+=\other
-  \catcode`\{=\other
-  \catcode`\}=\other
-  \catcode`\@=\other
-  \catcode`\^^M=\other
-  \usembodybackslash}
-
-\def\macroargctxt{%
-  \catcode`\~=\other
-  \catcode`\^=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\+=\other
-  \catcode`\@=\other
-  \catcode`\\=\other}
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
-  \getargs{#1}%           now \macname is the macname and \argl the arglist
-  \ifx\argl\empty       % no arguments
-     \paramno=0%
-  \else
-     \expandafter\parsemargdef \argl;%
-  \fi
-  \if1\csname ismacro.\the\macname\endcsname
-     \message{Warning: redefining \the\macname}%
-  \else
-     \expandafter\ifx\csname \the\macname\endcsname \relax
-     \else \errmessage{Macro name \the\macname\space already defined}\fi
-     \global\cslet{macsave.\the\macname}{\the\macname}%
-     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-     % Add the macroname to \macrolist
-     \toks0 = \expandafter{\macrolist\do}%
-     \xdef\macrolist{\the\toks0
-       \expandafter\noexpand\csname\the\macname\endcsname}%
-  \fi
-  \begingroup \macrobodyctxt
-  \ifrecursive \expandafter\parsermacbody
-  \else \expandafter\parsemacbody
-  \fi}
-
-\def\unmacro{\parsearg\dounmacro}
-\def\dounmacro#1{%
-  \if1\csname ismacro.#1\endcsname
-    \global\cslet{#1}{macsave.#1}%
-    \global\expandafter\let \csname ismacro.#1\endcsname=0%
-    % Remove the macro name from \macrolist:
-    \begingroup
-      \expandafter\let\csname#1\endcsname \relax
-      \let\do\unmacrodo
-      \xdef\macrolist{\macrolist}%
-    \endgroup
-  \else
-    \errmessage{Macro #1 not defined}%
-  \fi
-}
-
-% Called by \do from \dounmacro on each macro.  The idea is to omit any
-% macro definitions that have been changed to \relax.
-%
-\def\unmacrodo#1{%
-  \ifx#1\relax
-    % remove this
-  \else
-    \noexpand\do \noexpand #1%
-  \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname #1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.blah for each blah
-% in the params list, to be ##N where N is the position in that list.
-% That gets used by \mbodybackslash (above).
-
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX:  let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-
-\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
-        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
-\def\parsemargdefxxx#1,{%
-  \if#1;\let\next=\relax
-  \else \let\next=\parsemargdefxxx
-    \advance\paramno by 1%
-    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-        {\xeatspaces{\hash\the\paramno}}%
-    \edef\paramlist{\paramlist\hash\the\paramno,}%
-  \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-
-% This defines the macro itself. There are six cases: recursive and
-% nonrecursive macros of zero, one, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-\def\defmacro{%
-  \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\csname\the\macname xx\endcsname}%
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
-          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-    \fi
-  \else
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-        \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \else % many
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \expandafter\noexpand\csname\the\macname xx\endcsname}%
-      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-      \expandafter\expandafter
-      \expandafter\xdef
-      \expandafter\expandafter
-      \csname\the\macname xxx\endcsname
-      \paramlist{%
-          \egroup
-          \noexpand\norecurse{\the\macname}%
-          \noexpand\scanmacro{\temp}\egroup}%
-    \fi
-  \fi}
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {.  If so it reads up to the closing }, if not, it reads the whole
-% line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg)
-\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg
-  \fi \next}
-
-% We mant to disable all macros during \shipout so that they are not
-% expanded by \write.
-\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
-  \edef\next{\macrolist}\expandafter\endgroup\next}
-
-
-% @alias.
-% We need some trickery to remove the optional spaces around the equal
-% sign.  Just make them active and then expand them all to nothing.
-\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx}
-\def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{\ignoreactivespaces
-\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=%
-           \expandafter\noexpand\csname#2\endcsname}%
-\expandafter\endgroup\next}
-
-
-\message{cross references,}
-% @xref etc.
-
-\newwrite\auxfile
-
-\newif\ifhavexrefs    % True if xref values are known.
-\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-  node \samp{\ignorespaces#1{}}}
-
-% @node's job is to define \lastnode.
-\def\node{\ENVcheck\parsearg\nodezzz}
-\def\nodezzz#1{\nodexxx #1,\finishnodeparse}
-\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}}
-\let\nwnode=\node
-\let\lastnode=\relax
-
-% The sectioning commands (@chapter, etc.) call these.
-\def\donoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Ysectionnumberandtype}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\unnumbnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}%
-    \global\let\lastnode=\relax
-  \fi
-}
-\def\appendixnoderef{%
-  \ifx\lastnode\relax\else
-    \expandafter\expandafter\expandafter\setref{\lastnode}%
-      {Yappendixletterandtype}%
-    \global\let\lastnode=\relax
-  \fi
-}
-
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-\newcount\savesfregister
-\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), namely NAME-title (the corresponding @chapter/etc. name),
-% NAME-pg (the page number), and NAME-snt (section number and type).
-% Called from \foonoderef.
-%
-% We have to set \indexdummies so commands such as @code in a section
-% title aren't expanded.  It would be nicer not to expand the titles in
-% the first place, but there's so many layers that that is hard to do.
-%
-% Likewise, use \turnoffactive so that punctuation chars such as underscore
-% and backslash work in node names.
-%
-\def\setref#1#2{{%
-  \atdummies
-  \pdfmkdest{#1}%
-  %
-  \turnoffactive
-  \dosetq{#1-title}{Ytitle}%
-  \dosetq{#1-pg}{Ypagenumber}%
-  \dosetq{#1-snt}{#2}%
-}}
-
-% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual.  All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-  \unsepspaces
-  \def\printedmanual{\ignorespaces #5}%
-  \def\printednodename{\ignorespaces #3}%
-  \setbox1=\hbox{\printedmanual}%
-  \setbox0=\hbox{\printednodename}%
-  \ifdim \wd0 = 0pt
-    % No printed node name was explicitly given.
-    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
-      % Use the node name inside the square brackets.
-      \def\printednodename{\ignorespaces #1}%
-    \else
-      % Use the actual chapter/section title appear inside
-      % the square brackets.  Use the real section title if we have it.
-      \ifdim \wd1 > 0pt
-        % It is in another manual, so we don't have it.
-        \def\printednodename{\ignorespaces #1}%
-      \else
-        \ifhavexrefs
-          % We know the real title if we have the xref values.
-          \def\printednodename{\refx{#1-title}{}}%
-        \else
-          % Otherwise just copy the Info node name.
-          \def\printednodename{\ignorespaces #1}%
-        \fi%
-      \fi
-    \fi
-  \fi
-  %
-  % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
-  % insert empty discretionaries after hyphens, which means that it will
-  % not find a line break at a hyphen in a node names.  Since some manuals
-  % are best written with fairly long node names, containing hyphens, this
-  % is a loss.  Therefore, we give the text of the node name again, so it
-  % is as if TeX is seeing it for the first time.
-  \ifpdf
-    \leavevmode
-    \getfilename{#4}%
-    {\turnoffactive \otherbackslash
-     \ifnum\filenamelength>0
-       \startlink attr{/Border [0 0 0]}%
-         goto file{\the\filename.pdf} name{#1}%
-     \else
-       \startlink attr{/Border [0 0 0]}%
-         goto name{#1}%
-     \fi
-    }%
-    \linkcolor
-  \fi
-  %
-  \ifdim \wd1 > 0pt
-    \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}%
-  \else
-    % _ (for example) has to be the character _ for the purposes of the
-    % control sequence corresponding to the node, but it has to expand
-    % into the usual \leavevmode...\vrule stuff for purposes of
-    % printing. So we \turnoffactive for the \refx-snt, back on for the
-    % printing, back off for the \refx-pg.
-    {\turnoffactive \otherbackslash
-     % Only output a following space if the -snt ref is nonempty; for
-     % @unnumbered and @anchor, it won't be.
-     \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-     \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-    }%
-    % output the `[mynode]' via a macro.
-    \xrefprintnodename\printednodename
-    %
-    % But we always want a comma and a space:
-    ,\space
-    %
-    % output the `page 3'.
-    \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
-  \fi
-  \endlink
-\endgroup}
-
-% This macro is called from \xrefX for the `[nodename]' part of xref
-% output.  It's a separate macro only so it can be changed more easily,
-% since not square brackets don't work in some documents.  Particularly
-% one that Bob is working on :).
-%
-\def\xrefprintnodename#1{[#1]}
-
-% \dosetq is called from \setref to do the actual \write (\iflinks).
-%
-\def\dosetq#1#2{%
-  {\let\folio=0%
-   \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}%
-   \iflinks \next \fi
-  }%
-}
-
-% \internalsetq{foo}{page} expands into
-%   CHARACTERS @xrdef{foo}{...expansion of \page...}
-\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}}
-
-% Things to be expanded by \internalsetq.
-%
-\def\Ypagenumber{\folio}
-\def\Ytitle{\thissection}
-\def\Ynothing{}
-\def\Ysectionnumberandtype{%
-  \ifnum\secno=0
-    \putwordChapter@tie \the\chapno
-  \else \ifnum\subsecno=0
-    \putwordSection@tie \the\chapno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-
-\def\Yappendixletterandtype{%
-  \ifnum\secno=0
-     \putwordAppendix@tie @char\the\appendixno{}%
-  \else \ifnum\subsecno=0
-     \putwordSection@tie @char\the\appendixno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie
-      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Pre-3.0.
-\else
-  \def\linenumber{\the\inputlineno:\space}
-\fi
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
-\def\refx#1#2{%
-  {%
-    \indexnofonts
-    \otherbackslash
-    \expandafter\global\expandafter\let\expandafter\thisrefX
-      \csname X#1\endcsname
-  }%
-  \ifx\thisrefX\relax
-    % If not defined, say something at least.
-    \angleleft un\-de\-fined\angleright
-    \iflinks
-      \ifhavexrefs
-        \message{\linenumber Undefined cross reference `#1'.}%
-      \else
-        \ifwarnedxrefs\else
-          \global\warnedxrefstrue
-          \message{Cross reference values unknown; you must run TeX again.}%
-        \fi
-      \fi
-    \fi
-  \else
-    % It's defined, so just use it.
-    \thisrefX
-  \fi
-  #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.
-%
-\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname}
-
-% Read the last existing aux file, if any.  No error if none exists.
-\def\readauxfile{\begingroup
-  \catcode`\^^@=\other
-  \catcode`\^^A=\other
-  \catcode`\^^B=\other
-  \catcode`\^^C=\other
-  \catcode`\^^D=\other
-  \catcode`\^^E=\other
-  \catcode`\^^F=\other
-  \catcode`\^^G=\other
-  \catcode`\^^H=\other
-  \catcode`\^^K=\other
-  \catcode`\^^L=\other
-  \catcode`\^^N=\other
-  \catcode`\^^P=\other
-  \catcode`\^^Q=\other
-  \catcode`\^^R=\other
-  \catcode`\^^S=\other
-  \catcode`\^^T=\other
-  \catcode`\^^U=\other
-  \catcode`\^^V=\other
-  \catcode`\^^W=\other
-  \catcode`\^^X=\other
-  \catcode`\^^Z=\other
-  \catcode`\^^[=\other
-  \catcode`\^^\=\other
-  \catcode`\^^]=\other
-  \catcode`\^^^=\other
-  \catcode`\^^_=\other
-  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
-  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-  % supported in the main text, it doesn't seem desirable.  Furthermore,
-  % that is not enough: for node names that actually contain a ^
-  % character, we would end up writing a line like this: 'xrdef {'hat
-  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-  % argument, and \hat is not an expandable control sequence.  It could
-  % all be worked out, but why?  Either we support ^^ or we don't.
-  %
-  % The other change necessary for this was to define \auxhat:
-  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-  % and then to call \auxhat in \setq.
-  %
-  \catcode`\^=\other
-  %
-  % Special characters.  Should be turned off anyway, but...
-  \catcode`\~=\other
-  \catcode`\[=\other
-  \catcode`\]=\other
-  \catcode`\"=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\$=\other
-  \catcode`\#=\other
-  \catcode`\&=\other
-  \catcode`\%=\other
-  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
-  %
-  % Make the characters 128-255 be printing characters
-  {%
-    \count 1=128
-    \def\loop{%
-      \catcode\count 1=\other
-      \advance\count 1 by 1
-      \ifnum \count 1<256 \loop \fi
-    }%
-  }%
-  %
-  % Turn off \ as an escape so we do not lose on
-  % entries which were dumped with control sequences in their names.
-  % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^
-  % Reference to such entries still does not work the way one would wish,
-  % but at least they do not bomb out when the aux file is read in.
-  \catcode`\\=\other
-  %
-  % @ is our escape character in .aux files.
-  \catcode`\{=1
-  \catcode`\}=2
-  \catcode`\@=0
-  %
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \closein 1
-    \input \jobname.aux
-    \global\havexrefstrue
-    \global\warnedobstrue
-  \fi
-  % Open the new aux file.  TeX will close it automatically at exit.
-  \openout\auxfile=\jobname.aux
-\endgroup}
-
-
-% Footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for info output only.
-\let\footnotestyle=\comment
-
-\let\ptexfootnote=\footnote
-
-{\catcode `\@=11
-%
-% Auto-number footnotes.  Otherwise like plain.
-\gdef\footnote{%
-  \let\indent=\ptexindent
-  \global\advance\footnoteno by \@ne
-  \edef\thisfootno{$^{\the\footnoteno}$}%
-  %
-  % In case the footnote comes at the end of a sentence, preserve the
-  % extra spacing after we do the footnote number.
-  \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
-  %
-  % Remove inadvertent blank space before typesetting the footnote number.
-  \unskip
-  \thisfootno\@sf
-  \dofootnote
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter.  Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset and anything else that uses
-% \parseargline fail inside footnotes because the tokens are fixed when
-% the footnote is read.  --karl, 16nov96.
-%
-% The start of the footnote looks usually like this:
-\gdef\startfootins{\insert\footins\bgroup}
-%
-% ... but this macro is redefined inside @multitable.
-%
-\gdef\dofootnote{%
-  \startfootins
-  % We want to typeset this text as a normal paragraph, even if the
-  % footnote reference occurs in (for example) a display environment.
-  % So reset some parameters.
-  \hsize=\pagewidth
-  \interlinepenalty\interfootnotelinepenalty
-  \splittopskip\ht\strutbox % top baseline for broken footnotes
-  \splitmaxdepth\dp\strutbox
-  \floatingpenalty\@MM
-  \leftskip\z@skip
-  \rightskip\z@skip
-  \spaceskip\z@skip
-  \xspaceskip\z@skip
-  \parindent\defaultparindent
-  %
-  \smallfonts \rm
-  %
-  % Because we use hanging indentation in footnotes, a @noindent appears
-  % to exdent this text, so make it be a no-op.  makeinfo does not use
-  % hanging indentation so @noindent can still be needed within footnote
-  % text after an @example or the like (not that this is good style).
-  \let\noindent = \relax
-  %
-  % Hang the footnote text off the number.  Use \everypar in case the
-  % footnote extends for more than one paragraph.
-  \everypar = {\hang}%
-  \textindent{\thisfootno}%
-  %
-  % Don't crash into the line above the footnote text.  Since this
-  % expands into a box, it must come within the paragraph, lest it
-  % provide a place where TeX can split the footnote.
-  \footstrut
-  \futurelet\next\fo@t
-}
-}%end \catcode `\@=11
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt}
-
-% @image.  We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front.  If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
-  \closein 1
-  % Do not bother showing banner with epsf.tex v2.7k (available in
-  % doc/epsf.tex and on ctan).
-  \def\epsfannounce{\toks0 = }%
-  \input epsf.tex
-\fi
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
-  work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
-  \ifx\epsfbox\undefined
-    \ifwarnednoepsf \else
-      \errhelp = \noepsfhelp
-      \errmessage{epsf.tex not found, images will be ignored}%
-      \global\warnednoepsftrue
-    \fi
-  \else
-    \imagexxx #1,,,,,\finish
-  \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is (ignored optional) html alt text.
-% #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing this stuff.
-\newif\ifimagevmode
-\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
-  \catcode`\^^M = 5     % in case we're inside an example
-  \normalturnoffactive  % allow _ et al. in names
-  % If the image is by itself, center it.
-  \ifvmode
-    \imagevmodetrue
-    \nobreak\bigskip
-    % Usually we'll have text after the image which will insert
-    % \parskip glue, so insert it here too to equalize the space
-    % above and below.
-    \nobreak\vskip\parskip
-    \nobreak
-    \line\bgroup\hss
-  \fi
-  %
-  % Output the image.
-  \ifpdf
-    \dopdfimage{#1}{#2}{#3}%
-  \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
-  \fi
-  %
-  \ifimagevmode \hss \egroup \bigbreak \fi  % space after the image
-\endgroup}
-
-
-\message{localization,}
-% and i18n.
-
-% @documentlanguage is usually given very early, just after
-% @setfilename.  If done too late, it may not override everything
-% properly.  Single argument is the language abbreviation.
-% It would be nice if we could set up a hyphenation file here.
-%
-\def\documentlanguage{\parsearg\dodocumentlanguage}
-\def\dodocumentlanguage#1{%
-  \tex % read txi-??.tex file in plain TeX.
-  % Read the file if it exists.
-  \openin 1 txi-#1.tex
-  \ifeof1
-    \errhelp = \nolanghelp
-    \errmessage{Cannot read language file txi-#1.tex}%
-    \let\temp = \relax
-  \else
-    \def\temp{\input txi-#1.tex }%
-  \fi
-  \temp
-  \endgroup
-}
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty.  Maybe you need to install it?  In the current directory
-should work if nowhere else does.}
-
-
-% @documentencoding should change something in TeX eventually, most
-% likely, but for now just recognize it.
-\let\documentencoding = \comment
-
-
-% Page size parameters.
-%
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be so finicky about underfull hboxes, either.
-\hbadness = 2000
-
-% Following George Bush, just get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything.  We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize.  We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
-  \ifx\emergencystretch\thisisundefined
-    % Allow us to assign to \emergencystretch anyway.
-    \def\emergencystretch{\dimen0}%
-  \else
-    \emergencystretch = .15\hsize
-  \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
-% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
-% physical page width.
-%
-% We also call \setleading{\textleading}, so the caller should define
-% \textleading.  The caller should also set \parskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6#7#8{%
-  \voffset = #3\relax
-  \topskip = #6\relax
-  \splittopskip = \topskip
-  %
-  \vsize = #1\relax
-  \advance\vsize by \topskip
-  \outervsize = \vsize
-  \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
-  %
-  \hsize = #2\relax
-  \outerhsize = \hsize
-  \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
-  %
-  \normaloffset = #4\relax
-  \bindingoffset = #5\relax
-  %
-  \ifpdf
-    \pdfpageheight #7\relax
-    \pdfpagewidth #8\relax
-  \fi
-  %
-  \setleading{\textleading}
-  %
-  \parindent = \defaultparindent
-  \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % If page is nothing but text, make it come out even.
-  \internalpagesizes{46\baselineskip}{6in}%
-                    {\voffset}{.25in}%
-                    {\bindingoffset}{36pt}%
-                    {11in}{8.5in}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.5 (or so) format.
-\def\smallbook{{\globaldefs = 1
-  \parskip = 2pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.5in}{5in}%
-                    {\voffset}{.25in}%
-                    {\bindingoffset}{16pt}%
-                    {9.25in}{7in}%
-  %
-  \lispnarrowing = 0.3in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = .5cm
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % Double-side printing via postscript on Laserjet 4050
-  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
-  % To change the settings for a different printer or situation, adjust
-  % \normaloffset until the front-side and back-side texts align.  Then
-  % do the same for \bindingoffset.  You can set these for testing in
-  % your texinfo source file like this:
-  % @tex
-  % \global\normaloffset = -6mm
-  % \global\bindingoffset = 10mm
-  % @end tex
-  \internalpagesizes{51\baselineskip}{160mm}
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{44pt}%
-                    {297mm}{210mm}%
-  %
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 5mm
-}}
-
-% Use @afivepaper to print on European A5 paper.
-% From romildo@urano.iceb.ufop.br, 2 July 2000.
-% He also recommends making @example and @lisp be small.
-\def\afivepaper{{\globaldefs = 1
-  \parskip = 2pt plus 1pt minus 0.1pt
-  \textleading = 12.5pt
-  %
-  \internalpagesizes{160mm}{120mm}%
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{8pt}%
-                    {210mm}{148mm}%
-  %
-  \lispnarrowing = 0.2in
-  \tolerance = 800
-  \hfuzz = 1.2pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 2mm
-  \tableindent = 12mm
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.
-\def\afourlatex{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{237mm}{150mm}%
-                    {\voffset}{4.6mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  %
-  % Must explicitly reset to 0 because we call \afourpaper.
-  \globaldefs = 0
-}}
-
-% Use @afourwide to print on A4 paper in landscape format.
-\def\afourwide{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{241mm}{165mm}%
-                    {\voffset}{-2.95mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  \globaldefs = 0
-}}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\def\pagesizes{\parsearg\pagesizesxxx}
-\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-  \globaldefs = 1
-  %
-  \parskip = 3pt plus 2pt minus 1pt
-  \setleading{\textleading}%
-  %
-  \dimen0 = #1
-  \advance\dimen0 by \voffset
-  %
-  \dimen2 = \hsize
-  \advance\dimen2 by \normaloffset
-  %
-  \internalpagesizes{#1}{\hsize}%
-                    {\voffset}{\normaloffset}%
-                    {\bindingoffset}{44pt}%
-                    {\dimen0}{\dimen2}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other
-\catcode`\~=\other
-\catcode`\^=\other
-\catcode`\_=\other
-\catcode`\|=\other
-\catcode`\<=\other
-\catcode`\>=\other
-\catcode`\+=\other
-\catcode`\$=\other
-\def\normaldoublequote{"}
-\def\normaltilde{~}
-\def\normalcaret{^}
-\def\normalunderscore{_}
-\def\normalverticalbar{|}
-\def\normalless{<}
-\def\normalgreater{>}
-\def\normalplus{+}
-\def\normaldollar{$}%$ font-lock fix
-
-% This macro is used to make a character print one way in ttfont
-% where it can probably just be output, and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise.  Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font.  Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts.  But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active
-\def~{{\tt\char126}}
-\chardef\hat=`\^
-\catcode`\^=\active
-\def^{{\tt \hat}}
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-\chardef \less=`\<
-\catcode`\<=\active
-\def<{{\tt \less}}
-\chardef \gtr=`\>
-\catcode`\>=\active
-\def>{{\tt \gtr}}
-\catcode`\+=\active
-\def+{{\tt \char 43}}
-\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
-% Set up an active definition for =, but don't enable it most of the time.
-{\catcode`\==\active
-\global\def={{\tt \char 61}}}
-
-\catcode`+=\active
-\catcode`\_=\active
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-\catcode`\@=0
-
-% \rawbackslashxx outputs one backslash character in current font,
-% as in \char`\\.
-\global\chardef\rawbackslashxx=`\\
-
-% \rawbackslash defines an active \ to do \rawbackslashxx.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.
-{\catcode`\\=\active
- @gdef@rawbackslash{@let\=@rawbackslashxx}
- @gdef@otherbackslash{@let\=@realbackslash}
-}
-
-% \realbackslash is an actual character `\' with catcode other.
-{\catcode`\\=\other @gdef@realbackslash{\}}
-
-% \normalbackslash outputs one backslash in fixed width font.
-\def\normalbackslash{{\tt\rawbackslashxx}}
-
-\catcode`\\=\active
-
-% Used sometimes to turn off (effectively) the active characters
-% even after parsing them.
-@def@turnoffactive{%
-  @let"=@normaldoublequote
-  @let\=@realbackslash
-  @let~=@normaltilde
-  @let^=@normalcaret
-  @let_=@normalunderscore
-  @let|=@normalverticalbar
-  @let<=@normalless
-  @let>=@normalgreater
-  @let+=@normalplus
-  @let$=@normaldollar %$ font-lock fix
-}
-
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  (Thus, \ is not expandable when this is in
-% effect.)
-%
-@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\{ in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also back turn on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
-  @ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active
-  @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These look ok in all fonts, so just make them not special.
-@catcode`@& = @other
-@catcode`@# = @other
-@catcode`@% = @other
-
-@c Set initial fonts.
-@textfonts
-@rm
-
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
-@c End:
diff --git a/tags/gpgme-1-1-1/gpgme.spec.in b/tags/gpgme-1-1-1/gpgme.spec.in
deleted file mode 100644 (file)
index a5c6996..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-# This is a template.  The dist target uses it to create the real file.
-Summary: GPGME - GnuPG Made Easy
-Name: gpgme
-Version: @pkg_version@
-Release: 1
-URL: http://www.gnupg.org/gpgme.html
-Source: ftp://ftp.gnupg.org/gcrypt/alpha/gpgme/%{name}-%{version}.tar.gz
-Group: Development/Libraries
-Copyright: GPL
-BuildRoot: %{_tmppath}/%{name}-%{version}
-BuildRequires: make
-Prereq: /sbin/ldconfig /sbin/install-info
-Requires: gnupg
-
-%description
-GnuPG Made Easy (GPGME) is a library designed to make access to GnuPG easier
-for applications. It provides a High-Level Crypto API for encryption,
-decryption, signing, signature verification and key management.
-
-%prep
-%setup -q
-
-%build
-CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS
-./configure --prefix=/usr
-make
-
-%install
-rm -fr $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT
-make install prefix=$RPM_BUILD_ROOT/usr infodir=$RPM_BUILD_ROOT%{_infodir}
-rm -f $RPM_BUILD_ROOT%{_infodir}/dir
-
-%clean
-rm -fr $RPM_BUILD_ROOT
-make distclean
-
-%post
-/sbin/ldconfig
-/sbin/install-info %{_infodir}/gpgme.info.gz %{_infodir}/dir
-
-%preun
-if [ "$1" = 0 ]; then
- /sbin/install-info --delete %{_infodir}/gpgme.info.gz %{_infodir}/dir
-fi
-
-%postun
-/sbin/ldconfig
-
-%files
-%defattr(-,root,root)
-%doc COPYING COPYING.LESSER AUTHORS README INSTALL NEWS ChangeLog TODO THANKS
-%attr(0755,root,root) %{_bindir}/gpgme-config
-%attr(0755,root,root) %{_libdir}/*gpgme.so*
-%attr(0755,root,root) %{_libdir}/*gpgme.la
-%attr(0644,root,root) %{_libdir}/*gpgme.a
-%{_includedir}/gpgme.h
-%{_datadir}/aclocal/gpgme.m4
-%{_infodir}/gpgme.info*
-
-%changelog
-* Sat Aug 30 2003 Robert Schiele <rschiele@uni-mannheim.de>
-- %{_infodir}/dir is not packaged, remove to prevent checking failure
-* Mon Jul 01 2002 Wojciech Polak <polak@lodz.pdi.net>
-- initial specfile release for GPGME.
-
-# EOF
diff --git a/tags/gpgme-1-1-1/gpgme.txt b/tags/gpgme-1-1-1/gpgme.txt
deleted file mode 100644 (file)
index 88d629b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-%%comments:
-Copyright (C) 2001, 2004 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts. A copy of the license is included in the file COPYING.
-
-%%name: GPGME
-
-%%short-description: GnuPG Made Easy 
-
-%%full-description: GPGME is a library designed to make access to
-GnuPG easier for applications.  It provides a high-level crypto API
-for encryption, decryption, signing, signature verification and key
-management.  Currently it uses GnuPG and GpgSM as its backends to
-support OpenPGP and the Cryptographic Message Syntax.
-
-%%category: security, libraries
-
-%%license: GPL
-%%license verified by: 
-%%license verified on: 
-
-%%maintainer: g10 Code GmbH <gpgme@g10code.com>
-
-%%updated: 2004-09-30
-
-%%keywords: encryption, public key, digital signature, GnuPG
-
-%%interface:
-
-%%programs: 
-
-%%GNU: no
-
-%%web-page: http://www.gnupg.org/gpgme.html
-
-%%support: paid extension/consulting from http://www.g10code.com
-
-%%doc: English programmer reference in Texinfo, Postscript, HTML included
-
-%%developers: Werner Koch <wk@gnupg.org>.
-
-%%contributors: 
-
-%%sponsors: 
-
-%%source: ftp://ftp.gnupg.org/gcrypt/gpgme/
-
-%%debian:
-
-%%redhat:
-
-%%repository:  See http://www.gnupg.org/cvs-access.html
-
-%%related: 
-
-%%source-language: C
-
-%%supported-languages: C, C++
-
-%%use-requirements: GnuPG 1.2.2, GpgSM 1.9.6
-
-%%build-prerequisites: libgpg-error 0.5
-
-%%weak-prerequisites: Pth 1.2.0
-
-%%source-prerequisites:
-
-%%version: 1.0.0 released on 2004-09-30
-
-%%announce-list: announce@gnupg.org  announce-request@gnupg.org
-
-%%announce-news:
-
-%%help-list: 
-
-%%help-news:
-
-%%dev-list: gnupg-devel@gnupg.org  gnupg-devel-request@gnupg.org
-
-%%dev-news:
-
-%%bug-list: 
-
-%%bug-database: 
-
-%%entry written by: Werner Koch <wk@gnupg.org>
diff --git a/tags/gpgme-1-1-1/gpgme/ChangeLog b/tags/gpgme-1-1-1/gpgme/ChangeLog
deleted file mode 100644 (file)
index 20c5d0a..0000000
+++ /dev/null
@@ -1,5113 +0,0 @@
-2006-02-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-glib-io.c (O_BINARY) [!O_BINARY]: New macro.
-       (_gpgme_io_pipe): Open pipes in binary mode.
-
-2006-02-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c (gpgme_engine_check_version): Reimplemented to allow
-       checking the version correctly even after changing the engine
-       information.  Bug reported by Stéphane Corthésy.
-
-       * rungpg.c (read_colon_line): Invoke colon preprocess handler if
-       it is set.
-       (colon_preprocessor_t): New type.
-       (struct engine_gpg): New member colon.preprocess_fnc.
-       (gpg_keylist_preprocess): New function.
-       * keylist.c (keylist_colon_handler): Allow short key IDs.
-
-2006-02-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-io.c (create_writer): Make C->have_data a manually resetted
-       event.
-       (writer): Move code from end of if block to beginning, so it
-       is also run the first time.
-       (_gpgme_io_write): Move assert check after error check.  Reset
-       the is_empty event, and also do it eagerly.
-       (_gpgme_io_select): Unconditionally wait for the is_empty event.
-
-2006-01-26  Werner Koch  <wk@g10code.com>
-
-       * w32-util.c (_gpgme_get_conf_int): New.
-       * posix-util.c (_gpgme_get_conf_int): New.
-       * w32-io.c (get_desired_thread_priority): New.
-       (create_reader, create_writer): Use it here.
-
-2006-01-04  Werner Koch  <wk@g10code.com>
-
-       * debug.h (_gpgme_debug_srcname): New. Use it with the debug macros.
-
-       * w32-glib-io.c (_gpgme_io_set_nonblocking): Add debug
-       statements. Disable error return for failed nonblocking call.
-
-2006-01-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-glib-io.c (_gpgme_io_close): Only close fd if there is no
-       channel for it.
-
-2005-12-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-glib-io.c (find_channel): Set channel to unbuffered.
-       (_gpgme_io_select): Fix debug output.
-
-2005-12-23  Werner Koch  <wk@g10code.com>
-
-       * gpgme.h (struct _gpgme_signature): Append field PKA_ADDRESS.
-       * verify.c (release_op_data, _gpgme_verify_status_handler): Set
-       this field.
-
-2005-12-20  Werner Koch  <wk@g10code.com>
-
-       * gpgme.h (gpgme_status_code_t): Added GPGME_STATUS_PKA_TRUST_BAD
-       and GPGME_STATUS_PKA_TRUST_GOOD.
-       (struct _gpgme_signature): New field pka_trust.
-       * verify.c (_gpgme_verify_status_handler): Set pka_trust.
-
-2005-12-06  Werner Koch  <wk@g10code.com>
-
-       * keylist.c (keylist_colon_handler): Store fingerprints of the
-       subkeys.  Reset the secret flag of subkeys for stub secret keys.
-       (NR_FIELDS): Bumped up to 16
-
-2005-11-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c (_gpgme_set_engine_info): Use new_file_name in
-       engine_get_version invocation.  Reported by Stéphane Corthésy.
-
-2005-11-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-glib-io.c (_gpgme_io_fd2str): Remove debug printf.
-
-2005-11-18  Werner Koch  <wk@g10code.com>
-
-       * w32-glib-io.c: Include glib.h before windows to avoid a symbol
-       shadowing warning.
-       (find_channel): Better use g_io_channel_win32_new_fd instead of
-       the autodetection function g_io_channel_unix_new.
-       (_gpgme_io_select): Rewritten.  It is now a fully working select
-       implementation.
-
-2005-11-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * priv-io.h (_gpgme_io_fd2str): New prototype.
-       * posix-io.c (_gpgme_io_fd2str): New function.
-       * w32-io.c (_gpgme_io_fd2str): New function.
-       * rungpg.c: Use this new function.
-       * w32-glib-io.c (_gpgme_io_fd2str): Rewrote the file handle code
-       again.  Two's company, three's the musketeers.
-
-       * w32-glib-io.c: Rewrote the file handle code.  We don't create
-       system fds for every handle (doesn't work for inherited handles),
-       but we create pseudo fds in a private namespace that designate a
-       handle and potentially a giochannel.
-
-2005-11-18  Werner Koch  <wk@g10code.com>
-
-       * versioninfo.rc.in: Set file version to LT-version + Svn-revision.
-
-2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-glib-io.c: New file.
-       * gpgme.def (gpgme_get_giochannel): Add symbol.
-       * Makefile.am (system_components) [HAVE_DOSISH_SYSTEM]: Remove
-       w32-io.c.
-       (ltlib_gpgme_extra): New variable.
-       (lib_LTLIBRARIES): Add $(ltlib_gpgme_extra).
-       (system_components_not_extra): New variable.
-       (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES,
-       (libgpgme_pth_la_SOURCES): Add $(system_components_not_extra).
-       (libgpgme_glib_la_LDFLAGS, libgpgme_glib_la_DEPENDENCIES,
-       (libgpgme_glib_la_LIBADD, libgpgme_glib_la_CFLAGS)
-       [BUILD_W32_GLIB]: New variables. 
-       * gpgme-config.in (glib): New option.
-       * gpgme.m4 (AM_PATH_GPGME_GLIB): New macro.
-
-2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * priv-io.h (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
-       * w32-io.c (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
-       * posix-io.c (_gpgme_io_kill): Removed.
-       (_gpgme_io_waitpid): Declare static.
-
-2005-10-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-io.c (_gpgme_io_spawn): Don't minimize window, hide it.
-
-2005-10-21  Werner Koch  <wk@g10code.com>
-
-       * Makefile.am: Fixed cut+paste problem
-
-2005-10-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am: Build versioninfo.lo, not versioninfo.o.  Also, fix
-       the whole mess.
-
-2005-10-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (gpg_edit): Don't add a key argument if in card edit
-       mode.
-
-2005-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (gpgme.dll gpgme.dll.a): Use $(srcdir) for
-       gpgme.def.
-
-       * gpgme.h (gpgme_free): New prototype.
-       * data-mem.c (gpgme_free): New function.
-       * libgpgme.vers (GPGME_1.1): Add gpgme_free.
-       * gpgme.def: Add gpgme_free.
-
-2005-10-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * util.h (_gpgme_decode_percent_string): Add new argument BINARY
-       to prototype.
-       * verify.c (parse_notation): Likewise for invocation.
-       * conversion.c (_gpgme_decode_percent_string): Likewise to
-       declaration.  If set, do not replace '\0' characters with a
-       printable string.
-       * gpgme.h (struct _gpgme_key_sig): New field notations.
-       * ops.h (_gpgme_parse_notation): New prototype.
-       * sig-notation.c (_gpgme_parse_notation): New function.
-       * key.c (gpgme_key_unref): Free all signature notations.
-       * keylist.c (op_data_t): New member tmp_keysig.
-       (finish_key): Clear OPD->tmp_keysig.
-       * gpgme.c (gpgme_set_keylist_mode): Remove check.
-       * rungpg.c (gpg_keylist): Support listing signature notations.
-       (gpg_keylist_ext): Likewise.
-
-2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.h (_gpgme_set_engine_info): Add prototype.
-       * engine-backend.h (struct engine_ops): Change return type of
-       get_file_name() to const char * to silence gcc warning.
-       * engine.c (engine_get_file_name): Change return type to const
-       char * to silence gcc warning.
-       (gpgme_get_engine_info): Use transitional variable to go from
-       const char * to char * to silence gcc warning.
-       (_gpgme_set_engine_info): Likewise.
-       * engine-gpgsm.c (struct engine_gpgsm): Change type of LINE to
-       char * to silence gcc warning.
-       (gpgsm_new): Make ARGV a pointer to const char.
-       (status_handler): Change type of SRC, END, DST, ALINE and NEWLINE
-       to char * to silence gcc warning.
-
-       * gpgme.def: Add gpgme_data_set_file_name,
-       gpgme_data_get_file_name, gpgme_sig_notation_clear,
-       gpgme_sig_notation_add and gpgme_sig_notation_get.
-       * libgpgme.vers: Add gpgme_sig_notation_clear,
-       gpgme_sig_notation_add and gpgme_sig_notation_get.
-       * Makefile.am (libgpgme_real_la_SOURCES): Add sig-notation.c.
-       * context.h (struct gpgme_context): New field sig_notations.
-       * gpgme.h (struct _gpgme_sig_notation): New member value_len and
-       critical.
-       (GPGME_SIG_NOTATION_CRITICAL): New symbol.
-       (gpgme_sig_notation_flags_t): New type.
-       (gpgme_sig_notation_add, gpgme_sig_notation_clear,
-       gpgme_sig_notation_get): New prototypes.
-       * ops.h (_gpgme_sig_notation_create, _gpgme_sig_notation_free):
-       New prototypes.
-       * sig-notation.c (_gpgme_sig_notation_free): New file.
-       * verify.c (parse_notation): Use support functions.
-       (release_op_data): Likewise.
-       * rungpg.c (append_args_from_sig_notations): New function.
-       (gpg_encrypt_sign, gpg_sign): Call it.
-
-2005-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.h (struct gpgme_data): New member file_name.
-       * data.c (gpgme_data_set_filename): New function.
-       (_gpgme_data_release): Free DH->filename if necessary.
-       (gpgme_data_get_filename): New function.
-       * rungpg.c (gpg_encrypt): Set filename option.
-       (gpg_encrypt_sign): Likewise.
-       (gpg_sign): Likewise.
-       * libgpgme.vers (GPGME_1.1): Add gpgme_data_set_file_name and
-       gpgme_data_get_file_name.
-
-       * decrpyt.c, verify.c, gpgme.h: Replace plaintext_filename with
-       file_name.
-
-2005-09-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_key): Add field is_qualified.
-       (struct _gpgme_subkey): Likewise.
-       * keylist.c (set_subkey_capability, set_mainkey_capability): Set
-       field is_qualified.
-
-2005-09-23  Werner Koch  <wk@g10code.com>
-
-       * w32-io.c (_gpgme_io_pipe): Removed use of environment variable
-       again.
-       (create_reader, create_writer): Set thread priority higher.
-
-2005-09-19  Werner Koch  <wk@g10code.com>
-
-       * w32-io.c (_gpgme_io_pipe): New environment variable to change
-       the size of the pipe buffer.
-
-2005-09-13  Werner Koch  <wk@g10code.com>
-
-       * ath.c: Changes to make it work under W32.
-
-2005-09-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (libgpgme_la_SOURCES): Set to ath.h and ath.c.
-       (ath_pth_src, ath_pthread_src): Removed.
-       (w32_o_files): Replace ath-compat.o with ath.o.
-       (libgpgme_pth_la_CFLAGS): New variable.
-       * ath-compat.c, ath-pthread-compat.c, ath-pth-compat.c: Removed.
-       * ath.h (ath_pthread_available, ath_pth_available): Removed.
-       (ath_init) [!_ATH_EXT_SYM_PREFIX]: Do not define macro.
-       (struct ath_ops, ath_init) [_ATH_COMPAT]: Removed.
-       (_ATH_COMPAT): Macro removed.
-       * posix-sema.c (_gpgme_sema_subsystem_init): Do not call
-       _gpgme_ath_init.
-
-2005-09-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (release_op_data): Do not free opd->tmp_uid.
-
-2005-09-07  Werner Koch  <wk@g10code.com>
-
-       * w32-io.c (build_commandline): Quote argv[0].
-
-2005-08-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (command_handler): Use _gpgme_io_write instead of write.
-
-       * edit.c (command_handler): Do not depend on PROCESSED being
-       available.
-
-       * engine.h (engine_command_handler_t): Add new argument processed.
-       * ops.h (_gpgme_passphrase_command_handler_internal): Rename
-       prototype to ...
-       (_gpgme_passphrase_command_handler): ... this one.
-       * passphrase.c (_gpgme_passphrase_command_handler_internal):
-       Rename to ...
-       (_gpgme_passphrase_command_handler): ... this one.
-       * edit.c (command_handler): Add new argument processed.  Remove
-       local variable with the same name.  Always return processed as
-       true.
-       * rungpg.c (command_handler): Send a newline character if the
-       handler did not.
-
-2005-08-26  Werner Koch  <wk@g10code.com>
-
-       * w32-util.c (read_w32_registry_string): Updated from code used by
-       GnuPG.  This allows for expanding strings and features the
-       implicit fallback key.
-       (w32_shgetfolderpath, find_program_at_standard_place): New.
-       (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): With no registry
-       entry, locate the programs at the standard place.
-       (dlopen, dlsym, dlclose): New, so that we can keep on using what
-       we are accustomed to.
-
-       * debug.c (debug_init): Use PATHSEP_C so that under W32 a
-       semicolon is used which allows us to create files with drive
-       letters.
-
-       * w32-io.c (_gpgme_io_read, _gpgme_io_write): Print content in
-       debug mode too.
-
-2005-08-19  Werner Koch  <wk@g10code.com>
-
-       * gpgme.def: New.
-       * versioninfo.rc.in: New.
-       * Makefile.am: Addes support for building a W32 DLL.
-       
-       * ttyname_r.c (ttyname_r) [W32]: Return error.
-       * ath-compat.c [W32]: select and co are not yet supported; return
-       error.
-       * data-stream.c (stream_seek): Use ftell if ftello is not available.
-
-2005-08-08  Werner Koch  <wk@g10code.com>
-
-       * util.h (stpcpy): Renamed to ..
-       (_gpgme_stpcpy): .. this and made inline.  This avoids duplicate
-       definitions when linking statically.
-       * stpcpy.c: Removed.
-       
-2005-07-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_PLAINTEXT.
-       (struct _gpgme_op_decrypt_result): New member plaintext_filename.
-       (struct _gpgme_op_verify_result): Likewise.
-       * ops.h (_gpgme_parse_plaintext): Add prototype.
-       * op-support.c (_gpgme_parse_plaintext): New function.
-       * decrypt.c (release_op_data): Release
-       OPD->result.plaintext_filename.
-       (_gpgme_decrypt_status_handler): Handle GPGME_STATUS_PLAINTEXT.
-       * verify.c (release_op_data): Release
-       OPD->result.plaintext_filename.
-       (_gpgme_verify_status_handler): Handle GPGME_STATUS_PLAINTEXT.
-
-2005-07-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (gpgme_get_key): Allow key IDs.
-
-2005-06-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.m4: Only call GPGME_CONFIG if found.
-
-2005-06-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_signature): New members pubkey_algo and
-       hash_algo.
-       * verify.c (parse_valid_sig): Parse pubkey and hash algo numbers.
-       (parse_new_sig): Parse pubkey, hash algo and timestamp for ERRSIG.
-
-       (_gpgme_decrypt_status_handler): Fix last change.
-
-       * gpgme.h (struct _gpgme_recipient): New structure.
-       (gpgme_recipient_t): New type.
-       (struct _gpgme_op_decrypt_result): Add member recipients.
-       * decrypt.c (op_data_t): New member last_recipient_p.
-       (_gpgme_op_decrypt_init_result): Initialize last_recipient_p.
-       (parse_enc_to): New function.
-       (_gpgme_decrypt_status_handler): Handle status ENC_TO and
-       NO_SECKEY.
-
-       * wait-global.c (gpgme_wait): Break out of the fd processing loop
-       after an error.
-       Reported by Igor Belyi <gpgme@katehok.ac93.org>.
-
-2005-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.h (_gpgme_run_io_cb): New prototype.
-       * wait.c (_gpgme_run_io_cb): New function.
-       * wait-global.c (gpgme_wait): Call it.
-       * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
-       * wait-private.c (_gpgme_wait_on_condition): Likewise.
-
-2005-06-02  Werner Koch  <wk@g10code.com>
-
-       * passphrase.c (_gpgme_passphrase_status_handler): Take care of
-       GPGME_STATUS_NEED_PASSPHRASE_PIN.
-       (_gpgme_passphrase_command_handler_internal): Also act on the key
-       "passphrase.pin.ask".
-
-       * gpgme.h: Added status codes GPGME_STATUS_SIG_SUBPACKET,
-       GPGME_STATUS_NEED_PASSPHRASE_PIN, GPGME_STATUS_SC_OP_FAILURE,
-       GPGME_STATUS_SC_OP_SUCCESS, GPGME_STATUS_CARDCTRL,
-       GPGME_STATUS_BACKUP_KEY_CREATED.
-
-2005-05-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-user.c: Include <errno.h>.
-
-2005-05-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_new): Set the CTX->include_certs default to the
-       default.
-
-2005-05-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-io.c (_gpgme_io_select): Fix loop increment.
-
-2005-05-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-user.c (user_release): Only call user hook if provided.
-       (user_seek): Return EBADF if no user hook is provided.
-       (user_read): Likewise.
-       (user_write): Likewise.
-
-2005-04-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (GPGME_INCLUDE_CERTS_DEFAULT): New macro.
-       * engine-gpgsm.c (gpgsm_sign): Send the include-certs option after
-       the reset, just for cleanliness, and do not sent it at all if the
-       default is requested.
-       * gpgme.c (gpgme_set_include_certs): Allow to use
-       GPGME_INCLUDE_CERTS_DEFAULT.
-
-2005-04-21  Werner Koch  <wk@g10code.com>
-
-       * verify.c (calc_sig_summary): Set the key revoked bit.
-
-2005-04-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait-global.c (gpgme_wait): Use LI->ctx when checking a context
-       in the list, not the user-provided CTX.
-       Reported by Igor Belyi <gpgme@katehok.ac93.org>.
-
-       * wait-global.c (gpgme_wait): If no context is found, and we
-       should not hang, set *status to 0 and return NULL.
-       Reported by Igor Belyi <gpgme@katehok.ac93.org>.
-
-2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.h (EOPNOTSUPP) [_WIN32]: Remove definition.
-       * data.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
-       (gpgme_data_read, gpgme_data_write, gpgme_data_seek): Return
-       ENOSYS instead EOPNOTSUPP.
-       * data-compat.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
-       (gpgme_error_to_errno): Map GPG_ERR_NOT_SUPPORTED
-       to ENOSYS.
-
-2005-03-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * io.h: Rename to ...
-       * priv-io.h: ... this.
-       * Makefile.am (libgpgme_real_la_SOURCES): Change io.h to priv-io.h.
-       * data.c, engine-gpgsm.c, posix-io.c, rungpg.c, version.c,
-       w32-io.c, wait-private.c, wait-global.c, wait-user.c, wait.c:
-       Change all includes of "io.h" to "priv-io.h"
-       
-2005-03-09  Werner Koch  <wk@g10code.com>
-
-       * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Do not
-       cast away type checks.
-
-       * io.h [W32]: Do not include stdio.h.  If it is needed do it at
-       the right place.
-
-       * data.h [W32]: Removed kludge for EOPNOTSUP.
-       * data.c, data-compat.c [W32]: Explicitly test for it here.
-
-       Replaced use of _WIN32 by HAVE_W32_SYSTEM except for public header
-       files.
-
-2005-03-07  Timo Schulz  <twoaday@g10code.de>
-        * gpgme.h: [_WIN32] Removed ssize_t typedef.
-        * ath.h: [_WIN32] Added some (dummy) types.
-        * io.h: [_WIN32] include stdio.h.
-        * data.h: [_WIN32] Define EOPNOTSUPP.
-        * w32-io.c [_WIN32] (_gpgme_io_subsystem_init): New.
-        * gpgme.c [_WIN32] (gpgme_set_locale): Disabled.
-
-2004-12-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c (_gpgme_set_engine_info): Fix assertion.
-
-2004-12-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * util.h [HAVE_CONFIG_H && HAVE_TTYNAME_R] (ttyname_r): Define
-       prototype.
-       * ttyname_r.c: New file.
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * putc_unlocked.c, funopen.c: I just claim copyright on these
-       files and change their license to LGPL, because they are totally
-       trivial wrapper functions.
-       * isascii.c: Change copyright notice to the one from ctype/ctype.h
-       in the GNU C Library (CVS Head 2004-10-10), where isascii is
-       defined as a macro doing exactly the same as the function in this
-       file.
-       * memrchr.c: Update from the GNU C Library (CVS Head 2001-07-06).
-       * stpcpy.c: Update from the GNU C Library (CVS Head 2004-10-10).
-       * ath.c, ath-compat.c, ath.h, ath-pth.c, ath-pth-compat.c,
-       ath-pthread.c, ath-pthread-compat.c, context.h, conversion.c,
-       data.c, data-compat.c, data-fd.c, data.h, data-mem.c,
-       data-stream.c, data-user.c, debug.c, debug.h, decrypt.c,
-       decrypt-verify.c, delete.c, edit.c, encrypt.c, encrypt-sign.c,
-       engine-backend.h, engine.c, engine-gpgsm.c, engine.h, error.c,
-       export.c, genkey.c, get-env.c, gpgme.c, gpgme.h, import.c, io.h,
-       key.c, keylist.c, mkstatus, Makefile.am, ops.h, op-support.c,
-       passphrase.c, posix-io.c, posix-sema.c, posix-util.c, progress.c,
-       rungpg.c, sema.h, sign.c, signers.c, trust-item.c, trustlist.c,
-       util.h, verify.c, version.c, w32-io.c, w32-sema.c, w32-util.c,
-       wait.c, wait-global.c, wait.h, wait-private.c, wait-user.c: Change
-       license to LGPL.
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * libgpgme.vers (GPGME_1.1): New version.
-       * engine-backend.h (struct engine_ops): Add argument FILE_NAME to
-       member get_version().  Add arguments FILE_NAME and HOME_DIR to
-       member new().  Change return type of get_file_name and get_version
-       to char *.
-       * engine-gpgsm.c (gpgsm_get_version): Change return type to char
-       pointer.  Do not cache result.
-       (gpgsm_new): Add file_name and home_dir argument, and use them
-       instead of the defaults, if set.
-       * rungpg.c (struct engine_gpg): New member file_name.
-       (gpg_get_version): Change return type to char pointer, and do not
-       cache result.
-       (gpg_release): Free gpg->file_name.
-       (gpg_new): Take new arguments file_name and home_dir.  Set the
-       --homedir argument if HOME_DIR is not NULL.  Set gpg->file_name.
-       (start): Use gpg->file_name instead _gpgme_get_gpg_path, if set.
-       * engine.h (_gpgme_engine_info_copy, _gpgme_engine_info_release):
-       New prototypes.
-       (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
-       info.
-       * engine.c: Include <assert.h>.
-       (gpgme_get_engine_info): Set *INFO within the lock.  Move
-       ENGINE_INFO and ENGINE_INFO_LOCK to ....
-       (engine_info, engine_info_lock): ... here.  New static variables.
-       (engine_get_version): Add file_name argument to
-       get_version invocation.  Change return type to char pointer.
-       (gpgme_engine_check_version): Rewritten to free() the return value
-       of engine_get_version after using it.
-       (_gpgme_engine_info_release): New function.
-       (gpgme_get_engine_info): Rewritten.
-       (_gpgme_engine_info_copy): New function.
-       (_gpgme_set_engine_info): New function.
-       (gpgme_set_engine_info): New function.
-       (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
-       info, and use that.
-       * gpgme.h (struct _gpgme_engine_info): Change type of file_name
-       and version to char * (remove the const).  New member home_dir.
-       (gpgme_set_engine_info, gpgme_ctx_get_engine_info,
-       gpgme_ctx_set_engine_info): New prototypes.
-       * context.h (struct gpgme_context): New member engine_info.
-       * gpgme.c (gpgme_new): Allocate CTX->engine_info.
-       (gpgme_release): Deallocate CTX->engine_info.
-       (gpgme_ctx_get_engine_info, gpgme_ctx_set_engine_info): New
-       functions.
-       * op-support.c (_gpgme_op_reset): Look for correct engine info and
-       pass it to _gpgme_engine_new.
-       * version.c (gpgme_check_version): Adjust to
-       _gpgme_compare_versions returning an int.
-       (_gpgme_compare_versions): Return an int value, not a const char
-       pointer.
-       * ops.h (_gpgme_compare_versions): Same for prototype.
-
-2004-10-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (parse_trust): If no reason is provided, set
-       SIG->validity_reason to 0.
-       (calc_sig_summary): Set GPGME_SIGSUM_CRL_TOO_OLD if appropriate.
-
-2004-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (map_assuan_error): Return 0 if ERR is 0.
-       (start): Call map_assuan_error on return value of
-       assuan_write_line.
-
-2004-10-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * op-support.c (_gpgme_op_data_lookup): Use char pointer for
-       pointer arithmetic.
-
-2004-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.m4: Implement the --api-version check.
-
-       * rungpg.c (read_status): Move the polling of the output data pipe
-       to just before removing the command fd, from just before adding
-       it.  This avoids buffering problems.
-
-       * data.c (_gpgme_data_inbound_handler): Use _gpgme_io_read, not
-       read, to improve debug output.
-
-2004-09-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (GPGME_IMPORT_NEW, GPGME_IMPORT_UID, GPGME_IMPORT_SIG,
-       GPGME_IMPORT_SUBKEY, GPGME_IMPORT_SECRET,
-       (GPGME_KEYLIST_MODE_LOCAL, GPGME_KEYLIST_MODERN_EXTERN,
-       GPGME_KEYLIST_MODE_SIGS, GPGME_KEYLIST_MODE_VALIDATE): Change from
-       enum to macros.
-       (gpgme_keylist_mode_t): Define as unsigned int.
-       (gpgme_key_t): Change type of keylist_mode to
-       gpgme_keylist_mode_t.
-
-2004-09-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.c (_gpgme_data_outbound_handler): Close the file descriptor
-       if we get an EPIPE.
-       
-       * data-stream.c (stream_seek): Call ftello and return the current
-       offset.
-       * data.h (struct gpgme_data): Change type of data.mem.offset to
-       off_t.
-       * data.c (gpgme_data_seek): Check dh->cbs->seek callback, not read
-       callback.  If SEEK_CUR, adjust the offset by the pending buffer
-       size.  Clear pending buffer on success.
-
-
-2004-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.m4: Add copyright notice.
-
-2004-08-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * passphrase.c (_gpgme_passphrase_status_handler): Always run the
-       status handler.
-
-2004-08-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (build_argv): Use --no-sk-comment, not --no-comment.
-
-2004-06-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * key.c (_gpgme_key_append_name): Make sure tail points to the
-       byte following the uid.
-       (_gpgme_key_add_sig): Likewise.  Don't use calloc, but malloc and
-       memset.
-
-2004-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * libgpgme.vers: Remove C-style comment, which is not supported by
-       older binutils.
-
-2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme-config.in (Options): Support --api-version.
-
-       * libgpgme.vers: List all gpgme symbols under version GPGME_1.0.
-
-       * decrypt.c (_gpgme_decrypt_status_handler): Fix last change.
-       * verify.c (parse_error): Likewise.
-
-       * verify.c (parse_error): Do not skip location of where token.
-
-       * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_REVKEYSIG.
-       * verify.c (_gpgme_verify_status_handler): Add handling of
-       GPGME_STATUS_REVKEYSIG.
-       (parse_trust): Likewise.
-
-2004-05-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_decrypt_result): New fields
-       wrong_key_usage and _unused.
-       * decrypt.c (_gpgme_decrypt_status_handler): Don't skip over
-       character after a matched string, as in a protocol error this
-       could skip over the trailing binary zero.
-       Handle decrypt.keyusage error notifications.
-
-       * gpgme.h (struct _gpgme_key): New member keylist_mode.
-       * keylist.c (keylist_colon_handler): Set the keylist_mode of KEY.
-
-2004-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_signature): Change member WRONG_KEY_USAGE
-       to unsigned int.  Same for member _unused.
-
-       * keylist.c (set_mainkey_trust_info): Rewritten.
-       (set_subkey_capability): Handle 'd' (disabled).
-       (set_mainkey_capability): Rewritten.
-
-2004-04-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.m4: Quote first argument to AC_DEFUN.
-
-2004-04-21  Werner Koch  <wk@gnupg.org>
-
-       * key.c (gpgme_key_unref): Allow passing NULL like free does.
-       The rule of least surprise.
-
-2004-04-15  Werner Koch  <wk@gnupg.org>
-
-       * verify.c (prepare_new_sig, _gpgme_verify_status_handler): Remove
-       unused result.signatures items.
-
-       * keylist.c (gpgme_get_key): Return an error if FPR is NULL.
-
-2004-04-08  Werner Koch  <wk@gnupg.org>
-
-       * verify.c (_gpgme_verify_status_handler): Ignore the error status
-       if we can't process it.
-       * decrypt-verify.c (decrypt_verify_status_handler): Backed out
-       yesterday's hack.  It is not any longer required.
-
-2004-04-07  Werner Koch  <wk@gnupg.org>
-
-       * decrypt-verify.c (decrypt_verify_status_handler): Hack to cope
-       with meaningless error codes from the verify status function.
-
-2004-04-05  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h: Add GPGME_STATUS_NEWSIG.
-
-       * verify.c (parse_error): Compare only the last part of the where
-       token.
-       (prepare_new_sig): New.
-       (parse_new_sig): Use prepare_new_sig when required.
-       (_gpgme_verify_status_handler): Handle STATUS_NEWSIG.
-
-       * engine-gpgsm.c (gpgsm_keylist_ext): Send with-validation
-       option.  Fixed pattern construction.
-       (status_handler): Add debugging output.
-
-2004-03-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_new): Protect _only_ tty related code with
-       isatty().  Submitted by Bernhard Herzog.
-
-2004-03-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_new): Protect all tty related code with
-       isatty().
-
-       * rungpg.c (gpg_cancel): Set GPG->fd_data_map to NULL after
-       releasing it.
-       * engine-gpgsm.c (gpgsm_cancel): Only call assuan_disconnect if
-       GPGSM->assuan_ctx is not NULL.  Set it to NULL afterwards.
-
-2004-03-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme-config.in: Do not emit include and lib directory for
-       prefix "/usr" or "".
-
-2004-03-03  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (gpgsm_export_ext): Properly insert a space
-       beween patterns.
-
-2004-02-18  Werner Koch  <wk@gnupg.org>
-
-       * gpgme-config.in: Ignore setting of --prefix.
-
-2004-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (gpg_cancel): New function.
-       (gpg_release): Call it here.
-       (_gpgme_engine_ops_gpg): Add it here.
-       * engine-gpgsm.c (gpgsm_cancel): Fix last change.
-
-2004-02-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_cancel): New function.
-       * engine-backend.h (struct engine_ops): New member cancel.
-       * engine.h (_gpgme_engine_cancel): New prototype.
-       * engine.c (_gpgme_engine_cancel): New function.
-       * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Add new member cancel.
-       (gpgsm_cancel): New function.
-       (gpgsm_release): Use it.
-       * rungpg.c (_gpgme_engine_ops_gpg): Add new member cancel.
-
-2004-02-17  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h: Add GPGME_KEYLIST_MODE_VALIDATE. 
-       * engine-gpgsm.c (gpgsm_keylist): Send this to gpgsm.
-
-2004-02-15  Werner Koch  <wk@gnupg.org>
-
-       * memrchr.c (memrchr): Fixed implementation.  Problem pointed out
-       by Adriaan de Groot.
-
-2004-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (build_argv): Use --no-comment, not --comment "".
-
-       * data-compat.c (gpgme_data_new_from_filepart): Call fseeko if
-       available.
-       * data-stream.c (stream_seek): Likewise.
-
-2004-01-16  Werner Koch  <wk@gnupg.org>
-
-       * conversion.c (_gpgme_map_gnupg_error): Handle numerical codes as
-       used by GnuPG 1.9.x
-
-2004-01-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_key_sig): Fix comment on REVOKED.
-
-2004-01-12  Werner Koch  <wk@gnupg.org>
-
-       * sign.c: Include util.h for prototype of _gpgme_parse_timestamp.
-
-2003-12-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (_GPGME_D_CLASS): Revert this change.
-       (struct _gpgme_key_sig): For C++ compilers, rename class
-       member to _obsolete_class.  Add new member sig_class.
-       (struct _gpgme_new_signature): Same here.
-       * key.c (gpgme_key_sig_get_ulong_attr): Use CERTSIG->sig_class,
-       not CERTSIG->class.
-       * keylist.c (keylist_colon_handler): Likewise for KEYSIG, but keep
-       setting KEYSIG->class, too.  Rename variable CLASS to SIG_CLASS.
-       * sign.c (parse_sig_created): Set SIG->sig_class.
-
-2003-12-22  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h (_GPGME_D_CLASS): Kludge for C++ compatibility without
-       changing the C API.
-
-2003-11-19  Werner Koch  <wk@gnupg.org>
-
-       * conversion.c (_gpgme_parse_timestamp): New.
-       (atoi_1, atoi_2, atoi_4): New.
-       * keylist.c (parse_timestamp): Removed. Changed all callers to use
-       the new function.
-       * verify.c (parse_valid_sig): Ditto.  Repalced the errno check.
-       * sign.c (parse_sig_created): Ditto.
-
-2003-10-31  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (parse_timestamp): Detect ISO 8601 timestamps and try
-       to convert them.
-
-2003-10-10  Marcus Brinkmann  <marcus@g10code.de>
-
-       * genkey.c (get_key_parameter): Make a copy of the key parameters.
-       Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
-
-2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-compat.c: Include <sys/time.h> before <sys/stat.h> for
-       broken systems.
-
-       * engine-gpgsm.c (map_assuan_error): If ERR is -1, return sensible
-       error.
-
-       * io.h (_gpgme_io_subsystem_init): New prototype.
-       * posix-io.c (_gpgme_io_subsystem_init): Add function.
-       (_gpgme_io_spawn): Do not fixup signal handler here.
-       * version.c (do_subsystem_inits): Call _gpgme_io_subsystem_init.
-
-       * debug.c (debug_init): Drop const qualifier from E.
-
-       * ath.h (struct ath_ops): Make ADDR argument of CONNECT prototype
-       const.
-       (ath_connect): Make ADDR argument const.
-       * ath-pthread.c (ath_connect): Likewise.
-       * ath-pth.c (ath_connect): Likewise.
-       * ath-compat.c (ath_connect): Likewise.
-       * ath.c (ath_connect): Likewise.
-
-       * ath.h [HAVE_SYS_SELECT_H]: Include <sys/select.h> for fd_set.
-       [!HAVE_SYS_SELECT_H]: Include <sys/time.h>.
-
-       * conversion.c (_gpgme_hextobyte): Drop "unsigned" from type of
-       SRC argument.
-       * util.h (_gpgme_hextobyte): Likewise for prototype.
-
-       * gpgme.h: Remove trailing comma in enum.
-
-       * rungpg.c: Do not include <time.h>, <sys/time.h>, <sys/types.h>,
-       <signal.h>, <fcntl.h>, or "unistd.h".
-
-2003-10-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-backend.h (struct engine_ops): Add argument TYPE.
-       * engine.c (_gpgme_engine_op_edit): Likewise.
-       * engine.h: Likewise.
-       * rungpg.c (gpg_edit): Likewise.  Use it.
-       * edit.c (edit_start): Likewise.  Pass it on.
-       (gpgme_op_edit_start, gpgme_op_edit): Likewise.
-       (gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.
-
-2003-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpg_strerror_r): Change prototype to match
-       gpg_strerror_r change.
-       * error.c (gpg_strerror_r): Likewise, also update implementation.
-
-       * gpgme.c (gpgme_hash_algo_name): Change name of RMD160 to
-       RIPEMD160, name of TIGER to TIGER192, name of CRC32-RFC1510 to
-       CRC32RFC1510, and name of CRC24-RFC2440 to CRC24RFC2440.
-
-2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add prototype for gpgme_set_locale.
-
-       * gpgme.h: Define macro _GPGME_INLINE depending on the compiler
-       characteristics and use that instead __inline__.
-
-       * context.h (struct gpgme_context): New members lc_ctype and
-       lc_messages.
-       * gpgme.c: Include <locale.h>.
-       (def_lc_lock, def_lc_ctype, def_lc_messages): New static
-       variables.
-       (gpgme_set_locale): New function.
-       * engine.c (_gpgme_engine_new): Add arguments lc_ctype and
-       lc_messages.
-       * engine.h (_gpgme_engine_new): Likewise.
-       * engine-gpgsm.c (gpgsm_new): Likewise.
-       * rungpg.c (gpg_new): Likewise.
-       * engine-backend.h (struct engine_ops): Likewise to NEW.
-       * op-support.c (_gpgme_op_reset): Likewise to invocation of
-       _gpgme_engine_new.
-
-2003-09-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_strerror_r): New prototype.
-       * error.c (gpgme_strerror_r): New function.
-
-       * get-env.c: New file.
-       * util.h (_gpgme_getenv): Add prototype.
-       * Makefile.am (libgpgme_real_la_SOURCES): Add get-env.c.
-       * rungpg.c (build_argv): Use _gpgme_getenv.
-       * debug.c (debug_init): Likewise.
-       * engine-gpgsm.c (gpgsm_new): Likewise.
-       (gpgsm_new): Use ttyname_r.
-       * w32-io.c (_gpgme_io_spawn): Disable debugging for now.
-
-2003-09-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme-config.in: Use $libdir, not @libdir@, for the echo
-       command.
-
-       * gpgme-config.in: Rewritten.
-       * gpgme.m4: Rewritten.
-
-2003-08-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,
-       ath-compat.c, ath-pth-compat.c and ath-pthread-compat.c) have been
-       updated to have better thread support, and the Makefile.am was
-       changed to reflect that.
-
-       * util.h [!HAVE_FOPENCOOKIE]: Remove fopencookie declaration.
-       * engine-gpgsm.c (gpgsm_assuan_simple_command): Set ERR to return
-       value of status_fnc.
-       * rungpg.c (start): Return SAVED_ERRNO, not errno.
-
-2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (start): Use saved_errno instead errno.
-
-2003-08-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * funopen.c, putc_unlocked.c, isascii.c, memrchr.c: New files.
-       * fopencookie.c: File removed.
-
-2003-08-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme-config.in: Put gpg-error related flags after gpgme's.
-
-2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_new_signature): Rename member CLASS to
-       _OBSOLETE_CLASS, add member CLASS with type unsigned int.
-       * sign.c (parse_sig_created): Also set SIG->_unused_class for
-       backward compatibility.
-
-2003-08-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (parse_new_sig): Fix status parsing case.
-
-2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_subkey): Add flag CAN_AUTHENTICATE.
-       Lower _UNUSED to 23 bits.
-       (struct _gpgme_key): Likewise.
-       * keylist.c (set_mainkey_capability): Support 'a' and 'A'.
-       (set_subkey_capability): Support 'a'.
-
-       * keylist.c (gpgme_get_key): Check if there is more than one key
-       listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
-
-       * util.h (_gpgme_decode_c_string): Change type of LEN argument to
-       size_t.
-       (_gpgme_decode_percent_string): Likewise.
-       * conversion.c (_gpgme_decode_c_string): Likewise.
-       (_gpgme_decode_percent_string): Likewise.
-       (_gpgme_map_gnupg_error): Change type of I to unsigned int.
-       * signers.c (gpgme_signers_clear): Likewise.
-       (gpgme_signers_enum): New unsigned variable SEQNO, set to SEQ.
-       Use SEQNO instead SEQ.
-       * wait.c (fd_table_put): Change type of I and J to unsigned int.
-       * wait-global.c (_gpgme_wait_global_event_cb): Change type of IDX
-       to unsigned int.
-       (gpgme_wait): Change type of I and IDX to unsigned int.
-       * wait-private.c (_gpgme_wait_on_condition): Change type of IDX
-       and I to unsigned int.
-       * posix-io.c (_gpgme_io_close): Cast return value of macro DIM to
-       int to suppress gcc warning.
-       (_gpgme_io_set_close_notify): Likewise.
-       (_gpgme_io_select): Change type of I to unsigned int.
-       * engine.c (gpgme_get_engine_info): Change type of PROTO to
-       unsigned int.
-       * wait-user.c (_gpgme_user_io_cb_handler): Change type of IDX and
-       I to unsigned int.
-
-2003-07-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * decrypt-verify.c (decrypt_verify_status_handler): Expand silly
-       and wrong expression.
-       * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
-       * encrypt.c (encrypt_sym_status_handler): Likewise.
-       * sign.c (sign_status_handler): Likewise.
-       * verify.c (verify_status_handler): Likewise.
-       * decrypt.c (decrypt_status_handler): Likewise.
-
-       * engine.c (gpgme_get_engine_info): Initialize NULL.
-
-2003-07-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme-config.in (gpg_error_libs): Quote GPG_ERROR_CFLAGS and
-       GPG_ERROR_LIBS when setting the corresponding variables.
-       Reported by Stéphane Corthésy.
-
-2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (set_recipients): Move declaration of NEWLEN to
-       the beginning of the block.
-
-2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-mem.c (mem_write): Copy original buffer content.
-
-2003-06-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_user_ids_release, gpgme_user_ids_append): Remove
-       prototypes.
-
-2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@.
-       * gpgme-config.in (gpg_error_libs, gpg_error_cflags): New variables.
-       Print them.
-
-       * op-support.c (_gpgme_parse_inv_userid): Rename to
-       _gpgme_parse_inv_recp and change to new datatype.
-       * ops.h (_gpgme_parse_inv_key): Fix prototype.
-       * gpgme.h (struct _gpgme_invalid_user_id): Rename to
-       __gpgme_invalid_key.  Rename field ID to KEY.
-       (gpgme_invalid_user_id_t): Rename to gpgme_invalid_key_t.
-       (struct _gpgme_op_encrypt_result): Here, too.
-       (struct _gpgme_op_sign_result): Likewise.
-       * encrypt.c (struct op_data): Likewise.
-       (release_op_data): Likewise.
-       * sign.c (struct op_data): Likewise.
-       (release_op_data): Likewise.
-
-       * posix-io.c (_gpgme_io_read): Save errno across debug calls.
-       (_gpgme_io_write): Likewise.
-       (_gpgme_io_pipe): Likewise.
-       (_gpgme_io_select): Likewise.
-
-       * rungpg.c (struct engine_gpg): Remove arg_error.
-       (add_arg): Don't set arg_error.
-       (add_data): Likewise.
-       (start): Don't check arg_error.
-       (gpg_new): Check return value of add_arg.
-       * verify.c (parse_notation): Free allocated memory at error.
-
-2003-06-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       Everywhere: Use libgpg-error error codes.
-
-       * Makefile.am (EXTRA_DIST): Remove mkerrors.
-       (BUILT_SOURCES): Remove errors.c.
-       (MOSTLYCLEANFILES): Likewise.
-       (libgpgme_la_SOURCES): Likewise.  Add error.c.
-       (errors.c): Remove target.
-       * mkerrors: File removed.
-       * error.c: New file.
-
-       * gpgme.h (gpgme_error_t): Change to type gpg_error_t.
-       (gpgme_err_code_t, gpgme_err_source_t): New types.
-       (gpgme_err_code, gpgme_err_source, gpgme_error, gpgme_err_make):
-       New static inline functions.
-       (gpgme_strsource, gpgme_err_code_from_errno,
-       gpgme_err_code_to_errno, gpgme_err_make_from_errno,
-       gpgme_error_from_errno): New prototypes.
-
-2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_op_export_start): Change second arg to const char *.
-       (gpgme_op_export): Likewise.
-       (gpgme_op_export_ext_start): New prototype.
-       (gpgme_op_export_ext): Likewise.
-       * engine.h: Likewise for _gpgme_engine_op_export and
-       _gpgme_engine_op_export_ext.
-       * engine-backend.h (struct engine_ops): Change second argument of
-       prototype of export to const char *, and add reserverd int as
-       third argument.  Add prototype for export_ext.
-       * engine.c (_gpgme_engine_op_export_ext): New function.
-       (_gpgme_engine_op_export): Change second argument of prototype of
-       export to const char *, and add reserverd int as third argument.
-       * rungpg.c (gpg_export): Change second argument of prototype of
-       export to const char *, and add reserverd int as third argument.
-       (gpg_export_ext): New function.
-       (gpg_keylist_ext): Break loop at error.
-       (_gpgme_engine_ops_gpg): Add gpg_export_ext.
-       * engine-gpgsm.c (gpgsm_export): Change second argument of
-       prototype of export to const char *, and add reserverd int as
-       third argument.
-       (gpgsm_export_ext): New function.
-       (_gpgme_engine_ops_gpgsm): Add gpgsm_export_ext.
-       * export.c (export_start): Change second argument of prototype of
-       export to const char *, and add reserverd int as third argument.
-       (gpgme_op_export_start): Likewise.
-       (export_ext_start): New function.
-       (gpgme_op_export_ext_start): Likewise.
-       (gpgme_op_export_ext): Likewise.
-
-       * gpgme.h (gpgme_keylist_mode_t): New type for anonymous enum.
-       (gpgme_sigsum_t): New type for anonymous enum.
-
-       * encrypt-sign.c (encrypt_sign_start): Check for errors earlier,
-       and return an error if RECP is not set.
-
-       * Makefile.am (libgpgme_la_SOURCES): Remove user-id.c.
-       * user-id.c: Remove file.
-       * ops.h: Remove prototype for _gpgme_user_ids_all_valid.
-       * gpgme.h (gpgme_encrypt_flags_t): New type.
-       (gpgme_op_encrypt_start): Change second parameter to type
-       gpgme_key_t[], and add third parameter.
-       (gpgme_op_encrypt): Likewise.
-       (gpgme_op_encrypt_sign_start): Likewise.
-       (gpgme_op_encrypt_sign): Likewise.
-       * encrypt.c (encrypt_start): Likewise.
-       (gpgme_op_encrypt_start): Likewise.
-       (gpgme_op_encrypt): Likewise.  Pass flags to engine.
-       * encrypt-sign.c (encrypt_sign_start): Likewise.
-       (gpgme_op_encrypt_sign_start): Likewise.
-       (gpgme_op_encrypt_sign): Likewise.
-       * engine-backend.h (struct engine_ops): Likewise for prototypes of
-       encrypt and encrypt_sign.
-       * engine.h: Likewise for prototypes of _gpgme_engine_op_encrypt
-       and _gpgme_engine_op_encrypt_sign.
-       * engine.c (_gpgme_engine_op_encrypt): Likewise.
-       (_gpgme_engine_op_encrypt_sign): Likewise.
-       * rungpg.c (gpg_encrypt): Likewise.
-       (gpg_encrypt_sign): Likewise.
-       * rungpg.c (gpg_encrypt): Check flags for always trust option.
-       * engine-gpgsm.c (gpgsm_encrypt): Likewise.
-       (set_recipients): Rewritten to use keys instead user IDs.
-       * rungpg.c (append_args_from_recipients): Rewritten to use keys
-       instead user IDs.
-       * encrypt.c (_gpgme_encrypt_status_handler): Change errors
-       returned to GPGME_Invalid_Key and GPGME_General_Error.
-
-2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c: Rename GpgsmObject to engine_gpgsm_t.
-       (struct gpgsm_object_s): Rename to struct engine_gpgsm.
-       * rungpg.c: Rename GpgObject to engine_gpg_t.
-       (struct gpg_object_s): Rename to struct engine_gpg.
-
-       * context.h (struct gpgme_context): Change EngineObject to
-       engine_object_t.
-       (enum ctx_op_data_type): Rename to ctx_op_data_id_t.
-       (ctx_op_data_t): New type.
-       (struct gpgme_context): Use it.
-       * ops.h (_gpgme_op_data_lookup): Use new type name.
-       * op-support.c (_gpgme_op_data_lookup): Likewise.
-       * engine.c: Rename EngineObject to engine_t in the file.  Also
-       EngineStatusHandler to engine_status_handler_t,
-       EngineCommandHandler to engine_command_handler_t and
-       EngineColonLineHandler to engine_colon_line_handler.    
-       * rungpg.c (start): Likewise.
-       * engine-gpgsm.c: Likewise.
-       * engine-backend.h (struct engine_ops): Likewise
-       * engine.h (struct engine_object_s): Rename to struct engine.
-       (EngineObject): Rename to engine_t.  Also everywhere else in the
-       file.
-       (EngineStatusHandler): Rename to engine_status_handler_t.
-       (EngineColonLineHandler): Rename to engine_colon_line_handler_t.
-       (EngineCommandHandler): Rename to engine_command_handler_t.
-
-       * engine-gpgsm.c (gpgsm_export): Fix bug in last change.
-
-       * Makefile.am (libgpgme_la_SOURCES): Remove recipient.c, add
-       user-id.c.
-       * gpgme.h (gpgme_recipients_t): Removed.
-       (gpgme_recipients_new, gpgme_recipients_release,
-       gpgme_recipients_add_name,
-       gpgme_recipients_add_name_with_validity, gpgme_recipients_count,
-       gpgme_recipients_enum_open, gpgme_recipients_enum_read,
-       gpgme_recipients_enum_close): Removed.
-       (gpgme_op_encrypt, gpgme_op_encrypt_start, gpgme_op_encrypt_sign,
-       gpgme_op_encrypt_sign_start, gpgme_op_export_start,
-       gpgme_op_export): Change second argument to gpgme_user_id_t.
-       (gpgme_user_ids_release): New prototype.
-       (gpgme_user_ids_append): Likewise.
-       * ops.h (_gpgme_recipients_all_valid): Remove.
-       (_gpgme_user_ids_all_valid): Add.
-       * context.h (struct gpgme_recipients): Removed.
-       * user-id.c: New file.
-       * recipient.c: Removed file.
-       * rungpg.c (append_args_from_recipients): Change last arg to
-       gpgme_user_id_t.  Reimplement.
-       (gpg_encrypt): Change second arg to gpgme_user_id_t.
-       (gpg_encrypt_sign): Likewise.
-       (gpg_export): Likewise.  Rewrite user ID list code.
-       * engine.c (_gpgme_engine_op_encrypt): Change second arg to
-       gpgme_user_id_t.
-       (_gpgme_engine_op_encrypt_sign): Likewise.
-       (_gpgme_engine_op_export): Likewise.
-       * engine.h (_gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
-       _gpgme_engine_op_export): Likewise.
-       * engine-gpgsm.c (set_recipients): Likewise.  Rewrite loop code.
-       (gpgsm_encrypt): Likewise.
-       (gpgsm_export): Likewise.
-       * engine-backend.h (struct engine_ops): Likewise for members
-       ENCRYPT, ENCRYPT_SIGN and EXPORT.
-       * export.c (export_start, gpgme_op_export_start, gpgme_op_export):
-       Likewise.
-       * encrypt.c (encrypt_start): Likewise.  Don't check for count of
-       recipients.
-       (gpgme_op_encrypt_start): Likewise.
-       (gpgme_op_encrypt): Likewise.
-       * encrypt-sign.c (encrypt_sign_start): Likewise.
-       (gpgme_op_encrypt_sign): Likewise.
-       (gpgme_op_encrypt_sign_start): Likewise.
-
-2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (struct _gpgme_op_import_result): Add skipped_new_keys.
-       * import.c (parse_import_res): Add skipped_new_keys parser.
-
-       * op-support.c (_gpgme_parse_inv_userid): Add missing break
-       statements.
-       * encrypt.c (gpgme_op_encrypt): Use gpgme_error_t instead of int.
-
-2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * encrypt.c (gpgme_op_encrypt_result): Use intermediate variable
-       HOOK to avoid compiler warning.  Don't ask, you don't want to know.
-       (_gpgme_encrypt_status_handler): Likewise.
-       (_gpgme_op_encrypt_init_result): Likewise.
-       * decrypt.c (gpgme_op_decrypt_result): Likewise.
-       (_gpgme_decrypt_status_handler): Likewise.
-       (_gpgme_op_decrypt_init_result): Likewise.
-       * verify.c (gpgme_op_verify_result): Likewise.
-       (_gpgme_verify_status_handler): Likewise.
-       (_gpgme_op_verify_init_result): Likewise.
-       * edit.c (edit_status_handler): Likewise.
-       (command_handler): Likewise.
-       (edit_start): Likewise.
-       * genkey.c (gpgme_op_genkey_result): Likewise.
-       (genkey_status_handler): Likewise.
-       (genkey_start): Likewise.
-       * import.c (gpgme_op_import_result): Likewise.
-       (import_status_handler): Likewise.
-       (_gpgme_op_import_start): Likewise.
-       * trustlist.c (gpgme_op_trustlist_next): Likewise.
-       (_gpgme_op_trustlist_event_cb): Likewise.
-       (gpgme_op_trustlist_start): Likewise.
-       * keylist.c (gpgme_op_keylist_result): Likewise.
-       (keylist_colon_handler): Likewise.
-       (keylist_status_handler): Likewise.
-       (_gpgme_op_keylist_event_cb): Likewise.
-       (gpgme_op_keylist_start): Likewise.
-       (gpgme_op_keylist_ext_start): Likewise.
-       (gpgme_op_keylist_next): Likewise.
-       * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
-       (_gpgme_passphrase_command_handler_internal): Likewise.
-       * sign.c (gpgme_op_sign_result): Likewise.
-       (_gpgme_sign_status_handler): Likewise.
-       (_gpgme_op_sign_init_result): Likewise.
-
-       * passphrase.c (_gpgme_passphrase_command_handler_internal): Fix
-       access to pointer type.
-
-2003-05-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.h (EngineCommandHandler): Change last argument to int fd.
-       * gpgme.h (gpgme_passphrase_cb_t): Rewritten to take parts of the
-       description and fd.
-       (gpgme_edit_cb_t): Change last argument to int fd.
-       * ops.h (_gpgme_passphrase_command_handler_internal): New prototype.
-       * passphrase.c: Include <assert.h>.
-       (op_data_t): Rename userid_hint to uid_hint, remove last_pw_handle.
-       (release_op_data): Check values before calling free.
-       (_gpgme_passphrase_status_handler): Likewise.
-       (_gpgme_passphrase_command_handler_internal): New function.
-       (_gpgme_passphrase_command_handler): Rewritten.
-       * edit.c (edit_status_handler): Pass -1 as fd argument.
-       (command_handler): Update prototype.  New variable processed.  Use
-       it to store return value of
-       _gpgme_passphrase_command_handler_internal which is now used
-       instead _gpgme_passphrase_command_handler.  Use it also to check
-       if we should call the user's edit function.  Pass fd to user's
-       edit function.
-       * rungpg.c (struct gpg_object_s): Change type of cmd.cb_data to
-       void *.
-       (gpg_release): Check value before calling free.  Do not release
-       cmd.cb_data.
-       (command_cb): Function removed.
-       (command_handler): New function.  Thus we don't use a data object
-       for command handler stuff anymore, but handle it directly.  This
-       allows proper error reporting (cancel of passphrase requests, for
-       example).  Also all callbacks work via direct writes to the file
-       descriptor (so that passphrases are not kept in insecure memory).
-       (gpg_set_command_handler): Rewritten to use even more ugly hacks.
-       (read_status): Check cmd.keyword before calling free.  Install
-       command_handler as the I/O callback handler with GPG as private
-       data.
-
-       * rungpg.c (gpg_new): Add --enable-progress-filter to gpg
-       invocation.
-       * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Rename to
-       decrypt_verify_start.
-       (gpgme_op_decrypt_verify_start): Call decrypt_verify_start.
-       (gpgme_op_decrypt_verify): Likewise.
-       * verify.c (verify_status_handler): New function that also calls
-       progress status handler.
-       (_gpgme_op_verify_start): Set status handler to verify_status_handler.
-       Rename to (verify_start).
-       (gpgme_op_verify_start): Call verify_start.
-       (gpgme_op_verify): Likewise.
-       * encrypt.c (encrypt_status_handler): New function.
-       (_gpgme_encrypt_sym_status_handler): Call progress status handler.
-       Make static.  Rename to encrypt_sym_status_handler.
-       (encrypt_start): Set status handler to encrypt_sym_status_handler
-       or encrypt_status_handler.
-       * sign.c (sign_status_handler): New function.
-       (sign_start): Set status handler to sign_status_handler.
-       * decrypt.c (decrypt_status_handler): New function that also calls
-       progress status handler.
-       (decrypt_start): Set status handler to decrypt_status_handler.
-       * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
-       * decrypt-verify.c (decrypt_verify_status_handler): Call
-       _gpgme_progress_status_handler.
-
-       * conversion.c (_gpgme_decode_c_string): Add missing break
-       statement.
-
-       * recipient.c (gpgme_recipients_add_name_with_validity): Add one
-       to buffer to allocate.
-
-2003-05-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (parse_new_sig): Fix ERRSIG case.
-       Submitted by Benjamin Lee <benjaminlee@users.sf.net>.
-
-2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: The following types are renamed.  The old name is kept
-       as a deprecated typedef.
-       (GpgmeCtx): Rename to gpgme_ctx_t.
-       (GpgmeData): Rename to gpgme_data_t.
-       (GpgmeRecipients): Rename to gpgme_recipients_t.
-       (GpgmeError): Rename to gpgme_error_t.
-       (GpgmeDataEncoding): Rename to gpgme_data_encoding_t.
-       (GpgmePubKeyAlgo): Rename to gpgme_pubkey_algo_t.
-       (GpgmeHashAlgo): Rename to gpgme_hash_algo_t.
-       (GpgmeSigStat): Rename to gpgme_sig_stat_t.
-       (GpgmeSigMode): Rename to gpgme_sig_mode_t.
-       (GpgmeAttr): Rename to gpgme_attr_t.
-       (GpgmeValidity): Rename to gpgme_validity_t.
-       (GpgmeProtocol): Rename to gpgme_protocol_t.
-       (GpgmeStatusCode): Rename to gpgme_status_code_t.
-       (GpgmeEngineInfo): Rename to gpgme_engine_info_t.
-       (GpgmeSubkey): Rename to gpgme_subkey_t.
-       (GpgmeKeySig): Rename to gpgme_keysig_t.
-       (GpgmeUserID): Rename to gpgme_user_id_t.
-       (GpgmePassphraseCb): Rename to gpgme_passphrase_cb_t.
-       (GpgmeProgressCb): Rename to gpgme_progress_cb_t.
-       (GpgmeEditCb): Rename to gpgme_edit_cb_t.
-       (GpgmeIOCb): Rename to gpgme_io_cb_t.
-       (GpgmeRegisterIOCb): Rename to gpgme_register_io_cb_t.
-       (GpgmeRemoveIOCb): Rename to gpgme_remove_io_cb_t.
-       (GpgmeEventIO): Rename to gpgme_event_io_t.
-       (GpgmeEventIOCb): Rename to gpgme_event_io_cb_t.
-       (GpgmeIOCbs): Rename to gpgme_io_cbs.
-       (gpgme_io_cbs_t): New type.
-       (GpgmeDataReadCb): Rename to gpgme_data_read_cb_t.
-       (GpgmeDataWriteCb): Rename to gpgme_data_write_cb_t.
-       (GpgmeDataSeekCb): Rename to gpgme_data_seek_cb_t.
-       (GpgmeDataReleaseCb): Rename to gpgme_data_release_cb_t.
-       (GpgmeDataCbs): Rename to gpgme_data_cbs.
-       (gpgme_data_cbs_t): New type.
-       (GpgmeInvalidUserID): Rename to gpgme_invalid_user_id_t.
-       (GpgmeEncryptResult): Rename to gpgme_encrypt_result_t.
-       (GpgmeDecryptResult): Rename to gpgme_decrypt_result_t.
-       (GpgmeNewSignature): Rename to gpgme_new_signature_t.
-       (GpgmeSignResult): Rename to gpgme_sign_result_t.
-       (GpgmeSigNotation): Rename to gpgme_sig_notation_t.
-       (GpgmeSignature): Rename to gpgme_signature_t.
-       (GpgmeVerifyResult): Rename to gpgme_verify_result_t.
-       (GpgmeImportStatus): Rename to gpgme_import_status_t.
-       (GpgmeImportResult): Rename to gpgme_import_result_t.
-       (GpgmeGenKeyResult): Rename to gpgme_genkey_result_t.
-       (GpgmeKeyListResult): Rename to gpgme_keylist_result_t.
-       (GpgmeTrustItem): Rename to gpgme_trust_item_t.
-       * gpgme.h (gpgme_deprecated_error_t): New type, swallowing macros
-       GPGME_No_Recipients, GPGME_Invalid_Recipient and
-       GPGME_No_Passphrase.
-       * data.h (struct gpgme_data_s): Rename to struct gpgme_data.
-       * context.h (struct gpgme_context_s): Rename to struct
-       gpgme_context.
-       (struct gpgme_recipients_s): Rename to gpgme_recipients.
-
-2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (finish_key): Clear OPD->tmp_uid.
-
-2003-05-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (_gpgme_verify_status_handler): Return GPGME_No_Data
-       for NODATA status without signatures.
-
-2003-05-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * key.c (_gpgme_key_append_name): Use decoded string to parse user id.
-       (_gpgme_key_add_sig): Likewise.
-
-2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * context.h (struct gpgme_context_s): Remove member op_info.
-
-       * key.c (_gpgme_key_add_sig): Initialize SIG->uid.
-
-       * gpgme.h (GpgmeError): Add deprecated values for
-       GPGME_Invalid_Type and GPGME_Invalid_Mode.
-
-2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_get_op_info): Remove prototype.
-       * ops.h (_gpgme_set_op_info,
-       _gpgme_data_release_and_return_string, _gpgme_data_get_as_string,
-       _gpgme_data_append, _gpgme_data_append_string,
-       _gpgme_data_append_string_for_xml, _gpgme_data_append_for_xml,
-       _gpgme_data_append_percentstring_for_xml): Likewise.
-       (_gpgme_progress_status_handler): Change first arg to void *.
-       * progress.c (_gpgme_progress_status_handler): Likewise.
-       * conversion.c: Do not include <string.h>, <errno.h>, <ctype.h>,
-       and <sys/types.h>, but <string.h>.
-       (_gpgme_data_append): Remove function.
-       (_gpgme_data_append_string): Likewise.
-       (_gpgme_data_append_for_xml): Likewise.
-       (_gpgme_data_append_string_for_xml): Likewise.
-       (_gpgme_data_append_percentstring_for_xml): Likewise.
-       * data-mem.c (_gpgme_data_get_as_string): Likewise.
-       (_gpgme_data_release_and_return_string): Likewise.
-       * gpgme.c (gpgme_get_op_info): Likewise.
-       (_gpgme_set_op_info): Likewise.
-
-       * gpgme.h (struct _gpgme_key): New structure.
-       (GpgmeKey): Define using _gpgme_key.
-       (struct _gpgme_subkey): New structure.
-       (GpgmeSubKey): New type.
-       (struct _gpgme_key_sig): New structure.
-       (GpgmeKeySig): New type.
-       (struct _gpgme_user_id): New structure.
-       (GpgmeUserID): New type.
-       (struct _gpgme_op_keylist_result): New structure.
-       (GpgmeKeyListResult): New type.
-       (gpgme_op_keylist_result): New function.
-       (gpgme_key_get_as_xml): Remove prototype.
-       * context.h (struct gpgme_context_s): Remove members tmp_key,
-       tmp_uid, key_cond and key_queue.
-       (struct key_queue_item_s): Remove structure.
-       (struct user_id_s): Remove structure.
-       (struct gpgme_recipients_s): Replace with simple
-       GpgmeUserID list.
-       * gpgme.c (gpgme_release): Do not release CTX->tmp_key.
-       * ops.h (_gpgme_key_add_subkey, _gpgme_key_append_name,
-       _gpgme_key_add_sig, _gpgme_trust_item_new): New prototypes.
-       * rungpg.c (command_cb): Return GpgmeError instead int.
-       New variable ERR.  Use it to hold return value of cmd handler.
-       (gpg_delete): Access fingerprint of key directly.
-       (append_args_from_signers): Likewise.
-       (gpg_edit): Likewise.
-       (append_args_from_recipients): Use GpgmeUserID for recipient list.
-       * engine-gpgsm.c: Do not include "key.h".
-       (gpgsm_delete): Access fingerprint of key directly.
-       (gpgsm_sign): Likewise.
-       (set_recipients): Use GpgmeUserID for recipients.  Invert invalid
-       user ID flag.
-       * key.h: File removed.
-       * key.c: Completely reworked to use exposed GpgmeKey data types.
-       * keylist.c: Likewise.
-       * recipient.c: Completely reworked to use GpgmeUserID.
-
-2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_get_key): Remove force_update argument.
-       * key-cache.c: File removed.
-       * Makefile.am (libgpgme_la_SOURCES): Remove key-cache.c.
-       * ops.h (_gpgme_key_cache_add, _gpgme_key_cache_get): Remove
-       prototypes.
-       * keylist.c (_gpgme_op_keylist_event_cb): Don't call
-       _gpgme_key_cache_add.
-       (gpgme_get_key): New function.
-       * verify.c (gpgme_get_sig_key): Remove last argument to
-       gpgme_get_key invocation.
-
-       * gpgme.h (struct _gpgme_trust_item): New structure.
-       (GpgmeTrustItem): New type.
-       (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
-       * context.h (struct trust_queue_item_s): Remove structure.
-       (struct gpgme_context_s): Remove trust_queue member.
-       * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
-       * trust-item.c: New file.
-       * trustlist.c: Do not include <stdio.h> or <time.h>, but
-       "gpgme.h".
-       (struct trust_queue_item_s): Change to new type op_data_t.
-       (trust_status_handler): Change first argument to void *.
-       (trust_colon_handler): Likewise.
-       (_gpgme_op_trustlist_event_cb): Use op_data_t type.
-       (gpgme_op_trustlist_start): Use op_data_t and rework error
-       handling.
-       (gpgme_op_trustlist_next): Use op_data_t.
-       (gpgme_trust_item_release): Remove function.
-       (gpgme_trust_item_get_string_attr): Likewise.
-       (gpgme_trust_item_get_int_attr): Likewise.
-
-       * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
-       for bad signatures.
-
-2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * context.h: Remove OPDATA_VERIFY_COLLECTING.
-       (struct gpgme_context_s): Remove member notation.
-       * gpgme.h: Make enum for GPGME_KEYLIST_MODE_* values.
-
-       * gpgme.h (struct _gpgme_sig_notation): New structure.
-       (GpgmeSigNotation): New type.
-       (struct _gpgme_signature): New structure.
-       (GpgmeSignature): New type.
-       (struct _gpgme_op_verify_result): New structure.
-       (GpgmeVerifyResult): New type.
-       (gpgme_op_verify_result): New prototype.
-       (gpgme_get_notation): Remove prototype.
-       * ops.h (_gpgme_op_verify_init_result): New prototype.
-       (_gpgme_verify_status_handler): Change first argument to void *.
-       * util.h (_gpgme_decode_percent_string, _gpgme_map_gnupg_error):
-       New prototypes.
-       * conversion.c (_gpgme_decode_percent_string): New function.
-       (gnupg_errors): New static global.
-       (_gpgme_map_gnupg_error): New function.
-       * gpgme.c (gpgme_release): Don't release CTX->notation.
-       (gpgme_get_notation): Remove function.
-       * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Call
-       _gpgme_op_verify_init_result.
-       * verify.c: Do not include <stdio.h>, <assert.h> and "key.h", but
-       do include "gpgme.h".
-       (struct verify_result): Replace with ...
-       (op_data_t): ... this type.
-       (release_verify_result): Remove function.
-       (release_op_data): New function.
-       (is_token): Remove function.
-       (skip_token): Remove function.
-       (copy_token): Remove function.
-       (gpgme_op_verify_result): New function.
-       (calc_sig_summary): Rewritten.
-       (finish_sig): Remove function.
-       (parse_new_sig): New function.
-       (parse_valid_sig): New function.
-       (parse_notation): New function.
-       (parse_trust): New function.
-       (parse_error): New function.
-       (_gpgme_verify_status_handler): Rewritten.  Change first argument
-       to void *.
-       (_gpgme_op_verify_start): Rework error handling.  Call
-       _gpgme_op_verify_init_result.
-       (gpgme_op_verify): Do not release or clear CTX->notation.
-       (gpgme_get_sig_status): Rewritten.
-       (gpgme_get_sig_string_attr): Likewise.
-       (gpgme_get_sig_ulong_attr): Likewise.
-       (gpgme_get_sig_key): Likewise.
-
-       * gpgme.h (struct _gpgme_op_decrypt_result): New structure.
-       (GpgmeDecryptResult): New type.
-       (gpgme_op_decrypt_result): New prototype.
-       * ops.h (_gpgme_op_decrypt_init_result): New prototype.
-       (_gpgme_decrypt_status_handler): Fix prototype.
-       (_gpgme_decrypt_start): Remove prototype.
-       * decrypt-verify.c: Do not include <stdio.h>, <stdlib.h>,
-       <string.h> and <assert.h>, "util.h" and "context.h", but
-       "gpgme.h".
-       (decrypt_verify_status_handler): Change first argument to void *,
-       and rework error handling.
-       (_gpgme_op_decrypt_verify_start): New function.
-       (gpgme_op_decrypt_verify_start): Rewrite using
-       _gpgme_op_decrypt_verify_start.
-       (gpgme_op_decrypt_verify): Likewise.
-       * decrypt.c: Include <string.h>, "gpgme.h" and "util.h".
-       (struct decrypt_result): Change to typedef op_data_t, rewritten.
-       (is_token): Remove function.
-       (release_op_data): New function.
-       (skip_token): Remove function.
-       (gpgme_op_decrypt_result): New function.
-       (_gpgme_decrypt_status_handler): Change first argument to void *.
-       Rework error handling.
-       (_gpgme_decrypt_start): Rename to ...
-       (decrypt_start): ... this.  Call _gpgme_op_decrypt_init_result.
-       (_gpgme_op_decrypt_init_result): New function.
-       (gpgme_op_decrypt_start): Use decrypt_start.
-       (gpgme_op_decrypt): Likewise.
-
-2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * encrypt-sign.c: Do not include <stddef.h>, <stdio.h>,
-       <stdlib.h>, <string.h>, <assert.h> and "util.h", but "gpgme.h".
-       (_gpgme_op_encrypt_sign_start): Rename to ...
-       (encrypt_sign_start): ... this.
-       (gpgme_op_encrypt_sign_start): Use encrypt_sign_start, not
-       _gpgme_op_encrypt_sign_start.
-       (gpgme_op_encrypt_sign): Likewise.
-
-       * gpgme.h (GpgmeEncryptResult): New data type.
-       (gpgme_op_encrypt_result): New prototype.
-       * ops.h (_gpgme_op_encrypt_init_result): New prototype.
-       (_gpgme_op_encrypt_status_handler): Fix prototype.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
-       _gpgme_op_encrypt_init_result.
-       * encrypt.c: Do not include <stdio.h>, <assert.h>, "util.h" and
-       "wait.h".  Include <errno.h> and "gpgme.h".
-       (SKIP_TOKEN_OR_RETURN): Remove macro.
-       (struct encrypt_result): Rename to ...
-       (op_data_t): ... new data type.  Rewrite for user result data.
-       (append_xml_encinfo): Remove function.
-       (release_op_data): New function.
-       (gpgme_op_encrypt_result): New function.
-       (_gpgme_op_encrypt_status_handler): Change first argument to void *.
-       Rewrite result parsing.
-       (_gpgme_op_encrypt_sym_status_handler): Change first argument to
-       void *.
-       (_gpgme_op_encrypt_init_result): New function.
-       (_gpgme_op_encrypt_start): Rename to ...
-       (encrypt_start): ... this.
-       (gpgme_op_encrypt_start): Use encrypt_start, not
-       gpgme_op_encrypt_start.
-       (gpgme_op_encrypt): Likewise.
-
-       * gpgme.h (GpgmePubKeyAlgo, GpgmeHashAlgo, GpgmeInvalidUserID,
-       GpgmeNewSignature, GpgmeSignResult): New data types.
-       (gpgme_op_sign_result, gpgme_pubkey_algo_name,
-       gpgme_hash_algo_name): New prototypes.
-       * gpgme.c (gpgme_pubkey_algo_name): New function.
-       (gpgme_hash_algo_name): Likewise.
-       * ops.h (_gpgme_parse_inv_userid, _gpgme_op_sign_init_result): New
-       prototype.
-       (_gpgme_op_sign_status_handler): Fix prototype.
-       * op-support.c: Include <errno.h> and <string.h>.
-       (_gpgme_parse_inv_userid): New function.
-       * sign.c: Include <errno.h> and "gpgme.h", but not <stdio.h>,
-       <assert.h> and "util.h".
-       (SKIP_TOKEN_OR_RETURN): Remove macro.
-       (struct sign_result): Change to op_data_t type and rework it.
-       (release_sign_result): Rename to ...
-       (release_op_data): ... this and rewrite it.
-       (append_xml_info): Remove function.
-       (gpgme_op_sign_result): New function.
-       (parse_sig_created): New function.
-       (_gpgme_sign_status_handler): Change first argument to void *.
-       Rewrite the function to use the new result structure and functions.
-       (_gpgme_op_sign_init_result): New function.
-       (_gpgme_op_sign_start): Rename to ...
-       (sign_start): ... this.  Call _gpgme_op_sign_init_result.
-       (gpgme_op_sign_start): Use sign_start instead _gpgme_op_sign_start.
-       (gpgme_op_sign): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Call
-       _gpgme_op_sign_init_result.
-       
-       * delete.c: Include <errno.h> and "gpgme.h", but not "util.h" or
-       "key.h".
-       (enum delete_problem): Move into function delete_status_handler.
-       (delete_status_handler): Change first argument to void *.  Parse
-       delete problem with strtol instead atoi.  Return better error
-       values.
-       (_gpgme_op_delete_start): Rename to ...
-       (delete_start): ... this.  Rework error handling.
-       (gpgme_op_delete_start): Use delete_start instead
-       _gpgme_op_delete_start.
-       (gpgme_op_delete): Likewise.
-       * gpgme.h (GpgmeDataType): Removed.
-
-2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Change GPGME_IMPORT_PRIVATE to GPGME_IMPORT_SECRET.
-       * import.c (parse_import_res): Parse unchanged field.
-
-       * gpgme.h: New enum for GPGME_IMPORT_NEW, GPGME_IMPORT_UID,
-       GPGME_IMPORT_SIG, GPGME_IMPORT_SUBKEY, GPGME_IMPORT_PRIVATE.
-       (GpgmeError): GPGME_Unknown_Reason, GPGME_Not_Found,
-       GPGME_Ambiguous_Specification, GPGME_Wrong_Key_Usage,
-       GPGME_Key_Revoked, GPGME_Key_Expired, GPGME_No_CRL_Known,
-       GPGME_CRL_Too_Old, GPGME_Policy_Mismatch, GPGME_No_Secret_Key,
-       GPGME_Key_Not_Trusted, GPGME_Issuer_Missing, GPGME_Chain_Too_Long,
-       GPGME_Unsupported_Algorithm, GPGME_Sig_Expired,
-       GPGME_Bad_Signature, GPGME_No_Public_Key added as new error codes.
-       (struct _gpgme_import_status): New structure.
-       (GpgmeImportStatus): New type.
-       (struct _gpgme_op_import_result): New structure.
-       (GpgmeImportResult): New type.
-       (gpgme_op_import_result): New function.
-       * import.c: Include <errno.h> and "gpgme.h", but not "util.h".
-       (struct import_result): Change to type op_data_t.
-       (release_import_result): Rename to ...
-       (release_op_data): ... this.
-       (append_xml_impinfo): Function removed.
-       (gpgme_op_import_result): New function.
-       (parse_import): New function.
-       (parse_import_res): Likewise.
-       (import_status_handler): Change first argument to void *.  Rewrite
-       to use new functions.
-       (_gpgme_op_import_start): Rework error handling.
-
-       * edit.c: Do not include <assert.h>, "util.h", but "gpgme.h".
-       (edit_resut): Change to typedef for op_data_t.
-       (edit_status_handler): Change first argument to void *.
-       Rework error handling.
-       (command_handler): Rework error handling.
-       (_gpgme_op_edit_start): Rename to ...
-       (edit_start): ... this.  Rework error handling.
-       (gpgme_op_edit_start): Rewrite using edit_start.
-       (gpgme_op_edit): Likewise.
-
-       * ops.h (_gpgme_passphrase_start): Remove prototype.
-       * passphrase.c: Do not include <assert.h>, "util.h" or
-       "debug.h", but "gpgme.h".
-       (struct passphrase_result): Change to typedef for op_data_t.
-       (release_passphrase_result): Rename to release_op_data.
-       (_gpgme_passphrase_status_handler): Change first argument to void *.
-       Use new op_data_t type.
-       (_gpgme_passphrase_command_handler): Use new op_data_t type.
-       (_gpgme_passphrase_start): Remove function.
-       * decrypt.c (_gpgme_decrypt_start): Rewrite error handling.  Do
-       not call _gpgme_passphrase_start, but install command handler.
-       * encrypt.c (_gpgme_op_encrypt_start): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-
-       * context.h (struct gpgme_context_s): Remove member initialized,
-       use_cms and help_data_1.  Add member protocol.  Make use_armor and
-       use_textmode bit flags.  Make keylist_mode, include_certs,
-       signers_len and signers_size unsigned.
-       * gpgme.c (gpgme_new): Initialize CTX->protocol.
-       (gpgme_set_protocol): Do not check CTX.  Use CTX->protocol.
-       (gpgme_get_protocol): Likewise.
-       (gpgme_release): Do not release CTX->help_data_1.
-       * op-support.c (_gpgme_op_reset): Use CTX->protocol.
-
-       * wait-private.c (_gpgme_wait_private_event_cb): Remove variable CTX.
-
-       * data.c: Do not include <assert.h>, but "gpgme.h".
-       (_gpgme_data_inbound_handler): Expand _gpgme_data_append, because
-       it will go.  Do not assert DH.
-       (_gpgme_data_outbound_handler): Do not assert DH.
-       
-       * export.c: Do not include <stdlib.h>, "debug.h" and "util.h", but
-       "gpgme.h".
-       (export_status_handler): Change type of first argument to void *.
-       (_gpgme_op_export_start): Rename to ...
-       (export_start): ... this.  Rework error handling.
-       (gpgme_op_export_start): Rewritten to use export_start instead
-       _gpgme_op_export_start.
-       (gpgme_op_export): Likewise.
-
-       * gpgme.h (GpgmeError): Add GPGME_Busy, GPGME_No_Request.
-       (GPGME_No_Recipients, GPGME_Invalid_Recipient,
-       GPGME_No_Passphrase): New macros.
-
-       * key.c (gpgme_key_get_string_attr): Fix validity attribute.
-
-2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
-       
-       * gpgme.h (struct _gpgme_op_genkey_result): New structure.
-       (GpgmeGenKeyResult): New type.
-       (gpgme_op_genkey): Drop last argument.
-       (gpgme_op_genkey_result): New function.
-       * genkey.c: Do not include "util.h", but "gpgme.h".
-       (struct genkey_result): Replace with ...
-       (op_data_t): ... this new type.
-       (release_genkey_result): Replace with ...
-       (release_op_data): ... this new function.
-       (gpgme_op_genkey_result): New function.
-       (genkey_status_handler): Rewritten using new op_data_t type.
-       (get_key_parameter): New function.
-       (_gpgme_op_genkey_start): Renamed to
-       (genkey_start): ... this and rewritten.
-       (gpgme_op_genkey_start): Use genkey_start instead
-       _gpgme_op_genkey_start.
-       (gpgme_op_genkey): Rewritten.  Remove FPR argument.
-
-       * context.h (struct gpgme_context_s): Remove member verbosity.
-       * gpgme.c (gpgme_new): Do not set member verbosity.
-       * engine.h (_gpgme_engine_set_verbosity): Remove prototype.
-       * engine.c (_gpgme_engine_set_verbosity): Remove function.
-       * engine-backend.h (struct engine_ops): Remove set_verbosity.
-       * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Remove set_verbosity member.
-       * rungpg.c (_gpgme_engine_ops_gpg): Likewise.
-       (gpg_set_verbosity): Remove function.
-       * decrypt.c (_gpgme_decrypt_start): Don't call
-       _gpgme_engine_set_verbosity.
-       * delete.c (_gpgme_op_delete_start): Likewise.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-       * encrypt.c (_gpgme_op_encrypt_start): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
-       * export.c (_gpgme_op_export_start): Likewise.
-       * genkey.c (_gpgme_op_genkey_start): Likewise.
-       * import.c (_gpgme_op_import_start): Likewise.
-       * keylist.c (gpgme_op_keylist_start): Likewise.
-       (gpgme_op_keylist_ext_start): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-       * verify.c (_gpgme_op_verify_start): Likewise.
-
-       * Makefile.am (libgpgme_la_SOURCES): Add key-cache.c.
-       * key.c (key_cache_initialized, key_cache_size,
-       key_cache_max_chain_length, ): Removed.
-       (struct key_cache_item_s, key_cache_lock, key_cache,
-       key_cache_unused_items, hash_key, _gpgme_key_cache_add,
-       _gpgme_key_cache_get, gpgme_get_key): Moved to ...
-       * key-cache.c: ... here.  New file.
-       * key.h (_gpgme_key_cache_init): Remove prototypes.
-       (_gpgme_key_cache_add,_gpgme_key_cache_get): Move to ...
-       * ops.h: ... here.
-       * version.c: Do not include "key.h".
-       (do_subsystem_inits): Do not call _gpgme_key_cache_init.
-
-       * mkstatus: Strip trailing comma.
-       * gpgme.h (GpgmeStatus): Pretty print.
-
-       * gpgme.h (GpgmeError): Rename GPGME_No_Passphrase to
-       GPGME_Bad_Passphrase.
-       * passphrase.c (_gpgme_passphrase_status_handler): Use
-       GPGME_Bad_Passphrase instead GPGME_No_Passphrase.
-
-       * gpgme.h (GpgmeError): Rename GPGME_No_Recipients to
-       GPGME_No_UserID and GPGME_Invalid_Recipient to
-       GPGME_Invalid_UserID.
-       * encrypt.c (_gpgme_encrypt_status_handler): Use GPGME_No_UserID
-       instead GPGME_No_Recipients and GPGME_Invalid_UserID instead
-       GPGME_Invalid_Recipient.
-       (_gpgme_op_encrypt_start): Likewise.
-
-       * gpgme.h (GpgmeError): Remove GPGME_Busy and GPGME_No_Request.
-       * wait-user.c (_gpgme_wait_user_event_cb): Don't clear CTX->pending.
-       * wait-private.c (_gpgme_wait_private_event_cb): Likewise.
-       * wait-global.c (gpgme_wait): Likewise.
-       * verify.c (_gpgme_op_verify_start): Likewise.
-       (gpgme_get_sig_status): Don't check pending flag.
-       (gpgme_get_sig_string_attr): Likewise.
-       (gpgme_get_sig_ulong_attr): Likewise.
-       (gpgme_get_sig_key): Likewise.
-       * op-support.c (_gpgme_op_reset): Likewise.
-       * trustlist.c (gpgme_op_trustlist_start): Don't clear pending flag.
-       (gpgme_op_trustlist_next): Don't check or clear pending flag.
-       (gpgme_op_trustlist_end): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-       * context.h (struct gpgme_context_s): Remove member PENDING.
-       * decrypt.c (_gpgme_decrypt_start): Likewise.
-       * delete.c (_gpgme_op_delete_start): Likewise.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-       * encrypt.c (_gpgme_op_encrypt_start): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
-       * export.c (_gpgme_op_export_start): Likewise.
-       * genkey.c (_gpgme_op_genkey_start): Likewise.
-       * import.c (_gpgme_op_import_start): Likewise.
-       * key.c (gpgme_get_key): Likewise.
-       * keylist.c (gpgme_op_keylist_start): Likewise.
-       (gpgme_op_keylist_ext_start): Likewise.
-       (gpgme_op_keylist_next): Likewise.
-       (gpgme_op_keylist_end): Likewise.
-       * data-compat.c (gpgme_error_to_errno): Don't convert EBUSY.
-
-2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (GpgmePassphraseCb): Change type to return GpgmeError,
-       and add argument for returning the result string.
-       (gpgme_cancel): Remove prototype.
-       * gpgme.c (gpgme_cancel): Remove function.
-       * context.h (struct gpgme_context_s): Remove member cancel.
-       * passphrase.c (_gpgme_passphrase_command_handler): Call the
-       passphrase callback in the new way.
-
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * edit.c (_gpgme_edit_status_handler): Call the progress status
-       handler.
-
-2003-02-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait-user.c (_gpgme_wait_user_remove_io_cb): Move check for no
-       I/O handlers left to ...
-       (_gpgme_user_io_cb_handler): ... here.
-
-2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * trustlist.c (trustlist_colon_handler): Release ITEM if name
-       could not be allocated.
-       (gpgme_trust_item_release): Only release name if it is allocated.
-       Reported by Marc Mutz <Marc.Mutz@uni-bielefeld.de>.
-
-2003-02-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (read_status): If he status handler returns an error,
-       return it.
-       (status_handler): If read_status fails, just return the error.
-
-2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (start): Handle all errors, not only most of
-       them.
-       (xtoi_1, xtoi_2): Remove macro.
-       (status_handler): Replace use of xtoi_2 with _gpgme_hextobyte.
-
-2003-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (map_assuan_error): Replace
-       ASSUAN_Bad_Certificate_Path with ASSUAN_Bad_Certificate_Chain.
-       (gpgsm_new): Use assuan_pipe_connect instead assuan_pipe_connect2.
-
-       * util.h (DIMof): Remove macro.
-
-       * ops.h (_gpgme_op_event_cb, _gpgme_op_event_cb_user,
-       _gpgme_data_unread): Prototypes removed.
-
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * types.h: File removed.
-       * Makefile.am (libgpgme_la_SOURCES): Remove types.h.
-       * io.h (struct spawn_fd_item_s): Do not include "types.h".
-       * key.h: Likewise.
-       * context.h: Likewise.
-       * cengine-gpgsm.h: Likewise.
-       * engine.h: Include "gpgme.h" instead "types.h".  Add prototypes
-       for EngineStatusHandler, EngineColonLineHandler and
-       EngineCommandHandler.
-       (_gpgme_engine_set_status_handler): Change parameter type from
-       GpgmeStatusHandler to EngineStatusHandler.
-       (_gpgme_engine_set_command_handler): Change parameter type from
-       GpgmeCommandHandler to EngineCommandHandler.
-       (_gpgme_engine_set_colon_line_handler): Change parameter type from
-       GpgmeColonLineHandler to EngineColonLineHandler.
-       * engine-backend.h: Include "engine.h" instead "types.h".
-       (struct engine_ops): Change Gpgme*Handler parameters in members
-       set_command_handler, set_colon_line_handler and set_status_handler
-       to Engine*Handler.
-       * engine.c (_gpgme_engine_set_status_handler): Change parameter
-       type from GpgmeStatusHandler to EngineStatusHandler.
-       (_gpgme_engine_set_command_handler): Change parameter type from
-       GpgmeCommandHandler to EngineCommandHandler.
-       (_gpgme_engine_set_colon_line_handler): Change parameter type from
-       GpgmeColonLineHandler to EngineColonLineHandler.
-       * rungpg.c (struct gpg_object_s): Change type of member status.fnc
-       from GpgmeStatusHandler to EngineStatusHandler.  Change type of
-       member colon.fnc from GpgmeColonLineHandler to
-       EngineColonLineHandler.  Change type of member cmd.fnc from
-       GpgmeCommandHandler to EngineCommandHandler.
-       * engine-gpgsm.c (struct gpgsm_object_s): Likewise.
-       * rungpg.c (gpg_set_status_handler): Change parameter type from
-       GpgmeStatusHandler to EngineStatusHandler.
-       * engine-gpgsm.c (gpgsm_set_status_handler): Likewise.
-       (assuan_simple_command): Likewise.
-       * rungpg.c (gpg_set_colon_line_handler): Change parameter type
-       from GpgmeColonLineHandler to EngineColonLineHandler.
-       * engine-gpgsm.c (gpgsm_set_colon_line_handler): Likewise.
-       * rungpg.c (gpg_set_command_handler): Change parameter type from
-       GpgmeCommandHandler to EngineCommandHandler.
-
-       * engine-gpgsm.c (status_handler): Do not close status fd at end
-       of function.
-
-       * ops.h (_gpgme_op_data_lookup): Add prototype.
-       * op-support.c: Include <stdlib.h>.
-       (_gpgme_op_data_lookup): New function.
-       * decrypt.c (_gpgme_release_decrypt_result): Function removed.
-       (struct decrypt_result_s): Rename to ...
-       (struct decrypt_resul): ... this.
-       (DecryptResult): New type.
-       (_gpgme_decrypt_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       * sign.c (_gpgme_release_sign_result): Function removed.
-       (release_sign_result): New function.
-       (struct sign_result_s): Rename to ...
-       (struct sign_result): ... this.
-       (SignResult): New type.
-       (_gpgme_sign_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       * encrypt.c (struct encrypt_result_s): Rename to ...
-       (struct encrypt_result): ... this.
-       (_gpgme_release_encrypt_result): Function removed.
-       (release_encrypt_result): New function.
-       (_gpgme_encrypt_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       * verify.c (struct verify_result_s): Rename to ...
-       (struct verify_result): ... this.  Remove member next.
-       (VerifyResult): New type.
-       (_gpgme_release_verify_result): Function removed.
-       (release_verify_result): New function.
-       (finish_sig): Change first argument to type VerifyResult.  Diddle
-       the type of the op_data structure.
-       (add_notation): Change first argument to type VerifyResult.
-       (_gpgme_verify_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       * passphrase.c (struct passphrase_result_s): Rename to ...
-       (struct passphrase_result): ... this.  Remove member next.
-       (PassphraseResult): New type.
-       (_gpgme_release_passphrase_result): Function removed.
-       (release_passphrase_result): New function.
-       (_gpgme_passphrase_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       (_gpgme_passphrase_command_handler): Likewise.
-       * keylist.c (struct keylist_result_s): Rename to ...
-       (struct keylist_result): ... this.  Remove member next.
-       (KeylistResult): New type.
-       (_gpgme_release_keylist_result): Function removed.
-       (release_keylist_result): New function.
-       (keylist_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       * edit.c (struct edit_result_s): Rename to ...
-       (struct edit_result): ... this.  Remove member next.
-       (EditResult): New type.
-       (_gpgme_release_edit_result): Function removed.
-       (release_edit_result): New function.
-       (edit_status_handler): Don't use
-       test_and_allocate_result, but use _gpgme_op_data_lookup to
-       retrieve result data object.
-       (command_handler): Likewise.
-       * types.h (DecryptResult, SignResult, EncryptResult,
-       PassphraseResult, ImportResult, DeleteResult, GenKeyResult,
-       KeylistResult, EditResult): Types removed.
-       * ops.h: Don't include "types.h", but "gpgme.h" and "context.h".
-       (test_and_allocate_result): Remove macro.
-       (_gpgme_release_decrypt_result): Remove prototype.
-       (_gpgme_decrypt_result): Remove prototype.
-       (_gpgme_release_sign_result): Remove prototype.
-       (_gpgme_release_encrypt_result): Remove prototype.
-       (_gpgme_release_passphrase_result): Remove prototype.
-       (_gpgme_release_import_result): Remove prototype.
-       (_gpgme_release_delete_result): Remove prototype.
-       (_gpgme_release_genkey_result): Remove prototype.
-       (_gpgme_release_keylist_result): Remove prototype.
-       (_gpgme_release_edit_result): Remove prototype.
-       (_gpgme_release_verify_result): Remove prototype.
-       * gpgme.c (_gpgme_release_result): Rewritten.
-       * context.h (enum ctx_op_data_type): New enum.
-       (struct ctx_op_data): New structure.
-       (struct gpgme_context_s): Replace the member result with a member
-       op_data.
-       (fail_on_pending_request): Remove macro.
-       * op-support.c (_gpgme_op_reset): Expand macro
-       fail_on_pending_request.
-       * util.h: Don't include "types.h" or "debug.h", but include "gpgme.h".
-
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * types.h (EngineObject): Move typedef to ...
-       * engine.h: ... here.
-       * types.h (GpgObject): Move typedef to ...
-       * rungpg.c: ... here.
-       * types.h (GpgsmObject): Move typedef to ...
-       * engine-gpgsm.c: ... here.
-
-       * util.h (return_if_fail, return_null_if_fail,
-       return_val_if_fail): Remove macro.
-       * gpgme.c (gpgme_cancel): Don't use return_if_fail.
-       * key.c (gpgme_key_ref): Likewise.
-       * signers.c (gpgme_signers_enum): Likewise.
-       (gpgme_signers_clear): Likewise.
-
-       * engine-backend.h (struct engine_ops): Rename get_path to
-       get_file_name.
-       * gpgme.h (struct _gpgme_engine_info): Rename member path to
-       file_name.
-       * version.c: Do not include <stdio.h>, <stdlib.h>, context.h and
-       util.h.  Other clean ups.
-       (parse_version_number): Protect more seriously against
-       overflow.
-       (gpgme_get_engine_info): Move to ...
-       * engine.c (gpgme_get_engine_info): ... here.
-       (_gpgme_engine_get_info): Function removed.
-       (_gpgme_engine_get_path): Make static and rename to ...
-       (engine_get_file_name): .. this.
-       (_gpgme_engine_get_version): Make static and rename to ...
-       (engine_get_version): ... this.
-       (_gpgme_engine_get_req_version): Make static and rename to ...
-       (engine_get_req_version): ... this.
-       * engine.h (_gpgme_engine_get_path, _gpgme_engine_get_version,
-       _gpgme_engine_req_version, _gpgme_engine_get_info.): Remove
-       prototypes.
-
-       * gpgme.h (enum GpgmeProtocol): Remove GPGME_PROTOCOL_AUTO.
-       * gpgme.c (gpgme_set_protocol): Don't handle GPGME_PROTOCOL_AUTO.
-       (gpgme_get_protocol_name): New function.
-
-       * engine-backend.h (struct engine_ops): New member
-       get_req_version, remove member check_version.
-       * engine.h (_gpgme_Engine_get_version): New prototype.
-       * rungpg.c (gpg_get_req_version): New function.
-       (gpg_check_version): Function removed.
-       (_gpgme_engine_ops_gpg): Add gpg_get_req_version, remove
-       gpg_check_version.
-       * engine-gpgsm.c (gpgsm_get_req_version): New function.
-       (gpgsm_check_version): Function removed.
-       (_gpgme_engine_ops_gpgsm): Add gpgsm_get_req_version, remove
-       gpgsm_check_version.
-       * engine.c: Include ops.h.
-        (_gpgme_engine_get_req_version): New function.
-       (gpgme_engine_check_version): Rewritten.
-       * version.c (gpgme_get_engine_info): Rewritten.
-       * gpgme.h (gpgme_engine_info): New structure.
-       (GpgmeEngineInfo): New type.
-       
-2003-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * types.h: Remove byte and ulong types.
-       * util.h (_gpgme_hextobyte): Change prototype to unsigned char
-       instead byte.
-       * conversion.c (_gpgme_hextobyte): Change argument to unsigned
-       char instead byte.
-       (_gpgme_decode_c_string): Likewise, and beautify.  Also support a
-       few more escaped characters.  Be more strict about buffer size.
-       (_gpgme_data_append_percentstring_for_xml): Change type of SRC,
-       BUF and DST to unsigned char instead byte.
-       * progress.c (_gpgme_progress_status_handler): Use unsigned char
-       instead byte.
-       * debug.c (trim_spaces): Likewise.
-
-       * util.h (mk_error): Remove macro.
-       * conversion.c, data.c, data-compat.c, decrypt.c, delete.c,
-       edit.c, encrypt.c, encrypt-sign.c, engine.c, engine-gpgsm.c,
-       export.c, genkey.c, gpgme.c, import.c, key.c, keylist.c,
-       passphrase.c, progress.c, recipient.c, rungpg.c, sign.c,
-       signers.c, trustlist.c, verify.c, wait.c, wait-global.c,
-       wait-private (literally everywhere): Expand the mk_error macro.
-
-       * context.h (wait_on_request_or_fail): Remove macro.
-
-       * context.h (gpgme_context_s): Remove member ERROR.
-       * types.h (GpgmeStatusHandler): Change return type to GpgmeError.
-       (GpgmeCommandHandler): Change return type to GpgmeError and add
-       new argument RESULT.
-       * gpgme.h (GpgmeIOCb): Change return type to GpgmeError.
-       (GpgmeEventIO): New event GPGME_EVENT_START.
-       (GpgmeIdleFunc): Remove type.
-       (gpgme_register_idle): Remove prototype.
-       * data.c: Include <assert.h>.
-       (_gpgme_data_inbound_handler): Change return type to GpgmeError.
-       Return any error instead ignoring it, don't close file descriptor
-       on error.
-       (_gpgme_data_outbound_handler): Likewise.
-       * decrypt.c: Do not include <stdio.h>, <string.h> and <assert.h>.
-       (_gpgme_decrypt_status_handler): Change return type to GpgmeError.
-       Return error instead setting ctx->error.  Return success at end of
-       function.
-       (gpgme_op_decrypt): Don't work around the old kludge anymore.
-       * decrypt-verify.c (decrypt_verify_status_handler): Change return
-       type to GpgmeError.  Return possible errors.
-       * delete.c: Do not include <stdio.h>, <string.h>, <time.h> and
-       <assert.h>.
-       (delete_status_handler): Change return type to GpgmeError.  Return
-       error instead setting ctx->error.  Return success at end of
-       function.
-       * edit.c: Do not include <stdio.h> and <string.h>.
-       (_gpgme_edit_status_handler): Change type to GpgmeError,
-       make static and rename to ...
-       (edit_status_handler): ... this.  Return error directly.
-       (command_handler): Change return type to GpgmeError, add result
-       argument.  Return error directly.
-       * encrypt.c (status_handler_finish): Remove function.
-       (_gpgme_encrypt_status_handler): Change return type to GpgmeError.
-       Return error directly.
-       (_gpgme_encrypt_sym_status_handler): Likewise.
-       * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
-       * engine-gpgsm.c (close_notify_handler): Do not signal done event
-       anymore.
-       (status_handler): Change return type to GpgmeError.  Diddle things
-       around a bit to return errors directly.
-       (start): Send start event.
-       * export.c: Do not include <stdio.h>, <string.h> and <assert.h>.
-       (export_status_handler): Change return type to GpgmeError.  Don't
-       check ctx->error.
-       * genkey.c: Do not include <stdio.h> and <assert.h>.
-       (genkey_status_handler): Change return type to GpgmeError.  Don't
-       check ctx->error.  Return errors directly.
-       * gpgme.c (_gpgme_release_result): Do not initialize ctx->error.
-       (_gpgme_op_event_cb): Function removed.
-       (_gpgme_op_event_cb_user): Likewise.
-       * import.c: Do not include <stdio.h>, <string.h> and <assert.h>.
-       (import_status_handler): Change return type to GpgmeError.  Don't
-       check ctx->error.
-       * keylist.c (keylist_colon_handler, keylist_status_handler, finish_key):
-       Change return type to GpgmeError, return error directly.
-       * Makefile (libgpgme_la_SOURCES): Add wait-global.c,
-       wait-private.c and wait-user.c
-       * ops.h (test_and_allocate_result): Return error instead setting
-       ctx->error.
-       (_gpgme_data_inbound_handler, _gpgme_data_outbound_handler,
-       _gpgme_verify_status_handler, _gpgme_decrypt_status_handler,
-       _gpgme_sign_status_handler, _gpgme_encrypt_staus_handler,
-       _gpgme_passphrase_status_handler, _gpgme_progress_status_handler):
-       Change return type to GpgmeError.
-       (_gpgme_passphease_command_handler): Change return type to
-       GpgmeError and add new argument RESULT.
-       * op-support.c: Use new callback functions, and change private
-       data to ctx everywhere.
-       * passphrase.c (_gpgme_passphrase_status_handler): Change return
-       type to GpgmeError, return error directly.
-       (_gpgme_passphrase_command_handler): Change return type to
-       GpgmeError, add result argument.  Return results accordingly.
-       * progress.c (_gpgme_progress_status_handler): Change return type
-       to GpgmeError, return errors directly.
-       * rungpg.c (status_handler): Change return type to GpgmeError.
-       Return error directly.
-       (close_notify_handler): Don't send done event.
-       (colon_line_handler): Change return type to GpgmeError, return
-       errors directly.
-       * rungpg.c (start): Send start event.
-       * sign.c (_gpgme_sign_status_handler): Change return type to
-       GpgmeError, return errors directly.
-       * trustlist.c (trustlist_status_handler): Change return type to
-       GpgmeError.  Return 0.
-       (trustlist_colon_handler): Change return type GpgmeError.  Return
-       errors directly.
-       * verify.c (add_notation): Change return type to GpgmeError,
-       return errors directly.
-       (_gpgme_verify_status_handler): Likewise.
-       * wait.h (struct fd_table): Remove lock member.
-       (struct wait_item_s): Moved here from wait.c.
-       (struct tag): New structure.
-       (_gpgme_wait_event_cb): Remove prototype.
-       (_gpgme_wait_private_event_cb, _gpgme_wait_global_event_cb,
-       _gpgme_wait_user_add_io_cb, _gpgme_wait_user_remove_io_cb,
-       _gpgme_wait_user_event_io_cb): New prototypes.
-       * wait.c: Don't include <stdio.h>.
-       (ftd_global, ctx_done_list, ctx_done_list_size,
-       ctx_done_list_length, ctx_done_list_lock, idle_function): Remove
-       global variable.
-       (gpgme_register_idle, do_select, _gpgme_wait_event_cb): Remove
-       function.
-       (gpgme_wait): Move to file wait-global.c.
-       (_gpgme_add_io_cb): Take ctx as private argument, initialize ctx
-       member in wait item and tag.
-       (_gpgme_remove_io_cb): Take ctx from tag.  Don't use FDT lock.
-       (_gpgme_wait_one, _gpgme_wait_on_condition): Move to
-       wait-private.c.
-       (gpgme_fd_table_init): Don't initialize FDT->lock.
-       (gpgme_fd_table_deinit): Don't destroy FDT->lock.
-       (_gpgme_fd_table_put): Make static and rename to ...
-       (fd_table_put): ... this function.  Don't use FDT->lock.
-       (struct wait_item_s): Move to wait.h.
-       * wait-global.c: New file.
-       * wait-private.c: New file.
-       * wait-user.c: New file.
-
-       * key.c (gpgme_key_sig_get_string_attr): Use validity_to_string
-       instead otrust_to_string to calculate validity.
-       
-2003-01-19  Miguel Coca  <mcoca@gnu.org>
-
-       * w32-io.c (_gpgme_io_select): Add missing argument in calls to
-       DEBUG_BEGIN.
-       * w32-util.c: Include "sema.h".
-       (find_program_in_registry): Change DEBUG1 to DEBUG2, fixes compilation
-       error.
-
-2003-01-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_engine_ops_gpg): Remove gpg_start.
-       (gpg_start): Rename to ...
-       (start): ... this function.  Change arguments to GpgObject.
-       (gpg_decrypt): Call start.
-       (gpg_edit): Likewise.
-       (gpg_encrypt): Likewise.
-       (gpg_encrypt_sign): Likewise.
-       (gpg_export): Likewise.
-       (gpg_import): Likewise.
-       (gpg_keylist): Likewise.
-       (gpg_keylist_ext): Likewise.
-       (gpg_trustlist): Likewise.
-       (gpg_verify): Likewise.
-
-       * engine-gpgsm.c (_gpgme_engine_ops_encrypt): Remove gpgsm_start.
-       (gpgsm_start): Rename to ...
-       (struct gpgsm_object_s): Remove member command.
-       (gpgsm_release): Don't free command.
-       (start): ... this function.  Change arguments to GpgsmObject and
-       const char *.
-       (gpgsm_decrypt): Call start.
-       (gpgsm_delete): Likewise.
-       (gpgsm_encrypt): Likewise.
-       (gpgsm_export): Likewise.
-       (gpgsm_genkey): Likewise.
-       (gpgsm_import): Likewise.
-       (gpgsm_keylist): Likewise.
-       (gpgsm_keylist_ext): Likewise.
-       (gpgsm_verify): Likewise.
-
-       * decrypt.c (_gpgme_decrypt_start): Don't call
-       _gpgme_engine_start.
-       * delete.c (_gpgme_op_delete_start): Likewise.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-       * encrypt.c (_gpgme_op_encrypt_start): 
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): 
-       * export.c (_gpgme_op_export_start): Likewise.
-       * genkey.c (_gpgme_op_genkey_start): Likewise.
-       * import.c (_gpgme_op_import_start): Likewise.
-       * keylist.c (gpgme_op_keylist_ext_start): Likewise.
-       (gpgme_op_keylist_start): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-       * trustlist.c (gpgme_op_trustlist_start): Likewise.
-       * verify.c (_gpgme_op_verify_start): Likewise.
-
-       * engine-backend.h (struct engine_ops): Remove member start.
-
-       * engine.h (_gpgme_engine_start): Remove prototype.
-       * engine.c (_gpgme_engine_start): Remove function.
-
-2003-01-06  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (set_mainkey_capability): Handle 'd' and 'D' used
-       since gpg 1.3 to denote disabled keys.
-
-2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-mem.c: Include <string.h>.
-       * engine.c: Likewise.
-
-2003-01-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (libgpgme_la_DEPENDENCIES): Correct bug in last change.
-
-2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_op_verify, gpgme_op_decrypt_verify): Drop R_STAT
-       argument.
-       * decrypt-verify.c (gpgme_op_decrypt_verify): Drop R_STAT
-       argument.
-       * verify.c (gpgme_op_verify): Drop R_STAT argument.
-       (_gpgme_intersect_stati): Function removed.
-       * ops.h (_gpgme_intersect_stati): Remove prototype.
-
-2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * libgpgme.vers: New file.
-       * Makefile.am (EXTRA_DIST): Add libgpgme.vers.
-       (libgpgme_version_script_cmd): New variable.
-       (libgpgme_la_LDFLAGS): Add libgpgme_version_script_cmd here.
-       (libgpgme_la_DEPENDENCIES): New variable.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * key.c (gpgme_key_get_string_attr): Don't accept GPGME_ATTR_IS_SECRET.
-       (otrust_to_string): New function.
-       (gpgme_key_get_as_xml): Use it.
-       (validity_to_string): New function.
-       (gpgme_key_get_string_attr): Beautify using above functions.
-       (gpgme_key_get_ulong_attr): Likewise.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data-mem.c (mem_release): Fix gcc warning.
-       * data-user.c (user_release): Likewise.
-
-2002-12-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.h (gpgme_data_release_cb): Change return type to void.
-       (gpgme_data_read_cb): Change return type to ssize_t.
-       * data.c (gpgme_data_read): Likewise.
-       * data-stream.c (stream_read): Likewise.
-       * data-fd.c (fd_read): Likewise.
-       * data-mem.c (mem_read): Likewise.
-       (mem_release): Change return type to void.
-       * data-user.c (user_read): Change return type to ssize_t.
-       (user_release): Change return type to void.
-       * data-compat.c (old_user_read): Change return type to ssize_t. 
-       * gpgme.h (GpgmeDataReadCb): Likewise.
-       (gpgme_data_read): Likewise.
-       (GpgmeDataSeekCb): Change return type to off_t.
-
-2002-12-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add prototype for gpgme_get_key.
-       * key.c (gpgme_get_key): New function.
-       * verify.c (gpgme_get_sig_key): Rewrite using gpgme_get_key.
-
-       * gpgme.h: Add prototypes for new interfaces
-       gpgme_key_sig_get_string_attr and gpgme_key_get_ulong_attr.
-       (enum GpgmeAttr): New attribute GPGME_ATTR_SIG_CLASS.
-       * gpgme.c (gpgme_set_keylist_mode): Allow GPGME_KEYLIST_MODE_SIGS.
-       * key.h (struct certsig_s): New members ALGO, NAME_PART,
-       EMAIL_PART, COMMENT_PART, NAME, SIG_STAT and SIG_CLASS.
-
-       * conversion.c (_gpgme_decode_c_string): Add new parameter LEN.
-       Use that to determine if allocation is desired or not.
-       * util.h: Adjust prototype of _gpgme_decode_c_string.
-       * keylist.c (keylist_colon_handler): Adjust caller of
-       _gpgme_decode_c_string.
-
-       * key.h (struct gpgme_key_s): New member last_uid.
-       * key.c (_gpgme_key_append_name): Rewritten using
-       _gpgme_decode_c_string and the last_uid pointer.
-       (my_isdigit): Macro removed.
-       (ALLOC_CHUNK): Likewise.
-       * keylist.c (set_userid_flags): Use last_uid member of KEY.
-
-       * context.h (struct user_id_s): New member last_certsig.
-       * key.h: Add prototype for _gpgme_key_add_certsig.
-       * key.c (_gpgme_key_add_certsig): New function.
-       (set_user_id_part): Move function before _gpgme_key_add_certsig.
-       (parse_user_id): Change first argument to SRC, add new arguments
-       NAME, EMAIL and COMMENT.  Change code to use these arguments
-       instead going through UID.  Move function before
-       _gpgme_add_certsig.
-       (parse_x509_user_id): Likewise.
-       (_gpgme_key_append_name): Adjust arguments to parse_x509_user_id
-       and parse_user_id invocation.
-       (one_certsig_as_xml): New function.
-       (one_uid_as_xml): Print signatures.
-       * context.h (struct gpgme_context_s): New member TMP_UID.
-       * keylist.c (keylist_colon_handler): Rewritten, implement "sig"
-       record entries.
-
-       * key.c (get_certsig): New function.
-       (gpgme_key_sig_get_string_attr): Likewise.
-       (gpgme_key_sig_get_ulong_attr): Likewise.
-
-       * keylist.c: Include <ctype.h>.
-       (my_isdigit): Macro removed.
-       (set_mainkey_trust_info): Use isdigit, not my_isdigit.
-       (set_userid_flags): Likewise.
-       (set_subkey_trust_info): Likewise.
-       (set_ownertrust): Likewise.
-       (finish_key): Move function up a bit and remove prototype.
-
-       * rungpg.c (gpg_keylist_ext): Correct precedence of signature
-       listing mode.
-       (gpg_keylist_ext): Implement signature listing mode.
-
-2002-11-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_spawn): Do not set parent fds to -1.
-       * posix-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead close
-       for parent fds.
-       * w32-io.c (_gpgme_io_spawn): Call _gpgme_io_close instead
-       CloseHandle for parent fds.
-
-2002-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h [_MSC_VER]: Define ssize_t as long.
-
-2002-11-22  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): Save the result of a first
-       setlocale before doing another setlocale.
-
-2002-11-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * decrypt.c: Some beautyfication.
-
-       * verify.c (_gpgme_verify_status_handler): Treat
-       GPGME_STATUS_UNEXPECTED like GPGME_STATUS_NODATA.
-       Reported by Miguel Coca <e970095@zipi.fi.upm.es>.
-
-2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * genkey.c: Only include <config.h> if [HAVE_CONFIG_H].
-       (struct genkey_result_s): Add new member FPR.
-       (_gpgme_release_genkey_result): Free RESULT->fpr if set.
-       (genkey_status_handler): Extract the fingerprint from the status
-       line.
-       (gpgme_op_genkey): Add new argument FPR and return the fingerprint
-       in it.
-       * gpgme.h: Adjust prototype of gpgme_op_genkey.
-
-2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (gpg_keylist): Add --with-fingerprint to gpg invocation
-       twice, to get fingerprints on subkeys.  Suggested by Timo Schulz
-       <twoaday@freakmail.de>.
-       (gpg_keylist_ext): Likewise.
-
-2002-11-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * import.c (append_xml_impinfo): Use
-       _gpgme_data_append_string_for_xml rather than
-       _gpgme_data_append_string for the field content.
-       Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
-       
-2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.h, engine-gpgsm.h: File removed.
-       * engine-backend.h: New file.
-       * Makefile.am (gpgsm_components): New variable, set depending on
-       automake conditional HAVE_GPGSM.
-       (libgpgme_la_SOURCES): Add engine-backend.h, remove rungpg.h and
-       engine-gpgsm.h.  Replace engine-gpgsm.c with ${gpgsm_components}.
-       (status-table.h): Depend on gpgme.h, not rungpg.h.
-       * conversion.c: Include <stdlib.h>.
-       * engine-gpgsm.c: Do not set ENABLE_GPGSM here.  Include
-       "engine-backend.h" instead "engine-gpgsm.h".  Reorder some
-       functions and remove all function prototypes.
-       (_gpgme_gpgsm_get_version): Make static and rename to ...
-       (gpgsm_get_version): ... this.
-       (_gpgme_gpgsm_check_version): Make static and rename to ...
-       (gpgsm_check_version): ... this.
-       (_gpgme_gpgsm_new): Make static.  Change argument type from
-       GpgsmObject * to void **.  Call gpgsm_release instead
-       _gpgme_gpgsm_release.
-       (_gpgme_gpgsm_op_decrypt): Make static and rename to ...
-       (gpgsm_check_decrypt): ... this.
-       (_gpgme_gpgsm_op_delete): Make static and rename to ...
-       (gpgsm_check_delete): ... this.
-       (_gpgme_gpgsm_set_recipients): Make static and rename to ...
-       (gpgsm_check_set_recipients): ... this.
-       (_gpgme_gpgsm_op_encrypt): Make static and rename to ...
-       (gpgsm_encrypt): ... this.
-       (_gpgme_gpgsm_op_export): Make static and rename to ...
-       (gpgsm_export): ... this.
-       (_gpgme_gpgsm_op_genkey): Make static and rename to ...
-       (gpgsm_genkey): ... this.
-       (_gpgme_gpgsm_op_import): Make static and rename to ...
-       (gpgsm_import): ... this.
-       (_gpgme_gpgsm_op_keylist): Make static and rename to ...
-       (gpgsm_keylist): ... this.
-       (_gpgme_gpgsm_op_keylist_ext): Make static and rename to ...
-       (gpgsm_keylist_ext): ... this.
-       (_gpgme_gpgsm_op_sign): Make static and rename to ...
-       (gpgsm_sign): ... this.
-       (_gpgme_gpgsm_op_trustlist): Make static and rename to ...
-       (gpgsm_trustlist): ... this.
-       (_gpgme_gpgsm_op_verify): Make static and rename to ...
-       (gpgsm_verify): ... this.
-       (gpgsm_status_handler): Rename to ...
-       (status_handler): ... this.
-       (_gpgme_gpgsm_set_status_handler): Make static and rename to ...
-       (gpgsm_set_status_handler): ... this.
-       (_gpgme_gpgsm_set_colon_line_handler): Make static and rename to ...
-       (gpgsm_set_colon_line_handler): ... this.
-       (_gpgme_gpgsm_add_io_cb): Rename to ...
-       (add_io_cb): ... this.
-       (_gpgme_gpgsm_start): Make static and rename to ...
-       (gpgsm_start): ... this.
-       (_gpgme_gpgsm_set_io_cb): Make static and rename to ...
-       (gpgsm_set_io_cb): ... this.
-       (_gpgme_gpgsm_io_event): Make static and rename to ...
-       (gpgsm_io_event): ... this.
-       (struct _gpgme_engine_ops_gpgsm): New variable.
-       [!ENABLE_GPGSM]: Removed.
-       * engine.c: Do not include <time.h>, <sys/types.h>, <string.h>,
-       <assert.h>, "io.h", "rungpg.h" and "engine-gpgsm.h".  Include
-       <stdlib.h> and "engine-backend.h".
-       (struct engine_object_s): Rewritten.
-       (engine_ops): New variable.
-       * engine.c (_gpgme_engine_get_path, _gpgme_engine_get_version,
-       _gpgme_engine_check_version, _gpgme_engine_new,
-       _gpgme_engine_release, _gpgme_engine_set_verbosity,
-       _gpgme_engine_set_status_handler,
-       _gpgme_engine_set_command_handler,
-       _gpgme_engine_set_colon_line_handler, _gpgme_engine_op_decrypt,
-       _gpgme_engine_op_delete, _gpgme_engine_op_edit,
-       _gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
-       _gpgme_engine_op_export, _gpgme_engine_op_genkey,
-       _gpgme_engine_op_import, _gpgme_engine_op_keylist,
-       _gpgme_engine_op_keylist_ext, _gpgme_engine_op_sign,
-       _gpgme_engine_op_trustlist, _gpgme_engine_op_verify,
-       _gpgme_engine_start, _gpgme_engine_set_io_cbs,
-       _gpgme_engine_io_event): Reimplement.
-       * engine.h: Fix a few comments and a variable name in a prototype.
-       * ops.h: Do not include "rungpg.h".
-       * passphrase.c: Include config.h only if [HAVE_CONFIG_H].  Do not
-       include "rungpg.h".
-       * recipient.c: Likewise.
-       * signers.c: Likewise.
-       * version.c: Likewise.
-       * rungpg.c: Likewise.  Include "engine-backend.h".  Reorder
-       functions and remove prototypes.
-       (_gpgme_gpg_get_version): Make static and rename to ...
-       (gpg_get_version): ... this.
-       (_gpgme_gpg_check_version): Make static and rename to ...
-       (gpg_check_version): ... this.
-       (_gpgme_gpg_new): Make static.  Change argument type from
-       GpgObject * to void **.  Call gpg_release instead
-       _gpgme_gpg_release.
-       (_gpgme_gpg_op_decrypt): Make static and rename to ...
-       (gpg_check_decrypt): ... this.
-       (_gpgme_gpg_op_delete): Make static and rename to ...
-       (gpg_check_delete): ... this.
-       (_gpgme_gpg_set_recipients): Make static and rename to ...
-       (gpg_check_set_recipients): ... this.
-       (_gpgme_gpg_op_encrypt): Make static and rename to ...
-       (gpg_encrypt): ... this.
-       (_gpgme_gpg_op_export): Make static and rename to ...
-       (gpg_export): ... this.
-       (_gpgme_gpg_op_genkey): Make static and rename to ...
-       (gpg_genkey): ... this.
-       (_gpgme_gpg_op_import): Make static and rename to ...
-       (gpg_import): ... this.
-       (_gpgme_gpg_op_keylist): Make static and rename to ...
-       (gpg_keylist): ... this.
-       (_gpgme_gpg_op_keylist_ext): Make static and rename to ...
-       (gpg_keylist_ext): ... this.
-       (_gpgme_gpg_op_sign): Make static and rename to ...
-       (gpg_sign): ... this.
-       (_gpgme_gpg_op_trustlist): Make static and rename to ...
-       (gpg_trustlist): ... this.
-       (_gpgme_gpg_op_verify): Make static and rename to ...
-       (gpg_verify): ... this.
-       (gpg_status_handler): Rename to ...
-       (status_handler): ... this.
-       (_gpgme_gpg_set_status_handler): Make static and rename to ...
-       (gpg_set_status_handler): ... this.
-       (_gpgme_gpg_set_colon_line_handler): Make static and rename to ...
-       (gpg_set_colon_line_handler): ... this.
-       (gpgme_gpg_add_io_cb): Rename to ...
-       (add_io_cb): ... this.
-       (_gpgme_gpg_start): Make static and rename to ...
-       (gpg_start): ... this.
-       (_gpgme_gpg_set_io_cb): Make static and rename to ...
-       (gpg_set_io_cb): ... this.
-       (_gpgme_gpg_io_event): Make static and rename to ...
-       (gpg_io_event): ... this.
-       (struct _gpgme_engine_ops_gpg): New variable.
-
-2002-10-10  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_verify) [!ENABLE_GPGSM]: Add
-       missing argument.
-
-2002-10-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.h, data-user.c, data-stream.c, data-mem.c, data-fd.c,
-       data-compat.c: New file.  Really check them in this time, completes
-       2002-10-08 change.
-
-       * rungpg.h (GpgStatusHandler): Rename type to GpgmeStatusHandler
-       and move to ...
-       * types.h (GpgmeStatusHandler): ... here.
-       * rungpg.h (GpgColonLineHandler): Rename type to GpgmeColonLineHandler.
-       and move to ...
-       * types.h (GpgmeColonLineHandler): ... here.
-       * rungpg.h (GpgCommandHandler): Rename type to GpgmeCommandHandler.
-       and move to ...
-       * types.h (GpgmeCommandHandler): ... here.
-       * engine.h: Don't include "rungpg.h".
-       (_gpgme_engine_set_status_handler): Change type of
-       argument from GpgStatusHandler to GpgmeStatusHandler.
-       (_gpgme_engine_set_colon_line_handler): Change type of
-       argument from GpgColonLineHandler to GpgmeColonLineHandler.
-       (_gpgme_engine_set_command_handler): Change type of
-       argument from GpgCommandHandler to GpgmeCommandHandler.
-       * engine-gpgsm.h: Don't include "rungpg.h".
-       (_gpgme_gpgsm_set_status_handler): Change type of
-       argument from GpgStatusHandler to GpgmeStatusHandler.
-       (_gpgme_gpgsm_set_colon_line_handler): Change type of
-       argument from GpgColonLineHandler to GpgmeColonLineHandler.
-       * engine-gpgsm.c: Do not include "rungpg.h".
-       (struct gpgsm_object_s): Change type of
-       status.fnc to GpgmeStatusHandler.  Change type of colon.fnc to
-       GpgmeColonLineHandler.
-       (gpgsm_assuan_simple_command): Change type of argument from
-       GpgStatusHandler to GpgmeStatusHandler.
-       (_gpgme_gpgsm_set_status_handler): Likewise.
-       (_gpgme_gpgsm_set_colon_line_handler): Change type of argument from
-       GpgColonLineHandler to GpgmeColonLineHandler.
-       * rungpg.h (_gpgme_gpg_set_status_handler): Change type of
-       argument from GpgStatusHandler to GpgmeStatusHandler.
-       (_gpgme_gpg_set_colon_line_handler): Change type of
-       argument from GpgColonLineHandler to GpgmeColonLineHandler.
-       (_gpgme_gpg_set_command_handler): Change type of
-       argument from GpgCommandHandler to GpgmeCommandHandler.
-       * rungpg.c (struct gpg_object_s): Change type of status.fnc to
-       GpgmeStatusHandler.  Change type of colon.fnc to
-       GpgmeColonLineHandler.  Change type of cmd.fnc to
-       GpgmeCommandLineHandler.
-       (_gpgme_gpg_set_status_handler): Change type of argument FNC to
-       GpgmeStatusHandler.
-       (_gpgme_gpg_set_colon_line_handler): Change type of argument FNC
-       to GpgmeColonLineHandler.
-       (_gpgme_gpg_set_command_handler): Change type of argument FNC to
-       GpgmeCommandHandler.
-       * engine.c (_gpgme_engine_set_status_handler): Change type of
-       argument FNC to GpgmeStatusHandler.
-       (_gpgme_engine_set_colon_line_handler): Change type of argument FNC
-       to GpgmeColonLineHandler.
-       (_gpgme_engine_set_command_handler): Change type of argument FNC to
-       GpgmeCommandHandler.
-
-       * rungpg.h (_gpgme_gpg_enable_pipemode): Remove prototype.
-       * rungpg.c (struct gpg_object_s): Remove PM.
-       (pipemode_cb): Prototype removed.
-       (add_pm_data): Function removed.
-       (_gpgme_gpg_enable_pipemode): Likewise.
-       (pipemode_copy): Likewise.
-       (pipemode_cb): Likewise.
-       (add_arg): Don't check for pipemode.
-       (add_data): Likewise.
-       (_gpgme_gpg_set_status_handler): Likewise.
-       (_gpgme_gpg_set_colon_line_handler): Likewise.
-       (_gpgme_gpg_set_command_handler): Likewise.
-       (_gpgme_gpg_spawn): Likewise.
-       (_gpgme_gpg_spawn): Don't set PM.active.
-       (_gpgme_gpg_op_verify): Remove pipemode case.
-       * verify.c (_gpgme_op_verify_start): Remove pipemode case.
-
-       * rungpg.h (_gpgme_gpg_add_arg, _gpgme_gpg_add_data,
-       _gpgme_gpg_add_pm_data, _gpgme_gpg_housecleaning,
-       _gpgme_gpg_set_simple_line_handler): Prototype removed.
-       (_gpgme_gpg_set_verbosity): New prototype.
-       * rungpg.c (_gpgme_gpg_add_data): Make static and rename to ...
-       (add_data): ... this.
-       (_gpgme_gpg_add_pm_data): Call add_data, not _gpgme_gpg_add_data.
-       (_gpgme_gpg_set_command_handler): Likewise.
-       (_gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
-       _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
-       _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
-       _gpgme_gpg_op_verify): Likewise.
-       (_gpgme_gpg_add_pm_data): Rename to ...
-       (add_pm_data): ... this.
-       (_gpgme_gpg_op_verify): Call add_pm_data, not
-       _gpgme_gpg_add_pm_data.
-       (_gpgme_gpg_add_arg): Make static and rename to ...
-       (add_arg): ... this.
-       (_gpgme_gpg_set_command_handler, _gpgme_gpg_new,
-       _gpgme_gpg_op_decrypt, _gpgme_gpg_op_delete,
-       _gpgme_append_gpg_args_from_signers, _gpgme_gpg_op_edit,
-       _gpgme_append_gpg_args_from_recipients, _gpgme_gpg_op_encrypt,
-       _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
-       _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_keylist,
-       _gpgme_gpg_op_keylist_ext, _gpgme_gpg_op_trustlist,
-       _gpgme_gpg_op_sign, _gpgme_gpg_op_verify): Use add_arg, not
-       _gpgme_gpg_add_arg.
-       (_gpgme_gpg_set_verbosity): New function.
-       (struct gpg_object_s): Remove member simple from colon.
-       (_gpgme_gpg_set_colon_line_handler): Don't initialize simple.
-       (_gpgme_gpg_set_simple_line_handler): Removed function.
-       (read_colon_line): Don't check the GPG->colon.simple.
-       * engine.c (_gpgme_engine_set_verbosity): Call
-       _gpgme_gpg_set_verbosity instead _gpgme_gpg_add_arg.
-
-2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * util.h (_gpgme_malloc, _gpgme_realloc, _gpgme_calloc,
-       _gpgme_strdup, _gpgme_free): Remove prototypes.
-       (xtrymalloc, xtrycalloc, xtryrealloc, xtrystrdup, xfree): Remove
-       macros.
-       * util.c: File removed.
-       * Makefile.am (libgpgme_la_SOURCES): Remove util.h.
-       * conversion.c (_gpgme_decode_c_string): Use malloc instead of
-       xtrymalloc, realloc instead of xtryrealloc, calloc instead of
-       xtrycalloc, free instead of xfree.
-       (_gpgme_data_append_percentstring_for_xml): Likewise.
-       * data.c (_gpgme_data_new, _gpgme_data_release): Likewise.
-       * data-compat.c (gpgme_data_new_from_filepart): Likewise.
-       * data-mem.c (mem_write, mem_release, gpgme_data_new_from_mem,
-       _gpgme_data_get_as_string): Likewise.
-       * debug.c (debug_init): Likewise.
-       * decrypt.c (_gpgme_release_decrypt_result): Likewise.
-       * delete.c (_gpgme_release_delete_result): Likewise.
-       * edit.c (_gpgme_release_edit_result, _gpgme_op_edit_start):
-       Likewise.
-       * encrypt.c (_gpgme_release_encrypt_result): Likewise.
-       * engine.c (_gpgme_engine_get_info, _gpgme_engine_new,
-       _gpgme_engine_release): Likewise.
-       * engine-gpgsm.c (_gpgme_gpgsm_new, _gpgme_gpgsm_release,
-       _gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
-       gpgsm_set_recipients, _gpgme_gpgsm_op_encrypt,
-       _gpgme_gpgsm_op_export, _gpgme_gpgsm_op_genkey,
-       _gpgme_gpgsm_op_import, _gpgme_gpgsm_op_keylist,
-       _gpgme_gpgsm_op_keylist_ext, _gpgme_gpgsm_op_sign,
-       _gpgme_gpgsm_op_verify, gpgsm_status_handler): Likewise.
-       * genkey.c (_gpgme_release_genkey_result): Likewise.
-       * gpgme.c (gpgme_new, gpgme_release): Likewise.
-       * import.c (_gpgme_release_import_result): Likewise.
-       * key.c (_gpgme_key_cache_init, _gpgme_key_cache_add, key_new,
-       add_subkey, gpgme_key_release, _gpgme_key_append_name): Likewise.
-       * keylist.c (_gpgme_release_keylist_result, keylist_colon_handler,
-       _gpgme_op_keylist_event_cb, gpgme_op_keylist_next): Likewise.
-       * ops.h (test_and_allocate_result): Likewise.
-       * passphrase.c (_gpgme_release_passphrase_result,
-       _gpgme_passphrase_status_handler,
-       _gpgme_passphrase_command_handler): Likewise.
-       * progress.c (_gpgme_progress_status_handler): Likewise.
-       * recipient.c (gpgme_recipients_new, gpgme_recipients_release,
-       gpgme_recipients_add_name_with_validity): Likewise.
-       * rungpg.c (_gpgme_gpg_new, _gpgme_gpg_release,
-       _gpgme_gpg_add_arg, _gpgme_gpg_add_data,
-       _gpgme_gpg_set_colon_line_handler, free_argv, free_fd_data_map,
-       build_argv, _gpgme_gpg_spawn, read_status, read_colon_line):
-       Likewise.
-       * sign.c (_gpgme_release_sign_result): Likewise.
-       * signers.c (_gpgme_signers_add): Likewise.
-       * trustlist.c (trust_item_new, trustlist_colon_handler,
-       _gpgme_op_trustlist_event_cb, gpgme_op_trustlist_next,
-       gpgme_trustitem_release): Likewise.
-       * verify.c (_gpgme_release_verify_result, finish_sig): Likewise.
-       * version.c (gpgme_get_engine_info, _gpgme_get_program_version):
-       Likewise.
-       * w32-io.c (create_reader, create_writer, destroy_reader,
-       destroy_writer, build_commandline, _gpgme_io_spawn): Likewise.
-       * w32-sema.c (critsect_init, _gpgme_sema_cs_destroy): Likewise.
-       * w32-util.c (read_w32_registry_string): Likewise.
-       * wait.c (_gpgme_fd_table_deinit, _gpgme_fd_table_put,
-       _gpgme_wait_event_cb, _gpgme_add_io_cb, _gpgme_remove_io_cb)
-       * data-compat.c: Include <stdlib.h>.
-
-2002-10-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       New data object component:
-
-       * gpgme.h (GpgmeDataReadCb, GpgmeDataWriteCb, GpgmeDataSeekCb,
-       GpgmeDataReleaseCb): New types.
-       (struct GpgmeDataCbs): New structure.
-       (gpgme_data_read): Changed prototype to match that of read() closely.
-       (gpgme_data_write): Similar for write().
-       (gpgme_data_seek, gpgme_data_new_from_cbs, gpgme_data_new_from_fd,
-       gpgme_data_new_from_stream): New prototypes.
-       (gpgme_data_get_type, gpgme_check_engine): Prototype removed.
-
-       * Makefile.am (libgpgme_la_SOURCES): Add data.h, data-fd.c,
-       data-stream.c, data-mem.c, data-user.c and data-compat.c.
-       * data.c: Reimplemented from scratch.
-       * (data-compat.c, data-fd.c, data.h, data-mem.c, data-stream.c,
-       data-user.c): New file.
-       * context.h (struct gpgme_data_s): Removed.
-       * conversion.c: Include <errno.h> and <sys/types.h>.
-       (_gpgme_data_append): New function.
-       * data.c (_gpgme_data_append_string): Move to ...
-       * conversion.c (_gpgme_data_append_string): ... here.
-       * data.c (_gpgme_data_append_for_xml): Move to ...
-       * conversion.c (_gpgme_data_append_for_xml): ... here.
-       * data.c (_gpgme_data_append_string_for_xml): Move to ...
-       * conversion.c (_gpgme_data_append_string_for_xml): ... here.
-       * data.c (_gpgme_data_append_percentstring_for_xml): Move to ...
-       * conversion.c (_gpgme_data_append_percentstring_for_xml): ... here.
-
-       * ops.h (_gpgme_data_get_mode, _gpgme_data_set_mode): Prototype
-       removed.
-       * types.h (GpgmeDataMode): Type removed.
-
-       * decrypt.c (_gpgme_decrypt_start): Don't check data type or mode.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-       * encrypt.c (_gpgme_op_encrypt_start): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
-       * encrypt-sign.c (_gpgme_op_encrypt_sign_start): Likewise.
-       * export.c (_gpgme_op_export_start): Likewise.
-       * genkey.c (_gpgme_op_genkey_start): Likewise.
-       * import.c (_gpgme_op_import_start): Likewise.
-       * sign.c (_gpgme_op_sign_start): Likewise.
-       * verify.c (_gpgme_op_verify_start): Likewise.
-       
-       * encrypt.c (gpgme_op_encrypt): Remove hack that returns invalid
-       no recipient if no data was returned.
-       * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
-       no recipient if no data was returned.
-       * encrypt-sign.c (gpgme_op_encrypt_sign): Remove hack that returns
-       no recipient if no data was returned.
-
-       * engine.c (_gpgme_engine_op_verify): Add new argument to
-       differentiate detached from normal signatures.
-       * engine.h (_gpgme_engine_op_verify): Likewise for prototype.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.  Don't check
-       mode of data argument.
-       * engine-gpgsm.h (_gpgme_gpgsm_op_verify): Likewise for prototype.
-       * gpgme.h (gpgme_op_verify_start): Likewise for prototype.
-       (gpgme_op_verify): Likewise for prototype.
-       * rungpg.c (_gpgme_gpg_op_verify): Likewise.
-       * rungpg.h (_gpgme_gpg_op_verify): Likewise for prototype.
-       * verify.c (_gpgme_op_verify_start): Likewise.
-       (gpgme_op_verify_start): Likewise.
-       (gpgme_op_verify): Likewise.
-
-       * rungpg.c (struct arg_and_data_s): New member INBOUND to hold
-       direction of data object.
-       (_gpgme_gpg_add_data): Add new argument INBOUND.  Use it to
-       determine direction of data object.
-       (_gpgme_gpg_add_pm_data, _gpgme_gpg_set_command_handler,
-       _gpgme_gpg_op_decrypt, _gpgme_gpg_op_edit, _gpgme_gpg_op_encrypt,
-       _gpgme_gpg_op_encrypt_sign, _gpgme_gpg_op_export,
-       _gpgme_gpg_op_genkey, _gpgme_gpg_op_import, _gpgme_gpg_op_sign,
-       _gpgme_gpg_op_verify): Add new argument to _gpgme_gpg_add_data
-       invocation.
-       (build_argv): Use new member INBOUND to determine direction of
-       file descriptor.  Don't check the data type.
-       * rungpg.h (_gpgme_gpg_add_data): Add new argument to prototype.
-       
-       * gpgme.c (gpgme_get_op_info): Don't call
-       _gpgme_data_get_as_string if CTX->op_info is NULL.
-
-       * version.c (gpgme_check_engine): Function removed.
-
-2002-09-30  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (keylist_colon_handler): Take care when printing a
-       NULL with the DEBUG.
-
-       * engine-gpgsm.c (struct gpgsm_object_s): New member ANY.
-       (gpgsm_status_handler): Run the colon function to indicate EOF.
-       (_gpgme_gpgsm_set_colon_line_handler): Better reset ANY here.
-
-2002-09-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * conversion.c (_gpgme_hextobyte): Prevent superfluous
-       multiplication with base.  Reported by Stéphane Corthésy.
-
-       * keylist.c (gpgme_op_keylist_ext_start): Use private asynchronous
-       operation type in invocation of _gpgme_op_reset.
-
-2002-09-20  Werner Koch  <wk@gnupg.org>
-
-       * ath.c: Include sys/time.h if sys/select.h is not available.
-
-2002-09-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (keylist_status_handler): Do not call finish_key() here.
-       (gpgme_op_keylist_ext_start): Set CTX->tmp_key to NULL.
-
-2002-09-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (assuan_libobjs): Remove @LTLIBOBJS@ as we link them
-       into gpgme unconditionally.
-       (libgpgme_la_LIBADD): Change @LIBOBJS@ into @LTLIBOBJS@.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (assuan_libobjs): Use @LTLIBOBJS@ instead @LIBOBJS@.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * debug.c (_gpgme_debug_add): Test *LINE, not LINE.
-       (_gpgme_debug_end): Likewise.
-       Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * posix-io.c (_gpgme_io_select): Don't use a non-constant struct
-       initializer.
-       * version.c (_gpgme_get_program_version): Likewise.
-       Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * conversion.c (_gpgme_decode_c_string): Set DESTP before
-       modifying DEST.
-
-       * conversion.c (_gpgme_decode_c_string): Fix off by one error in
-       last change.
-       * rungpg.c (_gpgme_append_gpg_args_from_signers): Move before
-       _gpgme_op_edit so its prototype is known early on.
-
-       * conversion.c: New file.
-       * util.h: Add prototypes for _gpgme_decode_c_string and
-       _gpgme_hextobyte.
-       * keylist.c (keylist_colon_handler): Call _gpgme_decode_c_string
-       on issuer name.
-       * Makefile.am (libgpgme_la_SOURCES): Add conversion.c
-       * key.c (_gpgme_key_append_name): Replace calls to hextobyte by
-       calls to _gpgme_hextobyte.
-       (hash_key): Likewise.
-
-2002-09-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * op-support.c (_gpgme_op_reset): Set CTX->pending after calling
-       _gpgme_engine_release, as this will reset pending to zero in the
-       event done callback on cancelled operations.
-
-2002-08-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_op_edit): Add args from signers.
-       Suggested by Miguel Coca <e970095@zipi.fi.upm.es>.
-
-       * rungpg.c (_gpgme_gpg_op_edit): Add bogus ctx argument.
-       * rungpg.h: Also to prototype.
-       * engine.c (_gpgme_engine_op_edit): Likewise.
-       * engine.h: Likewise.
-       * edit.c (_gpgme_op_edit_start): Likewise.
-
-2002-08-29  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement signer
-       selection.
-       * vasprintf.c (va_copy): Define macro if not yet defined.
-
-2002-08-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * passphrase.c (_gpgme_passphrase_status_handler): Reset
-       CTX->result.passphrase->no_passphrase if passphrase is given (good
-       or bad).  Submitted by Jean DIRAISON <jean.diraison@free.fr>.
-
-2002-08-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * posix-io.c (_gpgme_io_spawn): Use a double-fork approach.
-       Return 0 on success, -1 on error.
-       * version.c (_gpgme_get_program_version): Don't wait for the child.
-       * engine.c (_gpgme_engine_housecleaning): Function removed.
-       (do_reaping): Likewise.
-       (_gpgme_engine_add_child_to_reap_list): Likewise.
-       (struct reap_s): Removed.
-       (reap_list): Likewise.
-       (reap_list_lock): Likewise.
-       * engine.h (_gpgme_engine_io_event): Remove prototypes for
-       _gpgme_engine_housecleaning and
-       _gpgme_engine_add_child_to_reap_list.
-       * rungpg.c (_gpgme_gpg_release): Don't add child to reap list.
-       (struct gpg_object_s): Remove PID member.
-       (_gpgme_gpg_new): Don't initialize GPG->pid.
-       (_gpgme_gpg_spawn): Don't set GPG->pid.
-       * wait.c (run_idle): Removed.
-       (gpgme_wait): Run idle_function directly.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * encrypt-sign.c (encrypt_sign_status_handler): Remove dead
-       variables encrypt_info and encrypt_info_len.
-       * trustlist.c (gpgme_op_trustlist_start): Set colon line handler.
-       * posix-sema.c (sema_fatal): Remove function.
-       All these reported by Stéphane Corthésy.
-
-2002-08-23  Werner Koch  <wk@gnupg.org>
-
-       * gpgme-config.in: Made --prefix work for --libs. 
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * ath.h: Update list of symbols that get a prefix: Rename the
-       ath_mutex_*_available symbols to ath_*_available.
-
-2002-08-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * stpcpy.c: New file from gnulib.
-       * Makefile.am (assuan_libobjs): Remove jnlib.
-
-2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add prototype for gpgme_op_import_ext.
-       * import.c (struct import_result_s): New member `nr_considered'.
-       Rename `any_imported' to `nr_imported'.
-       (import_status_handler): Increment nr_imported.  Set nr_considered
-       if appropriate.
-       (gpgme_op_import_ext): New function.
-       (gpgme_op_import): Implement in terms of gpgme_op_import_ext.
-
-2002-08-20  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.m4: Replaced with a new and faster version.  This does not
-       anymore try to build test programs.  If we really need test
-       programs, we should add an option to gpgme-config to do so. 
-
-       * vasprintf.c (int_vasprintf): Hack to handle NULL passed for %s.
-
-2002-08-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (_gpgme_set_op_info): Append data on subsequent calls.
-       * encrypt-sign.c (encrypt_sign_status_handler): Remove op_info
-       handling.
-
-2002-08-19  Werner Koch  <wk@gnupg.org>
-
-       * decrypt.c (is_token,skip_token): Duplicated from verify.c
-       (gpgme_op_decrypt): Hack to properly return Decryption_Failed..
-       (_gpgme_decrypt_status_handler): Create an operation info.
-
-2002-08-14  Werner Koch  <wk@gnupg.org>
-
-       * key.h (struct certsig_s): New.  Use it in gpgme_key_s.
-       * key.c (gpgme_key_release): Release it. We need to add more code
-       of course.
-       (_gpgme_key_append_name): Use memset to intialize the struct.
-       * gpgme.h (GPGME_KEYLIST_MODE_SIGS): New.
-       * rungpg.c (_gpgme_gpg_op_keylist): Include sigs in listing depending
-       non the list mode.
-       
-       * key.c (gpgme_key_get_string_attr): Use GPGME_ATTR_TYPE to return
-       information about the key type (PGP or X.509).
-       (gpgme_key_get_ulong_attr): Likewise.
-
-       * keylist.c (keylist_colon_handler): Include 1 in the check for
-       valid algorithms so that RSA is usable.  Store the issuer name and
-       serial number also for "crs" records.  Parse the expire date for
-       subkeys.
-       (set_userid_flags): Put them onto the last appended key.
-
-2002-07-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_op_edit): Use --with-colons.
-
-2002-07-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.c (gpgme_data_read): For GPGME_DATA_TYPE_NONE, return EOF
-       instead an error.
-
-       The following changes make it possible to flush an inbound data
-       pipe before invoking a command handler:
-
-       * posix-io.c (_gpgme_io_select): Accept new argument NONBLOCK to
-       _gpgme_io_select.  Set timeout of 0 if this is set.
-       * w32-io.c (_gpgme_io_select): Likewise.
-       * io.h: Add new argument NONBLOCK to _gpgme_io_select prototype.
-       * wait.c (do_select): Add new argument to _gpgme_io_select
-       invocation.
-       * rungpg.h (_gpgme_gpg_set_command_handler): Add new argument
-       linked_data to prototype.
-       * engine.h (_gpgme_engine_set_command_handler): Likewise.
-       * engine.c (_gpgme_engine_set_command_handler): Likewise.
-       * passphrase.c (_gpgme_passphrase_start): Pass NULL as linked_data
-       argument to _gpgme_engine_set_command_handler.
-       * rungpg.c (struct gpg_object_s): New members linked_data and
-       linked_idx in CMD.
-       (_gpgme_gpg_new): Initialize those new members.
-       (_gpgme_gpg_set_command_handler): Accept new argument linked_data.
-       (build_argv): Handle linked_data in the same hack as cb_data.
-       (read_status): If linked_data is in use, flush the pipe before
-       activating the command handler.
-       * gpgme.h: Add prototypes for gpgme_op_edit_start and
-       gpgme_op_edit.
-
-       The next changes export the status codes to the user:
-
-       * decrypt.c (_gpgme_decrypt_status_handler): Likewise, also prefix
-       all STATUS_ with GPGME_.
-       * delete.c (delete_status_handler): Likewise.
-       * decrypt-verify.c (decrypt_verify_status_handler): Likewise.
-       * encrypt.c (_gpgme_encrypt_status_handler): Likewise.
-       (_gpgme_encrypt_sym_status_handler): Likewise.
-       * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
-       * engine-gpgsm.c (parse_status): Likewise.
-       (gpgsm_status_handler): Likewise.
-       (gpgsm_set_recipients): Likewise.
-       * export.c (export_status_handler): Likewise.
-       * genkey.c (genkey_status_handler): Likewise.
-       * import.c (append_xml_impinfo): Likewise.
-       (import_status_handler): Likewise.
-       * keylist.c (keylist_status_handler): Likewise.
-       * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
-       (command_handler): Likewise.
-       * progress.c (_gpgme_progress_status_handler): Likewise.
-       * sign.c (_gpgme_sign_status_handler): Likewise.
-       * trustlist.c (trustlist_status_handler): Likewise.
-       * verify.c (_gpgme_verify_status_handler): Likewise.
-       * gpgme.h (GpgmeEditCb): New type.
-       * rungpg.h (GpgStatusCode): Rename and move to ...
-       * gpgme.h (GpgmeStatusCode): ... this and here.
-       * Makefile.am (status-table.h): Run mkstatus on gpgme.h, not rungpg.h.
-       * mkstatus: Prefix STATUS with GPGME_.
-       * rungpg.h (GpgStatusHandler, GpgCommandHandler): Change type
-       accordingly.
-       * ops.h (_gpgme_verify_status_handler,
-       _gpgme_decrypt_status_handler, _gpgme_sign_status_handler,
-       _gpgme_encrypt_status_handler, _gpgme_passphrase_status_handler,
-       _gpgme_progress_status_handler): Likewise.
-       * rungpg.c (struct gpg_object_s): Likewise for CMD.code.
-
-       These changes add an edit operation to GPGME:
-       
-       * context.h (struct gpgme_context_s): New member RESULT.edit.  *
-       ops.h: Add prototype for _gpgme_release_edit_result and
-       _gpgme_passphrase_command_handler.
-       * passphrase.c (command_handler): Make non-static and rename to ...
-       (_gpgme_passphrase_command_handler): ... this.
-       (_gpgme_passphrase_start): Use new name for command handler.
-       * types.h: Add EditResult type.
-       * gpgme.c (_gpgme_release_result): Release EDIT result.
-       * edit.c: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add edit.c.
-       (libgpgme_la_LDADD): Rename to libgpgme_la_LIBADD, and include
-       assuan_libobjs.
-       (assuan_libobjs): New variable, set this instead
-       libgpgme_la_LIBADD.
-       * engine.h (_gpgme_engine_op_edit): New prototype.
-       * engine.c (_gpgme_engine_op_edit): New function.
-       * rungpg.h (_gpgme_gpg_op_edit): New prototype.
-       * rungpg.c (_gpgme_gpg_op_edit): New function.
-
-2002-07-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * delete.c (delete_problem): New case ambigious specification.
-       (delete_status_handler): Handle new case (poorly).
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_delete): Implement this.
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (libgpgme_la_LDADD): Add @LIBOBJS@ for vasprintf and
-       fopencookie.
-       * vasprintf.c: Update to more recent libiberty version.
-       * debug.h: Replace #elsif with #elif.
-
-       Submitted by Stéphane Corthésy:
-       * util.h (vasprintf): Correct prototype.
-       * encrypt-sign.c: Include <stddef.h>.
-       (encrypt_sign_status_handler): Change type of ENCRYPT_INFO_LEN to
-       size_t.
-       * ath-pthread.c: Include <stdlib.h>, not <malloc.h>.
-       * ath-pth.c: Likewise.
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.c (fdt_global): Make static.  Reported by Stéphane
-       Corthésy.
-
-       * rungpg.c (_gpgme_gpg_op_keylist_ext): Skip empty string
-       patterns.  Reported by Stéphane Corthésy.
-
-       * key.c (gpgme_key_get_as_xml): Add OTRUST attribute.  Requested
-       by Stéphane Corthésy.
-       (gpgme_key_get_string_attr): Add GPGME_ATTR_SIG_SUMMARY case to
-       silence gcc warning.
-
-       * rungpg.c (_gpgme_gpg_new): Always set utf8 as charset.
-
-2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_set_io_cbs): Deal with CTX being NULL.
-
-       * gpgme.c (_gpgme_op_event_cb_user): New function.
-       * op-support.c (_gpgme_op_reset): Support a new mode of operation
-       for private or user event loop.  Use new user event callback
-       wrapper.
-       * trustlist.c (gpgme_op_trustlist_start): Use this new mode.
-       * keylist.c (gpgme_op_keylist_start): Likewise.
-
-       * rungpg.c (_gpgme_gpg_io_event): New function.
-       * rungpg.h (_gpgme_gpg_io_event): New prototype.
-       * engine-gpgsm.c (_gpgme_gpg_io_event): New function.
-       * engine-gpgsm.h (_gpgme_gpgsm_io_event): New prototype.
-       * engine.c (_gpgme_engine_io_event): New function.
-       * engine.h (_gpgme_engine_io_event): New prototype.
-       * keylist.c (finish_key): Call _gpgme_engine_io_event, and move
-       the real work for the default IO callback routines to ...
-       (_gpgme_op_keylist_event_cb): ... here.  New function.
-       * trustlist.c (trustlist_colon_handler): Signal
-       GPGME_EVENT_NEXT_TRUSTITEM.  Move queue manipulation to ...
-       (_gpgme_op_trustlist_event_cb): ... here.  New function.
-       * gpgme.c (_gpgme_op_event_cb): Call _gpgme_op_keylist_event_cb
-       and _gpgme_op_trustlist_event_cb when appropriate.
-       * ops.h (_gpgme_op_keylist_event_cb): New prototype.
-       (_gpgme_op_trustlist_event_cb): Likewise.
-       * op-support.c (_gpgme_op_reset): Add comment why we don't use the
-       user provided event handler directly.
-       * gpgme.h (GpgmeRegisterIOCb): Return GpgmeError value, and TAG in
-       a pointer argument.
-       * wait.c (_gpgme_add_io_cb): Likewise.
-       * wait.h (_gpgme_add_io_cb): Likewise for prototype.
-       * rungpg.c (_gpgme_gpg_add_io_cb): Call IO_CBS->add with new
-       argument.  Fix up error handling.
-       * engine-gpgsm.c (_gpgme_gpgsm_add_io_cb): Call IO_CBS->add with
-       new argument, fix up error handling.
-
-2002-07-03  Werner Koch  <wk@gnupg.org>
-
-       * encrypt.c (status_handler_finish): New.
-       (_gpgme_encrypt_status_handler): Moved some code out to the new
-       function and call this function also in case we get into the
-       status handler with an error which might happen due to a kludge in
-       engine-gpgsm.c
-
-2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
-       table (eg use synchronous mode).
-
-2002-06-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * ops.h (_gpgme_wait_on_condition): Remove HANG argument from
-       prototype and change return type to GpgmeError.
-       (_gpgme_wait_one): New prototype.
-       * wait.c (gpgme_wait): Replace with the meat from
-       _gpgme_wait_on_condition here, and remove the support for
-       conditions.
-       (_gpgme_wait_on_condition): Remove HANG argument from prototype
-       and change return type to GpgmeError.  Replace with meat from
-       _gpgme_wait_one and add support for conditions.
-       (_gpgme_wait_one): Just call _gpgme_wait_on_condition without
-       condition.
-       * keylist.c (gpgme_op_keylist_ext_start): Always use our own FD
-       table (eg use synchronous mode).
-       (gpgme_op_keylist_next): Remove HANG argument from
-       _gpgme_wait_on_condition.  Check its return value.
-       * trustlist.c (gpgme_op_trustlist_start): Always use our own FD
-       table (eg use synchronous mode).
-       (gpgme_op_trustlist_next): Remove HANG argument from
-       _gpgme_wait_on_condition.  Check its return value.
-       
-2002-06-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Fix documentation of key attribute retrieval functions.
-
-2002-06-26  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (map_assuan_error): Map No_Data_Available to EOF.
-
-       * import.c (append_xml_impinfo): Kludge to print fingerprint
-       instead of keyid for use with gpgsm.
-       (import_status_handler): Set a flag to know whether any import
-       occured.
-       (gpgme_op_import): Reurn -1 if no certificate ewas imported.
-
-2002-06-25  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_set_io_cbs) [ENABLE_GPGSM]: Fixed
-       function arguments.
-
-2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_export): Only export the keys
-       listed in RECP.
-       * export.c (gpgme_op_export): If no data was returned, return
-       GPGME_No_Recipients.
-
-2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_export): Implement.
-
-2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
-       (parse_status): New function.
-       (gpgsm_status_handler): Use parse_status.
-       (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
-       STATUS_FNC_VALUE and process status messages.
-       (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
-       (gpgsm_set_fd): Likewise.
-       (_gpgme_gpgsm_op_keylist): Likewise.
-       (_gpgme_gpgsm_op_keylist_ext): Likewise.
-       (_gpgme_gpgsm_op_sign): Likewise.
-
-2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
-
-2002-06-20  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
-
-       * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
-       (skip_token): New.
-       (_gpgme_verify_status_handler): Watch out for wrong key usage.
-       (gpgme_get_sig_string_attr): Hack to return info on the key
-       usage.  Does now make use of the former RESERVED argument which
-       has been renamed to WHATIDX.
-       (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
-
-2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
-       (_gpgme_wait_one): Only set HANG to zero if do_select returned an
-       error, or there are no more file descriptors to wait on.
-       (_gpgme_wait_on_condition): Ignore return value from do_select for
-       now.
-
-2002-06-13  Werner Koch  <wk@gnupg.org>
-
-       * verify.c (gpgme_op_verify): Make sure that we never access an
-       unitialized result structure.
-
-2002-06-12  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (struct keylist_result_s): New.
-       (_gpgme_release_keylist_result): Release it here 
-       (keylist_status_handler): Handle truncated.
-       (append_xml_keylistinfo): New.
-       * gpgme.c (_gpgme_release_result): and use it here.
-       * types.h: Declare the new type here.
-       * context.h (struct gpgme_context_s): Use it here.
-
-2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
-       (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
-       use our own close notification mechanism without interfering with
-       assuan.
-
-2002-06-11  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
-       constants.
-       * verify.c (calc_sig_summary): New.
-       (gpgme_get_sig_ulong_attr): And use it here.
-
-2002-06-10  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.h: Add new status codes TRUNCATED and ERROR.
-       * verify.c (is_token, copy_token): New.
-       (_gpgme_verify_status_handler): Use copy_token, handle the new
-       ERROR status and store the errorcode used withgpgsm and trust
-       status codes.
-       * gpgme.h: New attribute ERRTOK.
-       * key.c (gpgme_key_get_string_attr): Add dummy case for it.
-       (gpgme_get_sig_string_attr): Use it here to return the last error.
-
-2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
-       close notification for the status fd to ...
-       (_gpgme_gpgsm_new): ... here.
-       * wait.h: Include "sema.h".  Remove prototypes of
-       _gpgme_remove_proc_from_wait_queue and
-       _gpgme_register_pipe_handler.  Add prototypes of
-       _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
-       _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
-       _gpgme_wait_one..
-       * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
-       FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
-       FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
-       CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
-       proc_s.  Replace struct wait_item_s.
-       (_gpgme_fd_table_init): New function.
-       (_gpgme_fd_table_deinit): Likewise.
-       (_gpgme_fd_table_put): Likewise.
-       (set_process_done): Remove function.
-       (do_select): Take argument FDT.  Use that to decide which fds to
-       select on.
-       (_gpgme_remove_proc_from_wait_queue): Remove function.
-       (_gpgme_wait_event_cb): New function.
-       (_gpgme_wait_one): Likewise.
-       (_gpgme_register_pipe_hanldler): Remove function.
-       (_gpgme_add_io_cb): New function.
-       (_gpgme_remove_io_cb): Likewise.
-       (_gpgme_freeze_fd): Remove function.
-       (_gpgme_thaw_fd): Remove function.
-       * rungpg.c (struct fd_data_map_s): Add new member TAG.
-       (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
-       IDX to CMD.  Add new member IO_CBS.
-       (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
-       For each I/O callback, check if it should be unregistered.  If all
-       callbacks have been unregistered, trigger GPGME_EVENT_DONE.
-       Remove member RUNNING.
-       (_gpgme_gpg_new): Initialize new members.
-       (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
-       _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
-       (build_argv): Store away the index instead the file descriptor for
-       CMD.
-       (_gpgme_gpg_add_io_cb): New function.
-       (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
-       callbacks.
-       (gpg_status_handler): Change return type to void, remove PID
-       argument, close filedescriptor if EOF or error occurs.
-       (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
-       Use IO_CBS->remove instead _gpgme_freeze_fd.
-       (gpg_colon_line_handler): Change return type to void, remove PID
-       argument, close filedescriptor if EOF or error occurs.
-       (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
-       (_gpgme_gpg_set_io_cbs): New function.
-       * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
-       _gpgme_gpg_set_io_cbs.
-       * gpgme.h (GpgmeIOCb): New type.
-       (GpgmeRegisterIOCb): Likewise.
-       (GpgmeRemoveIOCb): Likewise.
-       (GpgmeEventIO): Likewise.
-       (GpgmeEventIOCb): Likewise.
-       (struct GpgmeIOCbs): New structure to hold I/O callbacks.
-       (gpgme_set_op_io_cbs): New prototype.
-       (gpgme_get_op_io_cbs): Likewise.
-       * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
-       for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
-       _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
-       prototype.  Add prototype for _gpgme_op_reset.
-       Add synchronous argument to _gpgme_decrypt_start prototype.
-       * io.h: Beautification.
-       * gpgme.c: Include "wait.h".
-       (gpgme_new): Initialize FDT.
-       (gpgme_set_io_cbs): New function.
-       (gpgme_get_io_cbs): Likewise.
-       (_gpgme_op_event_cb): Likewise.
-       * data.c (_gpgme_data_inbound_handler): Change return type to
-       void.  Drop PID argument.  Close FD on error and EOF.
-       (write_mem_data): Don't close FD here ...
-       (write_cb_data): ... or here ...
-       (_gpgme_data_outbound_handler): ... but here.  Change return type
-       to void.  Drop PID argument.
-       * context.h: Include "wait.h".
-       (struct gpgme_context_s): New members FDT and IO_CBS.
-       * op-support.c: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
-       * ops.h: Add prototype for _gpgme_op_reset().
-       * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
-       _gpgme_op_reset.
-       (gpgme_op_decrypt_start): Add synchronous argument.
-       (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
-       gpgme_wait.
-       * delete.c (gpgme_op_delete_start): Rename to ...
-       (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_delete_start): Just a wrapper around
-       _gpgme_op_delete_start now.
-       (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * encrypt.c: Include "wait.h".
-       (ggpgme_op_encrypt_start): Rename to ...
-       (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_encrypt_start): Just a wrapper around
-       _gpgme_op_encrypt_start now.
-       (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
-       (_gpgme_op_encrypt_sign_start): ... this.  New argument
-       SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_encrypt_sign_start): Just a wrapper around
-       _gpgme_op_encrypt_sign_start now.
-       (gpgme_op_encrypt_sign): Add synchronous argument.  Use
-       _gpgme_wait_one instead gpgme_wait.
-       * export.c (gpgme_op_export_start): Rename to ...
-       (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_export_start): Just a wrapper around
-       _gpgme_op_export_start now.
-       (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * genkey.c (gpgme_op_genkey_start): Rename to ...
-       (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_genkey_start): Just a wrapper around
-       _gpgme_op_genkey_start now.
-       (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * import.c (gpgme_op_import_start): Rename to ...
-       (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_import_start): Just a wrapper around
-       _gpgme_op_import_start now.
-       (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
-       (gpgme_op_keylist_ext_start): Likewise.
-       * sign.c (gpgme_op_sign_start): Rename to ...
-       (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
-       _gpgme_op_reset.  Make function static.
-       (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
-       now.
-       (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
-       * verify.c (gpgme_op_verify_start): Rename to ...
-       (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
-       Use _gpgme_op_reset.  Make function static.
-       (gpgme_op_verify_start): Just a wrapper around
-       _gpgme_op_verify_start now.
-       (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
-       instead gpgme_wait.
-       * engine-gpgsm.c (iocb_data_t): New type.
-       (struct gpgsm_object_s): New member status_cb.  Replace input_fd
-       and input_data with input_cb.  Replace output_fd and output_data
-       with output_cb.  Replace message_fd and message_data with
-       message_cb.  New member io_cbs.
-       (_gpgme_gpgsm_new): Initialize all new members (and drop the old
-       ones).
-       (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
-       callback, check if it should be unregistered.  If all callbacks
-       have been unregistered, trigger GPGME_EVENT_DONE.
-       (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
-       names to close the file descriptors.
-       (_gpgme_gpgsm_op_decrypt): Use new variable names,
-       (_gpgme_gpgsm_op_encrypt): Likewise.
-       (_gpgme_gpgsm_op_genkey): Likewise.
-       (_gpgme_gpgsm_op_import): Likewise.
-       (_gpgme_gpgsm_op_keylist): Likewise.
-       (_gpgme_gpgsm_op_keylist_ext): Likewise.
-       (_gpgme_gpgsm_op_sign): Likewise.
-       (_gpgme_gpgsm_op_verify): Likewise.
-       (gpgsm_status_handler): Drop argument PID.  Change return type to
-       void.  Close status pipe before returning because of EOF or error.
-       (_gpgme_gpgsm_add_io_cb): New function.
-       (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
-       callback function.
-       (_gpgme_gpgsm_set_io_cbs): New function.
-       * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
-       * engine.c (_gpgme_engine_set_io_cbs): New function.
-       * engine.h: New prototype for _gpgme_engine_set_io_cbs.
-
-2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
-
-2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * key.c: Include <ctype.h>.
-       (_gpgme_key_append_name): Skip one more char when
-       processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
-       Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
-
-2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
-       * posix-sema.c: Use that prefix here.
-       * posix-io.c: Include "ath.h".
-       (_gpgme_io_read): Use _gpgme_ath_read instead read.
-       (_gpgme_io_write): Use _gpgme_ath_write instead write.
-       (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
-       (_gpgme_io_select): Use _gpgme_ath_select instead select.
-
-2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (ath_components): New variable.
-       (ath_components_pthread): Likewise.
-       (ath_components_pth): Likewise.
-       (system_components): Add ath_componentes.
-
-       * ath.h: New file.
-       * ath.c: Likewise.
-       * ath-pthread.c: Likewise.
-       * ath-pth.c: Likewise.
-       * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
-       interface.
-       * mutex.h: Remove file.
-
-2002-05-30  Werner Koch  <wk@gnupg.org>
-
-       * key.c (gpgme_key_get_string_attr): Return NULL when asking for
-       an issuer with IDX > 0.  We don't support altIssuerNames for now.
-
-2002-05-22  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
-       missing variable definition.  Oohh - Marcus was faster.
-
-2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
-
-2002-05-21  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
-       (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
-
-2002-05-10  Werner Koch  <wk@gnupg.org>
-
-       * key.h (gpgme_key_s): Add OTRUST.
-       * keylist.c (set_ownertrust): New.
-       (keylist_colon_handler): Get the ownertrust value
-       * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
-       Return that value.
-
-2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * w32-util.c: New static variable GET_PATH_LOCK.
-       (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
-       Take lock while determining path.
-       (_gpgme_get_gpgsm_path): Likewise.
-       * version.c (do_subsystem_inits): Set DONE to 1 after
-       initialization.
-       (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
-       while determining engine info.
-       * rungpg.c (_gpgme_gpg_get_version): New variable
-       GPG_VERSION_LOCK.  Take the lock while determining the program
-       version.
-       * posix-io.c: Include "sema.h".
-       (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
-       while fixing the signals.
-       (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
-       * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
-       KEY_REF_LOCK.
-       (capabilities_to_string): Make STRINGS very const.
-       (_gpgme_key_cache_add): Lock the key cache.
-       (_gpgme_key_cache_get): Likewise.
-       (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
-       * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
-       IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
-       const.
-       * engine.c (_gpgme_engine_get_info): New variable
-       ENGINE_INFO_LOCK.  Take lock while determining engine info.
-       * engine-gpgsm.c: Include "sema.h".
-       (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
-       lock while getting program version.
-
-2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * debug.h: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
-       * util.h: Removed all prototypes and declarations related to
-       debugging.  Include "debug.h".
-
-       * debug.c (debug_level): Comment variable and remove superfluous
-       zero initializer.
-       (errfp): Likewise.
-       (_gpgme_debug_enabled): Function removed.
-       (struct debug_control_s): Definition removed.
-       (_gpgme_debug_level): Function removed.
-       (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
-       pritnf-style format specification and a variable number of
-       arguments.
-       (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
-       starts out with "%s" for simplicity.
-       (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
-       TEXT argument anymore.
-
-       * posix-io.c (_gpgme_io_select): Use new level argument for
-       DEBUG_BEGIN instead explicit if construct.
-
-       * debug.c (debug_init): Remove superfluous zero initializer,
-       remove volatile flag of INITIALIZED.  Do not use the
-       double-checked locking algorithm, it is fundamentally flawed and
-       will empty your fridge (on a more serious note, despite the
-       volatile flag it doesn't give you the guarantee you would expect,
-       for example on a DEC Alpha or an SMP machine.  The volatile only
-       serializes accesses to the volatile variable, but not to the other
-       variables).
-
-2002-05-03  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
-       output to /dev/null.
-
-       * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
-       * gpgme.c (gpgme_get_protocol): New.
-
-       * data.c (gpgme_data_write): Changed type of BUFFER to void*.
-       (gpgme_data_read): Ditto.
-
-       * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
-       lines so that a claim can be made without looking up the key.
-       (gpgme_get_sig_string_attr): New. 
-       (gpgme_get_sig_ulong_attr): New.
-
-       * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
-
-       * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
-       list to align with the status.h file from gnupg.
-
-       * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
-       * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
-       these new status codes.  Store the expiration time 
-
-2002-04-27  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h (GpgmeData_Encoding): New.
-       * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
-       * engine-gpgsm.c (map_input_enc): New. Use it in all local
-       functions where the INPUT command gets send.
-
-2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
-       descriptor only when we don't need it anymore.  Close the message
-       descriptor if we don't need it.
-
-2002-04-26  Werner Koch  <wk@gnupg.org>
-
-       * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
-
-2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
-       GPG->cmd.cb_data, not xfree.
-
-2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
-       ttytype, lc_ctype and lc_messages options in the server.
-
-2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (map_assuan_error): Add new error codes.
-
-2002-04-23  Werner Koch  <wk@gnupg.org>
-
-       * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
-       can_certify to return the requested values.
-
-2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
-       to be NULL.
-       (gpgme_get_passphrase_cb): Likewise.
-
-2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_get_passphrase_cb): New function.
-       (gpgme_get_progress_cb): New function.
-       * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
-       gpgme_get_progress_cb.
-
-2002-03-28  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
-       * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
-       * keylist.c (keylist_colon_handler): Store them.
-       * key.c (gpgme_key_release): Free them.
-       (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
-
-2002-03-26  Werner Koch  <wk@gnupg.org>
-
-       * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
-
-2002-03-21  Werner Koch  <wk@gnupg.org>
-
-       * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
-       defined.
-
-2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (system_components): New variable, set depending on
-       HAVE_DOSISH_SYSTEM.
-       (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
-       * syshdr.h: File removed.
-
-       * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
-       * posix-sema.c: Likewise.
-       * posix-util.c: Likewise.
-
-       * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
-       * w32-sema.c: Likewise.
-       * w32-util.c: Likewise.
-
-       * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
-       * posix-sema.c: Likewise.
-       * w32-io.c: Include `io.h', do not include `syshdr.h'
-       * w32-sema.c: Likewise.
-       * w32-util.c: Likewise.
-       * data.c: Do not include `syshdr.h'.
-       * wait.c: Likewise.
-       * wait.h: Code cleanup.
-
-       * mutex.h: New file.
-       * posix-sema.c: Implement.
-
-2002-03-08  Werner Koch  <wk@gnupg.org>
-
-       * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
-
-2002-03-07  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
-
-2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
-       (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
-       is null, and if it is set, use _gpgme_encrypt_sym_status_handler
-       as status handler and run _gpgme_passphrase_start.
-       * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
-       encryption.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
-       return error value.
-
-       * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * passphrase.c (_gpgme_passphrase_status_handler): Also set the
-       error No_Passphrase if only a bad passphrase was provided.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
-       GPGME_DATA_MODE_IN, construct a command line that stores the
-       plaintext in TEXT.
-       * verify.c (gpgme_op_verify_start): Accept TEXT being
-       uninitialized, and in this case interpret SIG as a normal or
-       cleartext signature and TEXT as a return data object.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
-       Add stub function.
-
-2002-02-28  Werner Koch  <wk@gnupg.org>
-
-       * key.h (subkey_s): New member expires_at.
-       * keylist.c (keylist_colon_handler): Set it here
-       * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
-
-2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
-       * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
-       * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
-       * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
-       * engine.c (_gpgme_engine_op_keylist_ext): New function.
-       * keylist.c (gpgme_op_keylist_ext_start): New function.
-
-2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add new error code GPGME_Invalid_Recipient.
-       * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
-       rename no_recipients to no_valid_recipients.
-       (_gpgme_encrypt_status_handler): Include error for invalid
-       recipients.
-       * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
-       argument to GpgsmObject.  Use that to report back the status about
-       the recipients.
-
-2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (_gpgme_verify_status_handler): Fix the last change.
-
-2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c (_gpgme_engine_op_encrypt_sign): New function.
-       * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
-       * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
-       (_gpgme_gpg_op_sign): Use that new function.
-       (_gpgme_gpg_op_encrypt_sign): New function.
-       * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
-       * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
-       (gpgme_op_encrypt_sign): Likewise.
-       * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
-       * ops.h (_gpgme_encrypt_status_handler): Add prototype.
-       (_gpgme_sign_status_handler): Add prototype.
-       * sign.c (sign_status_handler): Rename to ...
-       (_gpgme_sign_status_handler): ... this and make non-static.
-       * encrypt.c (encrypt_status_handler): Rename to ...
-       (_gpgme_encrypt_status_handler): ... this and make non-static.
-       * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
-       * sign.c (gpgme_op_sign_start): Likewise.
-       
-2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (_gpgme_verify_status_handler): Parse the args line to
-       see if the problem is due to a missing key, and report that back
-       to the user.
-
-2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * context.h (struct gpgme_context_s): New member include_certs.
-       * gpgme.h (gpgme_set_include_certs): Add prototype.
-       (gpgme_get_include_certs): Likewise.
-       * gpgme.c (gpgme_set_include_certs): New function.
-       (gpgme_get_include_certs): Likewise.
-       (gpgme_new): Set include_certs to 1 (the default).
-       * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
-       and pass it to _gpgme_gpgsm_op_sign.
-       * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
-       include_certs and handle it.
-       * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
-       * sign.c (gpgme_op_sign_start): Add new argument to
-       _gpgme_engine_op_sign call.
-
-2002-02-14  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
-
-2002-02-13  Werner Koch  <wk@gnupg.org>
-
-       * vasprintf.c, fopencookie.c: Add replacement functions.
-       * util.h: Add prototypes for them.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
-       reach the end of the function.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
-       (gpgme_op_genkey_start): Skip newlines after opening tag.
-
-       * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
-
-2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
-       set, and pass them down to the crypto engine.
-       * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
-       * engine.h: Likewise.
-       * rungpg.h (_gpgme_gpg_spawn): Likewise.
-       * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
-       arguments.
-       * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
-       arguments are set.
-       * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
-       function.
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
-
-2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
-       mode (for now).
-
-2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.c (gpgme_wait): Add new argument STATUS, in which the
-       status of the returned context is returned.
-       (_gpgme_wait_on_condition): Rework the function a bit, to make it
-       aware of cancelled processes, and to allow to use gpgme_wait with
-       CTX being NULL (as documented in the source).
-       (struct proc_s): New member REPORTED.
-       * gpgme.h: Fix prototype.
-       * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
-       * sign.c (gpgme_op_sign): Likewise.
-       * import.c (gpgme_op_import): Likewise.
-       * genkey.c (gpgme_op_genkey): Likewise.
-       * export.c (gpgme_op_export): Likewise.
-       * encrypt.c (gpgme_op_encrypt): Likewise.
-       * delete.c (gpgme_op_delete): Likewise.
-       * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
-
-2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
-       value.
-       (gpgme_get_keylist_mode): New function.
-       (gpgme_new): Set the default for keylist_mode member of CTX.
-
-       * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
-       (gpgme_get_keylist_mode): New prototype.
-       (GPGME_KEYLIST_MODE_LOCAL): New macro.
-       (GPGME_KEYLIST_MODE_EXTERN): Likewise..
-
-2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       This patch has gotten a bit large... mmh.  The main thing that
-       happens here is that error values are now not determined in the
-       operation function after gpgme_wait completed, but in the status
-       handler when EOF is received.  It should always be the case that
-       either an error is flagged or EOF is received, so that after a
-       gpgme_wait you should never have the situation that no error is
-       flagged and EOF is not received.  One problem is that the engine
-       status handlers don't have access to the context, a horrible
-       kludge works around this for now.  All errors that happen during a
-       pending operation should be catched and reported in ctx->error,
-       including out-of-core and cancellation.  This rounds up neatly a
-       couple of loose ends, and makes it possible to pass up any errors
-       in the communication with the backend as well.  As a bonus, there
-       will be a function to access gpgme->wait, so that the operations
-       can truly be implemented with their _start function.
-
-       * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
-       error back to the context.
-       * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
-
-       * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
-
-       * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
-       to a value indication that.
-
-       * verify.c (add_notation): Set error, not out_of_core.
-       (finish_sig): Likewise.
-       (gpgme_op_verify_start): Don't clear out_of_core.
-       (_gpgme_verify_status_handler): At EOF, clean up the notation data.
-       (gpgme_op_verify): And don't do it here.
-
-       * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
-       (gpgme_op_trustlist_start): Don't clear out_of_core.
-       (gpgme_op_trustlist_next): Check error, not out_of_core.
-       (gpgme_op_trustlist_end): Likewise.
-
-       * ops.h (test_and_allocate_result): New macro.
-       (_gpgme_passphrase_result): Remove prototype.
-       * delete.c (gpgme_op_delete): Return error from context.
-       (delete_status_handler): Use macro test_and_allocate_result.
-       Perform error checking at EOF.
-       (gpgme_op_delete_start): Release result.
-       * passphrase.c (_gpgme_passphrase_status_handler): Use macro
-       test_and_allocate_result, and perform error checking here.
-       (_gpgme_passphrase_result): Function removed.
-       * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
-       (gpgme_op_sign): Just return the error value from the context.
-       (sign_status_handler): Only progress if no error is set yet.  If
-       we process an EOF, set the resulting error value (if any).
-       * decrypt.c (_gpgme_decrypt_result): Function removed.
-       (create_result_struct): Function removed.
-       (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
-       caclulate error on EOF, do not progress with errors.
-       (_gpgme_decrypt_start): Do not set out_of_core to zero.
-       (gpgme_op_decrypt): Just return the error value from the context.
-       * encrypt.c (encrypt_status_handler): Perform the error checking
-       here.
-       (gpgme_op_encrypt_start): Do not clear out_of_core.
-       * export.c (export_status_handler): Return if error is set in context.
-       (gpgme_op_export_start): Release result.
-       (gpgme_op_export): Return error from context.
-       * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
-       the context.
-       * genkey.c (genkey_status_handler): Use macro
-       test_and_allocate_result.  Perform error checking at EOF.
-       (gpgme_op_genkey): Just return the error from context.
-       * import.c (gpgme_op_import): Return the error from context.
-       (import_status_handler): Use macro test_and_allocate_result.
-       * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
-       (gpgme_op_keylist_next): Return error of context.
-       (keylist_colon_handler): Set error instead out_of_code.
-       (finish_key): Likewise.
-
-       * context.h: Remove member out_of_core, add member error.
-       * gpgme.c (_gpgme_release_result): Clear error flag.
-
-       * engine.h (_gpgme_engine_get_error): New prototype.
-       * engine.c (_gpgme_engine_get_error): New function.
-       * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
-
-       * engine-gpgsm.c (map_assuan_error): New function.
-       (gpgsm_assuan_simple_command): Change return type to GpgmeError,
-       use the new function to map error values.
-       (gpgsm_set_fd): Change return type tp GpgmeError.
-       (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
-       (gpgsm_set_recipients): Likewise.  Change type of return value
-       equivalently.  Adjust error values.
-       (_gpgme_gpgsm_op_import): Likewise.
-       (_gpgme_gpgsm_op_sign): Likewise.
-       (struct gpgsm_object_s): New member error.
-       (gpgsm_status_handler): Set error if error occurs.  Determine
-       error number from ERR line received.  If assuan_read_line fails,
-       terminate the connection.
-
-2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (MOSTLYCLEANFILES): New variable.
-
-2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
-       connection to the server.
-
-2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.h: Add STATUS_KEY_CREATED.
-
-       * progress.c: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
-
-       * genkey.c (genkey_status_handler): Use
-       _gpgme_progress_status_handler.  Add check for status.
-       (struct genkey_result_s): New structure.
-       (_gpgme_release_genkey_result): New function.
-       (gpgme_op_genkey): Check for error.
-       * gpgme.c (_gpgme_release_result): Call
-       _gpgme_release_genkey_result.
-       * ops.h (_gpgme_release_genkey_result): Add prototype.
-       * types.h (GenKeyResult): New type.
-       * context.h (gpgme_context_s): Add GenKeyResult to member result.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (_gpgme_release_result): Call
-       _gpgme_release_delete_result.
-       * ops.h (_gpgme_release_delete_result): Add prototype.
-       * types.h (DeleteResult): New type.
-       * context.h (gpgme_context_s): Add DeleteResult to member result.
-
-       * delete.c (enum delete_problem): New type.
-       (struct delete_result_s): New structure.
-       (_gpgme_release_delete_result): New function.
-       (delete_status_handler): Implement more status codes.
-       (gpgme_op_delete): Return error on failure.
-
-       * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * import.c (struct import_result_s): New structure.
-       (_gpgme_release_import_result): New function.
-       (append_xml_impinfo): Likewise.
-       (import_status_handler): Implement.
-       * gpgme.c (_gpgme_release_result): Add call to
-       _gpgme_release_import_result.
-       * ops.h (_gpgme_release_import_result): Add prototype.
-       * types.h (ImportResult): New type.
-       * context.h (gpgme_context_s): Add ImportResult to member result.
-
-       * encrypt.c (gpgme_op_encrypt): Code clean up.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add lots of comment and fix the formatting.  Add
-       gpgme_trustlist_end prototype.
-
-2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
-       gpgme_register_idle to return and accept this type.
-       * wait.c (gpgme_register_idle): Fix type.
-       Save and return old value of idle_function.
-
-2002-01-29  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
-
-       * keylist.c (keylist_colon_handler): Add support for the new "crs"
-       record type.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
-       not assuan_pipe_disconnect.
-
-       * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
-       jnlib (needed by assuan) statically into libgpgme.  Linking a
-       static library into a shared library this way is not portable.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
-       void**.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
-       from off_t to size_t.
-       * gpgme.h: Likewise.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * wait.c (_gpgme_wait_on_condition): If the process finished,
-       reset the pending flag.  Also if the operation was cancelled.
-
-       (struct proc_s): Rename READY to DONE.
-       (wait_item_s): Likewise.
-       (set_process_ready): Rename to ...
-       (set_process_done): ... this.
-       (_gpgme_remove_proc_from_wait_queue): Call set_process_done
-       instead set_process_ready.
-       (_gpgme_wait_on_condition): Likewise.
-       (do_select): Rename READY to DONE.
-
-       * verify.c (gpgme_op_verify): Do not set pending to zero here.
-       * sign.c (gpgme_op_sign): Likewise.
-       * import.c (gpgme_op_import): Likewise.
-       * genkey.c (gpgme_op_genkey): Likewise.
-       * export.c (gpgme_op_export): Likewise.
-       * encrypt.c (gpgme_op_encrypt): Likewise.
-       * delete.c (gpgme_op_delete): Likewise.
-       * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
-       * decrypt.c (gpgme_op_decrypt): Likewise.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * export.c: Cleanup.
-
-2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * trustlist.c: Various source clean ups.
-       (my_isdigit): Removed.
-       (gpgme_op_trustlist_end): New function.
-
-2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c: Various source clean ups, like renaming C to CTX where
-       appropriate.
-       (gpgme_new): Clear R_CTX before starting the work.
-       (my_isdigit): Removed.
-       (my_isxdigit): Likewise.
-
-       * data.c: Various source clean ups.
-       (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
-       (gpgme_data_new_with_read_cb): Similar for READ_CB.
-       (gpgme_data_new_from_file): Loop over fread while EINTR.
-       (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
-       be zero.  Loop over fread while EINTR.
-
-       (my_isdigit): Removed.
-       (my_isxdigit): Likewise.
-
-2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
-       Pipe_Error where appropriate.
-
-2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
-
-       * version.c (get_engine_info): Remove prototype.
-
-2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
-       Fill it with the servers fds, and pass it to assuan_pipe_connect.
-
-2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (gpgme_op_keylist_end): New function.
-       * gpgme.h (gpgme_op_keylist_end): New prototype.
-
-       * engine.h (gpgme_engine_check_version): Move prototype to ...
-       * gpgme.h (gpgme_engine_check_version): ... here.
-
-       * genkey.c (gpgme_op_genkey_start): Remove unused variable.
-
-2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * version.c (gpgme_get_engine_info): Reimplemented.
-       (gpgme_check_engine): Reimplemented.
-       (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
-
-       * engine.c: Include `io.h'.
-       (gpgme_engine_get_info): New function.
-       * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
-       Add prototype.
-
-2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
-       * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
-       Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
-
-       * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
-       (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
-       * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
-       * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
-       own function by call to _gpgme_engine_add_child_to_reap_list().
-
-       * wait.c: Include `engine.h'.
-       (run_idle): Call _gpgme_engine_housecleaning(), not
-       _gpgme_gpg_housecleaning().
-       
-2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
-       Initialize the next field of the uid structure.
-       (gpgme_key_get_as_xml): Do not list last uid first.
-
-2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
-       function [!ENABLE_GPGSM].
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
-       message_data, not SIG.
-       (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
-
-       * sign.c (sign_status_handler): Call
-       _gpgme_passphrase_status_handler early.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c: Revert last change.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
-       handler when ending this operation, otherwise the wait function
-       will sit on it.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
-       (_gpgme_gpgsm_new): Initialize some more members.
-       (_gpgme_gpgsm_release): Free the colon line handler's attic line.
-       (gpgsm_status_handler): Rework the inline-data processing.
-
-2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
-       list that are not dup'ed, for those the close-on-exec flag is set
-       now.
-       * version.c (_gpgme_get_program_version): Remove first entry in
-       CFD, as the close-on-exec flag is now set for this fd.
-
-2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
-       option to `ENCRYPT'.
-       * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
-       successfully.
-
-2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (close_notify_handler): New function.
-       (_gpgme_gpgsm_new): Manage the file descriptors a
-       bit differently.  Do not set close-on-exec flags.
-       (_gpgme_gpgsm_op_decrypt): Do not set message_fd
-       to -1, this is done by the close handler.
-       (_gpgme_gpgsm_op_encrypt): Likewise.
-       (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
-       (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
-       (_gpgme_gpgsm_op_sign): Likewise.
-       (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
-
-       * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
-       non-inherited file descriptor index of the pipe.
-
-2001-12-13  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
-       (gpgsm_status_handler): Pass datalines to a colon handler
-       * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
-       handler for gpgsm.
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
-       pattern.
-       (gpgsm_assuan_simple_command): Removed underscore from
-       assuan_write_line.
-       (_gpgme_gpgsm_start): Ditto.
-       (gpgsm_assuan_simple_command): Replaced interal Assuan read
-       function by the new assuan_read_line.  Removed the use of the
-       internal header.
-       (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
-       (_gpgme_gpgsm_start): Use the documented way to get an fd from
-       assuan.
-
-       * keylist.c (keylist_colon_handler): Handle "crt" records
-       * key.h (gpgme_key_s): Add an x509 flag.
-       * key.c (parse_x509_user_id): New.
-       (_gpgme_key_append_name): Handle x.509 names.
-
-2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
-       version of assuan.
-
-2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
-       (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
-       output descriptor.
-       (_gpgme_gpgsm_op_sign): Likewise.
-
-2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
-       occurs.
-
-2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
-
-2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
-       Deal with assuan read line returning more than one line (for now).
-
-2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
-       the current protocol definition.
-
-2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
-       ends of the pipe.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
-       for now, rungpg.h and status-table.h.
-       (gpgsm_status_handler): Implement more of the status handler.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
-       (_gpgme_engine_op_delete): Likewise.
-       (_gpgme_engine_op_encrypt): Likewise.
-       (_gpgme_engine_op_export): Likewise.
-       (_gpgme_engine_op_genkey): Likewise.
-       (_gpgme_engine_op_keylist): Likewise.
-       (_gpgme_engine_op_sign): Likewise.
-       (_gpgme_engine_op_trustlist): Likewise.
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
-       (gpgsm_assuan_simple_command): Likewise.
-       (gpgsm_set_recipients): Likewise.
-       (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
-       (_gpgme_gpgsm_op_delete): New function.
-       (_gpgme_gpgsm_op_export): Likewise.
-       (_gpgme_gpgsm_op_genkey): Likewise.
-       (_gpgme_gpgsm_op_sign): Likewise.
-       (_gpgme_gpgsm_op_keylist): Likewise.
-       (_gpgme_gpgsm_op_trustlist): Likewise.
-       (_gpgme_gpgsm_release): Release command.
-       (_gpgme_gpgsm_op_decrypt): Allocate command.
-       (_gpgme_gpgsm_op_import): Likewise.
-       (gpgsm_status_handler): Also treat `ERR' strings as EOF.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.h (gpgme_set_protocol): New prototype.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
-       (_gpgme_gpgsm_op_import): Likewise.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
-       keep them seperate.
-       (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
-
-2001-11-22  Werner Koch  <wk@gnupg.org>
-
-       * engine-gpgsm.c: Include more headers so that NULL and mk_error
-       is defined even with an undefined GPGSM_PATH.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
-       gpg_outbound_handler): Moved to ...
-       * data.c (_gpgme_data_inbound_handler, write_mem_data,
-       write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
-       _gpgme_* ones non-static.
-       * data.c: Include io.h.
-
-       * ops.h (_gpgme_data_inbound_handler): New prototype.
-       (_gpgme_data_outbound_handler): Likewise.
-       (_gpgme_gpg_spawn): Use these new functions.
-
-       * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
-       _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
-       _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
-       _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
-       _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
-       _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
-       Include <rungpg.h> for status handler function.
-
-       * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
-       input_data, output_fd, output_data, message_fd, message_data, command
-       and status.
-       (_gpgme_gpgsm_new): Open input, output and message pipes before
-       connecting to the client.  Close server's ends afterwards.
-       (_gpgme_gpgsm_release): Close open file descriptors.  Remove
-       server process from wait queue.
-       (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
-       _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
-       
-       * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
-       (_gpgme_engine_set_status_handler): Likewise.
-       (_gpgme_engine_op_verify): Likewise.
-
-2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
-
-       * context.h: Do not include rungpg.h, but engine.h.
-       (struct gpgme_context_s): Replace member gpg with engine.
-       * gpgme.c (gpgme_release): Release engine, not gpg.
-
-       * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
-       moved ...
-       * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
-       Make static, change order of arguments, and return an error value.
-       * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
-
-       * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
-       (_gpgme_gpg_op_encrypt): Likewise.
-       (_gpgme_gpg_op_decrypt): Likewise.
-       (_gpgme_gpg_op_delete): Likewise.
-       (_gpgme_gpg_op_export): Likewise.
-       (_gpgme_gpg_op_genkey): Likewise.
-       (_gpgme_gpg_op_import): Likewise.
-       (_gpgme_gpg_op_keylist): Likewise.
-       (_gpgme_gpg_op_sign): Likewise.
-       (_gpgme_gpg_op_trustlist): Likewise.
-       * rungpg.c (_gpgme_gpg_op_verify): New function.
-       (_gpgme_gpg_op_encrypt): Likewise.
-       (_gpgme_gpg_op_decrypt): Likewise.
-       (_gpgme_gpg_op_delete): Likewise.
-       (_gpgme_gpg_op_export): Likewise.
-       (_gpgme_gpg_op_genkey): Likewise.
-       (_gpgme_gpg_op_import): Likewise.
-       (_gpgme_gpg_op_keylist): Likewise.
-       (_gpgme_gpg_op_sign): Likewise.
-       (_gpgme_gpg_op_trustlist): Likewise.
-
-       * engine.h (_gpgme_engine_set_status_handler): Add prototype.
-       (_gpgme_engine_set_command_handler): Likewise.
-       (_gpgme_engine_set_colon_line_handler): Likewise.
-       (_gpgme_engine_op_decrypt): Likewise.
-       (_gpgme_engine_op_delete): Likewise.
-       (_gpgme_engine_op_encrypt): Likewise.
-       (_gpgme_engine_op_export): Likewise.
-       (_gpgme_engine_op_genkey): Likewise.
-       (_gpgme_engine_op_import): Likewise.
-       (_gpgme_engine_op_keylist): Likewise.
-       (_gpgme_engine_op_sign): Likewise.
-       (_gpgme_engine_op_trustlist): Likewise.
-       (_gpgme_engine_op_verify): Likewise.
-       (_gpgme_engine_start): Likewise.
-       * engine.c (_gpgme_engine_set_status_handler): New function.
-       (_gpgme_engine_set_command_handler): Likewise.
-       (_gpgme_engine_set_colon_line_handler): Likewise.
-       (_gpgme_engine_op_decrypt): Likewise.
-       (_gpgme_engine_op_delete): Likewise.
-       (_gpgme_engine_op_encrypt): Likewise.
-       (_gpgme_engine_op_export): Likewise.
-       (_gpgme_engine_op_genkey): Likewise.
-       (_gpgme_engine_op_import): Likewise.
-       (_gpgme_engine_op_keylist): Likewise.
-       (_gpgme_engine_op_sign): Likewise.
-       (_gpgme_engine_op_trustlist): Likewise.
-       (_gpgme_engine_op_verify): Likewise.
-       (_gpgme_engine_start): Likewise.
-
-       * verify.c (gpgme_op_verify_start): Reimplement in terms of above
-       functions.
-       * encrypt.c (gpgme_op_encrypt_start): Likewise.
-       * decrypt.c (_gpgme_decrypt_start): Likewise.
-       * passphrase.c (_gpgme_passphrase_start): Likewise.
-       * keylist.c (gpgme_op_keylist_start): Likewise.
-
-2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * types.h: Add types EngineObject and GpgsmObject.
-
-       * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
-       engine-gpgsm.c, engine.h and engine.c.
-       * engine.h: New file.
-       * engine.c: Likewise.
-       * engine-gpgsm.h: Likewise.
-       * engine-gpgsm.c: Likewise.
-       
-       * rungpg.c (_gpgme_gpg_get_version): New function.
-       (_gpgme_gpg_check_version): Likewise.
-       * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
-       _gpgme_gpg_check_version.
-
-       * version.c (compare_versions): Rename to ...
-       (_gpgme_compare_versions): ... this.  Make non-static.
-       (gpgme_check_version): Use _gpgme_compare_versions rather than
-       compare_versions.
-       (gpgme_check_engine): Likewise.
-       * ops.h (_gpgme_get_program_version): Add prototype.
-
-2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
-       (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
-       (libgpgme_la_LIBADD): Likewise.
-
-2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
-
-       * version.c: Remove global variables lineno and
-       tmp_engine_version.
-       (version_handler): Removed.
-       (_gpgme_get_program_version): New function.
-       (get_engine_info): Don't use context and version_handler,
-       but _gpgme_get_program_version.
-       * ops.h (_gpgme_get_program_version): Add prototype for
-       _gpgme_get_program_version (we expect to use it elsewhere soon).
-
-2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
-
-       * version.c (get_engine_info): If GnuPG is not available, return
-       an error message.
-       * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
-       undefined.
-       (_gpgme_get_gpgsm_path): New function.
-       * w32-util.c (find_program_in_registry): New static function.
-       (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
-       to use find_program_in_registry.
-       (_gpgme_get_gpgsm_path): New function.
-       (util.h): Prototype _gpgme_get_gpgsm_path).
-       * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
-       returns non-null.
-
-2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * decrypt-verify.c: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
-       * types.h: Add decrypt-verify types.
-       * ops.h: Likewise.
-       * context.h: Add result type for decrypt-verify.
-       * gpgme.h: Add decrypt-verify prototypes.
-
-       * decrypt.c (decrypt_status_handler): Renamed to ...
-       (_gpgme_decrypt_status_handler): ... this.  Make non-static.
-       (_gpgme_decrypt_start): New function, derived from
-       gpgme_op_decrypt_start.
-       (gpgme_op_decrypt_start): Reimplement in terms of
-       _gpgme_decrypt_start.
-       (_gpgme_decrypt_result): New function to retrieve error value.
-       (gpgme_op_decrypt): Use _gpgme_decrypt_result.
-       * ops.h: Add prototypes for new functions.
-
-       * verify.c (verify_status_handler): Renamed to ...
-       (_gpgme_verify_status_handler): ... this.  Make non-static.
-       (gpgme_op_verify_start): Use new function name.
-       (intersect_stati): Renamed to ...
-       (_gpgme_intersect_stati): ... this.  Make non-static.
-       (gpgme_op_verify): Use new name.
-       * ops.h: Add prototypes for new functions.
-
-2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * passphrase.c: New file.
-       * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
-       * ops.h (_gpgme_passphrase_result): Add prototypes from
-       passphrase.c.
-       * types.h: Likewise.
-       * context.h: Add member passphrase to result.
-       * gpgme.c (_gpgme_release_result): Release passphrase member.
-
-       * decrypt.c: Some formatting and variable name changes (like
-       CTX instead C).
-       (struct decrypt_result_s): Remove members now found in
-       passphrase result.
-       (_gpgme_release_decrypt_result): Don't release removed members.
-       (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
-       and don't handle the cases catched there.
-       (command_handler): Removed.
-       (gpgme_op_decrypt_start): Don't set command handler, but invoke
-       _gpgme_passphrase_start which does it.
-       (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
-       cases covered by it.
-
-       * sign.c Some formatting and variable name changes (like
-       CTX instead C).
-       (struct sign_result_s): Remove members now found in
-       passphrase result.
-       (_gpgme_release_sign_result): Don't release removed members.
-       (sign_status_handler): Call _gpgme_passphrase_status_handler,
-       and don't handle the cases catched there.
-       (command_handler): Removed.
-       (gpgme_op_sign_start): Don't set command handler, but invoke
-       _gpgme_passphrase_start which does it.
-       (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
-       cases covered by it.
-
-2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * decrypt.c (command_handler): Fix last change.
-
-2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
-       Rename R2 to NEXT_RESULT.
-       (intersect_stati): Rename RES to RESULT.
-       (gpgme_get_sig_status): Likewise.  Do not check return_type, but
-       the member verify of result.
-       (gpgme_get_sig_key): Likewise.
-
-       * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
-       RESULT is zero, return.
-       (sign_status_handler, command_handler): Do not check return_type,
-       but the member sign of result.
-       (gpgme_op_sign): Likewise.  Drop assertion.
-
-       * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
-       If RESULT is zero, return.
-       (encrypt_status_handler): Do not check return_type, but the member
-       encrypt of result.
-       (gpgme_op_encrypt): Likewise.  Drop assertion.
-
-       * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
-       (create_result_struct): Do not set result_type.
-       (command_handler, decrypt_status_handler): Do not check
-       return_type, but the member decrypt of result.
-       (gpgme_op_decrypt): Likewise.  Drop assertion.
-
-       * context.h (enum ResultType): Removed.
-       (struct gpgme_context_s): Remove member result_type.
-       (struct result): Replaces union result.
-       * gpgme.c: Include string.h.
-       (_gpgme_release_result): Release all members of c->result, which
-       is now a struct.  Zero out all members of the struct afterwards.
-
-2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
-       Release all members of the list GPG->arglist.
-       Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
-
-2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
-
-       * key.c: Include string.h.
-       * data.c: Likewise.
-       * recipient.c: Likewise.
-
-2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * context.h: New member signers_len.
-       * signers.c (gpgme_signers_clear): Require that signers are
-       non-NULL with assertion.  Use signers_len to determine how much
-       keys to release.  Add documentation.
-       (gpgme_signers_add): Use signers_len to determine if the buffer is
-       large enough.  Use xtryrealloc rather than xtrymalloc and copying.
-       Add documentation.
-       (gpgme_signers_enum): Use signers_len to determine if key is
-       available.  Add documentation.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * data.c (_gpgme_data_append): Check if LENGTH is smaller than
-       ALLOC_CHUNK, not DH->length.
-
-2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgme.c (gpgme_set_protocol): Fix last change.
-
-2001-10-15  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h (GpgmeProtocol): New.
-       * gpgme.c (gpgme_set_protocol): New.
-
-2001-09-26  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
-       (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
-
-2001-09-17  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
-       callers to use this function without a check for tmp_key.
-       
-       * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
-       emptying the queue.  Bug reported by Stéphane Corthésy.
-
-2001-09-12  Werner Koch  <wk@gnupg.org>
-
-       * data.c (gpgme_data_rewind): Allow rewind for callbacks.
-
-2001-09-07  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.h: Add NO_RECP.
-       * encrypt.c (encrypt_status_handler): Take on No_RECP.
-       (gpgme_op_encrypt): Better error return.
-
-       * verify.c (verify_status_handler): Take on NODATA.
-
-2001-09-03  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.h: Added STATUS_INV_RECP.
-       * gpgme.c (_gpgme_release_result): Add support for new
-       EncryptResult object.
-       * encrypt.c (append_xml_encinfo): New.
-       (encrypt_status_handler): Add some status parsing.
-       (_gpgme_release_encrypt_result): New.
-
-2001-08-29  Werner Koch  <wk@gnupg.org>
-
-       * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
-
-       * keylist.c (keylist_colon_handler): Do a finish key if we receive
-       an EOF here.  This is probably the reason for a lot of bugs
-       related to keylisting.  It is so obvious.  Kudos to Enno Cramer
-       for pointing that out. 
-
-2001-08-28  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.c, gpgme.h (gpgme_get_op_info): New.
-       (_gpgme_set_op_info): New. 
-       (_gpgme_release_result): Reset the op_info here.
-       * sign.c (append_xml_siginfo): New.
-       (sign_status_handler): Store the sig create information.
-
-2001-07-31  Werner Koch  <wk@gnupg.org>
-
-       * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
-
-2001-07-30  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
-
-       * rungpg.c (build_argv): Disable armor comments
-       * w32-io.c (build_commandline): Need to add quotes here
-
-2001-07-24  Werner Koch  <wk@gnupg.org>
-
-       * data.c (gpgme_data_read): Add a a way to return the available bytes.
-
-2001-07-23  Werner Koch  <wk@gnupg.org>
-
-       * util.c: Removed stpcpy() because we use the version from jnlib.
-
-2001-07-19  Werner Koch  <wk@gnupg.org>
-
-       * mkstatus: Define the collating sequence for sort.
-
-2001-06-26  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
-
-2001-06-15  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
-       to Timo for pointing this out.
-
-2001-06-01  Werner Koch  <wk@gnupg.org>
-
-       * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
-       Johannes Poehlmann.
-
-2001-05-28  Werner Koch  <wk@gnupg.org>
-
-       * version.c (gpgme_check_engine): Stop version number parsing at
-       the opening angle and not the closing one.  By Tommy Reynolds.
-
-2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
-
-       * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
-       line, because it gave an error if another operation had been made 
-       before using the same context.
-       
-       * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
-       one line to release the gpg object in the context (if any).
-       
-2001-04-26  Werner Koch  <wk@gnupg.org>
-
-       * key.c, key.h (_gpgme_key_cache_init): New.
-       (_gpgme_key_cache_add): New.
-       (_gpgme_key_cache_get): New.
-       * version.c (do_subsystem_inits): Init the cache.
-       * keylist.c (finish_key): Put key into the cache
-       * verify.c (gpgme_get_sig_key): First look into the cache.
-
-2001-04-19  Werner Koch  <wk@gnupg.org>
-
-       * keylist.c (parse_timestamp): Adjusted for the changed
-       --fixed-list-mode of gpg 1.0.4h.
-
-2001-04-05  Werner Koch  <wk@gnupg.org>
-
-       * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
-
-2001-04-04  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (_gpgme_io_select): Don't select on the writer if there
-       are still bytes pending.  Timo found this not easy to track down
-       race condition. 
-
-2001-04-02  Werner Koch  <wk@gnupg.org>
-
-       * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
-       * key.c (gpgme_key_get_ulong_attr): And return those attribs.
-
-       * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
-       the mode set in the current context.  Suggested by Timo.
-
-       * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
-       can_encrypt. By Timo.
-
-2001-03-30  Werner Koch  <wk@gnupg.org>
-
-       * debug.c (debug_init): Allow to specify a debug file.
-       (_gpgme_debug_level): New.
-
-       * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
-       (_gpgme_io_select): Debug only with level > 2.
-
-2001-03-15  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.c: Included time.h.
-
-       * key.h: New keyflags for capabilities.
-       * keylist.c (set_mainkey_capability, set_subkey_capability): New.
-       (keylist_colon_handler): Parse them.
-       * gpgme.h: New attribute values for capabilties.
-       * key.c (gpgme_key_get_string_attr): Return them.
-       (capabilities_to_string): New.
-       (gpgme_key_get_ulong_attr): Return the global caps.
-
-2001-03-14  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
-       Thanks to Jan Oliver Wagner.
-
-2001-03-13  Werner Koch  <wk@gnupg.org>
-
-       * context.h: Add invalid and revoke flags to user_id structure.
-       * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
-       (keylist_colon_handler): Adjust for that.
-       (set_userid_flags): New. 
-       (set_mainkey_trust_info): Handle new key invalid flag
-       (set_subkey_trust_info): Ditto.
-       * gpgme.h: Add new attributes for key and user ID flags.
-       * key.c (_gpgme_key_append_name): Init these flags
-       (gpgme_key_get_as_xml): Print them.
-       (one_uid_as_xml): New helper for above.
-       (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
-       Return the new attributes.  Enhanced, so that subkey information
-       can be returned now.
-
-2001-02-28  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (destroy_reader): Set stop_me flag.
-       (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
-       (_gpgme_io_write): Use a writer thread to avaoid blocking.
-       (_gpgme_io_close): Cleanup a writer thread
-       (_gpgme_io_select): Repalce tthe faked wait on writing by a real
-       waiting which is now possible due to the use of a writer thread.
-
-2001-02-20  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (destroy_reader,kill_reader): New. 
-       (create_reader, reader): Add a new event to stop the thread.
-       (_gpgme_io_close): Kill the reader thread.
-
-       * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
-       * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
-
-       * wait.c: Reworked the whole thing.
-       * rungpg.c (_gpgme_gpg_new): Init pid to -1.
-       (_gpgme_gpg_release): Remove the process from the wait queue.
-
-2001-02-19  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (_gpgme_io_set_close_notify): New.
-       (_gpgme_io_close): Do the notification.
-
-       * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
-       microseconds.
-
-       * wait.c (remove_process): Don't close the fd here.
-       (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
-       (_gpgme_wait_on_condition): Remove the assert on the queue and
-       break out if we could not find the queue.  The whole thing should
-       be reworked.
-
-       * posix-io.c (_gpgme_io_set_close_notify): New.
-       (_gpgme_io_close): Do the notification.
-
-       * rungpg.c (close_notify_handler): New. 
-       (_gpgme_gpg_new): Register a callback for the fd.
-       (_gpgme_gpg_set_colon_line_handler): Ditto.
-       (build_argv): Ditto
-
-2001-02-13  Werner Koch  <wk@gnupg.org>
-
-       * rungpg.c (struct reap_s): Replaced pid_t by int.
-
-       * types.h: Add ulong typedef.
-
-       * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
-       (_gpgme_gpg_release): Reap children.
-       * io.h, posix-io.c (_gpgme_io_kill): New.
-       * w32-io.c (_gpgme_io_kill): New (dummy).
-
-       * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
-
-       * posix-io.c (_gpgme_io_read): Add some debug output. 
-       (_gpgme_io_write): Ditto.
-       (_gpgme_io_select): Increased the timeout.
-
-2001-02-12  Werner Koch  <wk@gnupg.org>
-
-       Enhanced the signature verification, so that it can how handle
-       more than one signature and is able to return more information on 
-       the signatures.
-       * verify.c (gpgme_get_sig_key): New.
-       (gpgme_get_sig_status): New.
-
-       * gpgme.h: Add stdio.h. 
-       (GpgmeSigStat): New status DIFF.
-
-2001-02-01  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
-       code to all Set/ResetEvent().
-
-       * rungpg.c (read_status): Check for end of stream only if we have
-       an r.  By Timo.
-
-2001-01-31  Werner Koch  <wk@gnupg.org>
-
-       * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
-       (propagate_term_results,clear_active_fds): Removed.
-       (count_active_fds): Renamed to .. 
-       (count_active_and_thawed_fds): .. this and count only thawed fds. 
-
-       * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
-       status.eof ;-)
-
-2001-01-30  Werner Koch  <wk@gnupg.org>
-
-       * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
-
-       * version.c (get_engine_info): Return better error information.
-
-       * posix-util.c, w32-util.c: New.
-       (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
-       * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
-
-       * signers.c (gpgme_signers_add): Ooops, one should test code and
-       not just write it; the newarr was not assigned.  Thanks to José
-       for pointing this out.  Hmmm, still not tested, why shoudl a coder
-       test his fix :-)
-
-       * w32-io.c: Does now use reader threads, so that we can use
-       WaitForMultipleObjects. 
-       * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
-       Does currently only work for W32.
-
-       * debug.c, util.h : New. Changed all fprintfs to use this new
-       set of debugging functions.
-
-2001-01-23  Werner Koch  <wk@gnupg.org>
-
-       * data.c (_gpgme_data_release_and_return_string): Fixed string
-       termination.
-
-2001-01-22  Werner Koch  <wk@gnupg.org>
-
-       * delete.c: New.
-
-       * signers.c: New.
-       * key.c (gpgme_key_ref, gpgme_key_unref): New.
-       * sign.c (gpgme_op_sign_start): Allow the use of other keys.
-
-       * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
-       * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
-
-2001-01-05  Werner Koch  <wk@gnupg.org>
-
-       * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
-
-
- Copyright 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/gpgme/Makefile.am b/tags/gpgme-1-1-1/gpgme/Makefile.am
deleted file mode 100644 (file)
index 404ebd9..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
- # Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = gpgme-config.in gpgme.m4 mkstatus libgpgme.vers \
-            versioninfo.rc.in gpgme.def
-BUILT_SOURCES = status-table.h
-MOSTLYCLEANFILES = status-table.h
-bin_SCRIPTS = gpgme-config
-m4datadir = $(datadir)/aclocal
-m4data_DATA = gpgme.m4
-include_HEADERS = gpgme.h
-
-if HAVE_PTHREAD
-ltlib_gpgme_pthread = libgpgme-pthread.la
-else
-ltlib_gpgme_pthread =
-endif
-if HAVE_PTH
-ltlib_gpgme_pth = libgpgme-pth.la
-else
-ltlib_gpgme_pth =
-endif
-
-if BUILD_W32_GLIB
-ltlib_gpgme_extra = libgpgme-glib.la
-else
-ltlib_gpgme_extra =
-endif
-
-noinst_LTLIBRARIES = libgpgme-real.la
-lib_LTLIBRARIES = libgpgme.la $(ltlib_gpgme_extra) \
-       $(ltlib_gpgme_pthread) $(ltlib_gpgme_pth)
-
-if HAVE_LD_VERSION_SCRIPT
-libgpgme_version_script_cmd = -Wl,--version-script=$(srcdir)/libgpgme.vers
-else
-libgpgme_version_script_cmd =
-endif
-
-if BUILD_ASSUAN
-assuan_cppflags = -I$(top_srcdir)/assuan
-assuan_libobjs = ../assuan/libassuan.la
-else
-assuan_cppflags =
-assuan_libobjs =
-endif
-
-if HAVE_DOSISH_SYSTEM
-system_components = w32-util.c w32-sema.c
-system_components_not_extra = w32-io.c
-else
-system_components = ath.h posix-util.c posix-sema.c posix-io.c
-system_components_not_extra =
-endif
-
-if HAVE_GPGSM
-gpgsm_components = engine-gpgsm.c
-else
-gpgsm_components =
-endif
-
-libgpgme_real_la_SOURCES =                                             \
-       gpgme.h util.h conversion.c get-env.c context.h ops.h           \
-       data.h data.c data-fd.c data-stream.c data-mem.c data-user.c    \
-       data-compat.c                                                   \
-       signers.c sig-notation.c                                        \
-       wait.c wait-global.c wait-private.c wait-user.c wait.h          \
-       op-support.c                                                    \
-       encrypt.c encrypt-sign.c decrypt.c decrypt-verify.c verify.c    \
-       sign.c passphrase.c progress.c                                  \
-       key.c keylist.c trust-item.c trustlist.c                        \
-       import.c export.c genkey.c delete.c edit.c                      \
-       engine.h engine-backend.h engine.c rungpg.c status-table.h      \
-       $(gpgsm_components) sema.h priv-io.h $(system_components)       \
-       debug.c debug.h gpgme.c version.c error.c
-
-libgpgme_la_SOURCES = ath.h ath.c $(system_components_not_extra)
-libgpgme_pthread_la_SOURCES = \
-       ath.h ath-pthread.c $(system_components_not_extra)
-libgpgme_pth_la_SOURCES = ath.h ath-pth.c $(system_components_not_extra)
-
-if BUILD_W32_GLIB
-libgpgme_glib_la_SOURCES = ath.h ath.c w32-glib-io.c
-endif
-
-AM_CPPFLAGS = $(assuan_cppflags) @GPG_ERROR_CFLAGS@
-
-
-if HAVE_W32_SYSTEM
-
-LTRCCOMPILE = $(LIBTOOL) --mode=compile $(RC) \
-     `echo $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) | \
-     sed -e 's/-I/--include-dir /g;s/-D/--define /g'`
-
-%.lo : %.rc
-       $(LTRCCOMPILE) -i $< -o $@
-
-gpgme_res = versioninfo.lo
-gpgme_res_ldflag = -Wl,.libs/versioninfo.o
-
-no_undefined = -no-undefined
-export_symbols = -export-symbols $(srcdir)/gpgme.def
-
-install-def-file:
-       $(INSTALL) $(srcdir)/gpgme.def $(DESTDIR)$(libdir)/gpgme.def
-
-uninstall-def-file:
-       -rm $(DESTDIR)$(libdir)/gpgme.def
-
-gpgme_deps = $(gpgme_res) gpgme.def
-
-else
-gpgme_res =
-gpgme_res_ldflag =
-no_undefined =
-export_symbols =
-install-def-file:
-uninstall-def-file:
-
-gpgme_deps =
-endif
-
-libgpgme_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) $(export_symbols) \
-       $(libgpgme_version_script_cmd) -version-info \
-       @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@
-libgpgme_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \
-       @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps)
-libgpgme_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \
-       @GPG_ERROR_LIBS@
-
-libgpgme_pthread_la_LDFLAGS = $(libgpgme_version_script_cmd) -version-info \
-       @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@
-libgpgme_pthread_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \
-       @LTLIBOBJS@ $(srcdir)/libgpgme.vers
-libgpgme_pthread_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \
-       -lpthread @GPG_ERROR_LIBS@
-
-libgpgme_pth_la_CFLAGS = $(AM_CFLAGS) @PTH_CFLAGS@
-libgpgme_pth_la_CPPFLAGS = $(AM_CPPFLAGS) @PTH_CPPFLAGS@
-libgpgme_pth_la_LDFLAGS = @PTH_LDFLAGS@ \
-       $(libgpgme_version_script_cmd) -version-info \
-       @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@
-libgpgme_pth_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \
-       @LTLIBOBJS@ $(srcdir)/libgpgme.vers
-libgpgme_pth_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \
-       @PTH_LIBS@ @GPG_ERROR_LIBS@
-
-if BUILD_W32_GLIB
-libgpgme_glib_la_LDFLAGS = $(gpgme_res_ldflag) $(no_undefined) \
-       $(export_symbols) $(libgpgme_version_script_cmd) -version-info \
-       @LIBGPGME_LT_CURRENT@:@LIBGPGME_LT_REVISION@:@LIBGPGME_LT_AGE@
-libgpgme_glib_la_CFLAGS = $(AM_CFLAGS) @GLIB_CFLAGS@
-libgpgme_glib_la_DEPENDENCIES = libgpgme-real.la $(assuan_libobjs) \
-       @LTLIBOBJS@ $(srcdir)/libgpgme.vers $(gpgme_deps)
-libgpgme_glib_la_LIBADD = libgpgme-real.la $(assuan_libobjs) @LTLIBOBJS@ \
-       @GPG_ERROR_LIBS@ @GLIB_LIBS@
-endif
-
-status-table.h : gpgme.h
-       $(srcdir)/mkstatus < $(srcdir)/gpgme.h > status-table.h
-
-install-data-local: install-def-file
-
-uninstall-local: uninstall-def-file
diff --git a/tags/gpgme-1-1-1/gpgme/ath-pth.c b/tags/gpgme-1-1-1/gpgme/ath-pth.c
deleted file mode 100644 (file)
index 4c883a3..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/* ath-pth.c - Pth module for self-adapting thread-safeness library
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <errno.h>
-
-#include <pth.h>
-
-#include "ath.h"
-
-
-/* The lock we take while checking for lazy lock initialization.  */
-static pth_mutex_t check_init_lock = PTH_MUTEX_INIT;
-
-/* Initialize the mutex *PRIV.  If JUST_CHECK is true, only do this if
-   it is not already initialized.  */
-static int
-mutex_pth_init (ath_mutex_t *priv, int just_check)
-{
-  int err = 0;
-
-  if (just_check)
-    pth_mutex_acquire (&check_init_lock, 0, NULL);
-  if (!*priv || !just_check)
-    {
-      pth_mutex_t *lock = malloc (sizeof (pth_mutex_t));
-      if (!lock)
-       err = ENOMEM;
-      if (!err)
-       {
-         err = pth_mutex_init (lock);
-         if (err == FALSE)
-           err = errno;
-         else
-           err = 0;
-
-         if (err)
-           free (lock);
-         else
-           *priv = (ath_mutex_t) lock;
-       }
-    }
-  if (just_check)
-    pth_mutex_release (&check_init_lock);
-  return err;
-}
-
-
-void
-ath_init (void)
-{
-  /* Nothing to do.  */
-}
-
-
-int
-ath_mutex_init (ath_mutex_t *lock)
-{
-  return mutex_pth_init (lock, 0);
-}
-
-
-int
-ath_mutex_destroy (ath_mutex_t *lock)
-{
-  int err = mutex_pth_init (lock, 1);
-  if (!err)
-    {
-      /* GNU Pth has no destructor function.  */
-      free (*lock);
-    }
-  return err;
-}
-
-
-int
-ath_mutex_lock (ath_mutex_t *lock)
-{
-  int ret = mutex_pth_init (lock, 1);
-  if (ret)
-    return ret;
-
-  ret = pth_mutex_acquire ((pth_mutex_t *) *lock, 0, NULL);
-  return ret == FALSE ? errno : 0;
-}
-
-
-int
-ath_mutex_unlock (ath_mutex_t *lock)
-{
-  int ret = mutex_pth_init (lock, 1);
-  if (ret)
-    return ret;
-
-  ret = pth_mutex_release ((pth_mutex_t *) *lock);
-  return ret == FALSE ? errno : 0;
-}
-
-
-ssize_t
-ath_read (int fd, void *buf, size_t nbytes)
-{
-  return pth_read (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_write (int fd, const void *buf, size_t nbytes)
-{
-  return pth_write (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-           struct timeval *timeout)
-{
-  return pth_select (nfd, rset, wset, eset, timeout);
-}
-
-ssize_t
-ath_waitpid (pid_t pid, int *status, int options)
-{
-  return pth_waitpid (pid, status, options);
-}
-
-
-int
-ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
-{
-  return pth_accept (s, addr, length_ptr);
-}
-
-
-int
-ath_connect (int s, const struct sockaddr *addr, socklen_t length)
-{
-  return pth_connect (s, addr, length);
-}
-
-int
-ath_sendmsg (int s, const struct msghdr *msg, int flags)
-{
-  /* FIXME: GNU Pth is missing pth_sendmsg.  */
-  return sendmsg (s, msg, flags);
-}
-
-
-int
-ath_recvmsg (int s, struct msghdr *msg, int flags)
-{
-  /* FIXME: GNU Pth is missing pth_recvmsg.  */
-  return recvmsg (s, msg, flags);
-}
-
diff --git a/tags/gpgme-1-1-1/gpgme/ath-pthread.c b/tags/gpgme-1-1-1/gpgme/ath-pthread.c
deleted file mode 100644 (file)
index b201f08..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/* ath-pthread.c - pthread module for self-adapting thread-safeness library
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#else
-# include <sys/time.h>
-#endif
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <pthread.h>
-
-#include "ath.h"
-
-
-/* The lock we take while checking for lazy lock initialization.  */
-static pthread_mutex_t check_init_lock = PTHREAD_MUTEX_INITIALIZER;
-
-/* Initialize the mutex *PRIV.  If JUST_CHECK is true, only do this if
-   it is not already initialized.  */
-static int
-mutex_pthread_init (ath_mutex_t *priv, int just_check)
-{
-  int err = 0;
-
-  if (just_check)
-    pthread_mutex_lock (&check_init_lock);
-  if (!*priv || !just_check)
-    {
-      pthread_mutex_t *lock = malloc (sizeof (pthread_mutex_t));
-      if (!lock)
-       err = ENOMEM;
-      if (!err)
-       {
-         err = pthread_mutex_init (lock, NULL);
-         if (err)
-           free (lock);
-         else
-           *priv = (ath_mutex_t) lock;
-       }
-    }
-  if (just_check)
-    pthread_mutex_unlock (&check_init_lock);
-  return err;
-}
-
-
-void
-ath_init (void)
-{
-  /* Nothing to do.  */
-}
-
-
-int
-ath_mutex_init (ath_mutex_t *lock)
-{
-  return mutex_pthread_init (lock, 0);
-}
-
-
-int
-ath_mutex_destroy (ath_mutex_t *lock)
-{
-  int err = mutex_pthread_init (lock, 1);
-  if (!err)
-    {
-      err = pthread_mutex_destroy ((pthread_mutex_t *) *lock);
-      free (*lock);
-    }
-  return err;
-}
-
-
-int
-ath_mutex_lock (ath_mutex_t *lock)
-{
-  int ret = mutex_pthread_init (lock, 1);
-  if (ret)
-    return ret;
-
-  return pthread_mutex_lock ((pthread_mutex_t *) *lock);
-}
-
-
-int
-ath_mutex_unlock (ath_mutex_t *lock)
-{
-  int ret = mutex_pthread_init (lock, 1);
-  if (ret)
-    return ret;
-
-  return pthread_mutex_unlock ((pthread_mutex_t *) *lock);
-}
-
-
-ssize_t
-ath_read (int fd, void *buf, size_t nbytes)
-{
-  return read (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_write (int fd, const void *buf, size_t nbytes)
-{
-  return write (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-           struct timeval *timeout)
-{
-  return select (nfd, rset, wset, eset, timeout);
-}
-
-ssize_t
-ath_waitpid (pid_t pid, int *status, int options)
-{
-  return waitpid (pid, status, options);
-}
-
-
-int
-ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
-{
-  return accept (s, addr, length_ptr);
-}
-
-
-int
-ath_connect (int s, const struct sockaddr *addr, socklen_t length)
-{
-  return connect (s, addr, length);
-}
-
-int
-ath_sendmsg (int s, const struct msghdr *msg, int flags)
-{
-  return sendmsg (s, msg, flags);
-}
-
-
-int
-ath_recvmsg (int s, struct msghdr *msg, int flags)
-{
-  return recvmsg (s, msg, flags);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/ath.c b/tags/gpgme-1-1-1/gpgme/ath.c
deleted file mode 100644 (file)
index dda7c31..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/* ath.c - Thread-safeness library.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <assert.h>
-#include <unistd.h>
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#else
-# include <sys/time.h>
-#endif
-#include <sys/types.h>
-#ifndef HAVE_W32_SYSTEM
-#include <sys/wait.h>
-#endif
-
-#include "ath.h"
-
-
-#define MUTEX_UNLOCKED ((ath_mutex_t) 0)
-#define MUTEX_LOCKED   ((ath_mutex_t) 1)
-#define MUTEX_DESTROYED        ((ath_mutex_t) 2)
-
-
-int
-ath_mutex_init (ath_mutex_t *lock)
-{
-#ifndef NDEBUG
-  *lock = MUTEX_UNLOCKED;
-#endif
-  return 0;
-}
-
-
-int
-ath_mutex_destroy (ath_mutex_t *lock)
-{
-#ifndef NDEBUG
-  assert (*lock == MUTEX_UNLOCKED);
-
-  *lock = MUTEX_DESTROYED;
-#endif
-  return 0;
-}
-
-
-int
-ath_mutex_lock (ath_mutex_t *lock)
-{
-#ifndef NDEBUG
-  assert (*lock == MUTEX_UNLOCKED);
-
-  *lock = MUTEX_LOCKED;
-#endif
-  return 0;
-}
-
-
-int
-ath_mutex_unlock (ath_mutex_t *lock)
-{
-#ifndef NDEBUG
-  assert (*lock == MUTEX_LOCKED);
-
-  *lock = MUTEX_UNLOCKED;
-#endif
-  return 0;
-}
-
-
-ssize_t
-ath_read (int fd, void *buf, size_t nbytes)
-{
-  return read (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_write (int fd, const void *buf, size_t nbytes)
-{
-  return write (fd, buf, nbytes);
-}
-
-
-ssize_t
-ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-           struct timeval *timeout)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return select (nfd, rset, wset, eset, timeout);
-#endif
-}
-
-ssize_t
-ath_waitpid (pid_t pid, int *status, int options)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return waitpid (pid, status, options);
-#endif
-}
-
-
-int
-ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return accept (s, addr, length_ptr);
-#endif
-}
-
-
-int
-ath_connect (int s, const struct sockaddr *addr, socklen_t length)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return connect (s, addr, length);
-#endif
-}
-
-
-int
-ath_sendmsg (int s, const struct msghdr *msg, int flags)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return sendmsg (s, msg, flags);
-#endif
-}
-
-
-int
-ath_recvmsg (int s, struct msghdr *msg, int flags)
-{
-#ifdef HAVE_W32_SYSTEM
-  return -1; /* Not supported. */
-#else
-  return recvmsg (s, msg, flags);
-#endif
-}
diff --git a/tags/gpgme-1-1-1/gpgme/ath.h b/tags/gpgme-1-1-1/gpgme/ath.h
deleted file mode 100644 (file)
index 7491f72..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ath.h - Interfaces for thread-safeness library.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef ATH_H
-#define ATH_H
-
-#ifdef HAVE_W32_SYSTEM
-  /* fixme: Check how we did it in libgcrypt.  */
-  struct msghdr { int dummy; };
-  typedef int socklen_t;
-# include <windows.h>
-# include <io.h>
-
-#else /*!HAVE_W32_SYSTEM*/
-
-# ifdef HAVE_SYS_SELECT_H
-#  include <sys/select.h>
-# else
-#  include <sys/time.h>
-# endif
-# include <sys/types.h>
-# include <sys/socket.h>
-
-#endif  /*!HAVE_W32_SYSTEM*/
-
-
-\f
-/* Define _ATH_EXT_SYM_PREFIX if you want to give all external symbols
-   a prefix.  */
-#define _ATH_EXT_SYM_PREFIX _gpgme_
-
-#ifdef _ATH_EXT_SYM_PREFIX
-#define _ATH_PREFIX1(x,y) x ## y
-#define _ATH_PREFIX2(x,y) _ATH_PREFIX1(x,y)
-#define _ATH_PREFIX(x) _ATH_PREFIX2(_ATH_EXT_SYM_PREFIX,x)
-#define ath_mutex_init _ATH_PREFIX(ath_mutex_init)
-#define ath_mutex_destroy _ATH_PREFIX(ath_mutex_destroy)
-#define ath_mutex_lock _ATH_PREFIX(ath_mutex_lock)
-#define ath_mutex_unlock _ATH_PREFIX(ath_mutex_unlock)
-#define ath_read _ATH_PREFIX(ath_read)
-#define ath_write _ATH_PREFIX(ath_write)
-#define ath_select _ATH_PREFIX(ath_select)
-#define ath_waitpid _ATH_PREFIX(ath_waitpid)
-#define ath_connect _ATH_PREFIX(ath_connect)
-#define ath_accept _ATH_PREFIX(ath_accept)
-#define ath_sendmsg _ATH_PREFIX(ath_sendmsg)
-#define ath_recvmsg _ATH_PREFIX(ath_recvmsg)
-#endif
-
-\f
-typedef void *ath_mutex_t;
-#define ATH_MUTEX_INITIALIZER 0;
-
-/* Functions for mutual exclusion.  */
-int ath_mutex_init (ath_mutex_t *mutex);
-int ath_mutex_destroy (ath_mutex_t *mutex);
-int ath_mutex_lock (ath_mutex_t *mutex);
-int ath_mutex_unlock (ath_mutex_t *mutex);
-
-/* Replacement for the POSIX functions, which can be used to allow
-   other (user-level) threads to run.  */
-ssize_t ath_read (int fd, void *buf, size_t nbytes);
-ssize_t ath_write (int fd, const void *buf, size_t nbytes);
-ssize_t ath_select (int nfd, fd_set *rset, fd_set *wset, fd_set *eset,
-                   struct timeval *timeout);
-ssize_t ath_waitpid (pid_t pid, int *status, int options);
-int ath_accept (int s, struct sockaddr *addr, socklen_t *length_ptr);
-int ath_connect (int s, const struct sockaddr *addr, socklen_t length);
-int ath_sendmsg (int s, const struct msghdr *msg, int flags);
-int ath_recvmsg (int s, struct msghdr *msg, int flags);
-
-#endif /* ATH_H */
diff --git a/tags/gpgme-1-1-1/gpgme/context.h b/tags/gpgme-1-1-1/gpgme/context.h
deleted file mode 100644 (file)
index e7e2afa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* context.h - Definitions for a GPGME context.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef CONTEXT_H
-#define CONTEXT_H
-
-#include "gpgme.h"
-#include "engine.h"
-#include "wait.h"
-
-\f
-/* Operations might require to remember arbitrary information and data
-   objects during invocations of the status handler.  The
-   ctx_op_data structure provides a generic framework to hook in
-   such additional data.  */
-typedef enum
-  {
-    OPDATA_DECRYPT, OPDATA_SIGN, OPDATA_ENCRYPT, OPDATA_PASSPHRASE,
-    OPDATA_IMPORT, OPDATA_GENKEY, OPDATA_KEYLIST, OPDATA_EDIT,
-    OPDATA_VERIFY, OPDATA_TRUSTLIST
-  } ctx_op_data_id_t;
-
-
-struct ctx_op_data
-{
-  /* The next element in the linked list, or NULL if this is the last
-     element.  */
-  struct ctx_op_data *next;
-
-  /* The type of the hook data, which can be used by a routine to
-     lookup the hook data.  */
-  ctx_op_data_id_t type;
-
-  /* The function to release HOOK and all its associated resources.
-     Can be NULL if no special dealllocation routine is necessary.  */
-  void (*cleanup) (void *hook);
-
-  /* The hook that points to the operation data.  */
-  void *hook;
-};
-typedef struct ctx_op_data *ctx_op_data_t;
-
-\f
-/* The context defines an environment in which crypto operations can
-   be performed (sequentially).  */
-struct gpgme_context
-{
-  /* The engine info for this context.  */
-  gpgme_engine_info_t engine_info;
-
-  /* The protocol used by this context.  */
-  gpgme_protocol_t protocol;
-
-  /* The running engine process.  */
-  engine_t engine;
-
-  /* True if armor mode should be used.  */
-  unsigned int use_armor : 1;
-
-  /* True if text mode should be used.  */
-  unsigned int use_textmode : 1;
-
-  /* Flags for keylist mode.  */
-  gpgme_keylist_mode_t keylist_mode;
-
-  /* Number of certs to be included.  */
-  unsigned int include_certs;
-
-  /* The number of keys in signers.  */
-  unsigned int signers_len;
-
-  /* Size of the following array.  */
-  unsigned int signers_size;
-  gpgme_key_t *signers;
-
-  /* The signature notations for this context.  */
-  gpgme_sig_notation_t sig_notations;
-
-  /* The locale for the pinentry.  */
-  char *lc_ctype;
-  char *lc_messages;
-
-  /* The operation data hooked into the context.  */
-  ctx_op_data_t op_data;
-
-  /* The user provided passphrase callback and its hook value.  */
-  gpgme_passphrase_cb_t passphrase_cb;
-  void *passphrase_cb_value;
-
-  /* The user provided progress callback and its hook value.  */
-  gpgme_progress_cb_t progress_cb;
-  void *progress_cb_value;
-
-  /* A list of file descriptors in active use by the current
-     operation.  */
-  struct fd_table fdt;
-  struct gpgme_io_cbs io_cbs;
-};
-
-#endif /* CONTEXT_H */
diff --git a/tags/gpgme-1-1-1/gpgme/conversion.c b/tags/gpgme-1-1-1/gpgme/conversion.c
deleted file mode 100644 (file)
index bba62bd..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/* conversion.c - String conversion helper functions.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-
-
-#define atoi_1(p)   (*(p) - '0' )
-#define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
-#define atoi_4(p)   ((atoi_2(p) * 100) + atoi_2((p)+2))
-
-
-\f
-/* Convert two hexadecimal digits from STR to the value they
-   represent.  Returns -1 if one of the characters is not a
-   hexadecimal digit.  */
-int
-_gpgme_hextobyte (const char *str)
-{
-  int val = 0;
-  int i;
-
-#define NROFHEXDIGITS 2
-  for (i = 0; i < NROFHEXDIGITS; i++)
-    {
-      if (*str >= '0' && *str <= '9')
-       val += *str - '0';
-      else if (*str >= 'A' && *str <= 'F')
-       val += 10 + *str - 'A';
-      else if (*str >= 'a' && *str <= 'f')
-       val += 10 + *str - 'a';
-      else
-       return -1;
-      if (i < NROFHEXDIGITS - 1)
-       val *= 16;
-      str++;
-    }
-  return val;
-}
-
-
-/* Decode the C formatted string SRC and store the result in the
-   buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
-   large enough buffer is allocated with malloc and *DESTP is set to
-   the result.  Currently, LEN is only used to specify if allocation
-   is desired or not, the caller is expected to make sure that *DESTP
-   is large enough if LEN is not zero.  */
-gpgme_error_t
-_gpgme_decode_c_string (const char *src, char **destp, size_t len)
-{
-  char *dest;
-
-  /* Set up the destination buffer.  */
-  if (len)
-    {
-      if (len < strlen (src) + 1)
-       return gpg_error (GPG_ERR_INTERNAL);
-
-      dest = *destp;
-    }
-  else
-    {
-      /* The converted string will never be larger than the original
-        string.  */
-      dest = malloc (strlen (src) + 1);
-      if (!dest)
-       return gpg_error_from_errno (errno);
-
-      *destp = dest;
-    }
-
-  /* Convert the string.  */
-  while (*src)
-    {
-      if (*src != '\\')
-       {
-         *(dest++) = *(src++);
-         continue;
-       }
-
-      switch (src[1])
-       {
-#define DECODE_ONE(match,result)       \
-       case match:                     \
-         src += 2;                     \
-         *(dest++) = result;           \
-         break;
-
-         DECODE_ONE ('\'', '\'');
-         DECODE_ONE ('\"', '\"');
-         DECODE_ONE ('\?', '\?');
-         DECODE_ONE ('\\', '\\');
-         DECODE_ONE ('a', '\a');
-         DECODE_ONE ('b', '\b');
-         DECODE_ONE ('f', '\f');
-         DECODE_ONE ('n', '\n');
-         DECODE_ONE ('r', '\r');
-         DECODE_ONE ('t', '\t');
-         DECODE_ONE ('v', '\v');
-
-       case 'x':
-         {
-           int val = _gpgme_hextobyte (&src[2]);
-
-           if (val == -1)
-             {
-               /* Should not happen.  */
-               *(dest++) = *(src++);
-               *(dest++) = *(src++);
-               if (*src)
-                 *(dest++) = *(src++);
-               if (*src)
-                 *(dest++) = *(src++);
-             }
-           else
-             {
-               if (!val)
-                 {
-                   /* A binary zero is not representable in a C
-                      string.  */
-                   *(dest++) = '\\';
-                   *(dest++) = '0'; 
-                 }
-               else 
-                 *((unsigned char *) dest++) = val;
-               src += 4;
-             }
-         }
-         break;
-
-       default:
-         {
-           /* Should not happen.  */
-           *(dest++) = *(src++);
-           *(dest++) = *(src++);
-         }
-        } 
-    }
-  *(dest++) = 0;
-
-  return 0;
-}
-
-
-/* Decode the percent escaped string SRC and store the result in the
-   buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
-   large enough buffer is allocated with malloc and *DESTP is set to
-   the result.  Currently, LEN is only used to specify if allocation
-   is desired or not, the caller is expected to make sure that *DESTP
-   is large enough if LEN is not zero.  If BINARY is 1, then '\0'
-   characters are allowed in the output.  */
-gpgme_error_t
-_gpgme_decode_percent_string (const char *src, char **destp, size_t len,
-                             int binary)
-{
-  char *dest;
-
-  /* Set up the destination buffer.  */
-  if (len)
-    {
-      if (len < strlen (src) + 1)
-       return gpg_error (GPG_ERR_INTERNAL);
-
-      dest = *destp;
-    }
-  else
-    {
-      /* The converted string will never be larger than the original
-        string.  */
-      dest = malloc (strlen (src) + 1);
-      if (!dest)
-       return gpg_error_from_errno (errno);
-
-      *destp = dest;
-    }
-
-  /* Convert the string.  */
-  while (*src)
-    {
-      if (*src != '%')
-       {
-         *(dest++) = *(src++);
-         continue;
-       }
-      else
-       {
-         int val = _gpgme_hextobyte (&src[1]);
-         
-         if (val == -1)
-           {
-             /* Should not happen.  */
-             *(dest++) = *(src++);
-             if (*src)
-               *(dest++) = *(src++);
-             if (*src)
-               *(dest++) = *(src++);
-           }
-         else
-           {
-             if (!val && !binary)
-               {
-                 /* A binary zero is not representable in a C
-                    string.  */
-                 *(dest++) = '\\';
-                 *(dest++) = '0'; 
-               }
-             else 
-               *((unsigned char *) dest++) = val;
-             src += 3;
-           }
-       }
-    }
-  *(dest++) = 0;
-
-  return 0;
-}
-
-
-/* Parse the string TIMESTAMP into a time_t.  The string may either be
-   seconds since Epoch or in the ISO 8601 format like
-   "20390815T143012".  Returns 0 for an empty string or seconds since
-   Epoch. Leading spaces are skipped. If ENDP is not NULL, it will
-   point to the next non-parsed character in TIMESTRING. */
-time_t
-_gpgme_parse_timestamp (const char *timestamp, char **endp)
-{
-  /* Need to skip leading spaces, because that is what strtoul does
-     but not our ISO 8601 checking code. */
-  while (*timestamp && *timestamp== ' ')
-    timestamp++;
-  if (!*timestamp)
-    return 0;
-
-  if (strlen (timestamp) >= 15 && timestamp[8] == 'T')
-    {
-      struct tm buf;
-      int year;
-
-      year = atoi_4 (timestamp);
-      if (year < 1900)
-        return (time_t)(-1);
-
-      /* Fixme: We would better use a configure test to see whether
-         mktime can handle dates beyond 2038. */
-      if (sizeof (time_t) <= 4 && year >= 2038)
-        return (time_t)2145914603; /* 2037-12-31 23:23:23 */
-
-      memset (&buf, 0, sizeof buf);
-      buf.tm_year = year - 1900;
-      buf.tm_mon = atoi_2 (timestamp+4) - 1; 
-      buf.tm_mday = atoi_2 (timestamp+6);
-      buf.tm_hour = atoi_2 (timestamp+9);
-      buf.tm_min = atoi_2 (timestamp+11);
-      buf.tm_sec = atoi_2 (timestamp+13);
-
-      if (endp)
-        *endp = (char*)(timestamp + 15);
-#ifdef HAVE_TIMEGM
-      return timegm (&buf);
-#else
-      {
-        time_t tim;
-        
-        putenv ("TZ=UTC");
-        tim = mktime (&buf);
-#ifdef __GNUC__
-#warning fixme: we must somehow reset TZ here.  It is not threadsafe anyway.
-#endif
-        return tim;
-      }
-#endif /* !HAVE_TIMEGM */
-    }
-  else
-    return (time_t)strtoul (timestamp, endp, 10);
-}
-
-
-
-\f
-static struct
-{
-  char *name;
-  gpgme_error_t err;
-} gnupg_errors[] =
-  {
-    { "EOF", GPG_ERR_EOF },
-    { "No_Error", GPG_ERR_NO_ERROR },
-    { "General_Error", GPG_ERR_GENERAL },
-    { "Out_Of_Core", GPG_ERR_ENOMEM },
-    { "Invalid_Value", GPG_ERR_INV_VALUE },
-    { "IO_Error", GPG_ERR_GENERAL },
-    { "Resource_Limit", GPG_ERR_RESOURCE_LIMIT },
-    { "Internal_Error", GPG_ERR_INTERNAL },
-    { "Bad_Certificate", GPG_ERR_BAD_CERT },
-    { "Bad_Certificate_Chain", GPG_ERR_BAD_CERT_CHAIN},
-    { "Missing_Certificate", GPG_ERR_MISSING_CERT },
-    { "No_Data", GPG_ERR_NO_DATA },
-    { "Bad_Signature", GPG_ERR_BAD_SIGNATURE },
-    { "Not_Implemented", GPG_ERR_NOT_IMPLEMENTED },
-    { "Conflict", GPG_ERR_CONFLICT },
-    { "Bug", GPG_ERR_BUG },
-    { "Read_Error", GPG_ERR_GENERAL },
-    { "Write_Error", GPG_ERR_GENERAL },
-    { "Invalid_Line", GPG_ERR_GENERAL },
-    { "Incomplete_Line", GPG_ERR_INCOMPLETE_LINE },
-    { "Invalid_Response", GPG_ERR_INV_RESPONSE },
-    { "Agent_Error", GPG_ERR_AGENT },
-    { "No_Public_Key", GPG_ERR_NO_PUBKEY },
-    { "No_Secret_Key", GPG_ERR_NO_SECKEY },
-    { "File_Open_Error", GPG_ERR_GENERAL },
-    { "File_Create_Error", GPG_ERR_GENERAL },
-    { "File_Error", GPG_ERR_GENERAL },
-    { "Not_Supported", GPG_ERR_NOT_SUPPORTED },
-    { "Invalid_Data", GPG_ERR_INV_DATA },
-    { "Assuan_Server_Fault", GPG_ERR_ASSUAN_SERVER_FAULT },
-    { "Assuan_Error", GPG_ERR_ASSUAN },
-    { "Invalid_Session_Key", GPG_ERR_INV_SESSION_KEY },
-    { "Invalid_Sexp", GPG_ERR_INV_SEXP },
-    { "Unsupported_Algorithm", GPG_ERR_UNSUPPORTED_ALGORITHM },
-    { "No_PIN_Entry", GPG_ERR_NO_PIN_ENTRY },
-    { "PIN_Entry_Error", GPG_ERR_NO_PIN_ENTRY },
-    { "Bad_PIN", GPG_ERR_BAD_PIN },
-    { "Bad_Passphrase", GPG_ERR_BAD_PASSPHRASE },
-    { "Invalid_Name", GPG_ERR_INV_NAME },
-    { "Bad_Public_Key", GPG_ERR_BAD_PUBKEY },
-    { "Bad_Secret_Key", GPG_ERR_BAD_SECKEY },
-    { "Bad_Data", GPG_ERR_BAD_DATA },
-    { "Invalid_Parameter", GPG_ERR_INV_PARAMETER },
-    { "Tribute_to_D_A", GPG_ERR_TRIBUTE_TO_D_A },
-    { "No_Dirmngr", GPG_ERR_NO_DIRMNGR },
-    { "Dirmngr_Error", GPG_ERR_DIRMNGR },
-    { "Certificate_Revoked", GPG_ERR_CERT_REVOKED },
-    { "No_CRL_Known", GPG_ERR_NO_CRL_KNOWN },
-    { "CRL_Too_Old", GPG_ERR_CRL_TOO_OLD },
-    { "Line_Too_Long", GPG_ERR_LINE_TOO_LONG },
-    { "Not_Trusted", GPG_ERR_NOT_TRUSTED },
-    { "Canceled", GPG_ERR_CANCELED },
-    { "Bad_CA_Certificate", GPG_ERR_BAD_CA_CERT },
-    { "Certificate_Expired", GPG_ERR_CERT_EXPIRED },
-    { "Certificate_Too_Young", GPG_ERR_CERT_TOO_YOUNG },
-    { "Unsupported_Certificate", GPG_ERR_UNSUPPORTED_CERT },
-    { "Unknown_Sexp", GPG_ERR_UNKNOWN_SEXP },
-    { "Unsupported_Protection", GPG_ERR_UNSUPPORTED_PROTECTION },
-    { "Corrupted_Protection", GPG_ERR_CORRUPTED_PROTECTION },
-    { "Ambiguous_Name", GPG_ERR_AMBIGUOUS_NAME },
-    { "Card_Error", GPG_ERR_CARD },
-    { "Card_Reset", GPG_ERR_CARD_RESET },
-    { "Card_Removed", GPG_ERR_CARD_REMOVED },
-    { "Invalid_Card", GPG_ERR_INV_CARD },
-    { "Card_Not_Present", GPG_ERR_CARD_NOT_PRESENT },
-    { "No_PKCS15_App", GPG_ERR_NO_PKCS15_APP },
-    { "Not_Confirmed", GPG_ERR_NOT_CONFIRMED },
-    { "Configuration_Error", GPG_ERR_CONFIGURATION },
-    { "No_Policy_Match", GPG_ERR_NO_POLICY_MATCH },
-    { "Invalid_Index", GPG_ERR_INV_INDEX },
-    { "Invalid_Id", GPG_ERR_INV_ID },
-    { "No_Scdaemon", GPG_ERR_NO_SCDAEMON },
-    { "Scdaemon_Error", GPG_ERR_SCDAEMON },
-    { "Unsupported_Protocol", GPG_ERR_UNSUPPORTED_PROTOCOL },
-    { "Bad_PIN_Method", GPG_ERR_BAD_PIN_METHOD },
-    { "Card_Not_Initialized", GPG_ERR_CARD_NOT_INITIALIZED },
-    { "Unsupported_Operation", GPG_ERR_UNSUPPORTED_OPERATION },
-    { "Wrong_Key_Usage", GPG_ERR_WRONG_KEY_USAGE }
-  };
-    
-
-gpgme_error_t
-_gpgme_map_gnupg_error (char *err)
-{
-  unsigned int i;
-
-  /* Future version of GnuPG might return the error code directly, so
-     we first test for a a numerical value and use that verbatim.
-     Note that this numerical value might be followed by an
-     underschore and the textual representation of the error code. */
-  if (*err >= '0' && *err <= '9')
-    return strtoul (err, NULL, 10);
-
-  /* Well, this is a token, use the mapping table to get the error.
-     The drawback is that we won't receive an error source and have to
-     use GPG as source. */
-  for (i = 0; i < DIM (gnupg_errors); i++)
-    if (!strcmp (gnupg_errors[i].name, err))
-      return gpg_err_make (GPG_ERR_SOURCE_GPG, gnupg_errors[i].err);
-
-  return gpg_err_make (GPG_ERR_SOURCE_GPG, GPG_ERR_GENERAL);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data-compat.c b/tags/gpgme-1-1-1/gpgme/data-compat.c
deleted file mode 100644 (file)
index 91fa6be..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/* data-compat.c - Compatibility interfaces for data objects.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <stdlib.h>
-
-#include "data.h"
-#include "util.h"
-
-\f
-/* Create a new data buffer filled with LENGTH bytes starting from
-   OFFSET within the file FNAME or stream STREAM (exactly one must be
-   non-zero).  */
-gpgme_error_t
-gpgme_data_new_from_filepart (gpgme_data_t *dh, const char *fname,
-                             FILE *stream, off_t offset, size_t length)
-{
-  gpgme_error_t err;
-  char *buf = NULL;
-  int res;
-
-  if (stream && fname)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (fname)
-    stream = fopen (fname, "rb");
-  if (!stream)
-    return gpg_error_from_errno (errno);
-
-#ifdef HAVE_FSEEKO
-  res = fseeko (stream, offset, SEEK_SET);
-#else
-  /* FIXME: Check for overflow, or at least bail at compilation.  */
-  res = fseek (stream, offset, SEEK_SET);
-#endif
-
-  if (res)
-    {
-      int saved_errno = errno;
-      if (fname)
-       fclose (stream);
-      return gpg_error_from_errno (saved_errno);
-    }
-
-  buf = malloc (length);
-  if (!buf)
-    {
-      int saved_errno = errno;
-      if (fname)
-       fclose (stream);
-      return gpg_error_from_errno (saved_errno);
-    }
-
-  while (fread (buf, length, 1, stream) < 1
-        && ferror (stream) && errno == EINTR);
-  if (ferror (stream))
-    {
-      int saved_errno = errno;
-      if (buf)
-       free (buf);
-      if (fname)
-       fclose (stream);
-      return gpg_error_from_errno (saved_errno);
-    }
-
-  if (fname)
-    fclose (stream);
-
-  err = gpgme_data_new (dh);
-  if (err)
-    {
-      if (buf)
-       free (buf);
-      return err;
-    }
-
-  (*dh)->data.mem.buffer = buf;
-  (*dh)->data.mem.size = length;
-  (*dh)->data.mem.length = length;
-  return 0;
-}
-
-\f
-/* Create a new data buffer filled with the content of file FNAME.
-   COPY must be non-zero (delayed reads are not supported yet).  */
-gpgme_error_t
-gpgme_data_new_from_file (gpgme_data_t *dh, const char *fname, int copy)
-{
-  struct stat statbuf;
-
-  if (!fname || !copy)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (stat (fname, &statbuf) < 0)
-    return gpg_error_from_errno (errno);
-
-  return gpgme_data_new_from_filepart (dh, fname, NULL, 0, statbuf.st_size);
-}
-
-\f
-static int
-gpgme_error_to_errno (gpgme_error_t err)
-{
-  int no = gpg_err_code_to_errno (err);
-
-  if (no)
-    {
-      errno = no;
-      return -1;
-    }
-
-  switch (gpg_err_code (err))
-    {
-    case GPG_ERR_EOF:
-      return 0;
-    case GPG_ERR_INV_VALUE:
-      errno = EINVAL;
-      return -1;
-    case GPG_ERR_NOT_SUPPORTED:
-      errno = ENOSYS;
-      return -1;
-    default:
-      /* FIXME: Yeah, well.  */
-      errno = EINVAL;
-      return -1;
-    }
-}
-
-
-static ssize_t
-old_user_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  size_t amt;
-  gpgme_error_t err = (*dh->data.old_user.cb) (dh->data.old_user.handle,
-                                              buffer, size, &amt);
-  if (err)
-    return gpgme_error_to_errno (err);
-  return amt;
-}
-
-
-static off_t
-old_user_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  gpgme_error_t err;
-  if (whence != SEEK_SET || offset)
-    return EINVAL;
-  err = (*dh->data.old_user.cb) (dh->data.old_user.handle, NULL, 0, NULL);
-  if (err)
-    return gpgme_error_to_errno (err);
-  return 0;
-}
-
-
-static struct _gpgme_data_cbs old_user_cbs =
-  {
-    old_user_read,
-    NULL,
-    old_user_seek,
-    NULL
-  };
-
-
-/* Create a new data buffer which retrieves the data from the callback
-   function READ_CB.  */
-gpgme_error_t
-gpgme_data_new_with_read_cb (gpgme_data_t *dh,
-                             int (*read_cb) (void *, char *, size_t, size_t *),
-                             void *read_cb_value)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &old_user_cbs);
-  if (err)
-    return err;
-
-  (*dh)->data.old_user.cb = read_cb;
-  (*dh)->data.old_user.handle = read_cb_value;
-  return 0;
-}
-
-\f
-gpgme_error_t
-gpgme_data_rewind (gpgme_data_t dh)
-{
-  return (gpgme_data_seek (dh, 0, SEEK_SET) == -1)
-    ? gpg_error_from_errno (errno) : 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data-fd.c b/tags/gpgme-1-1-1/gpgme/data-fd.c
deleted file mode 100644 (file)
index e3542ba..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/* data-fd.c - A file descripor based data object.
-   Copyright (C) 2002, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "data.h"
-
-\f
-static ssize_t
-fd_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  return read (dh->data.fd, buffer, size);
-}
-
-
-static ssize_t
-fd_write (gpgme_data_t dh, const void *buffer, size_t size)
-{
-  return write (dh->data.fd, buffer, size);
-}
-
-
-static off_t
-fd_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  return lseek (dh->data.fd, offset, whence);
-}
-
-
-static struct _gpgme_data_cbs fd_cbs =
-  {
-    fd_read,
-    fd_write,
-    fd_seek,
-    NULL
-  };
-
-\f
-gpgme_error_t
-gpgme_data_new_from_fd (gpgme_data_t *dh, int fd)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &fd_cbs);
-  if (err)
-    return err;
-
-  (*dh)->data.fd = fd;
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data-mem.c b/tags/gpgme-1-1-1/gpgme/data-mem.c
deleted file mode 100644 (file)
index d0896de..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/* data-mem.c - A memory based data object.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <assert.h>
-#include <string.h>
-
-#include "data.h"
-#include "util.h"
-
-\f
-static ssize_t
-mem_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  size_t amt = dh->data.mem.length - dh->data.mem.offset;
-  const char *src;
-
-  if (!amt)
-    return 0;
-
-  if (size < amt)
-    amt = size;
-
-  src = dh->data.mem.buffer ? dh->data.mem.buffer : dh->data.mem.orig_buffer;
-  memcpy (buffer, src + dh->data.mem.offset, amt);
-  dh->data.mem.offset += amt;
-  return amt;
-}
-
-
-static ssize_t
-mem_write (gpgme_data_t dh, const void *buffer, size_t size)
-{
-  size_t unused;
-
-  if (!dh->data.mem.buffer && dh->data.mem.orig_buffer)
-    {
-      size_t new_size = dh->data.mem.size;
-      char *new_buffer;
-
-      if (new_size < dh->data.mem.offset + size)
-       new_size = dh->data.mem.offset + size;
-
-      new_buffer = malloc (new_size);
-      if (!new_buffer)
-       return -1;
-      memcpy (new_buffer, dh->data.mem.orig_buffer, dh->data.mem.length);
-
-      dh->data.mem.buffer = new_buffer;      
-      dh->data.mem.size = new_size;
-    }
-
-  unused = dh->data.mem.size - dh->data.mem.offset;
-  if (unused < size)
-    {
-      /* Allocate a large enough buffer with exponential backoff.  */
-#define INITIAL_ALLOC 512
-      size_t new_size = dh->data.mem.size
-       ? (2 * dh->data.mem.size) : INITIAL_ALLOC;
-      char *new_buffer;
-
-      if (new_size < dh->data.mem.offset + size)
-       new_size = dh->data.mem.offset + size;
-
-      new_buffer = realloc (dh->data.mem.buffer, new_size);
-      if (!new_buffer && new_size > dh->data.mem.offset + size)
-       {
-         /* Maybe we were too greedy, try again.  */
-         new_size = dh->data.mem.offset + size;
-         new_buffer = realloc (dh->data.mem.buffer, new_size);
-       }
-      if (!new_buffer)
-       return -1;
-      dh->data.mem.buffer = new_buffer;
-      dh->data.mem.size = new_size;
-    }
-
-  memcpy (dh->data.mem.buffer + dh->data.mem.offset, buffer, size);
-  dh->data.mem.offset += size;
-  if (dh->data.mem.length < dh->data.mem.offset)
-    dh->data.mem.length = dh->data.mem.offset;
-  return size;
-}
-
-
-static off_t
-mem_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  switch (whence)
-    {
-    case SEEK_SET:
-      if (offset < 0 || offset > dh->data.mem.length)
-       {
-         errno = EINVAL;
-         return -1;
-       }
-      dh->data.mem.offset = offset;
-      break;
-    case SEEK_CUR:
-      if ((offset > 0 && dh->data.mem.length - dh->data.mem.offset < offset)
-         || (offset < 0 && dh->data.mem.offset < -offset)) 
-       {
-         errno = EINVAL;
-         return -1;
-       }
-      dh->data.mem.offset += offset;
-      break;
-    case SEEK_END:
-      if (offset > 0 || -offset > dh->data.mem.length)
-       {
-         errno = EINVAL;
-         return -1;
-       }
-      dh->data.mem.offset = dh->data.mem.length - offset;
-      break;
-    default:
-      errno = EINVAL;
-      return -1;
-    }
-  return dh->data.mem.offset;
-}
-
-
-static void
-mem_release (gpgme_data_t dh)
-{
-  if (dh->data.mem.buffer)
-    free (dh->data.mem.buffer);
-}
-
-
-static struct _gpgme_data_cbs mem_cbs =
-  {
-    mem_read,
-    mem_write,
-    mem_seek,
-    mem_release
-  };
-
-\f
-/* Create a new data buffer and return it in R_DH.  */
-gpgme_error_t
-gpgme_data_new (gpgme_data_t *dh)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &mem_cbs);
-  if (err)
-    return err;
-
-  return 0;
-}
-
-
-/* Create a new data buffer filled with SIZE bytes starting from
-   BUFFER.  If COPY is zero, copying is delayed until necessary, and
-   the data is taken from the original location when needed.  */
-gpgme_error_t
-gpgme_data_new_from_mem (gpgme_data_t *dh, const char *buffer,
-                        size_t size, int copy)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &mem_cbs);
-  if (err)
-    return err;
-
-  if (copy)
-    {
-      char *bufcpy = malloc (size);
-      if (!bufcpy)
-       _gpgme_data_release (*dh);
-      memcpy (bufcpy, buffer, size);
-      (*dh)->data.mem.buffer = bufcpy;
-    }
-  else
-    (*dh)->data.mem.orig_buffer = buffer;
-  
-  (*dh)->data.mem.size = size;
-  (*dh)->data.mem.length = size;
-  return 0;
-}
-
-
-/* Destroy the data buffer DH and return a pointer to its content.
-   The memory has be to released with gpgme_free() by the user.  It's
-   size is returned in R_LEN.  */
-char *
-gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len)
-{
-  char *str = NULL;
-
-  if (!dh || dh->cbs != &mem_cbs)
-    return NULL;
-
-  str = dh->data.mem.buffer;
-  if (!str && dh->data.mem.orig_buffer)
-    {
-      str = malloc (dh->data.mem.length);
-      if (!str)
-       return NULL;
-      memcpy (str, dh->data.mem.orig_buffer, dh->data.mem.length);
-    }
-
-  if (r_len)
-    *r_len = dh->data.mem.length;
-
-  return str;
-}
-
-
-/* Release the memory returned by gpgme_data_release_and_get_mem().  */
-void
-gpgme_free (void *buffer)
-{
-  if (buffer)
-    free (buffer);
-}
-
diff --git a/tags/gpgme-1-1-1/gpgme/data-stream.c b/tags/gpgme-1-1-1/gpgme/data-stream.c
deleted file mode 100644 (file)
index e760168..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* data-stream.c - A stream based data object.
-   Copyright (C) 2002, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "data.h"
-
-\f
-static ssize_t
-stream_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  size_t amt = fread (buffer, 1, size, dh->data.stream);
-  if (amt > 0)
-    return amt;
-  return ferror (dh->data.stream) ? -1 : 0;
-}
-
-
-static ssize_t
-stream_write (gpgme_data_t dh, const void *buffer, size_t size)
-{
-  size_t amt = fwrite (buffer, 1, size, dh->data.stream);
-  if (amt > 0)
-    return amt;
-  return ferror (dh->data.stream) ? -1 : 0;
-}
-
-
-static off_t
-stream_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  int err;
-
-#ifdef HAVE_FSEEKO
-  err = fseeko (dh->data.stream, offset, whence);
-#else
-  /* FIXME: Check for overflow, or at least bail at compilation.  */
-  err = fseek (dh->data.stream, offset, whence);
-#endif
-
-  if (err)
-    return -1;
-
-#ifdef HAVE_FSEEKO
-  return ftello (dh->data.stream);
-#else
-  return ftell (dh->data.stream);
-#endif
-}
-
-
-static struct _gpgme_data_cbs stream_cbs =
-  {
-    stream_read,
-    stream_write,
-    stream_seek,
-    NULL
-  };
-
-\f
-gpgme_error_t
-gpgme_data_new_from_stream (gpgme_data_t *dh, FILE *stream)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &stream_cbs);
-  if (err)
-    return err;
-
-  (*dh)->data.stream = stream;
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data-user.c b/tags/gpgme-1-1-1/gpgme/data-user.c
deleted file mode 100644 (file)
index f3deb32..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* data-user.c - A user callback based data object.
-   Copyright (C) 2002, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <errno.h>
-
-#include "data.h"
-
-\f
-static ssize_t
-user_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  if (!dh->data.user.cbs->read)
-    return EBADF;
-
-  return (*dh->data.user.cbs->read) (dh->data.user.handle, buffer, size);
-}
-
-
-static ssize_t
-user_write (gpgme_data_t dh, const void *buffer, size_t size)
-{
-  if (!dh->data.user.cbs->write)
-    return EBADF;
-
-  return (*dh->data.user.cbs->write) (dh->data.user.handle, buffer, size);
-}
-
-
-static off_t
-user_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  if (!dh->data.user.cbs->seek)
-    return EBADF;
-
-  return (*dh->data.user.cbs->seek) (dh->data.user.handle, offset, whence);
-}
-
-
-static void
-user_release (gpgme_data_t dh)
-{
-  if (dh->data.user.cbs->release)
-    (*dh->data.user.cbs->release) (dh->data.user.handle);
-}
-
-
-static struct _gpgme_data_cbs user_cbs =
-  {
-    user_read,
-    user_write,
-    user_seek,
-    user_release
-  };
-
-\f
-gpgme_error_t
-gpgme_data_new_from_cbs (gpgme_data_t *dh, gpgme_data_cbs_t cbs, void *handle)
-{
-  gpgme_error_t err = _gpgme_data_new (dh, &user_cbs);
-  if (err)
-    return err;
-
-  (*dh)->data.user.cbs = cbs;
-  (*dh)->data.user.handle = handle;
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data.c b/tags/gpgme-1-1-1/gpgme/data.c
deleted file mode 100644 (file)
index 3f38bd3..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* data.c - An abstraction for data objects.
-   Copyright (C) 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-
-#include "gpgme.h"
-#include "data.h"
-#include "util.h"
-#include "ops.h"
-#include "priv-io.h"
-
-\f
-gpgme_error_t
-_gpgme_data_new (gpgme_data_t *r_dh, struct _gpgme_data_cbs *cbs)
-{
-  gpgme_data_t dh;
-
-  if (!r_dh)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  *r_dh = NULL;
-  dh = calloc (1, sizeof (*dh));
-  if (!dh)
-    return gpg_error_from_errno (errno);
-
-  dh->cbs = cbs;
-
-  *r_dh = dh;
-  return 0;
-}
-
-
-void
-_gpgme_data_release (gpgme_data_t dh)
-{
-  if (!dh)
-    return;
-
-  if (dh->file_name)
-    free (dh->file_name);
-  free (dh);
-}
-
-\f
-/* Read up to SIZE bytes into buffer BUFFER from the data object with
-   the handle DH.  Return the number of characters read, 0 on EOF and
-   -1 on error.  If an error occurs, errno is set.  */
-ssize_t
-gpgme_data_read (gpgme_data_t dh, void *buffer, size_t size)
-{
-  if (!dh)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-  if (!dh->cbs->read)
-    {
-      errno = ENOSYS;
-      return -1;
-    }
-  return (*dh->cbs->read) (dh, buffer, size);
-}
-
-
-/* Write up to SIZE bytes from buffer BUFFER to the data object with
-   the handle DH.  Return the number of characters written, or -1 on
-   error.  If an error occurs, errno is set.  */
-ssize_t
-gpgme_data_write (gpgme_data_t dh, const void *buffer, size_t size)
-{
-  if (!dh)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-  if (!dh->cbs->write)
-    {
-      errno = ENOSYS;
-      return -1;
-    }
-  return (*dh->cbs->write) (dh, buffer, size);
-}
-
-
-/* Set the current position from where the next read or write starts
-   in the data object with the handle DH to OFFSET, relativ to
-   WHENCE.  */
-off_t
-gpgme_data_seek (gpgme_data_t dh, off_t offset, int whence)
-{
-  if (!dh)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-  if (!dh->cbs->seek)
-    {
-      errno = ENOSYS;
-      return -1;
-    }
-
-  /* For relative movement, we must take into account the actual
-     position of the read counter.  */
-  if (whence == SEEK_CUR)
-    offset -= dh->pending_len;
-
-  offset = (*dh->cbs->seek) (dh, offset, whence);
-  if (offset >= 0)
-    dh->pending_len = 0;
-
-  return offset;
-}
-
-
-/* Release the data object with the handle DH.  */
-void
-gpgme_data_release (gpgme_data_t dh)
-{
-  if (!dh)
-    return;
-
-  if (dh->cbs->release)
-    (*dh->cbs->release) (dh);
-  _gpgme_data_release (dh);
-}
-
-
-/* Get the current encoding meta information for the data object with
-   handle DH.  */
-gpgme_data_encoding_t
-gpgme_data_get_encoding (gpgme_data_t dh)
-{
-  return dh ? dh->encoding : GPGME_DATA_ENCODING_NONE;
-}
-
-
-/* Set the encoding meta information for the data object with handle
-   DH to ENC.  */
-gpgme_error_t
-gpgme_data_set_encoding (gpgme_data_t dh, gpgme_data_encoding_t enc)
-{
-  if (!dh)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  if (enc < 0 || enc > GPGME_DATA_ENCODING_ARMOR)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  dh->encoding = enc;
-  return 0;
-}
-
-
-/* Set the file name associated with the data object with handle DH to
-   FILE_NAME.  */
-gpgme_error_t
-gpgme_data_set_file_name (gpgme_data_t dh, const char *file_name)
-{
-  if (!dh)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (dh->file_name)
-    free (dh->file_name);
-
-  dh->file_name = strdup (file_name);
-  if (!dh->file_name)
-    return gpg_error_from_errno (errno);
-
-  return 0;
-}
-
-/* Get the file name associated with the data object with handle DH,
-   or NULL if there is none.  */
-char *
-gpgme_data_get_file_name (gpgme_data_t dh)
-{
-  if (!dh)
-    return NULL;
-
-  return dh->file_name;
-}
-
-\f
-/* Functions to support the wait interface.  */
-
-gpgme_error_t
-_gpgme_data_inbound_handler (void *opaque, int fd)
-{
-  gpgme_data_t dh = (gpgme_data_t) opaque;
-  char buffer[BUFFER_SIZE];
-  char *bufp = buffer;
-  ssize_t buflen;
-
-  buflen = _gpgme_io_read (fd, buffer, BUFFER_SIZE);
-  if (buflen < 0)
-    return gpg_error_from_errno (errno);
-  if (buflen == 0)
-    {
-      _gpgme_io_close (fd);
-      return 0;
-    }
-
-  do
-    {
-      ssize_t amt = gpgme_data_write (dh, bufp, buflen);
-      if (amt == 0 || (amt < 0 && errno != EINTR))
-       return gpg_error_from_errno (errno);
-      bufp += amt;
-      buflen -= amt;
-    }
-  while (buflen > 0);
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_data_outbound_handler (void *opaque, int fd)
-{
-  gpgme_data_t dh = (gpgme_data_t) opaque;
-  ssize_t nwritten;
-
-  if (!dh->pending_len)
-    {
-      ssize_t amt = gpgme_data_read (dh, dh->pending, BUFFER_SIZE);
-      if (amt < 0)
-       return gpg_error_from_errno (errno);
-      if (amt == 0)
-       {
-         _gpgme_io_close (fd);
-         return 0;
-       }
-      dh->pending_len = amt;
-    }
-
-  nwritten = _gpgme_io_write (fd, dh->pending, dh->pending_len);
-  if (nwritten == -1 && errno == EAGAIN)
-    return 0;
-
-  if (nwritten == -1 && errno == EPIPE)
-    {
-      /* Not much we can do.  The other end closed the pipe, but we
-        still have data.  This should only ever happen if the other
-        end is going to tell us what happened on some other channel.
-        Silently close our end.  */
-      _gpgme_io_close (fd);
-      return 0;
-    }
-
-  if (nwritten <= 0)
-    return gpg_error_from_errno (errno);
-
-  if (nwritten < dh->pending_len)
-    memmove (dh->pending, dh->pending + nwritten, dh->pending_len - nwritten);
-  dh->pending_len -= nwritten;
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/data.h b/tags/gpgme-1-1-1/gpgme/data.h
deleted file mode 100644 (file)
index 80a86e6..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* data.h - Internal data object abstraction interface.
-   Copyright (C) 2002, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef DATA_H
-#define DATA_H
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <limits.h>
-
-#include "gpgme.h"
-
-\f
-/* Read up to SIZE bytes into buffer BUFFER from the data object with
-   the handle DH.  Return the number of characters read, 0 on EOF and
-   -1 on error.  If an error occurs, errno is set.  */
-typedef ssize_t (*gpgme_data_read_cb) (gpgme_data_t dh, void *buffer,
-                                      size_t size);
-
-/* Write up to SIZE bytes from buffer BUFFER to the data object with
-   the handle DH.  Return the number of characters written, or -1 on
-   error.  If an error occurs, errno is set.  */
-typedef ssize_t (*gpgme_data_write_cb) (gpgme_data_t dh, const void *buffer,
-                                       size_t size);
-
-/* Set the current position from where the next read or write starts
-   in the data object with the handle DH to OFFSET, relativ to
-   WHENCE.  */
-typedef off_t (*gpgme_data_seek_cb) (gpgme_data_t dh, off_t offset,
-                                    int whence);
-
-/* Release the data object with the handle DH.  */
-typedef void (*gpgme_data_release_cb) (gpgme_data_t dh);
-
-struct _gpgme_data_cbs
-{
-  gpgme_data_read_cb read;
-  gpgme_data_write_cb write;
-  gpgme_data_seek_cb seek;
-  gpgme_data_release_cb release;
-};
-
-struct gpgme_data
-{
-  struct _gpgme_data_cbs *cbs;
-  gpgme_data_encoding_t encoding;
-
-#ifdef PIPE_BUF
-#define BUFFER_SIZE PIPE_BUF
-#else
-#ifdef _POSIX_PIPE_BUF
-#define BUFFER_SIZE _POSIX_PIPE_BUF
-#else
-#define BUFFER_SIZE 512
-#endif
-#endif
-  char pending[BUFFER_SIZE];
-  int pending_len;
-
-  /* File name of the data object.  */
-  char *file_name;
-
-  union
-  {
-    /* For gpgme_data_new_from_fd.  */
-    int fd;
-
-    /* For gpgme_data_new_from_stream.  */
-    FILE *stream;
-
-    /* For gpgme_data_new_from_cbs.  */
-    struct
-    {
-      gpgme_data_cbs_t cbs;
-      void *handle;
-    } user;
-
-    /* For gpgme_data_new_from_mem.  */
-    struct
-    {
-      char *buffer;
-      const char *orig_buffer;
-      /* Allocated size of BUFFER.  */
-      size_t size;
-      size_t length;
-      off_t offset;
-    } mem;
-
-    /* For gpgme_data_new_from_read_cb.  */
-    struct
-    {
-      int (*cb) (void *, char *, size_t, size_t *);
-      void *handle;
-    } old_user;
-  } data;
-};
-
-\f
-gpgme_error_t _gpgme_data_new (gpgme_data_t *r_dh,
-                              struct _gpgme_data_cbs *cbs);
-
-void _gpgme_data_release (gpgme_data_t dh);
-
-#endif /* DATA_H */
diff --git a/tags/gpgme-1-1-1/gpgme/debug.c b/tags/gpgme-1-1-1/gpgme/debug.c
deleted file mode 100644 (file)
index 870976c..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/* debug.c - helpful output in desperate situations
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <unistd.h>
-#include <ctype.h>
-#ifndef HAVE_DOSISH_SYSTEM
-  #include <sys/types.h>
-  #include <sys/stat.h>
-  #include <fcntl.h>
-#endif
-#include <assert.h>
-
-#include "util.h"
-#include "sema.h"
-
-\f
-/* Lock to serialize initialization of the debug output subsystem and
-   output of actual debug messages.  */
-DEFINE_STATIC_LOCK (debug_lock);
-
-/* The amount of detail requested by the user, per environment
-   variable GPGME_DEBUG.  */
-static int debug_level;
-
-/* The output stream for the debug messages.  */
-static FILE *errfp;
-
-\f
-/* Remove leading and trailing white spaces.  */
-static char *
-trim_spaces (char *str)
-{
-  char *string, *p, *mark;
-
-  string = str;
-  /* Find first non space character.  */
-  for (p = string; *p && isspace (*(unsigned char *) p); p++)
-    ;
-  /* Move characters.  */
-  for (mark = NULL; (*string = *p); string++, p++)
-    if (isspace (*(unsigned char *) p))
-      {
-       if (!mark)
-         mark = string;
-      }
-    else
-      mark = NULL;
-  if (mark)
-    *mark = '\0';      /* Remove trailing spaces.  */
-
-  return str;
-}
-
-
-static void
-debug_init (void)
-{
-  static int initialized;
-
-  LOCK (debug_lock);
-  if (!initialized)
-    {
-      gpgme_error_t err;
-      char *e;
-      const char *s1, *s2;;
-
-      err = _gpgme_getenv ("GPGME_DEBUG", &e);
-      if (err)
-       {
-         UNLOCK (debug_lock);
-         return;
-       }
-
-      initialized = 1;
-      errfp = stderr;
-      if (e)
-       {
-         debug_level = atoi (e);
-         s1 = strchr (e, PATHSEP_C);
-         if (s1)
-           {
-#ifndef HAVE_DOSISH_SYSTEM
-             if (getuid () == geteuid ())
-               {
-#endif
-                 char *p;
-                 FILE *fp;
-
-                 s1++;
-                 if (!(s2 = strchr (s1, PATHSEP_C)))
-                   s2 = s1 + strlen (s1);
-                 p = malloc (s2 - s1 + 1);
-                 if (p)
-                   {
-                     memcpy (p, s1, s2 - s1);
-                     p[s2-s1] = 0;
-                     trim_spaces (p);
-                     fp = fopen (p,"a");
-                     if (fp)
-                       {
-                         setvbuf (fp, NULL, _IOLBF, 0);
-                         errfp = fp;
-                       }
-                     free (p);
-                   }
-#ifndef HAVE_DOSISH_SYSTEM
-               }
-#endif
-           }
-         free (e);
-        }
-
-      if (debug_level > 0)
-       fprintf (errfp, "gpgme_debug: level=%d\n", debug_level);
-    }
-  UNLOCK (debug_lock);
-}
-
-\f
-/* Log the formatted string FORMAT at debug level LEVEL or higher.  */
-void
-_gpgme_debug (int level, const char *format, ...)
-{
-  va_list arg_ptr;
-
-  debug_init ();
-  if (debug_level < level)
-    return;
-    
-  va_start (arg_ptr, format);
-  LOCK (debug_lock);
-  vfprintf (errfp, format, arg_ptr);
-  va_end (arg_ptr);
-  if(format && *format && format[strlen (format) - 1] != '\n')
-    putc ('\n', errfp);
-  UNLOCK (debug_lock);
-  fflush (errfp);
-}
-
-
-/* Start a new debug line in *LINE, logged at level LEVEL or higher,
-   and starting with the formatted string FORMAT.  */
-void
-_gpgme_debug_begin (void **line, int level, const char *format, ...)
-{
-  va_list arg_ptr;
-
-  debug_init ();
-  if (debug_level < level)
-    {
-      /* Disable logging of this line.  */
-      *line = NULL;
-      return;
-    }
-
-  va_start (arg_ptr, format);
-  vasprintf ((char **) line, format, arg_ptr);
-  va_end (arg_ptr);
-}
-
-
-/* Add the formatted string FORMAT to the debug line *LINE.  */
-void
-_gpgme_debug_add (void **line, const char *format, ...)
-{
-  va_list arg_ptr;
-  char *toadd;
-  char *result;
-
-  if (!*line)
-    return;
-
-  va_start (arg_ptr, format);
-  vasprintf (&toadd, format, arg_ptr);
-  va_end (arg_ptr);
-  asprintf (&result, "%s%s", *(char **) line, toadd);
-  free (*line);
-  free (toadd);
-  *line = result;
-}
-
-
-/* Finish construction of *LINE and send it to the debug output
-   stream.  */
-void
-_gpgme_debug_end (void **line)
-{
-  if (!*line)
-    return;
-
-  /* The smallest possible level is 1, so force logging here by
-     using that.  */
-  _gpgme_debug (1, "%s", *line);
-  free (*line);
-  *line = NULL;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/debug.h b/tags/gpgme-1-1-1/gpgme/debug.h
deleted file mode 100644 (file)
index ef5a400..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/* debug.h - interface to debugging functions
-   Copyright (C) 2002, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef DEBUG_H
-#define DEBUG_H
-
-#include <string.h>
-
-/* Remove path components from filenames (i.e. __FILE__) for cleaner
-   logs. */
-static inline const char *_gpgme_debug_srcname (const char *file)
-                                                GPGME_GCC_A_PURE;
-
-static inline const char *
-_gpgme_debug_srcname (const char *file)
-{
-  const char *s = strrchr (file, '/');
-  return s? s+1:file;
-}
-
-/* Log the formatted string FORMAT at debug level LEVEL or higher.  */
-void _gpgme_debug (int level, const char *format, ...);
-
-/* Start a new debug line in *LINE, logged at level LEVEL or higher,
-   and starting with the formatted string FORMAT.  */
-void _gpgme_debug_begin (void **helper, int level, const char *format, ...);
-
-/* Add the formatted string FORMAT to the debug line *LINE.  */
-void _gpgme_debug_add (void **helper, const char *format, ...);
-
-/* Finish construction of *LINE and send it to the debug output
-   stream.  */
-void _gpgme_debug_end (void **helper);
-
-/* Indirect stringification, requires __STDC__ to work.  */
-#define STRINGIFY(v) #v
-#define XSTRINGIFY(v) STRINGIFY(v)
-
-#if 0
-/* Only works in GNU.  */
-#define DEBUG(fmt, arg...) \
-  _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__) , ##arg)
-#define DEBUG_BEGIN(hlp, lvl, fmt, arg...) \
-  _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, __FILE__, \
-                     XSTRINGIFY (__LINE__) , ##arg)
-#define DEBUG_ADD(hlp, fmt, arg...) \
-  _gpgme_debug_add (&(hlp), fmt , ##arg)
-#define DEBUG_END(hlp, fmt, arg...) \
-  _gpgme_debug_add (&(hlp), fmt , ##arg); \
-  _gpgme_debug_end (&(hlp))
-#elif 0
-/* Only works in C99.  */
-#define DEBUG0(fmt) \
-  _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__))
-#define DEBUG(fmt, ...) \
-  _gpgme_debug (1, "%s:%s: " fmt, __FILE__, XSTRINGIFY (__LINE__), __VA_ARGS__)
-#define DEBUG_BEGIN(hlp, lvl, fmt) \
-  _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, __FILE__, \
-                     XSTRINGIFY (__LINE__))
-#define DEBUG_BEGINX(hlp, lvl, fmt, ...) \
-  _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, __FILE__, \
-                     XSTRINGIFY (__LINE__), __VA_ARGS__)
-#define DEBUG_ADD0(hlp, fmt) \
-  _gpgme_debug_add (&(hlp), fmt)
-#define DEBUG_ADD(hlp, fmt, ...) \
-  _gpgme_debug_add (&(hlp), fmt, __VA_ARGS__)
-#define DEBUG_END(hlp, fmt) \
-  _gpgme_debug_add (&(hlp), fmt); \
-  _gpgme_debug_end (&(hlp))
-#define DEBUG_ENDX(hlp, fmt, ...) \
-  _gpgme_debug_add (&(hlp), fmt, __VA_ARGS__); \
-  _gpgme_debug_end (&(hlp))
-#else
-/* This finally works everywhere, horror.  */
-#define DEBUG0(fmt) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__))
-#define DEBUG1(fmt,a) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__), (a))
-#define DEBUG2(fmt,a,b) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__), (a), (b))
-#define DEBUG3(fmt,a,b,c) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__), (a), (b), (c))
-#define DEBUG4(fmt,a,b,c,d) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__), (a), (b), (c), (d))
-#define DEBUG5(fmt,a,b,c,d,e) \
-  _gpgme_debug (1, "%s:%s: " fmt, _gpgme_debug_srcname (__FILE__), \
-                XSTRINGIFY (__LINE__), (a), (b), (c), (d), (e))
-#define DEBUG_BEGIN(hlp,lvl,fmt) \
-  _gpgme_debug_begin (&(hlp), lvl, "%s:%s: " fmt, \
-                      _gpgme_debug_srcname (__FILE__), XSTRINGIFY (__LINE__))
-#define DEBUG_ADD0(hlp,fmt) \
-  _gpgme_debug_add (&(hlp), fmt)
-#define DEBUG_ADD1(hlp,fmt,a) \
-  _gpgme_debug_add (&(hlp), fmt, (a))
-#define DEBUG_ADD2(hlp,fmt,a,b) \
-  _gpgme_debug_add (&(hlp), fmt, (a), (b))
-#define DEBUG_ADD3(hlp,fmt,a,b,c) \
-  _gpgme_debug_add (&(hlp), fmt, (a), (b), (c))
-#define DEBUG_END(hlp,fmt) \
-  _gpgme_debug_add (&(hlp), fmt); \
-  _gpgme_debug_end (&(hlp))
-#endif
-
-#define DEBUG_ENABLED(hlp) (!!(hlp))
-
-#endif /* DEBUG_H */
diff --git a/tags/gpgme-1-1-1/gpgme/decrypt-verify.c b/tags/gpgme-1-1-1/gpgme/decrypt-verify.c
deleted file mode 100644 (file)
index 2fa3bb2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* decrypt-verify.c - Decrypt and verify function.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gpgme.h"
-#include "ops.h"
-
-\f
-static gpgme_error_t
-decrypt_verify_status_handler (void *priv, gpgme_status_code_t code,
-                              char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_decrypt_status_handler (priv, code, args);
-  if (!err)
-      err = _gpgme_verify_status_handler (priv, code, args);
-  return err;
-}
-
-
-static gpgme_error_t
-decrypt_verify_start (gpgme_ctx_t ctx, int synchronous,
-                     gpgme_data_t cipher, gpgme_data_t plain)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_decrypt_init_result (ctx);
-  if (err)
-    return err;
-
-  err = _gpgme_op_verify_init_result (ctx);
-  if (err)
-    return err;
-
-  if (!cipher)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!plain)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (ctx->passphrase_cb)
-    {
-      err = _gpgme_engine_set_command_handler
-       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
-      if (err)
-       return err;
-    }
-
-  _gpgme_engine_set_status_handler (ctx->engine,
-                                   decrypt_verify_status_handler, ctx);
-  
-  return _gpgme_engine_op_decrypt (ctx->engine, cipher, plain);
-}
-
-
-/* Decrypt ciphertext CIPHER and make a signature verification within
-   CTX and store the resulting plaintext in PLAIN.  */
-gpgme_error_t
-gpgme_op_decrypt_verify_start (gpgme_ctx_t ctx, gpgme_data_t cipher,
-                              gpgme_data_t plain)
-{
-  return decrypt_verify_start (ctx, 0, cipher, plain);
-}
-
-
-/* Decrypt ciphertext CIPHER and make a signature verification within
-   CTX and store the resulting plaintext in PLAIN.  */
-gpgme_error_t
-gpgme_op_decrypt_verify (gpgme_ctx_t ctx, gpgme_data_t cipher,
-                        gpgme_data_t plain)
-{
-  gpgme_error_t err = decrypt_verify_start (ctx, 1, cipher, plain);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/decrypt.c b/tags/gpgme-1-1-1/gpgme/decrypt.c
deleted file mode 100644 (file)
index 5ce21ba..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/* decrypt.c - Decrypt function.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_decrypt_result result;
-
-  int okay;
-  int failed;
-  
-  /* A pointer to the next pointer of the last recipient in the list.
-     This makes appending new invalid signers painless while
-     preserving the order.  */
-  gpgme_recipient_t *last_recipient_p;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-
-  if (opd->result.unsupported_algorithm)
-    free (opd->result.unsupported_algorithm);
-
-  if (opd->result.file_name)
-    free (opd->result.file_name);
-}
-
-
-gpgme_decrypt_result_t
-gpgme_op_decrypt_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_DECRYPT, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-static gpgme_error_t
-parse_enc_to (char *args, gpgme_recipient_t *recp)
-{
-  gpgme_recipient_t rec;
-  char *tail;
-  int i;
-
-  rec = malloc (sizeof (*rec));
-  if (!rec)
-    return gpg_error_from_errno (errno);
-
-  rec->next = NULL;
-  rec->keyid = rec->_keyid;
-  rec->status = 0;
-
-  for (i = 0; i < sizeof (rec->_keyid) - 1; i++)
-    {
-      if (args[i] == '\0' || args[i] == ' ')
-       break;
-
-      rec->_keyid[i] = args[i];
-    }
-  rec->_keyid[i] = '\0';
-
-  args = &args[i];
-  if (*args != '\0' && *args != ' ')
-    {
-      free (rec);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-
-  while (*args == ' ')
-    args++;
-
-  if (*args)
-    {
-      errno = 0;
-      rec->pubkey_algo = strtol (args, &tail, 0);
-      if (errno || args == tail || *tail != ' ')
-       {
-         /* The crypto backend does not behave.  */
-         free (rec);
-         return gpg_error (GPG_ERR_INV_ENGINE);
-       }
-    }
-
-  /* FIXME: The key length is always 0 right now, so no need to parse
-     it.  */
-
-  *recp = rec;
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_decrypt_status_handler (void *priv, gpgme_status_code_t code,
-                              char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_passphrase_status_handler (priv, code, args);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_DECRYPT, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_EOF:
-      /* FIXME: These error values should probably be attributed to
-        the underlying crypto engine (as error source).  */
-      if (opd->failed)
-       return gpg_error (GPG_ERR_DECRYPT_FAILED);
-      else if (!opd->okay)
-       return gpg_error (GPG_ERR_NO_DATA);
-      break;
-
-    case GPGME_STATUS_DECRYPTION_OKAY:
-      opd->okay = 1;
-      break;
-
-    case GPGME_STATUS_DECRYPTION_FAILED:
-      opd->failed = 1;
-      break;
-
-    case GPGME_STATUS_ERROR:
-      /* Note that this is an informational status code which should
-         not lead to an error return unless it is something not
-         related to the backend.  */
-      {
-       const char d_alg[] = "decrypt.algorithm";
-       const char u_alg[] = "Unsupported_Algorithm";
-       const char k_alg[] = "decrypt.keyusage";
-
-       if (!strncmp (args, d_alg, sizeof (d_alg) - 1))
-         {
-           args += sizeof (d_alg) - 1;
-           while (*args == ' ')
-             args++;
-
-           if (!strncmp (args, u_alg, sizeof (u_alg) - 1))
-             {
-               char *end;
-
-               args += sizeof (u_alg) - 1;
-               while (*args == ' ')
-                 args++;
-
-               end = strchr (args, ' ');
-               if (end)
-                 *end = '\0';
-
-               if (!(*args == '?' && *(args + 1) == '\0'))
-                 {
-                   opd->result.unsupported_algorithm = strdup (args);
-                   if (!opd->result.unsupported_algorithm)
-                     return gpg_error_from_errno (errno);
-                 }
-             }
-         }
-       else if (!strncmp (args, k_alg, sizeof (k_alg) - 1))
-         {
-           args += sizeof (k_alg) - 1;
-           while (*args == ' ')
-             args++;
-
-           err = _gpgme_map_gnupg_error (args);
-           if (gpg_err_code (err) == GPG_ERR_WRONG_KEY_USAGE)
-             opd->result.wrong_key_usage = 1;
-         }
-      }
-      break;
-
-    case GPGME_STATUS_ENC_TO:
-      err = parse_enc_to (args, opd->last_recipient_p);
-      if (err)
-       return err;
-
-      opd->last_recipient_p = &(*opd->last_recipient_p)->next;
-      break;
-
-    case GPGME_STATUS_NO_SECKEY:
-      {
-       gpgme_recipient_t rec = opd->result.recipients;
-
-       while (rec)
-         {
-           if (!strcmp (rec->keyid, args))
-             {
-               rec->status = gpg_error (GPG_ERR_NO_SECKEY);
-               break;
-             }
-           rec = rec->next;
-         }
-       /* FIXME: Is this ok?  */
-       if (!rec)
-         return gpg_error (GPG_ERR_INV_ENGINE);
-      }
-      break;
-
-    case GPGME_STATUS_PLAINTEXT:
-      err = _gpgme_parse_plaintext (args, &opd->result.file_name);
-      if (err)
-       return err;
-      
-    default:
-      break;
-    }
-
-  return 0;
-}
-
-
-static gpgme_error_t
-decrypt_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_decrypt_status_handler (priv, code, args);
-  return err;
-}
-
-
-gpgme_error_t
-_gpgme_op_decrypt_init_result (gpgme_ctx_t ctx)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_DECRYPT, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  opd->last_recipient_p = &opd->result.recipients;
-  return 0;
-}
-
-
-static gpgme_error_t
-decrypt_start (gpgme_ctx_t ctx, int synchronous,
-                     gpgme_data_t cipher, gpgme_data_t plain)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_decrypt_init_result (ctx);
-  if (err)
-    return err;
-
-  if (!cipher)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!plain)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (err)
-    return err;
-
-  if (ctx->passphrase_cb)
-    {
-      err = _gpgme_engine_set_command_handler
-       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
-      if (err)
-       return err;
-    }
-
-  _gpgme_engine_set_status_handler (ctx->engine, decrypt_status_handler, ctx);
-
-  return _gpgme_engine_op_decrypt (ctx->engine, cipher, plain);
-}
-
-
-gpgme_error_t
-gpgme_op_decrypt_start (gpgme_ctx_t ctx, gpgme_data_t cipher,
-                       gpgme_data_t plain)
-{
-  return decrypt_start (ctx, 0, cipher, plain);
-}
-
-
-/* Decrypt ciphertext CIPHER within CTX and store the resulting
-   plaintext in PLAIN.  */
-gpgme_error_t
-gpgme_op_decrypt (gpgme_ctx_t ctx, gpgme_data_t cipher, gpgme_data_t plain)
-{
-  gpgme_error_t err = decrypt_start (ctx, 1, cipher, plain);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/delete.c b/tags/gpgme-1-1-1/gpgme/delete.c
deleted file mode 100644 (file)
index 38f2fdd..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* delete.c - Delete a key.
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-static gpgme_error_t
-delete_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  if (code == GPGME_STATUS_DELETE_PROBLEM)
-    {
-      enum delete_problem
-       {
-         DELETE_No_Problem = 0,
-         DELETE_No_Such_Key = 1,
-         DELETE_Must_Delete_Secret_Key = 2,
-         DELETE_Ambiguous_Specification = 3
-       };
-      long problem;
-      char *tail;
-
-      errno = 0;
-      problem = strtol (args, &tail, 0);
-      if (errno || (*tail && *tail != ' '))
-       return gpg_error (GPG_ERR_INV_ENGINE);
-
-      switch (problem)
-       {
-       case DELETE_No_Problem:
-         break;
-
-       case DELETE_No_Such_Key:
-         return gpg_error (GPG_ERR_NO_PUBKEY);
-
-       case DELETE_Must_Delete_Secret_Key:
-         return gpg_error (GPG_ERR_CONFLICT);
-
-       case DELETE_Ambiguous_Specification:
-         return gpg_error (GPG_ERR_AMBIGUOUS_NAME);
-
-       default:
-         return gpg_error (GPG_ERR_GENERAL);
-       }
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-delete_start (gpgme_ctx_t ctx, int synchronous, const gpgme_key_t key,
-             int allow_secret)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, delete_status_handler, ctx);
-
-  return _gpgme_engine_op_delete (ctx->engine, key, allow_secret);
-}
-
-
-/* Delete KEY from the keyring.  If ALLOW_SECRET is non-zero, secret
-   keys are also deleted.  */
-gpgme_error_t
-gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
-                      int allow_secret)
-{
-  return delete_start (ctx, 0, key, allow_secret);
-}
-
-
-/* Delete KEY from the keyring.  If ALLOW_SECRET is non-zero, secret
-   keys are also deleted.  */
-gpgme_error_t
-gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key, int allow_secret)
-{
-  gpgme_error_t err = delete_start (ctx, 1, key, allow_secret);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/edit.c b/tags/gpgme-1-1-1/gpgme/edit.c
deleted file mode 100644 (file)
index 186d4f9..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/* edit.c - Key edit function.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  /* The user callback function and its hook value.  */
-  gpgme_edit_cb_t fnc;
-  void *fnc_value;
-} *op_data_t;
-
-\f
-static gpgme_error_t
-edit_status_handler (void *priv, gpgme_status_code_t status, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_passphrase_status_handler (priv, status, args);
-  if (err)
-    return err;
-
-  err = _gpgme_progress_status_handler (priv, status, args);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  return (*opd->fnc) (opd->fnc_value, status, args, -1);
-}
-
-
-static gpgme_error_t
-command_handler (void *priv, gpgme_status_code_t status, const char *args,
-                int fd, int *processed_r)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  int processed = 0;
-
-  if (ctx->passphrase_cb)
-    {
-      err = _gpgme_passphrase_command_handler (ctx, status, args,
-                                              fd, &processed);
-      if (err)
-       return err;
-    }
-
-  if (!processed)
-    {
-      void *hook;
-      op_data_t opd;
-
-      err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, &hook, -1, NULL);
-      opd = hook;
-      if (err)
-       return err;
-
-      /* FIXME: We expect the user to handle _all_ status codes.
-        Later, we may fix the callback interface to allow the user
-        indicate if it processed the status code or not.  */
-      *processed_r = 1;
-
-      return (*opd->fnc) (opd->fnc_value, status, args, fd);
-    }
-
-  *processed_r = processed;
-  return 0;
-}
-
-
-static gpgme_error_t
-edit_start (gpgme_ctx_t ctx, int synchronous, int type, gpgme_key_t key,
-           gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  if (!fnc || !out)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_EDIT, &hook, sizeof (*opd), NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  opd->fnc = fnc;
-  opd->fnc_value = fnc_value;
-
-  err = _gpgme_engine_set_command_handler (ctx->engine, command_handler,
-                                          ctx, out);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, edit_status_handler, ctx);
-
-  return _gpgme_engine_op_edit (ctx->engine, type, key, out, ctx);
-}
-
-
-gpgme_error_t
-gpgme_op_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
-                    gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
-{
-  return edit_start (ctx, 0, 0, key, fnc, fnc_value, out);
-}
-
-
-/* Edit the key KEY.  Send status and command requests to FNC and
-   output of edit commands to OUT.  */
-gpgme_error_t
-gpgme_op_edit (gpgme_ctx_t ctx, gpgme_key_t key,
-              gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
-{
-  gpgme_error_t err = edit_start (ctx, 1, 0, key, fnc, fnc_value, out);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
-
-\f
-gpgme_error_t
-gpgme_op_card_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
-                         gpgme_edit_cb_t fnc, void *fnc_value,
-                         gpgme_data_t out)
-{
-  return edit_start (ctx, 0, 1, key, fnc, fnc_value, out);
-}
-
-
-/* Edit the card for the key KEY.  Send status and command requests to
-   FNC and output of edit commands to OUT.  */
-gpgme_error_t
-gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
-                   gpgme_edit_cb_t fnc, void *fnc_value, gpgme_data_t out)
-{
-  gpgme_error_t err = edit_start (ctx, 1, 1, key, fnc, fnc_value, out);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/encrypt-sign.c b/tags/gpgme-1-1-1/gpgme/encrypt-sign.c
deleted file mode 100644 (file)
index 7e3d2ed..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* encrypt-sign.c -  encrypt and verify functions
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-static gpgme_error_t
-encrypt_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_encrypt_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_sign_status_handler (priv, code, args);
-  return err;
-}
-
-
-static gpgme_error_t
-encrypt_sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t recp[],
-                   gpgme_encrypt_flags_t flags,
-                   gpgme_data_t plain, gpgme_data_t cipher)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  if (!plain)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!cipher || !recp)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_encrypt_init_result (ctx);
-  if (err)
-    return err;
-
-  err = _gpgme_op_sign_init_result (ctx);
-  if (err)
-    return err;
-
-  if (ctx->passphrase_cb)
-    {
-      err = _gpgme_engine_set_command_handler
-       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
-      if (err)
-       return err;
-    }
-
-  _gpgme_engine_set_status_handler (ctx->engine,
-                                   encrypt_sign_status_handler, ctx);
-  
-  return _gpgme_engine_op_encrypt_sign (ctx->engine, recp, flags, plain,
-                                       cipher, ctx->use_armor,
-                                       ctx /* FIXME */);
-}
-
-
-/* Encrypt plaintext PLAIN within CTX for the recipients RECP and
-   store the resulting ciphertext in CIPHER.  Also sign the ciphertext
-   with the signers in CTX.  */
-gpgme_error_t
-gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                            gpgme_encrypt_flags_t flags,
-                            gpgme_data_t plain, gpgme_data_t cipher)
-{
-  return encrypt_sign_start (ctx, 0, recp, flags, plain, cipher);
-}
-
-
-/* Encrypt plaintext PLAIN within CTX for the recipients RECP and
-   store the resulting ciphertext in CIPHER.  Also sign the ciphertext
-   with the signers in CTX.  */
-gpgme_error_t
-gpgme_op_encrypt_sign (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                      gpgme_encrypt_flags_t flags,
-                      gpgme_data_t plain, gpgme_data_t cipher)
-{
-  gpgme_error_t err = encrypt_sign_start (ctx, 1, recp, flags, plain, cipher);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/encrypt.c b/tags/gpgme-1-1-1/gpgme/encrypt.c
deleted file mode 100644 (file)
index a7a1f4d..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/* encrypt.c - Encrypt function.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_encrypt_result result;
-
-  /* A pointer to the next pointer of the last invalid recipient in
-     the list.  This makes appending new invalid recipients painless
-     while preserving the order.  */
-  gpgme_invalid_key_t *lastp;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  gpgme_invalid_key_t invalid_recipient = opd->result.invalid_recipients;
-
-  while (invalid_recipient)
-    {
-      gpgme_invalid_key_t next = invalid_recipient->next;
-      if (invalid_recipient->fpr)
-       free (invalid_recipient->fpr);
-      invalid_recipient = next;
-    }
-}
-
-
-gpgme_encrypt_result_t
-gpgme_op_encrypt_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, &hook, -1, NULL);
-  opd = hook;
-
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-gpgme_error_t
-_gpgme_encrypt_status_handler (void *priv, gpgme_status_code_t code,
-                              char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_EOF:
-      if (opd->result.invalid_recipients)
-       return gpg_error (GPG_ERR_UNUSABLE_PUBKEY);
-      break;
-
-    case GPGME_STATUS_INV_RECP:
-      err = _gpgme_parse_inv_recp (args, opd->lastp);
-      if (err)
-       return err;
-
-      opd->lastp = &(*opd->lastp)->next;
-      break;
-
-    case GPGME_STATUS_NO_RECP:
-      /* Should not happen, because we require at least one recipient.  */
-      return gpg_error (GPG_ERR_GENERAL);
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-encrypt_sym_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_passphrase_status_handler (priv, code, args);
-  return err;
-}
-
-
-static gpgme_error_t
-encrypt_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  return _gpgme_progress_status_handler (priv, code, args)
-    || _gpgme_encrypt_status_handler (priv, code, args);
-}
-
-
-gpgme_error_t
-_gpgme_op_encrypt_init_result (gpgme_ctx_t ctx)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_ENCRYPT, &hook, sizeof (*opd),
-                              release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  opd->lastp = &opd->result.invalid_recipients;
-  return 0;
-}
-
-
-static gpgme_error_t
-encrypt_start (gpgme_ctx_t ctx, int synchronous, gpgme_key_t recp[],
-              gpgme_encrypt_flags_t flags,
-              gpgme_data_t plain, gpgme_data_t cipher)
-{
-  gpgme_error_t err;
-  int symmetric = 0;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_encrypt_init_result (ctx);
-  if (err)
-    return err;
-
-  if (!recp)
-    symmetric = 1;
-
-  if (!plain)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!cipher)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  if (recp && ! *recp)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (symmetric && ctx->passphrase_cb)
-    {
-      /* Symmetric encryption requires a passphrase.  */
-      err = _gpgme_engine_set_command_handler
-       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
-      if (err)
-       return err;
-    }
-
-  _gpgme_engine_set_status_handler (ctx->engine,
-                                   symmetric
-                                   ? encrypt_sym_status_handler
-                                   : encrypt_status_handler,
-                                   ctx);
-
-  return _gpgme_engine_op_encrypt (ctx->engine, recp, flags, plain, cipher,
-                                  ctx->use_armor);
-}
-
-
-gpgme_error_t
-gpgme_op_encrypt_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                       gpgme_encrypt_flags_t flags,
-                       gpgme_data_t plain, gpgme_data_t cipher)
-{
-  return encrypt_start (ctx, 0, recp, flags, plain, cipher);
-}
-
-
-/* Encrypt plaintext PLAIN within CTX for the recipients RECP and
-   store the resulting ciphertext in CIPHER.  */
-gpgme_error_t
-gpgme_op_encrypt (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                 gpgme_encrypt_flags_t flags,
-                 gpgme_data_t plain, gpgme_data_t cipher)
-{
-  gpgme_error_t err = encrypt_start (ctx, 1, recp, flags, plain, cipher);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/engine-backend.h b/tags/gpgme-1-1-1/gpgme/engine-backend.h
deleted file mode 100644 (file)
index 27fadbc..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* engine-backend.h - A crypto backend for the engine interface.
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef ENGINE_BACKEND_H
-#define ENGINE_BACKEND_H
-
-#include "engine.h"
-
-/* FIXME: Correct check?  */
-#ifdef GPGSM_PATH
-#define ENABLE_GPGSM 1
-#endif
-
-struct engine_ops
-{
-  /* Static functions.  */
-
-  /* Return the default file name for the binary of this engine.  */
-  const char *(*get_file_name) (void);
-
-  /* Returns a malloced string containing the version of the engine
-     with the given binary file name (or the default if FILE_NAME is
-     NULL.  */
-  char *(*get_version) (const char *file_name);
-
-  /* Returns a statically allocated string containing the required
-     version.  */
-  const char *(*get_req_version) (void);
-
-  gpgme_error_t (*new) (void **r_engine,
-                       const char *file_name, const char *home_dir,
-                       const char *lc_ctype, const char *lc_messages);
-
-  /* Member functions.  */
-  void (*release) (void *engine);
-  void (*set_status_handler) (void *engine, engine_status_handler_t fnc,
-                             void *fnc_value);
-  gpgme_error_t (*set_command_handler) (void *engine,
-                                       engine_command_handler_t fnc,
-                                       void *fnc_value, gpgme_data_t data);
-  gpgme_error_t (*set_colon_line_handler) (void *engine,
-                                          engine_colon_line_handler_t fnc,
-                                          void *fnc_value);
-  gpgme_error_t (*decrypt) (void *engine, gpgme_data_t ciph,
-                           gpgme_data_t plain);
-  gpgme_error_t (*delete) (void *engine, gpgme_key_t key, int allow_secret);
-  gpgme_error_t (*edit) (void *engine, int type, gpgme_key_t key,
-                        gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */);
-  gpgme_error_t (*encrypt) (void *engine, gpgme_key_t recp[],
-                           gpgme_encrypt_flags_t flags,
-                           gpgme_data_t plain, gpgme_data_t ciph,
-                           int use_armor);
-  gpgme_error_t (*encrypt_sign) (void *engine, gpgme_key_t recp[],
-                                gpgme_encrypt_flags_t flags,
-                                gpgme_data_t plain, gpgme_data_t ciph,
-                                int use_armor, gpgme_ctx_t ctx /* FIXME */);
-  gpgme_error_t (*export) (void *engine, const char *pattern,
-                          unsigned int reserved, gpgme_data_t keydata,
-                          int use_armor);
-  gpgme_error_t (*export_ext) (void *engine, const char *pattern[],
-                              unsigned int reserved, gpgme_data_t keydata,
-                              int use_armor);
-  gpgme_error_t (*genkey) (void *engine, gpgme_data_t help_data, int use_armor,
-                          gpgme_data_t pubkey, gpgme_data_t seckey);
-  gpgme_error_t (*import) (void *engine, gpgme_data_t keydata);
-  gpgme_error_t (*keylist) (void *engine, const char *pattern,
-                           int secret_only, gpgme_keylist_mode_t mode);
-  gpgme_error_t (*keylist_ext) (void *engine, const char *pattern[],
-                               int secret_only, int reserved,
-                               gpgme_keylist_mode_t mode);
-  gpgme_error_t (*sign) (void *engine, gpgme_data_t in, gpgme_data_t out,
-                        gpgme_sig_mode_t mode, int use_armor,
-                        int use_textmode,
-                        int include_certs, gpgme_ctx_t ctx /* FIXME */);
-  gpgme_error_t (*trustlist) (void *engine, const char *pattern);
-  gpgme_error_t (*verify) (void *engine, gpgme_data_t sig,
-                          gpgme_data_t signed_text,
-                          gpgme_data_t plaintext);
-  
-  void (*set_io_cbs) (void *engine, gpgme_io_cbs_t io_cbs);
-  void (*io_event) (void *engine, gpgme_event_io_t type, void *type_data);
-
-  gpgme_error_t (*cancel) (void *engine);
-};
-
-
-extern struct engine_ops _gpgme_engine_ops_gpg;                /* OpenPGP.  */
-#ifdef ENABLE_GPGSM
-extern struct engine_ops _gpgme_engine_ops_gpgsm;      /* CMS.  */
-#endif
-
-#endif /* ENGINE_BACKEND_H */
diff --git a/tags/gpgme-1-1-1/gpgme/engine-gpgsm.c b/tags/gpgme-1-1-1/gpgme/engine-gpgsm.c
deleted file mode 100644 (file)
index 44dbd1f..0000000
+++ /dev/null
@@ -1,1609 +0,0 @@
-/* engine-gpgsm.c - GpgSM engine.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef HAVE_W32_SYSTEM
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <assert.h>
-#include <unistd.h>
-#include <locale.h>
-#include <fcntl.h> /* FIXME */
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "ops.h"
-#include "wait.h"
-#include "priv-io.h"
-#include "sema.h"
-
-#include "assuan.h"
-#include "status-table.h"
-#include "debug.h"
-
-#include "engine-backend.h"
-
-\f
-typedef struct
-{
-  int fd;      /* FD we talk about.  */
-  int dir;     /* Inbound/Outbound, maybe given implicit?  */
-  void *data;  /* Handler-specific data.  */
-  void *tag;   /* ID from the user for gpgme_remove_io_callback.  */
-} iocb_data_t;
-
-
-struct engine_gpgsm
-{
-  ASSUAN_CONTEXT assuan_ctx;
-
-  iocb_data_t status_cb;
-
-  /* Input, output etc are from the servers perspective.  */
-  iocb_data_t input_cb;
-  int input_fd_server;
-
-  iocb_data_t output_cb;
-  int output_fd_server;
-
-  iocb_data_t message_cb;
-  int message_fd_server;
-
-  struct
-  {
-    engine_status_handler_t fnc;
-    void *fnc_value;
-  } status;
-
-  struct
-  {
-    engine_colon_line_handler_t fnc;
-    void *fnc_value;
-    struct
-    {
-      char *line;
-      int linesize;
-      int linelen;
-    } attic;
-    int any; /* any data line seen */
-  } colon; 
-
-  struct gpgme_io_cbs io_cbs;
-};
-
-typedef struct engine_gpgsm *engine_gpgsm_t;
-
-\f
-static char *
-gpgsm_get_version (const char *file_name)
-{
-  return _gpgme_get_program_version (file_name ? file_name
-                                    : _gpgme_get_gpgsm_path ());
-}
-
-
-static const char *
-gpgsm_get_req_version (void)
-{
-  return NEED_GPGSM_VERSION;
-}
-
-\f
-static void
-close_notify_handler (int fd, void *opaque)
-{
-  engine_gpgsm_t gpgsm = opaque;
-
-  assert (fd != -1);
-  if (gpgsm->status_cb.fd == fd)
-    {
-      if (gpgsm->status_cb.tag)
-       (*gpgsm->io_cbs.remove) (gpgsm->status_cb.tag);
-      gpgsm->status_cb.fd = -1;
-    }
-  else if (gpgsm->input_cb.fd == fd)
-    {
-      if (gpgsm->input_cb.tag)
-       (*gpgsm->io_cbs.remove) (gpgsm->input_cb.tag);
-      gpgsm->input_cb.fd = -1;
-    }
-  else if (gpgsm->output_cb.fd == fd)
-    {
-      if (gpgsm->output_cb.tag)
-       (*gpgsm->io_cbs.remove) (gpgsm->output_cb.tag);
-      gpgsm->output_cb.fd = -1;
-    }
-  else if (gpgsm->message_cb.fd == fd)
-    {
-      if (gpgsm->message_cb.tag)
-       (*gpgsm->io_cbs.remove) (gpgsm->message_cb.tag);
-      gpgsm->message_cb.fd = -1;
-    }
-}
-
-
-static gpgme_error_t
-map_assuan_error (AssuanError err)
-{
-  if (!err)
-    return 0;
-
-  if (err == -1)
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  /* New code will use gpg_error_t values.  */
-  if (gpg_err_source (err))
-    return (gpgme_error_t) err;
-
-  /* Legacy code will use old values.  */
-  switch (err)
-    {
-    case ASSUAN_No_Error:
-      return gpg_error (GPG_ERR_NO_ERROR);
-    case ASSUAN_General_Error:
-      return gpg_error (GPG_ERR_GENERAL);
-    case ASSUAN_Out_Of_Core:
-      return gpg_error (GPG_ERR_ENOMEM);
-    case ASSUAN_Invalid_Value:
-      return gpg_error (GPG_ERR_INV_VALUE);
-    case ASSUAN_Timeout:
-      return gpg_error (GPG_ERR_ETIMEDOUT);
-    case ASSUAN_Read_Error:
-      return gpg_error (GPG_ERR_GENERAL);
-    case ASSUAN_Write_Error:
-      return gpg_error (GPG_ERR_GENERAL);
-
-    case ASSUAN_Problem_Starting_Server:
-    case ASSUAN_Not_A_Server:
-    case ASSUAN_Not_A_Client:
-    case ASSUAN_Nested_Commands:
-    case ASSUAN_No_Data_Callback:
-    case ASSUAN_No_Inquire_Callback:
-    case ASSUAN_Connect_Failed:
-    case ASSUAN_Accept_Failed:
-    case ASSUAN_Invalid_Command:
-    case ASSUAN_Unknown_Command:
-    case ASSUAN_Syntax_Error:
-    case ASSUAN_Parameter_Error:
-    case ASSUAN_Parameter_Conflict:
-    case ASSUAN_No_Input:
-    case ASSUAN_No_Output:
-    case ASSUAN_No_Data_Available:
-    case ASSUAN_Too_Much_Data:
-    case ASSUAN_Inquire_Unknown:
-    case ASSUAN_Inquire_Error:
-    case ASSUAN_Invalid_Option:
-    case ASSUAN_Unexpected_Status:
-    case ASSUAN_Unexpected_Data:
-    case ASSUAN_Invalid_Status:
-      return gpg_error (GPG_ERR_ASSUAN);
-
-    case ASSUAN_Invalid_Response:
-      return gpg_error (GPG_ERR_INV_RESPONSE);
-
-    case ASSUAN_Not_Implemented:
-      return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-    case ASSUAN_Line_Too_Long:
-      return gpg_error (GPG_ERR_LINE_TOO_LONG);
-    case ASSUAN_Line_Not_Terminated:
-      return gpg_error (GPG_ERR_INCOMPLETE_LINE);
-    case ASSUAN_Canceled:
-      return gpg_error (GPG_ERR_CANCELED);
-
-    case ASSUAN_Unsupported_Algorithm:
-      return gpg_error (GPG_ERR_UNSUPPORTED_ALGORITHM);
-    case ASSUAN_Server_Resource_Problem:
-      return gpg_error (GPG_ERR_RESOURCE_LIMIT);
-    case ASSUAN_Server_IO_Error:
-      return gpg_error (GPG_ERR_GENERAL);
-    case ASSUAN_Server_Bug:
-      return gpg_error (GPG_ERR_BUG);
-    case ASSUAN_Invalid_Data:
-      return gpg_error (GPG_ERR_INV_DATA);
-    case ASSUAN_Invalid_Index:
-      return gpg_error (GPG_ERR_INV_INDEX);
-    case ASSUAN_Not_Confirmed:
-      return gpg_error (GPG_ERR_NOT_CONFIRMED);
-    case ASSUAN_Bad_Certificate:
-      return gpg_error (GPG_ERR_BAD_CERT);
-    case ASSUAN_Bad_Certificate_Chain:
-      return gpg_error (GPG_ERR_BAD_CERT_CHAIN);
-    case ASSUAN_Missing_Certificate:
-      return gpg_error (GPG_ERR_MISSING_CERT);
-    case ASSUAN_Bad_Signature:
-      return gpg_error (GPG_ERR_BAD_SIGNATURE);
-    case ASSUAN_No_Agent:
-      return gpg_error (GPG_ERR_NO_AGENT);
-    case ASSUAN_Agent_Error:
-      return gpg_error (GPG_ERR_AGENT);
-    case ASSUAN_No_Public_Key:
-      return gpg_error (GPG_ERR_NO_PUBKEY);
-    case ASSUAN_No_Secret_Key:
-      return gpg_error (GPG_ERR_NO_SECKEY);
-    case ASSUAN_Invalid_Name:
-      return gpg_error (GPG_ERR_INV_NAME);
-      
-    case ASSUAN_Cert_Revoked:
-      return gpg_error (GPG_ERR_CERT_REVOKED);
-    case ASSUAN_No_CRL_For_Cert:
-      return gpg_error (GPG_ERR_NO_CRL_KNOWN);
-    case ASSUAN_CRL_Too_Old:
-      return gpg_error (GPG_ERR_CRL_TOO_OLD);
-    case ASSUAN_Not_Trusted:
-      return gpg_error (GPG_ERR_NOT_TRUSTED);
-
-    case ASSUAN_Card_Error:
-      return gpg_error (GPG_ERR_CARD);
-    case ASSUAN_Invalid_Card:
-      return gpg_error (GPG_ERR_INV_CARD);
-    case ASSUAN_No_PKCS15_App:
-      return gpg_error (GPG_ERR_NO_PKCS15_APP);
-    case ASSUAN_Card_Not_Present:
-      return gpg_error (GPG_ERR_CARD_NOT_PRESENT);
-    case ASSUAN_Invalid_Id:
-      return gpg_error (GPG_ERR_INV_ID);
-    default:
-      return gpg_error (GPG_ERR_GENERAL);
-    }
-}
-
-
-static gpgme_error_t
-gpgsm_cancel (void *engine)
-{
-  engine_gpgsm_t gpgsm = engine;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (gpgsm->status_cb.fd != -1)
-    _gpgme_io_close (gpgsm->status_cb.fd);
-  if (gpgsm->input_cb.fd != -1)
-    _gpgme_io_close (gpgsm->input_cb.fd);
-  if (gpgsm->output_cb.fd != -1)
-    _gpgme_io_close (gpgsm->output_cb.fd);
-  if (gpgsm->message_cb.fd != -1)
-    _gpgme_io_close (gpgsm->message_cb.fd);
-
-  if (gpgsm->assuan_ctx)
-    {
-      assuan_disconnect (gpgsm->assuan_ctx);
-      gpgsm->assuan_ctx = NULL;
-    }
-
-  return 0;
-}
-
-
-static void
-gpgsm_release (void *engine)
-{
-  engine_gpgsm_t gpgsm = engine;
-
-  if (!gpgsm)
-    return;
-
-  gpgsm_cancel (engine);
-
-  free (gpgsm->colon.attic.line);
-  free (gpgsm);
-}
-
-
-static gpgme_error_t
-gpgsm_new (void **engine, const char *file_name, const char *home_dir,
-          const char *lc_ctype, const char *lc_messages)
-{
-  gpgme_error_t err = 0;
-  engine_gpgsm_t gpgsm;
-  const char *argv[5];
-  int argc;
-  int fds[2];
-  int child_fds[4];
-  char *dft_display = NULL;
-  char dft_ttyname[64];
-  char *dft_ttytype = NULL;
-  char *optstr;
-  int fdlist[5];
-  int nfds;
-
-  gpgsm = calloc (1, sizeof *gpgsm);
-  if (!gpgsm)
-    return gpg_error_from_errno (errno);
-
-  gpgsm->status_cb.fd = -1;
-  gpgsm->status_cb.tag = 0;
-
-  gpgsm->input_cb.fd = -1;
-  gpgsm->input_cb.tag = 0;
-  gpgsm->input_fd_server = -1;
-  gpgsm->output_cb.fd = -1;
-  gpgsm->output_cb.tag = 0;
-  gpgsm->output_fd_server = -1;
-  gpgsm->message_cb.fd = -1;
-  gpgsm->message_cb.tag = 0;
-  gpgsm->message_fd_server = -1;
-
-  gpgsm->status.fnc = 0;
-  gpgsm->colon.fnc = 0;
-  gpgsm->colon.attic.line = 0;
-  gpgsm->colon.attic.linesize = 0;
-  gpgsm->colon.attic.linelen = 0;
-  gpgsm->colon.any = 0;
-
-  gpgsm->io_cbs.add = NULL;
-  gpgsm->io_cbs.add_priv = NULL;
-  gpgsm->io_cbs.remove = NULL;
-  gpgsm->io_cbs.event = NULL;
-  gpgsm->io_cbs.event_priv = NULL;
-
-  if (_gpgme_io_pipe (fds, 0) < 0)
-    {
-      err = gpg_error_from_errno (errno);
-      goto leave;
-    }
-  gpgsm->input_cb.fd = fds[1];
-  gpgsm->input_cb.dir = 0;
-  gpgsm->input_fd_server = fds[0];
-
-  if (_gpgme_io_pipe (fds, 1) < 0)
-    {
-      err = gpg_error_from_errno (errno);
-      goto leave;
-    }
-  gpgsm->output_cb.fd = fds[0];
-  gpgsm->output_cb.dir = 1;
-  gpgsm->output_fd_server = fds[1];
-
-  if (_gpgme_io_pipe (fds, 0) < 0)
-    {
-      err = gpg_error_from_errno (errno);
-      goto leave;
-    }
-  gpgsm->message_cb.fd = fds[1];
-  gpgsm->message_cb.dir = 0;
-  gpgsm->message_fd_server = fds[0];
-
-  child_fds[0] = gpgsm->input_fd_server;
-  child_fds[1] = gpgsm->output_fd_server;
-  child_fds[2] = gpgsm->message_fd_server;
-  child_fds[3] = -1;
-
-  argc = 0;
-  argv[argc++] = "gpgsm";
-  if (home_dir)
-    {
-      argv[argc++] = "--homedir";
-      argv[argc++] = home_dir;
-    }
-  argv[argc++] = "--server";
-  argv[argc++] = NULL;
-
-  err = assuan_pipe_connect (&gpgsm->assuan_ctx,
-                            file_name ? file_name : _gpgme_get_gpgsm_path (),
-                            argv, child_fds);
-  /* FIXME: Check error.  */
-
-  /* We need to know the fd used by assuan for reads.  We do this by
-     using the assumption that the first returned fd from
-     assuan_get_active_fds() is always this one.  */
-  nfds = assuan_get_active_fds (gpgsm->assuan_ctx, 0 /* read fds */,
-                                fdlist, DIM (fdlist));
-  if (nfds < 1)
-    {
-      err = gpg_error (GPG_ERR_GENERAL);       /* FIXME */
-      goto leave;
-    }
-  /* We duplicate the file descriptor, so we can close it without
-     disturbing assuan.  Alternatively, we could special case
-     status_fd and register/unregister it manually as needed, but this
-     increases code duplication and is more complicated as we can not
-     use the close notifications etc.  */
-  gpgsm->status_cb.fd = dup (fdlist[0]);
-  if (gpgsm->status_cb.fd < 0)
-    {
-      err = gpg_error (GPG_ERR_GENERAL);       /* FIXME */
-      goto leave;
-    }
-  gpgsm->status_cb.dir = 1;
-  gpgsm->status_cb.data = gpgsm;
-
-  err = _gpgme_getenv ("DISPLAY", &dft_display);
-  if (err)
-    goto leave;
-  if (dft_display)
-    {
-      if (asprintf (&optstr, "OPTION display=%s", dft_display) < 0)
-        {
-         free (dft_display);
-         err = gpg_error_from_errno (errno);
-         goto leave;
-       }
-      free (dft_display);
-
-      err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL,
-                            NULL, NULL, NULL);
-      free (optstr);
-      if (err)
-       {
-         err = map_assuan_error (err);
-         goto leave;
-       }
-    }
-
-  if (isatty (1))
-    {
-      if (ttyname_r (1, dft_ttyname, sizeof (dft_ttyname)))
-       {
-         err = gpg_error_from_errno (errno);
-         goto leave;
-       }
-      else
-       {
-         if (asprintf (&optstr, "OPTION ttyname=%s", dft_ttyname) < 0)
-           {
-             err = gpg_error_from_errno (errno);
-             goto leave;
-           }
-         err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL, NULL,
-                                NULL, NULL, NULL);
-         free (optstr);
-         if (err)
-           {
-             err = map_assuan_error (err);
-             goto leave;
-           }
-
-         err = _gpgme_getenv ("TERM", &dft_ttytype);
-         if (err)
-           goto leave;
-         if (dft_ttytype)
-           {
-             if (asprintf (&optstr, "OPTION ttytype=%s", dft_ttytype) < 0)
-               {
-                 free (dft_ttytype);
-                 err = gpg_error_from_errno (errno);
-                 goto leave;
-               }
-             free (dft_ttytype);
-
-             err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
-                                    NULL, NULL, NULL, NULL);
-             free (optstr);
-             if (err)
-               {
-                 err = map_assuan_error (err);
-                 goto leave;
-               }
-           }
-       }
-    }
-
-  if (lc_ctype)
-    {
-      if (asprintf (&optstr, "OPTION lc-ctype=%s", lc_ctype) < 0)
-       err = gpg_error_from_errno (errno);
-      else
-       {
-         err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
-                                NULL, NULL, NULL, NULL);
-         free (optstr);
-         if (err)
-           err = map_assuan_error (err);
-       }
-    }
-  if (err)
-    goto leave;
-  
-  if (lc_messages)
-    {
-      if (asprintf (&optstr, "OPTION lc-messages=%s", lc_messages) < 0)
-       err = gpg_error_from_errno (errno);
-      else
-       {
-         err = assuan_transact (gpgsm->assuan_ctx, optstr, NULL, NULL,
-                                NULL, NULL, NULL, NULL);
-         free (optstr);
-         if (err)
-           err = map_assuan_error (err);
-       }
-    }
-  if (err)
-    goto leave;
-
-  if (!err
-      && (_gpgme_io_set_close_notify (gpgsm->status_cb.fd,
-                                     close_notify_handler, gpgsm)
-         || _gpgme_io_set_close_notify (gpgsm->input_cb.fd,
-                                        close_notify_handler, gpgsm)
-         || _gpgme_io_set_close_notify (gpgsm->output_cb.fd,
-                                        close_notify_handler, gpgsm)
-         || _gpgme_io_set_close_notify (gpgsm->message_cb.fd,
-                                        close_notify_handler, gpgsm)))
-    {
-      err = gpg_error (GPG_ERR_GENERAL);
-      goto leave;
-    }
-      
- leave:
-  /* Close the server ends of the pipes.  Our ends are closed in
-     gpgsm_release().  */
-  if (gpgsm->input_fd_server != -1)
-    _gpgme_io_close (gpgsm->input_fd_server);
-  if (gpgsm->output_fd_server != -1)
-    _gpgme_io_close (gpgsm->output_fd_server);
-  if (gpgsm->message_fd_server != -1)
-    _gpgme_io_close (gpgsm->message_fd_server);
-
-  if (err)
-    gpgsm_release (gpgsm);
-  else
-    *engine = gpgsm;
-
-  return err;
-}
-
-
-/* Forward declaration.  */
-static gpgme_status_code_t parse_status (const char *name);
-
-static gpgme_error_t
-gpgsm_assuan_simple_command (ASSUAN_CONTEXT ctx, char *cmd,
-                            engine_status_handler_t status_fnc,
-                            void *status_fnc_value)
-{
-  AssuanError err;
-  char *line;
-  size_t linelen;
-
-  err = assuan_write_line (ctx, cmd);
-  if (err)
-    return map_assuan_error (err);
-
-  do
-    {
-      err = assuan_read_line (ctx, &line, &linelen);
-      if (err)
-       return map_assuan_error (err);
-
-      if (*line == '#' || !linelen)
-       continue;
-
-      if (linelen >= 2
-         && line[0] == 'O' && line[1] == 'K'
-         && (line[2] == '\0' || line[2] == ' '))
-       return 0;
-      else if (linelen >= 4
-         && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
-         && line[3] == ' ')
-       err = map_assuan_error (atoi (&line[4]));
-      else if (linelen >= 2
-              && line[0] == 'S' && line[1] == ' ')
-       {
-         char *rest;
-         gpgme_status_code_t r;
-
-         rest = strchr (line + 2, ' ');
-         if (!rest)
-           rest = line + linelen; /* set to an empty string */
-         else
-           *(rest++) = 0;
-
-         r = parse_status (line + 2);
-
-         if (r >= 0 && status_fnc)
-           err = status_fnc (status_fnc_value, r, rest);
-         else
-           err = gpg_error (GPG_ERR_GENERAL);
-       }
-      else
-       err = gpg_error (GPG_ERR_GENERAL);
-    }
-  while (!err);
-
-  return err;
-}
-
-
-#define COMMANDLINELEN 40
-static gpgme_error_t
-gpgsm_set_fd (ASSUAN_CONTEXT ctx, const char *which, int fd, const char *opt)
-{
-  char line[COMMANDLINELEN];
-
-  if (opt)
-    snprintf (line, COMMANDLINELEN, "%s FD=%i %s", which, fd, opt);
-  else
-    snprintf (line, COMMANDLINELEN, "%s FD=%i", which, fd);
-
-  return gpgsm_assuan_simple_command (ctx, line, NULL, NULL);
-}
-
-
-static const char *
-map_input_enc (gpgme_data_t d)
-{
-  switch (gpgme_data_get_encoding (d))
-    {
-    case GPGME_DATA_ENCODING_NONE:
-      break;
-    case GPGME_DATA_ENCODING_BINARY:
-      return "--binary";
-    case GPGME_DATA_ENCODING_BASE64:
-      return "--base64";
-    case GPGME_DATA_ENCODING_ARMOR:
-      return "--armor";
-    default:
-      break;
-    }
-  return NULL;
-}
-
-
-static int
-status_cmp (const void *ap, const void *bp)
-{
-  const struct status_table_s *a = ap;
-  const struct status_table_s *b = bp;
-
-  return strcmp (a->name, b->name);
-}
-
-
-static gpgme_status_code_t
-parse_status (const char *name)
-{
-  struct status_table_s t, *r;
-  t.name = name;
-  r = bsearch (&t, status_table, DIM(status_table) - 1,
-              sizeof t, status_cmp);
-  return r ? r->code : -1;
-}
-
-
-static gpgme_error_t
-status_handler (void *opaque, int fd)
-{
-  AssuanError assuan_err;
-  gpgme_error_t err = 0;
-  engine_gpgsm_t gpgsm = opaque;
-  char *line;
-  size_t linelen;
-
-  do
-    {
-      assuan_err = assuan_read_line (gpgsm->assuan_ctx, &line, &linelen);
-      if (assuan_err)
-       {
-         /* Try our best to terminate the connection friendly.  */
-         /*      assuan_write_line (gpgsm->assuan_ctx, "BYE"); */
-         err = map_assuan_error (assuan_err);
-          DEBUG3 ("fd %d: error from assuan (%d) getting status line : %s \n",
-                  fd, assuan_err, gpg_strerror (err));
-       }
-      else if (linelen >= 3
-              && line[0] == 'E' && line[1] == 'R' && line[2] == 'R'
-              && (line[3] == '\0' || line[3] == ' '))
-       {
-         if (line[3] == ' ')
-           err = map_assuan_error (atoi (&line[4]));
-         else
-           err = gpg_error (GPG_ERR_GENERAL);
-          DEBUG2 ("fd %d: ERR line - mapped to: %s\n",
-                  fd, err? gpg_strerror (err):"ok");
-       }
-      else if (linelen >= 2
-              && line[0] == 'O' && line[1] == 'K'
-              && (line[2] == '\0' || line[2] == ' '))
-       {
-         if (gpgsm->status.fnc)
-           err = gpgsm->status.fnc (gpgsm->status.fnc_value,
-                                    GPGME_STATUS_EOF, "");
-         
-         if (!err && gpgsm->colon.fnc && gpgsm->colon.any )
-            {
-              /* We must tell a colon function about the EOF. We do
-                 this only when we have seen any data lines.  Note
-                 that this inlined use of colon data lines will
-                 eventually be changed into using a regular data
-                 channel. */
-              gpgsm->colon.any = 0;
-              err = gpgsm->colon.fnc (gpgsm->colon.fnc_value, NULL);
-            }
-         _gpgme_io_close (gpgsm->status_cb.fd);
-          DEBUG2 ("fd %d: OK line - final status: %s\n",
-                  fd, err? gpg_strerror (err):"ok");
-         return err;
-       }
-      else if (linelen > 2
-              && line[0] == 'D' && line[1] == ' '
-              && gpgsm->colon.fnc)
-        {
-         /* We are using the colon handler even for plain inline data
-             - strange name for that function but for historic reasons
-             we keep it.  */
-          /* FIXME We can't use this for binary data because we
-             assume this is a string.  For the current usage of colon
-             output it is correct.  */
-          char *src = line + 2;
-         char *end = line + linelen;
-         char *dst;
-          char **aline = &gpgsm->colon.attic.line;
-         int *alinelen = &gpgsm->colon.attic.linelen;
-
-         if (gpgsm->colon.attic.linesize
-             < *alinelen + linelen + 1)
-           {
-             char *newline = realloc (*aline, *alinelen + linelen + 1);
-             if (!newline)
-               err = gpg_error_from_errno (errno);
-             else
-               {
-                 *aline = newline;
-                 gpgsm->colon.attic.linesize += linelen + 1;
-               }
-           }
-         if (!err)
-           {
-             dst = *aline + *alinelen;
-
-             while (!err && src < end)
-               {
-                 if (*src == '%' && src + 2 < end)
-                   {
-                     /* Handle escaped characters.  */
-                     ++src;
-                     *dst = _gpgme_hextobyte (src);
-                     (*alinelen)++;
-                     src += 2;
-                   }
-                 else
-                   {
-                     *dst = *src++;
-                     (*alinelen)++;
-                   }
-                 
-                 if (*dst == '\n')
-                   {
-                     /* Terminate the pending line, pass it to the colon
-                        handler and reset it.  */
-                     
-                     gpgsm->colon.any = 1;
-                     if (*alinelen > 1 && *(dst - 1) == '\r')
-                       dst--;
-                     *dst = '\0';
-
-                     /* FIXME How should we handle the return code?  */
-                     err = gpgsm->colon.fnc (gpgsm->colon.fnc_value, *aline);
-                     if (!err)
-                       {
-                         dst = *aline;
-                         *alinelen = 0;
-                       }
-                   }
-                 else
-                   dst++;
-               }
-           }
-          DEBUG2 ("fd %d: D line; final status: %s\n",
-                  fd, err? gpg_strerror (err):"ok");
-        }
-      else if (linelen > 2
-              && line[0] == 'S' && line[1] == ' ')
-       {
-         char *rest;
-         gpgme_status_code_t r;
-         
-         rest = strchr (line + 2, ' ');
-         if (!rest)
-           rest = line + linelen; /* set to an empty string */
-         else
-           *(rest++) = 0;
-
-         r = parse_status (line + 2);
-
-         if (r >= 0)
-           {
-             if (gpgsm->status.fnc)
-               err = gpgsm->status.fnc (gpgsm->status.fnc_value, r, rest);
-           }
-         else
-           fprintf (stderr, "[UNKNOWN STATUS]%s %s", line + 2, rest);
-          DEBUG3 ("fd %d: S line (%s) - final status: %s\n",
-                  fd, line+2, err? gpg_strerror (err):"ok");
-       }
-    }
-  while (!err && assuan_pending_line (gpgsm->assuan_ctx));
-         
-  return err;
-}
-
-
-static gpgme_error_t
-add_io_cb (engine_gpgsm_t gpgsm, iocb_data_t *iocbd, gpgme_io_cb_t handler)
-{
-  gpgme_error_t err;
-
-  err = (*gpgsm->io_cbs.add) (gpgsm->io_cbs.add_priv,
-                             iocbd->fd, iocbd->dir,
-                             handler, iocbd->data, &iocbd->tag);
-  if (err)
-    return err;
-  if (!iocbd->dir)
-    /* FIXME Kludge around poll() problem.  */
-    err = _gpgme_io_set_nonblocking (iocbd->fd);
-  return err;
-}
-
-
-static gpgme_error_t
-start (engine_gpgsm_t gpgsm, const char *command)
-{
-  gpgme_error_t err;
-
-  err = add_io_cb (gpgsm, &gpgsm->status_cb, status_handler);
-  if (!err && gpgsm->input_cb.fd != -1)
-    err = add_io_cb (gpgsm, &gpgsm->input_cb, _gpgme_data_outbound_handler);
-  if (!err && gpgsm->output_cb.fd != -1)
-    err = add_io_cb (gpgsm, &gpgsm->output_cb, _gpgme_data_inbound_handler);
-  if (!err && gpgsm->message_cb.fd != -1)
-    err = add_io_cb (gpgsm, &gpgsm->message_cb, _gpgme_data_outbound_handler);
-
-  if (!err)
-    err = map_assuan_error (assuan_write_line (gpgsm->assuan_ctx, command));
-
-  if (!err)
-    (*gpgsm->io_cbs.event) (gpgsm->io_cbs.event_priv, GPGME_EVENT_START, NULL);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_decrypt (void *engine, gpgme_data_t ciph, gpgme_data_t plain)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  gpgsm->input_cb.data = ciph;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server, 
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return gpg_error (GPG_ERR_GENERAL);        /* FIXME */
-  gpgsm->output_cb.data = plain;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server, 0);
-  if (err)
-    return gpg_error (GPG_ERR_GENERAL);        /* FIXME */
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (engine, "DECRYPT");
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_delete (void *engine, gpgme_key_t key, int allow_secret)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-  char *fpr = key->subkeys ? key->subkeys->fpr : NULL;
-  char *linep = fpr;
-  char *line;
-  int length = 8;      /* "DELKEYS " */
-
-  if (!fpr)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  while (*linep)
-    {
-      length++;
-      if (*linep == '%' || *linep == ' ' || *linep == '+')
-       length += 2;
-      linep++;
-    }
-  length++;
-
-  line = malloc (length);
-  if (!line)
-    return gpg_error_from_errno (errno);
-
-  strcpy (line, "DELKEYS ");
-  linep = &line[8];
-
-  while (*fpr)
-    {
-      switch (*fpr)
-       {
-       case '%':
-         *(linep++) = '%';
-         *(linep++) = '2';
-         *(linep++) = '5';
-         break;
-       case ' ':
-         *(linep++) = '%';
-         *(linep++) = '2';
-         *(linep++) = '0';
-         break;
-       case '+':
-         *(linep++) = '%';
-         *(linep++) = '2';
-         *(linep++) = 'B';
-         break;
-       default:
-         *(linep++) = *fpr;
-         break;
-       }
-      fpr++;
-    }
-  *linep = '\0';
-
-  _gpgme_io_close (gpgsm->output_cb.fd);
-  _gpgme_io_close (gpgsm->input_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, line);
-  free (line);
-
-  return err;
-}
-
-
-static gpgme_error_t
-set_recipients (engine_gpgsm_t gpgsm, gpgme_key_t recp[])
-{
-  gpgme_error_t err = 0;
-  ASSUAN_CONTEXT ctx = gpgsm->assuan_ctx;
-  char *line;
-  int linelen;
-  int invalid_recipients = 0;
-  int i = 0;
-
-  linelen = 10 + 40 + 1;       /* "RECIPIENT " + guess + '\0'.  */
-  line = malloc (10 + 40 + 1);
-  if (!line)
-    return gpg_error_from_errno (errno);
-  strcpy (line, "RECIPIENT ");
-  while (!err && recp[i])
-    {
-      char *fpr;
-      int newlen;
-
-      if (!recp[i]->subkeys || !recp[i]->subkeys->fpr)
-       {
-         invalid_recipients++;
-         continue;
-       }
-      fpr = recp[i]->subkeys->fpr;
-
-      newlen = 11 + strlen (fpr);
-      if (linelen < newlen)
-       {
-         char *newline = realloc (line, newlen);
-         if (! newline)
-           {
-             int saved_errno = errno;
-             free (line);
-             return gpg_error_from_errno (saved_errno);
-           }
-         line = newline;
-         linelen = newlen;
-       }
-      strcpy (&line[10], fpr);
-
-      err = gpgsm_assuan_simple_command (ctx, line, gpgsm->status.fnc,
-                                        gpgsm->status.fnc_value);
-      /* FIXME: This requires more work.  */
-      if (gpg_err_code (err) == GPG_ERR_NO_PUBKEY)
-       invalid_recipients++;
-      else if (err)
-       {
-         free (line);
-         return err;
-       }
-      i++;
-    }
-  free (line);
-  return gpg_error (invalid_recipients
-                   ? GPG_ERR_UNUSABLE_PUBKEY : GPG_ERR_NO_ERROR);
-}
-
-
-static gpgme_error_t
-gpgsm_encrypt (void *engine, gpgme_key_t recp[], gpgme_encrypt_flags_t flags,
-              gpgme_data_t plain, gpgme_data_t ciph, int use_armor)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  if (!recp)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  gpgsm->input_cb.data = plain;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server,
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return err;
-  gpgsm->output_cb.data = ciph;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                     use_armor ? "--armor" : 0);
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = set_recipients (gpgsm, recp);
-
-  if (!err)
-    err = start (gpgsm, "ENCRYPT");
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_export (void *engine, const char *pattern, unsigned int reserved,
-             gpgme_data_t keydata, int use_armor)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err = 0;
-  char *cmd;
-
-  if (!gpgsm || reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!pattern)
-    pattern = "";
-
-  cmd = malloc (7 + strlen (pattern) + 1);
-  if (!cmd)
-    return gpg_error_from_errno (errno);
-  strcpy (cmd, "EXPORT ");
-  strcpy (&cmd[7], pattern);
-
-  gpgsm->output_cb.data = keydata;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                     use_armor ? "--armor" : 0);
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->input_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, cmd);
-  free (cmd);
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_export_ext (void *engine, const char *pattern[], unsigned int reserved,
-                 gpgme_data_t keydata, int use_armor)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err = 0;
-  char *line;
-  /* Length is "EXPORT " + p + '\0'.  */
-  int length = 7 + 1;
-  char *linep;
-
-  if (!gpgsm || reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (pattern && *pattern)
-    {
-      const char **pat = pattern;
-
-      while (*pat)
-       {
-         const char *patlet = *pat;
-
-         while (*patlet)
-           {
-             length++;
-             if (*patlet == '%' || *patlet == ' ' || *patlet == '+')
-               length += 2;
-             patlet++;
-           }
-         pat++;
-         length++;
-       }
-    }
-  line = malloc (length);
-  if (!line)
-    return gpg_error_from_errno (errno);
-
-  strcpy (line, "EXPORT ");
-  linep = &line[7];
-
-  if (pattern && *pattern)
-    {
-      while (*pattern)
-       {
-         const char *patlet = *pattern;
-
-         while (*patlet)
-           {
-             switch (*patlet)
-               {
-               case '%':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = '5';
-                 break;
-               case ' ':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = '0';
-                 break;
-               case '+':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = 'B';
-                 break;
-               default:
-                 *(linep++) = *patlet;
-                 break;
-               }
-             patlet++;
-           }
-         pattern++;
-          if (*pattern)
-            *linep++ = ' ';
-       }
-    }
-  *linep = '\0';
-
-  gpgsm->output_cb.data = keydata;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                     use_armor ? "--armor" : 0);
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->input_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, line);
-  free (line);
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_genkey (void *engine, gpgme_data_t help_data, int use_armor,
-             gpgme_data_t pubkey, gpgme_data_t seckey)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-
-  if (!gpgsm || !pubkey || seckey)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  gpgsm->input_cb.data = help_data;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server,
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return err;
-  gpgsm->output_cb.data = pubkey;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                     use_armor ? "--armor" : 0);
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, "GENKEY");
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_import (void *engine, gpgme_data_t keydata)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  gpgsm->input_cb.data = keydata;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server,
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->output_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, "IMPORT");
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_keylist (void *engine, const char *pattern, int secret_only,
-              gpgme_keylist_mode_t mode)
-{
-  engine_gpgsm_t gpgsm = engine;
-  char *line;
-  gpgme_error_t err;
-  int list_mode = 0;
-
-  if (mode & GPGME_KEYLIST_MODE_LOCAL)
-    list_mode |= 1;
-  if (mode & GPGME_KEYLIST_MODE_EXTERN)
-    list_mode |= 2;
-
-  if (!pattern)
-    pattern = "";
-
-  if (asprintf (&line, "OPTION list-mode=%d", (list_mode & 3)) < 0)
-    return gpg_error_from_errno (errno);
-  err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, line, NULL, NULL);
-  free (line);
-  if (err)
-    return err;
-
-
-  /* Use the validation mode if required.  We don't check for an error
-     yet because this is a pretty fresh gpgsm features. */
-  gpgsm_assuan_simple_command (gpgsm->assuan_ctx, 
-                               (mode & GPGME_KEYLIST_MODE_VALIDATE)?
-                               "OPTION with-validation=1":
-                               "OPTION with-validation=0" ,
-                               NULL, NULL);
-
-
-  /* Length is "LISTSECRETKEYS " + p + '\0'.  */
-  line = malloc (15 + strlen (pattern) + 1);
-  if (!line)
-    return gpg_error_from_errno (errno);
-  if (secret_only)
-    {
-      strcpy (line, "LISTSECRETKEYS ");
-      strcpy (&line[15], pattern);
-    }
-  else
-    {
-      strcpy (line, "LISTKEYS ");
-      strcpy (&line[9], pattern);
-    }
-
-  _gpgme_io_close (gpgsm->input_cb.fd);
-  _gpgme_io_close (gpgsm->output_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, line);
-  free (line);
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_keylist_ext (void *engine, const char *pattern[], int secret_only,
-                  int reserved, gpgme_keylist_mode_t mode)
-{
-  engine_gpgsm_t gpgsm = engine;
-  char *line;
-  gpgme_error_t err;
-  /* Length is "LISTSECRETKEYS " + p + '\0'.  */
-  int length = 15 + 1;
-  char *linep;
-  int any_pattern = 0;
-  int list_mode = 0;
-
-  if (reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (mode & GPGME_KEYLIST_MODE_LOCAL)
-    list_mode |= 1;
-  if (mode & GPGME_KEYLIST_MODE_EXTERN)
-    list_mode |= 2;
-
-  if (asprintf (&line, "OPTION list-mode=%d", (list_mode & 3)) < 0)
-    return gpg_error_from_errno (errno);
-  err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, line, NULL, NULL);
-  free (line);
-  if (err)
-    return err;
-
-  /* Use the validation mode if required.  We don't check for an error
-     yet because this is a pretty fresh gpgsm features. */
-  gpgsm_assuan_simple_command (gpgsm->assuan_ctx, 
-                               (mode & GPGME_KEYLIST_MODE_VALIDATE)?
-                               "OPTION with-validation=1":
-                               "OPTION with-validation=0" ,
-                               NULL, NULL);
-
-
-  if (pattern && *pattern)
-    {
-      const char **pat = pattern;
-
-      while (*pat)
-       {
-         const char *patlet = *pat;
-
-         while (*patlet)
-           {
-             length++;
-             if (*patlet == '%' || *patlet == ' ' || *patlet == '+')
-               length += 2;
-             patlet++;
-           }
-         pat++;
-         length++;
-       }
-    }
-  line = malloc (length);
-  if (!line)
-    return gpg_error_from_errno (errno);
-  if (secret_only)
-    {
-      strcpy (line, "LISTSECRETKEYS ");
-      linep = &line[15];
-    }
-  else
-    {
-      strcpy (line, "LISTKEYS ");
-      linep = &line[9];
-    }
-
-  if (pattern && *pattern)
-    {
-      while (*pattern)
-       {
-         const char *patlet = *pattern;
-
-         while (*patlet)
-           {
-             switch (*patlet)
-               {
-               case '%':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = '5';
-                 break;
-               case ' ':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = '0';
-                 break;
-               case '+':
-                 *(linep++) = '%';
-                 *(linep++) = '2';
-                 *(linep++) = 'B';
-                 break;
-               default:
-                 *(linep++) = *patlet;
-                 break;
-               }
-             patlet++;
-           }
-          any_pattern = 1;
-          *linep++ = ' ';
-         pattern++;
-       }
-    }
-  if (any_pattern)
-    linep--;
-  *linep = '\0';
-
-  _gpgme_io_close (gpgsm->input_cb.fd);
-  _gpgme_io_close (gpgsm->output_cb.fd);
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, line);
-  free (line);
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
-           gpgme_sig_mode_t mode, int use_armor, int use_textmode,
-           int include_certs, gpgme_ctx_t ctx /* FIXME */)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-  char *assuan_cmd;
-  int i;
-  gpgme_key_t key;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  /* We must send a reset because we need to reset the list of
-     signers.  Note that RESET does not reset OPTION commands. */
-  err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, "RESET", NULL, NULL);
-  if (err)
-    return err;
-
-  if (include_certs != GPGME_INCLUDE_CERTS_DEFAULT)
-    {
-      /* FIXME: Make sure that if we run multiple operations, that we
-        can reset any previously set value in case the default is
-        requested.  */
-
-      if (asprintf (&assuan_cmd, "OPTION include-certs %i", include_certs) < 0)
-       return gpg_error_from_errno (errno);
-      err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, assuan_cmd,
-                                        NULL, NULL);
-      free (assuan_cmd);
-      if (err)
-       return err;
-    }
-
-  for (i = 0; (key = gpgme_signers_enum (ctx, i)); i++)
-    {
-      const char *s = key->subkeys ? key->subkeys->fpr : NULL;
-      if (s && strlen (s) < 80)
-       {
-          char buf[100];
-
-          strcpy (stpcpy (buf, "SIGNER "), s);
-          err = gpgsm_assuan_simple_command (gpgsm->assuan_ctx, buf,
-                                             NULL, NULL);
-       }
-      else
-        err = gpg_error (GPG_ERR_INV_VALUE);
-      gpgme_key_unref (key);
-      if (err) 
-        return err;
-    }
-
-  gpgsm->input_cb.data = in;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server,
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return err;
-  gpgsm->output_cb.data = out;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                     use_armor ? "--armor" : 0);
-  if (err)
-    return err;
-  _gpgme_io_close (gpgsm->message_cb.fd);
-
-  err = start (gpgsm, mode == GPGME_SIG_MODE_DETACH
-              ? "SIGN --detached" : "SIGN");
-  return err;
-}
-
-
-static gpgme_error_t
-gpgsm_verify (void *engine, gpgme_data_t sig, gpgme_data_t signed_text,
-             gpgme_data_t plaintext)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgme_error_t err;
-
-  if (!gpgsm)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  gpgsm->input_cb.data = sig;
-  err = gpgsm_set_fd (gpgsm->assuan_ctx, "INPUT", gpgsm->input_fd_server,
-                      map_input_enc (gpgsm->input_cb.data));
-  if (err)
-    return err;
-  if (plaintext)
-    {
-      /* Normal or cleartext signature.  */
-      gpgsm->output_cb.data = plaintext;
-      err = gpgsm_set_fd (gpgsm->assuan_ctx, "OUTPUT", gpgsm->output_fd_server,
-                         0);
-      _gpgme_io_close (gpgsm->message_cb.fd);
-    }
-  else
-    {
-      /* Detached signature.  */
-      gpgsm->message_cb.data = signed_text;
-      err = gpgsm_set_fd (gpgsm->assuan_ctx, "MESSAGE",
-                         gpgsm->message_fd_server, 0);
-      _gpgme_io_close (gpgsm->output_cb.fd);
-    }
-
-  if (!err)
-    err = start (gpgsm, "VERIFY");
-
-  return err;
-}
-
-
-static void
-gpgsm_set_status_handler (void *engine, engine_status_handler_t fnc,
-                         void *fnc_value) 
-{
-  engine_gpgsm_t gpgsm = engine;
-
-  gpgsm->status.fnc = fnc;
-  gpgsm->status.fnc_value = fnc_value;
-}
-
-
-static gpgme_error_t
-gpgsm_set_colon_line_handler (void *engine, engine_colon_line_handler_t fnc,
-                             void *fnc_value) 
-{
-  engine_gpgsm_t gpgsm = engine;
-
-  gpgsm->colon.fnc = fnc;
-  gpgsm->colon.fnc_value = fnc_value;
-  gpgsm->colon.any = 0;
-  return 0;
-}
-
-
-static void
-gpgsm_set_io_cbs (void *engine, gpgme_io_cbs_t io_cbs)
-{
-  engine_gpgsm_t gpgsm = engine;
-  gpgsm->io_cbs = *io_cbs;
-}
-
-
-static void
-gpgsm_io_event (void *engine, gpgme_event_io_t type, void *type_data)
-{
-  engine_gpgsm_t gpgsm = engine;
-
-  if (gpgsm->io_cbs.event)
-    (*gpgsm->io_cbs.event) (gpgsm->io_cbs.event_priv, type, type_data);
-}
-
-
-struct engine_ops _gpgme_engine_ops_gpgsm =
-  {
-    /* Static functions.  */
-    _gpgme_get_gpgsm_path,
-    gpgsm_get_version,
-    gpgsm_get_req_version,
-    gpgsm_new,
-
-    /* Member functions.  */
-    gpgsm_release,
-    gpgsm_set_status_handler,
-    NULL,              /* set_command_handler */
-    gpgsm_set_colon_line_handler,
-    gpgsm_decrypt,
-    gpgsm_delete,
-    NULL,              /* edit */
-    gpgsm_encrypt,
-    NULL,              /* encrypt_sign */
-    gpgsm_export,
-    gpgsm_export_ext,
-    gpgsm_genkey,
-    gpgsm_import,
-    gpgsm_keylist,
-    gpgsm_keylist_ext,
-    gpgsm_sign,
-    NULL,              /* trustlist */
-    gpgsm_verify,
-    gpgsm_set_io_cbs,
-    gpgsm_io_event,
-    gpgsm_cancel
-  };
-
-#endif /*!HAVE_W32_SYSTEM*/
diff --git a/tags/gpgme-1-1-1/gpgme/engine.c b/tags/gpgme-1-1-1/gpgme/engine.c
deleted file mode 100644 (file)
index a7ca624..0000000
+++ /dev/null
@@ -1,719 +0,0 @@
-/* engine.c - GPGME engine support.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2006 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "sema.h"
-#include "ops.h"
-
-#include "engine.h"
-#include "engine-backend.h"
-
-
-struct engine
-{
-  struct engine_ops *ops;
-  void *engine;
-};
-
-
-static struct engine_ops *engine_ops[] =
-  {
-    &_gpgme_engine_ops_gpg,            /* OpenPGP.  */
-#ifdef ENABLE_GPGSM
-    &_gpgme_engine_ops_gpgsm           /* CMS.  */
-#else
-    NULL
-#endif
-  };
-
-
-/* The engine info.  */
-static gpgme_engine_info_t engine_info;
-DEFINE_STATIC_LOCK (engine_info_lock);
-
-\f
-/* Get the file name of the engine for PROTOCOL.  */
-static const char *
-engine_get_file_name (gpgme_protocol_t proto)
-{
-  if (proto > DIM (engine_ops))
-    return NULL;
-
-  if (engine_ops[proto] && engine_ops[proto]->get_file_name)
-    return (*engine_ops[proto]->get_file_name) ();
-  else
-    return NULL;
-}
-
-
-/* Get a malloced string containing the version number of the engine
-   for PROTOCOL.  */
-static char *
-engine_get_version (gpgme_protocol_t proto, const char *file_name)
-{
-  if (proto > DIM (engine_ops))
-    return NULL;
-
-  if (engine_ops[proto] && engine_ops[proto]->get_version)
-    return (*engine_ops[proto]->get_version) (file_name);
-  else
-    return NULL;
-}
-
-
-/* Get the required version number of the engine for PROTOCOL.  */
-static const char *
-engine_get_req_version (gpgme_protocol_t proto)
-{
-  if (proto > DIM (engine_ops))
-    return NULL;
-
-  if (engine_ops[proto] && engine_ops[proto]->get_req_version)
-    return (*engine_ops[proto]->get_req_version) ();
-  else
-    return NULL;
-}
-
-
-/* Verify the version requirement for the engine for PROTOCOL.  */
-gpgme_error_t
-gpgme_engine_check_version (gpgme_protocol_t proto)
-{
-  gpgme_error_t err;
-  gpgme_engine_info_t info;
-  int result;
-
-  LOCK (engine_info_lock);
-  info = engine_info;
-  if (!info)
-    {
-      /* Make sure it is initialized.  */
-      UNLOCK (engine_info_lock);
-      err = gpgme_get_engine_info (&info);
-      if (err)
-       return err;
-
-      LOCK (engine_info_lock);
-    }
-
-  while (info && info->protocol != proto)
-    info = info->next;
-
-  if (!info)
-    result = 0;
-  else
-    result = _gpgme_compare_versions (info->version,
-                                     info->req_version);
-
-  UNLOCK (engine_info_lock);
-  return result ? 0 : gpg_error (GPG_ERR_INV_ENGINE);
-}
-
-
-/* Release the engine info INFO.  */
-void
-_gpgme_engine_info_release (gpgme_engine_info_t info)
-{
-  while (info)
-    {
-      gpgme_engine_info_t next_info = info->next;
-
-      assert (info->file_name);
-      free (info->file_name);
-      if (info->home_dir)
-       free (info->home_dir);
-      if (info->version)
-       free (info->version);
-      free (info);
-      info = next_info;
-    }
-}
-
-
-/* Get the information about the configured and installed engines.  A
-   pointer to the first engine in the statically allocated linked list
-   is returned in *INFO.  If an error occurs, it is returned.  The
-   returned data is valid until the next gpgme_set_engine_info.  */
-gpgme_error_t
-gpgme_get_engine_info (gpgme_engine_info_t *info)
-{
-  LOCK (engine_info_lock);
-  if (!engine_info)
-    {
-      gpgme_engine_info_t *lastp = &engine_info;
-      gpgme_protocol_t proto_list[] = { GPGME_PROTOCOL_OpenPGP,
-                                       GPGME_PROTOCOL_CMS };
-      unsigned int proto;
-
-      for (proto = 0; proto < DIM (proto_list); proto++)
-       {
-         const char *ofile_name = engine_get_file_name (proto_list[proto]);
-         char *file_name;
-
-         if (!ofile_name)
-           continue;
-
-         file_name = strdup (ofile_name);
-
-         *lastp = malloc (sizeof (*engine_info));
-         if (!*lastp || !file_name)
-           {
-             int saved_errno = errno;
-
-             _gpgme_engine_info_release (engine_info);
-             engine_info = NULL;
-
-             if (file_name)
-               free (file_name);
-
-             UNLOCK (engine_info_lock);
-             return gpg_error_from_errno (saved_errno);
-           }
-
-         (*lastp)->protocol = proto_list[proto];
-         (*lastp)->file_name = file_name;
-         (*lastp)->home_dir = NULL;
-         (*lastp)->version = engine_get_version (proto_list[proto], NULL);
-         (*lastp)->req_version = engine_get_req_version (proto_list[proto]);
-         (*lastp)->next = NULL;
-         lastp = &(*lastp)->next;
-       }
-    }
-
-  *info = engine_info;
-  UNLOCK (engine_info_lock);
-  return 0;
-}
-
-
-/* Get a deep copy of the engine info and return it in INFO.  */
-gpgme_error_t
-_gpgme_engine_info_copy (gpgme_engine_info_t *r_info)
-{
-  gpgme_error_t err = 0;
-  gpgme_engine_info_t info;
-  gpgme_engine_info_t new_info;
-  gpgme_engine_info_t *lastp;
-
-  LOCK (engine_info_lock);
-  info = engine_info;
-  if (!info)
-    {
-      /* Make sure it is initialized.  */
-      UNLOCK (engine_info_lock);
-      err = gpgme_get_engine_info (&info);
-      if (err)
-       return err;
-
-      LOCK (engine_info_lock);
-    }
-
-  new_info = NULL;
-  lastp = &new_info;
-
-  while (info)
-    {
-      char *file_name;
-      char *home_dir;
-      char *version;
-
-      assert (info->file_name);
-      file_name = strdup (info->file_name);
-
-      if (info->home_dir)
-       {
-         home_dir = strdup (info->home_dir);
-         if (!home_dir)
-           err = gpg_error_from_errno (errno);
-       }
-      else
-       home_dir = NULL;
-
-      if (info->version)
-       {
-         version = strdup (info->version);
-         if (!version)
-           err = gpg_error_from_errno (errno);
-       }
-      else
-       version = NULL;
-
-      *lastp = malloc (sizeof (*engine_info));
-      if (!*lastp || !file_name || err)
-       {
-         int saved_errno = errno;
-
-         _gpgme_engine_info_release (new_info);
-
-         if (file_name)
-           free (file_name);
-         if (home_dir)
-           free (home_dir);
-         if (version)
-           free (version);
-
-         UNLOCK (engine_info_lock);
-         return gpg_error_from_errno (saved_errno);
-       }
-
-      (*lastp)->protocol = info->protocol;
-      (*lastp)->file_name = file_name;
-      (*lastp)->home_dir = home_dir;
-      (*lastp)->version = version;
-      (*lastp)->req_version = info->req_version;
-      (*lastp)->next = NULL;
-      lastp = &(*lastp)->next;
-
-      info = info->next;
-    }
-
-  *r_info = new_info;
-  UNLOCK (engine_info_lock);
-  return 0;
-}
-
-
-/* Set the engine info for the info list INFO, protocol PROTO, to the
-   file name FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t
-_gpgme_set_engine_info (gpgme_engine_info_t info, gpgme_protocol_t proto,
-                       const char *file_name, const char *home_dir)
-{
-  char *new_file_name;
-  char *new_home_dir;
-
-  /* FIXME: Use some PROTO_MAX definition.  */
-  if (proto > DIM (engine_ops))
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  while (info && info->protocol != proto)
-    info = info->next;
-
-  if (!info)
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  /* Prepare new members.  */
-  if (file_name)
-    new_file_name = strdup (file_name);
-  else
-    {
-      const char *ofile_name = engine_get_file_name (proto);
-      assert (ofile_name);
-      new_file_name = strdup (ofile_name);
-    }
-  if (!new_file_name)
-    return gpg_error_from_errno (errno);
-
-  if (home_dir)
-    {
-      new_home_dir = strdup (home_dir);
-      if (!new_home_dir)
-       {
-         free (new_file_name);
-         return gpg_error_from_errno (errno);
-       }
-    }
-  else
-    new_home_dir = NULL;
-
-  /* Remove the old members.  */
-  assert (info->file_name);
-  free (info->file_name);
-  if (info->home_dir)
-    free (info->home_dir);
-  if (info->version)
-    free (info->version);
-
-  /* Install the new members.  */
-  info->file_name = new_file_name;
-  info->home_dir = new_home_dir;
-  info->version = engine_get_version (proto, new_file_name);
-
-  return 0;
-}
-
-
-/* Set the default engine info for the protocol PROTO to the file name
-   FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t
-gpgme_set_engine_info (gpgme_protocol_t proto,
-                      const char *file_name, const char *home_dir)
-{
-  gpgme_error_t err;
-  gpgme_engine_info_t info;
-
-  LOCK (engine_info_lock);
-  info = engine_info;
-  if (!info)
-    {
-      /* Make sure it is initialized.  */
-      UNLOCK (engine_info_lock);
-      err = gpgme_get_engine_info (&info);
-      if (err)
-       return err;
-
-      LOCK (engine_info_lock);
-    }
-
-  err = _gpgme_set_engine_info (info, proto, file_name, home_dir);
-  UNLOCK (engine_info_lock);
-  return err;
-}
-
-\f
-gpgme_error_t
-_gpgme_engine_new (gpgme_engine_info_t info, engine_t *r_engine,
-                  const char *lc_ctype, const char *lc_messages)
-{
-  engine_t engine;
-
-  if (!info->file_name || !info->version)
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  engine = calloc (1, sizeof *engine);
-  if (!engine)
-    return gpg_error_from_errno (errno);
-
-  engine->ops = engine_ops[info->protocol];
-  if (engine->ops->new)
-    {
-      gpgme_error_t err = (*engine->ops->new) (&engine->engine,
-                                              info->file_name, info->home_dir,
-                                              lc_ctype, lc_messages);
-      if (err)
-       {
-         free (engine);
-         return err;
-       }
-    }
-  else
-    engine->engine = NULL;
-
-  *r_engine = engine;
-  return 0;
-}
-
-
-void
-_gpgme_engine_release (engine_t engine)
-{
-  if (!engine)
-    return;
-
-  if (engine->ops->release)
-    (*engine->ops->release) (engine->engine);
-  free (engine);
-}
-
-
-void
-_gpgme_engine_set_status_handler (engine_t engine,
-                                 engine_status_handler_t fnc, void *fnc_value)
-{
-  if (!engine)
-    return;
-
-  if (engine->ops->set_status_handler)
-    (*engine->ops->set_status_handler) (engine->engine, fnc, fnc_value);
-}
-
-
-gpgme_error_t
-_gpgme_engine_set_command_handler (engine_t engine,
-                                  engine_command_handler_t fnc,
-                                  void *fnc_value,
-                                  gpgme_data_t linked_data)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->set_command_handler)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->set_command_handler) (engine->engine,
-                                             fnc, fnc_value, linked_data);
-}
-
-gpgme_error_t
-_gpgme_engine_set_colon_line_handler (engine_t engine,
-                                     engine_colon_line_handler_t fnc,
-                                     void *fnc_value)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->set_colon_line_handler)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->set_colon_line_handler) (engine->engine,
-                                                fnc, fnc_value);
-}
-
-gpgme_error_t
-_gpgme_engine_op_decrypt (engine_t engine, gpgme_data_t ciph,
-                         gpgme_data_t plain)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->decrypt)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->decrypt) (engine->engine, ciph, plain);
-}
-
-gpgme_error_t
-_gpgme_engine_op_delete (engine_t engine, gpgme_key_t key,
-                        int allow_secret)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->delete)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->delete) (engine->engine, key, allow_secret);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_edit (engine_t engine, int type, gpgme_key_t key,
-                      gpgme_data_t out, gpgme_ctx_t ctx /* FIXME */)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->edit)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->edit) (engine->engine, type, key, out, ctx);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_encrypt (engine_t engine, gpgme_key_t recp[],
-                         gpgme_encrypt_flags_t flags,
-                         gpgme_data_t plain, gpgme_data_t ciph, int use_armor)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->encrypt)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->encrypt) (engine->engine, recp, flags, plain, ciph,
-                                 use_armor);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_encrypt_sign (engine_t engine, gpgme_key_t recp[],
-                              gpgme_encrypt_flags_t flags,
-                              gpgme_data_t plain, gpgme_data_t ciph,
-                              int use_armor, gpgme_ctx_t ctx /* FIXME */)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->encrypt_sign)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->encrypt_sign) (engine->engine, recp, flags,
-                                      plain, ciph, use_armor, ctx);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_export (engine_t engine, const char *pattern,
-                        unsigned int reserved, gpgme_data_t keydata,
-                        int use_armor)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->export)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->export) (engine->engine, pattern, reserved,
-                                keydata, use_armor);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_export_ext (engine_t engine, const char *pattern[],
-                            unsigned int reserved, gpgme_data_t keydata,
-                            int use_armor)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->export_ext)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->export_ext) (engine->engine, pattern, reserved,
-                                    keydata, use_armor);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_genkey (engine_t engine, gpgme_data_t help_data,
-                        int use_armor, gpgme_data_t pubkey,
-                        gpgme_data_t seckey)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->genkey)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->genkey) (engine->engine, help_data, use_armor,
-                                pubkey, seckey);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_import (engine_t engine, gpgme_data_t keydata)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->import)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->import) (engine->engine, keydata);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_keylist (engine_t engine, const char *pattern,
-                         int secret_only, gpgme_keylist_mode_t mode)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->keylist)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->keylist) (engine->engine, pattern, secret_only, mode);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_keylist_ext (engine_t engine, const char *pattern[],
-                             int secret_only, int reserved,
-                             gpgme_keylist_mode_t mode)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->keylist_ext)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->keylist_ext) (engine->engine, pattern, secret_only,
-                                     reserved, mode);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_sign (engine_t engine, gpgme_data_t in, gpgme_data_t out,
-                      gpgme_sig_mode_t mode, int use_armor,
-                      int use_textmode, int include_certs,
-                      gpgme_ctx_t ctx /* FIXME */)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->sign)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->sign) (engine->engine, in, out, mode, use_armor,
-                              use_textmode, include_certs, ctx);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_trustlist (engine_t engine, const char *pattern)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->trustlist)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->trustlist) (engine->engine, pattern);
-}
-
-
-gpgme_error_t
-_gpgme_engine_op_verify (engine_t engine, gpgme_data_t sig,
-                        gpgme_data_t signed_text, gpgme_data_t plaintext)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->verify)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->verify) (engine->engine, sig, signed_text, plaintext);
-}
-
-
-void
-_gpgme_engine_set_io_cbs (engine_t engine, gpgme_io_cbs_t io_cbs)
-{
-  if (!engine)
-    return;
-
-  (*engine->ops->set_io_cbs) (engine->engine, io_cbs);
-}
-
-
-void
-_gpgme_engine_io_event (engine_t engine,
-                       gpgme_event_io_t type, void *type_data)
-{
-  if (!engine)
-    return;
-
-  (*engine->ops->io_event) (engine->engine, type, type_data);
-}
-
-
-gpgme_error_t
-_gpgme_engine_cancel (engine_t engine)
-{
-  if (!engine)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!engine->ops->cancel)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  return (*engine->ops->cancel) (engine->engine);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/engine.h b/tags/gpgme-1-1-1/gpgme/engine.h
deleted file mode 100644 (file)
index be9c9b7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* engine.h - GPGME engine interface.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef ENGINE_H
-#define ENGINE_H
-
-#include "gpgme.h"
-struct engine;
-typedef struct engine *engine_t;
-
-typedef gpgme_error_t (*engine_status_handler_t) (void *priv,
-                                                 gpgme_status_code_t code,
-                                                 char *args);
-typedef gpgme_error_t (*engine_colon_line_handler_t) (void *priv, char *line);
-typedef gpgme_error_t (*engine_command_handler_t) (void *priv,
-                                                  gpgme_status_code_t code,
-                                                  const char *keyword,
-                                                  int fd, int *processed);
-
-/* Get a deep copy of the engine info and return it in INFO.  */
-gpgme_error_t _gpgme_engine_info_copy (gpgme_engine_info_t *r_info);
-
-/* Release the engine info INFO.  */
-void _gpgme_engine_info_release (gpgme_engine_info_t info);
-
-/* Set the engine info for the info list INFO, protocol PROTO, to the
-   file name FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t _gpgme_set_engine_info (gpgme_engine_info_t info,
-                                     gpgme_protocol_t praoto,
-                                     const char *file_name,
-                                     const char *home_dir);
-
-
-gpgme_error_t _gpgme_engine_new (gpgme_engine_info_t info,
-                                engine_t *r_engine,
-                                const char *lc_ctype,
-                                const char *lc_messages);
-void _gpgme_engine_release (engine_t engine);
-void _gpgme_engine_set_status_handler (engine_t engine,
-                                      engine_status_handler_t fnc,
-                                      void *fnc_value);
-gpgme_error_t _gpgme_engine_set_command_handler (engine_t engine,
-                                                engine_command_handler_t fnc,
-                                                void *fnc_value,
-                                                gpgme_data_t data);
-gpgme_error_t
-_gpgme_engine_set_colon_line_handler (engine_t engine,
-                                     engine_colon_line_handler_t fnc,
-                                     void *fnc_value);
-gpgme_error_t _gpgme_engine_op_decrypt (engine_t engine,
-                                       gpgme_data_t ciph,
-                                       gpgme_data_t plain);
-gpgme_error_t _gpgme_engine_op_delete (engine_t engine, gpgme_key_t key,
-                                      int allow_secret);
-gpgme_error_t _gpgme_engine_op_edit (engine_t engine, int type,
-                                    gpgme_key_t key, gpgme_data_t out,
-                                    gpgme_ctx_t ctx /* FIXME */);
-gpgme_error_t _gpgme_engine_op_encrypt (engine_t engine,
-                                       gpgme_key_t recp[],
-                                       gpgme_encrypt_flags_t flags,
-                                       gpgme_data_t plain, gpgme_data_t ciph,
-                                       int use_armor);
-gpgme_error_t _gpgme_engine_op_encrypt_sign (engine_t engine,
-                                            gpgme_key_t recp[],
-                                            gpgme_encrypt_flags_t flags,
-                                            gpgme_data_t plain,
-                                            gpgme_data_t ciph,
-                                            int use_armor,
-                                            gpgme_ctx_t ctx /* FIXME */);
-gpgme_error_t _gpgme_engine_op_export (engine_t engine, const char *pattern,
-                                      unsigned int reserved,
-                                      gpgme_data_t keydata, int use_armor);
-gpgme_error_t _gpgme_engine_op_export_ext (engine_t engine,
-                                          const char *pattern[],
-                                          unsigned int reserved,
-                                          gpgme_data_t keydata,
-                                          int use_armor);
-gpgme_error_t _gpgme_engine_op_genkey (engine_t engine,
-                                      gpgme_data_t help_data,
-                                      int use_armor, gpgme_data_t pubkey,
-                                      gpgme_data_t seckey);
-gpgme_error_t _gpgme_engine_op_import (engine_t engine,
-                                      gpgme_data_t keydata);
-gpgme_error_t _gpgme_engine_op_keylist (engine_t engine,
-                                       const char *pattern,
-                                       int secret_only,
-                                       gpgme_keylist_mode_t mode);
-gpgme_error_t _gpgme_engine_op_keylist_ext (engine_t engine,
-                                           const char *pattern[],
-                                           int secret_only,
-                                           int reserved,
-                                           gpgme_keylist_mode_t mode);
-gpgme_error_t _gpgme_engine_op_sign (engine_t engine, gpgme_data_t in,
-                                    gpgme_data_t out, gpgme_sig_mode_t mode,
-                                    int use_armor, int use_textmode,
-                                    int include_certs,
-                                    gpgme_ctx_t ctx /* FIXME */);
-gpgme_error_t _gpgme_engine_op_trustlist (engine_t engine,
-                                         const char *pattern);
-gpgme_error_t _gpgme_engine_op_verify (engine_t engine, gpgme_data_t sig,
-                                      gpgme_data_t signed_text,
-                                      gpgme_data_t plaintext);
-
-void _gpgme_engine_set_io_cbs (engine_t engine,
-                              gpgme_io_cbs_t io_cbs);
-void _gpgme_engine_io_event (engine_t engine,
-                            gpgme_event_io_t type, void *type_data);
-
-gpgme_error_t _gpgme_engine_cancel (engine_t engine);
-
-#endif /* ENGINE_H */
diff --git a/tags/gpgme-1-1-1/gpgme/error.c b/tags/gpgme-1-1-1/gpgme/error.c
deleted file mode 100644 (file)
index 6f37ef7..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* error.c - Error handling for GPGME.
-   Copyright (C) 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gpgme.h>
-
-/* Return a pointer to a string containing a description of the error
-   code in the error value ERR.  */
-const char *
-gpgme_strerror (gpgme_error_t err)
-{
-  return gpg_strerror (err);
-}
-
-
-/* Return the error string for ERR in the user-supplied buffer BUF of
-   size BUFLEN.  This function is, in contrast to gpg_strerror,
-   thread-safe if a thread-safe strerror_r() function is provided by
-   the system.  If the function succeeds, 0 is returned and BUF
-   contains the string describing the error.  If the buffer was not
-   large enough, ERANGE is returned and BUF contains as much of the
-   beginning of the error string as fits into the buffer.  */
-int
-gpgme_strerror_r (gpg_error_t err, char *buf, size_t buflen)
-{
-  return gpg_strerror_r (err, buf, buflen);
-}
-
-
-/* Return a pointer to a string containing a description of the error
-   source in the error value ERR.  */
-const char *
-gpgme_strsource (gpgme_error_t err)
-{
-  return gpg_strsource (err);
-}
-
-  
-/* Retrieve the error code for the system error ERR.  This returns
-   GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report
-   this).  */
-gpgme_err_code_t
-gpgme_err_code_from_errno (int err)
-{
-  return gpg_err_code_from_errno (err);
-}
-
-
-/* Retrieve the system error for the error code CODE.  This returns 0
-   if CODE is not a system error code.  */
-int
-gpgme_err_code_to_errno (gpgme_err_code_t code)
-{
-  return gpg_err_code_from_errno (code);
-}
-
-  
-/* Return an error value with the error source SOURCE and the system
-   error ERR.  */
-gpgme_error_t
-gpgme_err_make_from_errno (gpg_err_source_t source, int err)
-{
-  return gpg_err_make_from_errno (source, err);
-}
-
-
-/* Return an error value with the system error ERR.  */
-gpgme_err_code_t
-gpgme_error_from_errno (int err)
-{
-  return gpgme_error (gpg_err_code_from_errno (err));
-}
diff --git a/tags/gpgme-1-1-1/gpgme/export.c b/tags/gpgme-1-1-1/gpgme/export.c
deleted file mode 100644 (file)
index 079a7e0..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* export.c - Export a key.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-static gpgme_error_t
-export_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  return 0;
-}
-
-
-static gpgme_error_t
-export_start (gpgme_ctx_t ctx, int synchronous, const char *pattern,
-             unsigned int reserved, gpgme_data_t keydata)
-{
-  gpgme_error_t err;
-
-  if (!keydata)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, export_status_handler, ctx);
-
-  return _gpgme_engine_op_export (ctx->engine, pattern, reserved, keydata,
-                                 ctx->use_armor);
-}
-
-
-/* Export the keys listed in RECP into KEYDATA.  */
-gpgme_error_t
-gpgme_op_export_start (gpgme_ctx_t ctx, const char *pattern,
-                      unsigned int reserved, gpgme_data_t keydata)
-{
-  return export_start (ctx, 0, pattern, reserved, keydata);
-}
-
-
-/* Export the keys listed in RECP into KEYDATA.  */
-gpgme_error_t
-gpgme_op_export (gpgme_ctx_t ctx, const char *pattern, unsigned int reserved,
-                gpgme_data_t keydata)
-{
-  gpgme_error_t err = export_start (ctx, 1, pattern, reserved, keydata);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
-
-\f
-static gpgme_error_t
-export_ext_start (gpgme_ctx_t ctx, int synchronous, const char *pattern[],
-                 unsigned int reserved, gpgme_data_t keydata)
-{
-  gpgme_error_t err;
-
-  if (!keydata)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, export_status_handler, ctx);
-
-  return _gpgme_engine_op_export_ext (ctx->engine, pattern, reserved, keydata,
-                                     ctx->use_armor);
-}
-
-
-/* Export the keys listed in RECP into KEYDATA.  */
-gpgme_error_t
-gpgme_op_export_ext_start (gpgme_ctx_t ctx, const char *pattern[],
-                          unsigned int reserved, gpgme_data_t keydata)
-{
-  return export_ext_start (ctx, 0, pattern, reserved, keydata);
-}
-
-
-/* Export the keys listed in RECP into KEYDATA.  */
-gpgme_error_t
-gpgme_op_export_ext (gpgme_ctx_t ctx, const char *pattern[],
-                    unsigned int reserved, gpgme_data_t keydata)
-{
-  gpgme_error_t err = export_ext_start (ctx, 1, pattern, reserved, keydata);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/funopen.c b/tags/gpgme-1-1-1/gpgme/funopen.c
deleted file mode 100644 (file)
index 55b3223..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* funopen.c - Replacement for funopen.
-   Copyright (C) 2004 g10 Code GmbH
-
-   This file is part of GPGME
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_FOPENCOOKIE
-FILE *
-funopen(const void *cookie, cookie_read_function_t *readfn,
-       cookie_write_function_t *writefn,
-       cookie_seek_function_t *seekfn,
-       cookie_close_function_t *closefn)
-{
-  cookie_io_functions_t io = { read: readfn, write: writefn, 
-                              seek: seekfn, close: closefn };
-
-  return fopencookie ((void *) cookie,
-                     readfn ? (writefn ? "rw" : "r")
-                     : (writefn ? "w" : ""), io);
-}
-#else
-#error No known way to implement funopen.
-#endif
diff --git a/tags/gpgme-1-1-1/gpgme/genkey.c b/tags/gpgme-1-1-1/gpgme/genkey.c
deleted file mode 100644 (file)
index 3489c89..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/* genkey.c - Key generation.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_genkey_result result;
-
-  /* The key parameters passed to the crypto engine.  */
-  gpgme_data_t key_parameter;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  
-  if (opd->result.fpr)
-    free (opd->result.fpr);
-  if (opd->key_parameter)
-    gpgme_data_release (opd->key_parameter);
-}
-
-
-gpgme_genkey_result_t
-gpgme_op_genkey_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_GENKEY, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-static gpgme_error_t
-genkey_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  /* Pipe the status code through the progress status handler.  */
-  err = _gpgme_progress_status_handler (ctx, code, args);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_GENKEY, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_KEY_CREATED:
-      if (args && *args)
-       {
-         if (*args == 'B' || *args == 'P')
-           opd->result.primary = 1;
-         if (*args == 'B' || *args == 'S')
-           opd->result.sub = 1;
-         if (args[1] == ' ')
-           {
-             if (opd->result.fpr)
-               free (opd->result.fpr);
-             opd->result.fpr = strdup (&args[2]);
-             if (!opd->result.fpr)
-               return gpg_error_from_errno (errno);
-           }
-       }
-      break;
-
-    case GPGME_STATUS_EOF:
-      /* FIXME: Should return some more useful error value.  */
-      if (!opd->result.primary && !opd->result.sub)
-       return gpg_error (GPG_ERR_GENERAL);
-      break;
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-get_key_parameter (const char *parms, gpgme_data_t *key_parameter)
-{
-  const char *content;
-  const char *attrib;
-  const char *endtag;
-
-  /* Extract the key parameter from the XML structure.  */
-  parms = strstr (parms, "<GnupgKeyParms ");
-  if (!parms)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  content = strchr (parms, '>');
-  if (!content)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  content++;
-
-  attrib = strstr (parms, "format=\"internal\"");
-  if (!attrib || attrib >= content)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  endtag = strstr (content, "</GnupgKeyParms>");
-  /* FIXME: Check that there are no control statements inside.  */
-  while (*content == '\n')
-    content++;
-
-  return gpgme_data_new_from_mem (key_parameter, content,
-                                 endtag - content, 1);
-}
-
-
-static gpgme_error_t
-genkey_start (gpgme_ctx_t ctx, int synchronous, const char *parms,
-             gpgme_data_t pubkey, gpgme_data_t seckey)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-  
-  err = _gpgme_op_data_lookup (ctx, OPDATA_GENKEY, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  err = get_key_parameter (parms, &opd->key_parameter);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, genkey_status_handler, ctx);
-
-  return _gpgme_engine_op_genkey (ctx->engine, opd->key_parameter,
-                                 ctx->use_armor, pubkey, seckey);
-}
-
-
-/* Generate a new keypair and add it to the keyring.  PUBKEY and
-   SECKEY should be null for now.  PARMS specifies what keys should be
-   generated.  */
-gpgme_error_t
-gpgme_op_genkey_start (gpgme_ctx_t ctx, const char *parms,
-                      gpgme_data_t pubkey, gpgme_data_t seckey)
-{
-  return genkey_start (ctx, 0, parms, pubkey, seckey);
-}
-
-
-/* Generate a new keypair and add it to the keyring.  PUBKEY and
-   SECKEY should be null for now.  PARMS specifies what keys should be
-   generated.  */
-gpgme_error_t
-gpgme_op_genkey (gpgme_ctx_t ctx, const char *parms, gpgme_data_t pubkey,
-                gpgme_data_t seckey)
-{
-  gpgme_error_t err;
-
-  err = genkey_start (ctx, 1, parms, pubkey, seckey);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/get-env.c b/tags/gpgme-1-1-1/gpgme/get-env.c
deleted file mode 100644 (file)
index bea8949..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* get_env.c - A getenv() replacement.
-   Copyright (C) 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include "util.h"
-
-\f
-#if defined(HAVE_THREAD_SAFE_GETENV) || !defined (HAVE_GETENV_R)
-/* We prefer using getenv() if it is thread-safe.  */
-
-/* Retrieve the environment variable NAME and return a copy of it in a
-   malloc()'ed buffer in *VALUE.  If the environment variable is not
-   set, return NULL in *VALUE.  */
-gpgme_error_t
-_gpgme_getenv (const char *name, char **value)
-{
-  char *env_value;
-
-  env_value = getenv (name);
-  if (!env_value)
-    *value = NULL;
-  else
-    {
-      *value = strdup (env_value);
-      if (!*value)
-       return gpg_error_from_errno (errno);
-    }
-  return 0;
-}
-
-#else
-
-/* FIXME: Implement this when we have the specification for it.  */
-#error Use of getenv_r not implemented.
-
-#endif
diff --git a/tags/gpgme-1-1-1/gpgme/gpgme-config.in b/tags/gpgme-1-1-1/gpgme/gpgme-config.in
deleted file mode 100644 (file)
index 5310b53..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file 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.
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-includedir=@includedir@
-libdir=@libdir@
-
-# Configure libgpg-error.
-gpg_error_cflags="@GPG_ERROR_CFLAGS@"
-gpg_error_libs="@GPG_ERROR_LIBS@"
-
-# Configure thread packages.
-thread_modules=""
-
-@HAVE_PTH_TRUE@thread_modules="$thread_modules pth"
-libs_pth="@PTH_LDFLAGS@ @PTH_LIBS@"
-cflags_pth="@PTH_CFLAGS@"
-
-# Configure glib.
-libs_glib="@GLIB_LIBS@"
-cflags_glib="@GLIB_CFLAGS@"
-with_glib=
-
-output=""
-
-usage()
-{
-    cat <<EOF
-Usage: gpgme-config [OPTIONS]
-Options:
-       [--thread={${thread_modules}}]
-       [--prefix]
-       [--exec-prefix]
-       [--version]
-        [--api-version]
-       [--libs]
-       [--cflags]
-EOF
-    exit $1
-}
-
-if test $# -eq 0; then
-    usage 1 1>&2
-fi
-
-while test $# -gt 0; do
-    case "$1" in
-       -*=*)
-           optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
-           ;;
-       *)
-           optarg=
-           ;;
-    esac
-
-    case $1 in
-        --prefix=*)
-            # For compatibility reasons with old M4 macros, we ignore
-            # setting of prefix.
-            ;;
-        --prefix)
-           output="$output $prefix"
-           ;;
-        --exec-prefix=*)
-            ;;
-        --exec-prefix)
-           output="$output $exec_prefix"
-           ;;
-       --glib)
-           with_glib=yes
-           ;;
-        --version)
-            echo "@VERSION@"
-           exit 0
-           ;;
-        --api-version)
-           echo "@GPGME_CONFIG_API_VERSION@"
-           exit 0
-           ;;
-        --cflags)
-           if test "x$includedir" != "x/usr/include" -a "x$includedir" != "x/include"; then
-               output="$output -I$includedir"
-           fi
-           case "$thread_module" in
-               pthread)
-                   output="$output $cflags_pthread"
-                   ;;
-               pth)
-                   output="$output $cflags_pth"
-                   ;;
-           esac
-           output="$output $gpg_error_cflags"
-           if test "x$with_glib" = "xyes"; then
-               output="$output $glib_cflags"
-           fi
-           ;;
-       --libs)
-           if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/lib"; then
-               output="$output -L$libdir"
-           fi
-           case "$thread_module" in
-               pthread)
-                   output="$output -lgpgme-pthread $libs_pthread"
-                   ;;
-               pth)
-                   output="$output -lgpgme-pth $libs_pth"
-                   ;;
-               *)
-                   if test "x$with_glib" = "xyes"; then
-                       output="$output -lgpgme-glib"
-                   else
-                       output="$output -lgpgme"
-                   fi
-                   ;;
-           esac
-           output="$output $gpg_error_libs"
-           if test "x$with_glib" = "xyes"; then
-               output="$output $glib_cflags"
-           fi
-           ;;
-       --thread=*)
-            for thread_mod in $thread_modules; do
-           if test "$thread_mod" = "$optarg"; then
-               thread_module="$optarg";
-           fi
-           done
-           if test "x$thread_module" = "x"; then
-               usage 1 1>&2
-           fi
-           ;;
-       *)
-            usage 1 1>&2
-           ;;
-    esac
-    shift
-done
-
-echo $output
diff --git a/tags/gpgme-1-1-1/gpgme/gpgme.c b/tags/gpgme-1-1-1/gpgme/gpgme.c
deleted file mode 100644 (file)
index e4a147a..0000000
+++ /dev/null
@@ -1,569 +0,0 @@
-/* gpgme.c - GnuPG Made Easy.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <locale.h>
-
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-#include "wait.h"
-
-\f
-/* The default locale.  */
-DEFINE_STATIC_LOCK (def_lc_lock);
-static char *def_lc_ctype;
-static char *def_lc_messages;
-
-\f
-/* Create a new context as an environment for GPGME crypto
-   operations.  */
-gpgme_error_t
-gpgme_new (gpgme_ctx_t *r_ctx)
-{
-  gpgme_ctx_t ctx;
-
-  ctx = calloc (1, sizeof *ctx);
-  if (!ctx)
-    return gpg_error_from_errno (errno);
-
-  _gpgme_engine_info_copy (&ctx->engine_info);
-  if (!ctx->engine_info)
-    {
-      free (ctx);
-      return gpg_error_from_errno (errno);
-    }
-
-  ctx->keylist_mode = GPGME_KEYLIST_MODE_LOCAL;
-  ctx->include_certs = GPGME_INCLUDE_CERTS_DEFAULT;
-  ctx->protocol = GPGME_PROTOCOL_OpenPGP;
-  _gpgme_fd_table_init (&ctx->fdt);
-
-  LOCK (def_lc_lock);
-  if (def_lc_ctype)
-    {
-      ctx->lc_ctype = strdup (def_lc_ctype);
-      if (!ctx->lc_ctype)
-       {
-         UNLOCK (def_lc_lock);
-         _gpgme_engine_info_release (ctx->engine_info);
-         free (ctx);
-         return gpg_error_from_errno (errno);
-       }
-    }
-  else
-    def_lc_ctype = NULL;
-
-  if (def_lc_messages)
-    {
-      ctx->lc_messages = strdup (def_lc_messages);
-      if (!ctx->lc_messages)
-       {
-         UNLOCK (def_lc_lock);
-         if (ctx->lc_ctype)
-           free (ctx->lc_ctype);
-         _gpgme_engine_info_release (ctx->engine_info);
-         free (ctx);
-         return gpg_error_from_errno (errno);
-       }
-    }
-  else
-    def_lc_messages = NULL;
-  UNLOCK (def_lc_lock);
-
-  *r_ctx = ctx;
-  return 0;
-}
-
-
-/* Cancel a pending asynchronous operation.  */
-gpgme_error_t
-gpgme_cancel (gpgme_ctx_t ctx)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_engine_cancel (ctx->engine);
-  if (err)
-    return err;
-
-  err = gpg_error (GPG_ERR_CANCELED);
-  _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-
-  return 0;
-}
-
-/* Release all resources associated with the given context.  */
-void
-gpgme_release (gpgme_ctx_t ctx)
-{
-  _gpgme_engine_release (ctx->engine);
-  _gpgme_fd_table_deinit (&ctx->fdt);
-  _gpgme_release_result (ctx);
-  gpgme_signers_clear (ctx);
-  if (ctx->signers)
-    free (ctx->signers);
-  if (ctx->lc_ctype)
-    free (ctx->lc_ctype);
-  if (ctx->lc_messages)
-    free (ctx->lc_messages);
-  _gpgme_engine_info_release (ctx->engine_info);
-  free (ctx);
-}
-
-
-void
-_gpgme_release_result (gpgme_ctx_t ctx)
-{
-  struct ctx_op_data *data = ctx->op_data;
-
-  while (data)
-    {
-      struct ctx_op_data *next_data = data->next;
-      if (data->cleanup)
-       (*data->cleanup) (data->hook);
-      free (data);
-      data = next_data;
-    }
-  ctx->op_data = NULL;
-}
-
-
-gpgme_error_t
-gpgme_set_protocol (gpgme_ctx_t ctx, gpgme_protocol_t protocol)
-{
-  if (protocol != GPGME_PROTOCOL_OpenPGP && protocol != GPGME_PROTOCOL_CMS)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  ctx->protocol = protocol;
-  return 0;
-}
-
-
-gpgme_protocol_t
-gpgme_get_protocol (gpgme_ctx_t ctx)
-{
-  return ctx->protocol;
-}
-
-
-const char *
-gpgme_get_protocol_name (gpgme_protocol_t protocol)
-{
-  switch (protocol)
-    {
-    case GPGME_PROTOCOL_OpenPGP:
-      return "OpenPGP";
-
-    case GPGME_PROTOCOL_CMS:
-      return "CMS";
-
-    default:
-      return NULL;
-    }
-}
-
-/* Enable or disable the use of an ascii armor for all output.  */
-void
-gpgme_set_armor (gpgme_ctx_t ctx, int yes)
-{
-  ctx->use_armor = yes;
-}
-
-
-/* Return the state of the armor flag.  */
-int
-gpgme_get_armor (gpgme_ctx_t ctx)
-{
-  return ctx->use_armor;
-}
-
-
-/* Enable or disable the use of the special textmode.  Textmode is for
-  example used for the RFC2015 signatures; note that the updated RFC
-  3156 mandates that the MUA does some preparations so that textmode
-  is not needed anymore.  */
-void
-gpgme_set_textmode (gpgme_ctx_t ctx, int yes)
-{
-  ctx->use_textmode = yes;
-}
-
-/* Return the state of the textmode flag.  */
-int
-gpgme_get_textmode (gpgme_ctx_t ctx)
-{
-  return ctx->use_textmode;
-}
-
-
-/* Set the number of certifications to include in an S/MIME message.
-   The default is GPGME_INCLUDE_CERTS_DEFAULT.  -1 means all certs,
-   and -2 means all certs except the root cert.  */
-void
-gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs)
-{
-  if (nr_of_certs == GPGME_INCLUDE_CERTS_DEFAULT)
-    ctx->include_certs = GPGME_INCLUDE_CERTS_DEFAULT;
-  else if (nr_of_certs < -2)
-    ctx->include_certs = -2;
-  else
-    ctx->include_certs = nr_of_certs;
-}
-
-
-/* Get the number of certifications to include in an S/MIME
-   message.  */
-int
-gpgme_get_include_certs (gpgme_ctx_t ctx)
-{
-  return ctx->include_certs;
-}
-
-
-/* This function changes the default behaviour of the keylisting
-   functions.  MODE is a bitwise-OR of the GPGME_KEYLIST_* flags.  The
-   default mode is GPGME_KEYLIST_MODE_LOCAL.  */
-gpgme_error_t
-gpgme_set_keylist_mode (gpgme_ctx_t ctx, gpgme_keylist_mode_t mode)
-{
-  ctx->keylist_mode = mode;
-  return 0;
-}
-
-/* This function returns the default behaviour of the keylisting
-   functions.  */
-gpgme_keylist_mode_t
-gpgme_get_keylist_mode (gpgme_ctx_t ctx)
-{
-  return ctx->keylist_mode;
-}
-
-
-/* This function sets a callback function to be used to pass a
-   passphrase to gpg.  */
-void
-gpgme_set_passphrase_cb (gpgme_ctx_t ctx, gpgme_passphrase_cb_t cb,
-                        void *cb_value)
-{
-  ctx->passphrase_cb = cb;
-  ctx->passphrase_cb_value = cb_value;
-}
-
-
-/* This function returns the callback function to be used to pass a
-   passphrase to the crypto engine.  */
-void
-gpgme_get_passphrase_cb (gpgme_ctx_t ctx, gpgme_passphrase_cb_t *r_cb,
-                        void **r_cb_value)
-{
-  if (r_cb)
-    *r_cb = ctx->passphrase_cb;
-  if (r_cb_value)
-    *r_cb_value = ctx->passphrase_cb_value;
-}
-
-
-/* This function sets a callback function to be used as a progress
-   indicator.  */
-void
-gpgme_set_progress_cb (gpgme_ctx_t ctx, gpgme_progress_cb_t cb, void *cb_value)
-{
-  ctx->progress_cb = cb;
-  ctx->progress_cb_value = cb_value;
-}
-
-
-/* This function returns the callback function to be used as a
-   progress indicator.  */
-void
-gpgme_get_progress_cb (gpgme_ctx_t ctx, gpgme_progress_cb_t *r_cb,
-                      void **r_cb_value)
-{
-  if (r_cb)
-    *r_cb = ctx->progress_cb;
-  if (r_cb_value)
-    *r_cb_value = ctx->progress_cb_value;
-}
-
-
-/* Set the I/O callback functions for CTX to IO_CBS.  */
-void
-gpgme_set_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs)
-{
-  if (io_cbs)
-    ctx->io_cbs = *io_cbs;
-  else
-    {
-      ctx->io_cbs.add = NULL;
-      ctx->io_cbs.add_priv = NULL;
-      ctx->io_cbs.remove = NULL;
-      ctx->io_cbs.event = NULL;
-      ctx->io_cbs.event_priv = NULL;
-    }
-}
-
-
-/* This function returns the callback function for I/O.  */
-void
-gpgme_get_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs)
-{
-  *io_cbs = ctx->io_cbs;
-}
-
-\f
-/* This function sets the locale for the context CTX, or the default
-   locale if CTX is a null pointer.  */
-gpgme_error_t
-gpgme_set_locale (gpgme_ctx_t ctx, int category, const char *value)
-{
-#ifndef HAVE_W32_SYSTEM
-  int failed = 0;
-  char *new_lc_ctype;
-  char *new_lc_messages;
-
-#define PREPARE_ONE_LOCALE(lcat, ucat)                         \
-  if (!failed && value                                         \
-      && (category == LC_ALL || category == LC_ ## ucat))      \
-    {                                                          \
-      new_lc_ ## lcat = strdup (value);                                \
-      if (!new_lc_ ## lcat)                                    \
-        failed = 1;                                            \
-    }                                                          \
-  else                                                         \
-    new_lc_ ## lcat = NULL;
-
-  PREPARE_ONE_LOCALE (ctype, CTYPE);
-  PREPARE_ONE_LOCALE (messages, MESSAGES);
-
-  if (failed)
-    {
-      int saved_errno = errno;
-
-      if (new_lc_ctype)
-       free (new_lc_ctype);
-      if (new_lc_messages)
-       free (new_lc_messages);
-
-      return gpg_error_from_errno (saved_errno);
-    }
-
-#define SET_ONE_LOCALE(lcat, ucat)                     \
-  if (category == LC_ALL || category == LC_ ## ucat)   \
-    {                                                  \
-      if (ctx)                                         \
-       {                                               \
-         if (ctx->lc_ ## lcat)                         \
-           free (ctx->lc_ ## lcat);                    \
-         ctx->lc_ ## lcat = new_lc_ ## lcat;           \
-       }                                               \
-      else                                             \
-       {                                               \
-         if (def_lc_ ## lcat)                          \
-           free (def_lc_ ## lcat);                     \
-         def_lc_ ## lcat = new_lc_ ## lcat;            \
-       }                                               \
-    }
-
-  if (!ctx)
-    LOCK (def_lc_lock);
-  SET_ONE_LOCALE (ctype, CTYPE);
-  SET_ONE_LOCALE (messages, MESSAGES);
-  if (!ctx)
-    UNLOCK (def_lc_lock);
-
-#endif /*!HAVE_W32_SYSTEM*/
-  
-  return 0;
-}
-
-\f
-/* Get the information about the configured engines.  A pointer to the
-   first engine in the statically allocated linked list is returned.
-   The returned data is valid until the next gpgme_ctx_set_engine_info.  */
-gpgme_engine_info_t
-gpgme_ctx_get_engine_info (gpgme_ctx_t ctx)
-{
-  return ctx->engine_info;
-}
-
-
-/* Set the engine info for the context CTX, protocol PROTO, to the
-   file name FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t
-gpgme_ctx_set_engine_info (gpgme_ctx_t ctx, gpgme_protocol_t proto,
-                          const char *file_name, const char *home_dir)
-{
-  /* FIXME: Make sure to reset the context if we are running in daemon
-     mode.  */
-  return _gpgme_set_engine_info (ctx->engine_info, proto,
-                                file_name, home_dir);
-}
-
-\f
-/* Clear all notation data from the context.  */
-void
-gpgme_sig_notation_clear (gpgme_ctx_t ctx)
-{
-  gpgme_sig_notation_t notation;
-
-  if (!ctx)
-    return;
-
-  notation = ctx->sig_notations;
-  while (notation)
-    {
-      gpgme_sig_notation_t next_notation = notation->next;
-      _gpgme_sig_notation_free (notation);
-      notation = next_notation;
-    }
-}
-
-
-/* Add the human-readable notation data with name NAME and value VALUE
-   to the context CTX, using the flags FLAGS.  If NAME is NULL, then
-   VALUE should be a policy URL.  The flag
-   GPGME_SIG_NOTATION_HUMAN_READABLE is forced to be true for notation
-   data, and false for policy URLs.  */
-gpgme_error_t
-gpgme_sig_notation_add (gpgme_ctx_t ctx, const char *name,
-                       const char *value, gpgme_sig_notation_flags_t flags)
-{
-  gpgme_error_t err;
-  gpgme_sig_notation_t notation;
-  gpgme_sig_notation_t *lastp;
-
-  if (!ctx)
-     gpg_error (GPG_ERR_INV_VALUE);
-
-  if (name)
-    flags |= GPGME_SIG_NOTATION_HUMAN_READABLE;
-  else
-    flags &= ~GPGME_SIG_NOTATION_HUMAN_READABLE;
-
-  err = _gpgme_sig_notation_create (&notation, name, name ? strlen (name) : 0,
-                                   value, value ? strlen (value) : 0, flags);
-  if (err)
-    return err;
-
-  lastp = &ctx->sig_notations;
-  while (*lastp)
-    lastp = &(*lastp)->next;
-
-  *lastp = notation;
-  return 0;
-}
-
-
-/* Get the sig notations for this context.  */
-gpgme_sig_notation_t
-gpgme_sig_notation_get (gpgme_ctx_t ctx)
-{
-  if (!ctx)
-    return NULL;
-
-  return ctx->sig_notations;
-}
-  
-\f
-const char *
-gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo)
-{
-  switch (algo)
-    {
-    case GPGME_PK_RSA:
-      return "RSA";
-
-    case GPGME_PK_RSA_E:
-      return "RSA-E";
-
-    case GPGME_PK_RSA_S:
-      return "RSA-S";
-
-    case GPGME_PK_ELG_E:
-      return "ELG-E";
-
-    case GPGME_PK_DSA:
-      return "DSA";
-
-    case GPGME_PK_ELG:
-      return "ELG";
-
-    default:
-      return NULL;
-    }
-}
-
-
-const char *
-gpgme_hash_algo_name (gpgme_hash_algo_t algo)
-{
-  switch (algo)
-    {
-    case GPGME_MD_MD5:
-      return "MD5";
-
-    case GPGME_MD_SHA1:
-      return "SHA1";
-
-    case GPGME_MD_RMD160:
-      return "RIPEMD160";
-
-    case GPGME_MD_MD2:
-      return "MD2";
-
-    case GPGME_MD_TIGER:
-      return "TIGER192";
-
-    case GPGME_MD_HAVAL:
-      return "HAVAL";
-
-    case GPGME_MD_SHA256:
-      return "SHA256";
-
-    case GPGME_MD_SHA384:
-      return "SHA384";
-
-    case GPGME_MD_SHA512:
-      return "SHA512";
-
-    case GPGME_MD_MD4:
-      return "MD4";
-
-    case GPGME_MD_CRC32:
-      return "CRC32";
-
-    case GPGME_MD_CRC32_RFC1510:
-      return "CRC32RFC1510";
-
-    case GPGME_MD_CRC24_RFC2440:
-      return "CRC24RFC2440";
-
-    default:
-      return NULL;
-    }
-}
diff --git a/tags/gpgme-1-1-1/gpgme/gpgme.def b/tags/gpgme-1-1-1/gpgme/gpgme.def
deleted file mode 100644 (file)
index f4aa1b5..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-; gpgme.def - List of symbols to export.
-; Copyright (C) 2005 g10 Code GmbH
-;
-; This file is part of GPGME.
-;
-; GPGME is free software; you can redistribute it and/or modify
-; it under the terms of the GNU Lesser general Public License as
-; published by the Free Software Foundation; either version 2.1 of
-; the License, or (at your option) any later version.
-;
-; GPGME 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 Lesser General Public License for more details.
-;
-; You should have received a copy of the GNU Lesser 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
-
-
-EXPORTS
-    gpgme_check_version                   @1
-    gpgme_get_engine_info                 @2   
-    gpgme_engine_check_version            @3   
-                                                
-    gpgme_err_code_from_errno             @4   
-    gpgme_err_code_to_errno               @5   
-    gpgme_err_make_from_errno             @6   
-    gpgme_error_from_errno                @7   
-    gpgme_strerror                        @8   
-    gpgme_strerror_r                      @9   
-    gpgme_strsource                       @10  
-                                                
-    gpgme_data_get_encoding               @11  
-    gpgme_data_new                        @12  
-    gpgme_data_new_from_cbs               @13  
-    gpgme_data_new_from_fd                @14  
-    gpgme_data_new_from_file              @15  
-    gpgme_data_new_from_filepart          @16  
-    gpgme_data_new_from_mem               @17  
-    gpgme_data_new_from_stream            @18  
-    gpgme_data_read                       @19  
-    gpgme_data_release                    @20  
-    gpgme_data_release_and_get_mem        @21  
-    gpgme_data_seek                       @22  
-    gpgme_data_set_encoding               @23  
-    gpgme_data_write                      @24  
-                                                        
-    gpgme_get_protocol_name               @25  
-    gpgme_hash_algo_name                  @26  
-    gpgme_pubkey_algo_name                @27  
-                                                
-    gpgme_new                             @28  
-    gpgme_get_armor                       @29  
-    gpgme_get_include_certs               @30  
-    gpgme_get_io_cbs                      @31  
-    gpgme_get_keylist_mode                @32  
-    gpgme_get_passphrase_cb               @33  
-    gpgme_get_progress_cb                 @34  
-    gpgme_get_protocol                    @35  
-    gpgme_get_textmode                    @36  
-    gpgme_release                         @37  
-    gpgme_set_armor                       @38  
-    gpgme_set_include_certs               @39  
-    gpgme_set_io_cbs                      @40  
-    gpgme_set_keylist_mode                @41  
-    gpgme_set_locale                      @42  
-    gpgme_set_passphrase_cb               @43  
-    gpgme_set_progress_cb                 @44  
-    gpgme_set_protocol                    @45  
-    gpgme_set_textmode                    @46  
-    gpgme_signers_add                     @47  
-    gpgme_signers_clear                   @48  
-    gpgme_signers_enum                    @49  
-                                                
-    gpgme_key_ref                         @50  
-    gpgme_key_unref                       @51  
-    gpgme_key_release                     @52  
-                                                
-    gpgme_trust_item_ref                  @53  
-    gpgme_trust_item_unref                @54  
-                                                
-    gpgme_cancel                          @55  
-    gpgme_op_card_edit                    @56  
-    gpgme_op_card_edit_start              @57  
-    gpgme_op_decrypt                      @58  
-    gpgme_op_decrypt_result               @59  
-    gpgme_op_decrypt_start                @60  
-    gpgme_op_decrypt_verify               @61  
-    gpgme_op_decrypt_verify_start         @62  
-    gpgme_op_delete                       @63  
-    gpgme_op_delete_start                 @64  
-    gpgme_op_edit                         @65  
-    gpgme_op_edit_start                   @66  
-    gpgme_op_encrypt                      @67  
-    gpgme_op_encrypt_result               @68  
-    gpgme_op_encrypt_sign                 @69  
-    gpgme_op_encrypt_sign_start           @70  
-    gpgme_op_encrypt_start                @71  
-    gpgme_op_export                       @72  
-    gpgme_op_export_ext                   @73  
-    gpgme_op_export_ext_start             @74  
-    gpgme_op_export_start                 @75  
-    gpgme_op_genkey                       @76  
-    gpgme_op_genkey_result                @77  
-    gpgme_op_genkey_start                 @78  
-    gpgme_get_key                         @79  
-    gpgme_op_import                       @80  
-    gpgme_op_import_result                @81  
-    gpgme_op_import_start                 @82  
-    gpgme_op_keylist_end                  @83  
-    gpgme_op_keylist_ext_start            @84  
-    gpgme_op_keylist_next                 @85  
-    gpgme_op_keylist_result               @86  
-    gpgme_op_keylist_start                @87  
-    gpgme_op_sign                         @88  
-    gpgme_op_sign_result                  @89  
-    gpgme_op_sign_start                   @90  
-    gpgme_op_trustlist_end                @91  
-    gpgme_op_trustlist_next               @92  
-    gpgme_op_trustlist_start              @93  
-    gpgme_op_verify                       @94  
-    gpgme_op_verify_result                @95  
-    gpgme_op_verify_start                 @96  
-    gpgme_wait                            @97  
-                                                
-    gpgme_data_new_with_read_cb           @98  
-    gpgme_data_rewind                     @99  
-    gpgme_get_sig_status                  @100 
-    gpgme_get_sig_string_attr             @101 
-    gpgme_get_sig_ulong_attr              @102 
-    gpgme_get_sig_key                     @103 
-    gpgme_key_get_string_attr             @104 
-    gpgme_key_get_ulong_attr              @105 
-    gpgme_key_sig_get_string_attr         @106 
-    gpgme_key_sig_get_ulong_attr          @107 
-    gpgme_op_import_ext                   @108 
-    gpgme_trust_item_get_int_attr         @109 
-    gpgme_trust_item_get_string_attr      @110 
-    gpgme_trust_item_release              @111 
-                                                
-    gpgme_set_engine_info                 @112 
-                                                
-    gpgme_ctx_get_engine_info             @113 
-    gpgme_ctx_set_engine_info             @114
-
-    gpgme_data_set_file_name             @115
-    gpgme_data_get_file_name             @116
-
-    gpgme_sig_notation_clear             @117
-    gpgme_sig_notation_add               @118
-    gpgme_sig_notation_get               @119
-
-    gpgme_free                           @120
-
-    gpgme_get_giochannel                 @121
-; END
-
diff --git a/tags/gpgme-1-1-1/gpgme/gpgme.h b/tags/gpgme-1-1-1/gpgme/gpgme.h
deleted file mode 100644 (file)
index f0fee7c..0000000
+++ /dev/null
@@ -1,1706 +0,0 @@
-/* gpgme.h - Public interface to GnuPG Made Easy.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef GPGME_H
-#define GPGME_H
-
-#ifdef __GNUC__
-#define _GPGME_INLINE __inline__
-#elif __STDC_VERSION__ >= 199901L
-#define _GPGME_INLINE inline
-#else
-#define _GPGME_INLINE
-#endif
-
-/* Include stdio.h for the FILE type definition.  */
-#include <stdio.h>
-
-#ifdef _MSC_VER
-  typedef long off_t;
-  typedef long ssize_t;
-#else
-# include <sys/types.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#if 0 /* just to make Emacs auto-indent happy */
-}
-#endif
-#endif /* __cplusplus */
-
-#include <gpg-error.h>
-
-\f
-/* Check for compiler features.  */
-#if __GNUC__
-#define _GPGME_GCC_VERSION (__GNUC__ * 10000 \
-                            + __GNUC_MINOR__ * 100 \
-                            + __GNUC_PATCHLEVEL__)
-
-#if _GPGME_GCC_VERSION > 30100
-#define _GPGME_DEPRECATED      __attribute__ ((__deprecated__))
-#endif
-#endif
-
-#ifndef _GPGME_DEPRECATED
-#define _GPGME_DEPRECATED
-#endif
-
-\f
-/* The version of this header should match the one of the library.  Do
-   not use this symbol in your application, use gpgme_check_version
-   instead.  The purpose of this macro is to let autoconf (using the
-   AM_PATH_GPGME macro) check that this header matches the installed
-   library.  Warning: Do not edit the next line.  configure will do
-   that for you!  */
-#define GPGME_VERSION "1.1.1-cvs1150"
-
-
-\f
-/* Some opaque data types used by GPGME.  */
-
-/* The context holds some global state and configration options, as
-   well as the results of a crypto operation.  */
-struct gpgme_context;
-typedef struct gpgme_context *gpgme_ctx_t;
-
-/* The data object is used by GPGME to exchange arbitrary data.  */
-struct gpgme_data;
-typedef struct gpgme_data *gpgme_data_t;
-
-\f
-/* Wrappers for the libgpg-error library.  */
-
-typedef gpg_error_t gpgme_error_t;
-typedef gpg_err_code_t gpgme_err_code_t;
-typedef gpg_err_source_t gpgme_err_source_t;
-
-
-static _GPGME_INLINE gpgme_error_t
-gpgme_err_make (gpgme_err_source_t source, gpgme_err_code_t code)
-{
-  return gpg_err_make (source, code);
-}
-
-
-/* The user can define GPGME_ERR_SOURCE_DEFAULT before including this
-   file to specify a default source for gpgme_error.  */
-#ifndef GPGME_ERR_SOURCE_DEFAULT
-#define GPGME_ERR_SOURCE_DEFAULT  GPG_ERR_SOURCE_USER_1
-#endif
-
-static _GPGME_INLINE gpgme_error_t
-gpgme_error (gpgme_err_code_t code)
-{
-  return gpgme_err_make (GPGME_ERR_SOURCE_DEFAULT, code);
-}
-
-
-static _GPGME_INLINE gpgme_err_code_t
-gpgme_err_code (gpgme_error_t err)
-{
-  return gpg_err_code (err);
-}
-
-
-static _GPGME_INLINE gpgme_err_source_t
-gpgme_err_source (gpgme_error_t err)
-{
-  return gpg_err_source (err);
-}
-
-
-/* Return a pointer to a string containing a description of the error
-   code in the error value ERR.  This function is not thread safe.  */
-const char *gpgme_strerror (gpgme_error_t err);
-
-/* Return the error string for ERR in the user-supplied buffer BUF of
-   size BUFLEN.  This function is, in contrast to gpg_strerror,
-   thread-safe if a thread-safe strerror_r() function is provided by
-   the system.  If the function succeeds, 0 is returned and BUF
-   contains the string describing the error.  If the buffer was not
-   large enough, ERANGE is returned and BUF contains as much of the
-   beginning of the error string as fits into the buffer.  */
-int gpgme_strerror_r (gpg_error_t err, char *buf, size_t buflen);
-
-
-/* Return a pointer to a string containing a description of the error
-   source in the error value ERR.  */
-const char *gpgme_strsource (gpgme_error_t err);
-
-
-/* Retrieve the error code for the system error ERR.  This returns
-   GPG_ERR_UNKNOWN_ERRNO if the system error is not mapped (report
-   this).  */
-gpgme_err_code_t gpgme_err_code_from_errno (int err);
-
-
-/* Retrieve the system error for the error code CODE.  This returns 0
-   if CODE is not a system error code.  */
-int gpgme_err_code_to_errno (gpgme_err_code_t code);
-
-  
-/* Return an error value with the error source SOURCE and the system
-   error ERR.  */
-gpgme_error_t gpgme_err_make_from_errno (gpgme_err_source_t source, int err);
-
-
-/* Return an error value with the system error ERR.  */
-gpgme_err_code_t gpgme_error_from_errno (int err);
-
-\f
-/* The possible encoding mode of gpgme_data_t objects.  */
-typedef enum
-  {
-    GPGME_DATA_ENCODING_NONE   = 0,    /* Not specified.  */
-    GPGME_DATA_ENCODING_BINARY = 1,
-    GPGME_DATA_ENCODING_BASE64 = 2,
-    GPGME_DATA_ENCODING_ARMOR  = 3     /* Either PEM or OpenPGP Armor.  */
-  }
-gpgme_data_encoding_t;
-
-\f
-/* Public key algorithms from libgcrypt.  */
-typedef enum
-  {
-    GPGME_PK_RSA   = 1,
-    GPGME_PK_RSA_E = 2,
-    GPGME_PK_RSA_S = 3,
-    GPGME_PK_ELG_E = 16,
-    GPGME_PK_DSA   = 17,
-    GPGME_PK_ELG   = 20
-  }
-gpgme_pubkey_algo_t;
-
-
-/* Hash algorithms from libgcrypt.  */
-typedef enum
-  {
-    GPGME_MD_NONE          = 0,  
-    GPGME_MD_MD5           = 1,
-    GPGME_MD_SHA1          = 2,
-    GPGME_MD_RMD160        = 3,
-    GPGME_MD_MD2           = 5,
-    GPGME_MD_TIGER         = 6,   /* TIGER/192. */
-    GPGME_MD_HAVAL         = 7,   /* HAVAL, 5 pass, 160 bit. */
-    GPGME_MD_SHA256        = 8,
-    GPGME_MD_SHA384        = 9,
-    GPGME_MD_SHA512        = 10,
-    GPGME_MD_MD4           = 301,
-    GPGME_MD_CRC32        = 302,
-    GPGME_MD_CRC32_RFC1510 = 303,
-    GPGME_MD_CRC24_RFC2440 = 304
-  }
-gpgme_hash_algo_t;
-
-\f
-/* The possible signature stati.  Deprecated, use error value in sig
-   status.  */
-typedef enum
-  {
-    GPGME_SIG_STAT_NONE  = 0,
-    GPGME_SIG_STAT_GOOD  = 1,
-    GPGME_SIG_STAT_BAD   = 2,
-    GPGME_SIG_STAT_NOKEY = 3,
-    GPGME_SIG_STAT_NOSIG = 4,
-    GPGME_SIG_STAT_ERROR = 5,
-    GPGME_SIG_STAT_DIFF  = 6,
-    GPGME_SIG_STAT_GOOD_EXP = 7,
-    GPGME_SIG_STAT_GOOD_EXPKEY = 8
-  }
-_gpgme_sig_stat_t;
-typedef _gpgme_sig_stat_t gpgme_sig_stat_t _GPGME_DEPRECATED;
-
-
-/* The available signature modes.  */
-typedef enum
-  {
-    GPGME_SIG_MODE_NORMAL = 0,
-    GPGME_SIG_MODE_DETACH = 1,
-    GPGME_SIG_MODE_CLEAR  = 2
-  }
-gpgme_sig_mode_t;
-
-\f
-/* The available key and signature attributes.  Deprecated, use the
-   individual result structures instead.  */
-typedef enum
-  {
-    GPGME_ATTR_KEYID        = 1,
-    GPGME_ATTR_FPR          = 2,
-    GPGME_ATTR_ALGO         = 3,
-    GPGME_ATTR_LEN          = 4,
-    GPGME_ATTR_CREATED      = 5,
-    GPGME_ATTR_EXPIRE       = 6,
-    GPGME_ATTR_OTRUST       = 7,
-    GPGME_ATTR_USERID       = 8,
-    GPGME_ATTR_NAME         = 9,
-    GPGME_ATTR_EMAIL        = 10,
-    GPGME_ATTR_COMMENT      = 11,
-    GPGME_ATTR_VALIDITY     = 12,
-    GPGME_ATTR_LEVEL        = 13,
-    GPGME_ATTR_TYPE         = 14,
-    GPGME_ATTR_IS_SECRET    = 15,
-    GPGME_ATTR_KEY_REVOKED  = 16,
-    GPGME_ATTR_KEY_INVALID  = 17,
-    GPGME_ATTR_UID_REVOKED  = 18,
-    GPGME_ATTR_UID_INVALID  = 19,
-    GPGME_ATTR_KEY_CAPS     = 20,
-    GPGME_ATTR_CAN_ENCRYPT  = 21,
-    GPGME_ATTR_CAN_SIGN     = 22,
-    GPGME_ATTR_CAN_CERTIFY  = 23,
-    GPGME_ATTR_KEY_EXPIRED  = 24,
-    GPGME_ATTR_KEY_DISABLED = 25,
-    GPGME_ATTR_SERIAL       = 26,
-    GPGME_ATTR_ISSUER       = 27,
-    GPGME_ATTR_CHAINID      = 28,
-    GPGME_ATTR_SIG_STATUS   = 29,
-    GPGME_ATTR_ERRTOK       = 30,
-    GPGME_ATTR_SIG_SUMMARY  = 31,
-    GPGME_ATTR_SIG_CLASS    = 32
-  }
-_gpgme_attr_t;
-typedef _gpgme_attr_t gpgme_attr_t _GPGME_DEPRECATED;
-
-\f
-/* The available validities for a trust item or key.  */
-typedef enum
-  {
-    GPGME_VALIDITY_UNKNOWN   = 0,
-    GPGME_VALIDITY_UNDEFINED = 1,
-    GPGME_VALIDITY_NEVER     = 2,
-    GPGME_VALIDITY_MARGINAL  = 3,
-    GPGME_VALIDITY_FULL      = 4,
-    GPGME_VALIDITY_ULTIMATE  = 5
-  }
-gpgme_validity_t;
-
-\f
-/* The available protocols.  */
-typedef enum
-  {
-    GPGME_PROTOCOL_OpenPGP = 0,  /* The default mode.  */
-    GPGME_PROTOCOL_CMS     = 1
-  }
-gpgme_protocol_t;
-
-\f
-/* The available keylist mode flags.  */
-#define GPGME_KEYLIST_MODE_LOCAL               1
-#define GPGME_KEYLIST_MODE_EXTERN              2
-#define GPGME_KEYLIST_MODE_SIGS                        4
-#define GPGME_KEYLIST_MODE_SIG_NOTATIONS       8
-#define GPGME_KEYLIST_MODE_VALIDATE            256
-
-typedef unsigned int gpgme_keylist_mode_t;
-
-\f
-/* Signature notations.  */
-
-/* The available signature notation flags.  */
-#define GPGME_SIG_NOTATION_HUMAN_READABLE      1
-#define GPGME_SIG_NOTATION_CRITICAL            2
-
-typedef unsigned int gpgme_sig_notation_flags_t;
-
-struct _gpgme_sig_notation
-{
-  struct _gpgme_sig_notation *next;
-
-  /* If NAME is a null pointer, then VALUE contains a policy URL
-     rather than a notation.  */
-  char *name;
-
-  /* The value of the notation data.  */
-  char *value;
-
-  /* The length of the name of the notation data.  */
-  int name_len;
-
-  /* The length of the value of the notation data.  */
-  int value_len;
-
-  /* The accumulated flags.  */
-  gpgme_sig_notation_flags_t flags;
-
-  /* Notation data is human-readable.  */
-  unsigned int human_readable : 1;
-
-  /* Notation data is critical.  */
-  unsigned int critical : 1;
-
-  /* Internal to GPGME, do not use.  */
-  int _unused : 30;
-};
-typedef struct _gpgme_sig_notation *gpgme_sig_notation_t;
-
-\f
-/* The possible stati for the edit operation.  */
-typedef enum
-  {
-    GPGME_STATUS_EOF,
-    /* mkstatus processing starts here */
-    GPGME_STATUS_ENTER,
-    GPGME_STATUS_LEAVE,
-    GPGME_STATUS_ABORT,
-
-    GPGME_STATUS_GOODSIG,
-    GPGME_STATUS_BADSIG,
-    GPGME_STATUS_ERRSIG,
-
-    GPGME_STATUS_BADARMOR,
-
-    GPGME_STATUS_RSA_OR_IDEA,
-    GPGME_STATUS_KEYEXPIRED,
-    GPGME_STATUS_KEYREVOKED,
-
-    GPGME_STATUS_TRUST_UNDEFINED,
-    GPGME_STATUS_TRUST_NEVER,
-    GPGME_STATUS_TRUST_MARGINAL,
-    GPGME_STATUS_TRUST_FULLY,
-    GPGME_STATUS_TRUST_ULTIMATE,
-
-    GPGME_STATUS_SHM_INFO,
-    GPGME_STATUS_SHM_GET,
-    GPGME_STATUS_SHM_GET_BOOL,
-    GPGME_STATUS_SHM_GET_HIDDEN,
-
-    GPGME_STATUS_NEED_PASSPHRASE,
-    GPGME_STATUS_VALIDSIG,
-    GPGME_STATUS_SIG_ID,
-    GPGME_STATUS_ENC_TO,
-    GPGME_STATUS_NODATA,
-    GPGME_STATUS_BAD_PASSPHRASE,
-    GPGME_STATUS_NO_PUBKEY,
-    GPGME_STATUS_NO_SECKEY,
-    GPGME_STATUS_NEED_PASSPHRASE_SYM,
-    GPGME_STATUS_DECRYPTION_FAILED,
-    GPGME_STATUS_DECRYPTION_OKAY,
-    GPGME_STATUS_MISSING_PASSPHRASE,
-    GPGME_STATUS_GOOD_PASSPHRASE,
-    GPGME_STATUS_GOODMDC,
-    GPGME_STATUS_BADMDC,
-    GPGME_STATUS_ERRMDC,
-    GPGME_STATUS_IMPORTED,
-    GPGME_STATUS_IMPORT_OK,
-    GPGME_STATUS_IMPORT_PROBLEM,
-    GPGME_STATUS_IMPORT_RES,
-    GPGME_STATUS_FILE_START,
-    GPGME_STATUS_FILE_DONE,
-    GPGME_STATUS_FILE_ERROR,
-
-    GPGME_STATUS_BEGIN_DECRYPTION,
-    GPGME_STATUS_END_DECRYPTION,
-    GPGME_STATUS_BEGIN_ENCRYPTION,
-    GPGME_STATUS_END_ENCRYPTION,
-
-    GPGME_STATUS_DELETE_PROBLEM,
-    GPGME_STATUS_GET_BOOL,
-    GPGME_STATUS_GET_LINE,
-    GPGME_STATUS_GET_HIDDEN,
-    GPGME_STATUS_GOT_IT,
-    GPGME_STATUS_PROGRESS,
-    GPGME_STATUS_SIG_CREATED,
-    GPGME_STATUS_SESSION_KEY,
-    GPGME_STATUS_NOTATION_NAME,
-    GPGME_STATUS_NOTATION_DATA,
-    GPGME_STATUS_POLICY_URL,
-    GPGME_STATUS_BEGIN_STREAM,
-    GPGME_STATUS_END_STREAM,
-    GPGME_STATUS_KEY_CREATED,
-    GPGME_STATUS_USERID_HINT,
-    GPGME_STATUS_UNEXPECTED,
-    GPGME_STATUS_INV_RECP,
-    GPGME_STATUS_NO_RECP,
-    GPGME_STATUS_ALREADY_SIGNED,
-    GPGME_STATUS_SIGEXPIRED,
-    GPGME_STATUS_EXPSIG,
-    GPGME_STATUS_EXPKEYSIG,
-    GPGME_STATUS_TRUNCATED,
-    GPGME_STATUS_ERROR,
-    GPGME_STATUS_NEWSIG,
-    GPGME_STATUS_REVKEYSIG,
-    GPGME_STATUS_SIG_SUBPACKET,
-    GPGME_STATUS_NEED_PASSPHRASE_PIN,
-    GPGME_STATUS_SC_OP_FAILURE,
-    GPGME_STATUS_SC_OP_SUCCESS,
-    GPGME_STATUS_CARDCTRL,
-    GPGME_STATUS_BACKUP_KEY_CREATED,
-    GPGME_STATUS_PKA_TRUST_BAD,
-    GPGME_STATUS_PKA_TRUST_GOOD,
-
-    GPGME_STATUS_PLAINTEXT
-  }
-gpgme_status_code_t;
-
-\f
-/* The engine information structure.  */
-struct _gpgme_engine_info
-{
-  struct _gpgme_engine_info *next;
-
-  /* The protocol ID.  */
-  gpgme_protocol_t protocol;
-
-  /* The file name of the engine binary.  */
-  char *file_name;
-  
-  /* The version string of the installed engine.  */
-  char *version;
-
-  /* The minimum version required for GPGME.  */
-  const char *req_version;
-
-  /* The home directory used, or NULL if default.  */
-  char *home_dir;
-};
-typedef struct _gpgme_engine_info *gpgme_engine_info_t;
-
-\f
-/* A subkey from a key.  */
-struct _gpgme_subkey
-{
-  struct _gpgme_subkey *next;
-
-  /* True if subkey is revoked.  */
-  unsigned int revoked : 1;
-
-  /* True if subkey is expired.  */
-  unsigned int expired : 1;
-
-  /* True if subkey is disabled.  */
-  unsigned int disabled : 1;
-
-  /* True if subkey is invalid.  */
-  unsigned int invalid : 1;
-
-  /* True if subkey can be used for encryption.  */
-  unsigned int can_encrypt : 1;
-
-  /* True if subkey can be used for signing.  */
-  unsigned int can_sign : 1;
-
-  /* True if subkey can be used for certification.  */
-  unsigned int can_certify : 1;
-
-  /* True if subkey is secret.  */
-  unsigned int secret : 1;
-
-  /* True if subkey can be used for authentication.  */
-  unsigned int can_authenticate : 1;
-
-  /* True if subkey is qualified for signatures according to German law.  */
-  unsigned int is_qualified : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 22;
-  
-  /* Public key algorithm supported by this subkey.  */
-  gpgme_pubkey_algo_t pubkey_algo;
-
-  /* Length of the subkey.  */
-  unsigned int length;
-
-  /* The key ID of the subkey.  */
-  char *keyid;
-
-  /* Internal to GPGME, do not use.  */
-  char _keyid[16 + 1];
-
-  /* The fingerprint of the subkey in hex digit form.  */
-  char *fpr;
-
-  /* The creation timestamp, -1 if invalid, 0 if not available.  */
-  long int timestamp;
-
-  /* The expiration timestamp, 0 if the subkey does not expire.  */
-  long int expires;
-};
-typedef struct _gpgme_subkey *gpgme_subkey_t;
-
-
-/* A signature on a user ID.  */
-struct _gpgme_key_sig
-{
-  struct _gpgme_key_sig *next;
-
-  /* True if the signature is a revocation signature.  */
-  unsigned int revoked : 1;
-
-  /* True if the signature is expired.  */
-  unsigned int expired : 1;
-
-  /* True if the signature is invalid.  */
-  unsigned int invalid : 1;
-
-  /* True if the signature should be exported.  */
-  unsigned int exportable : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 28;
-
-  /* The public key algorithm used to create the signature.  */
-  gpgme_pubkey_algo_t pubkey_algo;
-
-  /* The key ID of key used to create the signature.  */
-  char *keyid;
-
-  /* Internal to GPGME, do not use.  */
-  char _keyid[16 + 1];
-
-  /* The creation timestamp, -1 if invalid, 0 if not available.  */
-  long int timestamp;
-
-  /* The expiration timestamp, 0 if the subkey does not expire.  */
-  long int expires;
-
-  /* Same as in gpgme_signature_t.  */
-  gpgme_error_t status;
-
-#ifdef __cplusplus
-  unsigned int _obsolete_class _GPGME_DEPRECATED;
-#else
-  /* Must be set to SIG_CLASS below.  */
-  unsigned int class _GPGME_DEPRECATED;
-#endif
-
-  /* The user ID string.  */
-  char *uid;
-
-  /* The name part of the user ID.  */
-  char *name;
-
-  /* The email part of the user ID.  */
-  char *email;
-
-  /* The comment part of the user ID.  */
-  char *comment;
-
-  /* Crypto backend specific signature class.  */
-  unsigned int sig_class;
-
-  /* Notation data and policy URLs.  */
-  gpgme_sig_notation_t notations;
-
-  /* Internal to GPGME, do not use.  */
-  gpgme_sig_notation_t _last_notation;
-};
-typedef struct _gpgme_key_sig *gpgme_key_sig_t;
-
-
-/* An user ID from a key.  */
-struct _gpgme_user_id
-{
-  struct _gpgme_user_id *next;
-
-  /* True if the user ID is revoked.  */
-  unsigned int revoked : 1;
-
-  /* True if the user ID is invalid.  */
-  unsigned int invalid : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 30;
-
-  /* The validity of the user ID.  */
-  gpgme_validity_t validity; 
-
-  /* The user ID string.  */
-  char *uid;
-
-  /* The name part of the user ID.  */
-  char *name;
-
-  /* The email part of the user ID.  */
-  char *email;
-
-  /* The comment part of the user ID.  */
-  char *comment;
-
-  /* The signatures of the user ID.  */
-  gpgme_key_sig_t signatures;
-
-  /* Internal to GPGME, do not use.  */
-  gpgme_key_sig_t _last_keysig;
-};
-typedef struct _gpgme_user_id *gpgme_user_id_t;
-
-
-/* A key from the keyring.  */
-struct _gpgme_key
-{
-  /* Internal to GPGME, do not use.  */
-  unsigned int _refs;
-
-  /* True if key is revoked.  */
-  unsigned int revoked : 1;
-
-  /* True if key is expired.  */
-  unsigned int expired : 1;
-
-  /* True if key is disabled.  */
-  unsigned int disabled : 1;
-
-  /* True if key is invalid.  */
-  unsigned int invalid : 1;
-
-  /* True if key can be used for encryption.  */
-  unsigned int can_encrypt : 1;
-
-  /* True if key can be used for signing.  */
-  unsigned int can_sign : 1;
-
-  /* True if key can be used for certification.  */
-  unsigned int can_certify : 1;
-
-  /* True if key is secret.  */
-  unsigned int secret : 1;
-
-  /* True if key can be used for authentication.  */
-  unsigned int can_authenticate : 1;
-
-  /* True if subkey is qualified for signatures according to German law.  */
-  unsigned int is_qualified : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 22;
-
-  /* This is the protocol supported by this key.  */
-  gpgme_protocol_t protocol;
-
-  /* If protocol is GPGME_PROTOCOL_CMS, this string contains the
-     issuer serial.  */
-  char *issuer_serial;
-
-  /* If protocol is GPGME_PROTOCOL_CMS, this string contains the
-     issuer name.  */
-  char *issuer_name;
-
-  /* If protocol is GPGME_PROTOCOL_CMS, this string contains the chain
-     ID.  */
-  char *chain_id;
-
-  /* If protocol is GPGME_PROTOCOL_OpenPGP, this field contains the
-     owner trust.  */
-  gpgme_validity_t owner_trust;
-
-  /* The subkeys of the key.  */
-  gpgme_subkey_t subkeys;
-
-  /* The user IDs of the key.  */
-  gpgme_user_id_t uids;
-
-  /* Internal to GPGME, do not use.  */
-  gpgme_subkey_t _last_subkey;
-
-  /* Internal to GPGME, do not use.  */
-  gpgme_user_id_t _last_uid;
-
-  /* The keylist mode that was active when listing the key.  */
-  gpgme_keylist_mode_t keylist_mode;
-};
-typedef struct _gpgme_key *gpgme_key_t;
-
-
-\f
-/* Types for callback functions.  */
-
-/* Request a passphrase from the user.  */
-typedef gpgme_error_t (*gpgme_passphrase_cb_t) (void *hook,
-                                               const char *uid_hint,
-                                               const char *passphrase_info,
-                                               int prev_was_bad, int fd);
-
-/* Inform the user about progress made.  */
-typedef void (*gpgme_progress_cb_t) (void *opaque, const char *what,
-                                    int type, int current, int total);
-
-/* Interact with the user about an edit operation.  */
-typedef gpgme_error_t (*gpgme_edit_cb_t) (void *opaque,
-                                         gpgme_status_code_t status,
-                                         const char *args, int fd);
-
-\f
-/* Context management functions.  */
-
-/* Create a new context and return it in CTX.  */
-gpgme_error_t gpgme_new (gpgme_ctx_t *ctx);
-
-/* Release the context CTX.  */
-void gpgme_release (gpgme_ctx_t ctx);
-
-/* Set the protocol to be used by CTX to PROTO.  */
-gpgme_error_t gpgme_set_protocol (gpgme_ctx_t ctx, gpgme_protocol_t proto);
-
-/* Get the protocol used with CTX */
-gpgme_protocol_t gpgme_get_protocol (gpgme_ctx_t ctx);
-
-/* Get the string describing protocol PROTO, or NULL if invalid.  */
-const char *gpgme_get_protocol_name (gpgme_protocol_t proto);
-
-/* If YES is non-zero, enable armor mode in CTX, disable it otherwise.  */
-void gpgme_set_armor (gpgme_ctx_t ctx, int yes);
-
-/* Return non-zero if armor mode is set in CTX.  */
-int gpgme_get_armor (gpgme_ctx_t ctx);
-
-/* If YES is non-zero, enable text mode in CTX, disable it otherwise.  */
-void gpgme_set_textmode (gpgme_ctx_t ctx, int yes);
-
-/* Return non-zero if text mode is set in CTX.  */
-int gpgme_get_textmode (gpgme_ctx_t ctx);
-
-/* Use whatever the default of the backend crypto engine is.  */
-#define GPGME_INCLUDE_CERTS_DEFAULT    -256
-
-/* Include up to NR_OF_CERTS certificates in an S/MIME message.  */
-void gpgme_set_include_certs (gpgme_ctx_t ctx, int nr_of_certs);
-
-/* Return the number of certs to include in an S/MIME message.  */
-int gpgme_get_include_certs (gpgme_ctx_t ctx);
-
-/* Set keylist mode in CTX to MODE.  */
-gpgme_error_t gpgme_set_keylist_mode (gpgme_ctx_t ctx,
-                                     gpgme_keylist_mode_t mode);
-
-/* Get keylist mode in CTX.  */
-gpgme_keylist_mode_t gpgme_get_keylist_mode (gpgme_ctx_t ctx);
-
-/* Set the passphrase callback function in CTX to CB.  HOOK_VALUE is
-   passed as first argument to the passphrase callback function.  */
-void gpgme_set_passphrase_cb (gpgme_ctx_t ctx,
-                              gpgme_passphrase_cb_t cb, void *hook_value);
-
-/* Get the current passphrase callback function in *CB and the current
-   hook value in *HOOK_VALUE.  */
-void gpgme_get_passphrase_cb (gpgme_ctx_t ctx, gpgme_passphrase_cb_t *cb,
-                             void **hook_value);
-
-/* Set the progress callback function in CTX to CB.  HOOK_VALUE is
-   passed as first argument to the progress callback function.  */
-void gpgme_set_progress_cb (gpgme_ctx_t c, gpgme_progress_cb_t cb,
-                           void *hook_value);
-
-/* Get the current progress callback function in *CB and the current
-   hook value in *HOOK_VALUE.  */
-void gpgme_get_progress_cb (gpgme_ctx_t ctx, gpgme_progress_cb_t *cb,
-                           void **hook_value);
-
-/* This function sets the locale for the context CTX, or the default
-   locale if CTX is a null pointer.  */
-gpgme_error_t gpgme_set_locale (gpgme_ctx_t ctx, int category,
-                               const char *value);
-
-/* Get the information about the configured engines.  A pointer to the
-   first engine in the statically allocated linked list is returned.
-   The returned data is valid until the next gpgme_ctx_set_engine_info.  */
-gpgme_engine_info_t gpgme_ctx_get_engine_info (gpgme_ctx_t ctx);
-
-/* Set the engine info for the context CTX, protocol PROTO, to the
-   file name FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t gpgme_ctx_set_engine_info (gpgme_ctx_t ctx,
-                                        gpgme_protocol_t proto,
-                                        const char *file_name,
-                                        const char *home_dir);
-
-\f
-/* Return a statically allocated string with the name of the public
-   key algorithm ALGO, or NULL if that name is not known.  */
-const char *gpgme_pubkey_algo_name (gpgme_pubkey_algo_t algo);
-
-/* Return a statically allocated string with the name of the hash
-   algorithm ALGO, or NULL if that name is not known.  */
-const char *gpgme_hash_algo_name (gpgme_hash_algo_t algo);
-
-\f
-/* Delete all signers from CTX.  */
-void gpgme_signers_clear (gpgme_ctx_t ctx);
-
-/* Add KEY to list of signers in CTX.  */
-gpgme_error_t gpgme_signers_add (gpgme_ctx_t ctx, const gpgme_key_t key);
-
-/* Return the SEQth signer's key in CTX.  */
-gpgme_key_t gpgme_signers_enum (const gpgme_ctx_t ctx, int seq);
-
-/* Retrieve the signature status of signature IDX in CTX after a
-   successful verify operation in R_STAT (if non-null).  The creation
-   time stamp of the signature is returned in R_CREATED (if non-null).
-   The function returns a string containing the fingerprint.
-   Deprecated, use verify result directly.  */
-const char *gpgme_get_sig_status (gpgme_ctx_t ctx, int idx,
-                                  _gpgme_sig_stat_t *r_stat,
-                                 time_t *r_created) _GPGME_DEPRECATED;
-
-/* Retrieve certain attributes of a signature.  IDX is the index
-   number of the signature after a successful verify operation.  WHAT
-   is an attribute where GPGME_ATTR_EXPIRE is probably the most useful
-   one.  WHATIDX is to be passed as 0 for most attributes . */
-unsigned long gpgme_get_sig_ulong_attr (gpgme_ctx_t c, int idx,
-                                        _gpgme_attr_t what, int whatidx)
-     _GPGME_DEPRECATED;
-const char *gpgme_get_sig_string_attr (gpgme_ctx_t c, int idx,
-                                      _gpgme_attr_t what, int whatidx)
-     _GPGME_DEPRECATED;
-
-
-/* Get the key used to create signature IDX in CTX and return it in
-   R_KEY.  */
-gpgme_error_t gpgme_get_sig_key (gpgme_ctx_t ctx, int idx, gpgme_key_t *r_key)
-     _GPGME_DEPRECATED;
-
-\f
-/* Clear all notation data from the context.  */
-void gpgme_sig_notation_clear (gpgme_ctx_t ctx);
-
-/* Add the human-readable notation data with name NAME and value VALUE
-   to the context CTX, using the flags FLAGS.  If NAME is NULL, then
-   VALUE should be a policy URL.  The flag
-   GPGME_SIG_NOTATION_HUMAN_READABLE is forced to be true for notation
-   data, and false for policy URLs.  */
-gpgme_error_t gpgme_sig_notation_add (gpgme_ctx_t ctx, const char *name,
-                                     const char *value,
-                                     gpgme_sig_notation_flags_t flags);
-
-/* Get the sig notations for this context.  */
-gpgme_sig_notation_t gpgme_sig_notation_get (gpgme_ctx_t ctx);
-
-\f
-/* Run control.  */
-
-/* The type of an I/O callback function.  */
-typedef gpgme_error_t (*gpgme_io_cb_t) (void *data, int fd);
-
-/* The type of a function that can register FNC as the I/O callback
-   function for the file descriptor FD with direction dir (0: for writing,
-   1: for reading).  FNC_DATA should be passed as DATA to FNC.  The
-   function should return a TAG suitable for the corresponding
-   gpgme_remove_io_cb_t, and an error value.  */
-typedef gpgme_error_t (*gpgme_register_io_cb_t) (void *data, int fd, int dir,
-                                                gpgme_io_cb_t fnc,
-                                                void *fnc_data, void **tag);
-
-/* The type of a function that can remove a previously registered I/O
-   callback function given TAG as returned by the register
-   function.  */
-typedef void (*gpgme_remove_io_cb_t) (void *tag);
-
-typedef enum
-  {
-    GPGME_EVENT_START,
-    GPGME_EVENT_DONE,
-    GPGME_EVENT_NEXT_KEY,
-    GPGME_EVENT_NEXT_TRUSTITEM
-  }
-gpgme_event_io_t;
-
-/* The type of a function that is called when a context finished an
-   operation.  */
-typedef void (*gpgme_event_io_cb_t) (void *data, gpgme_event_io_t type,
-                                    void *type_data);
-
-struct gpgme_io_cbs
-{
-  gpgme_register_io_cb_t add;
-  void *add_priv;
-  gpgme_remove_io_cb_t remove;
-  gpgme_event_io_cb_t event;
-  void *event_priv;
-};
-typedef struct gpgme_io_cbs *gpgme_io_cbs_t;
-
-/* Set the I/O callback functions in CTX to IO_CBS.  */
-void gpgme_set_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs);
-
-/* Get the current I/O callback functions.  */
-void gpgme_get_io_cbs (gpgme_ctx_t ctx, gpgme_io_cbs_t io_cbs);
-
-/* Process the pending operation and, if HANG is non-zero, wait for
-   the pending operation to finish.  */
-gpgme_ctx_t gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang);
-
-\f
-/* Functions to handle data objects.  */
-
-/* Read up to SIZE bytes into buffer BUFFER from the data object with
-   the handle HANDLE.  Return the number of characters read, 0 on EOF
-   and -1 on error.  If an error occurs, errno is set.  */
-typedef ssize_t (*gpgme_data_read_cb_t) (void *handle, void *buffer,
-                                        size_t size);
-
-/* Write up to SIZE bytes from buffer BUFFER to the data object with
-   the handle HANDLE.  Return the number of characters written, or -1
-   on error.  If an error occurs, errno is set.  */
-typedef ssize_t (*gpgme_data_write_cb_t) (void *handle, const void *buffer,
-                                         size_t size);
-
-/* Set the current position from where the next read or write starts
-   in the data object with the handle HANDLE to OFFSET, relativ to
-   WHENCE.  */
-typedef off_t (*gpgme_data_seek_cb_t) (void *handle, off_t offset, int whence);
-
-/* Close the data object with the handle DL.  */
-typedef void (*gpgme_data_release_cb_t) (void *handle);
-
-struct gpgme_data_cbs
-{
-  gpgme_data_read_cb_t read;
-  gpgme_data_write_cb_t write;
-  gpgme_data_seek_cb_t seek;
-  gpgme_data_release_cb_t release;
-};
-typedef struct gpgme_data_cbs *gpgme_data_cbs_t;
-
-/* Read up to SIZE bytes into buffer BUFFER from the data object with
-   the handle DH.  Return the number of characters read, 0 on EOF and
-   -1 on error.  If an error occurs, errno is set.  */
-ssize_t gpgme_data_read (gpgme_data_t dh, void *buffer, size_t size);
-
-/* Write up to SIZE bytes from buffer BUFFER to the data object with
-   the handle DH.  Return the number of characters written, or -1 on
-   error.  If an error occurs, errno is set.  */
-ssize_t gpgme_data_write (gpgme_data_t dh, const void *buffer, size_t size);
-
-/* Set the current position from where the next read or write starts
-   in the data object with the handle DH to OFFSET, relativ to
-   WHENCE.  */
-off_t gpgme_data_seek (gpgme_data_t dh, off_t offset, int whence);
-
-/* Create a new data buffer and return it in R_DH.  */
-gpgme_error_t gpgme_data_new (gpgme_data_t *r_dh);
-
-/* Destroy the data buffer DH.  */
-void gpgme_data_release (gpgme_data_t dh);
-
-/* Create a new data buffer filled with SIZE bytes starting from
-   BUFFER.  If COPY is zero, copying is delayed until necessary, and
-   the data is taken from the original location when needed.  */
-gpgme_error_t gpgme_data_new_from_mem (gpgme_data_t *r_dh,
-                                      const char *buffer, size_t size,
-                                      int copy);
-
-/* Destroy the data buffer DH and return a pointer to its content.
-   The memory has be to released with gpgme_free() by the user.  It's
-   size is returned in R_LEN.  */
-char *gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len);
-
-/* Release the memory returned by gpgme_data_release_and_get_mem().  */
-void gpgme_free (void *buffer);
-
-gpgme_error_t gpgme_data_new_from_cbs (gpgme_data_t *dh,
-                                      gpgme_data_cbs_t cbs,
-                                      void *handle);
-
-gpgme_error_t gpgme_data_new_from_fd (gpgme_data_t *dh, int fd);
-
-gpgme_error_t gpgme_data_new_from_stream (gpgme_data_t *dh, FILE *stream);
-
-/* Return the encoding attribute of the data buffer DH */
-gpgme_data_encoding_t gpgme_data_get_encoding (gpgme_data_t dh);
-
-/* Set the encoding attribute of data buffer DH to ENC */
-gpgme_error_t gpgme_data_set_encoding (gpgme_data_t dh,
-                                      gpgme_data_encoding_t enc);
-
-/* Get the file name associated with the data object with handle DH, or
-   NULL if there is none.  */
-char *gpgme_data_get_file_name (gpgme_data_t dh);
-
-/* Set the file name associated with the data object with handle DH to
-   FILE_NAME.  */
-gpgme_error_t gpgme_data_set_file_name (gpgme_data_t dh,
-                                       const char *file_name);
-
-
-/* Create a new data buffer which retrieves the data from the callback
-   function READ_CB.  Deprecated, please use gpgme_data_new_from_cbs
-   instead.  */
-gpgme_error_t gpgme_data_new_with_read_cb (gpgme_data_t *r_dh,
-                                          int (*read_cb) (void*,char *,
-                                                          size_t,size_t*),
-                                          void *read_cb_value)
-     _GPGME_DEPRECATED;
-
-/* Create a new data buffer filled with the content of file FNAME.
-   COPY must be non-zero.  For delayed read, please use
-   gpgme_data_new_from_fd or gpgme_data_new_from stream instead.  */
-gpgme_error_t gpgme_data_new_from_file (gpgme_data_t *r_dh,
-                                       const char *fname,
-                                       int copy);
-
-/* Create a new data buffer filled with LENGTH bytes starting from
-   OFFSET within the file FNAME or stream FP (exactly one must be
-   non-zero).  */
-gpgme_error_t gpgme_data_new_from_filepart (gpgme_data_t *r_dh,
-                                           const char *fname, FILE *fp,
-                                           off_t offset, size_t length);
-
-/* Reset the read pointer in DH.  Deprecated, please use
-   gpgme_data_seek instead.  */
-gpgme_error_t gpgme_data_rewind (gpgme_data_t dh) _GPGME_DEPRECATED;
-
-\f
-/* Key and trust functions.  */
-
-/* Get the key with the fingerprint FPR from the crypto backend.  If
-   SECRET is true, get the secret key.  */
-gpgme_error_t gpgme_get_key (gpgme_ctx_t ctx, const char *fpr,
-                            gpgme_key_t *r_key, int secret);
-
-/* Acquire a reference to KEY.  */
-void gpgme_key_ref (gpgme_key_t key);
-
-/* Release a reference to KEY.  If this was the last one the key is
-   destroyed.  */
-void gpgme_key_unref (gpgme_key_t key);
-void gpgme_key_release (gpgme_key_t key);
-
-/* Return the value of the attribute WHAT of KEY, which has to be
-   representable by a string.  IDX specifies the sub key or user ID
-   for attributes related to sub keys or user IDs.  Deprecated, use
-   key structure directly instead. */
-const char *gpgme_key_get_string_attr (gpgme_key_t key, _gpgme_attr_t what,
-                                      const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-/* Return the value of the attribute WHAT of KEY, which has to be
-   representable by an unsigned integer.  IDX specifies the sub key or
-   user ID for attributes related to sub keys or user IDs.
-   Deprecated, use key structure directly instead.  */
-unsigned long gpgme_key_get_ulong_attr (gpgme_key_t key, _gpgme_attr_t what,
-                                       const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-/* Return the value of the attribute WHAT of a signature on user ID
-   UID_IDX in KEY, which has to be representable by a string.  IDX
-   specifies the signature.  Deprecated, use key structure directly
-   instead.  */
-const char *gpgme_key_sig_get_string_attr (gpgme_key_t key, int uid_idx,
-                                          _gpgme_attr_t what,
-                                          const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-/* Return the value of the attribute WHAT of a signature on user ID
-   UID_IDX in KEY, which has to be representable by an unsigned
-   integer string.  IDX specifies the signature.  Deprecated, use key
-   structure directly instead.  */
-unsigned long gpgme_key_sig_get_ulong_attr (gpgme_key_t key, int uid_idx,
-                                           _gpgme_attr_t what,
-                                           const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-\f
-/* Crypto Operations.  */
-
-/* Cancel a pending asynchronous operation.  */
-gpgme_error_t gpgme_cancel (gpgme_ctx_t ctx);
-
-\f
-struct _gpgme_invalid_key
-{
-  struct _gpgme_invalid_key *next;
-  char *fpr;
-  gpgme_error_t reason;
-};
-typedef struct _gpgme_invalid_key *gpgme_invalid_key_t;
-
-\f
-/* Encryption.  */
-struct _gpgme_op_encrypt_result
-{
-  /* The list of invalid recipients.  */
-  gpgme_invalid_key_t invalid_recipients;
-};
-typedef struct _gpgme_op_encrypt_result *gpgme_encrypt_result_t;
-
-/* Retrieve a pointer to the result of the encrypt operation.  */
-gpgme_encrypt_result_t gpgme_op_encrypt_result (gpgme_ctx_t ctx);
-
-/* The valid encryption flags.  */
-typedef enum
-  {
-    GPGME_ENCRYPT_ALWAYS_TRUST = 1
-  }
-gpgme_encrypt_flags_t;
-
-/* Encrypt plaintext PLAIN within CTX for the recipients RECP and
-   store the resulting ciphertext in CIPHER.  */
-gpgme_error_t gpgme_op_encrypt_start (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                                     gpgme_encrypt_flags_t flags,
-                                     gpgme_data_t plain, gpgme_data_t cipher);
-gpgme_error_t gpgme_op_encrypt (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                               gpgme_encrypt_flags_t flags,
-                               gpgme_data_t plain, gpgme_data_t cipher);
-
-/* Encrypt plaintext PLAIN within CTX for the recipients RECP and
-   store the resulting ciphertext in CIPHER.  Also sign the ciphertext
-   with the signers in CTX.  */
-gpgme_error_t gpgme_op_encrypt_sign_start (gpgme_ctx_t ctx,
-                                          gpgme_key_t recp[],
-                                          gpgme_encrypt_flags_t flags,
-                                          gpgme_data_t plain,
-                                          gpgme_data_t cipher);
-gpgme_error_t gpgme_op_encrypt_sign (gpgme_ctx_t ctx, gpgme_key_t recp[],
-                                    gpgme_encrypt_flags_t flags,
-                                    gpgme_data_t plain, gpgme_data_t cipher);
-
-\f
-/* Decryption.  */
-
-struct _gpgme_recipient
-{
-  struct _gpgme_recipient *next;
-
-  /* The key ID of key for which the text was encrypted.  */
-  char *keyid;
-
-  /* Internal to GPGME, do not use.  */
-  char _keyid[16 + 1];
-
-  /* The public key algorithm of the recipient key.  */
-  gpgme_pubkey_algo_t pubkey_algo;
-
-  /* The status of the recipient.  */
-  gpgme_error_t status;
-};
-typedef struct _gpgme_recipient *gpgme_recipient_t;
-
-struct _gpgme_op_decrypt_result
-{
-  char *unsupported_algorithm;
-
-  /* Key should not have been used for encryption.  */
-  unsigned int wrong_key_usage : 1;
-
-  /* Internal to GPGME, do not use.  */
-  int _unused : 31;
-
-  gpgme_recipient_t recipients;
-
-  /* The original file name of the plaintext message, if
-     available.  */
-  char *file_name;
-};
-typedef struct _gpgme_op_decrypt_result *gpgme_decrypt_result_t;
-
-/* Retrieve a pointer to the result of the decrypt operation.  */
-gpgme_decrypt_result_t gpgme_op_decrypt_result (gpgme_ctx_t ctx);
-
-/* Decrypt ciphertext CIPHER within CTX and store the resulting
-   plaintext in PLAIN.  */
-gpgme_error_t gpgme_op_decrypt_start (gpgme_ctx_t ctx, gpgme_data_t cipher,
-                                     gpgme_data_t plain);
-gpgme_error_t gpgme_op_decrypt (gpgme_ctx_t ctx,
-                               gpgme_data_t cipher, gpgme_data_t plain);
-
-/* Decrypt ciphertext CIPHER and make a signature verification within
-   CTX and store the resulting plaintext in PLAIN.  */
-gpgme_error_t gpgme_op_decrypt_verify_start (gpgme_ctx_t ctx,
-                                            gpgme_data_t cipher,
-                                            gpgme_data_t plain);
-gpgme_error_t gpgme_op_decrypt_verify (gpgme_ctx_t ctx, gpgme_data_t cipher,
-                                      gpgme_data_t plain);
-
-\f
-/* Signing.  */
-struct _gpgme_new_signature
-{
-  struct _gpgme_new_signature *next;
-
-  /* The type of the signature.  */
-  gpgme_sig_mode_t type;
-
-  /* The public key algorithm used to create the signature.  */
-  gpgme_pubkey_algo_t pubkey_algo;
-
-  /* The hash algorithm used to create the signature.  */
-  gpgme_hash_algo_t hash_algo;
-
-  /* Internal to GPGME, do not use.  Must be set to the same value as
-     CLASS below.  */
-  unsigned long _obsolete_class;
-
-  /* Signature creation time.  */
-  long int timestamp;
-
-  /* The fingerprint of the signature.  */
-  char *fpr;
-
-#ifdef __cplusplus
-  unsigned int _obsolete_class_2;
-#else
-  /* Must be set to SIG_CLASS below.  */
-  unsigned int class _GPGME_DEPRECATED;
-#endif
-
-  /* Crypto backend specific signature class.  */
-  unsigned int sig_class;
-};
-typedef struct _gpgme_new_signature *gpgme_new_signature_t;
-
-struct _gpgme_op_sign_result
-{
-  /* The list of invalid signers.  */
-  gpgme_invalid_key_t invalid_signers;
-  gpgme_new_signature_t signatures;
-};
-typedef struct _gpgme_op_sign_result *gpgme_sign_result_t;
-
-/* Retrieve a pointer to the result of the signing operation.  */
-gpgme_sign_result_t gpgme_op_sign_result (gpgme_ctx_t ctx);
-
-/* Sign the plaintext PLAIN and store the signature in SIG.  */
-gpgme_error_t gpgme_op_sign_start (gpgme_ctx_t ctx,
-                                  gpgme_data_t plain, gpgme_data_t sig,
-                                  gpgme_sig_mode_t mode);
-gpgme_error_t gpgme_op_sign (gpgme_ctx_t ctx,
-                            gpgme_data_t plain, gpgme_data_t sig,
-                            gpgme_sig_mode_t mode);
-
-\f
-/* Verify.  */
-
-/* Flags used for the SUMMARY field in a gpgme_signature_t.  */
-typedef enum
-  {
-    GPGME_SIGSUM_VALID       = 0x0001,  /* The signature is fully valid.  */
-    GPGME_SIGSUM_GREEN       = 0x0002,  /* The signature is good.  */
-    GPGME_SIGSUM_RED         = 0x0004,  /* The signature is bad.  */
-    GPGME_SIGSUM_KEY_REVOKED = 0x0010,  /* One key has been revoked.  */
-    GPGME_SIGSUM_KEY_EXPIRED = 0x0020,  /* One key has expired.  */
-    GPGME_SIGSUM_SIG_EXPIRED = 0x0040,  /* The signature has expired.  */
-    GPGME_SIGSUM_KEY_MISSING = 0x0080,  /* Can't verify: key missing.  */
-    GPGME_SIGSUM_CRL_MISSING = 0x0100,  /* CRL not available.  */
-    GPGME_SIGSUM_CRL_TOO_OLD = 0x0200,  /* Available CRL is too old.  */
-    GPGME_SIGSUM_BAD_POLICY  = 0x0400,  /* A policy was not met.  */
-    GPGME_SIGSUM_SYS_ERROR   = 0x0800   /* A system error occured.  */
-  }
-gpgme_sigsum_t;
-
-struct _gpgme_signature
-{
-  struct _gpgme_signature *next;
-
-  /* A summary of the signature status.  */
-  gpgme_sigsum_t summary;
-
-  /* The fingerprint or key ID of the signature.  */
-  char *fpr;
-
-  /* The status of the signature.  */
-  gpgme_error_t status;
-
-  /* Notation data and policy URLs.  */
-  gpgme_sig_notation_t notations;
-
-  /* Signature creation time.  */
-  unsigned long timestamp;
-
-  /* Signature exipration time or 0.  */
-  unsigned long exp_timestamp;
-
-  /* Key should not have been used for signing.  */
-  unsigned int wrong_key_usage : 1;
-
-  /* PKA status: 0 = not available, 1 = bad, 2 = okay, 3 = RFU. */
-  unsigned int pka_trust : 2;
-
-  /* Internal to GPGME, do not use.  */
-  int _unused : 29;
-
-  gpgme_validity_t validity;
-  gpgme_error_t validity_reason;
-
-  /* The public key algorithm used to create the signature.  */
-  gpgme_pubkey_algo_t pubkey_algo;
-
-  /* The hash algorithm used to create the signature.  */
-  gpgme_hash_algo_t hash_algo;
-
-  /* The mailbox from the PKA information or NULL. */
-  char *pka_address;
-};
-typedef struct _gpgme_signature *gpgme_signature_t;
-
-struct _gpgme_op_verify_result
-{
-  gpgme_signature_t signatures;
-
-  /* The original file name of the plaintext message, if
-     available.  */
-  char *file_name;
-};
-typedef struct _gpgme_op_verify_result *gpgme_verify_result_t;
-
-/* Retrieve a pointer to the result of the verify operation.  */
-gpgme_verify_result_t gpgme_op_verify_result (gpgme_ctx_t ctx);
-
-/* Verify within CTX that SIG is a valid signature for TEXT.  */
-gpgme_error_t gpgme_op_verify_start (gpgme_ctx_t ctx, gpgme_data_t sig,
-                                    gpgme_data_t signed_text,
-                                    gpgme_data_t plaintext);
-gpgme_error_t gpgme_op_verify (gpgme_ctx_t ctx, gpgme_data_t sig,
-                              gpgme_data_t signed_text,
-                              gpgme_data_t plaintext);
-
-\f
-/* Import.  */
-
-/* The key was new.  */
-#define GPGME_IMPORT_NEW       1
-
-/* The key contained new user IDs.  */
-#define GPGME_IMPORT_UID       2
-
-/* The key contained new signatures.  */
-#define GPGME_IMPORT_SIG       4
-
-/* The key contained new sub keys.  */
-#define GPGME_IMPORT_SUBKEY    8
-
-/* The key contained a secret key.  */
-#define GPGME_IMPORT_SECRET    16
-
-
-struct _gpgme_import_status
-{
-  struct _gpgme_import_status *next;
-
-  /* Fingerprint.  */
-  char *fpr;
-
-  /* If a problem occured, the reason why the key could not be
-     imported.  Otherwise GPGME_No_Error.  */
-  gpgme_error_t result;
-
-  /* The result of the import, the GPGME_IMPORT_* values bit-wise
-     ORed.  0 means the key was already known and no new components
-     have been added.  */
-  unsigned int status;
-};
-typedef struct _gpgme_import_status *gpgme_import_status_t;
-
-/* Import.  */
-struct _gpgme_op_import_result
-{
-  /* Number of considered keys.  */
-  int considered;
-
-  /* Keys without user ID.  */
-  int no_user_id;
-
-  /* Imported keys.  */
-  int imported;
-
-  /* Imported RSA keys.  */
-  int imported_rsa;
-
-  /* Unchanged keys.  */
-  int unchanged;
-
-  /* Number of new user ids.  */
-  int new_user_ids;
-
-  /* Number of new sub keys.  */
-  int new_sub_keys;
-
-  /* Number of new signatures.  */
-  int new_signatures;
-
-  /* Number of new revocations.  */
-  int new_revocations;
-
-  /* Number of secret keys read.  */
-  int secret_read;
-
-  /* Number of secret keys imported.  */
-  int secret_imported;
-
-  /* Number of secret keys unchanged.  */
-  int secret_unchanged;
-
-  /* Number of new keys skipped.  */
-  int skipped_new_keys;
-
-  /* Number of keys not imported.  */
-  int not_imported;
-
-  /* List of keys for which an import was attempted.  */
-  gpgme_import_status_t imports;
-};
-typedef struct _gpgme_op_import_result *gpgme_import_result_t;
-
-/* Retrieve a pointer to the result of the import operation.  */
-gpgme_import_result_t gpgme_op_import_result (gpgme_ctx_t ctx);
-
-/* Import the key in KEYDATA into the keyring.  */
-gpgme_error_t gpgme_op_import_start (gpgme_ctx_t ctx, gpgme_data_t keydata);
-gpgme_error_t gpgme_op_import (gpgme_ctx_t ctx, gpgme_data_t keydata);
-gpgme_error_t gpgme_op_import_ext (gpgme_ctx_t ctx, gpgme_data_t keydata,
-                                  int *nr) _GPGME_DEPRECATED;
-
-\f
-/* Export the keys found by PATTERN into KEYDATA.  */
-gpgme_error_t gpgme_op_export_start (gpgme_ctx_t ctx, const char *pattern,
-                                    unsigned int reserved,
-                                    gpgme_data_t keydata);
-gpgme_error_t gpgme_op_export (gpgme_ctx_t ctx, const char *pattern,
-                              unsigned int reserved, gpgme_data_t keydata);
-
-gpgme_error_t gpgme_op_export_ext_start (gpgme_ctx_t ctx,
-                                        const char *pattern[],
-                                        unsigned int reserved,
-                                        gpgme_data_t keydata);
-gpgme_error_t gpgme_op_export_ext (gpgme_ctx_t ctx, const char *pattern[],
-                                  unsigned int reserved,
-                                  gpgme_data_t keydata);
-
-\f
-/* Key generation.  */
-struct _gpgme_op_genkey_result
-{
-  /* A primary key was generated.  */
-  unsigned int primary : 1;
-
-  /* A sub key was generated.  */
-  unsigned int sub : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 30;
-
-  /* The fingerprint of the generated key.  */
-  char *fpr;
-};
-typedef struct _gpgme_op_genkey_result *gpgme_genkey_result_t;
-
-/* Generate a new keypair and add it to the keyring.  PUBKEY and
-   SECKEY should be null for now.  PARMS specifies what keys should be
-   generated.  */
-gpgme_error_t gpgme_op_genkey_start (gpgme_ctx_t ctx, const char *parms,
-                                    gpgme_data_t pubkey, gpgme_data_t seckey);
-gpgme_error_t gpgme_op_genkey (gpgme_ctx_t ctx, const char *parms,
-                              gpgme_data_t pubkey, gpgme_data_t seckey);
-
-/* Retrieve a pointer to the result of the genkey operation.  */
-gpgme_genkey_result_t gpgme_op_genkey_result (gpgme_ctx_t ctx);
-
-\f
-/* Delete KEY from the keyring.  If ALLOW_SECRET is non-zero, secret
-   keys are also deleted.  */
-gpgme_error_t gpgme_op_delete_start (gpgme_ctx_t ctx, const gpgme_key_t key,
-                                    int allow_secret);
-gpgme_error_t gpgme_op_delete (gpgme_ctx_t ctx, const gpgme_key_t key,
-                              int allow_secret);
-
-\f
-/* Edit the key KEY.  Send status and command requests to FNC and
-   output of edit commands to OUT.  */
-gpgme_error_t gpgme_op_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
-                                  gpgme_edit_cb_t fnc, void *fnc_value,
-                                  gpgme_data_t out);
-gpgme_error_t gpgme_op_edit (gpgme_ctx_t ctx, gpgme_key_t key,
-                            gpgme_edit_cb_t fnc, void *fnc_value,
-                            gpgme_data_t out);
-
-/* Edit the card for the key KEY.  Send status and command requests to
-   FNC and output of edit commands to OUT.  */
-gpgme_error_t gpgme_op_card_edit_start (gpgme_ctx_t ctx, gpgme_key_t key,
-                                       gpgme_edit_cb_t fnc, void *fnc_value,
-                                       gpgme_data_t out);
-gpgme_error_t gpgme_op_card_edit (gpgme_ctx_t ctx, gpgme_key_t key,
-                                 gpgme_edit_cb_t fnc, void *fnc_value,
-                                 gpgme_data_t out);
-
-\f
-/* Key management functions.  */
-struct _gpgme_op_keylist_result
-{
-  unsigned int truncated : 1;
-
-  /* Internal to GPGME, do not use.  */
-  unsigned int _unused : 31;
-};
-typedef struct _gpgme_op_keylist_result *gpgme_keylist_result_t;
-
-/* Retrieve a pointer to the result of the key listing operation.  */
-gpgme_keylist_result_t gpgme_op_keylist_result (gpgme_ctx_t ctx);
-
-/* Start a keylist operation within CTX, searching for keys which
-   match PATTERN.  If SECRET_ONLY is true, only secret keys are
-   returned.  */
-gpgme_error_t gpgme_op_keylist_start (gpgme_ctx_t ctx, const char *pattern,
-                                     int secret_only);
-gpgme_error_t gpgme_op_keylist_ext_start (gpgme_ctx_t ctx,
-                                         const char *pattern[],
-                                         int secret_only, int reserved);
-
-/* Return the next key from the keylist in R_KEY.  */
-gpgme_error_t gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key);
-
-/* Terminate a pending keylist operation within CTX.  */
-gpgme_error_t gpgme_op_keylist_end (gpgme_ctx_t ctx);
-
-\f
-/* Trust items and operations.  */
-
-struct _gpgme_trust_item
-{
-  /* Internal to GPGME, do not use.  */
-  unsigned int _refs;
-
-  /* The key ID to which the trust item belongs.  */
-  char *keyid;
-
-  /* Internal to GPGME, do not use.  */
-  char _keyid[16 + 1];
-
-  /* The type of the trust item, 1 refers to a key, 2 to a user ID.  */
-  int type;
-
-  /* The trust level.  */
-  int level;
-
-  /* The owner trust if TYPE is 1.  */
-  char *owner_trust;
-
-  /* Internal to GPGME, do not use.  */
-  char _owner_trust[2];
-
-  /* The calculated validity.  */
-  char *validity;
-  /* Internal to GPGME, do not use.  */
-  char _validity[2];
-
-  /* The user name if TYPE is 2.  */
-  char *name;
-};
-typedef struct _gpgme_trust_item *gpgme_trust_item_t;
-
-/* Start a trustlist operation within CTX, searching for trust items
-   which match PATTERN.  */
-gpgme_error_t gpgme_op_trustlist_start (gpgme_ctx_t ctx,
-                                       const char *pattern, int max_level);
-
-/* Return the next trust item from the trustlist in R_ITEM.  */
-gpgme_error_t gpgme_op_trustlist_next (gpgme_ctx_t ctx,
-                                      gpgme_trust_item_t *r_item);
-
-/* Terminate a pending trustlist operation within CTX.  */
-gpgme_error_t gpgme_op_trustlist_end (gpgme_ctx_t ctx);
-
-/* Acquire a reference to ITEM.  */
-void gpgme_trust_item_ref (gpgme_trust_item_t item);
-
-/* Release a reference to ITEM.  If this was the last one the trust
-   item is destroyed.  */
-void gpgme_trust_item_unref (gpgme_trust_item_t item);
-
-/* Release the trust item ITEM.  Deprecated, use
-   gpgme_trust_item_unref.  */
-void gpgme_trust_item_release (gpgme_trust_item_t item) _GPGME_DEPRECATED;
-
-/* Return the value of the attribute WHAT of ITEM, which has to be
-   representable by a string.  Deprecated, use trust item structure
-   directly.  */
-const char *gpgme_trust_item_get_string_attr (gpgme_trust_item_t item,
-                                             _gpgme_attr_t what,
-                                             const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-/* Return the value of the attribute WHAT of KEY, which has to be
-   representable by an integer.  IDX specifies a running index if the
-   attribute appears more than once in the key.  Deprecated, use trust
-   item structure directly.  */
-int gpgme_trust_item_get_int_attr (gpgme_trust_item_t item, _gpgme_attr_t what,
-                                  const void *reserved, int idx)
-     _GPGME_DEPRECATED;
-
-\f
-/* Various functions.  */
-
-/* Check that the library fulfills the version requirement.  */
-const char *gpgme_check_version (const char *req_version);
-
-/* Get the information about the configured and installed engines.  A
-   pointer to the first engine in the statically allocated linked list
-   is returned in *INFO.  If an error occurs, it is returned.  The
-   returned data is valid until the next gpgme_set_engine_info.  */
-gpgme_error_t gpgme_get_engine_info (gpgme_engine_info_t *engine_info);
-
-/* Set the default engine info for the protocol PROTO to the file name
-   FILE_NAME and the home directory HOME_DIR.  */
-gpgme_error_t gpgme_set_engine_info (gpgme_protocol_t proto,
-                                    const char *file_name,
-                                    const char *home_dir);
-
-\f
-/* Engine support functions.  */
-
-/* Verify that the engine implementing PROTO is installed and
-   available.  */
-gpgme_error_t gpgme_engine_check_version (gpgme_protocol_t proto);
-
-\f
-/* Deprecated types.  */
-typedef gpgme_ctx_t GpgmeCtx _GPGME_DEPRECATED;
-typedef gpgme_data_t GpgmeData _GPGME_DEPRECATED;
-typedef gpgme_error_t GpgmeError _GPGME_DEPRECATED;
-typedef gpgme_data_encoding_t GpgmeDataEncoding _GPGME_DEPRECATED;
-typedef gpgme_pubkey_algo_t GpgmePubKeyAlgo _GPGME_DEPRECATED;
-typedef gpgme_hash_algo_t GpgmeHashAlgo _GPGME_DEPRECATED;
-typedef gpgme_sig_stat_t GpgmeSigStat _GPGME_DEPRECATED;
-typedef gpgme_sig_mode_t GpgmeSigMode _GPGME_DEPRECATED;
-typedef gpgme_attr_t GpgmeAttr _GPGME_DEPRECATED;
-typedef gpgme_validity_t GpgmeValidity _GPGME_DEPRECATED;
-typedef gpgme_protocol_t GpgmeProtocol _GPGME_DEPRECATED;
-typedef gpgme_engine_info_t GpgmeEngineInfo _GPGME_DEPRECATED;
-typedef gpgme_subkey_t GpgmeSubkey _GPGME_DEPRECATED;
-typedef gpgme_key_sig_t GpgmeKeySig _GPGME_DEPRECATED;
-typedef gpgme_user_id_t GpgmeUserID _GPGME_DEPRECATED;
-typedef gpgme_key_t GpgmeKey _GPGME_DEPRECATED;
-typedef gpgme_passphrase_cb_t GpgmePassphraseCb _GPGME_DEPRECATED;
-typedef gpgme_progress_cb_t GpgmeProgressCb _GPGME_DEPRECATED;
-typedef gpgme_io_cb_t GpgmeIOCb _GPGME_DEPRECATED;
-typedef gpgme_register_io_cb_t GpgmeRegisterIOCb _GPGME_DEPRECATED;
-typedef gpgme_remove_io_cb_t GpgmeRemoveIOCb _GPGME_DEPRECATED;
-typedef gpgme_event_io_t GpgmeEventIO _GPGME_DEPRECATED;
-typedef gpgme_event_io_cb_t GpgmeEventIOCb _GPGME_DEPRECATED;
-#define GpgmeIOCbs gpgme_io_cbs
-typedef gpgme_data_read_cb_t GpgmeDataReadCb _GPGME_DEPRECATED;
-typedef gpgme_data_write_cb_t GpgmeDataWriteCb _GPGME_DEPRECATED;
-typedef gpgme_data_seek_cb_t GpgmeDataSeekCb _GPGME_DEPRECATED;
-typedef gpgme_data_release_cb_t GpgmeDataReleaseCb _GPGME_DEPRECATED;
-#define GpgmeDataCbs gpgme_data_cbs
-typedef gpgme_encrypt_result_t GpgmeEncryptResult _GPGME_DEPRECATED;
-typedef gpgme_sig_notation_t GpgmeSigNotation _GPGME_DEPRECATED;
-typedef        gpgme_signature_t GpgmeSignature _GPGME_DEPRECATED;
-typedef gpgme_verify_result_t GpgmeVerifyResult _GPGME_DEPRECATED;
-typedef gpgme_import_status_t GpgmeImportStatus _GPGME_DEPRECATED;
-typedef gpgme_import_result_t GpgmeImportResult _GPGME_DEPRECATED;
-typedef gpgme_genkey_result_t GpgmeGenKeyResult _GPGME_DEPRECATED;
-typedef        gpgme_trust_item_t GpgmeTrustItem _GPGME_DEPRECATED;
-typedef gpgme_status_code_t GpgmeStatusCode _GPGME_DEPRECATED;
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* GPGME_H */
diff --git a/tags/gpgme-1-1-1/gpgme/gpgme.m4 b/tags/gpgme-1-1-1/gpgme/gpgme.m4
deleted file mode 100644 (file)
index 44bf43c..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-# gpgme.m4 - autoconf macro to detect GPGME.
-# Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file 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.
-
-
-AC_DEFUN([_AM_PATH_GPGME_CONFIG],
-[ AC_ARG_WITH(gpgme-prefix,
-            AC_HELP_STRING([--with-gpgme-prefix=PFX],
-                           [prefix where GPGME is installed (optional)]),
-     gpgme_config_prefix="$withval", gpgme_config_prefix="")
-  if test "x$gpgme_config_prefix" != x ; then
-      GPGME_CONFIG="$gpgme_config_prefix/bin/gpgme-config"
-  fi
-  AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no)
-
-  if test "$GPGME_CONFIG" != "no" ; then
-    gpgme_version=`$GPGME_CONFIG --version`
-  fi
-  gpgme_version_major=`echo $gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-  gpgme_version_minor=`echo $gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-  gpgme_version_micro=`echo $gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
-])
-
-dnl AM_PATH_GPGME([MINIMUM-VERSION,
-dnl               [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpgme and define GPGME_CFLAGS and GPGME_LIBS.
-dnl
-AC_DEFUN([AM_PATH_GPGME],
-[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
-  tmp=ifelse([$1], ,1:0.4.2,$1)
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_gpgme_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_gpgme_api=0
-     min_gpgme_version="$tmp"
-  fi
-
-  AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
-  ok=no
-  if test "$GPGME_CONFIG" != "no" ; then
-    req_major=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    req_micro=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-    if test "$gpgme_version_major" -gt "$req_major"; then
-        ok=yes
-    else 
-        if test "$gpgme_version_major" -eq "$req_major"; then
-            if test "$gpgme_version_minor" -gt "$req_minor"; then
-               ok=yes
-            else
-               if test "$gpgme_version_minor" -eq "$req_minor"; then
-                   if test "$gpgme_version_micro" -ge "$req_micro"; then
-                     ok=yes
-                   fi
-               fi
-            fi
-        fi
-    fi
-  fi
-  if test $ok = yes; then
-     # If we have a recent GPGME, we should also check that the
-     # API is compatible.
-     if test "$req_gpgme_api" -gt 0 ; then
-        tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           if test "$req_gpgme_api" -ne "$tmp" ; then
-             ok=no
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    GPGME_CFLAGS=`$GPGME_CONFIG --cflags`
-    GPGME_LIBS=`$GPGME_CONFIG --libs`
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , :, [$2])
-  else
-    GPGME_CFLAGS=""
-    GPGME_LIBS=""
-    AC_MSG_RESULT(no)
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GPGME_CFLAGS)
-  AC_SUBST(GPGME_LIBS)
-])
-
-dnl AM_PATH_GPGME_PTH([MINIMUM-VERSION,
-dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpgme and define GPGME_PTH_CFLAGS and GPGME_PTH_LIBS.
-dnl
-AC_DEFUN([AM_PATH_GPGME_PTH],
-[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
-  tmp=ifelse([$1], ,1:0.4.2,$1)
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_gpgme_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_gpgme_api=0
-     min_gpgme_version="$tmp"
-  fi
-
-  AC_MSG_CHECKING(for GPGME Pth - version >= $min_gpgme_version)
-  ok=no
-  if test "$GPGME_CONFIG" != "no" ; then
-    if `$GPGME_CONFIG --thread=pth 2> /dev/null` ; then
-      req_major=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-      req_minor=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-      req_micro=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-      if test "$gpgme_version_major" -gt "$req_major"; then
-        ok=yes
-      else 
-        if test "$gpgme_version_major" -eq "$req_major"; then
-          if test "$gpgme_version_minor" -gt "$req_minor"; then
-            ok=yes
-          else
-            if test "$gpgme_version_minor" -eq "$req_minor"; then
-              if test "$gpgme_version_micro" -ge "$req_micro"; then
-                ok=yes
-              fi
-            fi
-          fi
-        fi
-      fi
-    fi
-  fi
-  if test $ok = yes; then
-     # If we have a recent GPGME, we should also check that the
-     # API is compatible.
-     if test "$req_gpgme_api" -gt 0 ; then
-        tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           if test "$req_gpgme_api" -ne "$tmp" ; then
-             ok=no
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    GPGME_PTH_CFLAGS=`$GPGME_CONFIG --thread=pth --cflags`
-    GPGME_PTH_LIBS=`$GPGME_CONFIG --thread=pth --libs`
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , :, [$2])
-  else
-    GPGME_PTH_CFLAGS=""
-    GPGME_PTH_LIBS=""
-    AC_MSG_RESULT(no)
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GPGME_PTH_CFLAGS)
-  AC_SUBST(GPGME_PTH_LIBS)
-])
-
-dnl AM_PATH_GPGME_PTHREAD([MINIMUM-VERSION,
-dnl                       [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpgme and define GPGME_PTHREAD_CFLAGS
-dnl  and GPGME_PTHREAD_LIBS.
-dnl
-AC_DEFUN([AM_PATH_GPGME_PTHREAD],
-[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
-  tmp=ifelse([$1], ,1:0.4.2,$1)
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_gpgme_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_gpgme_api=0
-     min_gpgme_version="$tmp"
-  fi
-
-  AC_MSG_CHECKING(for GPGME pthread - version >= $min_gpgme_version)
-  ok=no
-  if test "$GPGME_CONFIG" != "no" ; then
-    if `$GPGME_CONFIG --thread=pthread 2> /dev/null` ; then
-      req_major=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-      req_minor=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-      req_micro=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-      if test "$gpgme_version_major" -gt "$req_major"; then
-        ok=yes
-      else 
-        if test "$gpgme_version_major" -eq "$req_major"; then
-          if test "$gpgme_version_minor" -gt "$req_minor"; then
-            ok=yes
-          else
-            if test "$gpgme_version_minor" -eq "$req_minor"; then
-              if test "$gpgme_version_micro" -ge "$req_micro"; then
-                ok=yes
-              fi
-            fi
-          fi
-        fi
-      fi
-    fi
-  fi
-  if test $ok = yes; then
-     # If we have a recent GPGME, we should also check that the
-     # API is compatible.
-     if test "$req_gpgme_api" -gt 0 ; then
-        tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           if test "$req_gpgme_api" -ne "$tmp" ; then
-             ok=no
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    GPGME_PTHREAD_CFLAGS=`$GPGME_CONFIG --thread=pthread --cflags`
-    GPGME_PTHREAD_LIBS=`$GPGME_CONFIG --thread=pthread --libs`
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , :, [$2])
-  else
-    GPGME_PTHREAD_CFLAGS=""
-    GPGME_PTHREAD_LIBS=""
-    AC_MSG_RESULT(no)
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GPGME_PTHREAD_CFLAGS)
-  AC_SUBST(GPGME_PTHREAD_LIBS)
-])
-
-
-dnl AM_PATH_GPGME_GLIB([MINIMUM-VERSION,
-dnl               [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpgme-glib and define GPGME_GLIB_CFLAGS and GPGME_GLIB_LIBS.
-dnl
-AC_DEFUN([AM_PATH_GPGME_GLIB],
-[ AC_REQUIRE([_AM_PATH_GPGME_CONFIG])dnl
-  tmp=ifelse([$1], ,1:0.4.2,$1)
-  if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
-     req_gpgme_api=`echo "$tmp"     | sed 's/\(.*\):\(.*\)/\1/'`
-     min_gpgme_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
-  else
-     req_gpgme_api=0
-     min_gpgme_version="$tmp"
-  fi
-
-  AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
-  ok=no
-  if test "$GPGME_CONFIG" != "no" ; then
-    req_major=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    req_micro=`echo $min_gpgme_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
-    if test "$gpgme_version_major" -gt "$req_major"; then
-        ok=yes
-    else 
-        if test "$gpgme_version_major" -eq "$req_major"; then
-            if test "$gpgme_version_minor" -gt "$req_minor"; then
-               ok=yes
-            else
-               if test "$gpgme_version_minor" -eq "$req_minor"; then
-                   if test "$gpgme_version_micro" -ge "$req_micro"; then
-                     ok=yes
-                   fi
-               fi
-            fi
-        fi
-    fi
-  fi
-  if test $ok = yes; then
-     # If we have a recent GPGME, we should also check that the
-     # API is compatible.
-     if test "$req_gpgme_api" -gt 0 ; then
-        tmp=`$GPGME_CONFIG --api-version 2>/dev/null || echo 0`
-        if test "$tmp" -gt 0 ; then
-           if test "$req_gpgme_api" -ne "$tmp" ; then
-             ok=no
-           fi
-        fi
-     fi
-  fi
-  if test $ok = yes; then
-    GPGME_GLIB_CFLAGS=`$GPGME_CONFIG --glib --cflags`
-    GPGME_GLIB_LIBS=`$GPGME_CONFIG --glib --libs`
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , :, [$2])
-  else
-    GPGME_GLIB_CFLAGS=""
-    GPGME_GLIB_LIBS=""
-    AC_MSG_RESULT(no)
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GPGME_GLIB_CFLAGS)
-  AC_SUBST(GPGME_GLIB_LIBS)
-])
-
diff --git a/tags/gpgme-1-1-1/gpgme/import.c b/tags/gpgme-1-1-1/gpgme/import.c
deleted file mode 100644 (file)
index ad6b776..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/* import.c - Import a key.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_import_result result;
-
-  /* A pointer to the next pointer of the last import status in the
-     list.  This makes appending new imports painless while preserving
-     the order.  */
-  gpgme_import_status_t *lastp;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  gpgme_import_status_t import = opd->result.imports;
-
-  while (import)
-    {
-      gpgme_import_status_t next = import->next;
-      free (import->fpr);
-      free (import);
-      import = next;
-    }
-}
-
-
-gpgme_import_result_t
-gpgme_op_import_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_IMPORT, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-static gpgme_error_t
-parse_import (char *args, gpgme_import_status_t *import_status, int problem)
-{
-  gpgme_import_status_t import;
-  char *tail;
-  long int nr;
-
-  import = malloc (sizeof (*import));
-  if (!import)
-    return gpg_error_from_errno (errno);
-  import->next = NULL;
-
-  errno = 0;
-  nr = strtol (args, &tail, 0);
-  if (errno || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (import);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-  args = tail;
-
-  if (problem)
-    {
-      switch (nr)
-       {
-       case 0:
-       case 4:
-       default:
-         import->result = gpg_error (GPG_ERR_GENERAL);
-         break;
-
-       case 1:
-         import->result = gpg_error (GPG_ERR_BAD_CERT);
-         break;
-
-       case 2:
-         import->result = gpg_error (GPG_ERR_MISSING_CERT);
-         break;
-
-       case 3:
-         import->result = gpg_error (GPG_ERR_BAD_CERT_CHAIN);
-         break;
-       }
-      import->status = 0;
-    }
-  else
-    {
-      import->result = gpg_error (GPG_ERR_NO_ERROR);
-      import->status = nr;
-    }
-
-  while (*args == ' ')
-    args++;
-  tail = strchr (args, ' ');
-  if (tail)
-    *tail = '\0';
-
-  import->fpr = strdup (args);
-  if (!import->fpr)
-    {
-      int saved_errno = errno;
-      free (import);
-      return gpg_error_from_errno (saved_errno);
-    }
-
-  *import_status = import;
-  return 0;
-}
-
-
-
-gpgme_error_t
-parse_import_res (char *args, gpgme_import_result_t result)
-{
-  char *tail;
-
-  errno = 0;
-
-#define PARSE_NEXT(x)                                  \
-  (x) = strtol (args, &tail, 0);                       \
-  if (errno || args == tail || *tail != ' ')           \
-    /* The crypto backend does not behave.  */         \
-    return gpg_error (GPG_ERR_INV_ENGINE);             \
-  args = tail;
-
-  PARSE_NEXT (result->considered);
-  PARSE_NEXT (result->no_user_id);
-  PARSE_NEXT (result->imported);
-  PARSE_NEXT (result->imported_rsa);
-  PARSE_NEXT (result->unchanged);
-  PARSE_NEXT (result->new_user_ids);
-  PARSE_NEXT (result->new_sub_keys);
-  PARSE_NEXT (result->new_signatures);
-  PARSE_NEXT (result->new_revocations);
-  PARSE_NEXT (result->secret_read);
-  PARSE_NEXT (result->secret_imported);
-  PARSE_NEXT (result->secret_unchanged);
-  PARSE_NEXT (result->skipped_new_keys);
-  PARSE_NEXT (result->not_imported);
-
-  return 0;
-}
-
-
-static gpgme_error_t
-import_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_IMPORT, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_IMPORT_OK:
-    case GPGME_STATUS_IMPORT_PROBLEM:
-      err = parse_import (args, opd->lastp,
-                         code == GPGME_STATUS_IMPORT_OK ? 0 : 1);
-      if (err)
-       return err;
-
-      opd->lastp = &(*opd->lastp)->next;
-      break;
-
-    case GPGME_STATUS_IMPORT_RES:
-      err = parse_import_res (args, &opd->result);
-      break;
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-_gpgme_op_import_start (gpgme_ctx_t ctx, int synchronous, gpgme_data_t keydata)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_IMPORT, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-  opd->lastp = &opd->result.imports;
-
-  if (!keydata)
-    return gpg_error (GPG_ERR_NO_DATA);
-
-  _gpgme_engine_set_status_handler (ctx->engine, import_status_handler, ctx);
-
-  return _gpgme_engine_op_import (ctx->engine, keydata);
-}
-
-
-gpgme_error_t
-gpgme_op_import_start (gpgme_ctx_t ctx, gpgme_data_t keydata)
-{
-  return _gpgme_op_import_start (ctx, 0, keydata);
-}
-
-
-/* Import the key in KEYDATA into the keyring.  */
-gpgme_error_t
-gpgme_op_import (gpgme_ctx_t ctx, gpgme_data_t keydata)
-{
-  gpgme_error_t err = _gpgme_op_import_start (ctx, 1, keydata);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
-
-
-gpgme_error_t
-gpgme_op_import_ext (gpgme_ctx_t ctx, gpgme_data_t keydata, int *nr)
-{
-  gpgme_error_t err = gpgme_op_import (ctx, keydata);
-  if (!err && nr)
-    {
-      gpgme_import_result_t result = gpgme_op_import_result (ctx);
-      *nr = result->considered;
-    }
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/isascii.c b/tags/gpgme-1-1-1/gpgme/isascii.c
deleted file mode 100644 (file)
index 924ced0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 1991,92,93,95,96,97,98,99,2001,2002,2004
-        Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-int
-isascii (int c)
-{
-  return (((c) & ~0x7f) == 0);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/key.c b/tags/gpgme-1-1-1/gpgme/key.c
deleted file mode 100644 (file)
index 3dde670..0000000
+++ /dev/null
@@ -1,722 +0,0 @@
-/* key.c - Key objects.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "util.h"
-#include "ops.h"
-#include "sema.h"
-
-\f
-/* Protects all reference counters in keys.  All other accesses to a
-   key are read only.  */
-DEFINE_STATIC_LOCK (key_ref_lock);
-
-
-/* Create a new key.  */
-gpgme_error_t
-_gpgme_key_new (gpgme_key_t *r_key)
-{
-  gpgme_key_t key;
-
-  key = calloc (1, sizeof *key);
-  if (!key)
-    return gpg_error_from_errno (errno);
-  key->_refs = 1;
-
-  *r_key = key;
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_key_add_subkey (gpgme_key_t key, gpgme_subkey_t *r_subkey)
-{
-  gpgme_subkey_t subkey;
-
-  subkey = calloc (1, sizeof *subkey);
-  if (!subkey)
-    return gpg_error_from_errno (errno);
-  subkey->keyid = subkey->_keyid;
-  subkey->_keyid[16] = '\0';
-
-  if (!key->subkeys)
-    key->subkeys = subkey;
-  if (key->_last_subkey)
-    key->_last_subkey->next = subkey;
-  key->_last_subkey = subkey;
-
-  *r_subkey = subkey;
-  return 0;
-}
-
-
-static char *
-set_user_id_part (char *tail, const char *buf, size_t len)
-{
-  while (len && (buf[len - 1] == ' ' || buf[len - 1] == '\t')) 
-    len--;
-  for (; len; len--)
-    *tail++ = *buf++;
-  *tail++ = 0;
-  return tail;
-}
-
-
-static void
-parse_user_id (char *src, char **name, char **email,
-              char **comment, char *tail)
-{
-  const char *start = NULL;
-  int in_name = 0;
-  int in_email = 0;
-  int in_comment = 0;
-
-  while (*src)
-    {
-      if (in_email)
-       {
-         if (*src == '<')
-           /* Not legal but anyway.  */
-           in_email++;
-         else if (*src == '>')
-           {
-             if (!--in_email && !*email)
-               {
-                 *email = tail;
-                 tail = set_user_id_part (tail, start, src - start);
-               }
-           }
-       }
-      else if (in_comment)
-       {
-         if (*src == '(')
-           in_comment++;
-         else if (*src == ')')
-           {
-             if (!--in_comment && !*comment)
-               {
-                 *comment = tail;
-                 tail = set_user_id_part (tail, start, src - start);
-               }
-           }
-       }
-      else if (*src == '<')
-       {
-         if (in_name)
-           {
-             if (!*name)
-               {
-                 *name = tail;
-                 tail = set_user_id_part (tail, start, src - start);
-               }
-             in_name = 0;
-           }
-         in_email = 1;
-         start = src + 1;
-       }
-      else if (*src == '(')
-       {
-         if (in_name)
-           {
-             if (!*name)
-               {
-                 *name = tail;
-                 tail = set_user_id_part (tail, start, src - start);
-               }
-             in_name = 0;
-           }
-         in_comment = 1;
-         start = src + 1;
-       }
-      else if (!in_name && *src != ' ' && *src != '\t')
-       {
-         in_name = 1;
-         start = src;
-       }    
-      src++;
-    }
-  if (in_name)
-    {
-      if (!*name)
-       {
-         *name = tail;
-         tail = set_user_id_part (tail, start, src - start);
-       }
-    }
-  /* Let unused parts point to an EOS.  */
-  tail--;
-  if (!*name)
-    *name = tail;
-  if (!*email)
-    *email = tail;
-  if (!*comment)
-    *comment = tail;
-}
-
-
-static void
-parse_x509_user_id (char *src, char **name, char **email,
-                   char **comment, char *tail)
-{
-  if (*src == '<' && src[strlen (src) - 1] == '>')
-    *email = src;
-  
-  /* Let unused parts point to an EOS.  */
-  tail--;
-  if (!*name)
-    *name = tail;
-  if (!*email)
-    *email = tail;
-  if (!*comment)
-    *comment = tail;
-}
-
-
-/* Take a name from the --with-colon listing, remove certain escape
-   sequences sequences and put it into the list of UIDs.  */
-gpgme_error_t
-_gpgme_key_append_name (gpgme_key_t key, char *src)
-{
-  gpgme_user_id_t uid;
-  char *dst;
-  int src_len = strlen (src);
-
-  assert (key);
-  /* We can malloc a buffer of the same length, because the converted
-     string will never be larger. Actually we allocate it twice the
-     size, so that we are able to store the parsed stuff there too.  */
-  uid = malloc (sizeof (*uid) + 2 * src_len + 3);
-  if (!uid)
-    return gpg_error_from_errno (errno);
-  memset (uid, 0, sizeof *uid);
-
-  uid->uid = ((char *) uid) + sizeof (*uid);
-  dst = uid->uid;
-  _gpgme_decode_c_string (src, &dst, src_len + 1);
-
-  dst += strlen (dst) + 1;
-  if (key->protocol == GPGME_PROTOCOL_CMS)
-    parse_x509_user_id (uid->uid, &uid->name, &uid->email,
-                       &uid->comment, dst);
-  else
-    parse_user_id (uid->uid, &uid->name, &uid->email,
-                  &uid->comment, dst);
-
-  if (!key->uids)
-    key->uids = uid;
-  if (key->_last_uid)
-    key->_last_uid->next = uid;
-  key->_last_uid = uid;
-
-  return 0;
-}
-
-
-gpgme_key_sig_t
-_gpgme_key_add_sig (gpgme_key_t key, char *src)
-{
-  int src_len = src ? strlen (src) : 0;
-  gpgme_user_id_t uid;
-  gpgme_key_sig_t sig;
-
-  assert (key);        /* XXX */
-
-  uid = key->_last_uid;
-  assert (uid);        /* XXX */
-
-  /* We can malloc a buffer of the same length, because the converted
-     string will never be larger. Actually we allocate it twice the
-     size, so that we are able to store the parsed stuff there too.  */
-  sig = malloc (sizeof (*sig) + 2 * src_len + 3);
-  if (!sig)
-    return NULL;
-  memset (sig, 0, sizeof *sig);
-
-  sig->keyid = sig->_keyid;
-  sig->_keyid[16] = '\0';
-  sig->uid = ((char *) sig) + sizeof (*sig);
-
-  if (src)
-    {
-      char *dst = sig->uid;
-      _gpgme_decode_c_string (src, &dst, src_len + 1);
-      dst += strlen (dst) + 1;
-      if (key->protocol == GPGME_PROTOCOL_CMS)
-       parse_x509_user_id (sig->uid, &sig->name, &sig->email,
-                           &sig->comment, dst);
-      else
-       parse_user_id (sig->uid, &sig->name, &sig->email,
-                      &sig->comment, dst);
-    }
-
-  if (!uid->signatures)
-    uid->signatures = sig;
-  if (uid->_last_keysig)
-    uid->_last_keysig->next = sig;
-  uid->_last_keysig = sig;
-
-  return sig;
-}
-
-\f
-/* Acquire a reference to KEY.  */
-void
-gpgme_key_ref (gpgme_key_t key)
-{
-  LOCK (key_ref_lock);
-  key->_refs++;
-  UNLOCK (key_ref_lock);
-}
-
-
-/* gpgme_key_unref releases the key object.  Note, that this function
-   may not do an actual release if there are other shallow copies of
-   the objects.  You have to call this function for every newly
-   created key object as well as for every gpgme_key_ref() done on the
-   key object.  */
-void
-gpgme_key_unref (gpgme_key_t key)
-{
-  gpgme_user_id_t uid;
-  gpgme_subkey_t subkey;
-
-  if (!key)
-    return;
-
-  LOCK (key_ref_lock);
-  assert (key->_refs > 0);
-  if (--key->_refs)
-    {
-      UNLOCK (key_ref_lock);
-      return;
-    }
-  UNLOCK (key_ref_lock);
-
-  subkey = key->subkeys;
-  while (subkey)
-    {
-      gpgme_subkey_t next = subkey->next;
-      if (subkey->fpr)
-       free (subkey->fpr);
-      free (subkey);
-      subkey = next;
-    }
-
-  uid = key->uids;
-  while (uid)
-    {
-      gpgme_user_id_t next_uid = uid->next;
-      gpgme_key_sig_t keysig = uid->signatures;
-
-      while (keysig)
-       {
-         gpgme_key_sig_t next_keysig = keysig->next;
-         gpgme_sig_notation_t notation = keysig->notations;
-
-         while (notation)
-           {
-             gpgme_sig_notation_t next_notation = notation->next;
-
-             _gpgme_sig_notation_free (notation);
-             notation = next_notation;
-           }
-
-          free (keysig);
-         keysig = next_keysig;
-        }
-      free (uid);
-      uid = next_uid;
-    }
-  
-  if (key->issuer_serial)
-    free (key->issuer_serial);
-  if (key->issuer_name)
-    free (key->issuer_name);
-
-  if (key->chain_id)
-    free (key->chain_id);
-
-  free (key);
-}
-
-\f
-/* Compatibility interfaces.  */
-
-void
-gpgme_key_release (gpgme_key_t key)
-{
-  gpgme_key_unref (key);
-}
-
-
-static const char *
-otrust_to_string (int otrust)
-{
-  switch (otrust)
-    {
-    case GPGME_VALIDITY_NEVER:
-      return "n";
-
-    case GPGME_VALIDITY_MARGINAL:
-      return "m";
-
-    case GPGME_VALIDITY_FULL:
-      return "f";
-
-    case GPGME_VALIDITY_ULTIMATE:
-      return "u";
-
-    default:
-      return "?";
-    }
-}
-
-
-static const char *
-validity_to_string (int validity)
-{
-  switch (validity)
-    {
-    case GPGME_VALIDITY_UNDEFINED:
-      return "q";
-
-    case GPGME_VALIDITY_NEVER:
-      return "n";
-
-    case GPGME_VALIDITY_MARGINAL:
-      return "m";
-
-    case GPGME_VALIDITY_FULL:
-      return "f";
-
-    case GPGME_VALIDITY_ULTIMATE:
-      return "u";
-
-    case GPGME_VALIDITY_UNKNOWN:
-    default:
-      return "?";
-    }
-}
-
-
-static const char *
-capabilities_to_string (gpgme_subkey_t subkey)
-{
-  static const char *const strings[8] =
-    {
-      "",
-      "c",
-      "s",
-      "sc",
-      "e",
-      "ec",
-      "es",
-      "esc"
-    };
-  return strings[(!!subkey->can_encrypt << 2)
-                | (!!subkey->can_sign << 1)
-                | (!!subkey->can_certify)];
-}
-
-
-/* Return the value of the attribute WHAT of ITEM, which has to be
-   representable by a string.  */
-const char *
-gpgme_key_get_string_attr (gpgme_key_t key, _gpgme_attr_t what,
-                          const void *reserved, int idx)
-{
-  gpgme_subkey_t subkey;
-  gpgme_user_id_t uid;
-  int i;
-
-  if (!key || reserved || idx < 0)
-    return NULL;
-
-  /* Select IDXth subkey.  */
-  subkey = key->subkeys;
-  for (i = 0; i < idx; i++)
-    {
-      subkey = subkey->next;
-      if (!subkey)
-       break;
-    }
-
-  /* Select the IDXth user ID.  */
-  uid = key->uids;
-  for (i = 0; i < idx; i++)
-    {
-      uid = uid->next;
-      if (!uid)
-       break;
-    }
-
-  switch (what)
-    {
-    case GPGME_ATTR_KEYID:
-      return subkey ? subkey->keyid : NULL;
-
-    case GPGME_ATTR_FPR:
-      return subkey ? subkey->fpr : NULL;
-
-    case GPGME_ATTR_ALGO:    
-      return subkey ? gpgme_pubkey_algo_name (subkey->pubkey_algo) : NULL;
-
-    case GPGME_ATTR_TYPE:
-      return key->protocol == GPGME_PROTOCOL_CMS ? "X.509" : "PGP";
-
-    case GPGME_ATTR_OTRUST:
-      return otrust_to_string (key->owner_trust);
-
-    case GPGME_ATTR_USERID:  
-      return uid ? uid->uid : NULL;
-
-    case GPGME_ATTR_NAME:   
-      return uid ? uid->name : NULL;
-
-    case GPGME_ATTR_EMAIL:
-      return uid ? uid->email : NULL;
-
-    case GPGME_ATTR_COMMENT:
-      return uid ? uid->comment : NULL;
-
-    case GPGME_ATTR_VALIDITY:
-      return uid ? validity_to_string (uid->validity) : NULL;
-
-    case GPGME_ATTR_KEY_CAPS:    
-      return subkey ? capabilities_to_string (subkey) : NULL;
-
-    case GPGME_ATTR_SERIAL:
-      return key->issuer_serial;
-
-    case GPGME_ATTR_ISSUER:
-      return idx ? NULL : key->issuer_name;
-
-    case GPGME_ATTR_CHAINID:
-      return key->chain_id;
-
-    default:
-      return NULL;
-    }
-}
-
-
-unsigned long
-gpgme_key_get_ulong_attr (gpgme_key_t key, _gpgme_attr_t what,
-                         const void *reserved, int idx)
-{
-  gpgme_subkey_t subkey;
-  gpgme_user_id_t uid;
-  int i;
-
-  if (!key || reserved || idx < 0)
-    return 0;
-
-  /* Select IDXth subkey.  */
-  subkey = key->subkeys;
-  for (i = 0; i < idx; i++)
-    {
-      subkey = subkey->next;
-      if (!subkey)
-       break;
-    }
-
-  /* Select the IDXth user ID.  */
-  uid = key->uids;
-  for (i = 0; i < idx; i++)
-    {
-      uid = uid->next;
-      if (!uid)
-       break;
-    }
-
-  switch (what)
-    {
-    case GPGME_ATTR_ALGO:
-      return subkey ? (unsigned long) subkey->pubkey_algo : 0;
-
-    case GPGME_ATTR_LEN:
-      return subkey ? (unsigned long) subkey->length : 0;
-
-    case GPGME_ATTR_TYPE:
-      return key->protocol == GPGME_PROTOCOL_CMS ? 1 : 0;
-
-    case GPGME_ATTR_CREATED:
-      return (subkey && subkey->timestamp >= 0)
-       ? (unsigned long) subkey->timestamp : 0;
-
-    case GPGME_ATTR_EXPIRE: 
-      return (subkey && subkey->expires >= 0)
-       ? (unsigned long) subkey->expires : 0;
-
-    case GPGME_ATTR_VALIDITY:
-      return uid ? uid->validity : 0;
-
-    case GPGME_ATTR_OTRUST:
-      return key->owner_trust;
-
-    case GPGME_ATTR_IS_SECRET:
-      return !!key->secret;
-
-    case GPGME_ATTR_KEY_REVOKED:
-      return subkey ? subkey->revoked : 0;
-
-    case GPGME_ATTR_KEY_INVALID:
-      return subkey ? subkey->invalid : 0;
-
-    case GPGME_ATTR_KEY_EXPIRED:
-      return subkey ? subkey->expired : 0;
-
-    case GPGME_ATTR_KEY_DISABLED:
-      return subkey ? subkey->disabled : 0;
-
-    case GPGME_ATTR_UID_REVOKED:
-      return uid ? uid->revoked : 0;
-
-    case GPGME_ATTR_UID_INVALID:
-      return uid ? uid->invalid : 0;
-
-    case GPGME_ATTR_CAN_ENCRYPT:
-      return key->can_encrypt;
-
-    case GPGME_ATTR_CAN_SIGN:
-      return key->can_sign;
-
-    case GPGME_ATTR_CAN_CERTIFY:
-      return key->can_certify;
-
-    default:
-      return 0;
-    }
-}
-
-
-static gpgme_key_sig_t
-get_keysig (gpgme_key_t key, int uid_idx, int idx)
-{
-  gpgme_user_id_t uid;
-  gpgme_key_sig_t sig;
-
-  if (!key || uid_idx < 0 || idx < 0)
-    return NULL;
-
-  uid = key->uids;
-  while (uid && uid_idx > 0)
-    {
-      uid = uid->next;
-      uid_idx--;
-    }
-  if (!uid)
-    return NULL;
-
-  sig = uid->signatures;
-  while (sig && idx > 0)
-    {
-      sig = sig->next;
-      idx--;
-    }
-  return sig;
-}
-
-
-const char *
-gpgme_key_sig_get_string_attr (gpgme_key_t key, int uid_idx,
-                              _gpgme_attr_t what,
-                              const void *reserved, int idx)
-{
-  gpgme_key_sig_t certsig = get_keysig (key, uid_idx, idx);
-
-  if (!certsig || reserved)
-    return NULL;
-
-  switch (what)
-    {
-    case GPGME_ATTR_KEYID:
-      return certsig->keyid;
-
-    case GPGME_ATTR_ALGO:    
-      return gpgme_pubkey_algo_name (certsig->pubkey_algo);
-
-    case GPGME_ATTR_USERID:
-      return certsig->uid;
-
-    case GPGME_ATTR_NAME:   
-      return certsig->name;
-
-    case GPGME_ATTR_EMAIL:
-      return certsig->email;
-
-    case GPGME_ATTR_COMMENT:
-      return certsig->comment;
-   
-    default:
-      return NULL;
-    }
-}
-
-
-unsigned long
-gpgme_key_sig_get_ulong_attr (gpgme_key_t key, int uid_idx, _gpgme_attr_t what,
-                             const void *reserved, int idx)
-{
-  gpgme_key_sig_t certsig = get_keysig (key, uid_idx, idx);
-
-  if (!certsig || reserved)
-    return 0;
-
-  switch (what)
-    {
-    case GPGME_ATTR_ALGO:    
-      return (unsigned long) certsig->pubkey_algo;
-
-    case GPGME_ATTR_CREATED: 
-      return certsig->timestamp < 0 ? 0L : (unsigned long) certsig->timestamp;
-
-    case GPGME_ATTR_EXPIRE: 
-      return certsig->expires < 0 ? 0L : (unsigned long) certsig->expires;
-
-    case GPGME_ATTR_KEY_REVOKED:
-      return certsig->revoked;
-
-    case GPGME_ATTR_KEY_INVALID:
-      return certsig->invalid;
-
-    case GPGME_ATTR_KEY_EXPIRED:
-      return certsig->expired;
-
-    case GPGME_ATTR_SIG_CLASS:
-      return certsig->sig_class;
-
-    case GPGME_ATTR_SIG_STATUS:
-      return certsig->status;
-
-    default:
-      return 0;
-    }
-}
diff --git a/tags/gpgme-1-1-1/gpgme/keylist.c b/tags/gpgme-1-1-1/gpgme/keylist.c
deleted file mode 100644 (file)
index 2812975..0000000
+++ /dev/null
@@ -1,964 +0,0 @@
-/* keylist.c - Listing keys.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2006 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-#include "debug.h"
-
-\f
-struct key_queue_item_s
-{
-  struct key_queue_item_s *next;
-  gpgme_key_t key;
-};
-
-typedef struct
-{
-  struct _gpgme_op_keylist_result result;
-
-  gpgme_key_t tmp_key;
-
-  /* This points to the last uid in tmp_key.  */
-  gpgme_user_id_t tmp_uid;
-
-  /* This points to the last sig in tmp_uid.  */
-  gpgme_key_sig_t tmp_keysig;
-
-  /* Something new is available.  */
-  int key_cond;
-  struct key_queue_item_s *key_queue;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  struct key_queue_item_s *key = opd->key_queue;
-
-  if (opd->tmp_key)
-    gpgme_key_unref (opd->tmp_key);
-
-  /* opd->tmp_uid and opd->tmp_keysig are actually part of opd->tmp_key,
-     so we do not need to release them here.  */
-
-  while (key)
-    {
-      struct key_queue_item_s *next = key->next;
-
-      gpgme_key_unref (key->key);
-      key = next;
-    }
-}
-
-
-gpgme_keylist_result_t
-gpgme_op_keylist_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-static gpgme_error_t
-keylist_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_TRUNCATED:
-      opd->result.truncated = 1;
-      break;
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-\f
-static void
-set_subkey_trust_info (gpgme_subkey_t subkey, const char *src)
-{
-  while (*src && !isdigit (*src))
-    {
-      switch (*src)
-       {
-       case 'e':
-         subkey->expired = 1;
-         break;
-
-       case 'r':
-         subkey->revoked = 1;
-         break;
-
-       case 'd':
-          /* Note that gpg 1.3 won't print that anymore but only uses
-             the capabilities field. */
-         subkey->disabled = 1;
-         break;
-
-       case 'i':
-         subkey->invalid = 1;
-         break;
-        }
-      src++;
-    }
-}
-
-
-static void
-set_mainkey_trust_info (gpgme_key_t key, const char *src)
-{
-  /* First set the trust info of the main key (the first subkey).  */
-  set_subkey_trust_info (key->subkeys, src);
-
-  /* Now set the summarized trust info.  */
-  while (*src && !isdigit (*src))
-    {
-      switch (*src)
-       {
-       case 'e':
-         key->expired = 1;
-         break;
-
-       case 'r':
-         key->revoked = 1;
-         break;
-
-       case 'd':
-          /* Note that gpg 1.3 won't print that anymore but only uses
-             the capabilities field.  However, it is still used for
-             external key listings.  */
-         key->disabled = 1;
-         break;
-
-       case 'i':
-         key->invalid = 1;
-         break;
-        }
-      src++;
-    }
-}
-
-
-static void
-set_userid_flags (gpgme_key_t key, const char *src)
-{
-  gpgme_user_id_t uid = key->_last_uid;
-
-  assert (uid);
-  /* Look at letters and stop at the first digit.  */
-  while (*src && !isdigit (*src))
-    {
-      switch (*src)
-       {
-       case 'r':
-         uid->revoked = 1;
-         break;
-         
-       case 'i':
-         uid->invalid = 1;
-         break;
-
-       case 'n':
-         uid->validity = GPGME_VALIDITY_NEVER;
-         break;
-
-       case 'm':
-         uid->validity = GPGME_VALIDITY_MARGINAL;
-         break;
-
-       case 'f':
-         uid->validity = GPGME_VALIDITY_FULL;
-         break;
-
-       case 'u':
-         uid->validity = GPGME_VALIDITY_ULTIMATE;
-         break;
-        }
-      src++;
-    }
-}
-
-
-static void
-set_subkey_capability (gpgme_subkey_t subkey, const char *src)
-{
-  while (*src)
-    {
-      switch (*src)
-       {
-       case 'e':
-         subkey->can_encrypt = 1;
-         break;
-
-       case 's':
-         subkey->can_sign = 1;
-         break;
-
-       case 'c':
-         subkey->can_certify = 1;
-         break;
-
-       case 'a':
-         subkey->can_authenticate = 1;
-         break;
-
-       case 'q':
-         subkey->is_qualified = 1;
-         break;
-
-       case 'd':
-         subkey->disabled = 1;
-         break;
-        }
-      src++;
-    }
-}
-
-
-static void
-set_mainkey_capability (gpgme_key_t key, const char *src)
-{
-  /* First set the capabilities of the main key (the first subkey).  */
-  set_subkey_capability (key->subkeys, src);
-
-  while (*src)
-    {
-      switch (*src)
-       {
-       case 'd':
-        case 'D':
-          /* Note, that this flag is also set using the key validity
-             field for backward compatibility with gpg 1.2.  We use d
-             and D, so that a future gpg version will be able to
-             disable certain subkeys. Currently it is expected that
-             gpg sets this for the primary key. */
-                 key->disabled = 1;
-          break;
-
-       case 'e':
-       case 'E':
-         key->can_encrypt = 1;
-         break;
-
-       case 's':
-       case 'S':
-         key->can_sign = 1;
-         break;
-
-       case 'c':
-       case 'C':
-         key->can_certify = 1;
-         break;
-
-       case 'a':
-       case 'A':
-         key->can_authenticate = 1;
-         break;
-
-       case 'q':
-       case 'Q':
-         key->is_qualified = 1;
-         break;
-        }
-      src++;
-    }
-}
-
-
-static void
-set_ownertrust (gpgme_key_t key, const char *src)
-{
-  /* Look at letters and stop at the first digit.  */
-  while (*src && !isdigit (*src))
-    {
-      switch (*src)
-       {
-       case 'n':
-         key->owner_trust = GPGME_VALIDITY_NEVER;
-         break;
-
-       case 'm':
-         key->owner_trust = GPGME_VALIDITY_MARGINAL;
-         break;
-
-       case 'f':
-         key->owner_trust = GPGME_VALIDITY_FULL;
-         break;
-
-       case 'u':
-         key->owner_trust = GPGME_VALIDITY_ULTIMATE;
-         break;
-
-        default:
-         key->owner_trust = GPGME_VALIDITY_UNKNOWN;
-         break;
-        }
-      src++;
-    }
-}
-
-
-/* We have read an entire key into tmp_key and should now finish it.
-   It is assumed that this releases tmp_key.  */
-static void
-finish_key (gpgme_ctx_t ctx, op_data_t opd)
-{
-  gpgme_key_t key = opd->tmp_key;
-
-  opd->tmp_key = NULL;
-  opd->tmp_uid = NULL;
-  opd->tmp_keysig = NULL;
-
-  if (key)
-    _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_NEXT_KEY, key);
-}
-
-
-/* Note: We are allowed to modify LINE.  */
-static gpgme_error_t
-keylist_colon_handler (void *priv, char *line)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  enum
-    {
-      RT_NONE, RT_SIG, RT_UID, RT_SUB, RT_PUB, RT_FPR,
-      RT_SSB, RT_SEC, RT_CRT, RT_CRS, RT_REV, RT_SPK
-    }
-  rectype = RT_NONE;
-#define NR_FIELDS 16
-  char *field[NR_FIELDS];
-  int fields = 0;
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-  gpgme_key_t key;
-  gpgme_subkey_t subkey = NULL;
-  gpgme_key_sig_t keysig = NULL;
-
-  DEBUG3 ("keylist_colon_handler ctx = %p, key = %p, line = %s\n",
-         ctx, key, line ? line : "(null)");
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  key = opd->tmp_key;
-
-  if (!line)
-    {
-      /* End Of File.  */
-      finish_key (ctx, opd);
-      return 0;
-    }
-
-  while (line && fields < NR_FIELDS)
-    {
-      field[fields++] = line;
-      line = strchr (line, ':');
-      if (line)
-       *(line++) = '\0';
-    }
-
-  if (!strcmp (field[0], "sig"))
-    rectype = RT_SIG;
-  else if (!strcmp (field[0], "rev"))
-    rectype = RT_REV;
-  else if (!strcmp (field[0], "pub"))
-    rectype = RT_PUB;
-  else if (!strcmp (field[0], "sec"))
-    rectype = RT_SEC;
-  else if (!strcmp (field[0], "crt"))
-    rectype = RT_CRT;
-  else if (!strcmp (field[0], "crs"))
-    rectype = RT_CRS;
-  else if (!strcmp (field[0], "fpr") && key) 
-    rectype = RT_FPR;
-  else if (!strcmp (field[0], "uid") && key)
-    rectype = RT_UID;
-  else if (!strcmp (field[0], "sub") && key)
-    rectype = RT_SUB; 
-  else if (!strcmp (field[0], "ssb") && key)
-    rectype = RT_SSB;
-  else if (!strcmp (field[0], "spk") && key)
-    rectype = RT_SPK;
-  else 
-    rectype = RT_NONE;
-
-  /* Only look at signatures immediately following a user ID.  For
-     this, clear the user ID pointer when encountering anything but a
-     signature.  */
-  if (rectype != RT_SIG && rectype != RT_REV)
-    opd->tmp_uid = NULL;
-
-  /* Only look at subpackets immediately following a signature.  For
-     this, clear the signature pointer when encountering anything but
-     a subpacket.  */
-  if (rectype != RT_SPK)
-    opd->tmp_keysig = NULL;
-
-  switch (rectype)
-    {
-    case RT_PUB:
-    case RT_SEC:
-    case RT_CRT:
-    case RT_CRS:
-      /* Start a new keyblock.  */
-      err = _gpgme_key_new (&key);
-      if (err)
-       return err;
-      key->keylist_mode = ctx->keylist_mode;
-      err = _gpgme_key_add_subkey (key, &subkey);
-      if (err)
-       {
-         gpgme_key_unref (key);
-         return err;
-       }
-
-      if (rectype == RT_SEC || rectype == RT_CRS)
-       key->secret = subkey->secret = 1;
-      if (rectype == RT_CRT || rectype == RT_CRS)
-       key->protocol = GPGME_PROTOCOL_CMS;
-      finish_key (ctx, opd);
-      opd->tmp_key = key;
-
-      /* Field 2 has the trust info.  */
-      if (fields >= 2)
-       set_mainkey_trust_info (key, field[1]);
-
-      /* Field 3 has the key length.  */
-      if (fields >= 3)
-       {
-         int i = atoi (field[2]);
-         /* Ignore invalid values.  */
-         if (i > 1)
-           subkey->length = i; 
-       }
-
-      /* Field 4 has the public key algorithm.  */
-      if (fields >= 4)
-       {
-         int i = atoi (field[3]);
-         if (i >= 1 && i < 128)
-           subkey->pubkey_algo = i;
-       }
-
-      /* Field 5 has the long keyid.  Allow short key IDs for the
-        output of an external keyserver listing.  */
-      if (fields >= 5 && strlen (field[4]) <= DIM(subkey->_keyid) - 1)
-       strcpy (subkey->_keyid, field[4]);
-
-      /* Field 6 has the timestamp (seconds).  */
-      if (fields >= 6)
-       subkey->timestamp = _gpgme_parse_timestamp (field[5], NULL);
-
-      /* Field 7 has the expiration time (seconds).  */
-      if (fields >= 7)
-       subkey->expires = _gpgme_parse_timestamp (field[6], NULL);
-
-      /* Field 8 has the X.509 serial number.  */
-      if (fields >= 8 && (rectype == RT_CRT || rectype == RT_CRS))
-       {
-         key->issuer_serial = strdup (field[7]);
-         if (!key->issuer_serial)
-           return gpg_error_from_errno (errno);
-       }
-         
-      /* Field 9 has the ownertrust.  */
-      if (fields >= 9)
-       set_ownertrust (key, field[8]);
-
-      /* Field 10 is not used for gpg due to --fixed-list-mode option
-        but GPGSM stores the issuer name.  */
-      if (fields >= 10 && (rectype == RT_CRT || rectype == RT_CRS))
-       if (_gpgme_decode_c_string (field[9], &key->issuer_name, 0))
-         return gpg_error (GPG_ERR_ENOMEM);    /* FIXME */
-
-      /* Field 11 has the signature class.  */
-
-      /* Field 12 has the capabilities.  */
-      if (fields >= 12)
-       set_mainkey_capability (key, field[11]);
-
-      /* Field 15 carries special flags of a secret key.  We reset the
-         SECRET flag of a subkey here if the key is actually only a
-         stub. The SECRET flag of the key will be true even then. */
-      if (fields >= 15 && key->secret)
-        if (*field[14] == '#')
-          subkey->secret = 0;
-      break;
-
-    case RT_SUB:
-    case RT_SSB:
-      /* Start a new subkey.  */
-      err = _gpgme_key_add_subkey (key, &subkey);
-      if (err)
-       return err;
-
-      if (rectype == RT_SSB)
-       subkey->secret = 1;
-
-      /* Field 2 has the trust info.  */
-      if (fields >= 2)
-       set_subkey_trust_info (subkey, field[1]);
-
-      /* Field 3 has the key length.  */
-      if (fields >= 3)
-       {
-         int i = atoi (field[2]);
-         /* Ignore invalid values.  */
-         if (i > 1)
-           subkey->length = i;
-       }
-
-      /* Field 4 has the public key algorithm.  */
-      if (fields >= 4)
-       {
-         int i = atoi (field[3]);
-         if (i >= 1 && i < 128)
-           subkey->pubkey_algo = i;
-       }
-
-      /* Field 5 has the long keyid.  */
-      if (fields >= 5 && strlen (field[4]) == DIM(subkey->_keyid) - 1)
-       strcpy (subkey->_keyid, field[4]);
-
-      /* Field 6 has the timestamp (seconds).  */
-      if (fields >= 6)
-       subkey->timestamp = _gpgme_parse_timestamp (field[5], NULL);
-
-      /* Field 7 has the expiration time (seconds).  */
-      if (fields >= 7)
-       subkey->expires = _gpgme_parse_timestamp (field[6], NULL);
-
-      /* Field 8 is reserved (LID).  */
-      /* Field 9 has the ownertrust.  */
-      /* Field 10, the user ID, is n/a for a subkey.  */
-      
-      /* Field 11 has the signature class.  */
-
-      /* Field 12 has the capabilities.  */
-      if (fields >= 12)
-       set_subkey_capability (subkey, field[11]);
-
-      /* Field 15 carries special flags of a secret key. */
-      if (fields >= 15 && key->secret)
-        if (*field[14] == '#')
-          subkey->secret = 0;
-      break;
-
-    case RT_UID:
-      /* Field 2 has the trust info, and field 10 has the user ID.  */
-      if (fields >= 10)
-       {
-         if (_gpgme_key_append_name (key, field[9]))
-           return gpg_error_from_errno (GPG_ERR_ENOMEM);       /* FIXME */
-         else
-           {
-             if (field[1])
-               set_userid_flags (key, field[1]);
-             opd->tmp_uid = key->_last_uid;
-           }
-       }
-      break;
-
-    case RT_FPR:
-      /* Field 10 has the fingerprint (take only the first one).  */
-      if (fields >= 10 && field[9] && *field[9])
-       {
-          /* Need to apply it to the last subkey because all subkeys
-             do have fingerprints. */
-          subkey = key->_last_subkey;
-          if (!subkey->fpr)
-            {
-              subkey->fpr = strdup (field[9]);
-              if (!subkey->fpr)
-                return gpg_error_from_errno (errno);
-            }
-       }
-
-      /* Field 13 has the gpgsm chain ID (take only the first one).  */
-      if (fields >= 13 && !key->chain_id && *field[12])
-       {
-         key->chain_id = strdup (field[12]);
-         if (!key->chain_id)
-           return gpg_error_from_errno (errno);
-       }
-      break;
-
-    case RT_SIG:
-    case RT_REV:
-      if (!opd->tmp_uid)
-       return 0;
-
-      /* Start a new (revoked) signature.  */
-      assert (opd->tmp_uid == key->_last_uid);
-      keysig = _gpgme_key_add_sig (key, (fields >= 10) ? field[9] : NULL);
-      if (!keysig)
-       return gpg_error (GPG_ERR_ENOMEM);      /* FIXME */
-
-      /* Field 2 has the calculated trust ('!', '-', '?', '%').  */
-      if (fields >= 2)
-       switch (field[1][0])
-         {
-         case '!':
-           keysig->status = gpg_error (GPG_ERR_NO_ERROR);
-           break;
-
-         case '-':
-           keysig->status = gpg_error (GPG_ERR_BAD_SIGNATURE);
-           break;
-
-         case '?':
-           keysig->status = gpg_error (GPG_ERR_NO_PUBKEY);
-           break;
-
-         case '%':
-           keysig->status = gpg_error (GPG_ERR_GENERAL);
-           break;
-
-         default:
-           keysig->status = gpg_error (GPG_ERR_NO_ERROR);
-           break;
-         }
-
-      /* Field 4 has the public key algorithm.  */
-      if (fields >= 4)
-       {
-         int i = atoi (field[3]);
-         if (i >= 1 && i < 128)
-           keysig->pubkey_algo = i;
-       }
-      
-      /* Field 5 has the long keyid.  */
-      if (fields >= 5 && strlen (field[4]) == DIM(keysig->_keyid) - 1)
-       strcpy (keysig->_keyid, field[4]);
-      
-      /* Field 6 has the timestamp (seconds).  */
-      if (fields >= 6)
-       keysig->timestamp = _gpgme_parse_timestamp (field[5], NULL);
-
-      /* Field 7 has the expiration time (seconds).  */
-      if (fields >= 7)
-       keysig->expires = _gpgme_parse_timestamp (field[6], NULL);
-
-      /* Field 11 has the signature class (eg, 0x30 means revoked).  */
-      if (fields >= 11)
-       if (field[10][0] && field[10][1])
-         {
-           int sig_class = _gpgme_hextobyte (field[10]);
-           if (sig_class >= 0)
-             {
-               keysig->sig_class = sig_class;
-               keysig->class = keysig->sig_class;
-               if (sig_class == 0x30)
-                 keysig->revoked = 1;
-             }
-           if (field[10][2] == 'x')
-             keysig->exportable = 1;
-         }
-
-      opd->tmp_keysig = keysig;
-      break;
-
-    case RT_SPK:
-      if (!opd->tmp_keysig)
-       return 0;
-      assert (opd->tmp_keysig == key->_last_uid->_last_keysig);
-
-      if (fields >= 4)
-       {
-         /* Field 2 has the subpacket type.  */
-         int type = atoi (field[1]);
-
-         /* Field 3 has the flags.  */
-         int flags = atoi (field[2]);
-
-         /* Field 4 has the length.  */
-         int len = atoi (field[3]);
-
-         /* Field 5 has the data.  */
-         char *data = field[4];
-
-         /* Type 20: Notation data.  */
-         /* Type 26: Policy URL.  */
-         if (type == 20 || type == 26)
-           {
-             gpgme_sig_notation_t notation;
-
-             keysig = opd->tmp_keysig;
-
-             /* At this time, any error is serious.  */
-             err = _gpgme_parse_notation (&notation, type, flags, len, data);
-             if (err)
-               return err;
-
-             /* Add a new notation.  FIXME: Could be factored out.  */
-             if (!keysig->notations)
-               keysig->notations = notation;
-             if (keysig->_last_notation)
-               keysig->_last_notation->next = notation;
-             keysig->_last_notation = notation;
-           }
-       }
-    
-    case RT_NONE:
-      /* Unknown record.  */
-      break;
-    }
-  return 0;
-}
-
-
-void
-_gpgme_op_keylist_event_cb (void *data, gpgme_event_io_t type, void *type_data)
-{
-  gpgme_error_t err;
-  gpgme_ctx_t ctx = (gpgme_ctx_t) data;
-  gpgme_key_t key = (gpgme_key_t) type_data;
-  void *hook;
-  op_data_t opd;
-  struct key_queue_item_s *q, *q2;
-
-  assert (type == GPGME_EVENT_NEXT_KEY);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return;
-
-  q = malloc (sizeof *q);
-  if (!q)
-    {
-      gpgme_key_unref (key);
-      /* FIXME       return GPGME_Out_Of_Core; */
-      return;
-    }
-  q->key = key;
-  q->next = NULL;
-  /* FIXME: Use a tail pointer?  */
-  if (!(q2 = opd->key_queue))
-    opd->key_queue = q;
-  else
-    {
-      for (; q2->next; q2 = q2->next)
-       ;
-      q2->next = q;
-    }
-  opd->key_cond = 1;
-}
-
-
-/* Start a keylist operation within CTX, searching for keys which
-   match PATTERN.  If SECRET_ONLY is true, only secret keys are
-   returned.  */
-gpgme_error_t
-gpgme_op_keylist_start (gpgme_ctx_t ctx, const char *pattern, int secret_only)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_reset (ctx, 2);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, keylist_status_handler, ctx);
-
-  err = _gpgme_engine_set_colon_line_handler (ctx->engine,
-                                             keylist_colon_handler, ctx);
-  if (err)
-    return err;
-
-  return _gpgme_engine_op_keylist (ctx->engine, pattern, secret_only,
-                                  ctx->keylist_mode);
-}
-
-
-/* Start a keylist operation within CTX, searching for keys which
-   match PATTERN.  If SECRET_ONLY is true, only secret keys are
-   returned.  */
-gpgme_error_t
-gpgme_op_keylist_ext_start (gpgme_ctx_t ctx, const char *pattern[],
-                           int secret_only, int reserved)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_reset (ctx, 2);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, keylist_status_handler, ctx);
-  err = _gpgme_engine_set_colon_line_handler (ctx->engine,
-                                             keylist_colon_handler, ctx);
-  if (err)
-    return err;
-
-  return _gpgme_engine_op_keylist_ext (ctx->engine, pattern, secret_only,
-                                      reserved, ctx->keylist_mode);
-}
-
-
-/* Return the next key from the keylist in R_KEY.  */
-gpgme_error_t
-gpgme_op_keylist_next (gpgme_ctx_t ctx, gpgme_key_t *r_key)
-{
-  gpgme_error_t err;
-  struct key_queue_item_s *queue_item;
-  void *hook;
-  op_data_t opd;
-
-  if (!ctx || !r_key)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  *r_key = NULL;
-  if (!ctx)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_KEYLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  if (!opd->key_queue)
-    {
-      err = _gpgme_wait_on_condition (ctx, &opd->key_cond);
-      if (err)
-       return err;
-
-      if (!opd->key_cond)
-       return gpg_error (GPG_ERR_EOF);
-
-      opd->key_cond = 0; 
-      assert (opd->key_queue);
-    }
-  queue_item = opd->key_queue;
-  opd->key_queue = queue_item->next;
-  if (!opd->key_queue)
-    opd->key_cond = 0;
-  
-  *r_key = queue_item->key;
-  free (queue_item);
-  return 0;
-}
-
-
-/* Terminate a pending keylist operation within CTX.  */
-gpgme_error_t
-gpgme_op_keylist_end (gpgme_ctx_t ctx)
-{
-  if (!ctx)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  return 0;
-}
-
-\f
-/* Get the key with the fingerprint FPR from the crypto backend.  If
-   SECRET is true, get the secret key.  */
-gpgme_error_t
-gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
-              int secret)
-{
-  gpgme_ctx_t listctx;
-  gpgme_error_t err;
-  gpgme_key_t key;
-
-  if (!ctx || !r_key || !fpr)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  
-  if (strlen (fpr) < 8)        /* We have at least a key ID.  */
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  /* FIXME: We use our own context because we have to avoid the user's
-     I/O callback handlers.  */
-  err = gpgme_new (&listctx);
-  if (err)
-    return err;
-  gpgme_set_protocol (listctx, gpgme_get_protocol (ctx));
-  gpgme_set_keylist_mode (listctx, ctx->keylist_mode);
-  err = gpgme_op_keylist_start (listctx, fpr, secret);
-  if (!err)
-    err = gpgme_op_keylist_next (listctx, r_key);
-  if (!err)
-    {
-      err = gpgme_op_keylist_next (listctx, &key);
-      if (gpgme_err_code (err) == GPG_ERR_EOF)
-       err = gpg_error (GPG_ERR_NO_ERROR);
-      else
-       {
-         if (!err)
-           {
-             gpgme_key_unref (key);
-             err = gpg_error (GPG_ERR_AMBIGUOUS_NAME);
-           }
-         gpgme_key_unref (*r_key);
-       }
-    }
-  gpgme_release (listctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/libgpgme.vers b/tags/gpgme-1-1-1/gpgme/libgpgme.vers
deleted file mode 100644 (file)
index da90a77..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-# libgpgme.vers - List of symbols to export.
-# Copyright (C) 2002, 2004, 2005 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser general Public License as
-# published by the Free Software Foundation; either version 2.1 of
-# the License, or (at your option) any later version.
-#
-# GPGME 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser 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
-
-#-------------------------------------------------------
-# Please remember to add new functions also to gpgme.def
-#-------------------------------------------------------
-
-GPGME_1.1 {
-  global:
-    gpgme_set_engine_info;
-
-    gpgme_ctx_get_engine_info;
-    gpgme_ctx_set_engine_info;
-
-    gpgme_data_set_file_name;
-    gpgme_data_get_file_name;
-
-    gpgme_sig_notation_clear;
-    gpgme_sig_notation_add;
-    gpgme_sig_notation_get;
-
-    gpgme_free;
-};
-
-
-GPGME_1.0 {
-  global:
-    gpgme_check_version;
-    gpgme_get_engine_info;
-    gpgme_engine_check_version;
-
-    gpgme_err_code_from_errno;
-    gpgme_err_code_to_errno;
-    gpgme_err_make_from_errno;
-    gpgme_error_from_errno;
-    gpgme_strerror;
-    gpgme_strerror_r;
-    gpgme_strsource;
-
-    gpgme_data_get_encoding;
-    gpgme_data_new;
-    gpgme_data_new_from_cbs;
-    gpgme_data_new_from_fd;
-    gpgme_data_new_from_file;
-    gpgme_data_new_from_filepart;
-    gpgme_data_new_from_mem;
-    gpgme_data_new_from_stream;
-    gpgme_data_read;
-    gpgme_data_release;
-    gpgme_data_release_and_get_mem;
-    gpgme_data_seek;
-    gpgme_data_set_encoding;
-    gpgme_data_write;
-
-    gpgme_get_protocol_name;
-    gpgme_hash_algo_name;
-    gpgme_pubkey_algo_name;
-
-    gpgme_new;
-    gpgme_get_armor;
-    gpgme_get_include_certs;
-    gpgme_get_io_cbs;
-    gpgme_get_keylist_mode;
-    gpgme_get_passphrase_cb;
-    gpgme_get_progress_cb;
-    gpgme_get_protocol;
-    gpgme_get_textmode;
-    gpgme_release;
-    gpgme_set_armor;
-    gpgme_set_include_certs;
-    gpgme_set_io_cbs;
-    gpgme_set_keylist_mode;
-    gpgme_set_locale;
-    gpgme_set_passphrase_cb;
-    gpgme_set_progress_cb;
-    gpgme_set_protocol;
-    gpgme_set_textmode;
-    gpgme_signers_add;
-    gpgme_signers_clear;
-    gpgme_signers_enum;
-
-    gpgme_key_ref;
-    gpgme_key_unref;
-    gpgme_key_release;
-
-    gpgme_trust_item_ref;
-    gpgme_trust_item_unref;
-
-    gpgme_cancel;
-    gpgme_op_card_edit;
-    gpgme_op_card_edit_start;
-    gpgme_op_decrypt;
-    gpgme_op_decrypt_result;
-    gpgme_op_decrypt_start;
-    gpgme_op_decrypt_verify;
-    gpgme_op_decrypt_verify_start;
-    gpgme_op_delete;
-    gpgme_op_delete_start;
-    gpgme_op_edit;
-    gpgme_op_edit_start;
-    gpgme_op_encrypt;
-    gpgme_op_encrypt_result;
-    gpgme_op_encrypt_sign;
-    gpgme_op_encrypt_sign_start;
-    gpgme_op_encrypt_start;
-    gpgme_op_export;
-    gpgme_op_export_ext;
-    gpgme_op_export_ext_start;
-    gpgme_op_export_start;
-    gpgme_op_genkey;
-    gpgme_op_genkey_result;
-    gpgme_op_genkey_start;
-    gpgme_get_key;
-    gpgme_op_import;
-    gpgme_op_import_result;
-    gpgme_op_import_start;
-    gpgme_op_keylist_end;
-    gpgme_op_keylist_ext_start;
-    gpgme_op_keylist_next;
-    gpgme_op_keylist_result;
-    gpgme_op_keylist_start;
-    gpgme_op_sign;
-    gpgme_op_sign_result;
-    gpgme_op_sign_start;
-    gpgme_op_trustlist_end;
-    gpgme_op_trustlist_next;
-    gpgme_op_trustlist_start;
-    gpgme_op_verify;
-    gpgme_op_verify_result;
-    gpgme_op_verify_start;
-    gpgme_wait;
-
-    gpgme_data_new_with_read_cb;
-    gpgme_data_rewind;
-    gpgme_get_sig_status;
-    gpgme_get_sig_string_attr;
-    gpgme_get_sig_ulong_attr;
-    gpgme_get_sig_key;
-    gpgme_key_get_string_attr;
-    gpgme_key_get_ulong_attr;
-    gpgme_key_sig_get_string_attr;
-    gpgme_key_sig_get_ulong_attr;
-    gpgme_op_import_ext;
-    gpgme_trust_item_get_int_attr;
-    gpgme_trust_item_get_string_attr;
-    gpgme_trust_item_release;
-
-  local:
-    *;
-
-};
diff --git a/tags/gpgme-1-1-1/gpgme/memrchr.c b/tags/gpgme-1-1-1/gpgme/memrchr.c
deleted file mode 100644 (file)
index 21662b1..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-/* memrchr -- find the last occurrence of a byte in a memory block
-   Copyright (C) 1991, 93, 96, 97, 99, 2000 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
-   with help from Dan Sahlin (dan@sics.se) and
-   commentary by Jim Blandy (jimb@ai.mit.edu);
-   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
-   and implemented by Roland McGrath (roland@ai.mit.edu).
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <stdlib.h>
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#undef __ptr_t
-#if defined __cplusplus || (defined __STDC__ && __STDC__)
-# define __ptr_t void *
-#else /* Not C++ or ANSI C.  */
-# define __ptr_t char *
-#endif /* C++ or ANSI C.  */
-
-#if defined _LIBC
-# include <string.h>
-# include <memcopy.h>
-#else
-# define reg_char char
-#endif
-
-#if defined HAVE_LIMITS_H || defined _LIBC
-# include <limits.h>
-#endif
-
-#define LONG_MAX_32_BITS 2147483647
-
-#ifndef LONG_MAX
-# define LONG_MAX LONG_MAX_32_BITS
-#endif
-
-#include <sys/types.h>
-
-#undef __memrchr
-#undef memrchr
-
-#ifndef weak_alias
-# define __memrchr memrchr
-#endif
-
-/* Search no more than N bytes of S for C.  */
-__ptr_t
-__memrchr (s, c_in, n)
-     const __ptr_t s;
-     int c_in;
-     size_t n;
-{
-  const unsigned char *char_ptr;
-  const unsigned long int *longword_ptr;
-  unsigned long int longword, magic_bits, charmask;
-  unsigned reg_char c;
-
-  c = (unsigned char) c_in;
-
-  /* Handle the last few characters by reading one character at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s + n;
-       n > 0 && ((unsigned long int) char_ptr
-                & (sizeof (longword) - 1)) != 0;
-       --n)
-    if (*--char_ptr == c)
-      return (__ptr_t) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to 8-byte longwords.  */
-
-  longword_ptr = (const unsigned long int *) char_ptr;
-
-  /* Bits 31, 24, 16, and 8 of this number are zero.  Call these bits
-     the "holes."  Note that there is a hole just to the left of
-     each byte, with an extra at the end:
-
-     bits:  01111110 11111110 11111110 11111111
-     bytes: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD
-
-     The 1-bits make sure that carries propagate to the next 0-bit.
-     The 0-bits provide holes for carries to fall into.  */
-
-  if (sizeof (longword) != 4 && sizeof (longword) != 8)
-    abort ();
-
-#if LONG_MAX <= LONG_MAX_32_BITS
-  magic_bits = 0x7efefeff;
-#else
-  magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
-#endif
-
-  /* Set up a longword, each of whose bytes is C.  */
-  charmask = c | (c << 8);
-  charmask |= charmask << 16;
-#if LONG_MAX > LONG_MAX_32_BITS
-  charmask |= charmask << 32;
-#endif
-
-  /* Instead of the traditional loop which tests each character,
-     we will test a longword at a time.  The tricky part is testing
-     if *any of the four* bytes in the longword in question are zero.  */
-  while (n >= sizeof (longword))
-    {
-      /* We tentatively exit the loop if adding MAGIC_BITS to
-        LONGWORD fails to change any of the hole bits of LONGWORD.
-
-        1) Is this safe?  Will it catch all the zero bytes?
-        Suppose there is a byte with all zeros.  Any carry bits
-        propagating from its left will fall into the hole at its
-        least significant bit and stop.  Since there will be no
-        carry from its most significant bit, the LSB of the
-        byte to the left will be unchanged, and the zero will be
-        detected.
-
-        2) Is this worthwhile?  Will it ignore everything except
-        zero bytes?  Suppose every byte of LONGWORD has a bit set
-        somewhere.  There will be a carry into bit 8.  If bit 8
-        is set, this will carry into bit 16.  If bit 8 is clear,
-        one of bits 9-15 must be set, so there will be a carry
-        into bit 16.  Similarly, there will be a carry into bit
-        24.  If one of bits 24-30 is set, there will be a carry
-        into bit 31, so all of the hole bits will be changed.
-
-        The one misfire occurs when bits 24-30 are clear and bit
-        31 is set; in this case, the hole at bit 31 is not
-        changed.  If we had access to the processor carry flag,
-        we could close this loophole by putting the fourth hole
-        at bit 32!
-
-        So it ignores everything except 128's, when they're aligned
-        properly.
-
-        3) But wait!  Aren't we looking for C, not zero?
-        Good point.  So what we do is XOR LONGWORD with a longword,
-        each of whose bytes is C.  This turns each byte that is C
-        into a zero.  */
-
-      longword = *--longword_ptr ^ charmask;
-
-      /* Add MAGIC_BITS to LONGWORD.  */
-      if ((((longword + magic_bits)
-
-           /* Set those bits that were unchanged by the addition.  */
-           ^ ~longword)
-
-          /* Look at only the hole bits.  If any of the hole bits
-             are unchanged, most likely one of the bytes was a
-             zero.  */
-          & ~magic_bits) != 0)
-       {
-         /* Which of the bytes was C?  If none of them were, it was
-            a misfire; continue the search.  */
-
-         const unsigned char *cp = (const unsigned char *) longword_ptr;
-
-#if LONG_MAX > 2147483647
-         if (cp[7] == c)
-           return (__ptr_t) &cp[7];
-         if (cp[6] == c)
-           return (__ptr_t) &cp[6];
-         if (cp[5] == c)
-           return (__ptr_t) &cp[5];
-         if (cp[4] == c)
-           return (__ptr_t) &cp[4];
-#endif
-         if (cp[3] == c)
-           return (__ptr_t) &cp[3];
-         if (cp[2] == c)
-           return (__ptr_t) &cp[2];
-         if (cp[1] == c)
-           return (__ptr_t) &cp[1];
-         if (cp[0] == c)
-           return (__ptr_t) cp;
-       }
-
-      n -= sizeof (longword);
-    }
-
-  char_ptr = (const unsigned char *) longword_ptr;
-
-  while (n-- > 0)
-    {
-      if (*--char_ptr == c)
-       return (__ptr_t) char_ptr;
-    }
-
-  return 0;
-}
-#ifdef weak_alias
-weak_alias (__memrchr, memrchr)
-#endif
diff --git a/tags/gpgme-1-1-1/gpgme/mkstatus b/tags/gpgme-1-1-1/gpgme/mkstatus
deleted file mode 100755 (executable)
index e64ab19..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-# mkstatus - Extract error strings from rungpg.h
-#            and create a lookup table
-#      Copyright (C) 2000 Werner Koch (dd9jn)
-#       Copyright (C) 2001 g10 Code GmbH
-#
-# This file is part of GPGME.
-#
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-# resetting collate is important, so that the bsearch works properly
-LC_ALL=C
-LC_COLLATE=C
-export LC_ALL LC_COLLATE
-
-cat <<EOF
-/* Generated automatically by mkstatus */
-/* Do not edit! */
-
-struct status_table_s {
-    const char *name;
-    gpgme_status_code_t code;
-};
-
-static struct status_table_s status_table[] = 
-{
-EOF
-
-awk '
-/GPGME_STATUS_ENTER/      { okay = 1 }
-!okay                     { next }
-/}/                       { exit 0 }
-/GPGME_STATUS_[A-Za-z_]*/ { sub (/,/, "", $1); printf "  { \"%s\", %s },\n", substr($1,14), $1 }
-' | sort  
-
-cat <<EOF
-  {NULL, 0}
-};
-
-EOF
diff --git a/tags/gpgme-1-1-1/gpgme/op-support.c b/tags/gpgme-1-1-1/gpgme/op-support.c
deleted file mode 100644 (file)
index 68ff77d..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/* op-support.c 
-   Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-gpgme_error_t
-_gpgme_op_data_lookup (gpgme_ctx_t ctx, ctx_op_data_id_t type, void **hook,
-                      int size, void (*cleanup) (void *))
-{
-  struct ctx_op_data *data = ctx->op_data;
-  while (data && data->type != type)
-    data = data->next;
-  if (!data)
-    {
-      if (size < 0)
-       {
-         *hook = NULL;
-         return 0;
-       }
-
-      data = calloc (1, sizeof (struct ctx_op_data) + size);
-      if (!data)
-       return gpg_error_from_errno (errno);
-      data->next = ctx->op_data;
-      data->type = type;
-      data->cleanup = cleanup;
-      data->hook = (void *) (((char *) data) + sizeof (struct ctx_op_data));
-      ctx->op_data = data;
-    }
-  *hook = data->hook;
-  return 0;
-}
-
-
-/* type is: 0: asynchronous operation (use global or user event loop).
-            1: synchronous operation (always use private event loop).
-            2: asynchronous private operation (use private or user
-            event loop).  */
-gpgme_error_t
-_gpgme_op_reset (gpgme_ctx_t ctx, int type)
-{
-  gpgme_error_t err = 0;
-  gpgme_engine_info_t info;
-  struct gpgme_io_cbs io_cbs;
-
-  info = ctx->engine_info;
-  while (info && info->protocol != ctx->protocol)
-    info = info->next;
-
-  if (!info)
-    return gpg_error (GPG_ERR_UNSUPPORTED_PROTOCOL);
-
-  _gpgme_release_result (ctx);
-
-  if (ctx->engine)
-    {
-      _gpgme_engine_release (ctx->engine);
-      ctx->engine = NULL;
-    }
-
-  /* Create an engine object.  */
-  err = _gpgme_engine_new (info, &ctx->engine,
-                          ctx->lc_ctype, ctx->lc_messages);
-  if (err)
-    return err;
-
-  if (type == 1 || (type == 2 && !ctx->io_cbs.add))
-    {
-      /* Use private event loop.  */
-      io_cbs.add = _gpgme_add_io_cb;
-      io_cbs.add_priv = ctx;
-      io_cbs.remove = _gpgme_remove_io_cb;
-      io_cbs.event = _gpgme_wait_private_event_cb;
-      io_cbs.event_priv = ctx;
-    }
-  else if (! ctx->io_cbs.add)
-    {
-      /* Use global event loop.  */
-      io_cbs.add = _gpgme_add_io_cb;
-      io_cbs.add_priv = ctx;
-      io_cbs.remove = _gpgme_remove_io_cb;
-      io_cbs.event = _gpgme_wait_global_event_cb;
-      io_cbs.event_priv = ctx;
-    }
-  else
-    {
-      /* Use user event loop.  */
-      io_cbs.add = _gpgme_wait_user_add_io_cb;
-      io_cbs.add_priv = ctx;
-      io_cbs.remove = _gpgme_wait_user_remove_io_cb;
-      io_cbs.event = _gpgme_wait_user_event_cb;
-      io_cbs.event_priv = ctx;
-    }
-  _gpgme_engine_set_io_cbs (ctx->engine, &io_cbs);
-  return err;
-}
-
-\f
-/* Parse the INV_RECP status line in ARGS and return the result in
-   KEY.  */
-gpgme_error_t
-_gpgme_parse_inv_recp (char *args, gpgme_invalid_key_t *key)
-{
-  gpgme_invalid_key_t inv_key;
-  char *tail;
-  long int reason;
-
-  inv_key = malloc (sizeof (*inv_key));
-  if (!inv_key)
-    return gpg_error_from_errno (errno);
-  inv_key->next = NULL;
-  errno = 0;
-  reason = strtol (args, &tail, 0);
-  if (errno || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (inv_key);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-
-  switch (reason)
-    {
-    default:
-    case 0:
-      inv_key->reason = gpg_error (GPG_ERR_GENERAL);
-      break;
-
-    case 1:
-      inv_key->reason = gpg_error (GPG_ERR_NO_PUBKEY);
-      break;
-
-    case 2:
-      inv_key->reason = gpg_error (GPG_ERR_AMBIGUOUS_NAME);
-      break;
-
-    case 3:
-      inv_key->reason = gpg_error (GPG_ERR_WRONG_KEY_USAGE);
-      break;
-
-    case 4:
-      inv_key->reason = gpg_error (GPG_ERR_CERT_REVOKED);
-      break;
-
-    case 5:
-      inv_key->reason = gpg_error (GPG_ERR_CERT_EXPIRED);
-      break;
-
-    case 6:
-      inv_key->reason = gpg_error (GPG_ERR_NO_CRL_KNOWN);
-      break;
-
-    case 7:
-      inv_key->reason = gpg_error (GPG_ERR_CRL_TOO_OLD);
-      break;
-
-    case 8:
-      inv_key->reason = gpg_error (GPG_ERR_NO_POLICY_MATCH);
-      break;
-
-    case 9:
-      inv_key->reason = gpg_error (GPG_ERR_NO_SECKEY);
-      break;
-
-    case 10:
-      inv_key->reason = gpg_error (GPG_ERR_PUBKEY_NOT_TRUSTED);
-      break;
-    }
-
-  while (*tail == ' ')
-    tail++;
-  if (*tail)
-    {
-      inv_key->fpr = strdup (tail);
-      if (!inv_key->fpr)
-       {
-         int saved_errno = errno;
-         free (inv_key);
-         return gpg_error_from_errno (saved_errno);
-       }
-    }
-  else
-    inv_key->fpr = NULL;
-
-  *key = inv_key;
-  return 0;
-}
-
-
-/* Parse the PLAINTEXT status line in ARGS and return the result in
-   FILENAMEP.  */
-gpgme_error_t
-_gpgme_parse_plaintext (char *args, char **filenamep)
-{
-  char *tail;
-
-  while (*args == ' ')
-    args++;
-  if (*args == '\0')
-    return 0;
-
-  /* First argument is file type.  */
-  while (*args != ' ' && *args != '\0')
-    args++;
-  while (*args == ' ')
-    args++;
-  if (*args == '\0')
-    return 0;
-
-  /* Second argument is the timestamp.  */
-  while (*args != ' ' && *args != '\0')
-    args++;
-  while (*args == ' ')
-    args++;
-  if (*args == '\0')
-    return 0;
-
-  tail = args;
-  while (*tail != ' ' && *tail != '\0')
-    tail++;
-  *tail = '\0';
-  if (filenamep && *args != '\0')
-    {
-      char *filename = strdup (args);
-      if (!filename)
-       return gpg_error_from_errno (errno);
-
-      *filenamep = filename;
-    }
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/ops.h b/tags/gpgme-1-1-1/gpgme/ops.h
deleted file mode 100644 (file)
index d6a09e5..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/* ops.h - Internal operation support.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef OPS_H
-#define OPS_H
-
-#include "gpgme.h"
-#include "context.h"
-
-\f
-/* From gpgme.c.  */
-void _gpgme_release_result (gpgme_ctx_t ctx);
-
-\f
-/* From wait.c.  */
-gpgme_error_t _gpgme_wait_one (gpgme_ctx_t ctx);
-gpgme_error_t _gpgme_wait_on_condition (gpgme_ctx_t ctx, volatile int *cond);
-
-\f
-/* From data.c.  */
-gpgme_error_t _gpgme_data_inbound_handler (void *opaque, int fd);
-gpgme_error_t _gpgme_data_outbound_handler (void *opaque, int fd);
-
-\f
-/* From op-support.c.  */
-
-/* Find or create the op data object of type TYPE.  */
-gpgme_error_t _gpgme_op_data_lookup (gpgme_ctx_t ctx, ctx_op_data_id_t type,
-                                    void **hook, int size,
-                                    void (*cleanup) (void *));
-
-/* Prepare a new operation on CTX.  */
-gpgme_error_t _gpgme_op_reset (gpgme_ctx_t ctx, int synchronous);
-
-/* Parse the INV_RECP status line in ARGS and return the result in
-   KEY.  */
-gpgme_error_t _gpgme_parse_inv_recp (char *args, gpgme_invalid_key_t *key);
-
-/* Parse the PLAINTEXT status line in ARGS and return the result in
-   FILENAMEP.  */
-gpgme_error_t _gpgme_parse_plaintext (char *args, char **filenamep);
-
-
-\f
-/* From verify.c.  */
-gpgme_error_t _gpgme_op_verify_init_result (gpgme_ctx_t ctx);
-gpgme_error_t _gpgme_verify_status_handler (void *priv,
-                                           gpgme_status_code_t code,
-                                           char *args);
-
-\f
-/* From decrypt.c.  */
-gpgme_error_t _gpgme_op_decrypt_init_result (gpgme_ctx_t ctx);
-gpgme_error_t _gpgme_decrypt_status_handler (void *priv,
-                                            gpgme_status_code_t code,
-                                            char *args);
-
-\f
-/* From sign.c.  */
-
-/* Create an initial op data object for signing.  Needs to be called
-   once before calling _gpgme_sign_status_handler.  */
-gpgme_error_t _gpgme_op_sign_init_result (gpgme_ctx_t ctx);
-
-/* Process a status line for signing operations.  */
-gpgme_error_t _gpgme_sign_status_handler (void *priv,
-                                         gpgme_status_code_t code,
-                                         char *args);
-
-\f
-/* From encrypt.c.  */
-
-/* Create an initial op data object for encrypt.  Needs to be called
-   once before calling _gpgme_encrypt_status_handler.  */
-gpgme_error_t _gpgme_op_encrypt_init_result (gpgme_ctx_t ctx);
-
-/* Process a status line for encryption operations.  */
-gpgme_error_t _gpgme_encrypt_status_handler (void *priv,
-                                            gpgme_status_code_t code,
-                                            char *args);
-
-\f
-/* From passphrase.c.  */
-gpgme_error_t _gpgme_passphrase_status_handler (void *priv,
-                                               gpgme_status_code_t code,
-                                               char *args);
-gpgme_error_t _gpgme_passphrase_command_handler (void *opaque,
-                                                gpgme_status_code_t code,
-                                                const char *key, int fd,
-                                                int *processed);
-
-\f
-/* From progress.c.  */
-gpgme_error_t _gpgme_progress_status_handler (void *priv,
-                                             gpgme_status_code_t code,
-                                             char *args);
-
-\f
-/* From key.c.  */
-gpgme_error_t _gpgme_key_new (gpgme_key_t *r_key);
-gpgme_error_t _gpgme_key_add_subkey (gpgme_key_t key,
-                                    gpgme_subkey_t *r_subkey);
-gpgme_error_t _gpgme_key_append_name (gpgme_key_t key, char *src);
-gpgme_key_sig_t _gpgme_key_add_sig (gpgme_key_t key, char *src);
-
-\f
-/* From keylist.c.  */
-void _gpgme_op_keylist_event_cb (void *data, gpgme_event_io_t type,
-                                void *type_data);
-
-\f
-/* From trust-item.c.  */
-
-/* Create a new trust item.  */
-gpgme_error_t _gpgme_trust_item_new (gpgme_trust_item_t *r_item);
-
-\f
-/* From trustlist.c.  */
-void _gpgme_op_trustlist_event_cb (void *data, gpgme_event_io_t type,
-                                  void *type_data);
-
-\f
-/* From version.c.  */
-
-/* Return true if MY_VERSION is at least REQ_VERSION, and false
-   otherwise.  */
-int _gpgme_compare_versions (const char *my_version,
-                            const char *req_version);
-char *_gpgme_get_program_version (const char *const path);
-
-\f
-/* From sig-notation.c.  */
-
-/* Create a new, empty signature notation data object.  */
-gpgme_error_t _gpgme_sig_notation_create (gpgme_sig_notation_t *notationp,
-                                         const char *name, int name_len,
-                                         const char *value, int value_len,
-                                         gpgme_sig_notation_flags_t flags);
-
-/* Free the signature notation object and all associated resources.
-   The object must already be removed from any linked list as the next
-   pointer is ignored.  */
-void _gpgme_sig_notation_free (gpgme_sig_notation_t notation);
-
-/* Parse a notation or policy URL subpacket.  If the packet type is
-   not known, return no error but NULL in NOTATION.  */
-gpgme_error_t _gpgme_parse_notation (gpgme_sig_notation_t *notationp,
-                                    int type, int pkflags, int len,
-                                    char *data);
-
-#endif /* OPS_H */
diff --git a/tags/gpgme-1-1-1/gpgme/passphrase.c b/tags/gpgme-1-1-1/gpgme/passphrase.c
deleted file mode 100644 (file)
index 7132684..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* passphrase.c - Passphrase callback.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  int no_passphrase;
-  char *uid_hint;
-  char *passphrase_info;
-  int bad_passphrase;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-
-  if (opd->passphrase_info)
-    free (opd->passphrase_info);
-  if (opd->uid_hint)
-    free (opd->uid_hint);
-}
-
-\f
-gpgme_error_t
-_gpgme_passphrase_status_handler (void *priv, gpgme_status_code_t code,
-                                 char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_PASSPHRASE, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_USERID_HINT:
-      if (opd->uid_hint)
-       free (opd->uid_hint);
-      if (!(opd->uid_hint = strdup (args)))
-      return gpg_error_from_errno (errno);
-      break;
-
-    case GPGME_STATUS_BAD_PASSPHRASE:
-      opd->bad_passphrase++;
-      opd->no_passphrase = 0;
-      break;
-
-    case GPGME_STATUS_GOOD_PASSPHRASE:
-      opd->bad_passphrase = 0;
-      opd->no_passphrase = 0;
-      break;
-
-    case GPGME_STATUS_NEED_PASSPHRASE:
-    case GPGME_STATUS_NEED_PASSPHRASE_SYM:
-    case GPGME_STATUS_NEED_PASSPHRASE_PIN:
-      if (opd->passphrase_info)
-       free (opd->passphrase_info);
-      opd->passphrase_info = strdup (args);
-      if (!opd->passphrase_info)
-       return gpg_error_from_errno (errno);
-      break;
-
-    case GPGME_STATUS_MISSING_PASSPHRASE:
-      opd->no_passphrase = 1;
-      break;
-
-    case GPGME_STATUS_EOF:
-      if (opd->no_passphrase || opd->bad_passphrase)
-       return gpg_error (GPG_ERR_BAD_PASSPHRASE);
-      break;
-
-    default:
-      /* Ignore all other codes.  */
-      break;
-    }
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
-                                  const char *key, int fd, int *processed)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  assert (ctx->passphrase_cb);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_PASSPHRASE, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-
-  if (code == GPGME_STATUS_GET_HIDDEN 
-      && (!strcmp (key, "passphrase.enter")
-          || !strcmp (key, "passphrase.pin.ask")))
-    {
-      if (processed)
-       *processed = 1;
-
-      err = ctx->passphrase_cb (ctx->passphrase_cb_value,
-                               opd->uid_hint, opd->passphrase_info,
-                               opd->bad_passphrase, fd);
-
-      /* Reset bad passphrase flag, in case it is correct now.  */
-      opd->bad_passphrase = 0;
-
-      return err;
-    }
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/posix-io.c b/tags/gpgme-1-1-1/gpgme/posix-io.c
deleted file mode 100644 (file)
index 0e26a91..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/* posix-io.c - Posix I/O functions
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include "util.h"
-#include "priv-io.h"
-#include "sema.h"
-#include "ath.h"
-#include "debug.h"
-
-\f
-void
-_gpgme_io_subsystem_init (void)
-{
-  struct sigaction act;
-
-  sigaction (SIGPIPE, NULL, &act);
-  if (act.sa_handler == SIG_DFL)
-    {
-      act.sa_handler = SIG_IGN;
-      sigemptyset (&act.sa_mask);
-      act.sa_flags = 0;
-      sigaction (SIGPIPE, &act, NULL);
-    }
-}
-
-
-/* Write the printable version of FD to the buffer BUF of length
-   BUFLEN.  The printable version is the representation on the command
-   line that the child process expects.  */
-int
-_gpgme_io_fd2str (char *buf, int buflen, int fd)
-{
-  return snprintf (buf, buflen, "%d", fd);
-}
-
-\f
-static struct
-{
-  void (*handler) (int,void*);
-  void *value;
-} notify_table[256];
-
-int
-_gpgme_io_read (int fd, void *buffer, size_t count)
-{
-  int nread;
-  int saved_errno;
-
-  DEBUG2 ("fd %d: about to read %d bytes\n", fd, (int) count);
-  do
-    {
-      nread = _gpgme_ath_read (fd, buffer, count);
-    }
-  while (nread == -1 && errno == EINTR);
-  saved_errno = errno;
-  DEBUG2 ("fd %d: got %d bytes\n", fd, nread);
-  if (nread > 0)
-    _gpgme_debug (2, "fd %d: got `%.*s'\n", fd, nread, buffer);
-  errno = saved_errno;
-  return nread;
-}
-
-
-int
-_gpgme_io_write (int fd, const void *buffer, size_t count)
-{
-  int saved_errno;
-  int nwritten;
-
-  DEBUG2 ("fd %d: about to write %d bytes\n", fd, (int) count);
-  _gpgme_debug (2, "fd %d: write `%.*s'\n", fd, (int) count, buffer);
-  do
-    {
-      nwritten = _gpgme_ath_write (fd, buffer, count);
-    }
-  while (nwritten == -1 && errno == EINTR);
-  saved_errno = errno;
-  DEBUG2 ("fd %d:          wrote %d bytes\n", fd, (int) nwritten);
-  errno = saved_errno;
-  return nwritten;
-}
-
-
-int
-_gpgme_io_pipe (int filedes[2], int inherit_idx)
-{
-  int saved_errno;
-  int err;
-
-  err = pipe (filedes);
-  if (err < 0)
-    return err;
-  /* FIXME: Should get the old flags first.  */
-  err = fcntl (filedes[1 - inherit_idx], F_SETFD, FD_CLOEXEC);
-  saved_errno = errno;
-  if (err < 0)
-    {
-      close (filedes[0]);
-      close (filedes[1]);
-    }
-  errno = saved_errno;
-  return err;
-}
-
-
-int
-_gpgme_io_close (int fd)
-{
-  if (fd == -1)
-    return -1;
-  /* First call the notify handler.  */
-  DEBUG1 ("closing fd %d", fd);
-  if (fd >= 0 && fd < (int) DIM (notify_table))
-    {
-      if (notify_table[fd].handler)
-       {
-         notify_table[fd].handler (fd, notify_table[fd].value);
-         notify_table[fd].handler = NULL;
-         notify_table[fd].value = NULL;
-        }
-    }
-  /* Then do the close.  */    
-  return close (fd);
-}
-
-
-int
-_gpgme_io_set_close_notify (int fd, void (*handler)(int, void*), void *value)
-{
-  assert (fd != -1);
-
-  if (fd < 0 || fd >= (int) DIM (notify_table))
-    return -1;
-  DEBUG1 ("set notification for fd %d", fd);
-  notify_table[fd].handler = handler;
-  notify_table[fd].value = value;
-  return 0;
-}
-
-
-int
-_gpgme_io_set_nonblocking (int fd)
-{
-  int flags;
-
-  flags = fcntl (fd, F_GETFL, 0);
-  if (flags == -1)
-    return -1;
-  flags |= O_NONBLOCK;
-  return fcntl (fd, F_SETFL, flags);
-}
-
-
-static int
-_gpgme_io_waitpid (int pid, int hang, int *r_status, int *r_signal)
-{
-  int status;
-
-  *r_status = 0;
-  *r_signal = 0;
-  if (_gpgme_ath_waitpid (pid, &status, hang? 0 : WNOHANG) == pid)
-    {
-      if (WIFSIGNALED (status))
-       {
-         *r_status = 4; /* Need some value here.  */
-         *r_signal = WTERMSIG (status);
-       }
-      else if (WIFEXITED (status))
-       *r_status = WEXITSTATUS (status);
-      else
-       *r_status = 4; /* Oops.  */
-      return 1;
-    }
-  return 0;
-}
-
-
-/* Returns 0 on success, -1 on error.  */
-int
-_gpgme_io_spawn (const char *path, char **argv,
-                struct spawn_fd_item_s *fd_child_list,
-                struct spawn_fd_item_s *fd_parent_list)
-{
-  pid_t pid;
-  int i;
-  int status, signo;
-
-  pid = fork ();
-  if (pid == -1) 
-    return -1;
-
-  if (!pid)
-    {
-      /* Intermediate child to prevent zombie processes.  */
-      if ((pid = fork ()) == 0)
-       {
-         /* Child.  */
-         int duped_stdin = 0;
-         int duped_stderr = 0;
-
-         /* First close all fds which will not be duped.  */
-         for (i=0; fd_child_list[i].fd != -1; i++)
-           if (fd_child_list[i].dup_to == -1)
-             close (fd_child_list[i].fd);
-
-         /* And now dup and close the rest.  */
-         for (i=0; fd_child_list[i].fd != -1; i++)
-           {
-             if (fd_child_list[i].dup_to != -1)
-               {
-                 if (dup2 (fd_child_list[i].fd,
-                           fd_child_list[i].dup_to) == -1)
-                   {
-                     DEBUG1 ("dup2 failed in child: %s\n", strerror (errno));
-                     _exit (8);
-                   }
-                 if (fd_child_list[i].dup_to == 0)
-                   duped_stdin=1;
-                 if (fd_child_list[i].dup_to == 2)
-                   duped_stderr=1;
-                 close (fd_child_list[i].fd);
-               }
-           }
-         
-         if (!duped_stdin || !duped_stderr)
-           {
-             int fd = open ("/dev/null", O_RDWR);
-             if (fd == -1)
-               {
-                 DEBUG1 ("can't open `/dev/null': %s\n", strerror (errno));
-                 _exit (8);
-               }
-             /* Make sure that the process has a connected stdin.  */
-             if (!duped_stdin)
-               {
-                 if (dup2 (fd, 0) == -1)
-                   {
-                     DEBUG1("dup2(/dev/null, 0) failed: %s\n",
-                            strerror (errno));
-                     _exit (8);
-                   }
-               }
-             if (!duped_stderr)
-               if (dup2 (fd, 2) == -1)
-                 {
-                   DEBUG1 ("dup2(dev/null, 2) failed: %s\n",
-                           strerror (errno));
-                   _exit (8);
-                 }
-             close (fd);
-           }
-    
-         execv ( path, argv );
-         /* Hmm: in that case we could write a special status code to the
-            status-pipe.  */
-         DEBUG1 ("exec of `%s' failed\n", path);
-         _exit (8);
-       } /* End child.  */
-      if (pid == -1)
-       _exit (1);
-      else
-       _exit (0);
-    }
-    
-  _gpgme_io_waitpid (pid, 1, &status, &signo);
-  if (status)
-    return -1;
-
-  /* .dup_to is not used in the parent list.  */
-  for (i = 0; fd_parent_list[i].fd != -1; i++)
-    _gpgme_io_close (fd_parent_list[i].fd);
-
-  return 0;
-}
-
-
-/*
- * Select on the list of fds.
- * Returns: -1 = error
- *           0 = timeout or nothing to select
- *          >0 = number of signaled fds
- */
-int
-_gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock)
-{
-  fd_set readfds;
-  fd_set writefds;
-  unsigned int i;
-  int any, max_fd, n, count;
-  struct timeval timeout = { 1, 0 }; /* Use a 1s timeout.  */
-  void *dbg_help = NULL;
-
-  FD_ZERO (&readfds);
-  FD_ZERO (&writefds);
-  max_fd = 0;
-  if (nonblock)
-    timeout.tv_sec = 0;
-
-  DEBUG_BEGIN (dbg_help, 3, "gpgme:select on [ ");
-  any = 0;
-  for (i = 0; i < nfds; i++)
-    {
-      if (fds[i].fd == -1) 
-       continue;
-      if (fds[i].frozen)
-       DEBUG_ADD1 (dbg_help, "f%d ", fds[i].fd);
-      else if (fds[i].for_read)
-       {
-         assert (!FD_ISSET (fds[i].fd, &readfds));
-         FD_SET (fds[i].fd, &readfds);
-         if (fds[i].fd > max_fd)
-           max_fd = fds[i].fd;
-         DEBUG_ADD1 (dbg_help, "r%d ", fds[i].fd);
-         any = 1;
-        }
-      else if (fds[i].for_write)
-       {
-         assert (!FD_ISSET (fds[i].fd, &writefds));
-         FD_SET (fds[i].fd, &writefds);
-         if (fds[i].fd > max_fd)
-           max_fd = fds[i].fd;
-         DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd);
-         any = 1;
-        }
-      fds[i].signaled = 0;
-    }
-  DEBUG_END (dbg_help, "]"); 
-  if (!any)
-    return 0;
-
-  do
-    {
-      count = _gpgme_ath_select (max_fd + 1, &readfds, &writefds, NULL,
-                                &timeout);
-    }
-  while (count < 0 && errno == EINTR);
-  if (count < 0)
-    {
-      int saved_errno = errno;
-      DEBUG1 ("_gpgme_io_select failed: %s\n", strerror (errno));
-      errno = saved_errno;
-      return -1; /* error */
-    }
-
-  DEBUG_BEGIN (dbg_help, 3, "select OK [ ");
-  if (DEBUG_ENABLED (dbg_help))
-    {
-      for (i = 0; i <= max_fd; i++)
-       {
-         if (FD_ISSET (i, &readfds))
-           DEBUG_ADD1 (dbg_help, "r%d ", i);
-         if (FD_ISSET (i, &writefds))
-           DEBUG_ADD1 (dbg_help, "w%d ", i);
-        }
-      DEBUG_END (dbg_help, "]");
-    }
-    
-  /* n is used to optimize it a little bit.  */
-  for (n = count, i = 0; i < nfds && n; i++)
-    {
-      if (fds[i].fd == -1)
-       ;
-      else if (fds[i].for_read)
-       {
-         if (FD_ISSET (fds[i].fd, &readfds))
-           {
-             fds[i].signaled = 1;
-             n--;
-            }
-        }
-      else if (fds[i].for_write)
-       {
-         if (FD_ISSET (fds[i].fd, &writefds))
-           {
-             fds[i].signaled = 1;
-             n--;
-            }
-        }
-    }
-  return count;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/posix-sema.c b/tags/gpgme-1-1-1/gpgme/posix-sema.c
deleted file mode 100644 (file)
index fa2b8d3..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* posix-sema.c 
-   Copyright (C) 2001 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include "util.h"
-#include "sema.h"
-#include "ath.h"
-
-void
-_gpgme_sema_subsystem_init ()
-{
-}
-
-void
-_gpgme_sema_cs_enter (struct critsect_s *s)
-{
-  _gpgme_ath_mutex_lock (&s->private);
-}
-
-void
-_gpgme_sema_cs_leave (struct critsect_s *s)
-{
-  _gpgme_ath_mutex_unlock (&s->private);
-}
-
-void
-_gpgme_sema_cs_destroy (struct critsect_s *s)
-{
-  _gpgme_ath_mutex_destroy (&s->private);
-  s->private = NULL;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/posix-util.c b/tags/gpgme-1-1-1/gpgme/posix-util.c
deleted file mode 100644 (file)
index d5b4172..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* posix-util.c - Utility functions for Posix
-   Copyright (C) 2001 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include "util.h"
-
-const char *
-_gpgme_get_gpg_path (void)
-{
-#ifdef GPG_PATH
-  return GPG_PATH;
-#else
-  return NULL;
-#endif
-}
-
-const char *
-_gpgme_get_gpgsm_path (void)
-{
-#ifdef GPGSM_PATH
-  return GPGSM_PATH;
-#else
-  return NULL;
-#endif
-}
-
-/* See w32-util.c */
-int
-_gpgme_get_conf_int (const char *key, int *value)
-{
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/priv-io.h b/tags/gpgme-1-1-1/gpgme/priv-io.h
deleted file mode 100644 (file)
index 4c2a604..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* priv-io.h - Interface to the private I/O functions.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef IO_H
-#define IO_H
-
-
-/* A single file descriptor passed to spawn.  For child fds, dup_to
-   specifies the fd it should become in the child.  */
-struct spawn_fd_item_s
-{
-  int fd;
-  int dup_to;
-};
-
-struct io_select_fd_s
-{
-  int fd;
-  int for_read;
-  int for_write;
-  int signaled;
-  int frozen;
-  void *opaque;
-};
-
-/* These function are either defined in posix-io.c or w32-io.c.  */
-void _gpgme_io_subsystem_init (void);
-int _gpgme_io_read (int fd, void *buffer, size_t count);
-int _gpgme_io_write (int fd, const void *buffer, size_t count);
-int _gpgme_io_pipe (int filedes[2], int inherit_idx);
-int _gpgme_io_close (int fd);
-int _gpgme_io_set_close_notify (int fd, void (*handler) (int, void *),
-                               void *value);
-int _gpgme_io_set_nonblocking (int fd);
-
-/* Spawn the executable PATH with ARGV as arguments, after forking
-   close all fds in FD_PARENT_LIST in the parent and close or dup all
-   fds in FD_CHILD_LIST in the child.  */
-int _gpgme_io_spawn (const char *path, char **argv,
-                    struct spawn_fd_item_s *fd_child_list,
-                    struct spawn_fd_item_s *fd_parent_list);
-int _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock);
-
-/* Write the printable version of FD to the buffer BUF of length
-   BUFLEN.  The printable version is the representation on the command
-   line that the child process expects.  */
-int _gpgme_io_fd2str (char *buf, int buflen, int fd);
-
-#endif /* IO_H */
diff --git a/tags/gpgme-1-1-1/gpgme/progress.c b/tags/gpgme-1-1-1/gpgme/progress.c
deleted file mode 100644 (file)
index 4fe6b63..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* progress.c -  status handler for progress status
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "util.h"
-#include "context.h"
-
-
-gpgme_error_t
-_gpgme_progress_status_handler (void *priv, gpgme_status_code_t code,
-                               char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  char *p;
-  char *args_cpy;
-  int type = 0;
-  int current = 0;
-  int total = 0;
-
-  if (code != GPGME_STATUS_PROGRESS || !*args || !ctx->progress_cb)
-    return 0;
-
-  args_cpy = strdup (args);
-  if (!args_cpy)
-    return gpg_error_from_errno (errno);
-
-  p = strchr (args_cpy, ' ');
-  if (p)
-    {
-      *p++ = 0;
-      if (*p)
-       {
-         type = *(unsigned char *)p;
-         p = strchr (p+1, ' ');
-         if (p)
-           {
-             *p++ = 0;
-             if (*p)
-               {
-                 current = atoi (p);
-                 p = strchr (p+1, ' ');
-                 if (p)
-                   {
-                     *p++ = 0;
-                     total = atoi (p);
-                   }
-               }
-           }
-       }
-    }           
-
-  if (type != 'X')
-    ctx->progress_cb (ctx->progress_cb_value, args_cpy, type, current, total);
-
-  free (args_cpy);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/putc_unlocked.c b/tags/gpgme-1-1-1/gpgme/putc_unlocked.c
deleted file mode 100644 (file)
index a15aade..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* putc_unlocked.c - Replacement for putc_unlocked.
-   Copyright (C) 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-int
-putc_unlocked (int c, FILE *stream)
-{
-  return putc (c, stream);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/rungpg.c b/tags/gpgme-1-1-1/gpgme/rungpg.c
deleted file mode 100644 (file)
index 1cb4d39..0000000
+++ /dev/null
@@ -1,1971 +0,0 @@
-/* rungpg.c - Gpg Engine.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "ops.h"
-#include "wait.h"
-#include "context.h"  /*temp hack until we have GpmeData methods to do I/O */
-#include "priv-io.h"
-#include "sema.h"
-#include "debug.h"
-
-#include "status-table.h"
-#include "engine-backend.h"
-
-
-/* This type is used to build a list of gpg arguments and data
-   sources/sinks.  */
-struct arg_and_data_s
-{
-  struct arg_and_data_s *next;
-  gpgme_data_t data;  /* If this is not NULL, use arg below.  */
-  int inbound;     /* True if this is used for reading from gpg.  */
-  int dup_to;
-  int print_fd;    /* Print the fd number and not the special form of it.  */
-  char arg[1];     /* Used if data above is not used.  */
-};
-
-
-struct fd_data_map_s
-{
-  gpgme_data_t data;
-  int inbound;  /* true if this is used for reading from gpg */
-  int dup_to;
-  int fd;       /* the fd to use */
-  int peer_fd;  /* the outher side of the pipe */
-  void *tag;
-};
-
-
-typedef gpgme_error_t (*colon_preprocessor_t) (char *line, char **rline);
-
-struct engine_gpg
-{
-  char *file_name;
-
-  struct arg_and_data_s *arglist;
-  struct arg_and_data_s **argtail;
-
-  struct
-  {
-    int fd[2];  
-    size_t bufsize;
-    char *buffer;
-    size_t readpos;
-    int eof;
-    engine_status_handler_t fnc;
-    void *fnc_value;
-    void *tag;
-  } status;
-
-  /* This is a kludge - see the comment at colon_line_handler.  */
-  struct
-  {
-    int fd[2];  
-    size_t bufsize;
-    char *buffer;
-    size_t readpos;
-    int eof;
-    engine_colon_line_handler_t fnc;  /* this indicate use of this structrue */
-    void *fnc_value;
-    void *tag;
-    colon_preprocessor_t preprocess_fnc;
-  } colon;
-
-  char **argv;  
-  struct fd_data_map_s *fd_data_map;
-
-  /* stuff needed for interactive (command) mode */
-  struct
-  {
-    int used;
-    int fd;
-    void *cb_data;
-    int idx;           /* Index in fd_data_map */
-    gpgme_status_code_t code;  /* last code */
-    char *keyword;       /* what has been requested (malloced) */
-    engine_command_handler_t fnc; 
-    void *fnc_value;
-    /* The kludges never end.  This is used to couple command handlers
-       with output data in edit key mode.  */
-    gpgme_data_t linked_data;
-    int linked_idx;
-  } cmd;
-
-  struct gpgme_io_cbs io_cbs;
-};
-
-typedef struct engine_gpg *engine_gpg_t;
-
-\f
-static void
-gpg_io_event (void *engine, gpgme_event_io_t type, void *type_data)
-{
-  engine_gpg_t gpg = engine;
-
-  if (gpg->io_cbs.event)
-    (*gpg->io_cbs.event) (gpg->io_cbs.event_priv, type, type_data);
-}
-
-
-static void
-close_notify_handler (int fd, void *opaque)
-{
-  engine_gpg_t gpg = opaque;
-  assert (fd != -1);
-
-  if (gpg->status.fd[0] == fd)
-    {
-      if (gpg->status.tag)
-       (*gpg->io_cbs.remove) (gpg->status.tag);
-      gpg->status.fd[0] = -1;
-    }
-  else if (gpg->status.fd[1] == fd)
-    gpg->status.fd[1] = -1;
-  else if (gpg->colon.fd[0] == fd)
-    {
-      if (gpg->colon.tag)
-       (*gpg->io_cbs.remove) (gpg->colon.tag);
-      gpg->colon.fd[0] = -1;
-    }
-  else if (gpg->colon.fd[1] == fd)
-    gpg->colon.fd[1] = -1;
-  else if (gpg->fd_data_map)
-    {
-      int i;
-
-      for (i = 0; gpg->fd_data_map[i].data; i++)
-       {
-         if (gpg->fd_data_map[i].fd == fd)
-           {
-             if (gpg->fd_data_map[i].tag)
-               (*gpg->io_cbs.remove) (gpg->fd_data_map[i].tag);
-             gpg->fd_data_map[i].fd = -1;
-             break;
-            }
-         if (gpg->fd_data_map[i].peer_fd == fd)
-           {
-             gpg->fd_data_map[i].peer_fd = -1;
-             break;
-            }
-        }
-    }
-}
-
-static gpgme_error_t
-add_arg (engine_gpg_t gpg, const char *arg)
-{
-  struct arg_and_data_s *a;
-
-  assert (gpg);
-  assert (arg);
-
-  a = malloc (sizeof *a + strlen (arg));
-  if (!a)
-    return gpg_error_from_errno (errno);
-  a->next = NULL;
-  a->data = NULL;
-  a->dup_to = -1;
-  strcpy (a->arg, arg);
-  *gpg->argtail = a;
-  gpg->argtail = &a->next;
-  return 0;
-}
-
-static gpgme_error_t
-add_data (engine_gpg_t gpg, gpgme_data_t data, int dup_to, int inbound)
-{
-  struct arg_and_data_s *a;
-
-  assert (gpg);
-  assert (data);
-
-  a = malloc (sizeof *a - 1);
-  if (!a)
-    return gpg_error_from_errno (errno);
-  a->next = NULL;
-  a->data = data;
-  a->inbound = inbound;
-  if (dup_to == -2)
-    {
-      a->print_fd = 1;
-      a->dup_to = -1;
-    }
-  else
-    {
-      a->print_fd = 0;
-      a->dup_to = dup_to;
-    }
-  *gpg->argtail = a;
-  gpg->argtail = &a->next;
-  return 0;
-}
-
-\f
-static char *
-gpg_get_version (const char *file_name)
-{
-  return _gpgme_get_program_version (file_name ? file_name
-                                    : _gpgme_get_gpg_path ());
-}
-
-
-static const char *
-gpg_get_req_version (void)
-{
-  return NEED_GPG_VERSION;
-}
-
-
-static void
-free_argv (char **argv)
-{
-  int i;
-
-  for (i = 0; argv[i]; i++)
-    free (argv[i]);
-  free (argv);
-}
-
-
-static void
-free_fd_data_map (struct fd_data_map_s *fd_data_map)
-{
-  int i;
-
-  if (!fd_data_map)
-    return;
-
-  for (i = 0; fd_data_map[i].data; i++)
-    {
-      if (fd_data_map[i].fd != -1)
-       _gpgme_io_close (fd_data_map[i].fd);
-      if (fd_data_map[i].peer_fd != -1)
-       _gpgme_io_close (fd_data_map[i].peer_fd);
-      /* Don't release data because this is only a reference.  */
-    }
-  free (fd_data_map);
-}
-
-
-static gpgme_error_t
-gpg_cancel (void *engine)
-{
-  engine_gpg_t gpg = engine;
-
-  if (!gpg)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (gpg->status.fd[0] != -1)
-    _gpgme_io_close (gpg->status.fd[0]);
-  if (gpg->status.fd[1] != -1)
-    _gpgme_io_close (gpg->status.fd[1]);
-  if (gpg->colon.fd[0] != -1)
-    _gpgme_io_close (gpg->colon.fd[0]);
-  if (gpg->colon.fd[1] != -1)
-    _gpgme_io_close (gpg->colon.fd[1]);
-  if (gpg->fd_data_map)
-    {
-      free_fd_data_map (gpg->fd_data_map);
-      gpg->fd_data_map = NULL;
-    }
-  if (gpg->cmd.fd != -1)
-    _gpgme_io_close (gpg->cmd.fd);
-
-  return 0;
-}
-
-static void
-gpg_release (void *engine)
-{
-  engine_gpg_t gpg = engine;
-
-  if (!gpg)
-    return;
-
-  gpg_cancel (engine);
-
-  if (gpg->file_name)
-    free (gpg->file_name);
-
-  while (gpg->arglist)
-    {
-      struct arg_and_data_s *next = gpg->arglist->next;
-
-      if (gpg->arglist)
-       free (gpg->arglist);
-      gpg->arglist = next;
-    }
-
-  if (gpg->status.buffer)
-    free (gpg->status.buffer);
-  if (gpg->colon.buffer)
-    free (gpg->colon.buffer);
-  if (gpg->argv)
-    free_argv (gpg->argv);
-  if (gpg->cmd.keyword)
-    free (gpg->cmd.keyword);
-
-  free (gpg);
-}
-
-
-static gpgme_error_t
-gpg_new (void **engine, const char *file_name, const char *home_dir,
-        const char *lc_ctype, const char *lc_messages)
-{
-  engine_gpg_t gpg;
-  gpgme_error_t rc = 0;
-
-  gpg = calloc (1, sizeof *gpg);
-  if (!gpg)
-    return gpg_error_from_errno (errno);
-
-  if (file_name)
-    {
-      gpg->file_name = strdup (file_name);
-      if (!gpg->file_name)
-       {
-         rc = gpg_error_from_errno (errno);
-         goto leave;
-       }
-    }
-
-  gpg->argtail = &gpg->arglist;
-  gpg->status.fd[0] = -1;
-  gpg->status.fd[1] = -1;
-  gpg->colon.fd[0] = -1;
-  gpg->colon.fd[1] = -1;
-  gpg->cmd.fd = -1;
-  gpg->cmd.idx = -1;
-  gpg->cmd.linked_data = NULL;
-  gpg->cmd.linked_idx = -1;
-
-  /* Allocate the read buffer for the status pipe.  */
-  gpg->status.bufsize = 1024;
-  gpg->status.readpos = 0;
-  gpg->status.buffer = malloc (gpg->status.bufsize);
-  if (!gpg->status.buffer)
-    {
-      rc = gpg_error_from_errno (errno);
-      goto leave;
-    }
-  /* In any case we need a status pipe - create it right here and
-     don't handle it with our generic gpgme_data_t mechanism.  */
-  if (_gpgme_io_pipe (gpg->status.fd, 1) == -1)
-    {
-      rc = gpg_error_from_errno (errno);
-      goto leave;
-    }
-  if (_gpgme_io_set_close_notify (gpg->status.fd[0],
-                                 close_notify_handler, gpg)
-      || _gpgme_io_set_close_notify (gpg->status.fd[1],
-                                    close_notify_handler, gpg))
-    {
-      rc = gpg_error (GPG_ERR_GENERAL);
-      goto leave;
-    }
-  gpg->status.eof = 0;
-
-  if (home_dir)
-    {
-      rc = add_arg (gpg, "--homedir");
-      if (!rc)
-       rc = add_arg (gpg, home_dir);
-      if (rc)
-       goto leave;
-    }
-
-  rc = add_arg (gpg, "--status-fd");
-  if (rc)
-    goto leave;
-
-  {
-    char buf[25];
-    _gpgme_io_fd2str (buf, sizeof (buf), gpg->status.fd[1]);
-    rc = add_arg (gpg, buf);
-    if (rc)
-      goto leave;
-  }
-
-  rc = add_arg (gpg, "--no-tty");
-  if (!rc)
-    rc = add_arg (gpg, "--charset");
-  if (!rc)
-    rc = add_arg (gpg, "utf8");
-  if (!rc)
-    rc = add_arg (gpg, "--enable-progress-filter");
-
- leave:
-  if (rc)
-    gpg_release (gpg);
-  else
-    *engine = gpg;
-  return rc;
-}
-
-
-/* Note, that the status_handler is allowed to modifiy the args
-   value.  */
-static void
-gpg_set_status_handler (void *engine, engine_status_handler_t fnc,
-                       void *fnc_value)
-{
-  engine_gpg_t gpg = engine;
-
-  gpg->status.fnc = fnc;
-  gpg->status.fnc_value = fnc_value;
-}
-
-/* Kludge to process --with-colon output.  */
-static gpgme_error_t
-gpg_set_colon_line_handler (void *engine, engine_colon_line_handler_t fnc,
-                           void *fnc_value)
-{
-  engine_gpg_t gpg = engine;
-
-  gpg->colon.bufsize = 1024;
-  gpg->colon.readpos = 0;
-  gpg->colon.buffer = malloc (gpg->colon.bufsize);
-  if (!gpg->colon.buffer)
-    return gpg_error_from_errno (errno);
-
-  if (_gpgme_io_pipe (gpg->colon.fd, 1) == -1) 
-    {
-      int saved_errno = errno;
-      free (gpg->colon.buffer);
-      gpg->colon.buffer = NULL;
-      return gpg_error_from_errno (saved_errno);
-    }
-  if (_gpgme_io_set_close_notify (gpg->colon.fd[0], close_notify_handler, gpg)
-      || _gpgme_io_set_close_notify (gpg->colon.fd[1],
-                                    close_notify_handler, gpg))
-    return gpg_error (GPG_ERR_GENERAL);
-  gpg->colon.eof = 0;
-  gpg->colon.fnc = fnc;
-  gpg->colon.fnc_value = fnc_value;
-  return 0;
-}
-
-
-static gpgme_error_t
-command_handler (void *opaque, int fd)
-{
-  gpgme_error_t err;
-  engine_gpg_t gpg = (engine_gpg_t) opaque;
-  int processed = 0;
-
-  assert (gpg->cmd.used);
-  assert (gpg->cmd.code);
-  assert (gpg->cmd.fnc);
-
-  err = gpg->cmd.fnc (gpg->cmd.fnc_value, gpg->cmd.code, gpg->cmd.keyword, fd,
-                     &processed);
-  if (err)
-    return err;
-
-  /* We always need to send at least a newline character.  */
-  if (!processed)
-    _gpgme_io_write (fd, "\n", 1);
-
-  gpg->cmd.code = 0;
-  /* And sleep again until read_status will wake us up again.  */
-  /* XXX We must check if there are any more fds active after removing
-     this one.  */
-  (*gpg->io_cbs.remove) (gpg->fd_data_map[gpg->cmd.idx].tag);
-  gpg->cmd.fd = gpg->fd_data_map[gpg->cmd.idx].fd;
-  gpg->fd_data_map[gpg->cmd.idx].fd = -1;
-
-  return 0;
-}
-
-
-
-/* The Fnc will be called to get a value for one of the commands with
-   a key KEY.  If the Code pssed to FNC is 0, the function may release
-   resources associated with the returned value from another call.  To
-   match such a second call to a first call, the returned value from
-   the first call is passed as keyword.  */
-static gpgme_error_t
-gpg_set_command_handler (void *engine, engine_command_handler_t fnc,
-                        void *fnc_value, gpgme_data_t linked_data)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t rc;
-
-  rc = add_arg (gpg, "--command-fd");
-  if (rc)
-    return rc;
-
-  /* This is a hack.  We don't have a real data object.  The only
-     thing that matters is that we use something unique, so we use the
-     address of the cmd structure in the gpg object.  */
-  rc = add_data (gpg, (void *) &gpg->cmd, -2, 0);
-  if (rc)
-    return rc;
-
-  gpg->cmd.fnc = fnc;
-  gpg->cmd.cb_data = (void *) &gpg->cmd;
-  gpg->cmd.fnc_value = fnc_value;
-  gpg->cmd.linked_data = linked_data;
-  gpg->cmd.used = 1;
-  return 0;
-}
-
-
-static gpgme_error_t
-build_argv (engine_gpg_t gpg)
-{
-  gpgme_error_t err;
-  struct arg_and_data_s *a;
-  struct fd_data_map_s *fd_data_map;
-  size_t datac=0, argc=0;  
-  char **argv;
-  int need_special = 0;
-  int use_agent = 0;
-  char *p;
-
-  /* We don't want to use the agent with a malformed environment
-     variable.  This is only a very basic test but sufficient to make
-     our life in the regression tests easier. */
-  err = _gpgme_getenv ("GPG_AGENT_INFO", &p);
-  if (err)
-    return err;
-  use_agent = (p && strchr (p, ':'));
-  if (p)
-    free (p);
-
-  if (gpg->argv)
-    {
-      free_argv (gpg->argv);
-      gpg->argv = NULL;
-    }
-  if (gpg->fd_data_map)
-    {
-      free_fd_data_map (gpg->fd_data_map);
-      gpg->fd_data_map = NULL;
-    }
-
-  argc++;      /* For argv[0].  */
-  for (a = gpg->arglist; a; a = a->next)
-    {
-      argc++;
-      if (a->data)
-       {
-         /*fprintf (stderr, "build_argv: data\n" );*/
-         datac++;
-         if (a->dup_to == -1 && !a->print_fd)
-           need_special = 1;
-        }
-      else
-       {
-         /*   fprintf (stderr, "build_argv: arg=`%s'\n", a->arg );*/
-        }
-    }
-  if (need_special)
-    argc++;
-  if (use_agent)
-    argc++;
-  if (!gpg->cmd.used)
-    argc++;    /* --batch */
-  argc += 1;   /* --no-sk-comment */
-
-  argv = calloc (argc + 1, sizeof *argv);
-  if (!argv)
-    return gpg_error_from_errno (errno);
-  fd_data_map = calloc (datac + 1, sizeof *fd_data_map);
-  if (!fd_data_map)
-    {
-      int saved_errno = errno;
-      free_argv (argv);
-      return gpg_error_from_errno (saved_errno);
-    }
-
-  argc = datac = 0;
-  argv[argc] = strdup ("gpg"); /* argv[0] */
-  if (!argv[argc])
-    {
-      int saved_errno = errno;
-      free (fd_data_map);
-      free_argv (argv);
-      return gpg_error_from_errno (saved_errno);
-    }
-  argc++;
-  if (need_special)
-    {
-      argv[argc] = strdup ("--enable-special-filenames");
-      if (!argv[argc])
-       {
-         int saved_errno = errno;
-         free (fd_data_map);
-         free_argv (argv);
-         return gpg_error_from_errno (saved_errno);
-        }
-      argc++;
-    }
-  if (use_agent)
-    {
-      argv[argc] = strdup ("--use-agent");
-      if (!argv[argc])
-       {
-         int saved_errno = errno;
-         free (fd_data_map);
-         free_argv (argv);
-         return gpg_error_from_errno (saved_errno);
-        }
-      argc++;
-    }
-  if (!gpg->cmd.used)
-    {
-      argv[argc] = strdup ("--batch");
-      if (!argv[argc])
-       {
-         int saved_errno = errno;
-         free (fd_data_map);
-         free_argv (argv);
-         return gpg_error_from_errno (saved_errno);
-        }
-      argc++;
-    }
-  argv[argc] = strdup ("--no-sk-comment");
-  if (!argv[argc])
-    {
-      int saved_errno = errno;
-      free (fd_data_map);
-      free_argv (argv);
-      return gpg_error_from_errno (saved_errno);
-    }
-  argc++;
-  for (a = gpg->arglist; a; a = a->next)
-    {
-      if (a->data)
-       {
-         /* Create a pipe to pass it down to gpg.  */
-         fd_data_map[datac].inbound = a->inbound;
-
-         /* Create a pipe.  */
-         {   
-           int fds[2];
-           
-           if (_gpgme_io_pipe (fds, fd_data_map[datac].inbound ? 1 : 0)
-               == -1)
-             {
-               int saved_errno = errno;
-               free (fd_data_map);
-               free_argv (argv);
-               return gpg_error (saved_errno);
-             }
-           if (_gpgme_io_set_close_notify (fds[0],
-                                           close_notify_handler, gpg)
-               || _gpgme_io_set_close_notify (fds[1],
-                                              close_notify_handler,
-                                              gpg))
-             {
-               return gpg_error (GPG_ERR_GENERAL);
-             }
-           /* If the data_type is FD, we have to do a dup2 here.  */
-           if (fd_data_map[datac].inbound)
-             {
-               fd_data_map[datac].fd       = fds[0];
-               fd_data_map[datac].peer_fd  = fds[1];
-             }
-           else
-             {
-               fd_data_map[datac].fd       = fds[1];
-               fd_data_map[datac].peer_fd  = fds[0];
-             }
-         }
-
-         /* Hack to get hands on the fd later.  */
-         if (gpg->cmd.used)
-           {
-             if (gpg->cmd.cb_data == a->data)
-               {
-                 assert (gpg->cmd.idx == -1);
-                 gpg->cmd.idx = datac;
-               }
-             else if (gpg->cmd.linked_data == a->data)
-               {
-                 assert (gpg->cmd.linked_idx == -1);
-                 gpg->cmd.linked_idx = datac;
-               }
-           }
-
-         fd_data_map[datac].data = a->data;
-         fd_data_map[datac].dup_to = a->dup_to;
-         if (a->dup_to == -1)
-           {
-             char *ptr;
-             int buflen = 25;
-
-             argv[argc] = malloc (buflen);
-             if (!argv[argc])
-               {
-                 int saved_errno = errno;
-                 free (fd_data_map);
-                 free_argv (argv);
-                 return gpg_error_from_errno (saved_errno);
-                }
-
-             ptr = argv[argc];
-             if (!a->print_fd)
-               {
-                 *(ptr++) = '-';
-                 *(ptr++) = '&';
-                 buflen -= 2;
-               }
-             
-             _gpgme_io_fd2str (ptr, buflen, fd_data_map[datac].peer_fd);
-             argc++;
-            }
-         datac++;
-        }
-      else
-       {
-         argv[argc] = strdup (a->arg);
-         if (!argv[argc])
-           {
-             int saved_errno = errno;
-             free (fd_data_map);
-             free_argv (argv);
-             return gpg_error_from_errno (saved_errno);
-            }
-            argc++;
-        }
-    }
-
-  gpg->argv = argv;
-  gpg->fd_data_map = fd_data_map;
-  return 0;
-}
-
-
-static gpgme_error_t
-add_io_cb (engine_gpg_t gpg, int fd, int dir, gpgme_io_cb_t handler, void *data,
-          void **tag)
-{
-  gpgme_error_t err;
-
-  err = (*gpg->io_cbs.add) (gpg->io_cbs.add_priv, fd, dir, handler, data, tag);
-  if (err)
-    return err;
-  if (!dir)
-    /* FIXME Kludge around poll() problem.  */
-    err = _gpgme_io_set_nonblocking (fd);
-  return err;
-}
-
-
-static int
-status_cmp (const void *ap, const void *bp)
-{
-  const struct status_table_s *a = ap;
-  const struct status_table_s *b = bp;
-
-  return strcmp (a->name, b->name);
-}
-
-
-/* Handle the status output of GnuPG.  This function does read entire
-   lines and passes them as C strings to the callback function (we can
-   use C Strings because the status output is always UTF-8 encoded).
-   Of course we have to buffer the lines to cope with long lines
-   e.g. with a large user ID.  Note: We can optimize this to only cope
-   with status line code we know about and skip all other stuff
-   without buffering (i.e. without extending the buffer).  */
-static gpgme_error_t
-read_status (engine_gpg_t gpg)
-{
-  char *p;
-  int nread;
-  size_t bufsize = gpg->status.bufsize; 
-  char *buffer = gpg->status.buffer;
-  size_t readpos = gpg->status.readpos; 
-
-  assert (buffer);
-  if (bufsize - readpos < 256)
-    { 
-      /* Need more room for the read.  */
-      bufsize += 1024;
-      buffer = realloc (buffer, bufsize);
-      if (!buffer)
-       return gpg_error_from_errno (errno);
-    }
-
-  nread = _gpgme_io_read (gpg->status.fd[0],
-                         buffer + readpos, bufsize-readpos);
-  if (nread == -1)
-    return gpg_error_from_errno (errno);
-
-  if (!nread)
-    {
-      gpg->status.eof = 1;
-      if (gpg->status.fnc)
-       {
-         gpgme_error_t err;
-         err = gpg->status.fnc (gpg->status.fnc_value, GPGME_STATUS_EOF, "");
-         if (err)
-           return err;
-       }
-      return 0;
-    }
-
-  while (nread > 0)
-    {
-      for (p = buffer + readpos; nread; nread--, p++)
-       {
-         if (*p == '\n')
-           {
-             /* (we require that the last line is terminated by a LF) */
-             *p = 0;
-             if (!strncmp (buffer, "[GNUPG:] ", 9)
-                 && buffer[9] >= 'A' && buffer[9] <= 'Z')
-               {
-                 struct status_table_s t, *r;
-                 char *rest;
-
-                 rest = strchr (buffer + 9, ' ');
-                 if (!rest)
-                   rest = p; /* Set to an empty string.  */
-                 else
-                   *rest++ = 0;
-                    
-                 t.name = buffer+9;
-                 /* (the status table has one extra element) */
-                 r = bsearch (&t, status_table, DIM(status_table) - 1,
-                              sizeof t, status_cmp);
-                 if (r)
-                   {
-                     if (gpg->cmd.used
-                         && (r->code == GPGME_STATUS_GET_BOOL
-                             || r->code == GPGME_STATUS_GET_LINE
-                             || r->code == GPGME_STATUS_GET_HIDDEN))
-                       {
-                         gpg->cmd.code = r->code;
-                         if (gpg->cmd.keyword)
-                           free (gpg->cmd.keyword);
-                         gpg->cmd.keyword = strdup (rest);
-                         if (!gpg->cmd.keyword)
-                           return gpg_error_from_errno (errno);
-                         /* This should be the last thing we have
-                            received and the next thing will be that
-                            the command handler does its action.  */
-                         if (nread > 1)
-                           DEBUG0 ("ERROR, unexpected data in read_status");
-
-                         add_io_cb (gpg, gpg->cmd.fd, 0,
-                                    command_handler, gpg,
-                                    &gpg->fd_data_map[gpg->cmd.idx].tag);
-                         gpg->fd_data_map[gpg->cmd.idx].fd = gpg->cmd.fd;
-                         gpg->cmd.fd = -1;
-                        }
-                     else if (gpg->status.fnc)
-                       {
-                         gpgme_error_t err;
-                         err = gpg->status.fnc (gpg->status.fnc_value, 
-                                                r->code, rest);
-                         if (err)
-                           return err;
-                        }
-                    
-                     if (r->code == GPGME_STATUS_END_STREAM)
-                       {
-                         if (gpg->cmd.used)
-                           {
-                             /* Before we can actually add the
-                                command fd, we might have to flush
-                                the linked output data pipe.  */
-                             if (gpg->cmd.linked_idx != -1
-                                 && gpg->fd_data_map[gpg->cmd.linked_idx].fd
-                                 != -1)
-                               {
-                                 struct io_select_fd_s fds;
-                                 fds.fd =
-                                   gpg->fd_data_map[gpg->cmd.linked_idx].fd;
-                                 fds.for_read = 1;
-                                 fds.for_write = 0;
-                                 fds.frozen = 0;
-                                 fds.opaque = NULL;
-                                 do
-                                   {
-                                     fds.signaled = 0;
-                                     _gpgme_io_select (&fds, 1, 1);
-                                     if (fds.signaled)
-                                       _gpgme_data_inbound_handler
-                                         (gpg->cmd.linked_data, fds.fd);
-                                   }
-                                 while (fds.signaled);
-                               }
-
-                             /* XXX We must check if there are any
-                                more fds active after removing this
-                                one.  */
-                             (*gpg->io_cbs.remove)
-                               (gpg->fd_data_map[gpg->cmd.idx].tag);
-                             gpg->cmd.fd = gpg->fd_data_map[gpg->cmd.idx].fd;
-                             gpg->fd_data_map[gpg->cmd.idx].fd = -1;
-                           }
-                        }
-                    }
-                }
-             /* To reuse the buffer for the next line we have to
-                shift the remaining data to the buffer start and
-                restart the loop Hmmm: We can optimize this function
-                by looking forward in the buffer to see whether a
-                second complete line is available and in this case
-                avoid the memmove for this line.  */
-             nread--; p++;
-             if (nread)
-               memmove (buffer, p, nread);
-             readpos = 0;
-             break; /* the for loop */
-            }
-         else
-           readpos++;
-        }
-    } 
-
-  /* Update the gpg object.  */
-  gpg->status.bufsize = bufsize;
-  gpg->status.buffer = buffer;
-  gpg->status.readpos = readpos;
-  return 0;
-}
-
-
-static gpgme_error_t
-status_handler (void *opaque, int fd)
-{
-  engine_gpg_t gpg = opaque;
-  int err;
-
-  assert (fd == gpg->status.fd[0]);
-  err = read_status (gpg);
-  if (err)
-    return err;
-  if (gpg->status.eof)
-    _gpgme_io_close (fd);
-  return 0;
-}
-
-
-static gpgme_error_t
-read_colon_line (engine_gpg_t gpg)
-{
-  char *p;
-  int nread;
-  size_t bufsize = gpg->colon.bufsize; 
-  char *buffer = gpg->colon.buffer;
-  size_t readpos = gpg->colon.readpos; 
-
-  assert (buffer);
-  if (bufsize - readpos < 256)
-    { 
-      /* Need more room for the read.  */
-      bufsize += 1024;
-      buffer = realloc (buffer, bufsize);
-      if (!buffer) 
-       return gpg_error_from_errno (errno);
-    }
-
-  nread = _gpgme_io_read (gpg->colon.fd[0], buffer+readpos, bufsize-readpos);
-  if (nread == -1)
-    return gpg_error_from_errno (errno);
-
-  if (!nread)
-    {
-      gpg->colon.eof = 1;
-      assert (gpg->colon.fnc);
-      gpg->colon.fnc (gpg->colon.fnc_value, NULL);
-      return 0;
-    }
-
-  while (nread > 0)
-    {
-      for (p = buffer + readpos; nread; nread--, p++)
-       {
-         if ( *p == '\n' )
-           {
-             /* (we require that the last line is terminated by a LF)
-                and we skip empty lines.  Note: we use UTF8 encoding
-                and escaping of special characters.  We require at
-                least one colon to cope with some other printed
-                information.  */
-             *p = 0;
-             if (*buffer && strchr (buffer, ':'))
-               {
-                 char *line = NULL;
-
-                 if (gpg->colon.preprocess_fnc)
-                   {
-                     gpgme_error_t err;
-
-                     err = gpg->colon.preprocess_fnc (buffer, &line);
-                     if (err)
-                       return err;
-                   }
-
-                 assert (gpg->colon.fnc);
-                 gpg->colon.fnc (gpg->colon.fnc_value, line ? line : buffer);
-                 if (line)
-                   free (line);
-               }
-            
-             /* To reuse the buffer for the next line we have to
-                shift the remaining data to the buffer start and
-                restart the loop Hmmm: We can optimize this function
-                by looking forward in the buffer to see whether a
-                second complete line is available and in this case
-                avoid the memmove for this line.  */
-             nread--; p++;
-             if (nread)
-               memmove (buffer, p, nread);
-             readpos = 0;
-             break; /* The for loop.  */
-            }
-         else
-           readpos++;
-        }
-    } 
-
-  /* Update the gpg object.  */
-  gpg->colon.bufsize = bufsize;
-  gpg->colon.buffer  = buffer;
-  gpg->colon.readpos = readpos;
-  return 0;
-}
-
-
-/* This colonline handler thing is not the clean way to do it.  It
-   might be better to enhance the gpgme_data_t object to act as a wrapper
-   for a callback.  Same goes for the status thing.  For now we use
-   this thing here because it is easier to implement.  */
-static gpgme_error_t
-colon_line_handler (void *opaque, int fd)
-{
-  engine_gpg_t gpg = opaque;
-  gpgme_error_t rc = 0;
-
-  assert (fd == gpg->colon.fd[0]);
-  rc = read_colon_line (gpg);
-  if (rc)
-    return rc;
-  if (gpg->colon.eof)
-    _gpgme_io_close (fd);
-  return 0;
-}
-
-
-static gpgme_error_t
-start (engine_gpg_t gpg)
-{
-  gpgme_error_t rc;
-  int saved_errno;
-  int i, n;
-  int status;
-  struct spawn_fd_item_s *fd_child_list, *fd_parent_list;
-
-  if (!gpg)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!gpg->file_name && !_gpgme_get_gpg_path ())
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  rc = build_argv (gpg);
-  if (rc)
-    return rc;
-
-  n = 3; /* status_fd, colon_fd and end of list */
-  for (i = 0; gpg->fd_data_map[i].data; i++) 
-    n++;
-  fd_child_list = calloc (n + n, sizeof *fd_child_list);
-  if (!fd_child_list)
-    return gpg_error_from_errno (errno);
-  fd_parent_list = fd_child_list + n;
-
-  /* build the fd list for the child */
-  n = 0;
-  if (gpg->colon.fnc)
-    {
-      fd_child_list[n].fd = gpg->colon.fd[1]; 
-      fd_child_list[n].dup_to = 1; /* dup to stdout */
-      n++;
-    }
-  for (i = 0; gpg->fd_data_map[i].data; i++)
-    {
-      if (gpg->fd_data_map[i].dup_to != -1)
-       {
-         fd_child_list[n].fd = gpg->fd_data_map[i].peer_fd;
-         fd_child_list[n].dup_to = gpg->fd_data_map[i].dup_to;
-         n++;
-        }
-    }
-  fd_child_list[n].fd = -1;
-  fd_child_list[n].dup_to = -1;
-
-  /* Build the fd list for the parent.  */
-  n = 0;
-  if (gpg->status.fd[1] != -1)
-    {
-      fd_parent_list[n].fd = gpg->status.fd[1];
-      fd_parent_list[n].dup_to = -1;
-      n++;
-    }
-  if (gpg->colon.fd[1] != -1)
-    {
-      fd_parent_list[n].fd = gpg->colon.fd[1];
-      fd_parent_list[n].dup_to = -1;
-      n++;
-    }
-  for (i = 0; gpg->fd_data_map[i].data; i++)
-    {
-      fd_parent_list[n].fd = gpg->fd_data_map[i].peer_fd;
-      fd_parent_list[n].dup_to = -1;
-      n++;
-    }        
-  fd_parent_list[n].fd = -1;
-  fd_parent_list[n].dup_to = -1;
-
-  status = _gpgme_io_spawn (gpg->file_name ? gpg->file_name :
-                           _gpgme_get_gpg_path (),
-                           gpg->argv, fd_child_list, fd_parent_list);
-  saved_errno = errno;
-  free (fd_child_list);
-  if (status == -1)
-    return gpg_error_from_errno (saved_errno);
-
-  /*_gpgme_register_term_handler ( closure, closure_value, pid );*/
-
-  rc = add_io_cb (gpg, gpg->status.fd[0], 1, status_handler, gpg,
-                 &gpg->status.tag);
-  if (rc)
-    /* FIXME: kill the child */
-    return rc;
-
-  if (gpg->colon.fnc)
-    {
-      assert (gpg->colon.fd[0] != -1);
-      rc = add_io_cb (gpg, gpg->colon.fd[0], 1, colon_line_handler, gpg,
-                     &gpg->colon.tag);
-      if (rc)
-       /* FIXME: kill the child */
-       return rc;
-    }
-
-  for (i = 0; gpg->fd_data_map[i].data; i++)
-    {
-      if (gpg->cmd.used && i == gpg->cmd.idx)
-       {
-         /* Park the cmd fd.  */
-         gpg->cmd.fd = gpg->fd_data_map[i].fd;
-         gpg->fd_data_map[i].fd = -1;
-       }
-      else
-       {
-         rc = add_io_cb (gpg, gpg->fd_data_map[i].fd,
-                         gpg->fd_data_map[i].inbound,
-                         gpg->fd_data_map[i].inbound
-                         ? _gpgme_data_inbound_handler
-                         : _gpgme_data_outbound_handler,
-                         gpg->fd_data_map[i].data, &gpg->fd_data_map[i].tag);
-         
-         if (rc)
-           /* FIXME: kill the child */
-           return rc;
-       }
-    }
-
-  (*gpg->io_cbs.event) (gpg->io_cbs.event_priv, GPGME_EVENT_START, NULL);
-  
-  /* fixme: check what data we can release here */
-  return 0;
-}
-
-
-static gpgme_error_t
-gpg_decrypt (void *engine, gpgme_data_t ciph, gpgme_data_t plain)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, "--decrypt");
-
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_arg (gpg, "--output");
-  if (!err)
-    err = add_arg (gpg, "-");
-  if (!err)
-    err = add_data (gpg, plain, 1, 1);
-  if (!err)
-    err = add_data (gpg, ciph, 0, 0);
-
-  if (!err)
-    start (gpg);
-  return err;
-}
-
-static gpgme_error_t
-gpg_delete (void *engine, gpgme_key_t key, int allow_secret)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, allow_secret ? "--delete-secret-and-public-key"
-                : "--delete-key");
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err)
-    {
-      if (!key->subkeys || !key->subkeys->fpr)
-       return gpg_error (GPG_ERR_INV_VALUE);
-      else
-       err = add_arg (gpg, key->subkeys->fpr);
-    }
-
-  if (!err)
-    start (gpg);
-  return err;
-}
-
-
-static gpgme_error_t
-append_args_from_signers (engine_gpg_t gpg, gpgme_ctx_t ctx /* FIXME */)
-{
-  gpgme_error_t err = 0;
-  int i;
-  gpgme_key_t key;
-
-  for (i = 0; (key = gpgme_signers_enum (ctx, i)); i++)
-    {
-      const char *s = key->subkeys ? key->subkeys->keyid : NULL;
-      if (s)
-       {
-         if (!err)
-           err = add_arg (gpg, "-u");
-         if (!err)
-           err = add_arg (gpg, s);
-       }
-      gpgme_key_unref (key);
-      if (err) break;
-    }
-  return err;
-}
-
-
-static gpgme_error_t
-append_args_from_sig_notations (engine_gpg_t gpg, gpgme_ctx_t ctx /* FIXME */)
-{
-  gpgme_error_t err = 0;
-  gpgme_sig_notation_t notation;
-
-  notation = gpgme_sig_notation_get (ctx);
-
-  while (!err && notation)
-    {
-      if (notation->name
-         && !(notation->flags & GPGME_SIG_NOTATION_HUMAN_READABLE))
-       err = gpg_error (GPG_ERR_INV_VALUE);
-      else if (notation->name)
-       {
-         char *arg;
-
-         /* Maximum space needed is one byte for the "critical" flag,
-            the name, one byte for '=', the value, and a terminating
-            '\0'.  */
-
-         arg = malloc (1 + notation->name_len + 1 + notation->value_len + 1);
-         if (!arg)
-           err = gpg_error_from_errno (errno);
-
-         if (!err)
-           {
-             char *argp = arg;
-
-             if (notation->critical)
-               *(argp++) = '!';
-
-             memcpy (argp, notation->name, notation->name_len);
-             argp += notation->name_len;
-
-             *(argp++) = '=';
-
-             /* We know that notation->name is '\0' terminated.  */
-             strcpy (argp, notation->value);
-           }
-
-         if (!err)
-           err = add_arg (gpg, "--sig-notation");
-         if (!err)
-           err = add_arg (gpg, arg);
-
-         if (arg)
-           free (arg);
-       }
-      else
-       {
-         /* This is a policy URL.  */
-
-         char *value;
-
-         if (notation->critical)
-           {
-             value = malloc (1 + notation->value_len + 1);
-             if (!value)
-               err = gpg_error_from_errno (errno);
-             else
-               {
-                 value[0] = '!';
-                 /* We know that notation->value is '\0' terminated.  */
-                 strcpy (&value[1], notation->value);
-               }
-           }
-         else
-           value = notation->value;
-
-         if (!err)
-           err = add_arg (gpg, "--sig-policy-url");
-         if (!err)
-           err = add_arg (gpg, value);
-
-         if (value != notation->value)
-           free (value);
-       }
-
-      notation = notation->next;
-    }
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_edit (void *engine, int type, gpgme_key_t key, gpgme_data_t out,
-         gpgme_ctx_t ctx /* FIXME */)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, "--with-colons");
-  if (!err)
-    err = append_args_from_signers (gpg, ctx);
-  if (!err)
-  err = add_arg (gpg, type == 0 ? "--edit-key" : "--card-edit");
-  if (!err)
-    err = add_data (gpg, out, 1, 1);
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err && type == 0)
-    {
-      const char *s = key->subkeys ? key->subkeys->fpr : NULL;
-      if (!s)
-       err = gpg_error (GPG_ERR_INV_VALUE);
-      else
-       err = add_arg (gpg, s);
-    }
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-append_args_from_recipients (engine_gpg_t gpg, gpgme_key_t recp[])
-{
-  gpgme_error_t err = 0;
-  int i = 0;
-
-  while (recp[i])
-    {
-      if (!recp[i]->subkeys || !recp[i]->subkeys->fpr)
-       err = gpg_error (GPG_ERR_INV_VALUE);
-      if (!err)
-       err = add_arg (gpg, "-r");
-      if (!err)
-       err = add_arg (gpg, recp[i]->subkeys->fpr);
-      if (err)
-       break;
-      i++;
-    }    
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_encrypt (void *engine, gpgme_key_t recp[], gpgme_encrypt_flags_t flags,
-            gpgme_data_t plain, gpgme_data_t ciph, int use_armor)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-  int symmetric = !recp;
-
-  err = add_arg (gpg, symmetric ? "--symmetric" : "--encrypt");
-
-  if (!err && use_armor)
-    err = add_arg (gpg, "--armor");
-
-  if (!symmetric)
-    {
-      /* If we know that all recipients are valid (full or ultimate trust)
-        we can suppress further checks.  */
-      if (!err && !symmetric && (flags & GPGME_ENCRYPT_ALWAYS_TRUST))
-       err = add_arg (gpg, "--always-trust");
-
-      if (!err)
-       err = append_args_from_recipients (gpg, recp);
-    }
-
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_arg (gpg, "--output");
-  if (!err)
-    err = add_arg (gpg, "-");
-  if (!err)
-    err = add_data (gpg, ciph, 1, 1);
-  if (gpgme_data_get_file_name (plain))
-    {
-      if (!err)
-       err = add_arg (gpg, "--set-filename");
-      if (!err)
-       err = add_arg (gpg, gpgme_data_get_file_name (plain));
-    }
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err)
-    err = add_data (gpg, plain, 0, 0);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_encrypt_sign (void *engine, gpgme_key_t recp[],
-                 gpgme_encrypt_flags_t flags, gpgme_data_t plain,
-                 gpgme_data_t ciph, int use_armor,
-                 gpgme_ctx_t ctx /* FIXME */)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, "--encrypt");
-  if (!err)
-    err = add_arg (gpg, "--sign");
-  if (!err && use_armor)
-    err = add_arg (gpg, "--armor");
-
-  /* If we know that all recipients are valid (full or ultimate trust)
-     we can suppress further checks.  */
-  if (!err && (flags & GPGME_ENCRYPT_ALWAYS_TRUST))
-    err = add_arg (gpg, "--always-trust");
-
-  if (!err)
-    err = append_args_from_recipients (gpg, recp);
-
-  if (!err)
-    err = append_args_from_signers (gpg, ctx);
-  if (!err)
-    err = append_args_from_sig_notations (gpg, ctx);
-
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_arg (gpg, "--output");
-  if (!err)
-    err = add_arg (gpg, "-");
-  if (!err)
-    err = add_data (gpg, ciph, 1, 1);
-  if (gpgme_data_get_file_name (plain))
-    {
-      if (!err)
-       err = add_arg (gpg, "--set-filename");
-      if (!err)
-       err = add_arg (gpg, gpgme_data_get_file_name (plain));
-    }
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err)
-    err = add_data (gpg, plain, 0, 0);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_export (void *engine, const char *pattern, unsigned int reserved,
-           gpgme_data_t keydata, int use_armor)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = add_arg (gpg, "--export");
-  if (!err && use_armor)
-    err = add_arg (gpg, "--armor");
-  if (!err)
-    err = add_data (gpg, keydata, 1, 1);
-  if (!err)
-    err = add_arg (gpg, "--");
-
-  if (!err && pattern && *pattern)
-    err = add_arg (gpg, pattern);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_export_ext (void *engine, const char *pattern[], unsigned int reserved,
-               gpgme_data_t keydata, int use_armor)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = add_arg (gpg, "--export");
-  if (!err && use_armor)
-    err = add_arg (gpg, "--armor");
-  if (!err)
-    err = add_data (gpg, keydata, 1, 1);
-  if (!err)
-    err = add_arg (gpg, "--");
-
-  if (pattern)
-    {
-      while (!err && *pattern && **pattern)
-       err = add_arg (gpg, *(pattern++));
-    }
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_genkey (void *engine, gpgme_data_t help_data, int use_armor,
-           gpgme_data_t pubkey, gpgme_data_t seckey)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (!gpg)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  /* We need a special mechanism to get the fd of a pipe here, so that
-     we can use this for the %pubring and %secring parameters.  We
-     don't have this yet, so we implement only the adding to the
-     standard keyrings.  */
-  if (pubkey || seckey)
-    return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
-
-  err = add_arg (gpg, "--gen-key");
-  if (!err && use_armor)
-    err = add_arg (gpg, "--armor");
-  if (!err)
-    err = add_data (gpg, help_data, 0, 0);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_import (void *engine, gpgme_data_t keydata)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, "--import");
-  if (!err)
-    err = add_data (gpg, keydata, 0, 0);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-/* The output for external keylistings in GnuPG is different from all
-   the other key listings.  We catch this here with a special
-   preprocessor that reformats the colon handler lines.  */
-static gpgme_error_t
-gpg_keylist_preprocess (char *line, char **r_line)
-{
-  enum
-    {
-      RT_NONE, RT_INFO, RT_PUB, RT_UID
-    }
-  rectype = RT_NONE;
-#define NR_FIELDS 16
-  char *field[NR_FIELDS];
-  int fields = 0;
-
-  *r_line = NULL;
-
-  while (line && fields < NR_FIELDS)
-    {
-      field[fields++] = line;
-      line = strchr (line, ':');
-      if (line)
-       *(line++) = '\0';
-    }
-
-  if (!strcmp (field[0], "info"))
-    rectype = RT_INFO;
-  else if (!strcmp (field[0], "pub"))
-    rectype = RT_PUB;
-  else if (!strcmp (field[0], "uid"))
-    rectype = RT_UID;
-  else 
-    rectype = RT_NONE;
-
-  switch (rectype)
-    {
-    case RT_INFO:
-      /* FIXME: Eventually, check the version number at least.  */
-      return 0;
-
-    case RT_PUB:
-      if (fields < 7)
-       return 0;
-
-      /* The format is:
-
-        pub:<keyid>:<algo>:<keylen>:<creationdate>:<expirationdate>:<flags>
-
-        as defined in 5.2. Machine Readable Indexes of the OpenPGP
-        HTTP Keyserver Protocol (draft). 
-
-        We want:
-        pub:o<flags>:<keylen>:<algo>:<keyid>:<creatdate>:<expdate>::::::::
-      */
-
-      if (asprintf (r_line, "pub:o%s:%s:%s:%s:%s:%s::::::::",
-                   field[6], field[3], field[2], field[1],
-                   field[4], field[5]) < 0)
-       return gpg_error_from_errno (errno);
-      return 0;
-
-    case RT_UID:
-      /* The format is:
-
-         uid:<escaped uid string>:<creationdate>:<expirationdate>:<flags>
-
-        as defined in 5.2. Machine Readable Indexes of the OpenPGP
-        HTTP Keyserver Protocol (draft). 
-
-        We want:
-        uid:o<flags>::::<creatdate>:<expdate>:::<uid>:
-      */
-
-      if (asprintf (r_line, "uid:o%s::::%s:%s:::%s:",
-                   field[4], field[2], field[3], field[1]) < 0)
-       return gpg_error_from_errno (errno);
-      return 0;
-
-    case RT_NONE:
-      /* Unknown record.  */
-      break;
-    }
-  return 0;
-
-}
-
-
-static gpgme_error_t
-gpg_keylist (void *engine, const char *pattern, int secret_only,
-            gpgme_keylist_mode_t mode)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (mode & GPGME_KEYLIST_MODE_EXTERN)
-    {
-      if ((mode & GPGME_KEYLIST_MODE_LOCAL)
-         || secret_only)
-       return gpg_error (GPG_ERR_NOT_SUPPORTED);
-    }
-  
-  err = add_arg (gpg, "--with-colons");
-  if (!err)
-    err = add_arg (gpg, "--fixed-list-mode");
-  if (!err)
-    err = add_arg (gpg, "--with-fingerprint");
-  if (!err)
-    err = add_arg (gpg, "--with-fingerprint");
-  if (!err && (mode & GPGME_KEYLIST_MODE_SIGS)
-      && (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS))
-    {
-      err = add_arg (gpg, "--list-options");
-      if (!err)
-       err = add_arg (gpg, "show-sig-subpackets=\"20,26\"");
-    }
-  if (!err)
-    {
-      if (mode & GPGME_KEYLIST_MODE_EXTERN)
-       {
-         err = add_arg (gpg, "--search-keys");
-         gpg->colon.preprocess_fnc = gpg_keylist_preprocess;
-       }
-      else
-       {
-         err = add_arg (gpg, secret_only ? "--list-secret-keys"
-                        : ((mode & GPGME_KEYLIST_MODE_SIGS)
-                           ? "--check-sigs" : "--list-keys"));
-       }
-    }
-
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err && pattern && *pattern)
-    err = add_arg (gpg, pattern);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_keylist_ext (void *engine, const char *pattern[], int secret_only,
-                int reserved, gpgme_keylist_mode_t mode)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (reserved)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = add_arg (gpg, "--with-colons");
-  if (!err)
-    err = add_arg (gpg, "--fixed-list-mode");
-  if (!err)
-    err = add_arg (gpg, "--with-fingerprint");
-  if (!err)
-    err = add_arg (gpg, "--with-fingerprint");
-  if (!err && (mode & GPGME_KEYLIST_MODE_SIGS)
-      && (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS))
-    {
-      err = add_arg (gpg, "--list-options");
-      if (!err)
-       err = add_arg (gpg, "show-sig-subpackets=\"20,26\"");
-    }
-  if (!err)
-    err = add_arg (gpg, secret_only ? "--list-secret-keys"
-                  : ((mode & GPGME_KEYLIST_MODE_SIGS)
-                     ? "--check-sigs" : "--list-keys"));
-  if (!err)
-    err = add_arg (gpg, "--");
-
-  if (pattern)
-    {
-      while (!err && *pattern && **pattern)
-       err = add_arg (gpg, *(pattern++));
-    }
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_sign (void *engine, gpgme_data_t in, gpgme_data_t out,
-         gpgme_sig_mode_t mode, int use_armor, int use_textmode,
-         int include_certs, gpgme_ctx_t ctx /* FIXME */)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  if (mode == GPGME_SIG_MODE_CLEAR)
-    err = add_arg (gpg, "--clearsign");
-  else
-    {
-      err = add_arg (gpg, "--sign");
-      if (!err && mode == GPGME_SIG_MODE_DETACH)
-       err = add_arg (gpg, "--detach");
-      if (!err && use_armor)
-       err = add_arg (gpg, "--armor");
-      if (!err && use_textmode)
-       err = add_arg (gpg, "--textmode");
-    }
-
-  if (!err)
-    err = append_args_from_signers (gpg, ctx);
-  if (!err)
-    err = append_args_from_sig_notations (gpg, ctx);
-
-  if (gpgme_data_get_file_name (in))
-    {
-      if (!err)
-       err = add_arg (gpg, "--set-filename");
-      if (!err)
-       err = add_arg (gpg, gpgme_data_get_file_name (in));
-    }
-
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_data (gpg, in, 0, 0);
-  if (!err)
-    err = add_data (gpg, out, 1, 1);
-
-  if (!err)
-    start (gpg);
-
-  return err;
-}
-
-static gpgme_error_t
-gpg_trustlist (void *engine, const char *pattern)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err;
-
-  err = add_arg (gpg, "--with-colons");
-  if (!err)
-    err = add_arg (gpg, "--list-trust-path");
-  
-  /* Tell the gpg object about the data.  */
-  if (!err)
-    err = add_arg (gpg, "--");
-  if (!err)
-    err = add_arg (gpg, pattern);
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static gpgme_error_t
-gpg_verify (void *engine, gpgme_data_t sig, gpgme_data_t signed_text,
-           gpgme_data_t plaintext)
-{
-  engine_gpg_t gpg = engine;
-  gpgme_error_t err = 0;
-
-  if (plaintext)
-    {
-      /* Normal or cleartext signature.  */
-
-      err = add_arg (gpg, "--output");
-      if (!err)
-       err = add_arg (gpg, "-");
-      if (!err)
-       err = add_arg (gpg, "--");
-      if (!err)
-       err = add_data (gpg, sig, 0, 0);
-      if (!err)
-       err = add_data (gpg, plaintext, 1, 1);
-    }
-  else
-    {
-      err = add_arg (gpg, "--verify");
-      if (!err)
-       err = add_arg (gpg, "--");
-      if (!err)
-       err = add_data (gpg, sig, -1, 0);
-      if (signed_text)
-       {
-         if (!err)
-           err = add_arg (gpg, "-");
-         if (!err)
-           err = add_data (gpg, signed_text, 0, 0);
-       }
-    }
-
-  if (!err)
-    err = start (gpg);
-
-  return err;
-}
-
-
-static void
-gpg_set_io_cbs (void *engine, gpgme_io_cbs_t io_cbs)
-{
-  engine_gpg_t gpg = engine;
-
-  gpg->io_cbs = *io_cbs;
-}
-
-\f
-struct engine_ops _gpgme_engine_ops_gpg =
-  {
-    /* Static functions.  */
-    _gpgme_get_gpg_path,
-    gpg_get_version,
-    gpg_get_req_version,
-    gpg_new,
-
-    /* Member functions.  */
-    gpg_release,
-    gpg_set_status_handler,
-    gpg_set_command_handler,
-    gpg_set_colon_line_handler,
-    gpg_decrypt,
-    gpg_delete,
-    gpg_edit,
-    gpg_encrypt,
-    gpg_encrypt_sign,
-    gpg_export,
-    gpg_export_ext,
-    gpg_genkey,
-    gpg_import,
-    gpg_keylist,
-    gpg_keylist_ext,
-    gpg_sign,
-    gpg_trustlist,
-    gpg_verify,
-    gpg_set_io_cbs,
-    gpg_io_event,
-    gpg_cancel
-  };
diff --git a/tags/gpgme-1-1-1/gpgme/sema.h b/tags/gpgme-1-1-1/gpgme/sema.h
deleted file mode 100644 (file)
index 0ee2074..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* sema.h - Definitions for semaphores.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef SEMA_H
-#define SEMA_H
-
-struct critsect_s
-{
-  const char *name;
-  void *private;
-};
-
-#define DEFINE_GLOBAL_LOCK(name) \
-  struct critsect_s name = { #name, NULL }
-#define DEFINE_STATIC_LOCK(name) \
-  static struct critsect_s name  = { #name, NULL }
-
-#define DECLARE_LOCK(name) \
-  struct critsect_s name
-#define INIT_LOCK(a)                   \
-  do                                   \
-    {                                  \
-      (a).name = #a;                   \
-      (a).private = NULL;              \
-    }                                  \
-  while (0)
-#define DESTROY_LOCK(name) _gpgme_sema_cs_destroy (&(name))
-                       
-
-#define LOCK(name)                     \
-  do                                   \
-    {                                  \
-      _gpgme_sema_cs_enter (&(name));  \
-    }                                  \
-  while (0)
-
-#define UNLOCK(name)                   \
-  do                                   \
-    {                                  \
-      _gpgme_sema_cs_leave (&(name));  \
-    }                                  \
-  while (0)
-
-void _gpgme_sema_subsystem_init (void);
-void _gpgme_sema_cs_enter (struct critsect_s *s);
-void _gpgme_sema_cs_leave (struct critsect_s *s);
-void _gpgme_sema_cs_destroy (struct critsect_s *s);
-
-#endif /* SEMA_H */
diff --git a/tags/gpgme-1-1-1/gpgme/sig-notation.c b/tags/gpgme-1-1-1/gpgme/sig-notation.c
deleted file mode 100644 (file)
index 5800c37..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/* sig-notation.c - Signature notation data support.
-   Copyright (C) 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-/* Free the signature notation object and all associated resources.
-   The object must already be removed from any linked list as the next
-   pointer is ignored.  */
-void
-_gpgme_sig_notation_free (gpgme_sig_notation_t notation)
-{
-  if (notation->name)
-    free (notation->name);
-
-  if (notation->value)
-    free (notation->value);
-
-  free (notation);
-}
-
-\f
-/* Set the flags of NOTATION to FLAGS.  */
-static void
-sig_notation_set_flags (gpgme_sig_notation_t notation,
-                       gpgme_sig_notation_flags_t flags)
-{
-  /* We copy the flags into individual bits to make them easier
-     accessible individually for the user.  */
-  notation->human_readable = flags & GPGME_SIG_NOTATION_HUMAN_READABLE ? 1 : 0;
-  notation->critical = flags & GPGME_SIG_NOTATION_CRITICAL ? 1 : 0; 
-
-  notation->flags = flags;
-}
-
-
-/* Create a new, empty signature notation data object.  */
-gpgme_error_t
-_gpgme_sig_notation_create (gpgme_sig_notation_t *notationp,
-                           const char *name, int name_len,
-                           const char *value, int value_len,
-                           gpgme_sig_notation_flags_t flags)
-{
-  gpgme_error_t err = 0;
-  gpgme_sig_notation_t notation;
-
-  /* Currently, we require all notations to be human-readable.  */
-  if (name && !(flags & GPGME_SIG_NOTATION_HUMAN_READABLE))
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  notation = calloc (1, sizeof (*notation));
-  if (!notation)
-    return gpg_error_from_errno (errno);
-
-  /* This is critical.  We want to reliably identify policy URLs by
-     using a NULL pointer for NAME.  So all notations must have a NAME
-     string, even if it is empty.  */
-  if (name)
-    {
-      /* We add a trailing '\0' for stringification in the good
-        case.  */
-      notation->name = malloc (name_len + 1);
-      if (!notation->name)
-       {
-         err = gpg_error_from_errno (errno);
-         goto err;
-       }
-
-      memcpy (notation->name, name, name_len);
-      notation->name[name_len] = '\0';
-      notation->name_len = name_len;
-    }
-
-  if (value)
-    {
-      /* We add a trailing '\0' for stringification in the good
-        case.  */
-      notation->value = malloc (value_len + 1);
-      if (!notation->value)
-       {
-         err = gpg_error_from_errno (errno);
-         goto err;
-       }
-
-      memcpy (notation->value, value, value_len);
-      notation->value[value_len] = '\0';
-      notation->value_len = value_len;
-    }
-
-  sig_notation_set_flags (notation, flags);
-
-  *notationp = notation;
-  return 0;
-
- err:
-  _gpgme_sig_notation_free (notation);
-  return err;
-}
-
-\f
-/* GnuPG subpacket flags.  */
-
-/* This subpacket data is part of the hashed data.  */
-#define GNUPG_SPK_HASHED       0x01
-
-/* This subpacket is marked critical.  */
-#define GNUPG_SPK_CRITICAL     0x02
-
-/* Parse a notation or policy URL subpacket.  If the packet type is
-   not known, return no error but NULL in NOTATION.  */
-gpgme_error_t
-_gpgme_parse_notation (gpgme_sig_notation_t *notationp,
-                      int type, int pkflags, int len, char *data)
-{
-  gpgme_error_t err;
-  char *name = NULL;
-  int name_len = 0;
-  char *value = NULL;
-  int value_len = 0;
-  gpgme_sig_notation_flags_t flags = 0;
-  char *decoded_data;
-  unsigned char *bdata;
-
-  /* Type 20: Notation data.  */
-  /* Type 26: Policy URL.  */
-  if (type != 20 && type != 26)
-    {
-      *notationp = NULL;
-      return 0;
-    }
-
-  /* A few simple sanity checks.  */
-  if (len > strlen (data))
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  /* See below for the format of a notation subpacket.  It has at
-     least four octets of flags and two times two octets of length
-     information.  */
-  if (type == 20 && len < 4 + 2 + 2)
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  err = _gpgme_decode_percent_string (data, &decoded_data, 0, 1);
-  if (err)
-    return err;
-  bdata = (unsigned char *) decoded_data;
-
-  /* Flags common to notation data and policy URL.  */
-  if (pkflags & GNUPG_SPK_CRITICAL)
-    flags |= GPGME_SIG_NOTATION_CRITICAL;
-
-  /* This information is relevant in parsing multi-octet numbers below:
-
-     3.1. Scalar numbers
-
-     Scalar numbers are unsigned, and are always stored in big-endian
-     format.  Using n[k] to refer to the kth octet being interpreted,
-     the value of a two-octet scalar is ((n[0] << 8) + n[1]).  The
-     value of a four-octet scalar is ((n[0] << 24) + (n[1] << 16) +
-     (n[2] << 8) + n[3]).
-
-     From RFC2440: OpenPGP Message Format.  Copyright (C) The Internet
-     Society (1998).  All Rights Reserved.  */
-#define RFC2440_GET_WORD(chr) ((((int)((unsigned char *)(chr))[0]) << 8) \
-                              + ((int)((unsigned char *)(chr))[1]))
-
-  if (type == 20)
-    {
-      /* 5.2.3.15. Notation Data
-
-        (4 octets of flags, 2 octets of name length (M),
-        2 octets of value length (N), M octets of name data,
-        N octets of value data)
-
-        [...] The "flags" field holds four octets of flags.
-        All undefined flags MUST be zero. Defined flags are:
-
-        First octet: 0x80 = human-readable. [...]
-        Other octets:  none.
-
-        From RFC2440: OpenPGP Message Format.  Copyright (C) The
-        Internet Society (1998).  All Rights Reserved.  */
-
-      int chr;
-
-      /* First octet of flags.  */
-#define RFC2440_SPK20_FLAG1_HUMAN_READABLE 0x80
-
-      chr = *bdata;
-      bdata++;
-
-      if (chr & RFC2440_SPK20_FLAG1_HUMAN_READABLE)
-       flags |= GPGME_SIG_NOTATION_HUMAN_READABLE;
-
-      /* The second, third and four octet of flags are unused.  */
-      bdata++;
-      bdata++;
-      bdata++;
-
-      name_len = RFC2440_GET_WORD (bdata);
-      bdata += 2;
-
-      value_len = RFC2440_GET_WORD (bdata);
-      bdata += 2;
-
-      /* Small sanity check.  */
-      if (4 + 2 + 2 + name_len + value_len > len)
-       {
-         free (decoded_data);
-         return gpg_error (GPG_ERR_INV_ENGINE);
-       }
-
-      name = (char *) bdata;
-      bdata += name_len;
-
-      value = (char *) bdata;
-    }
-  else
-    {
-      /* Type is 26.  */
-
-      /* NAME is NULL, name_len is 0.  */
-
-      value = (char *) bdata;
-      value_len = strlen (value);
-    }
-
-  err = _gpgme_sig_notation_create (notationp, name, name_len,
-                                   value, value_len, flags);
-
-  free (decoded_data);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/sign.c b/tags/gpgme-1-1-1/gpgme/sign.c
deleted file mode 100644 (file)
index 310f917..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/* sign.c - Signing function.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "ops.h"
-#include "util.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_sign_result result;
-
-  /* A pointer to the next pointer of the last invalid signer in
-     the list.  This makes appending new invalid signers painless
-     while preserving the order.  */
-  gpgme_invalid_key_t *last_signer_p;
-
-  /* Likewise for signature information.  */
-  gpgme_new_signature_t *last_sig_p;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  gpgme_invalid_key_t invalid_signer = opd->result.invalid_signers;
-  gpgme_new_signature_t sig = opd->result.signatures;
-
-  while (invalid_signer)
-    {
-      gpgme_invalid_key_t next = invalid_signer->next;
-      if (invalid_signer->fpr)
-       free (invalid_signer->fpr);
-      free (invalid_signer);
-      invalid_signer = next;
-    }
-
-  while (sig)
-    {
-      gpgme_new_signature_t next = sig->next;
-      free (sig->fpr);
-      free (sig);
-      sig = next;
-    }
-}
-
-
-gpgme_sign_result_t
-gpgme_op_sign_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_SIGN, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-static gpgme_error_t
-parse_sig_created (char *args, gpgme_new_signature_t *sigp)
-{
-  gpgme_new_signature_t sig;
-  char *tail;
-
-  sig = malloc (sizeof (*sig));
-  if (!sig)
-    return gpg_error_from_errno (errno);
-
-  sig->next = NULL;
-  switch (*args)
-    {
-    case 'S':
-      sig->type = GPGME_SIG_MODE_NORMAL;
-      break;
-
-    case 'D':
-      sig->type = GPGME_SIG_MODE_DETACH;
-      break;
-
-    case 'C':
-      sig->type = GPGME_SIG_MODE_CLEAR;
-      break;
-
-    default:
-      /* The backend engine is not behaving.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-
-  args++;
-  if (*args != ' ')
-    {
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-
-  errno = 0;
-  sig->pubkey_algo = strtol (args, &tail, 0);
-  if (errno || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-  args = tail;
-
-  sig->hash_algo = strtol (args, &tail, 0);
-  if (errno || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-  args = tail;
-
-  sig->sig_class = strtol (args, &tail, 0);
-  sig->class = sig->sig_class;
-  sig->_obsolete_class = sig->sig_class;
-  if (errno || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-  args = tail;
-
-  sig->timestamp = _gpgme_parse_timestamp (args, &tail);
-  if (sig->timestamp == -1 || args == tail || *tail != ' ')
-    {
-      /* The crypto backend does not behave.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-  args = tail;
-  while (*args == ' ')
-    args++;
-
-  if (!*args)
-    {
-      /* The crypto backend does not behave.  */
-      free (sig);
-      return gpg_error (GPG_ERR_INV_ENGINE);
-    }
-
-  tail = strchr (args, ' ');
-  if (tail)
-    *tail = '\0';
-
-  sig->fpr = strdup (args);
-  if (!sig->fpr)
-    {
-      int saved_errno = errno;
-      free (sig);
-      return gpg_error_from_errno (saved_errno);
-    }
-  *sigp = sig;
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_passphrase_status_handler (priv, code, args);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_SIGN, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  switch (code)
-    {
-    case GPGME_STATUS_SIG_CREATED:
-      err = parse_sig_created (args, opd->last_sig_p);
-      if (err)
-       return err;
-
-      opd->last_sig_p = &(*opd->last_sig_p)->next;
-      break;
-
-    case GPGME_STATUS_INV_RECP:
-      err = _gpgme_parse_inv_recp (args, opd->last_signer_p);
-      if (err)
-       return err;
-
-      opd->last_signer_p = &(*opd->last_signer_p)->next;
-      break;
-
-    case GPGME_STATUS_EOF:
-      if (opd->result.invalid_signers)
-       return gpg_error (GPG_ERR_UNUSABLE_SECKEY);
-      break;
-
-    default:
-      break;
-    }
-  return err;
-}
-
-
-static gpgme_error_t
-sign_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_sign_status_handler (priv, code, args);
-  return err;
-}
-
-
-gpgme_error_t
-_gpgme_op_sign_init_result (gpgme_ctx_t ctx)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_SIGN, &hook,
-                              sizeof (*opd), release_op_data);
-  opd = hook;
-  if (err)
-    return err;
-  opd->last_signer_p = &opd->result.invalid_signers;
-  opd->last_sig_p = &opd->result.signatures;
-  return 0;
-}
-
-
-static gpgme_error_t
-sign_start (gpgme_ctx_t ctx, int synchronous, gpgme_data_t plain,
-           gpgme_data_t sig, gpgme_sig_mode_t mode)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_sign_init_result (ctx);
-  if (err)
-    return err;
-
-  if (mode != GPGME_SIG_MODE_NORMAL && mode != GPGME_SIG_MODE_DETACH
-      && mode != GPGME_SIG_MODE_CLEAR)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (!plain)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!sig)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (ctx->passphrase_cb)
-    {
-      err = _gpgme_engine_set_command_handler
-       (ctx->engine, _gpgme_passphrase_command_handler, ctx, NULL);
-      if (err)
-       return err;
-    }
-
-  _gpgme_engine_set_status_handler (ctx->engine, sign_status_handler,
-                                   ctx);
-
-  return _gpgme_engine_op_sign (ctx->engine, plain, sig, mode, ctx->use_armor,
-                               ctx->use_textmode, ctx->include_certs,
-                               ctx /* FIXME */);
-}
-
-
-/* Sign the plaintext PLAIN and store the signature in SIG.  */
-gpgme_error_t
-gpgme_op_sign_start (gpgme_ctx_t ctx, gpgme_data_t plain, gpgme_data_t sig,
-                    gpgme_sig_mode_t mode)
-{
-  return sign_start (ctx, 0, plain, sig, mode);
-}
-
-
-/* Sign the plaintext PLAIN and store the signature in SIG.  */
-gpgme_error_t
-gpgme_op_sign (gpgme_ctx_t ctx, gpgme_data_t plain, gpgme_data_t sig,
-              gpgme_sig_mode_t mode)
-{
-  gpgme_error_t err = sign_start (ctx, 1, plain, sig, mode);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/signers.c b/tags/gpgme-1-1-1/gpgme/signers.c
deleted file mode 100644 (file)
index f1ce58f..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* signers.c - Maintain signer sets.
-   Copyright (C) 2001 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "util.h"
-#include "context.h"
-
-\f
-/* Delete all signers from CTX.  */
-void
-gpgme_signers_clear (gpgme_ctx_t ctx)
-{
-  unsigned int i;
-
-  if (!ctx || !ctx->signers)
-    return;
-
-  for (i = 0; i < ctx->signers_len; i++)
-    {
-      assert (ctx->signers[i]);
-      gpgme_key_unref (ctx->signers[i]);
-      ctx->signers[i] = NULL;
-    }
-  ctx->signers_len = 0;
-}
-
-/* Add KEY to list of signers in CTX.  */
-gpgme_error_t
-gpgme_signers_add (gpgme_ctx_t ctx, const gpgme_key_t key)
-{
-  if (!ctx || !key)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  if (ctx->signers_len == ctx->signers_size)
-    {
-      gpgme_key_t *newarr;
-      int n = ctx->signers_size + 5;
-      int j;
-
-      newarr = realloc (ctx->signers, n * sizeof (*newarr));
-      if (!newarr)
-       return gpg_error_from_errno (errno);
-      for (j = ctx->signers_size; j < n; j++)
-       newarr[j] = NULL;
-      ctx->signers = newarr;
-      ctx->signers_size = n;
-    }
-
-  gpgme_key_ref (key);
-  ctx->signers[ctx->signers_len++] = key;
-  return 0;
-}
-
-
-/* Return the SEQth signer's key in CTX with one reference.  */
-gpgme_key_t
-gpgme_signers_enum (const gpgme_ctx_t ctx, int seq)
-{
-  unsigned int seqno;
-
-  if (!ctx || seq < 0)
-    return NULL;
-
-  seqno = (unsigned int) seq;
-  if (seqno >= ctx->signers_len)
-    return NULL;
-  gpgme_key_ref (ctx->signers[seqno]);
-  return ctx->signers[seqno];
-}
diff --git a/tags/gpgme-1-1-1/gpgme/stpcpy.c b/tags/gpgme-1-1-1/gpgme/stpcpy.c
deleted file mode 100644 (file)
index 6e42911..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1992, 1995, 1997, 2002, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <string.h>
-
-#undef __stpcpy
-#undef stpcpy
-
-#ifndef weak_alias
-# define __stpcpy stpcpy
-#endif
-
-/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
-char *
-__stpcpy (dest, src)
-     char *dest;
-     const char *src;
-{
-  register char *d = dest;
-  register const char *s = src;
-
-  do
-    *d++ = *s;
-  while (*s++ != '\0');
-
-  return d - 1;
-}
-#ifdef libc_hidden_def
-libc_hidden_def (__stpcpy)
-#endif
-#ifdef weak_alias
-weak_alias (__stpcpy, stpcpy)
-#endif
-#ifdef libc_hidden_builtin_def
-libc_hidden_builtin_def (stpcpy)
-#endif
diff --git a/tags/gpgme-1-1-1/gpgme/trust-item.c b/tags/gpgme-1-1-1/gpgme/trust-item.c
deleted file mode 100644 (file)
index 4dd0c4e..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/* trust-item.c - Trust item objects.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "util.h"
-#include "ops.h"
-#include "sema.h"
-
-
-/* Protects all reference counters in trust items.  All other accesses
-   to a trust item are either read only or happen before the trust
-   item is available to the user.  */
-DEFINE_STATIC_LOCK (trust_item_ref_lock);
-
-\f
-/* Create a new trust item.  */
-gpgme_error_t
-_gpgme_trust_item_new (gpgme_trust_item_t *r_item)
-{
-  gpgme_trust_item_t item;
-
-  item = calloc (1, sizeof *item);
-  if (!item)
-    return gpg_error_from_errno (errno);
-  item->_refs = 1;
-  item->keyid = item->_keyid;
-  item->_keyid[16] = '\0';
-  item->owner_trust = item->_owner_trust;
-  item->_owner_trust[1] = '\0';
-  item->validity = item->_validity;
-  item->_validity[1] = '\0';
-  *r_item = item;
-  return 0;
-}
-
-\f
-/* Acquire a reference to ITEM.  */
-void
-gpgme_trust_item_ref (gpgme_trust_item_t item)
-{
-  LOCK (trust_item_ref_lock);
-  item->_refs++;
-  UNLOCK (trust_item_ref_lock);
-}
-
-
-/* gpgme_trust_item_unref releases the trust item object. Note that
-   this function may not do an actual release if there are other
-   shallow copies of the object.  You have to call this function for
-   every newly created trust item object as well as for every
-   gpgme_trust_item_ref() done on the trust item object.  */
-void
-gpgme_trust_item_unref (gpgme_trust_item_t item)
-{
-  LOCK (trust_item_ref_lock);
-  assert (item->_refs > 0);
-  if (--item->_refs)
-    {
-      UNLOCK (trust_item_ref_lock);
-      return;
-    }
-  UNLOCK (trust_item_ref_lock);
-
-  if (item->name)
-    free (item->name);
-  free (item);
-}
-
-\f
-/* Compatibility interfaces.  */
-void
-gpgme_trust_item_release (gpgme_trust_item_t item)
-{
-  gpgme_trust_item_unref (item);
-}
-
-/* Return the value of the attribute WHAT of ITEM, which has to be
-   representable by a string.  */
-const char *gpgme_trust_item_get_string_attr (gpgme_trust_item_t item,
-                                             _gpgme_attr_t what,
-                                             const void *reserved, int idx)
-{
-  const char *val = NULL;
-
-  if (!item)
-    return NULL;
-  if (reserved)
-    return NULL;
-  if (idx)
-    return NULL;
-
-  switch (what)
-    {
-    case GPGME_ATTR_KEYID:
-      val = item->keyid;
-      break;
-
-    case GPGME_ATTR_OTRUST:  
-      val = item->owner_trust;
-      break;
-
-    case GPGME_ATTR_VALIDITY:
-      val = item->validity;
-      break;
-
-    case GPGME_ATTR_USERID:  
-      val = item->name;
-      break;
-
-    default:
-      break;
-    }
-  return val;
-}
-
-
-/* Return the value of the attribute WHAT of KEY, which has to be
-   representable by an integer.  IDX specifies a running index if the
-   attribute appears more than once in the key.  */
-int gpgme_trust_item_get_int_attr (gpgme_trust_item_t item, _gpgme_attr_t what,
-                                  const void *reserved, int idx)
-{
-  int val = 0;
-
-  if (!item)
-    return 0;
-  if (reserved)
-    return 0;
-  if (idx)
-    return 0;
-
-  switch (what)
-    {
-    case GPGME_ATTR_LEVEL:    
-      val = item->level;
-      break;
-
-    case GPGME_ATTR_TYPE:    
-      val = item->type;
-      break;
-
-    default:
-      break;
-    }
-  return val;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/trustlist.c b/tags/gpgme-1-1-1/gpgme/trustlist.c
deleted file mode 100644 (file)
index f33860a..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/* trustlist.c - Trust item listing.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-struct trust_queue_item_s
-{
-  struct trust_queue_item_s *next;
-  gpgme_trust_item_t item;
-};
-
-typedef struct
-{
-  /* Something new is available.  */
-  int trust_cond;
-  struct trust_queue_item_s *trust_queue;
-} *op_data_t;
-
-
-\f
-static gpgme_error_t
-trustlist_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  return 0;
-}
-
-
-/* This handler is used to parse the output of --list-trust-path:
-   Format:
-   level:keyid:type:recno:ot:val:mc:cc:name:
-   With TYPE = U for a user ID
-               K for a key
-   The RECNO is either the one of the dir record or the one of the uid
-   record.  OT is the the usual trust letter and only availabel on K
-   lines.  VAL is the calcualted validity MC is the marginal trust
-   counter and only available on U lines CC is the same for the
-   complete count NAME ist the username and only printed on U
-   lines.  */
-static gpgme_error_t
-trustlist_colon_handler (void *priv, char *line)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  char *p, *pend;
-  int field = 0;
-  gpgme_trust_item_t item = NULL;
-
-  if (!line)
-    return 0; /* EOF */
-
-  for (p = line; p; p = pend)
-    {
-      field++;
-      pend = strchr (p, ':');
-      if (pend) 
-       *pend++ = 0;
-
-      switch (field)
-       {
-       case 1: /* level */
-         err = _gpgme_trust_item_new (&item);
-         if (err)
-           return err;
-         item->level = atoi (p);
-         break;
-       case 2: /* long keyid */
-         if (strlen (p) == DIM(item->keyid) - 1)
-           strcpy (item->keyid, p);
-         break;
-       case 3: /* type */
-         item->type = *p == 'K'? 1 : *p == 'U'? 2 : 0;
-         break;
-       case 5: /* owner trust */
-         item->_owner_trust[0] = *p;
-         break;
-       case 6: /* validity */
-         item->_validity[0] = *p;
-         break;
-       case 9: /* user ID */
-         item->name = strdup (p);
-         if (!item->name)
-           {
-             int saved_errno = errno;
-             gpgme_trust_item_unref (item);
-             return gpg_error_from_errno (saved_errno);
-           }
-         break;
-        }
-    }
-
-  if (item)
-    _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_NEXT_TRUSTITEM, item);
-  return 0;
-}
-
-
-void
-_gpgme_op_trustlist_event_cb (void *data, gpgme_event_io_t type,
-                             void *type_data)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) data;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-  gpgme_trust_item_t item = (gpgme_trust_item_t) type_data;
-  struct trust_queue_item_s *q, *q2;
-
-  assert (type == GPGME_EVENT_NEXT_TRUSTITEM);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return;
-
-  q = malloc (sizeof *q);
-  if (!q)
-    {
-      gpgme_trust_item_unref (item);
-      /* FIXME: GPGME_Out_Of_Core; */
-      return;
-    }
-  q->item = item;
-  q->next = NULL;
-  /* FIXME: Use a tail pointer */
-  q2 = opd->trust_queue;
-  if (!q2)
-    opd->trust_queue = q;
-  else
-    {
-      while (q2->next)
-       q2 = q2->next;
-      q2->next = q;
-    }
-  /* FIXME: unlock queue */
-  opd->trust_cond = 1;
-}
-
-
-gpgme_error_t
-gpgme_op_trustlist_start (gpgme_ctx_t ctx, const char *pattern, int max_level)
-{
-  gpgme_error_t err = 0;
-  void *hook;
-  op_data_t opd;
-
-  if (!pattern || !*pattern)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_reset (ctx, 2);
-  if (err)
-    return err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook,
-                              sizeof (*opd), NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine,
-                                   trustlist_status_handler, ctx);
-  err = _gpgme_engine_set_colon_line_handler (ctx->engine,
-                                             trustlist_colon_handler, ctx);
-  if (err)
-    return err;
-
-  return _gpgme_engine_op_trustlist (ctx->engine, pattern);
-}
-
-
-gpgme_error_t
-gpgme_op_trustlist_next (gpgme_ctx_t ctx, gpgme_trust_item_t *r_item)
-{
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-  struct trust_queue_item_s *q;
-
-  if (!r_item)
-    return gpg_error (GPG_ERR_INV_VALUE);
-  *r_item = NULL;
-  if (!ctx)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_TRUSTLIST, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  if (!opd->trust_queue)
-    {
-      err = _gpgme_wait_on_condition (ctx, &opd->trust_cond);
-      if (err)
-       return err;
-      if (!opd->trust_cond)
-       return gpg_error (GPG_ERR_EOF);
-      opd->trust_cond = 0; 
-      assert (opd->trust_queue);
-    }
-  q = opd->trust_queue;
-  opd->trust_queue = q->next;
-
-  *r_item = q->item;
-  free (q);
-  return 0;
-}
-
-
-/* Terminate a pending trustlist operation within CTX.  */
-gpgme_error_t
-gpgme_op_trustlist_end (gpgme_ctx_t ctx)
-{
-  if (!ctx)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/ttyname_r.c b/tags/gpgme-1-1-1/gpgme/ttyname_r.c
deleted file mode 100644 (file)
index 5cd2949..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ttyname_r.c - A ttyname_r() replacement.
-   Copyright (C) 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-
-\f
-#warning ttyname is not thread-safe, and ttyname_r is missing
-
-int
-ttyname_r (int fd, char *buf, size_t buflen)
-{
-#if HAVE_W32_SYSTEM
-  errno = ENOTTY; /* The best error code I have under mingw. */
-#else
-  char *tty;
-
-  tty = ttyname (fd);
-  if (!tty)
-    return errno;
-  
-  strncpy (buf, tty, buflen);
-  buf[buflen - 1] = '\0';
-  return (strlen (tty) >= buflen) ? ERANGE : 0;
-#endif
-}
diff --git a/tags/gpgme-1-1-1/gpgme/util.h b/tags/gpgme-1-1-1/gpgme/util.h
deleted file mode 100644 (file)
index 28d5e19..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* util.h 
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef UTIL_H
-#define UTIL_H
-
-#include "gpgme.h"
-
-\f
-#define DIM(v) (sizeof(v)/sizeof((v)[0]))
-
-\f
-/*-- {posix,w32}-util.c --*/
-const char *_gpgme_get_gpg_path (void);
-const char *_gpgme_get_gpgsm_path (void);
-int _gpgme_get_conf_int (const char *key, int *value);
-
-\f
-/*-- replacement functions in <funcname>.c --*/
-#ifdef HAVE_CONFIG_H
-
-#ifndef HAVE_STPCPY
-static _GPGME_INLINE char *
-_gpgme_stpcpy (char *a, const char *b)
-{
-  while (*b)
-    *a++ = *b++;
-  *a = 0;
-  return a;
-}
-#define stpcpy(a,b) _gpgme_stpcpy ((a), (b))
-#endif /*!HAVE_STPCPY*/
-
-#if !HAVE_VASPRINTF
-#include <stdarg.h>
-int vasprintf (char **result, const char *format, va_list args);
-int asprintf (char **result, const char *format, ...);
-#endif
-
-#ifndef HAVE_TTYNAME_R
-int ttyname_r (int fd, char *buf, size_t buflen);
-#endif
-#endif
-
-\f
-/*-- conversion.c --*/
-/* Convert two hexadecimal digits from STR to the value they
-   represent.  Returns -1 if one of the characters is not a
-   hexadecimal digit.  */
-int _gpgme_hextobyte (const char *str);
-
-/* Decode the C formatted string SRC and store the result in the
-   buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
-   large enough buffer is allocated with malloc and *DESTP is set to
-   the result.  Currently, LEN is only used to specify if allocation
-   is desired or not, the caller is expected to make sure that *DESTP
-   is large enough if LEN is not zero.  */
-gpgme_error_t _gpgme_decode_c_string (const char *src, char **destp,
-                                     size_t len);
-
-/* Decode the percent escaped string SRC and store the result in the
-   buffer *DESTP which is LEN bytes long.  If LEN is zero, then a
-   large enough buffer is allocated with malloc and *DESTP is set to
-   the result.  Currently, LEN is only used to specify if allocation
-   is desired or not, the caller is expected to make sure that *DESTP
-   is large enough if LEN is not zero.  If BINARY is 1, then '\0'
-   characters are allowed in the output.  */
-gpgme_error_t _gpgme_decode_percent_string (const char *src, char **destp,
-                                           size_t len, int binary);
-
-
-/* Parse the string TIMESTAMP into a time_t.  The string may either be
-   seconds since Epoch or in the ISO 8601 format like
-   "20390815T143012".  Returns 0 for an empty string or seconds since
-   Epoch. Leading spaces are skipped. If ENDP is not NULL, it will
-   point to the next non-parsed character in TIMESTRING. */
-time_t _gpgme_parse_timestamp (const char *timestamp, char **endp);
-
-
-gpgme_error_t _gpgme_map_gnupg_error (char *err);
-
-\f
-/* Retrieve the environment variable NAME and return a copy of it in a
-   malloc()'ed buffer in *VALUE.  If the environment variable is not
-   set, return NULL in *VALUE.  */
-gpgme_error_t _gpgme_getenv (const char *name, char **value);
-
-#endif /* UTIL_H */
diff --git a/tags/gpgme-1-1-1/gpgme/vasprintf.c b/tags/gpgme-1-1-1/gpgme/vasprintf.c
deleted file mode 100644 (file)
index 77113a3..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Like vsprintf but provides a pointer to malloc'd storage, which must
-   be freed by the caller.
-   Copyright (C) 1994, 2002 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-
-#ifndef va_copy /* According to POSIX, va_copy is a macro. */
-#if defined (__GNUC__) && defined (__PPC__) \
-     && (defined (_CALL_SYSV) || defined (_WIN32))
-#define va_copy(d, s) (*(d) = *(s))
-#elif defined (MUST_COPY_VA_BYVAL)
-#define va_copy(d, s) ((d) = (s))
-#else 
-#define va_copy(d, s) memcpy ((d), (s), sizeof (va_list))
-#endif 
-#endif 
-
-
-#ifdef TEST
-int global_total_width;
-#endif
-
-static int int_vasprintf (char **, const char *, va_list *);
-
-static int
-int_vasprintf (result, format, args)
-     char **result;
-     const char *format;
-     va_list *args;
-{
-  const char *p = format;
-  /* Add one to make sure that it is never zero, which might cause malloc
-     to return NULL.  */
-  int total_width = strlen (format) + 1;
-  va_list ap;
-
-  va_copy (ap, *args);
-
-  while (*p != '\0')
-    {
-      if (*p++ == '%')
-       {
-         while (strchr ("-+ #0", *p))
-           ++p;
-         if (*p == '*')
-           {
-             ++p;
-             total_width += abs (va_arg (ap, int));
-           }
-         else
-           total_width += strtoul (p, (char **) &p, 10);
-         if (*p == '.')
-           {
-             ++p;
-             if (*p == '*')
-               {
-                 ++p;
-                 total_width += abs (va_arg (ap, int));
-               }
-             else
-             total_width += strtoul (p, (char **) &p, 10);
-           }
-         while (strchr ("hlL", *p))
-           ++p;
-         /* Should be big enough for any format specifier except %s and floats.  */
-         total_width += 30;
-         switch (*p)
-           {
-           case 'd':
-           case 'i':
-           case 'o':
-           case 'u':
-           case 'x':
-           case 'X':
-           case 'c':
-             (void) va_arg (ap, int);
-             break;
-           case 'f':
-           case 'e':
-           case 'E':
-           case 'g':
-           case 'G':
-             (void) va_arg (ap, double);
-             /* Since an ieee double can have an exponent of 307, we'll
-                make the buffer wide enough to cover the gross case. */
-             total_width += 307;
-             break;
-           case 's':
-              {
-                char *tmp = va_arg (ap, char *);
-                if (tmp)
-                  total_width += strlen (tmp);
-                else /* in case the vsprintf does prints a text */
-                  total_width += 25; /* e.g. "(null pointer reference)" */
-              }
-             break;
-           case 'p':
-           case 'n':
-             (void) va_arg (ap, char *);
-             break;
-           }
-         p++;
-       }
-    }
-#ifdef TEST
-  global_total_width = total_width;
-#endif
-  *result = malloc (total_width);
-  if (*result != NULL)
-    return vsprintf (*result, format, *args);
-  else
-    return 0;
-}
-
-int
-vasprintf (result, format, args)
-     char **result;
-     const char *format;
-#if defined (_BSD_VA_LIST_) && defined (__FreeBSD__)
-     _BSD_VA_LIST_ args;
-#else
-     va_list args;
-#endif
-{
-  return int_vasprintf (result, format, &args);
-}
-
-
-int
-asprintf (char **buf, const char *fmt, ...)
-{
-  int status;
-  va_list ap;
-
-  va_start (ap, fmt);
-  status = vasprintf (buf, fmt, ap);
-  va_end (ap);
-  return status;
-}
-
-
-#ifdef TEST
-void
-checkit (const char* format, ...)
-{
-  va_list args;
-  char *result;
-
-  va_start (args, format);
-  vasprintf (&result, format, args);
-  if (strlen (result) < global_total_width)
-    printf ("PASS: ");
-  else
-    printf ("FAIL: ");
-  printf ("%d %s\n", global_total_width, result);
-}
-
-int
-main (void)
-{
-  checkit ("%d", 0x12345678);
-  checkit ("%200d", 5);
-  checkit ("%.300d", 6);
-  checkit ("%100.150d", 7);
-  checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333");
-  checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx");
-}
-#endif /* TEST */
diff --git a/tags/gpgme-1-1-1/gpgme/verify.c b/tags/gpgme-1-1-1/gpgme/verify.c
deleted file mode 100644 (file)
index 8596bbc..0000000
+++ /dev/null
@@ -1,974 +0,0 @@
-/* verify.c - Signature verification.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "gpgme.h"
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-
-\f
-typedef struct
-{
-  struct _gpgme_op_verify_result result;
-
-  gpgme_signature_t current_sig;
-  int did_prepare_new_sig;
-  int only_newsig_seen;
-} *op_data_t;
-
-
-static void
-release_op_data (void *hook)
-{
-  op_data_t opd = (op_data_t) hook;
-  gpgme_signature_t sig = opd->result.signatures;
-
-  while (sig)
-    {
-      gpgme_signature_t next = sig->next;
-      gpgme_sig_notation_t notation = sig->notations;
-
-      while (notation)
-       {
-         gpgme_sig_notation_t next_nota = notation->next;
-
-         _gpgme_sig_notation_free (notation);
-         notation = next_nota;
-       }
-
-      if (sig->fpr)
-       free (sig->fpr);
-      if (sig->pka_address)
-       free (sig->pka_address);
-      free (sig);
-      sig = next;
-    }
-
-  if (opd->result.file_name)
-    free (opd->result.file_name);
-}
-
-
-gpgme_verify_result_t
-gpgme_op_verify_result (gpgme_ctx_t ctx)
-{
-  void *hook;
-  op_data_t opd;
-  gpgme_error_t err;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_VERIFY, &hook, -1, NULL);
-  opd = hook;
-  if (err || !opd)
-    return NULL;
-
-  return &opd->result;
-}
-
-\f
-/* Build a summary vector from RESULT. */
-static void
-calc_sig_summary (gpgme_signature_t sig)
-{
-  unsigned long sum = 0;
-  
-  /* Calculate the red/green flag.  */
-  if (sig->validity == GPGME_VALIDITY_FULL
-      || sig->validity == GPGME_VALIDITY_ULTIMATE)
-    {
-      if (gpg_err_code (sig->status) == GPG_ERR_NO_ERROR
-         || gpg_err_code (sig->status) == GPG_ERR_SIG_EXPIRED
-         || gpg_err_code (sig->status) == GPG_ERR_KEY_EXPIRED)
-       sum |= GPGME_SIGSUM_GREEN;
-    }
-  else if (sig->validity == GPGME_VALIDITY_NEVER)
-    {
-      if (gpg_err_code (sig->status) == GPG_ERR_NO_ERROR
-         || gpg_err_code (sig->status) == GPG_ERR_SIG_EXPIRED
-         || gpg_err_code (sig->status) == GPG_ERR_KEY_EXPIRED)
-       sum |= GPGME_SIGSUM_RED;
-    }
-  else if (gpg_err_code (sig->status) == GPG_ERR_BAD_SIGNATURE)
-    sum |= GPGME_SIGSUM_RED;
-
-
-  /* FIXME: handle the case when key and message are expired. */
-  switch (gpg_err_code (sig->status))
-    {
-    case GPG_ERR_SIG_EXPIRED:
-      sum |= GPGME_SIGSUM_SIG_EXPIRED;
-      break;
-
-    case GPG_ERR_KEY_EXPIRED:
-      sum |= GPGME_SIGSUM_KEY_EXPIRED;
-      break;
-
-    case GPG_ERR_NO_PUBKEY:
-      sum |= GPGME_SIGSUM_KEY_MISSING;
-      break;
-
-    case GPG_ERR_BAD_SIGNATURE:
-    case GPG_ERR_NO_ERROR:
-      break;
-
-    default:
-      sum |= GPGME_SIGSUM_SYS_ERROR;
-      break;
-    }
-  
-  /* Now look at the certain reason codes.  */
-  switch (gpg_err_code (sig->validity_reason))
-    {
-    case GPG_ERR_CRL_TOO_OLD:
-      if (sig->validity == GPGME_VALIDITY_UNKNOWN)
-        sum |= GPGME_SIGSUM_CRL_TOO_OLD;
-      break;
-        
-    case GPG_ERR_CERT_REVOKED:
-      sum |= GPGME_SIGSUM_KEY_REVOKED;
-      break;
-
-    default:
-      break;
-    }
-
-  /* Check other flags. */
-  if (sig->wrong_key_usage)
-    sum |= GPGME_SIGSUM_BAD_POLICY;
-  
-  /* Set the valid flag when the signature is unquestionable
-     valid. */
-  if ((sum & GPGME_SIGSUM_GREEN) && !(sum & ~GPGME_SIGSUM_GREEN))
-    sum |= GPGME_SIGSUM_VALID;
-  
-  sig->summary = sum;
-}
-  
-
-static gpgme_error_t
-prepare_new_sig (op_data_t opd)
-{
-  gpgme_signature_t sig;
-
-  if (opd->only_newsig_seen && opd->current_sig)
-    {
-      /* We have only seen the NEWSIG status and nothing else - we
-         better skip this signature therefore and reuse it for the
-         next possible signature. */
-      sig = opd->current_sig;
-      memset (sig, 0, sizeof *sig);
-      assert (opd->result.signatures == sig);
-    }
-  else
-    {
-      sig = calloc (1, sizeof (*sig));
-      if (!sig)
-        return gpg_error_from_errno (errno);
-      if (!opd->result.signatures)
-        opd->result.signatures = sig;
-      if (opd->current_sig)
-        opd->current_sig->next = sig;
-      opd->current_sig = sig;
-    }
-  opd->did_prepare_new_sig = 1;
-  opd->only_newsig_seen = 0;
-  return 0;
-}
-
-static gpgme_error_t
-parse_new_sig (op_data_t opd, gpgme_status_code_t code, char *args)
-{
-  gpgme_signature_t sig;
-  char *end = strchr (args, ' ');
-  char *tail;
-
-  if (end)
-    {
-      *end = '\0';
-      end++;
-    }
-
-  if (!opd->did_prepare_new_sig)
-    {
-      gpg_error_t err;
-
-      err = prepare_new_sig (opd);
-      if (err)
-        return err;
-    }
-  assert (opd->did_prepare_new_sig);
-  opd->did_prepare_new_sig = 0;
-
-  assert (opd->current_sig);
-  sig = opd->current_sig;
-
-  /* FIXME: We should set the source of the state.  */
-  switch (code)
-    {
-    case GPGME_STATUS_GOODSIG:
-      sig->status = gpg_error (GPG_ERR_NO_ERROR);
-      break;
-
-    case GPGME_STATUS_EXPSIG:
-      sig->status = gpg_error (GPG_ERR_SIG_EXPIRED);
-      break;
-
-    case GPGME_STATUS_EXPKEYSIG:
-      sig->status = gpg_error (GPG_ERR_KEY_EXPIRED);
-      break;
-
-    case GPGME_STATUS_BADSIG:
-      sig->status = gpg_error (GPG_ERR_BAD_SIGNATURE);
-      break;
-
-    case GPGME_STATUS_REVKEYSIG:
-      sig->status = gpg_error (GPG_ERR_CERT_REVOKED);
-      break;
-
-    case GPGME_STATUS_ERRSIG:
-      /* Parse the pubkey algo.  */
-      if (!end)
-       goto parse_err_sig_fail;
-      errno = 0;
-      sig->pubkey_algo = strtol (end, &tail, 0);
-      if (errno || end == tail || *tail != ' ')
-       goto parse_err_sig_fail;
-      end = tail;
-      while (*end == ' ')
-       end++;
-     
-      /* Parse the hash algo.  */
-      if (!*end)
-       goto parse_err_sig_fail;
-      errno = 0;
-      sig->hash_algo = strtol (end, &tail, 0);
-      if (errno || end == tail || *tail != ' ')
-       goto parse_err_sig_fail;
-      end = tail;
-      while (*end == ' ')
-       end++;
-
-      /* Skip the sig class.  */
-      end = strchr (end, ' ');
-      if (!end)
-       goto parse_err_sig_fail;
-      while (*end == ' ')
-       end++;
-
-      /* Parse the timestamp.  */
-      sig->timestamp = _gpgme_parse_timestamp (end, &tail);
-      if (sig->timestamp == -1 || end == tail || (*tail && *tail != ' '))
-       return gpg_error (GPG_ERR_INV_ENGINE);
-      end = tail;
-      while (*end == ' ')
-       end++;
-      
-      /* Parse the return code.  */
-      if (end[0] && (!end[1] || end[1] == ' '))
-       {
-         switch (end[0])
-           {
-           case '4':
-             sig->status = gpg_error (GPG_ERR_UNSUPPORTED_ALGORITHM);
-             break;
-             
-           case '9':
-             sig->status = gpg_error (GPG_ERR_NO_PUBKEY);
-             break;
-             
-           default:
-             sig->status = gpg_error (GPG_ERR_GENERAL);
-           }
-       }
-      else
-       goto parse_err_sig_fail;
-
-      goto parse_err_sig_ok;
-      
-    parse_err_sig_fail:
-      sig->status = gpg_error (GPG_ERR_GENERAL);
-    parse_err_sig_ok:
-      break;
-      
-    default:
-      return gpg_error (GPG_ERR_GENERAL);
-    }
-
-  if (*args)
-    {
-      sig->fpr = strdup (args);
-      if (!sig->fpr)
-       return gpg_error_from_errno (errno);
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-parse_valid_sig (gpgme_signature_t sig, char *args)
-{
-  char *end = strchr (args, ' ');
-  if (end)
-    {
-      *end = '\0';
-      end++;
-    }
-
-  if (!*args)
-    /* We require at least the fingerprint.  */
-    return gpg_error (GPG_ERR_GENERAL);
-
-  if (sig->fpr)
-    free (sig->fpr);
-  sig->fpr = strdup (args);
-  if (!sig->fpr)
-    return gpg_error_from_errno (errno);
-
-  /* Skip the creation date.  */
-  end = strchr (end, ' ');
-  if (end)
-    {
-      char *tail;
-
-      sig->timestamp = _gpgme_parse_timestamp (end, &tail);
-      if (sig->timestamp == -1 || end == tail || (*tail && *tail != ' '))
-       return gpg_error (GPG_ERR_INV_ENGINE);
-      end = tail;
-     
-      sig->exp_timestamp = _gpgme_parse_timestamp (end, &tail);
-      if (sig->exp_timestamp == -1 || end == tail || (*tail && *tail != ' '))
-       return gpg_error (GPG_ERR_INV_ENGINE);
-      end = tail;
-
-      while (*end == ' ')
-       end++;
-      /* Skip the signature version.  */
-      end = strchr (end, ' ');
-      if (end)
-       {
-         while (*end == ' ')
-           end++;
-
-         /* Skip the reserved field.  */
-         end = strchr (end, ' ');
-         if (end)
-           {
-             /* Parse the pubkey algo.  */
-             errno = 0;
-             sig->pubkey_algo = strtol (end, &tail, 0);
-             if (errno || end == tail || *tail != ' ')
-               return gpg_error (GPG_ERR_INV_ENGINE);
-             end = tail;
-
-             while (*end == ' ')
-               end++;
-
-             if (*end)
-               {
-                 /* Parse the hash algo.  */
-
-                 errno = 0;
-                 sig->hash_algo = strtol (end, &tail, 0);
-                 if (errno || end == tail || *tail != ' ')
-                   return gpg_error (GPG_ERR_INV_ENGINE);
-                 end = tail;
-               }
-           }
-       }
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-parse_notation (gpgme_signature_t sig, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-  gpgme_sig_notation_t *lastp = &sig->notations;
-  gpgme_sig_notation_t notation = sig->notations;
-  char *end = strchr (args, ' ');
-
-  if (end)
-    *end = '\0';
-
-  if (code == GPGME_STATUS_NOTATION_NAME || code == GPGME_STATUS_POLICY_URL)
-    {
-      /* FIXME: We could keep a pointer to the last notation in the list.  */
-      while (notation && notation->value)
-       {
-         lastp = &notation->next;
-         notation = notation->next;
-       }
-
-      if (notation)
-       /* There is another notation name without data for the
-          previous one.  The crypto backend misbehaves.  */
-       return gpg_error (GPG_ERR_INV_ENGINE);
-
-      err = _gpgme_sig_notation_create (&notation, NULL, 0, NULL, 0, 0);
-      if (err)
-       return err;
-
-      if (code == GPGME_STATUS_NOTATION_NAME)
-       {
-         err = _gpgme_decode_percent_string (args, &notation->name, 0, 0);
-         if (err)
-           {
-             _gpgme_sig_notation_free (notation);
-             return err;
-           }
-
-         notation->name_len = strlen (notation->name);
-
-         /* FIXME: For now we fake the human-readable flag.  The
-            critical flag can not be reported as it is not
-            provided.  */
-         notation->flags = GPGME_SIG_NOTATION_HUMAN_READABLE;
-         notation->human_readable = 1;
-       }
-      else
-       {
-         /* This is a policy URL.  */
-
-         err = _gpgme_decode_percent_string (args, &notation->value, 0, 0);
-         if (err)
-           {
-             _gpgme_sig_notation_free (notation);
-             return err;
-           }
-
-         notation->value_len = strlen (notation->value);
-       }
-      *lastp = notation;
-    }
-  else if (code == GPGME_STATUS_NOTATION_DATA)
-    {
-      int len = strlen (args) + 1;
-      char *dest;
-
-      /* FIXME: We could keep a pointer to the last notation in the list.  */
-      while (notation && notation->next)
-       {
-         lastp = &notation->next;
-         notation = notation->next;
-       }
-
-      if (!notation || !notation->name)
-       /* There is notation data without a previous notation
-          name.  The crypto backend misbehaves.  */
-       return gpg_error (GPG_ERR_INV_ENGINE);
-      
-      if (!notation->value)
-       {
-         dest = notation->value = malloc (len);
-         if (!dest)
-           return gpg_error_from_errno (errno);
-       }
-      else
-       {
-         int cur_len = strlen (notation->value);
-         dest = realloc (notation->value, len + strlen (notation->value));
-         if (!dest)
-           return gpg_error_from_errno (errno);
-         notation->value = dest;
-         dest += cur_len;
-       }
-      
-      err = _gpgme_decode_percent_string (args, &dest, len, 0);
-      if (err)
-       return err;
-
-      notation->value_len += strlen (dest);
-    }
-  else
-    return gpg_error (GPG_ERR_INV_ENGINE);
-  return 0;
-}
-
-
-static gpgme_error_t
-parse_trust (gpgme_signature_t sig, gpgme_status_code_t code, char *args)
-{
-  char *end = strchr (args, ' ');
-
-  if (end)
-    *end = '\0';
-
-  switch (code)
-    {
-    case GPGME_STATUS_TRUST_UNDEFINED:
-    default:
-      sig->validity = GPGME_VALIDITY_UNKNOWN;
-      break;
-
-    case GPGME_STATUS_TRUST_NEVER:
-      sig->validity = GPGME_VALIDITY_NEVER;
-      break;
-
-    case GPGME_STATUS_TRUST_MARGINAL:
-      sig->validity = GPGME_VALIDITY_MARGINAL;
-      break;
-
-    case GPGME_STATUS_TRUST_FULLY:
-    case GPGME_STATUS_TRUST_ULTIMATE:
-      sig->validity = GPGME_VALIDITY_FULL;
-      break;
-    }
-
-  if (*args)
-    sig->validity_reason = _gpgme_map_gnupg_error (args);
-  else
-    sig->validity_reason = 0;
-
-  return 0;
-}
-
-
-static gpgme_error_t
-parse_error (gpgme_signature_t sig, char *args)
-{
-  gpgme_error_t err;
-  char *where = strchr (args, ' ');
-  char *which;
-
-  if (where)
-    {
-      *where = '\0';
-      which = where + 1;
-
-      where = strchr (which, ' ');
-      if (where)
-       *where = '\0';
-
-      where = args;      
-    }
-  else
-    return gpg_error (GPG_ERR_INV_ENGINE);
-
-  err = _gpgme_map_gnupg_error (which);
-
-  if (!strcmp (where, "verify.findkey"))
-    sig->status = err;
-  else if (!strcmp (where, "verify.keyusage")
-          && gpg_err_code (err) == GPG_ERR_WRONG_KEY_USAGE)
-    sig->wrong_key_usage = 1;
-
-  return 0;
-}
-
-
-gpgme_error_t
-_gpgme_verify_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) priv;
-  gpgme_error_t err;
-  void *hook;
-  op_data_t opd;
-  gpgme_signature_t sig;
-  char *end;
-
-  err = _gpgme_op_data_lookup (ctx, OPDATA_VERIFY, &hook, -1, NULL);
-  opd = hook;
-  if (err)
-    return err;
-
-  sig = opd->current_sig;
-
-  switch (code)
-    {
-    case GPGME_STATUS_NEWSIG:
-      if (sig)
-        calc_sig_summary (sig);
-      err = prepare_new_sig (opd);
-      opd->only_newsig_seen = 1;
-      return err;
-
-    case GPGME_STATUS_GOODSIG:
-    case GPGME_STATUS_EXPSIG:
-    case GPGME_STATUS_EXPKEYSIG:
-    case GPGME_STATUS_BADSIG:
-    case GPGME_STATUS_ERRSIG:
-    case GPGME_STATUS_REVKEYSIG:
-      if (sig && !opd->did_prepare_new_sig)
-       calc_sig_summary (sig);
-      opd->only_newsig_seen = 0;
-      return parse_new_sig (opd, code, args);
-
-    case GPGME_STATUS_VALIDSIG:
-      opd->only_newsig_seen = 0;
-      return sig ? parse_valid_sig (sig, args)
-       : gpg_error (GPG_ERR_INV_ENGINE);
-
-    case GPGME_STATUS_NODATA:
-      opd->only_newsig_seen = 0;
-      if (!sig)
-       return gpg_error (GPG_ERR_NO_DATA);
-      sig->status = gpg_error (GPG_ERR_NO_DATA);
-      break;
-
-    case GPGME_STATUS_UNEXPECTED:
-      opd->only_newsig_seen = 0;
-      if (!sig)
-       return gpg_error (GPG_ERR_GENERAL);
-      sig->status = gpg_error (GPG_ERR_NO_DATA);
-      break;
-
-    case GPGME_STATUS_NOTATION_NAME:
-    case GPGME_STATUS_NOTATION_DATA:
-    case GPGME_STATUS_POLICY_URL:
-      opd->only_newsig_seen = 0;
-      return sig ? parse_notation (sig, code, args)
-       : gpg_error (GPG_ERR_INV_ENGINE);
-
-    case GPGME_STATUS_TRUST_UNDEFINED:
-    case GPGME_STATUS_TRUST_NEVER:
-    case GPGME_STATUS_TRUST_MARGINAL:
-    case GPGME_STATUS_TRUST_FULLY:
-    case GPGME_STATUS_TRUST_ULTIMATE:
-      opd->only_newsig_seen = 0;
-      return sig ? parse_trust (sig, code, args)
-       : gpg_error (GPG_ERR_INV_ENGINE);
-
-    case GPGME_STATUS_PKA_TRUST_BAD:
-    case GPGME_STATUS_PKA_TRUST_GOOD:
-      opd->only_newsig_seen = 0;
-      /* Check that we only get one of these status codes per
-         signature; if not the crypto backend misbehaves.  */
-      if (!sig || sig->pka_trust || sig->pka_address)
-        return gpg_error (GPG_ERR_INV_ENGINE);
-      sig->pka_trust = code == GPGME_STATUS_PKA_TRUST_GOOD? 2 : 1;
-      end = strchr (args, ' ');
-      if (end)
-        *end = 0;
-      sig->pka_address = strdup (args);
-      break;
-
-    case GPGME_STATUS_ERROR:
-      opd->only_newsig_seen = 0;
-      /* The error status is informational, so we don't return an
-         error code if we are not ready to process this status. */
-      return sig ? parse_error (sig, args) : 0;
-
-    case GPGME_STATUS_EOF:
-      if (sig && !opd->did_prepare_new_sig)
-       calc_sig_summary (sig);
-      if (opd->only_newsig_seen && sig)
-        {
-          gpgme_signature_t sig2;
-          /* The last signature has no valid information - remove it
-             from the list. */
-          assert (!sig->next);
-          if (sig == opd->result.signatures)
-            opd->result.signatures = NULL;
-          else
-            {
-              for (sig2 = opd->result.signatures; sig2; sig2 = sig2->next)
-                if (sig2->next == sig)
-                  {
-                    sig2->next = NULL;
-                    break;
-                  }
-            }
-          /* Note that there is no need to release the members of SIG
-             because we won't be here if they have been set. */
-          free (sig);
-          opd->current_sig = NULL;
-        }
-      opd->only_newsig_seen = 0;
-      break;
-
-    case GPGME_STATUS_PLAINTEXT:
-      err = _gpgme_parse_plaintext (args, &opd->result.file_name);
-      if (err)
-       return err;
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-
-static gpgme_error_t
-verify_status_handler (void *priv, gpgme_status_code_t code, char *args)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_progress_status_handler (priv, code, args);
-  if (!err)
-    err = _gpgme_verify_status_handler (priv, code, args);
-  return err;
-}
-
-
-gpgme_error_t
-_gpgme_op_verify_init_result (gpgme_ctx_t ctx)
-{  
-  void *hook;
-  op_data_t opd;
-
-  return _gpgme_op_data_lookup (ctx, OPDATA_VERIFY, &hook,
-                               sizeof (*opd), release_op_data);
-}
-
-
-static gpgme_error_t
-verify_start (gpgme_ctx_t ctx, int synchronous, gpgme_data_t sig,
-             gpgme_data_t signed_text, gpgme_data_t plaintext)
-{
-  gpgme_error_t err;
-
-  err = _gpgme_op_reset (ctx, synchronous);
-  if (err)
-    return err;
-
-  err = _gpgme_op_verify_init_result (ctx);
-  if (err)
-    return err;
-
-  _gpgme_engine_set_status_handler (ctx->engine, verify_status_handler, ctx);
-
-  if (!sig)
-    return gpg_error (GPG_ERR_NO_DATA);
-  if (!signed_text && !plaintext)
-    return gpg_error (GPG_ERR_INV_VALUE);
-
-  return _gpgme_engine_op_verify (ctx->engine, sig, signed_text, plaintext);
-}
-
-
-/* Decrypt ciphertext CIPHER and make a signature verification within
-   CTX and store the resulting plaintext in PLAIN.  */
-gpgme_error_t
-gpgme_op_verify_start (gpgme_ctx_t ctx, gpgme_data_t sig,
-                      gpgme_data_t signed_text, gpgme_data_t plaintext)
-{
-  return verify_start (ctx, 0, sig, signed_text, plaintext);
-}
-
-
-/* Decrypt ciphertext CIPHER and make a signature verification within
-   CTX and store the resulting plaintext in PLAIN.  */
-gpgme_error_t
-gpgme_op_verify (gpgme_ctx_t ctx, gpgme_data_t sig, gpgme_data_t signed_text,
-                gpgme_data_t plaintext)
-{
-  gpgme_error_t err;
-
-  err = verify_start (ctx, 1, sig, signed_text, plaintext);
-  if (!err)
-    err = _gpgme_wait_one (ctx);
-  return err;
-}
-
-\f
-/* Compatibility interfaces.  */
-
-/* Get the key used to create signature IDX in CTX and return it in
-   R_KEY.  */
-gpgme_error_t
-gpgme_get_sig_key (gpgme_ctx_t ctx, int idx, gpgme_key_t *r_key)
-{
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    {
-      sig = sig->next;
-      idx--;
-    }
-  if (!sig || idx)
-    return gpg_error (GPG_ERR_EOF);
-
-  return gpgme_get_key (ctx, sig->fpr, r_key, 0);
-}
-
-
-/* Retrieve the signature status of signature IDX in CTX after a
-   successful verify operation in R_STAT (if non-null).  The creation
-   time stamp of the signature is returned in R_CREATED (if non-null).
-   The function returns a string containing the fingerprint.  */
-const char *gpgme_get_sig_status (gpgme_ctx_t ctx, int idx,
-                                  _gpgme_sig_stat_t *r_stat, time_t *r_created)
-{
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    {
-      sig = sig->next;
-      idx--;
-    }
-  if (!sig || idx)
-    return NULL;
-
-  if (r_stat)
-    {
-      switch (gpg_err_code (sig->status))
-       {
-       case GPG_ERR_NO_ERROR:
-         *r_stat = GPGME_SIG_STAT_GOOD;
-         break;
-         
-       case GPG_ERR_BAD_SIGNATURE:
-         *r_stat = GPGME_SIG_STAT_BAD;
-         break;
-         
-       case GPG_ERR_NO_PUBKEY:
-         *r_stat = GPGME_SIG_STAT_NOKEY;
-         break;
-         
-       case GPG_ERR_NO_DATA:
-         *r_stat = GPGME_SIG_STAT_NOSIG;
-         break;
-         
-       case GPG_ERR_SIG_EXPIRED:
-         *r_stat = GPGME_SIG_STAT_GOOD_EXP;
-         break;
-         
-       case GPG_ERR_KEY_EXPIRED:
-         *r_stat = GPGME_SIG_STAT_GOOD_EXPKEY;
-         break;
-         
-       default:
-         *r_stat = GPGME_SIG_STAT_ERROR;
-         break;
-       }
-    }
-  if (r_created)
-    *r_created = sig->timestamp;
-  return sig->fpr;
-}
-
-
-/* Retrieve certain attributes of a signature.  IDX is the index
-   number of the signature after a successful verify operation.  WHAT
-   is an attribute where GPGME_ATTR_EXPIRE is probably the most useful
-   one.  WHATIDX is to be passed as 0 for most attributes . */
-unsigned long gpgme_get_sig_ulong_attr (gpgme_ctx_t ctx, int idx,
-                                        _gpgme_attr_t what, int whatidx)
-{
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    {
-      sig = sig->next;
-      idx--;
-    }
-  if (!sig || idx)
-    return 0;
-
-  switch (what)
-    {
-    case GPGME_ATTR_CREATED:
-      return sig->timestamp;
-
-    case GPGME_ATTR_EXPIRE:
-      return sig->exp_timestamp;
-
-    case GPGME_ATTR_VALIDITY:
-      return (unsigned long) sig->validity;
-
-    case GPGME_ATTR_SIG_STATUS:
-      switch (gpg_err_code (sig->status))
-       {
-       case GPG_ERR_NO_ERROR:
-         return GPGME_SIG_STAT_GOOD;
-         
-       case GPG_ERR_BAD_SIGNATURE:
-         return GPGME_SIG_STAT_BAD;
-         
-       case GPG_ERR_NO_PUBKEY:
-         return GPGME_SIG_STAT_NOKEY;
-         
-       case GPG_ERR_NO_DATA:
-         return GPGME_SIG_STAT_NOSIG;
-         
-       case GPG_ERR_SIG_EXPIRED:
-         return GPGME_SIG_STAT_GOOD_EXP;
-         
-       case GPG_ERR_KEY_EXPIRED:
-         return GPGME_SIG_STAT_GOOD_EXPKEY;
-         
-       default:
-         return GPGME_SIG_STAT_ERROR;
-       }
-
-    case GPGME_ATTR_SIG_SUMMARY:
-      return sig->summary;
-
-    default:
-      break;
-    }
-  return 0;
-}
-
-
-const char *gpgme_get_sig_string_attr (gpgme_ctx_t ctx, int idx,
-                                      _gpgme_attr_t what, int whatidx)
-{
-  gpgme_verify_result_t result;
-  gpgme_signature_t sig;
-
-  result = gpgme_op_verify_result (ctx);
-  sig = result->signatures;
-
-  while (sig && idx)
-    {
-      sig = sig->next;
-      idx--;
-    }
-  if (!sig || idx)
-    return NULL;
-
-  switch (what)
-    {
-    case GPGME_ATTR_FPR:
-      return sig->fpr;
-
-    case GPGME_ATTR_ERRTOK:
-      if (whatidx == 1)
-        return sig->wrong_key_usage ? "Wrong_Key_Usage" : "";
-      else
-       return "";
-    default:
-      break;
-    }
-
-  return NULL;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/version.c b/tags/gpgme-1-1-1/gpgme/version.c
deleted file mode 100644 (file)
index f417f9c..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/* version.c - Version check routines.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <string.h>
-#include <limits.h>
-#include <ctype.h>
-
-#include "gpgme.h"
-#include "priv-io.h"
-
-/* For _gpgme_sema_subsystem_init ().  */
-#include "sema.h"
-
-\f
-/* Bootstrap the subsystems needed for concurrent operation.  This
-   must be done once at startup.  We can not guarantee this using a
-   lock, though, because the semaphore subsystem needs to be
-   initialized itself before it can be used.  So we expect that the
-   user performs the necessary syncrhonization.  */
-static void
-do_subsystem_inits (void)
-{
-  static int done = 0;
-
-  if (done)
-    return;
-
-  _gpgme_sema_subsystem_init ();
-  _gpgme_io_subsystem_init ();
-
-  done = 1;
-}
-
-
-/* Read the next number in the version string STR and return it in
-   *NUMBER.  Return a pointer to the tail of STR after parsing, or
-   *NULL if the version string was invalid.  */
-static const char *
-parse_version_number (const char *str, int *number)
-{
-#define MAXVAL ((INT_MAX - 10) / 10)
-  int val = 0;
-
-  /* Leading zeros are not allowed.  */
-  if (*str == '0' && isdigit(str[1]))
-    return NULL;
-
-  while (isdigit (*str) && val <= MAXVAL)
-    {
-      val *= 10;
-      val += *(str++) - '0';
-    }
-  *number = val;
-  return val > MAXVAL ? NULL : str;
-}
-
-
-/* Parse the version string STR in the format MAJOR.MINOR.MICRO (for
-   example, 9.3.2) and return the components in MAJOR, MINOR and MICRO
-   as integers.  The function returns the tail of the string that
-   follows the version number.  This might be te empty string if there
-   is nothing following the version number, or a patchlevel.  The
-   function returns NULL if the version string is not valid.  */
-static const char *
-parse_version_string (const char *str, int *major, int *minor, int *micro)
-{
-  str = parse_version_number (str, major);
-  if (!str || *str != '.')
-    return NULL;
-  str++;
-
-  str = parse_version_number (str, minor);
-  if (!str || *str != '.')
-    return NULL;
-  str++;
-
-  str = parse_version_number (str, micro);
-  if (!str)
-    return NULL;
-
-  /* A patchlevel might follow.  */
-  return str;
-}
-
-
-/* Return true if MY_VERSION is at least REQ_VERSION, and false
-   otherwise.  */
-int
-_gpgme_compare_versions (const char *my_version,
-                        const char *rq_version)
-{
-  int my_major, my_minor, my_micro;
-  int rq_major, rq_minor, rq_micro;
-  const char *my_plvl, *rq_plvl;
-
-  if (!rq_version)
-    return 1;
-  if (!my_version)
-    return 0;
-
-  my_plvl = parse_version_string (my_version, &my_major, &my_minor, &my_micro);
-  if (!my_plvl)
-    return 0;
-
-  rq_plvl = parse_version_string (rq_version, &rq_major, &rq_minor, &rq_micro);
-  if (!rq_plvl)
-    return 0;
-
-  if (my_major > rq_major
-      || (my_major == rq_major && my_minor > rq_minor)
-      || (my_major == rq_major && my_minor == rq_minor 
-         && my_micro > rq_micro)
-      || (my_major == rq_major && my_minor == rq_minor
-         && my_micro == rq_micro && strcmp (my_plvl, rq_plvl) >= 0))
-    return 1;
-
-  return 0;
-}
-
-
-/* Check that the the version of the library is at minimum the
-   requested one and return the version string; return NULL if the
-   condition is not met.  If a NULL is passed to this function, no
-   check is done and the version string is simply returned.
-
-   This function must be run once at startup, as it also initializes
-   some subsystems.  Its invocation must be synchronized against
-   calling any of the other functions in a multi-threaded
-   environments.  */
-const char *
-gpgme_check_version (const char *req_version)
-{
-  do_subsystem_inits ();
-  return _gpgme_compare_versions (VERSION, req_version) ? VERSION : NULL;
-}
-
-\f
-#define LINELENGTH 80
-
-/* Retrieve the version number from the --version output of the
-   program FILE_NAME.  */
-char *
-_gpgme_get_program_version (const char *const file_name)
-{
-  char line[LINELENGTH] = "";
-  int linelen = 0;
-  char *mark = NULL;
-  int rp[2];
-  int nread;
-  char *argv[] = {NULL /* file_name */, "--version", 0};
-  struct spawn_fd_item_s pfd[] = { {0, -1}, {-1, -1} };
-  struct spawn_fd_item_s cfd[] = { {-1, 1 /* STDOUT_FILENO */}, {-1, -1} };
-  int status;
-
-  if (!file_name)
-    return NULL;
-  argv[0] = (char *) file_name;
-
-  if (_gpgme_io_pipe (rp, 1) < 0)
-    return NULL;
-
-  pfd[0].fd = rp[1];
-  cfd[0].fd = rp[1];
-
-  status = _gpgme_io_spawn (file_name, argv, cfd, pfd);
-  if (status < 0)
-    {
-      _gpgme_io_close (rp[0]);
-      _gpgme_io_close (rp[1]);
-      return NULL;
-    }
-
-  do
-    {
-      nread = _gpgme_io_read (rp[0], &line[linelen], LINELENGTH - linelen - 1);
-      if (nread > 0)
-       {
-         line[linelen + nread] = '\0';
-         mark = strchr (&line[linelen], '\n');
-         if (mark)
-           {
-             *mark = '\0';
-             break;
-           }
-         linelen += nread;
-       }
-    }
-  while (nread > 0 && linelen < LINELENGTH - 1);
-
-  _gpgme_io_close (rp[0]);
-
-  if (mark)
-    {
-      mark = strrchr (line, ' ');
-      if (!mark)
-       return NULL;
-      return strdup (mark + 1);
-    }
-
-  return NULL;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/versioninfo.rc.in b/tags/gpgme-1-1-1/gpgme/versioninfo.rc.in
deleted file mode 100644 (file)
index bfb652e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* versioninfo.rc.in - for gpgme
- *    Copyright (C) 2005 g10 Code GmbH
- * 
- * This file is free software; as a special exception the author 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.
- */
-/* This file is processed by configure to create versioninfo.rc */
-
-#line __LINE__ "versioninfo.rc.in"
-
-#include <afxres.h>
-
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION @LIBGPGME_LT_CURRENT@,@LIBGPGME_LT_AGE@,@LIBGPGME_LT_REVISION@,@BUILD_REVISION@
- PRODUCTVERSION @BUILD_FILEVERSION@
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x21L
-#else
- FILEFLAGS 0x20L
-#endif
- FILEOS 0x40004L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "040904b0"
-        BEGIN
-            VALUE "Comments", "Provided under the terms of the GNU Lesser General Public License.\0"
-            VALUE "CompanyName", "g10 Code GmbH\0"
-            VALUE "FileDescription", "GPGME - GnuPG Made Easy\0"
-            VALUE "FileVersion", "@LIBGPGME_LT_CURRENT@.@LIBGPGME_LT_AGE@.@LIBGPGME_LT_REVISION@.@BUILD_REVISION@\0"
-            VALUE "InternalName", "gpgme\0"
-            VALUE "LegalCopyright", "Copyright Â© 2005 g10 Code GmbH\0"
-            VALUE "LegalTrademarks", "\0"
-            VALUE "OriginalFilename", "gpgme.dll\0"
-            VALUE "PrivateBuild", "\0"
-            VALUE "ProductName", "GPGME\0"
-            VALUE "ProductVersion", "@VERSION@\0"
-            VALUE "SpecialBuild", "@BUILD_TIMESTAMP@\0"
-        END
-    END
-END
-
diff --git a/tags/gpgme-1-1-1/gpgme/w32-glib-io.c b/tags/gpgme-1-1-1/gpgme/w32-glib-io.c
deleted file mode 100644 (file)
index 97758ba..0000000
+++ /dev/null
@@ -1,642 +0,0 @@
-/* w32-glib-io.c - W32 Glib I/O functions
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <glib.h>
-#include <windows.h>
-#include <io.h>
-
-#include "util.h"
-#include "priv-io.h"
-#include "sema.h"
-#include "debug.h"
-
-#ifndef O_BINARY
-#ifdef _O_BINARY
-#define O_BINARY       _O_BINARY
-#else
-#define O_BINARY       0
-#endif
-#endif
-
-\f
-/* This file is an ugly hack to get GPGME working with glib on Windows
-   targets.  On Windows, you can not select() on file descriptors.
-   The only way to check if there is something to read is to read
-   something.  This means that GPGME can not let glib check for data
-   without letting glib also handle the data on Windows targets.
-
-   The ugly consequence is that we need to work on GIOChannels in
-   GPGME, creating a glib dependency.  Also, we need to export an
-   interface for the application to get at GPGME's GIOChannel.  There
-   is no good way to abstract all this with callbacks, because the
-   whole thing is also interconnected with the creation of pipes and
-   child processes.
-
-   The following rule applies only to this I/O backend:
-
-   * ALL operations must use the user defined event loop.  GPGME can
-   not anymore provide its own event loop.  This is mostly a sanity
-   requirement: Although we have in theory all information we need to
-   make the GPGME W32 code for select still work, it would be a big
-   complication and require changes throughout GPGME.
-
-   Eventually, we probably have to bite the bullet and make some
-   really nice callback interfaces to let the user control all this at
-   a per-context level.  */
-
-\f
-#define MAX_SLAFD 256
-
-GIOChannel *giochannel_table[MAX_SLAFD];
-
-
-static GIOChannel *
-find_channel (int fd, int create)
-{
-  if (fd < 0 || fd >= MAX_SLAFD)
-    return NULL;
-
-  if (create && !giochannel_table[fd])
-    {
-      giochannel_table[fd] = g_io_channel_win32_new_fd (fd);
-      g_io_channel_set_encoding (giochannel_table[fd], NULL, NULL);
-      g_io_channel_set_buffered (giochannel_table[fd], FALSE);
-    }
-
-  return giochannel_table[fd];
-}
-
-/* Look up the giochannel for "file descriptor" FD.  */
-GIOChannel *
-gpgme_get_giochannel (int fd)
-{
-  return find_channel (fd, 0);
-}
-
-
-/* Write the printable version of FD to the buffer BUF of length
-   BUFLEN.  The printable version is the representation on the command
-   line that the child process expects.  */
-int
-_gpgme_io_fd2str (char *buf, int buflen, int fd)
-{
-  return snprintf (buf, buflen, "%ld", (long) _get_osfhandle (fd));
-}
-
-\f
-void
-_gpgme_io_subsystem_init (void)
-{
-}
-
-\f
-static struct
-{
-  void (*handler) (int,void*);
-  void *value;
-} notify_table[MAX_SLAFD];
-
-int
-_gpgme_io_read (int fd, void *buffer, size_t count)
-{
-  int saved_errno = 0;
-  gsize nread;
-  GIOChannel *chan;
-  GIOStatus status;
-
-  DEBUG2 ("fd %d: about to read %d bytes\n", fd, (int) count);
-
-  chan = find_channel (fd, 0);
-  if (!chan)
-    {
-      DEBUG1 ("fd %d: no channel registered\n", fd);
-      errno = EINVAL;
-      return -1;
-    }
-  DEBUG2 ("fd %d: channel %p\n", fd, chan);
-
-  {
-    GError *err = NULL;
-    status = g_io_channel_read_chars (chan, (gchar *) buffer,
-                                     count, &nread, &err);
-    if (err)
-      {
-       DEBUG3 ("fd %d: status %i, err %s\n", fd, status, err->message);
-       g_error_free (err);
-      }
-  }
-
-  if (status == G_IO_STATUS_EOF)
-    nread = 0;
-  else if (status != G_IO_STATUS_NORMAL)
-    {
-      DEBUG2 ("fd %d: status %d\n", fd, status);
-      nread = -1;
-      saved_errno = EIO;
-    }
-
-  DEBUG2 ("fd %d: got %d bytes\n", fd, nread);
-  if (nread > 0)
-    _gpgme_debug (2, "fd %d: got `%.*s'\n", fd, nread, buffer);
-
-  errno = saved_errno;
-  return nread;
-}
-
-
-int
-_gpgme_io_write (int fd, const void *buffer, size_t count)
-{
-  int saved_errno = 0;
-  gsize nwritten;
-  GIOChannel *chan;
-  GIOStatus status;
-
-  DEBUG2 ("fd %d: about to write %d bytes\n", fd, (int) count);
-  _gpgme_debug (2, "fd %d: write `%.*s'\n", fd, (int) count, buffer);
-
-  chan = find_channel (fd, 0);
-  if (!chan)
-    {
-      DEBUG1 ("fd %d: no channel registered\n", fd);
-      errno = EINVAL;
-      return -1;
-    }
-
-  status = g_io_channel_write_chars (chan, (gchar *) buffer, count,
-                                    &nwritten, NULL);
-  if (status != G_IO_STATUS_NORMAL)
-    {
-      nwritten = -1;
-      saved_errno = EIO;
-    }
-  DEBUG2 ("fd %d:          wrote %d bytes\n", fd, (int) nwritten);
-  errno = saved_errno;
-  return nwritten;
-}
-
-
-int
-_gpgme_io_pipe (int filedes[2], int inherit_idx)
-{
-  GIOChannel *chan;
-
-#define PIPEBUF_SIZE  4096
-  if (_pipe (filedes, PIPEBUF_SIZE, O_NOINHERIT | O_BINARY) == -1)
-    return -1;
-
-  /* Make one end inheritable. */
-  if (inherit_idx == 0)
-    {
-      int new_read;
-
-      new_read = _dup (filedes[0]);
-      _close (filedes[0]);
-      filedes[0] = new_read;
-
-      if (new_read < 0)
-       {
-         _close (filedes[1]);
-         return -1;
-       }
-    }
-  else if (inherit_idx == 1)
-    {
-      int new_write;
-
-      new_write = _dup (filedes[1]);
-      _close (filedes[1]);
-      filedes[1] = new_write;
-
-      if (new_write < 0)
-       {
-         _close (filedes[0]);
-         return -1;
-       }
-    }
-
-  /* Now we have a pipe with the right end inheritable.  The other end
-     should have a giochannel.  */
-  chan = find_channel (filedes[1 - inherit_idx], 1);
-  if (!chan)
-    {
-      DEBUG2 ("channel creation for %d failed: ec=%d\n",
-             filedes[1 - inherit_idx], errno);
-      _close (filedes[0]);
-      _close (filedes[1]);
-      return -1;
-    }
-
-  DEBUG5 ("CreatePipe %d (%p) %d (%p) inherit=%p\n",
-         filedes[0], (HANDLE) _get_osfhandle (filedes[0]),
-         filedes[1], (HANDLE) _get_osfhandle (filedes[1]),
-         chan);
-  return 0;
-}
-
-
-int
-_gpgme_io_close (int fd)
-{
-  GIOChannel *chan;
-
-  if (fd < 0 || fd >= MAX_SLAFD)
-    {
-      errno = EBADF;
-      return -1;
-    }
-
-  /* First call the notify handler.  */
-  DEBUG1 ("closing fd %d", fd);
-  if (notify_table[fd].handler)
-    {
-      notify_table[fd].handler (fd, notify_table[fd].value);
-      notify_table[fd].handler = NULL;
-      notify_table[fd].value = NULL;
-    }
-
-  /* Then do the close.  */    
-  chan = giochannel_table[fd];
-  if (chan)
-    {
-      g_io_channel_shutdown (chan, 1, NULL);
-      g_io_channel_unref (chan);
-      giochannel_table[fd] = NULL;
-    }
-  else
-    _close (fd);
-
-
-  return 0;
-}
-
-
-int
-_gpgme_io_set_close_notify (int fd, void (*handler)(int, void*), void *value)
-{
-  assert (fd != -1);
-
-  if (fd < 0 || fd >= (int) DIM (notify_table))
-    return -1;
-  DEBUG1 ("set notification for fd %d", fd);
-  notify_table[fd].handler = handler;
-  notify_table[fd].value = value;
-  return 0;
-}
-
-
-int
-_gpgme_io_set_nonblocking (int fd)
-{
-  GIOChannel *chan;
-  GIOStatus status;
-  chan = find_channel (fd, 0);
-  if (!chan)
-    {
-      DEBUG1 ("set nonblocking for fd %d failed: channel not found", fd);
-      errno = EIO;
-      return -1;
-    }
-
-   status = g_io_channel_set_flags (chan,
-                                  g_io_channel_get_flags (chan) |
-                                  G_IO_FLAG_NONBLOCK, NULL);
-  if (status != G_IO_STATUS_NORMAL)
-    {
-      /* glib 1.9.2 does not implement set_flags and returns an error. */
-      DEBUG2 ("set nonblocking for fd %d failed: status=%d - ignored",
-              fd, status);
-/*       errno = EIO; */
-/*       return -1; */
-    }
-
-  return 0;
-}
-
-
-static char *
-build_commandline ( char **argv )
-{
-  int i, n = 0;
-  char *buf, *p;
-  
-  /* FIXME: we have to quote some things because under Windows the
-   * program parses the commandline and does some unquoting.  For now
-   * we only do very basic quoting to the first argument because this
-   * one often contains a space (e.g. C:\\Program Files\GNU\GnuPG\gpg.exe) 
-   * and we would produce an invalid line in that case.  */
-  for (i=0; argv[i]; i++)
-    n += strlen (argv[i]) + 2 + 1; /* 2 extra bytes for possible quoting */
-  buf = p = malloc (n);
-  if ( !buf )
-    return NULL;
-  *buf = 0;
-  if ( argv[0] )
-    {
-      if (strpbrk (argv[0], " \t"))
-        p = stpcpy (stpcpy (stpcpy (p, "\""), argv[0]), "\"");
-      else
-        p = stpcpy (p, argv[0]);
-      for (i = 1; argv[i]; i++)
-        {
-          if (!*argv[i])
-            p = stpcpy (p, " \"\"");
-          else
-            p = stpcpy (stpcpy (p, " "), argv[i]);
-        }
-    }
-  
-  return buf;
-}
-
-
-int
-_gpgme_io_spawn ( const char *path, char **argv,
-                  struct spawn_fd_item_s *fd_child_list,
-                  struct spawn_fd_item_s *fd_parent_list )
-{
-    SECURITY_ATTRIBUTES sec_attr;
-    PROCESS_INFORMATION pi = {
-        NULL,      /* returns process handle */
-        0,         /* returns primary thread handle */
-        0,         /* returns pid */
-        0         /* returns tid */
-    };
-    STARTUPINFO si;
-    char *envblock = NULL;
-    int cr_flags = CREATE_DEFAULT_ERROR_MODE
-                 | GetPriorityClass (GetCurrentProcess ());
-    int i;
-    char *arg_string;
-    int duped_stdin = 0;
-    int duped_stderr = 0;
-    HANDLE hnul = INVALID_HANDLE_VALUE;
-    /* FIXME.  */
-    int debug_me = 0;
-
-    memset (&sec_attr, 0, sizeof sec_attr);
-    sec_attr.nLength = sizeof sec_attr;
-    sec_attr.bInheritHandle = FALSE;
-
-    arg_string = build_commandline (argv);
-    if (!arg_string )
-        return -1; 
-
-    memset (&si, 0, sizeof si);
-    si.cb = sizeof (si);
-    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
-    si.wShowWindow = debug_me? SW_SHOW : SW_HIDE;
-    si.hStdInput = GetStdHandle (STD_INPUT_HANDLE);
-    si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
-    si.hStdError = GetStdHandle (STD_ERROR_HANDLE);
-
-    for (i=0; fd_child_list[i].fd != -1; i++ ) {
-        if (fd_child_list[i].dup_to == 0 ) {
-            si.hStdInput = (HANDLE) _get_osfhandle (fd_child_list[i].fd);
-            DEBUG2 ("using %d (%p) for stdin", fd_child_list[i].fd,
-                   _get_osfhandle (fd_child_list[i].fd));
-            duped_stdin=1;
-        }
-        else if (fd_child_list[i].dup_to == 1 ) {
-            si.hStdOutput = (HANDLE) _get_osfhandle (fd_child_list[i].fd);
-            DEBUG2 ("using %d (%p) for stdout", fd_child_list[i].fd,
-                   _get_osfhandle (fd_child_list[i].fd));
-        }
-        else if (fd_child_list[i].dup_to == 2 ) {
-            si.hStdError = (HANDLE) _get_osfhandle (fd_child_list[i].fd);
-            DEBUG2 ("using %d (%p) for stderr", fd_child_list[i].fd,
-                   _get_osfhandle (fd_child_list[i].fd));
-            duped_stderr = 1;
-        }
-    }
-
-    if( !duped_stdin || !duped_stderr ) {
-        SECURITY_ATTRIBUTES sa;
-
-        memset (&sa, 0, sizeof sa );
-        sa.nLength = sizeof sa;
-        sa.bInheritHandle = TRUE;
-        hnul = CreateFile ( "nul",
-                            GENERIC_READ|GENERIC_WRITE,
-                            FILE_SHARE_READ|FILE_SHARE_WRITE,
-                            &sa,
-                            OPEN_EXISTING,
-                            FILE_ATTRIBUTE_NORMAL,
-                            NULL );
-        if ( hnul == INVALID_HANDLE_VALUE ) {
-            DEBUG1 ("can't open `nul': ec=%d\n", (int)GetLastError ());
-            free (arg_string);
-            return -1;
-        }
-        /* Make sure that the process has a connected stdin */
-        if ( !duped_stdin ) {
-            si.hStdInput = hnul;
-            DEBUG1 ("using %d for dummy stdin", (int)hnul );
-        }
-        /* We normally don't want all the normal output */
-        if ( !duped_stderr ) {
-            si.hStdError = hnul;
-            DEBUG1 ("using %d for dummy stderr", (int)hnul );
-        }
-    }
-
-    DEBUG2 ("CreateProcess, path=`%s' args=`%s'", path, arg_string);
-    cr_flags |= CREATE_SUSPENDED; 
-    if ( !CreateProcessA (path,
-                          arg_string,
-                          &sec_attr,     /* process security attributes */
-                          &sec_attr,     /* thread security attributes */
-                          TRUE,          /* inherit handles */
-                          cr_flags,      /* creation flags */
-                          envblock,      /* environment */
-                          NULL,          /* use current drive/directory */
-                          &si,           /* startup information */
-                          &pi            /* returns process information */
-        ) ) {
-        DEBUG1 ("CreateProcess failed: ec=%d\n", (int) GetLastError ());
-        free (arg_string);
-        return -1;
-    }
-
-    /* Close the /dev/nul handle if used. */
-    if (hnul != INVALID_HANDLE_VALUE ) {
-        if ( !CloseHandle ( hnul ) )
-            DEBUG1 ("CloseHandle(hnul) failed: ec=%d\n", (int)GetLastError());
-    }
-
-    /* Close the other ends of the pipes. */
-    for (i = 0; fd_parent_list[i].fd != -1; i++)
-      _gpgme_io_close (fd_parent_list[i].fd);
-
-    DEBUG4 ("CreateProcess ready\n"
-            "-   hProcess=%p  hThread=%p\n"
-            "-   dwProcessID=%d dwThreadId=%d\n",
-            pi.hProcess, pi.hThread, 
-            (int) pi.dwProcessId, (int) pi.dwThreadId);
-
-    if ( ResumeThread ( pi.hThread ) < 0 ) {
-        DEBUG1 ("ResumeThread failed: ec=%d\n", (int)GetLastError ());
-    }
-
-    if ( !CloseHandle (pi.hThread) ) { 
-        DEBUG1 ("CloseHandle of thread failed: ec=%d\n",
-                 (int)GetLastError ());
-    }
-
-    return 0;
-}
-
-
-/*
- * Select on the list of fds.
- * Returns: -1 = error
- *           0 = timeout or nothing to select
- *          >0 = number of signaled fds
- */
-int
-_gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock)
-{
-  int     npollfds;
-  GPollFD *pollfds;
-  int     *pollfds_map; 
-  int i, j;
-  int any, n, count;
-  int timeout = 1000;  /* Use a 1s timeout.  */
-  void *dbg_help = NULL;
-
-  if (nonblock)
-    timeout = 0;
-
-  pollfds = calloc (nfds, sizeof *pollfds);
-  if (!pollfds)
-    return -1;
-  pollfds_map = calloc (nfds, sizeof *pollfds_map);
-  if (!pollfds_map)
-    {
-      free (pollfds);
-      return -1;
-    }
-  npollfds = 0;
-
-  DEBUG_BEGIN (dbg_help, 3, "gpgme:select on [ ");
-  any = 0;
-  for (i = 0; i < nfds; i++)
-    {
-      if (fds[i].fd == -1) 
-       continue;
-      if (fds[i].frozen)
-       DEBUG_ADD1 (dbg_help, "f%d ", fds[i].fd);
-      else if (fds[i].for_read )
-       {
-          GIOChannel *chan = find_channel (fds[i].fd, 0);
-          assert (chan);
-          g_io_channel_win32_make_pollfd (chan, G_IO_IN, pollfds + npollfds);
-          pollfds_map[npollfds] = i;
-         DEBUG_ADD2 (dbg_help, "r%d<%d> ", fds[i].fd, pollfds[npollfds].fd);
-          npollfds++;
-         any = 1;
-        }
-      else if (fds[i].for_write)
-       {
-          GIOChannel *chan = find_channel (fds[i].fd, 0);
-          assert (chan);
-          g_io_channel_win32_make_pollfd (chan, G_IO_OUT, pollfds + npollfds);
-          pollfds_map[npollfds] = i;
-         DEBUG_ADD2 (dbg_help, "w%d<%d> ", fds[i].fd, pollfds[npollfds].fd);
-          npollfds++;
-         any = 1;
-        }
-      fds[i].signaled = 0;
-    }
-  DEBUG_END (dbg_help, "]"); 
-  if (!any)
-    {
-      count = 0;
-      goto leave;
-    }
-
-
-  count = g_io_channel_win32_poll (pollfds, npollfds, timeout);
-  if (count < 0)
-    {
-      int saved_errno = errno;
-      DEBUG1 ("_gpgme_io_select failed: %s\n", strerror (errno));
-      errno = saved_errno;
-      goto leave;
-    }
-
-  DEBUG_BEGIN (dbg_help, 3, "select OK [ ");
-  if (DEBUG_ENABLED (dbg_help))
-    {
-      for (i = 0; i < npollfds; i++)
-       {
-         if ((pollfds[i].revents & G_IO_IN))
-           DEBUG_ADD1 (dbg_help, "r%d ", fds[pollfds_map[i]].fd);
-          if ((pollfds[i].revents & G_IO_OUT))
-            DEBUG_ADD1 (dbg_help, "w%d ", fds[pollfds_map[i]].fd);
-        }
-      DEBUG_END (dbg_help, "]");
-    }
-    
-  /* COUNT is used to stop the lop as soon as possible.  */
-  for (n = count, i = 0; i < npollfds && n; i++)
-    {
-      j = pollfds_map[i];
-      assert (j >= 0 && j < nfds);
-      if (fds[j].fd == -1)
-       ;
-      else if (fds[j].for_read)
-       {
-         if ((pollfds[i].revents & G_IO_IN))
-           {
-             fds[j].signaled = 1;
-             n--;
-            }
-        }
-      else if (fds[j].for_write)
-       {
-         if ((pollfds[i].revents & G_IO_OUT))
-           {
-             fds[j].signaled = 1;
-             n--;
-            }
-        }
-    }
-
-leave:
-  free (pollfds);
-  free (pollfds_map);
-  return count;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/w32-io.c b/tags/gpgme-1-1-1/gpgme/w32-io.c
deleted file mode 100644 (file)
index 8acaa44..0000000
+++ /dev/null
@@ -1,1132 +0,0 @@
-/* w32-io.c - W32 API I/O functions.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <windows.h>
-#include <io.h>
-
-#include "util.h"
-#include "sema.h"
-#include "priv-io.h"
-#include "debug.h"
-
-/* We assume that a HANDLE can be represented by an int which should
-   be true for all i386 systems (HANDLE is defined as void *) and
-   these are the only systems for which Windows is available.  Further
-   we assume that -1 denotes an invalid handle.  */
-
-#define fd_to_handle(a)  ((HANDLE)(a))
-#define handle_to_fd(a)  ((int)(a))
-#define pid_to_handle(a) ((HANDLE)(a))
-#define handle_to_pid(a) ((int)(a))
-
-#define READBUF_SIZE 4096
-#define WRITEBUF_SIZE 4096
-#define PIPEBUF_SIZE  4096
-#define MAX_READERS 20
-#define MAX_WRITERS 20
-
-static struct {
-    int inuse;
-    int fd;
-    void (*handler)(int,void*);
-    void *value;
-} notify_table[256];
-DEFINE_STATIC_LOCK (notify_table_lock);
-
-
-struct reader_context_s {
-    HANDLE file_hd;
-    HANDLE thread_hd;  
-    DECLARE_LOCK (mutex);
-
-    int stop_me;
-    int eof;
-    int eof_shortcut;
-    int error;
-    int error_code;
-
-    HANDLE have_data_ev;  /* manually reset */
-    HANDLE have_space_ev; /* auto reset */
-    HANDLE stopped;
-    size_t readpos, writepos;
-    char buffer[READBUF_SIZE];
-};
-
-
-static struct {
-    volatile int used;
-    int fd;
-    struct reader_context_s *context;
-} reader_table[MAX_READERS];
-static int reader_table_size= MAX_READERS;
-DEFINE_STATIC_LOCK (reader_table_lock);
-
-
-struct writer_context_s {
-    HANDLE file_hd;
-    HANDLE thread_hd;  
-    DECLARE_LOCK (mutex);
-
-    int stop_me;
-    int error;
-    int error_code;
-
-    HANDLE have_data;  /* manually reset */
-    HANDLE is_empty;
-    HANDLE stopped;
-    size_t nbytes; 
-    char buffer[WRITEBUF_SIZE];
-};
-
-
-static struct {
-    volatile int used;
-    int fd;
-    struct writer_context_s *context;
-} writer_table[MAX_WRITERS];
-static int writer_table_size= MAX_WRITERS;
-DEFINE_STATIC_LOCK (writer_table_lock);
-
-
-
-static int
-get_desired_thread_priority (void)
-{
-  int value;
-
-  if (!_gpgme_get_conf_int ("IOThreadPriority", &value))
-    {
-      value = THREAD_PRIORITY_HIGHEST;
-      DEBUG1 ("** Using standard IOThreadPriority of %d\n", value);
-    }
-  else
-    DEBUG1 ("** Configured IOThreadPriority is %d\n", value);
-
-  return value;
-}
-
-
-static HANDLE
-set_synchronize (HANDLE h)
-{
-    HANDLE tmp;
-    
-    /* For NT we have to set the sync flag.  It seems that the only
-     * way to do it is by duplicating the handle.  Tsss.. */
-    if (!DuplicateHandle( GetCurrentProcess(), h,
-                          GetCurrentProcess(), &tmp,
-                          EVENT_MODIFY_STATE|SYNCHRONIZE, FALSE, 0 ) ) {
-        DEBUG1 ("** Set SYNCRONIZE failed: ec=%d\n", (int)GetLastError());
-    }
-    else {
-        CloseHandle (h);
-        h = tmp;
-    }
-    return h;
-}
-
-
-
-static DWORD CALLBACK 
-reader (void *arg)
-{
-    struct reader_context_s *c = arg;
-    int nbytes;
-    DWORD nread;
-
-    DEBUG2 ("reader thread %p for file %p started", c->thread_hd, c->file_hd );
-    for (;;) {
-        LOCK (c->mutex);
-        /* leave a 1 byte gap so that we can see whether it is empty or full*/
-        if ((c->writepos + 1) % READBUF_SIZE == c->readpos) { 
-            /* wait for space */
-            if (!ResetEvent (c->have_space_ev) )
-                DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
-            UNLOCK (c->mutex);
-            DEBUG1 ("reader thread %p: waiting for space ...", c->thread_hd );
-            WaitForSingleObject (c->have_space_ev, INFINITE);
-            DEBUG1 ("reader thread %p: got space", c->thread_hd );
-            LOCK (c->mutex);
-               }
-        if ( c->stop_me ) {
-            UNLOCK (c->mutex);
-            break;
-        }
-        nbytes = (c->readpos + READBUF_SIZE - c->writepos-1) % READBUF_SIZE;
-        if ( nbytes > READBUF_SIZE - c->writepos )
-            nbytes = READBUF_SIZE - c->writepos;
-        UNLOCK (c->mutex);
-
-        DEBUG2 ("reader thread %p: reading %d bytes", c->thread_hd, nbytes );
-        if ( !ReadFile ( c->file_hd,
-                         c->buffer+c->writepos, nbytes, &nread, NULL) ) {
-            c->error_code = (int)GetLastError ();
-            if (c->error_code == ERROR_BROKEN_PIPE ) {
-                c->eof=1;
-                DEBUG1 ("reader thread %p: got eof (broken pipe)",
-                        c->thread_hd );
-            }
-            else {
-                c->error = 1;
-                DEBUG2 ("reader thread %p: read error: ec=%d",
-                        c->thread_hd, c->error_code );
-            }
-            break;
-        }
-        if ( !nread ) {
-            c->eof = 1;
-            DEBUG1 ("reader thread %p: got eof", c->thread_hd );
-            break;
-        }
-        DEBUG2 ("reader thread %p: got %d bytes", c->thread_hd, (int)nread );
-      
-        LOCK (c->mutex);
-        if (c->stop_me) {
-            UNLOCK (c->mutex);
-            break;
-        }
-        c->writepos = (c->writepos + nread) % READBUF_SIZE;
-        if ( !SetEvent (c->have_data_ev) )
-            DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-        UNLOCK (c->mutex);
-    }
-    /* indicate that we have an error or eof */
-    if ( !SetEvent (c->have_data_ev) )
-        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-    DEBUG1 ("reader thread %p ended", c->thread_hd );
-    SetEvent (c->stopped);
-
-    return 0;
-}
-
-
-static struct reader_context_s *
-create_reader (HANDLE fd)
-{
-    struct reader_context_s *c;
-    SECURITY_ATTRIBUTES sec_attr;
-    DWORD tid;
-
-    DEBUG1 ("creating new read thread for file handle %p", fd );
-    memset (&sec_attr, 0, sizeof sec_attr );
-    sec_attr.nLength = sizeof sec_attr;
-    sec_attr.bInheritHandle = FALSE;
-
-    c = calloc (1, sizeof *c );
-    if (!c)
-        return NULL;
-
-    c->file_hd = fd;
-    c->have_data_ev = CreateEvent (&sec_attr, TRUE, FALSE, NULL);
-    c->have_space_ev = CreateEvent (&sec_attr, FALSE, TRUE, NULL);
-    c->stopped = CreateEvent (&sec_attr, TRUE, FALSE, NULL);
-    if (!c->have_data_ev || !c->have_space_ev || !c->stopped ) {
-        DEBUG1 ("** CreateEvent failed: ec=%d\n", (int)GetLastError ());
-        if (c->have_data_ev)
-            CloseHandle (c->have_data_ev);
-        if (c->have_space_ev)
-            CloseHandle (c->have_space_ev);
-        if (c->stopped)
-            CloseHandle (c->stopped);
-        free (c);
-        return NULL;
-    }
-
-    c->have_data_ev = set_synchronize (c->have_data_ev);
-    INIT_LOCK (c->mutex);
-
-    c->thread_hd = CreateThread (&sec_attr, 0, reader, c, 0, &tid );
-    if (!c->thread_hd) {
-        DEBUG1 ("** failed to create reader thread: ec=%d\n",
-                 (int)GetLastError ());
-        DESTROY_LOCK (c->mutex);
-        if (c->have_data_ev)
-            CloseHandle (c->have_data_ev);
-        if (c->have_space_ev)
-            CloseHandle (c->have_space_ev);
-        if (c->stopped)
-            CloseHandle (c->stopped);
-        free (c);
-        return NULL;
-    }    
-    else {
-      /* We set the priority of the thread higher because we know that
-         it only runs for a short time.  This greatly helps to increase
-         the performance of the I/O. */
-      SetThreadPriority (c->thread_hd, get_desired_thread_priority ());
-    }
-
-    return c;
-}
-
-static void
-destroy_reader (struct reader_context_s *c)
-{
-    LOCK (c->mutex);
-    c->stop_me = 1;
-    if (c->have_space_ev) 
-        SetEvent (c->have_space_ev);
-    UNLOCK (c->mutex);
-
-    DEBUG1 ("waiting for thread %p termination ...", c->thread_hd );
-    WaitForSingleObject (c->stopped, INFINITE);
-    DEBUG1 ("thread %p has terminated", c->thread_hd );
-    
-    if (c->stopped)
-        CloseHandle (c->stopped);
-    if (c->have_data_ev)
-        CloseHandle (c->have_data_ev);
-    if (c->have_space_ev)
-        CloseHandle (c->have_space_ev);
-    CloseHandle (c->thread_hd);
-    DESTROY_LOCK (c->mutex);
-    free (c);
-}
-
-
-/* 
- * Find a reader context or create a new one 
- * Note that the reader context will last until a io_close.
- */
-static struct reader_context_s *
-find_reader (int fd, int start_it)
-{
-    int i;
-
-    for (i=0; i < reader_table_size ; i++ ) {
-        if ( reader_table[i].used && reader_table[i].fd == fd )
-            return reader_table[i].context;
-    }
-    if (!start_it)
-        return NULL;
-
-    LOCK (reader_table_lock);
-    for (i=0; i < reader_table_size; i++ ) {
-        if (!reader_table[i].used) {
-            reader_table[i].fd = fd;
-            reader_table[i].context = create_reader (fd_to_handle (fd));
-            reader_table[i].used = 1;
-            UNLOCK (reader_table_lock);
-            return reader_table[i].context;
-        }
-    }
-    UNLOCK (reader_table_lock);
-    return NULL;
-}
-
-
-static void
-kill_reader (int fd)
-{
-    int i;
-
-    LOCK (reader_table_lock);
-    for (i=0; i < reader_table_size; i++ ) {
-        if (reader_table[i].used && reader_table[i].fd == fd ) {
-            destroy_reader (reader_table[i].context);
-            reader_table[i].context = NULL;
-            reader_table[i].used = 0;
-            break;
-        }
-    }
-    UNLOCK (reader_table_lock);
-}
-
-
-
-int
-_gpgme_io_read ( int fd, void *buffer, size_t count )
-{
-    int nread;
-    struct reader_context_s *c = find_reader (fd,1);
-
-    DEBUG2 ("fd %d: about to read %d bytes\n", fd, (int)count );
-    if ( !c ) {
-        DEBUG0 ( "no reader thread\n");
-        return -1;
-    }
-    if (c->eof_shortcut) {
-        DEBUG1 ("fd %d: EOF (again)", fd );
-        return 0;
-    }
-
-    LOCK (c->mutex);
-    if (c->readpos == c->writepos && !c->error) { /*no data avail*/
-        UNLOCK (c->mutex);
-        DEBUG2 ("fd %d: waiting for data from thread %p", fd, c->thread_hd);
-        WaitForSingleObject (c->have_data_ev, INFINITE);
-        DEBUG2 ("fd %d: data from thread %p available", fd, c->thread_hd);
-        LOCK (c->mutex);
-    }
-    
-    if (c->readpos == c->writepos || c->error) {
-        UNLOCK (c->mutex);
-        c->eof_shortcut = 1;
-        if (c->eof) {
-            DEBUG1 ("fd %d: EOF", fd );
-            return 0;
-        }
-        if (!c->error) {
-            DEBUG1 ("fd %d: EOF but eof flag not set", fd );
-            return 0;
-        }
-        DEBUG1 ("fd %d: read error", fd );
-        return -1;
-    }
-      
-    nread = c->readpos < c->writepos? c->writepos - c->readpos
-                                    : READBUF_SIZE - c->readpos;
-    if (nread > count)
-        nread = count;
-    memcpy (buffer, c->buffer+c->readpos, nread);
-    c->readpos = (c->readpos + nread) % READBUF_SIZE;
-    if (c->readpos == c->writepos && !c->eof) {
-        if ( !ResetEvent (c->have_data_ev) )
-            DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
-    }
-    if (!SetEvent (c->have_space_ev))
-        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-    UNLOCK (c->mutex);
-
-    DEBUG2 ("fd %d: got %d bytes\n", fd, nread );
-    if (nread > 0)
-      _gpgme_debug (2, "fd %d: got `%.*s'\n", fd, nread, buffer);
-
-    return nread;
-}
-/*
- * The writer does use a simple buffering strategy so that we are
- * informed about write errors as soon as possible (i.e. with the the
- * next call to the write function
- */
-static DWORD CALLBACK 
-writer (void *arg)
-{
-    struct writer_context_s *c = arg;
-    DWORD nwritten;
-
-    DEBUG2 ("writer thread %p for file %p started", c->thread_hd, c->file_hd );
-    for (;;) {
-        LOCK (c->mutex);
-        if ( c->stop_me ) {
-            UNLOCK (c->mutex);
-            break;
-        }
-        if ( !c->nbytes ) { 
-            if (!SetEvent (c->is_empty))
-                DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-            if (!ResetEvent (c->have_data) )
-                DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
-            UNLOCK (c->mutex);
-            DEBUG1 ("writer thread %p: idle ...", c->thread_hd );
-            WaitForSingleObject (c->have_data, INFINITE);
-            DEBUG1 ("writer thread %p: got data to send", c->thread_hd );
-            LOCK (c->mutex);
-               }
-        if ( c->stop_me ) {
-            UNLOCK (c->mutex);
-            break;
-        }
-        UNLOCK (c->mutex);
-
-        DEBUG2 ("writer thread %p: writing %d bytes",
-                c->thread_hd, c->nbytes );
-        if ( c->nbytes && !WriteFile ( c->file_hd,  c->buffer, c->nbytes,
-                                       &nwritten, NULL)) {
-            c->error_code = (int)GetLastError ();
-            c->error = 1;
-            DEBUG2 ("writer thread %p: write error: ec=%d",
-                    c->thread_hd, c->error_code );
-            break;
-        }
-        DEBUG2 ("writer thread %p: wrote %d bytes",
-                c->thread_hd, (int)nwritten );
-      
-        LOCK (c->mutex);
-        c->nbytes -= nwritten;
-        UNLOCK (c->mutex);
-    }
-    /* indicate that we have an error  */
-    if ( !SetEvent (c->is_empty) )
-        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-    DEBUG1 ("writer thread %p ended", c->thread_hd );
-    SetEvent (c->stopped);
-
-    return 0;
-}
-
-
-static struct writer_context_s *
-create_writer (HANDLE fd)
-{
-    struct writer_context_s *c;
-    SECURITY_ATTRIBUTES sec_attr;
-    DWORD tid;
-
-    DEBUG1 ("creating new write thread for file handle %p", fd );
-    memset (&sec_attr, 0, sizeof sec_attr );
-    sec_attr.nLength = sizeof sec_attr;
-    sec_attr.bInheritHandle = FALSE;
-
-    c = calloc (1, sizeof *c );
-    if (!c)
-        return NULL;
-
-    c->file_hd = fd;
-    c->have_data = CreateEvent (&sec_attr, TRUE, FALSE, NULL);
-    c->is_empty  = CreateEvent (&sec_attr, TRUE, TRUE, NULL);
-    c->stopped = CreateEvent (&sec_attr, TRUE, FALSE, NULL);
-    if (!c->have_data || !c->is_empty || !c->stopped ) {
-        DEBUG1 ("** CreateEvent failed: ec=%d\n", (int)GetLastError ());
-        if (c->have_data)
-            CloseHandle (c->have_data);
-        if (c->is_empty)
-            CloseHandle (c->is_empty);
-        if (c->stopped)
-            CloseHandle (c->stopped);
-        free (c);
-        return NULL;
-    }
-
-    c->is_empty = set_synchronize (c->is_empty);
-    INIT_LOCK (c->mutex);
-
-    c->thread_hd = CreateThread (&sec_attr, 0, writer, c, 0, &tid );
-    if (!c->thread_hd) {
-        DEBUG1 ("** failed to create writer thread: ec=%d\n",
-                 (int)GetLastError ());
-        DESTROY_LOCK (c->mutex);
-        if (c->have_data)
-            CloseHandle (c->have_data);
-        if (c->is_empty)
-            CloseHandle (c->is_empty);
-        if (c->stopped)
-            CloseHandle (c->stopped);
-        free (c);
-        return NULL;
-    }    
-    else {
-      /* We set the priority of the thread higher because we know that
-         it only runs for a short time.  This greatly helps to increase
-         the performance of the I/O. */
-      SetThreadPriority (c->thread_hd, get_desired_thread_priority ());
-    }
-
-    return c;
-}
-
-static void
-destroy_writer (struct writer_context_s *c)
-{
-    LOCK (c->mutex);
-    c->stop_me = 1;
-    if (c->have_data) 
-        SetEvent (c->have_data);
-    UNLOCK (c->mutex);
-
-    DEBUG1 ("waiting for thread %p termination ...", c->thread_hd );
-    WaitForSingleObject (c->stopped, INFINITE);
-    DEBUG1 ("thread %p has terminated", c->thread_hd );
-    
-    if (c->stopped)
-        CloseHandle (c->stopped);
-    if (c->have_data)
-        CloseHandle (c->have_data);
-    if (c->is_empty)
-        CloseHandle (c->is_empty);
-    CloseHandle (c->thread_hd);
-    DESTROY_LOCK (c->mutex);
-    free (c);
-}
-
-
-/* 
- * Find a writer context or create a new one 
- * Note that the writer context will last until a io_close.
- */
-static struct writer_context_s *
-find_writer (int fd, int start_it)
-{
-    int i;
-
-    for (i=0; i < writer_table_size ; i++ ) {
-        if ( writer_table[i].used && writer_table[i].fd == fd )
-            return writer_table[i].context;
-    }
-    if (!start_it)
-        return NULL;
-
-    LOCK (writer_table_lock);
-    for (i=0; i < writer_table_size; i++ ) {
-        if (!writer_table[i].used) {
-            writer_table[i].fd = fd;
-            writer_table[i].context = create_writer (fd_to_handle (fd));
-            writer_table[i].used = 1;
-            UNLOCK (writer_table_lock);
-            return writer_table[i].context;
-        }
-    }
-    UNLOCK (writer_table_lock);
-    return NULL;
-}
-
-
-static void
-kill_writer (int fd)
-{
-    int i;
-
-    LOCK (writer_table_lock);
-    for (i=0; i < writer_table_size; i++ ) {
-        if (writer_table[i].used && writer_table[i].fd == fd ) {
-            destroy_writer (writer_table[i].context);
-            writer_table[i].context = NULL;
-            writer_table[i].used = 0;
-            break;
-        }
-    }
-    UNLOCK (writer_table_lock);
-}
-
-
-
-
-int
-_gpgme_io_write ( int fd, const void *buffer, size_t count )
-{
-    struct writer_context_s *c = find_writer (fd,1);
-
-    DEBUG2 ("fd %d: about to write %d bytes\n", fd, (int)count );
-    _gpgme_debug (2, "fd %d: write `%.*s'\n", fd, (int) count, buffer);
-    if ( !c ) {
-        DEBUG0 ( "no writer thread\n");
-        return -1;
-    }
-
-    LOCK (c->mutex);
-    if ( c->nbytes ) { /* bytes are pending for send */
-        /* Reset the is_empty event.  Better safe than sorry.  */
-        if (!ResetEvent (c->is_empty))
-            DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
-        UNLOCK (c->mutex);
-        DEBUG2 ("fd %d: waiting for empty buffer in thread %p",
-                fd, c->thread_hd);
-        WaitForSingleObject (c->is_empty, INFINITE);
-        DEBUG2 ("fd %d: thread %p buffer is empty", fd, c->thread_hd);
-        LOCK (c->mutex);
-    }
-    
-    if ( c->error) {
-        UNLOCK (c->mutex);
-        DEBUG1 ("fd %d: write error", fd );
-        return -1;
-    }
-
-    /* If no error occured, the number of bytes in the buffer must be
-       zero.  */
-    assert (!c->nbytes);
-
-    if (count > WRITEBUF_SIZE)
-        count = WRITEBUF_SIZE;
-    memcpy (c->buffer, buffer, count);
-    c->nbytes = count;
-
-    /* We have to reset the is_empty event early, because it is also
-       used by the select() implementation to probe the channel.  */
-    if (!ResetEvent (c->is_empty))
-        DEBUG1 ("ResetEvent failed: ec=%d", (int)GetLastError ());
-    if (!SetEvent (c->have_data))
-        DEBUG1 ("SetEvent failed: ec=%d", (int)GetLastError ());
-    UNLOCK (c->mutex);
-
-    DEBUG2 ("fd %d:         copied %d bytes\n",
-                   fd, (int)count );
-    return (int)count;
-}
-
-
-int
-_gpgme_io_pipe ( int filedes[2], int inherit_idx )
-{
-    HANDLE r, w;
-    SECURITY_ATTRIBUTES sec_attr;
-
-    memset (&sec_attr, 0, sizeof sec_attr );
-    sec_attr.nLength = sizeof sec_attr;
-    sec_attr.bInheritHandle = FALSE;
-    
-    if (!CreatePipe ( &r, &w, &sec_attr, PIPEBUF_SIZE))
-        return -1;
-    /* Make one end inheritable. */
-    if ( inherit_idx == 0 ) {
-        HANDLE h;
-        if (!DuplicateHandle( GetCurrentProcess(), r,
-                              GetCurrentProcess(), &h, 0,
-                              TRUE, DUPLICATE_SAME_ACCESS ) ) {
-            DEBUG1 ("DuplicateHandle failed: ec=%d\n", (int)GetLastError());
-            CloseHandle (r);
-            CloseHandle (w);
-            return -1;
-        }
-        CloseHandle (r);
-        r = h;
-    }
-    else if ( inherit_idx == 1 ) {
-        HANDLE h;
-        if (!DuplicateHandle( GetCurrentProcess(), w,
-                              GetCurrentProcess(), &h, 0,
-                              TRUE, DUPLICATE_SAME_ACCESS ) ) {
-            DEBUG1 ("DuplicateHandle failed: ec=%d\n", (int)GetLastError());
-            CloseHandle (r);
-            CloseHandle (w);
-            return -1;
-        }
-        CloseHandle (w);
-        w = h;
-    }
-
-    filedes[0] = handle_to_fd (r);
-    filedes[1] = handle_to_fd (w);
-    DEBUG5 ("CreatePipe %p %p %d %d inherit=%d\n", r, w,
-                   filedes[0], filedes[1], inherit_idx );
-    return 0;
-}
-
-int
-_gpgme_io_close ( int fd )
-{
-    int i;
-    void (*handler)(int, void*) = NULL;
-    void *value = NULL;
-
-    if ( fd == -1 )
-        return -1;
-
-    DEBUG1 ("** closing handle for fd %d\n", fd);
-    kill_reader (fd);
-    kill_writer (fd);
-    LOCK (notify_table_lock);
-    for ( i=0; i < DIM (notify_table); i++ ) {
-        if (notify_table[i].inuse && notify_table[i].fd == fd) {
-            handler = notify_table[i].handler;
-            value   = notify_table[i].value;
-            notify_table[i].handler = NULL;
-            notify_table[i].value = NULL;
-            notify_table[i].inuse = 0;
-            break;
-        }
-    }
-    UNLOCK (notify_table_lock);
-    if (handler)
-        handler (fd, value);
-
-    if ( !CloseHandle (fd_to_handle (fd)) ) { 
-        DEBUG2 ("CloseHandle for fd %d failed: ec=%d\n",
-                 fd, (int)GetLastError ());
-        return -1;
-    }
-
-    return 0;
-}
-
-int
-_gpgme_io_set_close_notify (int fd, void (*handler)(int, void*), void *value)
-{
-    int i;
-
-    assert (fd != -1);
-
-    LOCK (notify_table_lock);
-    for (i=0; i < DIM (notify_table); i++ ) {
-        if ( notify_table[i].inuse && notify_table[i].fd == fd )
-            break;
-    }
-    if ( i == DIM (notify_table) ) {
-        for (i=0; i < DIM (notify_table); i++ ) {
-            if ( !notify_table[i].inuse )
-                break;
-        }
-    }
-    if ( i == DIM (notify_table) ) {
-        UNLOCK (notify_table_lock);
-        return -1;
-    }
-    notify_table[i].fd = fd;
-    notify_table[i].handler = handler;
-    notify_table[i].value = value;
-    notify_table[i].inuse = 1;
-    UNLOCK (notify_table_lock);
-    DEBUG2 ("set notification for fd %d (idx=%d)", fd, i );
-    return 0;
-}
-
-
-int
-_gpgme_io_set_nonblocking ( int fd )
-{
-    return 0;
-}
-
-
-static char *
-build_commandline ( char **argv )
-{
-  int i, n = 0;
-  char *buf, *p;
-  
-  /* FIXME: we have to quote some things because under Windows the
-   * program parses the commandline and does some unquoting.  For now
-   * we only do very basic quoting to the first argument because this
-   * one often contains a space (e.g. C:\\Program Files\GNU\GnuPG\gpg.exe) 
-   * and we would produce an invalid line in that case.  */
-  for (i=0; argv[i]; i++)
-    n += strlen (argv[i]) + 2 + 1; /* 2 extra bytes for possible quoting */
-  buf = p = malloc (n);
-  if ( !buf )
-    return NULL;
-  *buf = 0;
-  if ( argv[0] )
-    {
-      if (strpbrk (argv[0], " \t"))
-        p = stpcpy (stpcpy (stpcpy (p, "\""), argv[0]), "\"");
-      else
-        p = stpcpy (p, argv[0]);
-      for (i = 1; argv[i]; i++)
-        {
-          if (!*argv[i])
-            p = stpcpy (p, " \"\"");
-          else
-            p = stpcpy (stpcpy (p, " "), argv[i]);
-        }
-    }
-  
-  return buf;
-}
-
-
-int
-_gpgme_io_spawn ( const char *path, char **argv,
-                  struct spawn_fd_item_s *fd_child_list,
-                  struct spawn_fd_item_s *fd_parent_list )
-{
-    SECURITY_ATTRIBUTES sec_attr;
-    PROCESS_INFORMATION pi = {
-        NULL,      /* returns process handle */
-        0,         /* returns primary thread handle */
-        0,         /* returns pid */
-        0         /* returns tid */
-    };
-    STARTUPINFO si;
-    char *envblock = NULL;
-    int cr_flags = CREATE_DEFAULT_ERROR_MODE
-                 | GetPriorityClass (GetCurrentProcess ());
-    int i;
-    char *arg_string;
-    int duped_stdin = 0;
-    int duped_stderr = 0;
-    HANDLE hnul = INVALID_HANDLE_VALUE;
-    /* FIXME.  */
-    int debug_me = 0;
-
-    memset (&sec_attr, 0, sizeof sec_attr );
-    sec_attr.nLength = sizeof sec_attr;
-    sec_attr.bInheritHandle = FALSE;
-
-    arg_string = build_commandline ( argv );
-    if (!arg_string )
-        return -1; 
-
-    memset (&si, 0, sizeof si);
-    si.cb = sizeof (si);
-    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
-    si.wShowWindow = debug_me? SW_SHOW : SW_HIDE;
-    si.hStdInput = GetStdHandle (STD_INPUT_HANDLE);
-    si.hStdOutput = GetStdHandle (STD_OUTPUT_HANDLE);
-    si.hStdError = GetStdHandle (STD_ERROR_HANDLE);
-
-    for (i=0; fd_child_list[i].fd != -1; i++ ) {
-        if (fd_child_list[i].dup_to == 0 ) {
-            si.hStdInput = fd_to_handle (fd_child_list[i].fd);
-            DEBUG1 ("using %d for stdin", fd_child_list[i].fd );
-            duped_stdin=1;
-        }
-        else if (fd_child_list[i].dup_to == 1 ) {
-            si.hStdOutput = fd_to_handle (fd_child_list[i].fd);
-            DEBUG1 ("using %d for stdout", fd_child_list[i].fd );
-        }
-        else if (fd_child_list[i].dup_to == 2 ) {
-            si.hStdError = fd_to_handle (fd_child_list[i].fd);
-            DEBUG1 ("using %d for stderr", fd_child_list[i].fd );
-            duped_stderr = 1;
-        }
-    }
-
-    if( !duped_stdin || !duped_stderr ) {
-        SECURITY_ATTRIBUTES sa;
-
-        memset (&sa, 0, sizeof sa );
-        sa.nLength = sizeof sa;
-        sa.bInheritHandle = TRUE;
-        hnul = CreateFile ( "nul",
-                            GENERIC_READ|GENERIC_WRITE,
-                            FILE_SHARE_READ|FILE_SHARE_WRITE,
-                            &sa,
-                            OPEN_EXISTING,
-                            FILE_ATTRIBUTE_NORMAL,
-                            NULL );
-        if ( hnul == INVALID_HANDLE_VALUE ) {
-            DEBUG1 ("can't open `nul': ec=%d\n", (int)GetLastError ());
-            free (arg_string);
-            return -1;
-        }
-        /* Make sure that the process has a connected stdin */
-        if ( !duped_stdin ) {
-            si.hStdInput = hnul;
-            DEBUG1 ("using %d for dummy stdin", (int)hnul );
-        }
-        /* We normally don't want all the normal output */
-        if ( !duped_stderr ) {
-            si.hStdError = hnul;
-            DEBUG1 ("using %d for dummy stderr", (int)hnul );
-        }
-    }
-
-    DEBUG2 ("CreateProcess, path=`%s' args=`%s'", path, arg_string);
-    cr_flags |= CREATE_SUSPENDED; 
-    if ( !CreateProcessA (path,
-                          arg_string,
-                          &sec_attr,     /* process security attributes */
-                          &sec_attr,     /* thread security attributes */
-                          TRUE,          /* inherit handles */
-                          cr_flags,      /* creation flags */
-                          envblock,      /* environment */
-                          NULL,          /* use current drive/directory */
-                          &si,           /* startup information */
-                          &pi            /* returns process information */
-        ) ) {
-        DEBUG1 ("CreateProcess failed: ec=%d\n", (int) GetLastError ());
-        free (arg_string);
-        return -1;
-    }
-
-    /* Close the /dev/nul handle if used. */
-    if (hnul != INVALID_HANDLE_VALUE ) {
-        if ( !CloseHandle ( hnul ) )
-            DEBUG1 ("CloseHandle(hnul) failed: ec=%d\n", (int)GetLastError());
-    }
-
-    /* Close the other ends of the pipes. */
-    for (i = 0; fd_parent_list[i].fd != -1; i++)
-      _gpgme_io_close (fd_parent_list[i].fd);
-
-    DEBUG4 ("CreateProcess ready\n"
-            "-   hProcess=%p  hThread=%p\n"
-            "-   dwProcessID=%d dwThreadId=%d\n",
-            pi.hProcess, pi.hThread, 
-            (int) pi.dwProcessId, (int) pi.dwThreadId);
-
-    if ( ResumeThread ( pi.hThread ) < 0 ) {
-        DEBUG1 ("ResumeThread failed: ec=%d\n", (int)GetLastError ());
-    }
-
-    if ( !CloseHandle (pi.hThread) ) { 
-        DEBUG1 ("CloseHandle of thread failed: ec=%d\n",
-                 (int)GetLastError ());
-    }
-
-    return handle_to_pid (pi.hProcess);
-}
-
-
-/*
- * Select on the list of fds.
- * Returns: -1 = error
- *           0 = timeout or nothing to select
- *          >0 = number of signaled fds
- */
-int
-_gpgme_io_select ( struct io_select_fd_s *fds, size_t nfds, int nonblock )
-{
-    HANDLE waitbuf[MAXIMUM_WAIT_OBJECTS];
-    int    waitidx[MAXIMUM_WAIT_OBJECTS];
-    int code, nwait;
-    int i, any;
-    int count;
-    void *dbg_help;
-
- restart:
-    DEBUG_BEGIN (dbg_help, 3, "select on [ ");
-    any = 0;
-    nwait = 0;
-    count = 0;
-    for ( i=0; i < nfds; i++ ) {
-        if ( fds[i].fd == -1 ) 
-            continue;
-        fds[i].signaled = 0;
-        if ( fds[i].for_read || fds[i].for_write ) {
-            if ( fds[i].frozen ) {
-                DEBUG_ADD1 (dbg_help, "f%d ", fds[i].fd );
-            }
-            else if ( fds[i].for_read ) {
-                struct reader_context_s *c = find_reader (fds[i].fd,1);
-                
-                if (!c) { 
-                    DEBUG1 ("oops: no reader thread for fd %d", fds[i].fd);
-                }
-                else {
-                    if ( nwait >= DIM (waitbuf) ) {
-                        DEBUG_END (dbg_help, "oops ]");
-                        DEBUG0 ("Too many objects for WFMO!" );
-                        return -1;
-                    }
-                    waitidx[nwait]   = i;
-                    waitbuf[nwait++] = c->have_data_ev;
-                }
-                DEBUG_ADD1 (dbg_help, "r%d ", fds[i].fd );
-                any = 1;
-            }
-            else if ( fds[i].for_write ) {
-                struct writer_context_s *c = find_writer (fds[i].fd,1);
-                
-                if (!c) { 
-                    DEBUG1 ("oops: no writer thread for fd %d", fds[i].fd);
-                }
-                else {
-                    if ( nwait >= DIM (waitbuf) ) {
-                        DEBUG_END (dbg_help, "oops ]");
-                        DEBUG0 ("Too many objects for WFMO!" );
-                        return -1;
-                    }
-                   waitidx[nwait]   = i;
-                   waitbuf[nwait++] = c->is_empty;
-                }
-               DEBUG_ADD1 (dbg_help, "w%d ", fds[i].fd );
-               any = 1;
-            }
-        }
-    }
-    DEBUG_END (dbg_help, "]");
-    if (!any) 
-        return 0;
-
-    code = WaitForMultipleObjects ( nwait, waitbuf, 0, nonblock ? 0 : 1000);
-    if ( code >= WAIT_OBJECT_0 && code < WAIT_OBJECT_0 + nwait ) {
-        /* This WFMO is a really silly function:  It does return either
-         * the index of the signaled object or if 2 objects have been
-         * signalled at the same time, the index of the object with the
-         * lowest object is returned - so and how do we find out
-         * how many objects have been signaled???.
-         * The only solution I can imagine is to test each object starting
-         * with the returned index individually - how dull.
-         */
-        any = 0;
-        for (i=code - WAIT_OBJECT_0; i < nwait; i++ ) {
-            if (WaitForSingleObject (waitbuf[i], 0) == WAIT_OBJECT_0) {
-                assert (waitidx[i] >=0 && waitidx[i] < nfds);
-                fds[waitidx[i]].signaled = 1;
-                any = 1;
-                count++;
-            }
-        }
-        if (!any) {
-            DEBUG0 ("Oops: No signaled objects found after WFMO");
-            count = -1;
-        }
-    }
-    else if ( code == WAIT_TIMEOUT ) {
-        DEBUG0 ("WFMO timed out\n" );
-    }  
-    else if (code == WAIT_FAILED ) {
-        int le = (int)GetLastError ();
-        if ( le == ERROR_INVALID_HANDLE ) {
-            int k, j = handle_to_fd (waitbuf[i]);
-                    
-            DEBUG1 ("WFMO invalid handle %d removed\n", j);
-            for (k=0 ; k < nfds; k++ ) {
-                if ( fds[k].fd == j ) {
-                    fds[k].for_read = fds[k].for_write = 0;
-                    goto restart;
-                }
-            }
-            DEBUG0 (" oops, or not???\n");
-        }
-        DEBUG1 ("WFMO failed: %d\n", le );
-        count = -1;
-    }
-    else {
-        DEBUG1 ("WFMO returned %d\n", code );
-        count = -1;
-    }
-
-    if ( count ) {
-        DEBUG_BEGIN (dbg_help, 3, " signaled [ ");
-        for ( i=0; i < nfds; i++ ) {
-            if ( fds[i].fd == -1 ) 
-                continue;
-            if ( (fds[i].for_read || fds[i].for_write) && fds[i].signaled ) {
-                DEBUG_ADD2 (dbg_help, "%c%d ",
-                            fds[i].for_read? 'r':'w',fds[i].fd );
-            }
-        }
-        DEBUG_END (dbg_help, "]");
-    }
-    
-    return count;
-}
-
-void
-_gpgme_io_subsystem_init (void)
-{
-  
-}
-
-
-/* Write the printable version of FD to the buffer BUF of length
-   BUFLEN.  The printable version is the representation on the command
-   line that the child process expects.  */
-int
-_gpgme_io_fd2str (char *buf, int buflen, int fd)
-{
-  return snprintf (buf, buflen, "%d", fd);
-}
-
-\f
-/* The following interface is only useful for GPGME Glib.  */
-
-/* Look up the giochannel for file descriptor FD.  */
-void *
-gpgme_get_giochannel (int fd)
-{
-  return NULL;
-}
-
diff --git a/tags/gpgme-1-1-1/gpgme/w32-sema.c b/tags/gpgme-1-1-1/gpgme/w32-sema.c
deleted file mode 100644 (file)
index c20f1a7..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/* w32-sema.c 
-   Copyright (C) 2001 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <windows.h>
-#include <io.h>
-
-#include "util.h"
-#include "sema.h"
-#include "debug.h"
-
-static void
-sema_fatal (const char *text)
-{
-    fprintf (stderr, "sema.c: %s\n", text);
-    abort ();
-}
-
-
-static void
-critsect_init (struct critsect_s *s)
-{
-    CRITICAL_SECTION *mp;
-    static CRITICAL_SECTION init_lock;
-    static int initialized;
-    
-    if (!initialized) {
-        /* The very first time we call this function, we assume that
-          only one thread is running, so that we can bootstrap the
-          semaphore code.  */
-        InitializeCriticalSection (&init_lock);
-        initialized = 1;
-    }
-    if (!s)
-        return; /* we just want to initialize ourself */
-
-    /* first test whether it is really not initialized */
-    EnterCriticalSection (&init_lock);
-    if ( s->private ) {
-        LeaveCriticalSection (&init_lock);
-        return;
-    }
-    /* now init it */
-    mp = malloc ( sizeof *mp );
-    if (!mp) {
-        LeaveCriticalSection (&init_lock);
-        sema_fatal ("out of core while creating critical section lock");
-    }
-    InitializeCriticalSection (mp);
-    s->private = mp;
-    LeaveCriticalSection (&init_lock);
-}
-
-void
-_gpgme_sema_subsystem_init ()
-{
-    /* fixme: we should check that there is only one thread running */
-    critsect_init (NULL);
-}
-
-
-void
-_gpgme_sema_cs_enter ( struct critsect_s *s )
-{
-    if (!s->private)
-        critsect_init (s);
-    EnterCriticalSection ( (CRITICAL_SECTION*)s->private );
-}
-
-void
-_gpgme_sema_cs_leave (struct critsect_s *s)
-{
-    if (!s->private)
-        critsect_init (s);
-    LeaveCriticalSection ((CRITICAL_SECTION*)s->private);
-}
-
-void
-_gpgme_sema_cs_destroy ( struct critsect_s *s )
-{
-    if (s && s->private) {
-        DeleteCriticalSection ((CRITICAL_SECTION*)s->private);
-        free (s->private);
-        s->private = NULL;
-    }
-}
diff --git a/tags/gpgme-1-1-1/gpgme/w32-util.c b/tags/gpgme-1-1-1/gpgme/w32-util.c
deleted file mode 100644 (file)
index 889a6ec..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-/* w32-util.c - Utility functions for the W32 API
-   Copyright (C) 1999 Free Software Foundation, Inc
-   Copyright (C) 2001 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <windows.h>
-#include <shlobj.h>
-#include <io.h>
-
-#include "util.h"
-#include "sema.h"
-#include "debug.h"
-
-DEFINE_STATIC_LOCK (get_path_lock);
-
-
-#define RTLD_LAZY 0
-
-static __inline__ void *
-dlopen (const char * name, int flag)
-{
-  void * hd = LoadLibrary (name);
-  return hd;
-}
-
-static __inline__ void *
-dlsym (void * hd, const char * sym)
-{
-  if (hd && sym)
-    {
-      void * fnc = GetProcAddress (hd, sym);
-      if (!fnc)
-        return NULL;
-      return fnc;
-    }
-  return NULL;
-}
-
-static __inline__ int
-dlclose (void * hd)
-{
-  if (hd)
-    {
-      FreeLibrary (hd);
-      return 0;
-    }
-  return -1;
-}  
-
-
-/* Return a string from the W32 Registry or NULL in case of error.
-   Caller must release the return value.  A NULL for root is an alias
-   for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. */
-static char *
-read_w32_registry_string (const char *root, const char *dir, const char *name)
-{
-  HKEY root_key, key_handle;
-  DWORD n1, nbytes, type;
-  char *result = NULL;
-       
-  if ( !root )
-    root_key = HKEY_CURRENT_USER;
-  else if ( !strcmp( root, "HKEY_CLASSES_ROOT" ) )
-    root_key = HKEY_CLASSES_ROOT;
-  else if ( !strcmp( root, "HKEY_CURRENT_USER" ) )
-    root_key = HKEY_CURRENT_USER;
-  else if ( !strcmp( root, "HKEY_LOCAL_MACHINE" ) )
-    root_key = HKEY_LOCAL_MACHINE;
-  else if ( !strcmp( root, "HKEY_USERS" ) )
-    root_key = HKEY_USERS;
-  else if ( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) )
-    root_key = HKEY_PERFORMANCE_DATA;
-  else if ( !strcmp( root, "HKEY_CURRENT_CONFIG" ) )
-    root_key = HKEY_CURRENT_CONFIG;
-  else
-    return NULL;
-       
-  if ( RegOpenKeyEx ( root_key, dir, 0, KEY_READ, &key_handle ) )
-    {
-      if (root)
-        return NULL; /* no need for a RegClose, so return direct */
-      /* It seems to be common practise to fall back to HKLM. */
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-        return NULL; /* still no need for a RegClose, so return direct */
-    }
-
-  nbytes = 1;
-  if ( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) )
-    {
-      if (root)
-        goto leave;
-      /* Try to fallback to HKLM also vor a missing value.  */
-      RegCloseKey (key_handle);
-      if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) )
-        return NULL; /* Nope.  */
-      if (RegQueryValueEx ( key_handle, name, 0, NULL, NULL, &nbytes))
-        goto leave;
-    }
-  result = malloc ( (n1=nbytes+1) );
-  if ( !result )
-    goto leave;
-  if ( RegQueryValueEx ( key_handle, name, 0, &type, result, &n1 ) )
-    {
-      free(result); result = NULL;
-      goto leave;
-    }
-  result[nbytes] = 0; /* Make sure it is really a string.  */
-  if (type == REG_EXPAND_SZ && strchr (result, '%')) 
-    {
-      char *tmp;
-        
-      n1 += 1000;
-      tmp = malloc (n1+1);
-      if (!tmp)
-        goto leave;
-      nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-      if (nbytes && nbytes > n1)
-        {
-          free (tmp);
-          n1 = nbytes;
-          tmp = malloc (n1 + 1);
-          if (!tmp)
-            goto leave;
-          nbytes = ExpandEnvironmentStrings (result, tmp, n1);
-          if (nbytes && nbytes > n1) {
-            free (tmp); /* Oops - truncated, better don't expand at all. */
-            goto leave;
-          }
-          tmp[nbytes] = 0;
-          free (result);
-          result = tmp;
-        }
-      else if (nbytes)  /* Okay, reduce the length. */
-        {
-          tmp[nbytes] = 0;
-          free (result);
-          result = malloc (strlen (tmp)+1);
-          if (!result)
-            result = tmp;
-          else 
-            {
-              strcpy (result, tmp);
-              free (tmp);
-            }
-        }
-      else  /* Error - don't expand. */
-        {
-          free (tmp);
-        }
-    }
-
- leave:
-  RegCloseKey( key_handle );
-  return result;
-}
-
-
-/* This is a helper function to load and run a Windows function from
-   either of one DLLs. */
-static HRESULT
-w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e)
-{
-  static int initialized;
-  static HRESULT (WINAPI * func)(HWND,int,HANDLE,DWORD,LPSTR);
-
-  if (!initialized)
-    {
-      static char *dllnames[] = { "shell32.dll", "shfolder.dll", NULL };
-      void *handle;
-      int i;
-
-      initialized = 1;
-
-      for (i=0, handle = NULL; !handle && dllnames[i]; i++)
-        {
-          handle = dlopen (dllnames[i], RTLD_LAZY);
-          if (handle)
-            {
-              func = dlsym (handle, "SHGetFolderPathA");
-              if (!func)
-                {
-                  dlclose (handle);
-                  handle = NULL;
-                }
-            }
-        }
-    }
-
-  if (func)
-    return func (a,b,c,d,e);
-  else
-    return -1;
-}
-
-
-static char *
-find_program_in_registry (const char *name)
-{
-  char *program = NULL;
-    
-  program = read_w32_registry_string (NULL, "Software\\GNU\\GnuPG", name);
-  if (program)
-    {
-      int i;
-
-      DEBUG2 ("found %s in registry: `%s'", name, program);
-      for (i = 0; program[i]; i++)
-       {
-         if (program[i] == '/')
-           program[i] = '\\';
-       }
-    }
-  return program;
-}
-
-
-static char *
-find_program_at_standard_place (const char *name)
-{
-  char path[MAX_PATH];
-  char *result = NULL;
-      
-  if (w32_shgetfolderpath (NULL, CSIDL_PROGRAM_FILES, NULL, 0, path) >= 0) 
-    {
-      result = malloc (strlen (path) + 1 + strlen (name) + 1);
-      if (result)
-        {
-          strcpy (stpcpy (stpcpy (result, path), "\\"), name);
-          if (access (result, F_OK))
-            {
-              free (result);
-              result = NULL;
-            }
-        }
-    }
-  return result;
-}
-
-const char *
-_gpgme_get_gpg_path (void)
-{
-  static char *gpg_program;
-
-  LOCK (get_path_lock);
-  if (!gpg_program)
-    gpg_program = find_program_in_registry ("gpgProgram");
-  if (!gpg_program)
-    gpg_program = find_program_at_standard_place ("GNU\\GnuPG\\gpg.exe");
-#ifdef GPG_PATH
-  if (!gpg_program)
-    gpg_program = GPG_PATH;
-#endif
-  UNLOCK (get_path_lock);
-  return gpg_program;
-}
-
-const char *
-_gpgme_get_gpgsm_path (void)
-{
-  static char *gpgsm_program;
-
-  LOCK (get_path_lock);
-  if (!gpgsm_program)
-    gpgsm_program = find_program_in_registry ("gpgsmProgram");
-  if (!gpgsm_program)
-    gpgsm_program = find_program_at_standard_place ("GNU\\GnuPG\\gpgsm.exe");
-#ifdef GPGSM_PATH
-  if (!gpgsm_program)
-    gpgsm_program = GPGSM_PATH;
-#endif
-  UNLOCK (get_path_lock);
-  return gpgsm_program;
-}
-
-
-/* Return an integer value from gpgme specific configuration
-   entries. VALUE receives that value; function returns true if a value
-   has been configured and false if not. */
-int
-_gpgme_get_conf_int (const char *key, int *value)
-{
-  char *tmp = read_w32_registry_string (NULL, "Software\\GNU\\gpgme", key);
-  if (!tmp)
-    return 0;
-  *value = atoi (tmp);
-  free (tmp);
-  return 1;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/wait-global.c b/tags/gpgme-1-1-1/gpgme/wait-global.c
deleted file mode 100644 (file)
index a6da116..0000000
+++ /dev/null
@@ -1,371 +0,0 @@
-/* wait-global.c 
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "sema.h"
-#include "util.h"
-#include "context.h"
-#include "wait.h"
-#include "priv-io.h"
-
-/* The global event loop is used for all asynchronous operations
-   (except key listing) for which no user I/O callbacks are specified.
-
-   A context sets up its initial I/O callbacks and then sends the
-   GPGME_EVENT_START event.  After that, it is added to the global
-   list of active contexts.
-
-   The gpgme_wait function contains a select() loop over all file
-   descriptors in all active contexts.  If an error occurs, it closes
-   all fds in that context and moves the context to the global done
-   list.  Likewise, if a context has removed all I/O callbacks, it is
-   moved to the global done list.
-
-   All contexts in the global done list are eligible for being
-   returned by gpgme_wait if requested by the caller.  */
-
-/* The ctx_list_lock protects the list of active and done contexts.
-   Insertion into any of these lists is only allowed when the lock is
-   held.  This allows a muli-threaded program to loop over gpgme_wait
-   and in parallel start asynchronous gpgme operations.
-
-   However, the fd tables in the contexts are not protected by this
-   lock.  They are only allowed to change either before the context is
-   added to the active list (ie, before the start event is signalled)
-   or in a callback handler.  */
-DEFINE_STATIC_LOCK (ctx_list_lock);
-
-/* A ctx_list_item is an item in the global list of active or done
-   contexts.  */
-struct ctx_list_item
-{
-  /* Every ctx_list_item is an element in a doubly linked list.  The
-     list pointers are protected by the ctx_list_lock.  */
-  struct ctx_list_item *next;
-  struct ctx_list_item *prev;
-
-  gpgme_ctx_t ctx;
-  /* The status is set when the ctx is moved to the done list.  */
-  gpgme_error_t status;
-};
-
-/* The active list contains all contexts that are in the global event
-   loop, have active I/O callbacks, and have already seen the start
-   event.  */
-static struct ctx_list_item *ctx_active_list;
-
-/* The done list contains all contexts that have previously been
-   active but now are not active any longer, either because they
-   finished successfully or an I/O callback returned an error.  The
-   status field in the list item contains the error value (or 0 if
-   successful).  */
-static struct ctx_list_item *ctx_done_list;
-
-\f
-/* Enter the context CTX into the active list.  */
-static gpgme_error_t
-ctx_active (gpgme_ctx_t ctx)
-{
-  struct ctx_list_item *li = malloc (sizeof (struct ctx_list_item));
-  if (!li)
-    return gpg_error_from_errno (errno);
-  li->ctx = ctx;
-
-  LOCK (ctx_list_lock);
-  /* Add LI to active list.  */
-  li->next = ctx_active_list;
-  li->prev = NULL;
-  if (ctx_active_list)
-    ctx_active_list->prev = li;
-  ctx_active_list = li;
-  UNLOCK (ctx_list_lock);
-  return 0;
-}
-
-
-/* Enter the context CTX into the done list with status STATUS.  */
-static void
-ctx_done (gpgme_ctx_t ctx, gpgme_error_t status)
-{
-  struct ctx_list_item *li;
-
-  LOCK (ctx_list_lock);
-  li = ctx_active_list;
-  while (li && li->ctx != ctx)
-    li = li->next;
-  assert (li);
-
-  /* Remove LI from active list.  */
-  if (li->next)
-    li->next->prev = li->prev;
-  if (li->prev)
-    li->prev->next = li->next;
-  else
-    ctx_active_list = li->next;
-
-  li->status = status;
-
-  /* Add LI to done list.  */
-  li->next = ctx_done_list;
-  li->prev = NULL;
-  if (ctx_done_list)
-    ctx_done_list->prev = li;
-  ctx_done_list = li;
-  UNLOCK (ctx_list_lock);
-}
-
-
-/* Find finished context CTX (or any context if CTX is NULL) and
-   return its status in STATUS after removing it from the done list.
-   If a matching context could be found, return it.  Return NULL if no
-   context could be found.  */
-static gpgme_ctx_t
-ctx_wait (gpgme_ctx_t ctx, gpgme_error_t *status)
-{
-  struct ctx_list_item *li;
-
-  LOCK (ctx_list_lock);
-  li = ctx_done_list;
-  if (ctx)
-    {
-      /* A specific context is requested.  */
-      while (li && li->ctx != ctx)
-       li = li->next;
-    }
-  if (li)
-    {
-      ctx = li->ctx;
-      if (status)
-       *status = li->status;
-
-      /* Remove LI from done list.  */
-      if (li->next)
-       li->next->prev = li->prev;
-      if (li->prev)
-       li->prev->next = li->next;
-      else
-       ctx_done_list = li->next;
-      free (li);
-    }
-  else
-    ctx = NULL;
-  UNLOCK (ctx_list_lock);
-  return ctx;
-}
-
-\f
-/* Internal I/O callback functions.  */
-
-/* The add_io_cb and remove_io_cb handlers are shared with the private
-   event loops.  */
-
-void
-_gpgme_wait_global_event_cb (void *data, gpgme_event_io_t type,
-                            void *type_data)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) data;
-
-  assert (ctx);
-
-  switch (type)
-    {
-    case GPGME_EVENT_START:
-      {
-       gpgme_error_t err = ctx_active (ctx);
-
-       if (err)
-         {
-           /* An error occured.  Close all fds in this context, and
-              send the error in a done event.  */
-           unsigned int idx;
-           
-           for (idx = 0; idx <= ctx->fdt.size; idx++)
-             if (ctx->fdt.fds[idx].fd != -1)
-               _gpgme_io_close (ctx->fdt.fds[idx].fd);
-           _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-         }
-      }
-      break;
-
-    case GPGME_EVENT_DONE:
-      {
-       gpgme_error_t *errp = (gpgme_error_t *) type_data;
-       assert (errp);
-       ctx_done (ctx, *errp);
-      }
-      break;
-
-    case GPGME_EVENT_NEXT_KEY:
-      assert (!"Unexpected event GPGME_EVENT_NEXT_KEY");
-      break;
-
-    case GPGME_EVENT_NEXT_TRUSTITEM:
-      assert (!"Unexpected event GPGME_EVENT_NEXT_TRUSTITEM");
-      break;
-
-    default:
-      assert (!"Unexpected event");
-      break;
-    }
-}
-
-
-\f
-/* Perform asynchronous operations in the global event loop (ie, any
-   asynchronous operation except key listing and trustitem listing
-   operations).  If CTX is not a null pointer, the function will
-   return if the asynchronous operation in the context CTX finished.
-   Otherwise the function will return if any asynchronous operation
-   finished.  If HANG is zero, the function will not block for a long
-   time.  Otherwise the function does not return until an operation
-   matching CTX finished.
-
-   If a matching context finished, it is returned, and *STATUS is set
-   to the error value of the operation in that context.  Otherwise, if
-   the timeout expires, NULL is returned and *STATUS is 0.  If an
-   error occurs, NULL is returned and *STATUS is set to the error
-   value.  */
-gpgme_ctx_t
-gpgme_wait (gpgme_ctx_t ctx, gpgme_error_t *status, int hang)
-{
-  do
-    {
-      unsigned int i = 0;
-      struct ctx_list_item *li;
-      struct fd_table fdt;
-      int nr;
-
-      /* Collect the active file descriptors.  */
-      LOCK (ctx_list_lock);
-      for (li = ctx_active_list; li; li = li->next)
-       i += li->ctx->fdt.size;
-      fdt.fds = malloc (i * sizeof (struct io_select_fd_s));
-      if (!fdt.fds)
-       {
-         int saved_errno = errno;
-         UNLOCK (ctx_list_lock);
-         if (status)
-           *status = gpg_error_from_errno (saved_errno);
-         return NULL;
-       }
-      fdt.size = i;
-      i = 0;
-      for (li = ctx_active_list; li; li = li->next)
-       {
-         memcpy (&fdt.fds[i], li->ctx->fdt.fds,
-                 li->ctx->fdt.size * sizeof (struct io_select_fd_s));
-         i += li->ctx->fdt.size;
-       }
-      UNLOCK (ctx_list_lock);
-
-      nr = _gpgme_io_select (fdt.fds, fdt.size, 0);
-      if (nr < 0)
-       {
-         int saved_errno = errno;
-         free (fdt.fds);
-         if (status)
-           *status = gpg_error_from_errno (saved_errno);
-         return NULL;
-       }
-
-      for (i = 0; i < fdt.size && nr; i++)
-       {
-         if (fdt.fds[i].fd != -1 && fdt.fds[i].signaled)
-           {
-             gpgme_ctx_t ictx;
-             gpgme_error_t err;
-             struct wait_item_s *item;
-             
-             assert (nr);
-             nr--;
-             
-             item = (struct wait_item_s *) fdt.fds[i].opaque;
-             assert (item);
-             ictx = item->ctx;
-             assert (ictx);
-
-             err = _gpgme_run_io_cb (&fdt.fds[i], 0);
-             if (err)
-               {
-                 /* An error occured.  Close all fds in this context,
-                    and signal it.  */
-                 unsigned int idx;
-           
-                 for (idx = 0; idx < ictx->fdt.size; idx++)
-                   if (ictx->fdt.fds[idx].fd != -1)
-                     _gpgme_io_close (ictx->fdt.fds[idx].fd);
-                 _gpgme_engine_io_event (ictx->engine, GPGME_EVENT_DONE,
-                                         &err);
-
-                 /* Break out of the loop, and retry the select()
-                    from scratch, because now all fds should be
-                    gone.  */
-                 break;
-               }
-           }
-       }
-      free (fdt.fds);
-
-      /* Now some contexts might have finished successfully.  */
-      LOCK (ctx_list_lock);
-      for (li = ctx_active_list; li; li = li->next)
-       {
-         gpgme_ctx_t actx = li->ctx;
-
-         for (i = 0; i < actx->fdt.size; i++)
-           if (actx->fdt.fds[i].fd != -1)
-             break;
-         if (i == actx->fdt.size)
-           {
-             gpgme_error_t err = 0;
-             _gpgme_engine_io_event (actx->engine, GPGME_EVENT_DONE, &err);
-           }
-       }
-      UNLOCK (ctx_list_lock);
-
-      {
-       gpgme_ctx_t dctx = ctx_wait (ctx, status);
-
-       if (dctx)
-         {
-           ctx = dctx;
-           hang = 0;
-         }
-       else if (!hang)
-         {
-           ctx = NULL;
-           if (status)
-             *status = 0;
-         }
-      }
-    }
-  while (hang);
-
-  return ctx;
-}
diff --git a/tags/gpgme-1-1-1/gpgme/wait-private.c b/tags/gpgme-1-1-1/gpgme/wait-private.c
deleted file mode 100644 (file)
index 73f11b7..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/* wait-private.c 
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <assert.h>
-#include <errno.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "wait.h"
-#include "ops.h"
-#include "priv-io.h"
-#include "util.h"
-
-\f
-/* The private event loops are used for all blocking operations, and
-   for the key and trust item listing operations.  They are completely
-   separated from each other.  */
-
-\f
-/* Internal I/O callback functions.  */
-
-/* The add_io_cb and remove_io_cb handlers are shared with the global
-   event loops.  */
-
-void
-_gpgme_wait_private_event_cb (void *data, gpgme_event_io_t type,
-                             void *type_data)
-{
-  switch (type)
-    {
-    case GPGME_EVENT_START:
-      /* Nothing to do here, as the wait routine is called after the
-        initialization is finished.  */
-      break;
-
-    case GPGME_EVENT_DONE:
-      break;
-
-    case GPGME_EVENT_NEXT_KEY:
-      _gpgme_op_keylist_event_cb (data, type, type_data);
-      break;
-
-    case GPGME_EVENT_NEXT_TRUSTITEM:
-      _gpgme_op_trustlist_event_cb (data, type, type_data);
-      break;
-    }
-}
-
-\f
-/* If COND is a null pointer, wait until the blocking operation in CTX
-   finished and return its error value.  Otherwise, wait until COND is
-   satisfied or the operation finished.  */
-gpgme_error_t
-_gpgme_wait_on_condition (gpgme_ctx_t ctx, volatile int *cond)
-{
-  gpgme_error_t err = 0;
-  int hang = 1;
-
-  do
-    {
-      int nr = _gpgme_io_select (ctx->fdt.fds, ctx->fdt.size, 0);
-      unsigned int i;
-
-      if (nr < 0)
-       {
-         /* An error occured.  Close all fds in this context, and
-            signal it.  */
-         unsigned int idx;
-
-         err = gpg_error_from_errno (errno);
-         for (idx = 0; idx < ctx->fdt.size; idx++)
-           if (ctx->fdt.fds[idx].fd != -1)
-             _gpgme_io_close (ctx->fdt.fds[idx].fd);
-         _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-
-         return err;
-       }
-      
-      for (i = 0; i < ctx->fdt.size && nr; i++)
-       {
-         if (ctx->fdt.fds[i].fd != -1 && ctx->fdt.fds[i].signaled)
-           {
-             ctx->fdt.fds[i].signaled = 0;
-             assert (nr);
-             nr--;
-
-             err = _gpgme_run_io_cb (&ctx->fdt.fds[i], 0);
-             if (err)
-               {
-                 /* An error occured.  Close all fds in this context,
-                    and signal it.  */
-                 unsigned int idx;
-                 
-                 for (idx = 0; idx < ctx->fdt.size; idx++)
-                   if (ctx->fdt.fds[idx].fd != -1)
-                     _gpgme_io_close (ctx->fdt.fds[idx].fd);
-                 _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-                 return err;
-               }
-           }
-       }
-
-      for (i = 0; i < ctx->fdt.size; i++)
-       if (ctx->fdt.fds[i].fd != -1)
-         break;
-      if (i == ctx->fdt.size)
-       {
-         _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-         hang = 0;
-       }
-      if (cond && *cond)
-       hang = 0;
-    }
-  while (hang);
-
-  return 0;
-}
-
-
-/* Wait until the blocking operation in context CTX has finished and
-   return the error value.  */
-gpgme_error_t
-_gpgme_wait_one (gpgme_ctx_t ctx)
-{
-  return _gpgme_wait_on_condition (ctx, NULL);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/wait-user.c b/tags/gpgme-1-1-1/gpgme/wait-user.c
deleted file mode 100644 (file)
index 605401e..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/* wait-user.c 
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <assert.h>
-
-#include "gpgme.h"
-#include "context.h"
-#include "priv-io.h"
-#include "wait.h"
-
-\f
-/* The user event loops are used for all asynchronous operations for
-   which a user callback is defined.  */
-
-\f
-/* Internal I/O Callbacks.  */
-
-gpgme_error_t
-_gpgme_user_io_cb_handler (void *data, int fd)
-{
-  gpgme_error_t err;
-  struct tag *tag = (struct tag *) data;
-  gpgme_ctx_t ctx;
-
-  assert (data);
-  ctx = tag->ctx;
-  assert (ctx);
-
-  err = _gpgme_run_io_cb (&ctx->fdt.fds[tag->idx], 0);
-  if (err)
-    {
-      unsigned int idx;
-
-      for (idx = 0; idx < ctx->fdt.size; idx++)
-       if (ctx->fdt.fds[idx].fd != -1)
-         _gpgme_io_close (ctx->fdt.fds[idx].fd);
-      _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-    }
-  else
-    {
-      unsigned int i;
-
-      for (i = 0; i < ctx->fdt.size; i++)
-       if (ctx->fdt.fds[i].fd != -1)
-         break;
-      if (i == ctx->fdt.size)
-       _gpgme_engine_io_event (ctx->engine, GPGME_EVENT_DONE, &err);
-    }
-  return 0;
-}
-
-
-/* Register the file descriptor FD with the handler FNC (which gets
-   FNC_DATA as its first argument) for the direction DIR.  DATA should
-   be the context for which the fd is added.  R_TAG will hold the tag
-   that can be used to remove the fd.  */
-gpgme_error_t
-_gpgme_wait_user_add_io_cb (void *data, int fd, int dir, gpgme_io_cb_t fnc,
-                           void *fnc_data, void **r_tag)
-{
-  gpgme_ctx_t ctx = (gpgme_ctx_t) data;
-  struct tag *tag;
-  gpgme_error_t err;
-
-  assert (ctx);
-  err = _gpgme_add_io_cb (data, fd, dir, fnc, fnc_data, r_tag);
-  if (err)
-    return err;
-  tag = *r_tag;
-  assert (tag);
-  err = (*ctx->io_cbs.add) (ctx->io_cbs.add_priv, fd, dir,
-                           _gpgme_user_io_cb_handler, *r_tag,
-                           &tag->user_tag);
-  if (err)
-    _gpgme_remove_io_cb (*r_tag);
-  return err;
-}
-
-
-void
-_gpgme_wait_user_remove_io_cb (void *data)
-{
-  struct tag *tag = (struct tag *) data;
-  gpgme_ctx_t ctx;
-
-  assert (tag);
-  ctx = tag->ctx;
-
-  (*ctx->io_cbs.remove) (tag->user_tag);
-  _gpgme_remove_io_cb (data);
-}
-
-
-void
-_gpgme_wait_user_event_cb (void *data, gpgme_event_io_t type, void *type_data)
-{
-  gpgme_ctx_t ctx = data;
-
-  if (ctx->io_cbs.event)
-    (*ctx->io_cbs.event) (ctx->io_cbs.event_priv, type, type_data);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/wait.c b/tags/gpgme-1-1-1/gpgme/wait.c
deleted file mode 100644 (file)
index 16a9f23..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/* wait.c 
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/types.h>
-
-#include "util.h"
-#include "context.h"
-#include "ops.h"
-#include "wait.h"
-#include "sema.h"
-#include "priv-io.h"
-#include "engine.h"
-#include "debug.h"
-
-\f
-void
-_gpgme_fd_table_init (fd_table_t fdt)
-{
-  fdt->fds = NULL;
-  fdt->size = 0;
-}
-
-void
-_gpgme_fd_table_deinit (fd_table_t fdt)
-{
-  if (fdt->fds)
-    free (fdt->fds);
-}
-
-
-/* XXX We should keep a marker and roll over for speed.  */
-static gpgme_error_t
-fd_table_put (fd_table_t fdt, int fd, int dir, void *opaque, int *idx)
-{
-  unsigned int i, j;
-  struct io_select_fd_s *new_fds;
-
-  for (i = 0; i < fdt->size; i++)
-    {
-      if (fdt->fds[i].fd == -1)
-       break;
-    }
-  if (i == fdt->size)
-    {
-#define FDT_ALLOCSIZE 10
-      new_fds = realloc (fdt->fds, (fdt->size + FDT_ALLOCSIZE)
-                        * sizeof (*new_fds));
-      if (!new_fds)
-       return gpg_error_from_errno (errno);
-      
-      fdt->fds = new_fds;
-      fdt->size += FDT_ALLOCSIZE;
-      for (j = 0; j < FDT_ALLOCSIZE; j++)
-       fdt->fds[i + j].fd = -1;
-    }
-
-  fdt->fds[i].fd = fd;
-  fdt->fds[i].for_read = (dir == 1);
-  fdt->fds[i].for_write = (dir == 0);
-  fdt->fds[i].frozen = 0;
-  fdt->fds[i].signaled = 0;
-  fdt->fds[i].opaque = opaque;
-  *idx = i;
-  return 0;
-}
-
-\f
-/* Register the file descriptor FD with the handler FNC (which gets
-   FNC_DATA as its first argument) for the direction DIR.  DATA should
-   be the context for which the fd is added.  R_TAG will hold the tag
-   that can be used to remove the fd.  */
-gpgme_error_t
-_gpgme_add_io_cb (void *data, int fd, int dir, gpgme_io_cb_t fnc,
-                 void *fnc_data, void **r_tag)
-{
-  gpgme_error_t err;
-  gpgme_ctx_t ctx = (gpgme_ctx_t) data;
-  fd_table_t fdt;
-  struct wait_item_s *item;
-  struct tag *tag;
-
-  assert (fnc);
-  assert (ctx);
-
-  fdt = &ctx->fdt;
-  assert (fdt);
-
-  tag = malloc (sizeof *tag);
-  if (!tag)
-    return gpg_error_from_errno (errno);
-  tag->ctx = ctx;
-
-  /* Allocate a structure to hold information about the handler.  */
-  item = calloc (1, sizeof *item);
-  if (!item)
-    {
-      int saved_errno = errno;
-      free (tag);
-      return gpg_error_from_errno (saved_errno);
-    }
-  item->ctx = ctx;
-  item->dir = dir;
-  item->handler = fnc;
-  item->handler_value = fnc_data;
-
-  err = fd_table_put (fdt, fd, dir, item, &tag->idx);
-  if (err)
-    {
-      free (tag);
-      free (item);
-      return err;
-    }
-
-  *r_tag = tag;
-  return 0;
-}
-
-
-void
-_gpgme_remove_io_cb (void *data)
-{
-  struct tag *tag = data;
-  gpgme_ctx_t ctx;
-  fd_table_t fdt;
-  int idx;
-
-  assert (tag);
-  ctx = tag->ctx;
-  assert (ctx);
-  fdt = &ctx->fdt;
-  assert (fdt);
-  idx = tag->idx;
-
-  DEBUG2 ("setting fd %d (item=%p) done", fdt->fds[idx].fd,
-         fdt->fds[idx].opaque);
-  free (fdt->fds[idx].opaque);
-  free (tag);
-
-  /* Free the table entry.  */
-  fdt->fds[idx].fd = -1;
-  fdt->fds[idx].for_read = 0;
-  fdt->fds[idx].for_write = 0;
-  fdt->fds[idx].opaque = NULL;
-}
-
-\f
-/* This is slightly embarrassing.  The problem is that running an I/O
-   callback _may_ influence the status of other file descriptors.  Our
-   own event loops could compensate for that, but the external event
-   loops cannot.  FIXME: We may still want to optimize this a bit when
-   we are called from our own event loops.  So if CHECKED is 1, the
-   check is skipped.  */
-gpgme_error_t
-_gpgme_run_io_cb (struct io_select_fd_s *an_fds, int checked)
-{
-  struct wait_item_s *item;
-  item = (struct wait_item_s *) an_fds->opaque;
-  assert (item);
-
-  if (!checked)
-    {
-      int nr;
-      struct io_select_fd_s fds;
-
-      fds = *an_fds;
-      fds.signaled = 0;
-      /* Just give it a quick poll.  */
-      nr = _gpgme_io_select (&fds, 1, 1);
-      assert (nr <= 1);
-      if (nr < 0)
-       return errno;
-      else if (nr == 0)
-       /* The status changed in the meantime, there is nothing left
-          to do.  */
-       return 0;
-    }
-
-  return item->handler (item->handler_value, an_fds->fd);
-}
diff --git a/tags/gpgme-1-1-1/gpgme/wait.h b/tags/gpgme-1-1-1/gpgme/wait.h
deleted file mode 100644 (file)
index eafbb6f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* wait.h - Definitions for the wait queue interface.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifndef WAIT_H
-#define WAIT_H
-
-#include "gpgme.h"
-#include "sema.h"
-
-struct fd_table
-{
-  struct io_select_fd_s *fds;
-  size_t size;
-};
-typedef struct fd_table *fd_table_t;
-
-/* Wait items are hooked into the io_select_fd_s to connect an fd with
-   a callback handler.  */
-struct wait_item_s
-{
-  gpgme_ctx_t ctx;
-  gpgme_io_cb_t handler;
-  void *handler_value;
-  int dir;
-};
-
-/* A registered fd handler is removed later using the tag that
-   identifies it.  */
-struct tag
-{
-  /* The context for which the fd was registered.  */
-  gpgme_ctx_t ctx;
-
-  /* The index into the fd table for this context.  */
-  int idx;
-
-  /* This is used by the wrappers for the user event loop.  */
-  void *user_tag;
-};
-
-
-void _gpgme_fd_table_init (fd_table_t fdt);
-void _gpgme_fd_table_deinit (fd_table_t fdt);
-
-gpgme_error_t _gpgme_add_io_cb (void *data, int fd, int dir,
-                            gpgme_io_cb_t fnc, void *fnc_data, void **r_tag);
-void _gpgme_remove_io_cb (void *tag);
-void _gpgme_wait_private_event_cb (void *data, gpgme_event_io_t type,
-                                  void *type_data);
-void _gpgme_wait_global_event_cb (void *data, gpgme_event_io_t type,
-                                 void *type_data);
-
-gpgme_error_t _gpgme_wait_user_add_io_cb (void *data, int fd, int dir,
-                                         gpgme_io_cb_t fnc, void *fnc_data,
-                                         void **r_tag);
-void _gpgme_wait_user_remove_io_cb (void *tag);
-void _gpgme_wait_user_event_cb (void *data, gpgme_event_io_t type,
-                               void *type_data);
-
-gpgme_error_t _gpgme_wait_one (gpgme_ctx_t ctx);
-
-gpgme_error_t _gpgme_run_io_cb (struct io_select_fd_s *an_fds, int checked);
-
-#endif /* WAIT_H */
diff --git a/tags/gpgme-1-1-1/install-sh b/tags/gpgme-1-1-1/install-sh
deleted file mode 100755 (executable)
index 6ce63b9..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-#!/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 "$0: no input file specified" >&2
-       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 "$0: $src does not exist" >&2
-               exit 1
-       fi
-
-       if [ x"$dst" = x ]
-       then
-               echo "$0: no destination specified" >&2
-               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 couple of temp file names in the proper directory.
-
-       dsttmp=$dstdir/_inst.$$_
-       rmtmp=$dstdir/_rm.$$_
-
-# Trap to clean up temp files at exit.
-
-       trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
-       trap '(exit $?); exit' 1 2 13 15
-
-# Move or copy the file name to the temp name
-
-       $doit $instcmd "$src" "$dsttmp" &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $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 remove or move aside any old file at destination location.  We try this
-# two ways since rm can't unlink itself on some systems and the destination
-# file might be busy for other reasons.  In this case, the final cleanup
-# might fail but the new file should still install successfully.
-
-{
-       if [ -f "$dstdir/$dstfile" ]
-       then
-               $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
-               $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
-               {
-                 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-                 (exit 1); exit
-               }
-       else
-               :
-       fi
-} &&
-
-# Now rename the file to the real destination.
-
-       $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-
-fi &&
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-
-{
-       (exit 0); exit
-}
diff --git a/tags/gpgme-1-1-1/ltmain.sh b/tags/gpgme-1-1-1/ltmain.sh
deleted file mode 100644 (file)
index 18281bb..0000000
+++ /dev/null
@@ -1,6425 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
-# Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-basename="s,^.*/,,g"
-
-# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-# is ksh but when the shell is invoked as "sh" and the current value of
-# the _XPG environment variable is not equal to 1 (one), the special
-# positional parameter $0, within a function call, is the name of the
-# function.
-progpath="$0"
-
-# The name of this program:
-progname=`echo "$progpath" | $SED $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.5.4
-TIMESTAMP=" (1.1220.2.90 2004/04/03 14:10:19) Debian$Rev: 203 $"
-
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell, and then maybe $echo will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# test EBCDIC or ASCII
-case `echo A|tr A '\301'` in
- A) # EBCDIC based system
-  SP2NL="tr '\100' '\n'"
-  NL2SP="tr '\r\n' '\100\100'"
-  ;;
- *) # Assume ASCII based system
-  SP2NL="tr '\040' '\012'"
-  NL2SP="tr '\015\012' '\040\040'"
-  ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-if test "${LC_ALL+set}" = set; then
-  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-fi
-if test "${LANG+set}" = set; then
-  save_LANG="$LANG"; LANG=C; export LANG
-fi
-
-# Make sure IFS has a sensible default
-: ${IFS="      
-"}
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  $echo "$modename: not configured to build any kind of library" 1>&2
-  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit $EXIT_FAILURE
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# func_win32_libid arg
-# return the library type of file 'arg'
-#
-# Need a lot of goo to handle *both* DLLs and import libs
-# Has to be a shell function in order to 'eat' the argument
-# that is supplied when $file_magic_command is called.
-func_win32_libid () {
-  win32_libid_type="unknown"
-  win32_fileres=`file -L $1 2>/dev/null`
-  case $win32_fileres in
-  *ar\ archive\ import\ library*) # definitely import
-    win32_libid_type="x86 archive import"
-    ;;
-  *ar\ archive*) # could be an import, or static
-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
-      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 | \
-       sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
-      if test "X$win32_nmres" = "Ximport" ; then
-        win32_libid_type="x86 archive import"
-      else
-        win32_libid_type="x86 archive static"
-      fi
-    fi
-    ;;
-  *DLL*)
-    win32_libid_type="x86 DLL"
-    ;;
-  *executable*) # but shell scripts are "executable" too...
-    case $win32_fileres in
-    *MS\ Windows\ PE\ Intel*)
-      win32_libid_type="x86 DLL"
-      ;;
-    esac
-    ;;
-  esac
-  $echo $win32_libid_type
-}
-
-
-# func_infer_tag arg
-# Infer tagged configuration to use if any are available and
-# if one wasn't chosen via the "--tag" command line option.
-# Only attempt this if the compiler in the base compile
-# command doesn't match the default compiler.
-# arg is usually of the form 'gcc ...'
-func_infer_tag () {
-    if test -n "$available_tags" && test -z "$tagname"; then
-      CC_quoted=
-      for arg in $CC; do
-       case $arg in
-         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       CC_quoted="$CC_quoted $arg"
-      done
-      case $@ in
-      # Blanks in the command may have been stripped by the calling shell,
-      # but not from the CC environment variable when configure was run.
-      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
-      # Blanks at the start of $base_compile will cause this to fail
-      # if we don't check for them as well.
-      *)
-       for z in $available_tags; do
-         if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
-           # Evaluate the configuration.
-           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
-           CC_quoted=
-           for arg in $CC; do
-           # Double-quote args containing other shell metacharacters.
-           case $arg in
-             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
-             arg="\"$arg\""
-             ;;
-           esac
-           CC_quoted="$CC_quoted $arg"
-         done
-           case "$@ " in
-             " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
-             # The compiler in the base compile command matches
-             # the one in the tagged configuration.
-             # Assume this is the tagged configuration we want.
-             tagname=$z
-             break
-             ;;
-           esac
-         fi
-       done
-       # If $tagname still isn't set, then no tagged configuration
-       # was found and let the user know that the "--tag" command
-       # line option must be used.
-       if test -z "$tagname"; then
-         $echo "$modename: unable to infer tagged configuration"
-         $echo "$modename: specify a tag with \`--tag'" 1>&2
-         exit $EXIT_FAILURE
-#        else
-#          $echo "$modename: using $tagname tagged configuration"
-       fi
-       ;;
-      esac
-    fi
-}
-# End of Shell function definitions
-#####################################
-
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
-  arg="$1"
-  shift
-
-  case $arg in
-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    case $prev in
-    execute_dlfiles)
-      execute_dlfiles="$execute_dlfiles $arg"
-      ;;
-    tag)
-      tagname="$arg"
-      preserve_args="${preserve_args}=$arg"
-
-      # Check whether tagname contains only valid characters
-      case $tagname in
-      *[!-_A-Za-z0-9,/]*)
-       $echo "$progname: invalid tag name: $tagname" 1>&2
-       exit $EXIT_FAILURE
-       ;;
-      esac
-
-      case $tagname in
-      CC)
-       # Don't test for the "default" C tag, as we know, it's there, but
-       # not specially marked.
-       ;;
-      *)
-       if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
-         taglist="$taglist $tagname"
-         # Evaluate the configuration.
-         eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
-       else
-         $echo "$progname: ignoring unknown tag $tagname" 1>&2
-       fi
-       ;;
-      esac
-      ;;
-    *)
-      eval "$prev=\$arg"
-      ;;
-    esac
-
-    prev=
-    prevopt=
-    continue
-  fi
-
-  # Have we seen a non-optional argument yet?
-  case $arg in
-  --help)
-    show_help=yes
-    ;;
-
-  --version)
-    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    $echo
-    $echo "Copyright (C) 2003  Free Software Foundation, Inc."
-    $echo "This is free software; see the source for copying conditions.  There is NO"
-    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-    exit $EXIT_SUCCESS
-    ;;
-
-  --config)
-    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
-    # Now print the configurations for the tags.
-    for tagname in $taglist; do
-      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
-    done
-    exit $EXIT_SUCCESS
-    ;;
-
-  --debug)
-    $echo "$progname: enabling shell trace mode"
-    set -x
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --dry-run | -n)
-    run=:
-    ;;
-
-  --features)
-    $echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      $echo "enable shared libraries"
-    else
-      $echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      $echo "enable static libraries"
-    else
-      $echo "disable static libraries"
-    fi
-    exit $EXIT_SUCCESS
-    ;;
-
-  --finish) mode="finish" ;;
-
-  --mode) prevopt="--mode" prev=mode ;;
-  --mode=*) mode="$optarg" ;;
-
-  --preserve-dup-deps) duplicate_deps="yes" ;;
-
-  --quiet | --silent)
-    show=:
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --tag) prevopt="--tag" prev=tag ;;
-  --tag=*)
-    set tag "$optarg" ${1+"$@"}
-    shift
-    prev=tag
-    preserve_args="$preserve_args --tag"
-    ;;
-
-  -dlopen)
-    prevopt="-dlopen"
-    prev=execute_dlfiles
-    ;;
-
-  -*)
-    $echo "$modename: unrecognized option \`$arg'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-
-  *)
-    nonopt="$arg"
-    break
-    ;;
-  esac
-done
-
-if test -n "$prevopt"; then
-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-fi
-
-# If this variable is set in any of the actions, the command in it
-# will be execed at the end.  This prevents here-documents from being
-# left over by shells.
-exec_cmd=
-
-if test -z "$show_help"; then
-
-  # Infer the operation mode.
-  if test -z "$mode"; then
-    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
-    $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
-    case $nonopt in
-    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
-      mode=link
-      for arg
-      do
-       case $arg in
-       -c)
-          mode=compile
-          break
-          ;;
-       esac
-      done
-      ;;
-    *db | *dbx | *strace | *truss)
-      mode=execute
-      ;;
-    *install*|cp|mv)
-      mode=install
-      ;;
-    *rm)
-      mode=uninstall
-      ;;
-    *)
-      # If we have no mode, but dlfiles were specified, then do execute mode.
-      test -n "$execute_dlfiles" && mode=execute
-
-      # Just use the default operation mode.
-      if test -z "$mode"; then
-       if test -n "$nonopt"; then
-         $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-       else
-         $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-       fi
-      fi
-      ;;
-    esac
-  fi
-
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$modename --help --mode=$mode' for more information."
-
-  # These modes are in order of execution frequency so that they run quickly.
-  case $mode in
-  # libtool compile mode
-  compile)
-    modename="$modename: compile"
-    # Get the compilation command and the source file.
-    base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
-    suppress_opt=yes
-    suppress_output=
-    arg_mode=normal
-    libobj=
-    later=
-
-    for arg
-    do
-      case "$arg_mode" in
-      arg  )
-       # do not "continue".  Instead, add this to base_compile
-       lastarg="$arg"
-       arg_mode=normal
-       ;;
-
-      target )
-       libobj="$arg"
-       arg_mode=normal
-       continue
-       ;;
-
-      normal )
-       # Accept any command-line options.
-       case $arg in
-       -o)
-         if test -n "$libobj" ; then
-           $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         arg_mode=target
-         continue
-         ;;
-
-       -static | -prefer-pic | -prefer-non-pic)
-         later="$later $arg"
-         continue
-         ;;
-
-       -no-suppress)
-         suppress_opt=no
-         continue
-         ;;
-
-       -Xcompiler)
-         arg_mode=arg  #  the next one goes into the "base_compile" arg list
-         continue      #  The current "srcfile" will either be retained or
-         ;;            #  replaced later.  I would guess that would be a bug.
-
-       -Wc,*)
-         args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
-         lastarg=
-         save_ifs="$IFS"; IFS=','
-         for arg in $args; do
-           IFS="$save_ifs"
-
-           # Double-quote args containing other shell metacharacters.
-           # Many Bourne shells cannot handle close brackets correctly
-           # in scan sets, so we specify it separately.
-           case $arg in
-             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
-             arg="\"$arg\""
-             ;;
-           esac
-           lastarg="$lastarg $arg"
-         done
-         IFS="$save_ifs"
-         lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
-         # Add the arguments to base_compile.
-         base_compile="$base_compile $lastarg"
-         continue
-         ;;
-
-       * )
-         # Accept the current argument as the source file.
-         # The previous "srcfile" becomes the current argument.
-         #
-         lastarg="$srcfile"
-         srcfile="$arg"
-         ;;
-       esac  #  case $arg
-       ;;
-      esac    #  case $arg_mode
-
-      # Aesthetically quote the previous argument.
-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
-      case $lastarg in
-      # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       lastarg="\"$lastarg\""
-       ;;
-      esac
-
-      base_compile="$base_compile $lastarg"
-    done # for arg
-
-    case $arg_mode in
-    arg)
-      $echo "$modename: you must specify an argument for -Xcompile"
-      exit $EXIT_FAILURE
-      ;;
-    target)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *)
-      # Get the name of the library object.
-      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSifmso]'
-    case $libobj in
-    *.ada) xform=ada ;;
-    *.adb) xform=adb ;;
-    *.ads) xform=ads ;;
-    *.asm) xform=asm ;;
-    *.c++) xform=c++ ;;
-    *.cc) xform=cc ;;
-    *.ii) xform=ii ;;
-    *.class) xform=class ;;
-    *.cpp) xform=cpp ;;
-    *.cxx) xform=cxx ;;
-    *.f90) xform=f90 ;;
-    *.for) xform=for ;;
-    *.java) xform=java ;;
-    esac
-
-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
-    case $libobj in
-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-    *)
-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    esac
-
-    func_infer_tag $base_compile
-
-    for arg in $later; do
-      case $arg in
-      -static)
-       build_old_libs=yes
-       continue
-       ;;
-
-      -prefer-pic)
-       pic_mode=yes
-       continue
-       ;;
-
-      -prefer-non-pic)
-       pic_mode=no
-       continue
-       ;;
-      esac
-    done
-
-    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$xdir" = "X$obj"; then
-      xdir=
-    else
-      xdir=$xdir/
-    fi
-    lobj=${xdir}$objdir/$objname
-
-    if test -z "$base_compile"; then
-      $echo "$modename: you must specify a compilation command" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $lobj $libobj ${libobj}T"
-    else
-      removelist="$lobj $libobj ${libobj}T"
-    fi
-
-    $run $rm $removelist
-    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
-    # On Cygwin there's no "real" PIC flag so we must build both object types
-    case $host_os in
-    cygwin* | mingw* | pw32* | os2*)
-      pic_mode=default
-      ;;
-    esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-      # non-PIC code in shared libraries is not supported
-      pic_mode=default
-    fi
-
-    # Calculate the filename of the output object if compiler does
-    # not support -o with -c
-    if test "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-      removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-    else
-      output_obj=
-      need_locks=no
-      lockfile=
-    fi
-
-    # Lock this critical section if it is needed
-    # We use this script file to make the link, it avoids creating a new file
-    if test "$need_locks" = yes; then
-      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
-       $show "Waiting for $lockfile to be removed"
-       sleep 2
-      done
-    elif test "$need_locks" = warn; then
-      if test -f "$lockfile"; then
-       $echo "\
-*** ERROR, $lockfile exists and contains:
-`cat $lockfile 2>/dev/null`
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-      $echo $srcfile > "$lockfile"
-    fi
-
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
-
-    $run $rm "$libobj" "${libobj}T"
-
-    # Create a libtool object file (analogous to a ".la" file),
-    # but don't create it if we're doing a dry run.
-    test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
-    # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
-      # Without this assignment, base_compile gets emptied.
-      fbsd_hideous_sh_bug=$base_compile
-
-      if test "$pic_mode" != no; then
-       command="$base_compile $srcfile $pic_flag"
-      else
-       # Don't build PIC code
-       command="$base_compile $srcfile"
-      fi
-
-      if test ! -d "${xdir}$objdir"; then
-       $show "$mkdir ${xdir}$objdir"
-       $run $mkdir ${xdir}$objdir
-       status=$?
-       if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
-         exit $status
-       fi
-      fi
-
-      if test -z "$output_obj"; then
-       # Place PIC objects in $objdir
-       command="$command -o $lobj"
-      fi
-
-      $run $rm "$lobj" "$output_obj"
-
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-       test -n "$output_obj" && $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      if test "$need_locks" = warn &&
-        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-       $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed, then go on to compile the next one
-      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-       $show "$mv $output_obj $lobj"
-       if $run $mv $output_obj $lobj; then :
-       else
-         error=$?
-         $run $rm $removelist
-         exit $error
-       fi
-      fi
-
-      # Append the name of the PIC object to the libtool object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
-      # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
-        suppress_output=' >/dev/null 2>&1'
-      fi
-    else
-      # No PIC object so indicate it doesn't exist in the libtool
-      # object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
-    fi
-
-    # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
-       # Don't build PIC code
-       command="$base_compile $srcfile"
-      else
-       command="$base_compile $srcfile $pic_flag"
-      fi
-      if test "$compiler_c_o" = yes; then
-       command="$command -o $obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
-      $run $rm "$obj" "$output_obj"
-      $show "$command"
-      if $run eval "$command"; then :
-      else
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      if test "$need_locks" = warn &&
-        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-       $echo "\
-*** ERROR, $lockfile contains:
-`cat $lockfile 2>/dev/null`
-
-but it should contain:
-$srcfile
-
-This indicates that another process is trying to use the same
-temporary object file, and libtool could not work around it because
-your compiler does not support \`-c' and \`-o' together.  If you
-repeat this compilation, it may succeed, by chance, but you had better
-avoid parallel builds (make -j) in this platform, or get a better
-compiler."
-
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      # Just move the object if needed
-      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-       $show "$mv $output_obj $obj"
-       if $run $mv $output_obj $obj; then :
-       else
-         error=$?
-         $run $rm $removelist
-         exit $error
-       fi
-      fi
-
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
-    else
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
-    fi
-
-    $run $mv "${libobj}T" "${libobj}"
-
-    # Unlock the critical section if it was locked
-    if test "$need_locks" != no; then
-      $run $rm "$lockfile"
-    fi
-
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool link mode
-  link | relink)
-    modename="$modename: link"
-    case $host in
-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-      # It is impossible to link a dll without this setting, and
-      # we shouldn't force the makefile maintainer to figure out
-      # which system we are compiling for in order to pass an extra
-      # flag for every libtool invocation.
-      # allow_undefined=no
-
-      # FIXME: Unfortunately, there are problems with the above when trying
-      # to make a dll which has undefined symbols, in which case not
-      # even a static library is built.  For now, we need to specify
-      # -no-undefined on the libtool link line when we can be certain
-      # that all symbols are satisfied, otherwise we get a static library.
-      allow_undefined=yes
-      ;;
-    *)
-      allow_undefined=yes
-      ;;
-    esac
-    libtool_args="$nonopt"
-    base_compile="$nonopt $@"
-    compile_command="$nonopt"
-    finalize_command="$nonopt"
-
-    compile_rpath=
-    finalize_rpath=
-    compile_shlibpath=
-    finalize_shlibpath=
-    convenience=
-    old_convenience=
-    deplibs=
-    old_deplibs=
-    compiler_flags=
-    linker_flags=
-    dllsearchpath=
-    lib_search_path=`pwd`
-    inst_prefix_dir=
-
-    avoid_version=no
-    dlfiles=
-    dlprefiles=
-    dlself=no
-    export_dynamic=no
-    export_symbols=
-    export_symbols_regex=
-    generated=
-    libobjs=
-    ltlibs=
-    module=no
-    no_install=no
-    objs=
-    non_pic_objects=
-    precious_files_regex=
-    prefer_static_libs=no
-    preload=no
-    prev=
-    prevarg=
-    release=
-    rpath=
-    xrpath=
-    perm_rpath=
-    temp_rpath=
-    thread_safe=no
-    vinfo=
-    vinfo_number=no
-
-    func_infer_tag $base_compile
-
-    # We need to know -static, to get the right output filenames.
-    for arg
-    do
-      case $arg in
-      -all-static | -static)
-       if test "X$arg" = "X-all-static"; then
-         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-           $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-         fi
-         if test -n "$link_static_flag"; then
-           dlopen_self=$dlopen_self_static
-         fi
-       else
-         if test -z "$pic_flag" && test -n "$link_static_flag"; then
-           dlopen_self=$dlopen_self_static
-         fi
-       fi
-       build_libtool_libs=no
-       build_old_libs=yes
-       prefer_static_libs=yes
-       break
-       ;;
-      esac
-    done
-
-    # See if our shared archives depend on static archives.
-    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-
-    # Go through the arguments, transforming them on the way.
-    while test "$#" -gt 0; do
-      arg="$1"
-      shift
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
-       ;;
-      *) qarg=$arg ;;
-      esac
-      libtool_args="$libtool_args $qarg"
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-       case $prev in
-       output)
-         compile_command="$compile_command @OUTPUT@"
-         finalize_command="$finalize_command @OUTPUT@"
-         ;;
-       esac
-
-       case $prev in
-       dlfiles|dlprefiles)
-         if test "$preload" = no; then
-           # Add the symbol object into the linking commands.
-           compile_command="$compile_command @SYMFILE@"
-           finalize_command="$finalize_command @SYMFILE@"
-           preload=yes
-         fi
-         case $arg in
-         *.la | *.lo) ;;  # We handle these cases below.
-         force)
-           if test "$dlself" = no; then
-             dlself=needless
-             export_dynamic=yes
-           fi
-           prev=
-           continue
-           ;;
-         self)
-           if test "$prev" = dlprefiles; then
-             dlself=yes
-           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-             dlself=yes
-           else
-             dlself=needless
-             export_dynamic=yes
-           fi
-           prev=
-           continue
-           ;;
-         *)
-           if test "$prev" = dlfiles; then
-             dlfiles="$dlfiles $arg"
-           else
-             dlprefiles="$dlprefiles $arg"
-           fi
-           prev=
-           continue
-           ;;
-         esac
-         ;;
-       expsyms)
-         export_symbols="$arg"
-         if test ! -f "$arg"; then
-           $echo "$modename: symbol file \`$arg' does not exist"
-           exit $EXIT_FAILURE
-         fi
-         prev=
-         continue
-         ;;
-       expsyms_regex)
-         export_symbols_regex="$arg"
-         prev=
-         continue
-         ;;
-       inst_prefix)
-         inst_prefix_dir="$arg"
-         prev=
-         continue
-         ;;
-       precious_regex)
-         precious_files_regex="$arg"
-         prev=
-         continue
-         ;;
-       release)
-         release="-$arg"
-         prev=
-         continue
-         ;;
-       objectlist)
-         if test -f "$arg"; then
-           save_arg=$arg
-           moreargs=
-           for fil in `cat $save_arg`
-           do
-#            moreargs="$moreargs $fil"
-             arg=$fil
-             # A libtool-controlled object.
-
-             # Check to see that this really is a libtool object.
-             if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-               pic_object=
-               non_pic_object=
-
-               # Read the .lo file
-               # If there is no directory component, then add one.
-               case $arg in
-               */* | *\\*) . $arg ;;
-               *) . ./$arg ;;
-               esac
-
-               if test -z "$pic_object" || \
-                  test -z "$non_pic_object" ||
-                  test "$pic_object" = none && \
-                  test "$non_pic_object" = none; then
-                 $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-                 exit $EXIT_FAILURE
-               fi
-
-               # Extract subdirectory from the argument.
-               xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-               if test "X$xdir" = "X$arg"; then
-                 xdir=
-               else
-                 xdir="$xdir/"
-               fi
-
-               if test "$pic_object" != none; then
-                 # Prepend the subdirectory the object is found in.
-                 pic_object="$xdir$pic_object"
-
-                 if test "$prev" = dlfiles; then
-                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-                     dlfiles="$dlfiles $pic_object"
-                     prev=
-                     continue
-                   else
-                     # If libtool objects are unsupported, then we need to preload.
-                     prev=dlprefiles
-                   fi
-                 fi
-
-                 # CHECK ME:  I think I busted this.  -Ossama
-                 if test "$prev" = dlprefiles; then
-                   # Preload the old-style object.
-                   dlprefiles="$dlprefiles $pic_object"
-                   prev=
-                 fi
-
-                 # A PIC object.
-                 libobjs="$libobjs $pic_object"
-                 arg="$pic_object"
-               fi
-
-               # Non-PIC object.
-               if test "$non_pic_object" != none; then
-                 # Prepend the subdirectory the object is found in.
-                 non_pic_object="$xdir$non_pic_object"
-
-                 # A standard non-PIC object
-                 non_pic_objects="$non_pic_objects $non_pic_object"
-                 if test -z "$pic_object" || test "$pic_object" = none ; then
-                   arg="$non_pic_object"
-                 fi
-               fi
-             else
-               # Only an error if not doing a dry-run.
-               if test -z "$run"; then
-                 $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-                 exit $EXIT_FAILURE
-               else
-                 # Dry-run case.
-
-                 # Extract subdirectory from the argument.
-                 xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-                 if test "X$xdir" = "X$arg"; then
-                   xdir=
-                 else
-                   xdir="$xdir/"
-                 fi
-
-                 pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-                 non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-                 libobjs="$libobjs $pic_object"
-                 non_pic_objects="$non_pic_objects $non_pic_object"
-               fi
-             fi
-           done
-         else
-           $echo "$modename: link input file \`$save_arg' does not exist"
-           exit $EXIT_FAILURE
-         fi
-         arg=$save_arg
-         prev=
-         continue
-         ;;
-       rpath | xrpath)
-         # We need an absolute path.
-         case $arg in
-         [\\/]* | [A-Za-z]:[\\/]*) ;;
-         *)
-           $echo "$modename: only absolute run-paths are allowed" 1>&2
-           exit $EXIT_FAILURE
-           ;;
-         esac
-         if test "$prev" = rpath; then
-           case "$rpath " in
-           *" $arg "*) ;;
-           *) rpath="$rpath $arg" ;;
-           esac
-         else
-           case "$xrpath " in
-           *" $arg "*) ;;
-           *) xrpath="$xrpath $arg" ;;
-           esac
-         fi
-         prev=
-         continue
-         ;;
-       xcompiler)
-         compiler_flags="$compiler_flags $qarg"
-         prev=
-         compile_command="$compile_command $qarg"
-         finalize_command="$finalize_command $qarg"
-         continue
-         ;;
-       xlinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $wl$qarg"
-         prev=
-         compile_command="$compile_command $wl$qarg"
-         finalize_command="$finalize_command $wl$qarg"
-         continue
-         ;;
-       xcclinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $qarg"
-         prev=
-         compile_command="$compile_command $qarg"
-         finalize_command="$finalize_command $qarg"
-         continue
-         ;;
-       shrext)
-         shrext_cmds="$arg"
-         prev=
-         continue
-         ;;
-       *)
-         eval "$prev=\"\$arg\""
-         prev=
-         continue
-         ;;
-       esac
-      fi # test -n "$prev"
-
-      prevarg="$arg"
-
-      case $arg in
-      -all-static)
-       if test -n "$link_static_flag"; then
-         compile_command="$compile_command $link_static_flag"
-         finalize_command="$finalize_command $link_static_flag"
-       fi
-       continue
-       ;;
-
-      -allow-undefined)
-       # FIXME: remove this flag sometime in the future.
-       $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-       continue
-       ;;
-
-      -avoid-version)
-       avoid_version=yes
-       continue
-       ;;
-
-      -dlopen)
-       prev=dlfiles
-       continue
-       ;;
-
-      -dlpreopen)
-       prev=dlprefiles
-       continue
-       ;;
-
-      -export-dynamic)
-       export_dynamic=yes
-       continue
-       ;;
-
-      -export-symbols | -export-symbols-regex)
-       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-         $echo "$modename: more than one -exported-symbols argument is not allowed"
-         exit $EXIT_FAILURE
-       fi
-       if test "X$arg" = "X-export-symbols"; then
-         prev=expsyms
-       else
-         prev=expsyms_regex
-       fi
-       continue
-       ;;
-
-      -inst-prefix-dir)
-       prev=inst_prefix
-       continue
-       ;;
-
-      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-      # so, if we see these flags be careful not to treat them like -L
-      -L[A-Z][A-Z]*:*)
-       case $with_gcc/$host in
-       no/*-*-irix* | /*-*-irix*)
-         compile_command="$compile_command $arg"
-         finalize_command="$finalize_command $arg"
-         ;;
-       esac
-       continue
-       ;;
-
-      -L*)
-       dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-       # We need an absolute path.
-       case $dir in
-       [\\/]* | [A-Za-z]:[\\/]*) ;;
-       *)
-         absdir=`cd "$dir" && pwd`
-         if test -z "$absdir"; then
-           $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         dir="$absdir"
-         ;;
-       esac
-       case "$deplibs " in
-       *" -L$dir "*) ;;
-       *)
-         deplibs="$deplibs -L$dir"
-         lib_search_path="$lib_search_path $dir"
-         ;;
-       esac
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-         case :$dllsearchpath: in
-         *":$dir:"*) ;;
-         *) dllsearchpath="$dllsearchpath:$dir";;
-         esac
-         ;;
-       esac
-       continue
-       ;;
-
-      -l*)
-       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-         case $host in
-         *-*-cygwin* | *-*-pw32* | *-*-beos*)
-           # These systems don't actually have a C or math library (as such)
-           continue
-           ;;
-         *-*-mingw* | *-*-os2*)
-           # These systems don't actually have a C library (as such)
-           test "X$arg" = "X-lc" && continue
-           ;;
-         *-*-openbsd* | *-*-freebsd*)
-           # Do not include libc due to us having libc/libc_r.
-           test "X$arg" = "X-lc" && continue
-           ;;
-         *-*-rhapsody* | *-*-darwin1.[012])
-           # Rhapsody C and math libraries are in the System framework
-           deplibs="$deplibs -framework System"
-           continue
-         esac
-       elif test "X$arg" = "X-lc_r"; then
-        case $host in
-        *-*-openbsd* | *-*-freebsd*)
-          # Do not include libc_r directly, use -pthread flag.
-          continue
-          ;;
-        esac
-       fi
-       deplibs="$deplibs $arg"
-       continue
-       ;;
-
-     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-       deplibs="$deplibs $arg"
-       continue
-       ;;
-
-      -module)
-       module=yes
-       continue
-       ;;
-
-      # gcc -m* arguments should be passed to the linker via $compiler_flags
-      # in order to pass architecture information to the linker
-      # (e.g. 32 vs 64-bit).  This may also be accomplished via -Wl,-mfoo
-      # but this is not reliable with gcc because gcc may use -mfoo to
-      # select a different linker, different libraries, etc, while
-      # -Wl,-mfoo simply passes -mfoo to the linker.
-      -m*)
-       # Unknown arguments in both finalize_command and compile_command need
-       # to be aesthetically quoted because they are evaled later.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-        compile_command="$compile_command $arg"
-        finalize_command="$finalize_command $arg"
-        if test "$with_gcc" = "yes" ; then
-          compiler_flags="$compiler_flags $arg"
-        fi
-        continue
-        ;;
-
-      -shrext)
-       prev=shrext
-       continue
-       ;;
-
-      -no-fast-install)
-       fast_install=no
-       continue
-       ;;
-
-      -no-install)
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-         # The PATH hackery in wrapper scripts is required on Windows
-         # in order for the loader to find any dlls it needs.
-         $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
-         $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-         fast_install=no
-         ;;
-       *) no_install=yes ;;
-       esac
-       continue
-       ;;
-
-      -no-undefined)
-       allow_undefined=no
-       continue
-       ;;
-
-      -objectlist)
-       prev=objectlist
-       continue
-       ;;
-
-      -o) prev=output ;;
-
-      -precious-files-regex)
-       prev=precious_regex
-       continue
-       ;;
-
-      -release)
-       prev=release
-       continue
-       ;;
-
-      -rpath)
-       prev=rpath
-       continue
-       ;;
-
-      -R)
-       prev=xrpath
-       continue
-       ;;
-
-      -R*)
-       dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-       # We need an absolute path.
-       case $dir in
-       [\\/]* | [A-Za-z]:[\\/]*) ;;
-       *)
-         $echo "$modename: only absolute run-paths are allowed" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-       case "$xrpath " in
-       *" $dir "*) ;;
-       *) xrpath="$xrpath $dir" ;;
-       esac
-       continue
-       ;;
-
-      -static)
-       # The effects of -static are defined in a previous loop.
-       # We used to do the same as -all-static on platforms that
-       # didn't have a PIC flag, but the assumption that the effects
-       # would be equivalent was wrong.  It would break on at least
-       # Digital Unix and AIX.
-       continue
-       ;;
-
-      -thread-safe)
-       thread_safe=yes
-       continue
-       ;;
-
-      -version-info)
-       prev=vinfo
-       continue
-       ;;
-      -version-number)
-       prev=vinfo
-       vinfo_number=yes
-       continue
-       ;;
-
-      -Wc,*)
-       args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-       arg=
-       save_ifs="$IFS"; IFS=','
-       for flag in $args; do
-         IFS="$save_ifs"
-         case $flag in
-           *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \       ]*|*]*|"")
-           flag="\"$flag\""
-           ;;
-         esac
-         arg="$arg $wl$flag"
-         compiler_flags="$compiler_flags $flag"
-       done
-       IFS="$save_ifs"
-       arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-       ;;
-
-      -Wl,*)
-       args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-       arg=
-       save_ifs="$IFS"; IFS=','
-       for flag in $args; do
-         IFS="$save_ifs"
-         case $flag in
-           *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \       ]*|*]*|"")
-           flag="\"$flag\""
-           ;;
-         esac
-         arg="$arg $wl$flag"
-         compiler_flags="$compiler_flags $wl$flag"
-         linker_flags="$linker_flags $flag"
-       done
-       IFS="$save_ifs"
-       arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-       ;;
-
-      -Xcompiler)
-       prev=xcompiler
-       continue
-       ;;
-
-      -Xlinker)
-       prev=xlinker
-       continue
-       ;;
-
-      -XCClinker)
-       prev=xcclinker
-       continue
-       ;;
-
-      # Some other compiler flag.
-      -* | +*)
-       # Unknown arguments in both finalize_command and compile_command need
-       # to be aesthetically quoted because they are evaled later.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       ;;
-
-      *.$objext)
-       # A standard object.
-       objs="$objs $arg"
-       ;;
-
-      *.lo)
-       # A libtool-controlled object.
-
-       # Check to see that this really is a libtool object.
-       if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         pic_object=
-         non_pic_object=
-
-         # Read the .lo file
-         # If there is no directory component, then add one.
-         case $arg in
-         */* | *\\*) . $arg ;;
-         *) . ./$arg ;;
-         esac
-
-         if test -z "$pic_object" || \
-            test -z "$non_pic_object" ||
-            test "$pic_object" = none && \
-            test "$non_pic_object" = none; then
-           $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         # Extract subdirectory from the argument.
-         xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-         if test "X$xdir" = "X$arg"; then
-           xdir=
-         else
-           xdir="$xdir/"
-         fi
-
-         if test "$pic_object" != none; then
-           # Prepend the subdirectory the object is found in.
-           pic_object="$xdir$pic_object"
-
-           if test "$prev" = dlfiles; then
-             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-               dlfiles="$dlfiles $pic_object"
-               prev=
-               continue
-             else
-               # If libtool objects are unsupported, then we need to preload.
-               prev=dlprefiles
-             fi
-           fi
-
-           # CHECK ME:  I think I busted this.  -Ossama
-           if test "$prev" = dlprefiles; then
-             # Preload the old-style object.
-             dlprefiles="$dlprefiles $pic_object"
-             prev=
-           fi
-
-           # A PIC object.
-           libobjs="$libobjs $pic_object"
-           arg="$pic_object"
-         fi
-
-         # Non-PIC object.
-         if test "$non_pic_object" != none; then
-           # Prepend the subdirectory the object is found in.
-           non_pic_object="$xdir$non_pic_object"
-
-           # A standard non-PIC object
-           non_pic_objects="$non_pic_objects $non_pic_object"
-           if test -z "$pic_object" || test "$pic_object" = none ; then
-             arg="$non_pic_object"
-           fi
-         fi
-       else
-         # Only an error if not doing a dry-run.
-         if test -z "$run"; then
-           $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-           exit $EXIT_FAILURE
-         else
-           # Dry-run case.
-
-           # Extract subdirectory from the argument.
-           xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-           if test "X$xdir" = "X$arg"; then
-             xdir=
-           else
-             xdir="$xdir/"
-           fi
-
-           pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-           non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-           libobjs="$libobjs $pic_object"
-           non_pic_objects="$non_pic_objects $non_pic_object"
-         fi
-       fi
-       ;;
-
-      *.$libext)
-       # An archive.
-       deplibs="$deplibs $arg"
-       old_deplibs="$old_deplibs $arg"
-       continue
-       ;;
-
-      *.la)
-       # A libtool-controlled library.
-
-       if test "$prev" = dlfiles; then
-         # This library was specified with -dlopen.
-         dlfiles="$dlfiles $arg"
-         prev=
-       elif test "$prev" = dlprefiles; then
-         # The library was specified with -dlpreopen.
-         dlprefiles="$dlprefiles $arg"
-         prev=
-       else
-         deplibs="$deplibs $arg"
-       fi
-       continue
-       ;;
-
-      # Some other compiler argument.
-      *)
-       # Unknown arguments in both finalize_command and compile_command need
-       # to be aesthetically quoted because they are evaled later.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       ;;
-      esac # arg
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-      fi
-    done # argument parsing loop
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-    else
-      shlib_search_path=
-    fi
-    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
-    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$output_objdir" = "X$output"; then
-      output_objdir="$objdir"
-    else
-      output_objdir="$output_objdir/$objdir"
-    fi
-    # Create the object directory.
-    if test ! -d "$output_objdir"; then
-      $show "$mkdir $output_objdir"
-      $run $mkdir $output_objdir
-      status=$?
-      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
-       exit $status
-      fi
-    fi
-
-    # Determine the type of output
-    case $output in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *.$libext) linkmode=oldlib ;;
-    *.lo | *.$objext) linkmode=obj ;;
-    *.la) linkmode=lib ;;
-    *) linkmode=prog ;; # Anything else should be a program.
-    esac
-
-    case $host in
-    *cygwin* | *mingw* | *pw32*)
-      # don't eliminate duplications in $postdeps and $predeps
-      duplicate_compiler_generated_deps=yes
-      ;;
-    *)
-      duplicate_compiler_generated_deps=$duplicate_deps
-      ;;
-    esac
-    specialdeplibs=
-
-    libs=
-    # Find all interdependent deplibs by searching for libraries
-    # that are linked more than once (e.g. -la -lb -la)
-    for deplib in $deplibs; do
-      if test "X$duplicate_deps" = "Xyes" ; then
-       case "$libs " in
-       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-       esac
-      fi
-      libs="$libs $deplib"
-    done
-
-    if test "$linkmode" = lib; then
-      libs="$predeps $libs $compiler_lib_search_path $postdeps"
-
-      # Compute libraries that are listed more than once in $predeps
-      # $postdeps and mark them as special (i.e., whose duplicates are
-      # not to be eliminated).
-      pre_post_deps=
-      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
-       for pre_post_dep in $predeps $postdeps; do
-         case "$pre_post_deps " in
-         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-         esac
-         pre_post_deps="$pre_post_deps $pre_post_dep"
-       done
-      fi
-      pre_post_deps=
-    fi
-
-    deplibs=
-    newdependency_libs=
-    newlib_search_path=
-    need_relink=no # whether we're linking any uninstalled libtool libraries
-    notinst_deplibs= # not-installed libtool libraries
-    notinst_path= # paths that contain not-installed libtool libraries
-    case $linkmode in
-    lib)
-       passes="conv link"
-       for file in $dlfiles $dlprefiles; do
-         case $file in
-         *.la) ;;
-         *)
-           $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
-           exit $EXIT_FAILURE
-           ;;
-         esac
-       done
-       ;;
-    prog)
-       compile_deplibs=
-       finalize_deplibs=
-       alldeplibs=no
-       newdlfiles=
-       newdlprefiles=
-       passes="conv scan dlopen dlpreopen link"
-       ;;
-    *)  passes="conv"
-       ;;
-    esac
-    for pass in $passes; do
-      if test "$linkmode,$pass" = "lib,link" ||
-        test "$linkmode,$pass" = "prog,scan"; then
-       libs="$deplibs"
-       deplibs=
-      fi
-      if test "$linkmode" = prog; then
-       case $pass in
-       dlopen) libs="$dlfiles" ;;
-       dlpreopen) libs="$dlprefiles" ;;
-       link)
-         libs="$deplibs %DEPLIBS%"
-         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-         ;;
-       esac
-      fi
-      if test "$pass" = dlopen; then
-       # Collect dlpreopened libraries
-       save_deplibs="$deplibs"
-       deplibs=
-      fi
-      for deplib in $libs; do
-       lib=
-       found=no
-       case $deplib in
-       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-         if test "$linkmode,$pass" = "prog,link"; then
-           compile_deplibs="$deplib $compile_deplibs"
-           finalize_deplibs="$deplib $finalize_deplibs"
-         else
-           deplibs="$deplib $deplibs"
-         fi
-         continue
-         ;;
-       -l*)
-         if test "$linkmode" != lib && test "$linkmode" != prog; then
-           $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
-           continue
-         fi
-         if test "$pass" = conv; then
-           deplibs="$deplib $deplibs"
-           continue
-         fi
-         name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
-         for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
-           for search_ext in .la $std_shrext .so .a; do
-             # Search the libtool library
-             lib="$searchdir/lib${name}${search_ext}"
-             if test -f "$lib"; then
-               if test "$search_ext" = ".la"; then
-                 found=yes
-               else
-                 found=no
-               fi
-               break 2
-             fi
-           done
-         done
-         if test "$found" != yes; then
-           # deplib doesn't seem to be a libtool library
-           if test "$linkmode,$pass" = "prog,link"; then
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           else
-             deplibs="$deplib $deplibs"
-             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-           fi
-           continue
-         else # deplib is a libtool library
-           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-           # We need to do some special things here, and not later.
-           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-             case " $predeps $postdeps " in
-             *" $deplib "*)
-               if (${SED} -e '2q' $lib |
-                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-                 library_names=
-                 old_library=
-                 case $lib in
-                 */* | *\\*) . $lib ;;
-                 *) . ./$lib ;;
-                 esac
-                 for l in $old_library $library_names; do
-                   ll="$l"
-                 done
-                 if test "X$ll" = "X$old_library" ; then # only static version available
-                   found=no
-                   ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-                   test "X$ladir" = "X$lib" && ladir="."
-                   lib=$ladir/$old_library
-                   if test "$linkmode,$pass" = "prog,link"; then
-                     compile_deplibs="$deplib $compile_deplibs"
-                     finalize_deplibs="$deplib $finalize_deplibs"
-                   else
-                     deplibs="$deplib $deplibs"
-                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-                   fi
-                   continue
-                 fi
-               fi
-               ;;
-             *) ;;
-             esac
-           fi
-         fi
-         ;; # -l
-       -L*)
-         case $linkmode in
-         lib)
-           deplibs="$deplib $deplibs"
-           test "$pass" = conv && continue
-           newdependency_libs="$deplib $newdependency_libs"
-           newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-           ;;
-         prog)
-           if test "$pass" = conv; then
-             deplibs="$deplib $deplibs"
-             continue
-           fi
-           if test "$pass" = scan; then
-             deplibs="$deplib $deplibs"
-           else
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           fi
-           newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-           ;;
-         *)
-           $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
-           ;;
-         esac # linkmode
-         continue
-         ;; # -L
-       -R*)
-         if test "$pass" = link; then
-           dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-           # Make sure the xrpath contains only unique directories.
-           case "$xrpath " in
-           *" $dir "*) ;;
-           *) xrpath="$xrpath $dir" ;;
-           esac
-         fi
-         deplibs="$deplib $deplibs"
-         continue
-         ;;
-       *.la) lib="$deplib" ;;
-       *.$libext)
-         if test "$pass" = conv; then
-           deplibs="$deplib $deplibs"
-           continue
-         fi
-         case $linkmode in
-         lib)
-           if test "$deplibs_check_method" != pass_all; then
-             $echo
-             $echo "*** Warning: Trying to link with static lib archive $deplib."
-             $echo "*** I have the capability to make that library automatically link in when"
-             $echo "*** you link to this library.  But I can only do this if you have a"
-             $echo "*** shared version of the library, which you do not appear to have"
-             $echo "*** because the file extensions .$libext of this argument makes me believe"
-             $echo "*** that it is just a static archive that I should not used here."
-           else
-             $echo
-             $echo "*** Warning: Linking the shared library $output against the"
-             $echo "*** static library $deplib is not portable!"
-             deplibs="$deplib $deplibs"
-           fi
-           continue
-           ;;
-         prog)
-           if test "$pass" != link; then
-             deplibs="$deplib $deplibs"
-           else
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           fi
-           continue
-           ;;
-         esac # linkmode
-         ;; # *.$libext
-       *.lo | *.$objext)
-         if test "$pass" = conv; then
-           deplibs="$deplib $deplibs"
-         elif test "$linkmode" = prog; then
-           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-             # If there is no dlopen support or we're linking statically,
-             # we need to preload.
-             newdlprefiles="$newdlprefiles $deplib"
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           else
-             newdlfiles="$newdlfiles $deplib"
-           fi
-         fi
-         continue
-         ;;
-       %DEPLIBS%)
-         alldeplibs=yes
-         continue
-         ;;
-       esac # case $deplib
-       if test "$found" = yes || test -f "$lib"; then :
-       else
-         $echo "$modename: cannot find the library \`$lib'" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$ladir" = "X$lib" && ladir="."
-
-       dlname=
-       dlopen=
-       dlpreopen=
-       libdir=
-       library_names=
-       old_library=
-       # If the library was installed with an old release of libtool,
-       # it will not redefine variables installed, or shouldnotlink
-       installed=yes
-       shouldnotlink=no
-
-       # Read the .la file
-       case $lib in
-       */* | *\\*) . $lib ;;
-       *) . ./$lib ;;
-       esac
-
-       if test "$linkmode,$pass" = "lib,link" ||
-          test "$linkmode,$pass" = "prog,scan" ||
-          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-       fi
-
-       if test "$pass" = conv; then
-         # Only check for convenience libraries
-         deplibs="$lib $deplibs"
-         if test -z "$libdir"; then
-           if test -z "$old_library"; then
-             $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-             exit $EXIT_FAILURE
-           fi
-           # It is a libtool convenience library, so add in its objects.
-           convenience="$convenience $ladir/$objdir/$old_library"
-           old_convenience="$old_convenience $ladir/$objdir/$old_library"
-           tmp_libs=
-           for deplib in $dependency_libs; do
-             deplibs="$deplib $deplibs"
-              if test "X$duplicate_deps" = "Xyes" ; then
-               case "$tmp_libs " in
-               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-               esac
-              fi
-             tmp_libs="$tmp_libs $deplib"
-           done
-         elif test "$linkmode" != prog && test "$linkmode" != lib; then
-           $echo "$modename: \`$lib' is not a convenience library" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         continue
-       fi # $pass = conv
-
-
-       # Get the name of the library we link against.
-       linklib=
-       for l in $old_library $library_names; do
-         linklib="$l"
-       done
-       if test -z "$linklib"; then
-         $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # This library was specified with -dlopen.
-       if test "$pass" = dlopen; then
-         if test -z "$libdir"; then
-           $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         if test -z "$dlname" ||
-            test "$dlopen_support" != yes ||
-            test "$build_libtool_libs" = no; then
-           # If there is no dlname, no dlopen support or we're linking
-           # statically, we need to preload.  We also need to preload any
-           # dependent libraries so libltdl's deplib preloader doesn't
-           # bomb out in the load deplibs phase.
-           dlprefiles="$dlprefiles $lib $dependency_libs"
-         else
-           newdlfiles="$newdlfiles $lib"
-         fi
-         continue
-       fi # $pass = dlopen
-
-       # We need an absolute path.
-       case $ladir in
-       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
-       *)
-         abs_ladir=`cd "$ladir" && pwd`
-         if test -z "$abs_ladir"; then
-           $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
-           $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-           abs_ladir="$ladir"
-         fi
-         ;;
-       esac
-       laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
-       # Find the relevant object directory and library name.
-       if test "X$installed" = Xyes; then
-         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           $echo "$modename: warning: library \`$lib' was moved." 1>&2
-           dir="$ladir"
-           absdir="$abs_ladir"
-           libdir="$abs_ladir"
-         else
-           dir="$libdir"
-           absdir="$libdir"
-         fi
-       else
-         dir="$ladir/$objdir"
-         absdir="$abs_ladir/$objdir"
-         # Remove this search path later
-         notinst_path="$notinst_path $abs_ladir"
-       fi # $installed = yes
-       name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
-       # This library was specified with -dlpreopen.
-       if test "$pass" = dlpreopen; then
-         if test -z "$libdir"; then
-           $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         # Prefer using a static library (so that no silly _DYNAMIC symbols
-         # are required to link).
-         if test -n "$old_library"; then
-           newdlprefiles="$newdlprefiles $dir/$old_library"
-         # Otherwise, use the dlname, so that lt_dlopen finds it.
-         elif test -n "$dlname"; then
-           newdlprefiles="$newdlprefiles $dir/$dlname"
-         else
-           newdlprefiles="$newdlprefiles $dir/$linklib"
-         fi
-       fi # $pass = dlpreopen
-
-       if test -z "$libdir"; then
-         # Link the convenience library
-         if test "$linkmode" = lib; then
-           deplibs="$dir/$old_library $deplibs"
-         elif test "$linkmode,$pass" = "prog,link"; then
-           compile_deplibs="$dir/$old_library $compile_deplibs"
-           finalize_deplibs="$dir/$old_library $finalize_deplibs"
-         else
-           deplibs="$lib $deplibs" # used for prog,scan pass
-         fi
-         continue
-       fi
-
-
-       if test "$linkmode" = prog && test "$pass" != link; then
-         newlib_search_path="$newlib_search_path $ladir"
-         deplibs="$lib $deplibs"
-
-         linkalldeplibs=no
-         if test "$link_all_deplibs" != no || test -z "$library_names" ||
-            test "$build_libtool_libs" = no; then
-           linkalldeplibs=yes
-         fi
-
-         tmp_libs=
-         for deplib in $dependency_libs; do
-           case $deplib in
-           -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-           esac
-           # Need to link against all dependency_libs?
-           if test "$linkalldeplibs" = yes; then
-             deplibs="$deplib $deplibs"
-           else
-             # Need to hardcode shared library paths
-             # or/and link against static libraries
-             newdependency_libs="$deplib $newdependency_libs"
-           fi
-           if test "X$duplicate_deps" = "Xyes" ; then
-             case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-             esac
-           fi
-           tmp_libs="$tmp_libs $deplib"
-         done # for deplib
-         continue
-       fi # $linkmode = prog...
-
-       if test "$linkmode,$pass" = "prog,link"; then
-         if test -n "$library_names" &&
-            { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-           # We need to hardcode the library path
-           if test -n "$shlibpath_var"; then
-             # Make sure the rpath contains only unique directories.
-             case "$temp_rpath " in
-             *" $dir "*) ;;
-             *" $absdir "*) ;;
-             *) temp_rpath="$temp_rpath $dir" ;;
-             esac
-           fi
-
-           # Hardcode the library path.
-           # Skip directories that are in the system default run-time
-           # search path.
-           case " $sys_lib_dlsearch_path " in
-           *" $absdir "*) ;;
-           *)
-             case "$compile_rpath " in
-             *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
-             esac
-             ;;
-           esac
-           case " $sys_lib_dlsearch_path " in
-           *" $libdir "*) ;;
-           *)
-             case "$finalize_rpath " in
-             *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
-             esac
-             ;;
-           esac
-         fi # $linkmode,$pass = prog,link...
-
-         if test "$alldeplibs" = yes &&
-            { test "$deplibs_check_method" = pass_all ||
-              { test "$build_libtool_libs" = yes &&
-                test -n "$library_names"; }; }; then
-           # We only need to search for static libraries
-           continue
-         fi
-       fi
-
-       link_static=no # Whether the deplib will be linked statically
-       if test -n "$library_names" &&
-          { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-         if test "$installed" = no; then
-           notinst_deplibs="$notinst_deplibs $lib"
-           need_relink=yes
-         fi
-         # This is a shared library
-
-         # Warn about portability, can't link against -module's on
-         # some systems (darwin)
-         if test "$shouldnotlink" = yes && test "$pass" = link ; then
-           $echo
-           if test "$linkmode" = prog; then
-             $echo "*** Warning: Linking the executable $output against the loadable module"
-           else
-             $echo "*** Warning: Linking the shared library $output against the loadable module"
-           fi
-           $echo "*** $linklib is not portable!"
-         fi
-         if test "$linkmode" = lib &&
-            test "$hardcode_into_libs" = yes; then
-           # Hardcode the library path.
-           # Skip directories that are in the system default run-time
-           # search path.
-           case " $sys_lib_dlsearch_path " in
-           *" $absdir "*) ;;
-           *)
-             case "$compile_rpath " in
-             *" $absdir "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
-             esac
-             ;;
-           esac
-           case " $sys_lib_dlsearch_path " in
-           *" $libdir "*) ;;
-           *)
-             case "$finalize_rpath " in
-             *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
-             esac
-             ;;
-           esac
-         fi
-
-         if test -n "$old_archive_from_expsyms_cmds"; then
-           # figure out the soname
-           set dummy $library_names
-           realname="$2"
-           shift; shift
-           libname=`eval \\$echo \"$libname_spec\"`
-           # use dlname if we got it. it's perfectly good, no?
-           if test -n "$dlname"; then
-             soname="$dlname"
-           elif test -n "$soname_spec"; then
-             # bleh windows
-             case $host in
-             *cygwin* | mingw*)
-               major=`expr $current - $age`
-               versuffix="-$major"
-               ;;
-             esac
-             eval soname=\"$soname_spec\"
-           else
-             soname="$realname"
-           fi
-
-           # Make a new name for the extract_expsyms_cmds to use
-           soroot="$soname"
-           soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
-           newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
-           # If the library has no export list, then create one now
-           if test -f "$output_objdir/$soname-def"; then :
-           else
-             $show "extracting exported symbol list from \`$soname'"
-             save_ifs="$IFS"; IFS='~'
-             cmds=$extract_expsyms_cmds
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-             done
-             IFS="$save_ifs"
-           fi
-
-           # Create $newlib
-           if test -f "$output_objdir/$newlib"; then :; else
-             $show "generating import library for \`$soname'"
-             save_ifs="$IFS"; IFS='~'
-             cmds=$old_archive_from_expsyms_cmds
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-             done
-             IFS="$save_ifs"
-           fi
-           # make sure the library variables are pointing to the new library
-           dir=$output_objdir
-           linklib=$newlib
-         fi # test -n "$old_archive_from_expsyms_cmds"
-
-         if test "$linkmode" = prog || test "$mode" != relink; then
-           add_shlibpath=
-           add_dir=
-           add=
-           lib_linked=yes
-           case $hardcode_action in
-           immediate | unsupported)
-             if test "$hardcode_direct" = no; then
-               add="$dir/$linklib"
-               case $host in
-                 *-*-sco3.2v5* ) add_dir="-L$dir" ;;
-                 *-*-darwin* )
-                   # if the lib is a module then we can not link against
-                   # it, someone is ignoring the new warnings I added
-                   if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
-                     $echo "** Warning, lib $linklib is a module, not a shared library"
-                     if test -z "$old_library" ; then
-                       $echo
-                       $echo "** And there doesn't seem to be a static archive available"
-                       $echo "** The link will probably fail, sorry"
-                     else
-                       add="$dir/$old_library"
-                     fi
-                   fi
-               esac
-             elif test "$hardcode_minus_L" = no; then
-               case $host in
-               *-*-sunos*) add_shlibpath="$dir" ;;
-               esac
-               add_dir="-L$dir"
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = no; then
-               add_shlibpath="$dir"
-               add="-l$name"
-             else
-               lib_linked=no
-             fi
-             ;;
-           relink)
-             if test "$hardcode_direct" = yes; then
-               add="$dir/$linklib"
-             elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$dir"
-               # Try looking first in the location we're being installed to.
-               if test -n "$inst_prefix_dir"; then
-                 case "$libdir" in
-                   [\\/]*)
-                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
-                     ;;
-                 esac
-               fi
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = yes; then
-               add_shlibpath="$dir"
-               add="-l$name"
-             else
-               lib_linked=no
-             fi
-             ;;
-           *) lib_linked=no ;;
-           esac
-
-           if test "$lib_linked" != yes; then
-             $echo "$modename: configuration error: unsupported hardcode properties"
-             exit $EXIT_FAILURE
-           fi
-
-           if test -n "$add_shlibpath"; then
-             case :$compile_shlibpath: in
-             *":$add_shlibpath:"*) ;;
-             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-             esac
-           fi
-           if test "$linkmode" = prog; then
-             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
-             test -n "$add" && compile_deplibs="$add $compile_deplibs"
-           else
-             test -n "$add_dir" && deplibs="$add_dir $deplibs"
-             test -n "$add" && deplibs="$add $deplibs"
-             if test "$hardcode_direct" != yes && \
-                test "$hardcode_minus_L" != yes && \
-                test "$hardcode_shlibpath_var" = yes; then
-               case :$finalize_shlibpath: in
-               *":$libdir:"*) ;;
-               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-               esac
-             fi
-           fi
-         fi
-
-         if test "$linkmode" = prog || test "$mode" = relink; then
-           add_shlibpath=
-           add_dir=
-           add=
-           # Finalize command for both is simple: just hardcode it.
-           if test "$hardcode_direct" = yes; then
-             add="$libdir/$linklib"
-           elif test "$hardcode_minus_L" = yes; then
-             add_dir="-L$libdir"
-             add="-l$name"
-           elif test "$hardcode_shlibpath_var" = yes; then
-             case :$finalize_shlibpath: in
-             *":$libdir:"*) ;;
-             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-             esac
-             add="-l$name"
-           elif test "$hardcode_automatic" = yes; then
-             if test -n "$inst_prefix_dir" &&
-                test -f "$inst_prefix_dir$libdir/$linklib" ; then
-               add="$inst_prefix_dir$libdir/$linklib"
-             else
-               add="$libdir/$linklib"
-             fi
-           else
-             # We cannot seem to hardcode it, guess we'll fake it.
-             add_dir="-L$libdir"
-             # Try looking first in the location we're being installed to.
-             if test -n "$inst_prefix_dir"; then
-               case "$libdir" in
-                 [\\/]*)
-                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
-                   ;;
-               esac
-             fi
-             add="-l$name"
-           fi
-
-           if test "$linkmode" = prog; then
-             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
-             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
-           else
-             test -n "$add_dir" && deplibs="$add_dir $deplibs"
-             test -n "$add" && deplibs="$add $deplibs"
-           fi
-         fi
-       elif test "$linkmode" = prog; then
-         # Here we assume that one of hardcode_direct or hardcode_minus_L
-         # is not unsupported.  This is valid on all known static and
-         # shared platforms.
-         if test "$hardcode_direct" != unsupported; then
-           test -n "$old_library" && linklib="$old_library"
-           compile_deplibs="$dir/$linklib $compile_deplibs"
-           finalize_deplibs="$dir/$linklib $finalize_deplibs"
-         else
-           compile_deplibs="-l$name -L$dir $compile_deplibs"
-           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
-         fi
-       elif test "$build_libtool_libs" = yes; then
-         # Not a shared library
-         if test "$deplibs_check_method" != pass_all; then
-           # We're trying link a shared library against a static one
-           # but the system doesn't support it.
-
-           # Just print a warning and add the library to dependency_libs so
-           # that the program can be linked against the static library.
-           $echo
-           $echo "*** Warning: This system can not link to static lib archive $lib."
-           $echo "*** I have the capability to make that library automatically link in when"
-           $echo "*** you link to this library.  But I can only do this if you have a"
-           $echo "*** shared version of the library, which you do not appear to have."
-           if test "$module" = yes; then
-             $echo "*** But as you try to build a module library, libtool will still create "
-             $echo "*** a static module, that should work as long as the dlopening application"
-             $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
-             if test -z "$global_symbol_pipe"; then
-               $echo
-               $echo "*** However, this would only work if libtool was able to extract symbol"
-               $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-               $echo "*** not find such a program.  So, this module is probably useless."
-               $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-             fi
-             if test "$build_old_libs" = no; then
-               build_libtool_libs=module
-               build_old_libs=yes
-             else
-               build_libtool_libs=no
-             fi
-           fi
-         else
-           convenience="$convenience $dir/$old_library"
-           old_convenience="$old_convenience $dir/$old_library"
-           deplibs="$dir/$old_library $deplibs"
-           link_static=yes
-         fi
-       fi # link shared/static library?
-
-       if test "$linkmode" = lib; then
-         if test -n "$dependency_libs" &&
-            { test "$hardcode_into_libs" != yes ||
-              test "$build_old_libs" = yes ||
-              test "$link_static" = yes; }; then
-           # Extract -R from dependency_libs
-           temp_deplibs=
-           for libdir in $dependency_libs; do
-             case $libdir in
-             -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-                  case " $xrpath " in
-                  *" $temp_xrpath "*) ;;
-                  *) xrpath="$xrpath $temp_xrpath";;
-                  esac;;
-             *) temp_deplibs="$temp_deplibs $libdir";;
-             esac
-           done
-           dependency_libs="$temp_deplibs"
-         fi
-
-         newlib_search_path="$newlib_search_path $absdir"
-         # Link against this library
-         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-         # ... and its dependency_libs
-         tmp_libs=
-         for deplib in $dependency_libs; do
-           newdependency_libs="$deplib $newdependency_libs"
-           if test "X$duplicate_deps" = "Xyes" ; then
-             case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-             esac
-           fi
-           tmp_libs="$tmp_libs $deplib"
-         done
-
-         if test "$link_all_deplibs" != no; then
-           # Add the search paths of all dependency libraries
-           for deplib in $dependency_libs; do
-             case $deplib in
-             -L*) path="$deplib" ;;
-             *.la)
-               dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
-               test "X$dir" = "X$deplib" && dir="."
-               # We need an absolute path.
-               case $dir in
-               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-               *)
-                 absdir=`cd "$dir" && pwd`
-                 if test -z "$absdir"; then
-                   $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-                   absdir="$dir"
-                 fi
-                 ;;
-               esac
-               if grep "^installed=no" $deplib > /dev/null; then
-                 path="$absdir/$objdir"
-               else
-                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-                 if test -z "$libdir"; then
-                   $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-                   exit $EXIT_FAILURE
-                 fi
-                 if test "$absdir" != "$libdir"; then
-                   $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
-                 fi
-                 path="$absdir"
-               fi
-               depdepl=
-               case $host in
-               *-*-darwin*)
-                 # we do not want to link against static libs,
-                 # but need to link against shared
-                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-                 if test -n "$deplibrary_names" ; then
-                   for tmp in $deplibrary_names ; do
-                     depdepl=$tmp
-                   done
-                   if test -f "$path/$depdepl" ; then
-                     depdepl="$path/$depdepl"
-                   fi
-                   # do not add paths which are already there
-                   case " $newlib_search_path " in
-                   *" $path "*) ;;
-                   *) newlib_search_path="$newlib_search_path $path";;
-                   esac
-                 fi
-                 path=""
-                 ;;
-               *)
-                 path="-L$path"
-                 ;;
-               esac
-               ;;
-             -l*)
-               case $host in
-               *-*-darwin*)
-                 # Again, we only want to link against shared libraries
-                 eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
-                 for tmp in $newlib_search_path ; do
-                   if test -f "$tmp/lib$tmp_libs.dylib" ; then
-                     eval depdepl="$tmp/lib$tmp_libs.dylib"
-                     break
-                   fi
-                 done
-                 path=""
-                 ;;
-               *) continue ;;
-               esac
-               ;;
-             *) continue ;;
-             esac
-             case " $deplibs " in
-             *" $depdepl "*) ;;
-             *) deplibs="$depdepl $deplibs" ;;
-             esac
-             case " $deplibs " in
-             *" $path "*) ;;
-             *) deplibs="$deplibs $path" ;;
-             esac
-           done
-         fi # link_all_deplibs != no
-       fi # linkmode = lib
-      done # for deplib in $libs
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
-       # Link the dlpreopened libraries before other libraries
-       for deplib in $save_deplibs; do
-         deplibs="$deplib $deplibs"
-       done
-      fi
-      if test "$pass" != dlopen; then
-       if test "$pass" != conv; then
-         # Make sure lib_search_path contains only unique directories.
-         lib_search_path=
-         for dir in $newlib_search_path; do
-           case "$lib_search_path " in
-           *" $dir "*) ;;
-           *) lib_search_path="$lib_search_path $dir" ;;
-           esac
-         done
-         newlib_search_path=
-       fi
-
-       if test "$linkmode,$pass" != "prog,link"; then
-         vars="deplibs"
-       else
-         vars="compile_deplibs finalize_deplibs"
-       fi
-       for var in $vars dependency_libs; do
-         # Add libraries to $var in reverse order
-         eval tmp_libs=\"\$$var\"
-         new_libs=
-         for deplib in $tmp_libs; do
-           # FIXME: Pedantically, this is the right thing to do, so
-           #        that some nasty dependency loop isn't accidentally
-           #        broken:
-           #new_libs="$deplib $new_libs"
-           # Pragmatically, this seems to cause very few problems in
-           # practice:
-           case $deplib in
-           -L*) new_libs="$deplib $new_libs" ;;
-           -R*) ;;
-           *)
-             # And here is the reason: when a library appears more
-             # than once as an explicit dependence of a library, or
-             # is implicitly linked in more than once by the
-             # compiler, it is considered special, and multiple
-             # occurrences thereof are not removed.  Compare this
-             # with having the same library being listed as a
-             # dependency of multiple other libraries: in this case,
-             # we know (pedantically, we assume) the library does not
-             # need to be listed more than once, so we keep only the
-             # last copy.  This is not always right, but it is rare
-             # enough that we require users that really mean to play
-             # such unportable linking tricks to link the library
-             # using -Wl,-lname, so that libtool does not consider it
-             # for duplicate removal.
-             case " $specialdeplibs " in
-             *" $deplib "*) new_libs="$deplib $new_libs" ;;
-             *)
-               case " $new_libs " in
-               *" $deplib "*) ;;
-               *) new_libs="$deplib $new_libs" ;;
-               esac
-               ;;
-             esac
-             ;;
-           esac
-         done
-         tmp_libs=
-         for deplib in $new_libs; do
-           case $deplib in
-           -L*)
-             case " $tmp_libs " in
-             *" $deplib "*) ;;
-             *) tmp_libs="$tmp_libs $deplib" ;;
-             esac
-             ;;
-           *) tmp_libs="$tmp_libs $deplib" ;;
-           esac
-         done
-         eval $var=\"$tmp_libs\"
-       done # for var
-      fi
-      # Last step: remove runtime libs from dependency_libs
-      # (they stay in deplibs)
-      tmp_libs=
-      for i in $dependency_libs ; do
-       case " $predeps $postdeps $compiler_lib_search_path " in
-       *" $i "*)
-         i=""
-         ;;
-       esac
-       if test -n "$i" ; then
-         tmp_libs="$tmp_libs $i"
-       fi
-      done
-      dependency_libs=$tmp_libs
-    done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
-      dlprefiles="$newdlprefiles"
-    fi
-
-    case $linkmode in
-    oldlib)
-      if test -n "$deplibs"; then
-       $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-       $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-       $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-       $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-      fi
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      objs="$objs$old_deplibs"
-      ;;
-
-    lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case $outputname in
-      lib*)
-       name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-       eval shared_ext=\"$shrext_cmds\"
-       eval libname=\"$libname_spec\"
-       ;;
-      *)
-       if test "$module" = no; then
-         $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-       if test "$need_lib_prefix" != no; then
-         # Add the "lib" prefix for modules if required
-         name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-         eval shared_ext=\"$shrext_cmds\"
-         eval libname=\"$libname_spec\"
-       else
-         libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-       fi
-       ;;
-      esac
-
-      if test -n "$objs"; then
-       if test "$deplibs_check_method" != pass_all; then
-         $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
-         exit $EXIT_FAILURE
-       else
-         $echo
-         $echo "*** Warning: Linking the shared library $output against the non-libtool"
-         $echo "*** objects $objs is not portable!"
-         libobjs="$libobjs $objs"
-       fi
-      fi
-
-      if test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
-      fi
-
-      set dummy $rpath
-      if test "$#" -gt 2; then
-       $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-      fi
-      install_libdir="$2"
-
-      oldlibs=
-      if test -z "$rpath"; then
-       if test "$build_libtool_libs" = yes; then
-         # Building a libtool convenience library.
-         # Some compilers have problems with a `.al' extension so
-         # convenience libraries should have the same extension an
-         # archive normally would.
-         oldlibs="$output_objdir/$libname.$libext $oldlibs"
-         build_libtool_libs=convenience
-         build_old_libs=yes
-       fi
-
-       if test -n "$vinfo"; then
-         $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
-       fi
-
-       if test -n "$release"; then
-         $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-       fi
-      else
-
-       # Parse the version information argument.
-       save_ifs="$IFS"; IFS=':'
-       set dummy $vinfo 0 0 0
-       IFS="$save_ifs"
-
-       if test -n "$8"; then
-         $echo "$modename: too many parameters to \`-version-info'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # convert absolute version numbers to libtool ages
-       # this retains compatibility with .la files and attempts
-       # to make the code below a bit more comprehensible
-
-       case $vinfo_number in
-       yes)
-         number_major="$2"
-         number_minor="$3"
-         number_revision="$4"
-         #
-         # There are really only two kinds -- those that
-         # use the current revision as the major version
-         # and those that subtract age and use age as
-         # a minor version.  But, then there is irix
-         # which has an extra 1 added just for fun
-         #
-         case $version_type in
-         darwin|linux|osf|windows)
-           current=`expr $number_major + $number_minor`
-           age="$number_minor"
-           revision="$number_revision"
-           ;;
-         freebsd-aout|freebsd-elf|sunos)
-           current="$number_major"
-           revision="$number_minor"
-           age="0"
-           ;;
-         irix|nonstopux)
-           current=`expr $number_major + $number_minor - 1`
-           age="$number_minor"
-           revision="$number_minor"
-           ;;
-         esac
-         ;;
-       no)
-         current="$2"
-         revision="$3"
-         age="$4"
-         ;;
-       esac
-
-       # Check that each of the things are valid numbers.
-       case $current in
-       0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-       *)
-         $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       case $revision in
-       0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-       *)
-         $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       case $age in
-       0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
-       *)
-         $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       if test "$age" -gt "$current"; then
-         $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # Calculate the version variables.
-       major=
-       versuffix=
-       verstring=
-       case $version_type in
-       none) ;;
-
-       darwin)
-         # Like Linux, but with the current version available in
-         # verstring for coding it into the library header
-         major=.`expr $current - $age`
-         versuffix="$major.$age.$revision"
-         # Darwin ld doesn't like 0 for these options...
-         minor_current=`expr $current + 1`
-         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
-         ;;
-
-       freebsd-aout)
-         major=".$current"
-         versuffix=".$current.$revision";
-         ;;
-
-       freebsd-elf)
-         major=".$current"
-         versuffix=".$current";
-         ;;
-
-       irix | nonstopux)
-         major=`expr $current - $age + 1`
-
-         case $version_type in
-           nonstopux) verstring_prefix=nonstopux ;;
-           *)         verstring_prefix=sgi ;;
-         esac
-         verstring="$verstring_prefix$major.$revision"
-
-         # Add in all the interfaces that we are compatible with.
-         loop=$revision
-         while test "$loop" -ne 0; do
-           iface=`expr $revision - $loop`
-           loop=`expr $loop - 1`
-           verstring="$verstring_prefix$major.$iface:$verstring"
-         done
-
-         # Before this point, $major must not contain `.'.
-         major=.$major
-         versuffix="$major.$revision"
-         ;;
-
-       linux)
-         major=.`expr $current - $age`
-         versuffix="$major.$age.$revision"
-         ;;
-
-       osf)
-         major=.`expr $current - $age`
-         versuffix=".$current.$age.$revision"
-         verstring="$current.$age.$revision"
-
-         # Add in all the interfaces that we are compatible with.
-         loop=$age
-         while test "$loop" -ne 0; do
-           iface=`expr $current - $loop`
-           loop=`expr $loop - 1`
-           verstring="$verstring:${iface}.0"
-         done
-
-         # Make executables depend on our current version.
-         verstring="$verstring:${current}.0"
-         ;;
-
-       sunos)
-         major=".$current"
-         versuffix=".$current.$revision"
-         ;;
-
-       windows)
-         # Use '-' rather than '.', since we only want one
-         # extension on DOS 8.3 filesystems.
-         major=`expr $current - $age`
-         versuffix="-$major"
-         ;;
-
-       *)
-         $echo "$modename: unknown library version type \`$version_type'" 1>&2
-         $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       # Clear the version info if we defaulted, and they specified a release.
-       if test -z "$vinfo" && test -n "$release"; then
-         major=
-         case $version_type in
-         darwin)
-           # we can't check for "0.0" in archive_cmds due to quoting
-           # problems, so we reset it completely
-           verstring=
-           ;;
-         *)
-           verstring="0.0"
-           ;;
-         esac
-         if test "$need_version" = no; then
-           versuffix=
-         else
-           versuffix=".0.0"
-         fi
-       fi
-
-       # Remove version info from name if versioning should be avoided
-       if test "$avoid_version" = yes && test "$need_version" = no; then
-         major=
-         versuffix=
-         verstring=""
-       fi
-
-       # Check to see if the archive will have undefined symbols.
-       if test "$allow_undefined" = yes; then
-         if test "$allow_undefined_flag" = unsupported; then
-           $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-           build_libtool_libs=no
-           build_old_libs=yes
-         fi
-       else
-         # Don't allow undefined symbols.
-         allow_undefined_flag="$no_undefined_flag"
-       fi
-      fi
-
-      if test "$mode" != relink; then
-       # Remove our outputs, but don't remove object files since they
-       # may have been created when compiling PIC objects.
-       removelist=
-       tempremovelist=`$echo "$output_objdir/*"`
-       for p in $tempremovelist; do
-         case $p in
-           *.$objext)
-              ;;
-           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-              if test "X$precious_files_regex" != "X"; then
-                if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-                then
-                  continue
-                fi
-              fi
-              removelist="$removelist $p"
-              ;;
-           *) ;;
-         esac
-       done
-       if test -n "$removelist"; then
-         $show "${rm}r $removelist"
-         $run ${rm}r $removelist
-       fi
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-       oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
-       # Transform .lo files to .o files.
-       oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-      fi
-
-      # Eliminate all temporary directories.
-      for path in $notinst_path; do
-       lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
-       deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
-       dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
-      done
-
-      if test -n "$xrpath"; then
-       # If the user specified any rpath flags, then add them.
-       temp_xrpath=
-       for libdir in $xrpath; do
-         temp_xrpath="$temp_xrpath -R$libdir"
-         case "$finalize_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
-         esac
-       done
-       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-         dependency_libs="$temp_xrpath $dependency_libs"
-       fi
-      fi
-
-      # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
-      dlfiles=
-      for lib in $old_dlfiles; do
-       case " $dlprefiles $dlfiles " in
-       *" $lib "*) ;;
-       *) dlfiles="$dlfiles $lib" ;;
-       esac
-      done
-
-      # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
-      dlprefiles=
-      for lib in $old_dlprefiles; do
-       case "$dlprefiles " in
-       *" $lib "*) ;;
-       *) dlprefiles="$dlprefiles $lib" ;;
-       esac
-      done
-
-      if test "$build_libtool_libs" = yes; then
-       if test -n "$rpath"; then
-         case $host in
-         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-           # these systems don't actually have a c library (as such)!
-           ;;
-         *-*-rhapsody* | *-*-darwin1.[012])
-           # Rhapsody C library is in the System framework
-           deplibs="$deplibs -framework System"
-           ;;
-         *-*-netbsd*)
-           # Don't link with libc until the a.out ld.so is fixed.
-           ;;
-         *-*-openbsd* | *-*-freebsd*)
-           # Do not include libc due to us having libc/libc_r.
-           test "X$arg" = "X-lc" && continue
-           ;;
-         *)
-           # Add libc to deplibs on all other systems if necessary.
-           if test "$build_libtool_need_lc" = "yes"; then
-             deplibs="$deplibs -lc"
-           fi
-           ;;
-         esac
-       fi
-
-       # Transform deplibs into only deplibs that can be linked in shared.
-       name_save=$name
-       libname_save=$libname
-       release_save=$release
-       versuffix_save=$versuffix
-       major_save=$major
-       # I'm not sure if I'm treating the release correctly.  I think
-       # release should show up in the -l (ie -lgmp5) so we don't want to
-       # add it in twice.  Is that correct?
-       release=""
-       versuffix=""
-       major=""
-       newdeplibs=
-       droppeddeps=no
-       case $deplibs_check_method in
-       pass_all)
-         # Don't check for shared/static.  Everything works.
-         # This might be a little naive.  We might want to check
-         # whether the library exists or not.  But this is on
-         # osf3 & osf4 and I'm not really sure... Just
-         # implementing what was already the behavior.
-         newdeplibs=$deplibs
-         ;;
-       test_compile)
-         # This code stresses the "libraries are programs" paradigm to its
-         # limits. Maybe even breaks it.  We compile a program, linking it
-         # against the deplibs as a proxy for the library.  Then we can check
-         # whether they linked in statically or dynamically with ldd.
-         $rm conftest.c
-         cat > conftest.c <<EOF
-         int main() { return 0; }
-EOF
-         $rm conftest
-         $LTCC -o conftest conftest.c $deplibs
-         if test "$?" -eq 0 ; then
-           ldd_output=`ldd conftest`
-           for i in $deplibs; do
-             name="`expr $i : '-l\(.*\)'`"
-             # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" -ne "0"; then
-               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-                 case " $predeps $postdeps " in
-                 *" $i "*)
-                   newdeplibs="$newdeplibs $i"
-                   i=""
-                   ;;
-                 esac
-               fi
-               if test -n "$i" ; then
-                 libname=`eval \\$echo \"$libname_spec\"`
-                 deplib_matches=`eval \\$echo \"$library_names_spec\"`
-                 set dummy $deplib_matches
-                 deplib_match=$2
-                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                   newdeplibs="$newdeplibs $i"
-                 else
-                   droppeddeps=yes
-                   $echo
-                   $echo "*** Warning: dynamic linker does not accept needed library $i."
-                   $echo "*** I have the capability to make that library automatically link in when"
-                   $echo "*** you link to this library.  But I can only do this if you have a"
-                   $echo "*** shared version of the library, which I believe you do not have"
-                   $echo "*** because a test_compile did reveal that the linker did not use it for"
-                   $echo "*** its dynamic dependency list that programs get resolved with at runtime."
-                 fi
-               fi
-             else
-               newdeplibs="$newdeplibs $i"
-             fi
-           done
-         else
-           # Error occurred in the first compile.  Let's try to salvage
-           # the situation: Compile a separate program for each library.
-           for i in $deplibs; do
-             name="`expr $i : '-l\(.*\)'`"
-             # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" != "0"; then
-               $rm conftest
-               $LTCC -o conftest conftest.c $i
-               # Did it work?
-               if test "$?" -eq 0 ; then
-                 ldd_output=`ldd conftest`
-                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-                   case " $predeps $postdeps " in
-                   *" $i "*)
-                     newdeplibs="$newdeplibs $i"
-                     i=""
-                     ;;
-                   esac
-                 fi
-                 if test -n "$i" ; then
-                   libname=`eval \\$echo \"$libname_spec\"`
-                   deplib_matches=`eval \\$echo \"$library_names_spec\"`
-                   set dummy $deplib_matches
-                   deplib_match=$2
-                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                     newdeplibs="$newdeplibs $i"
-                   else
-                     droppeddeps=yes
-                     $echo
-                     $echo "*** Warning: dynamic linker does not accept needed library $i."
-                     $echo "*** I have the capability to make that library automatically link in when"
-                     $echo "*** you link to this library.  But I can only do this if you have a"
-                     $echo "*** shared version of the library, which you do not appear to have"
-                     $echo "*** because a test_compile did reveal that the linker did not use this one"
-                     $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
-                   fi
-                 fi
-               else
-                 droppeddeps=yes
-                 $echo
-                 $echo "*** Warning!  Library $i is needed by this library but I was not able to"
-                 $echo "***  make it link in!  You will probably need to install it or some"
-                 $echo "*** library that it depends on before this library will be fully"
-                 $echo "*** functional.  Installing it before continuing would be even better."
-               fi
-             else
-               newdeplibs="$newdeplibs $i"
-             fi
-           done
-         fi
-         ;;
-       file_magic*)
-         set dummy $deplibs_check_method
-         file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-         for a_deplib in $deplibs; do
-           name="`expr $a_deplib : '-l\(.*\)'`"
-           # If $name is empty we are operating on a -L argument.
-            if test "$name" != "" && test  "$name" != "0"; then
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-               case " $predeps $postdeps " in
-               *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $a_deplib"
-                 a_deplib=""
-                 ;;
-               esac
-             fi
-             if test -n "$a_deplib" ; then
-               libname=`eval \\$echo \"$libname_spec\"`
-               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-                 for potent_lib in $potential_libs; do
-                     # Follow soft links.
-                     if ls -lLd "$potent_lib" 2>/dev/null \
-                        | grep " -> " >/dev/null; then
-                       continue
-                     fi
-                     # The statement above tries to avoid entering an
-                     # endless loop below, in case of cyclic links.
-                     # We might still enter an endless loop, since a link
-                     # loop can be closed while we follow links,
-                     # but so what?
-                     potlib="$potent_lib"
-                     while test -h "$potlib" 2>/dev/null; do
-                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
-                       case $potliblink in
-                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-                       *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-                       esac
-                     done
-                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-                        | ${SED} 10q \
-                        | $EGREP "$file_magic_regex" > /dev/null; then
-                       newdeplibs="$newdeplibs $a_deplib"
-                       a_deplib=""
-                       break 2
-                     fi
-                 done
-               done
-             fi
-             if test -n "$a_deplib" ; then
-               droppeddeps=yes
-               $echo
-               $echo "*** Warning: linker path does not have real file for library $a_deplib."
-               $echo "*** I have the capability to make that library automatically link in when"
-               $echo "*** you link to this library.  But I can only do this if you have a"
-               $echo "*** shared version of the library, which you do not appear to have"
-               $echo "*** because I did check the linker path looking for a file starting"
-               if test -z "$potlib" ; then
-                 $echo "*** with $libname but no candidates were found. (...for file magic test)"
-               else
-                 $echo "*** with $libname and none of the candidates passed a file format test"
-                 $echo "*** using a file magic. Last file checked: $potlib"
-               fi
-             fi
-           else
-             # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
-           fi
-         done # Gone through all deplibs.
-         ;;
-       match_pattern*)
-         set dummy $deplibs_check_method
-         match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-         for a_deplib in $deplibs; do
-           name="`expr $a_deplib : '-l\(.*\)'`"
-           # If $name is empty we are operating on a -L argument.
-           if test -n "$name" && test "$name" != "0"; then
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-               case " $predeps $postdeps " in
-               *" $a_deplib "*)
-                 newdeplibs="$newdeplibs $a_deplib"
-                 a_deplib=""
-                 ;;
-               esac
-             fi
-             if test -n "$a_deplib" ; then
-               libname=`eval \\$echo \"$libname_spec\"`
-               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-                 for potent_lib in $potential_libs; do
-                   potlib="$potent_lib" # see symlink-check above in file_magic test
-                   if eval $echo \"$potent_lib\" 2>/dev/null \
-                       | ${SED} 10q \
-                       | $EGREP "$match_pattern_regex" > /dev/null; then
-                     newdeplibs="$newdeplibs $a_deplib"
-                     a_deplib=""
-                     break 2
-                   fi
-                 done
-               done
-             fi
-             if test -n "$a_deplib" ; then
-               droppeddeps=yes
-               $echo
-               $echo "*** Warning: linker path does not have real file for library $a_deplib."
-               $echo "*** I have the capability to make that library automatically link in when"
-               $echo "*** you link to this library.  But I can only do this if you have a"
-               $echo "*** shared version of the library, which you do not appear to have"
-               $echo "*** because I did check the linker path looking for a file starting"
-               if test -z "$potlib" ; then
-                 $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
-               else
-                 $echo "*** with $libname and none of the candidates passed a file format test"
-                 $echo "*** using a regex pattern. Last file checked: $potlib"
-               fi
-             fi
-           else
-             # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
-           fi
-         done # Gone through all deplibs.
-         ;;
-       none | unknown | *)
-         newdeplibs=""
-         tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-           -e 's/ -[LR][^ ]*//g'`
-         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-           for i in $predeps $postdeps ; do
-             # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
-           done
-         fi
-         if $echo "X $tmp_deplibs" | $Xsed -e 's/[     ]//g' \
-           | grep . >/dev/null; then
-           $echo
-           if test "X$deplibs_check_method" = "Xnone"; then
-             $echo "*** Warning: inter-library dependencies are not supported in this platform."
-           else
-             $echo "*** Warning: inter-library dependencies are not known to be supported."
-           fi
-           $echo "*** All declared inter-library dependencies are being dropped."
-           droppeddeps=yes
-         fi
-         ;;
-       esac
-       versuffix=$versuffix_save
-       major=$major_save
-       release=$release_save
-       libname=$libname_save
-       name=$name_save
-
-       case $host in
-       *-*-rhapsody* | *-*-darwin1.[012])
-         # On Rhapsody replace the C library is the System framework
-         newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-         ;;
-       esac
-
-       if test "$droppeddeps" = yes; then
-         if test "$module" = yes; then
-           $echo
-           $echo "*** Warning: libtool could not satisfy all declared inter-library"
-           $echo "*** dependencies of module $libname.  Therefore, libtool will create"
-           $echo "*** a static module, that should work as long as the dlopening"
-           $echo "*** application is linked with the -dlopen flag."
-           if test -z "$global_symbol_pipe"; then
-             $echo
-             $echo "*** However, this would only work if libtool was able to extract symbol"
-             $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-             $echo "*** not find such a program.  So, this module is probably useless."
-             $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-           fi
-           if test "$build_old_libs" = no; then
-             oldlibs="$output_objdir/$libname.$libext"
-             build_libtool_libs=module
-             build_old_libs=yes
-           else
-             build_libtool_libs=no
-           fi
-         else
-           $echo "*** The inter-library dependencies that have been dropped here will be"
-           $echo "*** automatically added whenever a program is linked with this library"
-           $echo "*** or is declared to -dlopen it."
-
-           if test "$allow_undefined" = no; then
-             $echo
-             $echo "*** Since this library must not contain undefined symbols,"
-             $echo "*** because either the platform does not support them or"
-             $echo "*** it was explicitly requested with -no-undefined,"
-             $echo "*** libtool will only create a static version of it."
-             if test "$build_old_libs" = no; then
-               oldlibs="$output_objdir/$libname.$libext"
-               build_libtool_libs=module
-               build_old_libs=yes
-             else
-               build_libtool_libs=no
-             fi
-           fi
-         fi
-       fi
-       # Done checking deplibs!
-       deplibs=$newdeplibs
-      fi
-
-      # All the library-specific variables (install_libdir is set above).
-      library_names=
-      old_library=
-      dlname=
-
-      # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-       if test "$hardcode_into_libs" = yes; then
-         # Hardcode the library paths
-         hardcode_libdirs=
-         dep_rpath=
-         rpath="$finalize_rpath"
-         test "$mode" != relink && rpath="$compile_rpath$rpath"
-         for libdir in $rpath; do
-           if test -n "$hardcode_libdir_flag_spec"; then
-             if test -n "$hardcode_libdir_separator"; then
-               if test -z "$hardcode_libdirs"; then
-                 hardcode_libdirs="$libdir"
-               else
-                 # Just accumulate the unique libdirs.
-                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-                   ;;
-                 *)
-                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-                   ;;
-                 esac
-               fi
-             else
-               eval flag=\"$hardcode_libdir_flag_spec\"
-               dep_rpath="$dep_rpath $flag"
-             fi
-           elif test -n "$runpath_var"; then
-             case "$perm_rpath " in
-             *" $libdir "*) ;;
-             *) perm_rpath="$perm_rpath $libdir" ;;
-             esac
-           fi
-         done
-         # Substitute the hardcoded libdirs into the rpath.
-         if test -n "$hardcode_libdir_separator" &&
-            test -n "$hardcode_libdirs"; then
-           libdir="$hardcode_libdirs"
-           if test -n "$hardcode_libdir_flag_spec_ld"; then
-             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-           else
-             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-           fi
-         fi
-         if test -n "$runpath_var" && test -n "$perm_rpath"; then
-           # We should set the runpath_var.
-           rpath=
-           for dir in $perm_rpath; do
-             rpath="$rpath$dir:"
-           done
-           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
-         fi
-         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
-       fi
-
-       shlibpath="$finalize_shlibpath"
-       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-       if test -n "$shlibpath"; then
-         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
-       fi
-
-       # Get the real and link names of the library.
-       eval shared_ext=\"$shrext_cmds\"
-       eval library_names=\"$library_names_spec\"
-       set dummy $library_names
-       realname="$2"
-       shift; shift
-
-       if test -n "$soname_spec"; then
-         eval soname=\"$soname_spec\"
-       else
-         soname="$realname"
-       fi
-       if test -z "$dlname"; then
-         dlname=$soname
-       fi
-
-       lib="$output_objdir/$realname"
-       for link
-       do
-         linknames="$linknames $link"
-       done
-
-       # Use standard objects if they are pic
-       test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
-       # Prepare the list of exported symbols
-       if test -z "$export_symbols"; then
-         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-           $show "generating symbol list for \`$libname.la'"
-           export_symbols="$output_objdir/$libname.exp"
-           $run $rm $export_symbols
-           cmds=$export_symbols_cmds
-           save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
-             IFS="$save_ifs"
-             eval cmd=\"$cmd\"
-             if len=`expr "X$cmd" : ".*"` &&
-              test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-               skipped_export=false
-             else
-               # The command line is too long to execute in one step.
-               $show "using reloadable object file for export list..."
-               skipped_export=:
-             fi
-           done
-           IFS="$save_ifs"
-           if test -n "$export_symbols_regex"; then
-             $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-             $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-             $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-             $run eval '$mv "${export_symbols}T" "$export_symbols"'
-           fi
-         fi
-       fi
-
-       if test -n "$export_symbols" && test -n "$include_expsyms"; then
-         $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-       fi
-
-       tmp_deplibs=
-       for test_deplib in $deplibs; do
-               case " $convenience " in
-               *" $test_deplib "*) ;;
-               *)
-                       tmp_deplibs="$tmp_deplibs $test_deplib"
-                       ;;
-               esac
-       done
-       deplibs="$tmp_deplibs"
-
-       if test -n "$convenience"; then
-         if test -n "$whole_archive_flag_spec"; then
-           save_libobjs=$libobjs
-           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-         else
-           gentop="$output_objdir/${outputname}x"
-           $show "${rm}r $gentop"
-           $run ${rm}r "$gentop"
-           $show "$mkdir $gentop"
-           $run $mkdir "$gentop"
-           status=$?
-           if test "$status" -ne 0 && test ! -d "$gentop"; then
-             exit $status
-           fi
-           generated="$generated $gentop"
-
-           for xlib in $convenience; do
-             # Extract the objects.
-             case $xlib in
-             [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-             *) xabs=`pwd`"/$xlib" ;;
-             esac
-             xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-             xdir="$gentop/$xlib"
-
-             $show "${rm}r $xdir"
-             $run ${rm}r "$xdir"
-             $show "$mkdir $xdir"
-             $run $mkdir "$xdir"
-             status=$?
-             if test "$status" -ne 0 && test ! -d "$xdir"; then
-               exit $status
-             fi
-             # We will extract separately just the conflicting names and we will no
-             # longer touch any unique names. It is faster to leave these extract
-             # automatically by $AR in one run.
-             $show "(cd $xdir && $AR x $xabs)"
-             $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-             if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-               :
-             else
-               $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-               $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-               $AR t "$xabs" | sort | uniq -cd | while read -r count name
-               do
-                 i=1
-                 while test "$i" -le "$count"
-                 do
-                  # Put our $i before any first dot (extension)
-                  # Never overwrite any file
-                  name_to="$name"
-                  while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-                  do
-                    name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-                  done
-                  $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-                  $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-                  i=`expr $i + 1`
-                 done
-               done
-             fi
-
-             libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-           done
-         fi
-       fi
-
-       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-         eval flag=\"$thread_safe_flag_spec\"
-         linker_flags="$linker_flags $flag"
-       fi
-
-       # Make a backup of the uninstalled library when relinking
-       if test "$mode" = relink; then
-         $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-       fi
-
-       # Do each of the archive commands.
-       if test "$module" = yes && test -n "$module_cmds" ; then
-         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-           eval test_cmds=\"$module_expsym_cmds\"
-           cmds=$module_expsym_cmds
-         else
-           eval test_cmds=\"$module_cmds\"
-           cmds=$module_cmds
-         fi
-       else
-       if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-         eval test_cmds=\"$archive_expsym_cmds\"
-         cmds=$archive_expsym_cmds
-       else
-         eval test_cmds=\"$archive_cmds\"
-         cmds=$archive_cmds
-         fi
-       fi
-
-       if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
-          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-         :
-       else
-         # The command line is too long to link in one step, link piecewise.
-         $echo "creating reloadable object files..."
-
-         # Save the value of $output and $libobjs because we want to
-         # use them later.  If we have whole_archive_flag_spec, we
-         # want to use save_libobjs as it was before
-         # whole_archive_flag_spec was expanded, because we can't
-         # assume the linker understands whole_archive_flag_spec.
-         # This may have to be revisited, in case too many
-         # convenience libraries get linked in and end up exceeding
-         # the spec.
-         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
-           save_libobjs=$libobjs
-         fi
-         save_output=$output
-
-         # Clear the reloadable object creation command queue and
-         # initialize k to one.
-         test_cmds=
-         concat_cmds=
-         objlist=
-         delfiles=
-         last_robj=
-         k=1
-         output=$output_objdir/$save_output-${k}.$objext
-         # Loop over the list of objects to be linked.
-         for obj in $save_libobjs
-         do
-           eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-           if test "X$objlist" = X ||
-              { len=`expr "X$test_cmds" : ".*"` &&
-                test "$len" -le "$max_cmd_len"; }; then
-             objlist="$objlist $obj"
-           else
-             # The command $test_cmds is almost too long, add a
-             # command to the queue.
-             if test "$k" -eq 1 ; then
-               # The first file doesn't have a previous command to add.
-               eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-             else
-               # All subsequent reloadable object files will link in
-               # the last one created.
-               eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-             fi
-             last_robj=$output_objdir/$save_output-${k}.$objext
-             k=`expr $k + 1`
-             output=$output_objdir/$save_output-${k}.$objext
-             objlist=$obj
-             len=1
-           fi
-         done
-         # Handle the remaining objects by creating one last
-         # reloadable object file.  All subsequent reloadable object
-         # files will link in the last one created.
-         test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-         eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
-         if ${skipped_export-false}; then
-           $show "generating symbol list for \`$libname.la'"
-           export_symbols="$output_objdir/$libname.exp"
-           $run $rm $export_symbols
-           libobjs=$output
-           # Append the command to create the export file.
-           eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
-          fi
-
-         # Set up a command to remove the reloadale object files
-         # after they are used.
-         i=0
-         while test "$i" -lt "$k"
-         do
-           i=`expr $i + 1`
-           delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
-         done
-
-         $echo "creating a temporary reloadable object file: $output"
-
-         # Loop through the commands generated above and execute them.
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $concat_cmds; do
-           IFS="$save_ifs"
-           $show "$cmd"
-           $run eval "$cmd" || exit $?
-         done
-         IFS="$save_ifs"
-
-         libobjs=$output
-         # Restore the value of output.
-         output=$save_output
-
-         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-         fi
-         # Expand the library linking commands again to reset the
-         # value of $libobjs for piecewise linking.
-
-         # Do each of the archive commands.
-         if test "$module" = yes && test -n "$module_cmds" ; then
-           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-             cmds=$module_expsym_cmds
-           else
-             cmds=$module_cmds
-           fi
-         else
-         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-           cmds=$archive_expsym_cmds
-         else
-           cmds=$archive_cmds
-           fi
-         fi
-
-         # Append the command to remove the reloadable object files
-         # to the just-reset $cmds.
-         eval cmds=\"\$cmds~\$rm $delfiles\"
-       fi
-       save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
-         IFS="$save_ifs"
-         eval cmd=\"$cmd\"
-         $show "$cmd"
-         $run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-
-       # Restore the uninstalled library and exit
-       if test "$mode" = relink; then
-         $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-         exit $EXIT_SUCCESS
-       fi
-
-       # Create links to the real library.
-       for linkname in $linknames; do
-         if test "$realname" != "$linkname"; then
-           $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-           $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-         fi
-       done
-
-       # If -module or -export-dynamic was specified, set the dlname.
-       if test "$module" = yes || test "$export_dynamic" = yes; then
-         # On all known operating systems, these are identical.
-         dlname="$soname"
-       fi
-      fi
-      ;;
-
-    obj)
-      if test -n "$deplibs"; then
-       $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-      fi
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-       $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-       $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-      fi
-
-      case $output in
-      *.lo)
-       if test -n "$objs$old_deplibs"; then
-         $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-         exit $EXIT_FAILURE
-       fi
-       libobj="$output"
-       obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-       ;;
-      *)
-       libobj=
-       obj="$output"
-       ;;
-      esac
-
-      # Delete the old objects.
-      $run $rm $obj $libobj
-
-      # Objects from convenience libraries.  This assumes
-      # single-version convenience libraries.  Whenever we create
-      # different ones for PIC/non-PIC, this we'll have to duplicate
-      # the extraction.
-      reload_conv_objs=
-      gentop=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec
-      wl=
-
-      if test -n "$convenience"; then
-       if test -n "$whole_archive_flag_spec"; then
-         eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-       else
-         gentop="$output_objdir/${obj}x"
-         $show "${rm}r $gentop"
-         $run ${rm}r "$gentop"
-         $show "$mkdir $gentop"
-         $run $mkdir "$gentop"
-         status=$?
-         if test "$status" -ne 0 && test ! -d "$gentop"; then
-           exit $status
-         fi
-         generated="$generated $gentop"
-
-         for xlib in $convenience; do
-           # Extract the objects.
-           case $xlib in
-           [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-           *) xabs=`pwd`"/$xlib" ;;
-           esac
-           xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-           xdir="$gentop/$xlib"
-
-           $show "${rm}r $xdir"
-           $run ${rm}r "$xdir"
-           $show "$mkdir $xdir"
-           $run $mkdir "$xdir"
-           status=$?
-           if test "$status" -ne 0 && test ! -d "$xdir"; then
-             exit $status
-           fi
-           # We will extract separately just the conflicting names and we will no
-           # longer touch any unique names. It is faster to leave these extract
-           # automatically by $AR in one run.
-           $show "(cd $xdir && $AR x $xabs)"
-           $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-           if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-             :
-           else
-             $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-             $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-             $AR t "$xabs" | sort | uniq -cd | while read -r count name
-             do
-               i=1
-               while test "$i" -le "$count"
-               do
-                # Put our $i before any first dot (extension)
-                # Never overwrite any file
-                name_to="$name"
-                while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-                do
-                  name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-                done
-                $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-                $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-                i=`expr $i + 1`
-               done
-             done
-           fi
-
-           reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-         done
-       fi
-      fi
-
-      # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-      output="$obj"
-      cmds=$reload_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-       IFS="$save_ifs"
-       eval cmd=\"$cmd\"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-       if test -n "$gentop"; then
-         $show "${rm}r $gentop"
-         $run ${rm}r $gentop
-       fi
-
-       exit $EXIT_SUCCESS
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-       if test -n "$gentop"; then
-         $show "${rm}r $gentop"
-         $run ${rm}r $gentop
-       fi
-
-       # Create an invalid libtool object if no PIC, so that we don't
-       # accidentally link it into a program.
-       # $show "echo timestamp > $libobj"
-       # $run eval "echo timestamp > $libobj" || exit $?
-       exit $EXIT_SUCCESS
-      fi
-
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
-       # Only do commands if we really have different PIC objects.
-       reload_objs="$libobjs $reload_conv_objs"
-       output="$libobj"
-       cmds=$reload_cmds
-       save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
-         IFS="$save_ifs"
-         eval cmd=\"$cmd\"
-         $show "$cmd"
-         $run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-      fi
-
-      if test -n "$gentop"; then
-       $show "${rm}r $gentop"
-       $run ${rm}r $gentop
-      fi
-
-      exit $EXIT_SUCCESS
-      ;;
-
-    prog)
-      case $host in
-       *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
-      esac
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-      fi
-
-      if test "$preload" = yes; then
-       if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
-          test "$dlopen_self_static" = unknown; then
-         $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-       fi
-      fi
-
-      case $host in
-      *-*-rhapsody* | *-*-darwin1.[012])
-       # On Rhapsody replace the C library is the System framework
-       compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-       finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-       ;;
-      esac
-
-      case $host in
-      *darwin*)
-        # Don't allow lazy linking, it breaks C++ global constructors
-        if test "$tagname" = CXX ; then
-        compile_command="$compile_command ${wl}-bind_at_load"
-        finalize_command="$finalize_command ${wl}-bind_at_load"
-        fi
-        ;;
-      esac
-
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$finalize_command $finalize_deplibs"
-
-      if test -n "$rpath$xrpath"; then
-       # If the user specified any rpath flags, then add them.
-       for libdir in $rpath $xrpath; do
-         # This is the magic to use -rpath.
-         case "$finalize_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
-         esac
-       done
-      fi
-
-      # Now hardcode the library paths
-      rpath=
-      hardcode_libdirs=
-      for libdir in $compile_rpath $finalize_rpath; do
-       if test -n "$hardcode_libdir_flag_spec"; then
-         if test -n "$hardcode_libdir_separator"; then
-           if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
-           else
-             # Just accumulate the unique libdirs.
-             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$perm_rpath " in
-         *" $libdir "*) ;;
-         *) perm_rpath="$perm_rpath $libdir" ;;
-         esac
-       fi
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-         case :$dllsearchpath: in
-         *":$libdir:"*) ;;
-         *) dllsearchpath="$dllsearchpath:$libdir";;
-         esac
-         ;;
-       esac
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-        test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
-       eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      compile_rpath="$rpath"
-
-      rpath=
-      hardcode_libdirs=
-      for libdir in $finalize_rpath; do
-       if test -n "$hardcode_libdir_flag_spec"; then
-         if test -n "$hardcode_libdir_separator"; then
-           if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
-           else
-             # Just accumulate the unique libdirs.
-             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$finalize_perm_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-         esac
-       fi
-      done
-      # Substitute the hardcoded libdirs into the rpath.
-      if test -n "$hardcode_libdir_separator" &&
-        test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
-       eval rpath=\" $hardcode_libdir_flag_spec\"
-      fi
-      finalize_rpath="$rpath"
-
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
-       # Transform all the library objects into standard objects.
-       compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-       finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-      fi
-
-      dlsyms=
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       if test -n "$NM" && test -n "$global_symbol_pipe"; then
-         dlsyms="${outputname}S.c"
-       else
-         $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-       fi
-      fi
-
-      if test -n "$dlsyms"; then
-       case $dlsyms in
-       "") ;;
-       *.c)
-         # Discover the nlist of each of the dlfiles.
-         nlist="$output_objdir/${outputname}.nm"
-
-         $show "$rm $nlist ${nlist}S ${nlist}T"
-         $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
-         # Parse the name list into a source file.
-         $show "creating $output_objdir/$dlsyms"
-
-         test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
-         if test "$dlself" = yes; then
-           $show "generating symbol list for \`$output'"
-
-           test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
-           # Add our own program objects to the symbol list.
-           progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-           for arg in $progfiles; do
-             $show "extracting global C symbols from \`$arg'"
-             $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-           done
-
-           if test -n "$exclude_expsyms"; then
-             $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-             $run eval '$mv "$nlist"T "$nlist"'
-           fi
-
-           if test -n "$export_symbols_regex"; then
-             $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-             $run eval '$mv "$nlist"T "$nlist"'
-           fi
-
-           # Prepare the list of exported symbols
-           if test -z "$export_symbols"; then
-             export_symbols="$output_objdir/$output.exp"
-             $run $rm $export_symbols
-             $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-           else
-             $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
-             $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
-             $run eval 'mv "$nlist"T "$nlist"'
-           fi
-         fi
-
-         for arg in $dlprefiles; do
-           $show "extracting global C symbols from \`$arg'"
-           name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
-           $run eval '$echo ": $name " >> "$nlist"'
-           $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-         done
-
-         if test -z "$run"; then
-           # Make sure we have at least an empty file.
-           test -f "$nlist" || : > "$nlist"
-
-           if test -n "$exclude_expsyms"; then
-             $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-             $mv "$nlist"T "$nlist"
-           fi
-
-           # Try sorting and uniquifying the output.
-           if grep -v "^: " < "$nlist" |
-               if sort -k 3 </dev/null >/dev/null 2>&1; then
-                 sort -k 3
-               else
-                 sort +2
-               fi |
-               uniq > "$nlist"S; then
-             :
-           else
-             grep -v "^: " < "$nlist" > "$nlist"S
-           fi
-
-           if test -f "$nlist"S; then
-             eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
-           else
-             $echo '/* NONE */' >> "$output_objdir/$dlsyms"
-           fi
-
-           $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
-           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
-           $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-         fi
-
-         pic_flag_for_symtable=
-         case $host in
-         # compiling the symbol table file with pic_flag works around
-         # a FreeBSD bug that causes programs to crash when -lm is
-         # linked before any other PIC object.  But we must not use
-         # pic_flag when linking with -static.  The problem exists in
-         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-           case "$compile_command " in
-           *" -static "*) ;;
-           *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
-           esac;;
-         *-*-hpux*)
-           case "$compile_command " in
-           *" -static "*) ;;
-           *) pic_flag_for_symtable=" $pic_flag";;
-           esac
-         esac
-
-         # Now compile the dynamic symbol file.
-         $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-         $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
-         # Clean up the generated files.
-         $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-         $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
-         # Transform the symbol file into the correct name.
-         compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-         finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-         ;;
-       *)
-         $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-      else
-       # We keep going just in case the user didn't refer to
-       # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
-       # really was required.
-
-       # Nullify the symbol file.
-       compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-       finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-      fi
-
-      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-       # Replace the output file specification.
-       compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-       link_command="$compile_command$compile_rpath"
-
-       # We have no uninstalled library dependencies, so finalize right now.
-       $show "$link_command"
-       $run eval "$link_command"
-       status=$?
-
-       # Delete the generated files.
-       if test -n "$dlsyms"; then
-         $show "$rm $output_objdir/${outputname}S.${objext}"
-         $run $rm "$output_objdir/${outputname}S.${objext}"
-       fi
-
-       exit $status
-      fi
-
-      if test -n "$shlibpath_var"; then
-       # We should set the shlibpath_var
-       rpath=
-       for dir in $temp_rpath; do
-         case $dir in
-         [\\/]* | [A-Za-z]:[\\/]*)
-           # Absolute path.
-           rpath="$rpath$dir:"
-           ;;
-         *)
-           # Relative path: add a thisdir entry.
-           rpath="$rpath\$thisdir/$dir:"
-           ;;
-         esac
-       done
-       temp_rpath="$rpath"
-      fi
-
-      if test -n "$compile_shlibpath$finalize_shlibpath"; then
-       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-      fi
-      if test -n "$finalize_shlibpath"; then
-       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-      fi
-
-      compile_var=
-      finalize_var=
-      if test -n "$runpath_var"; then
-       if test -n "$perm_rpath"; then
-         # We should set the runpath_var.
-         rpath=
-         for dir in $perm_rpath; do
-           rpath="$rpath$dir:"
-         done
-         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-       fi
-       if test -n "$finalize_perm_rpath"; then
-         # We should set the runpath_var.
-         rpath=
-         for dir in $finalize_perm_rpath; do
-           rpath="$rpath$dir:"
-         done
-         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-       fi
-      fi
-
-      if test "$no_install" = yes; then
-       # We don't need to create a wrapper script.
-       link_command="$compile_var$compile_command$compile_rpath"
-       # Replace the output file specification.
-       link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-       # Delete the old output file.
-       $run $rm $output
-       # Link the executable and exit
-       $show "$link_command"
-       $run eval "$link_command" || exit $?
-       exit $EXIT_SUCCESS
-      fi
-
-      if test "$hardcode_action" = relink; then
-       # Fast installation is not supported
-       link_command="$compile_var$compile_command$compile_rpath"
-       relink_command="$finalize_var$finalize_command$finalize_rpath"
-
-       $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-       $echo "$modename: \`$output' will be relinked during installation" 1>&2
-      else
-       if test "$fast_install" != no; then
-         link_command="$finalize_var$compile_command$finalize_rpath"
-         if test "$fast_install" = yes; then
-           relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
-         else
-           # fast_install is set to needless
-           relink_command=
-         fi
-       else
-         link_command="$compile_var$compile_command$compile_rpath"
-         relink_command="$finalize_var$finalize_command$finalize_rpath"
-       fi
-      fi
-
-      # Replace the output file specification.
-      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
-      # Delete the old output files.
-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      $show "$link_command"
-      $run eval "$link_command" || exit $?
-
-      # Now create the wrapper script.
-      $show "creating $output"
-
-      # Quote the relink command for shipping.
-      if test -n "$relink_command"; then
-       # Preserve any variables that may affect compiler behavior
-       for var in $variables_saved_for_relink; do
-         if eval test -z \"\${$var+set}\"; then
-           relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-         elif eval var_value=\$$var; test -z "$var_value"; then
-           relink_command="$var=; export $var; $relink_command"
-         else
-           var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-           relink_command="$var=\"$var_value\"; export $var; $relink_command"
-         fi
-       done
-       relink_command="(cd `pwd`; $relink_command)"
-       relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Quote $echo for shipping.
-      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
-       case $progpath in
-       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-       esac
-       qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-       qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Only actually do things if our run command is non-null.
-      if test -z "$run"; then
-       # win32 will think the script is a binary if it has
-       # a .exe suffix, so we strip it off here.
-       case $output in
-         *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
-       esac
-       # test for cygwin because mv fails w/o .exe extensions
-       case $host in
-         *cygwin*)
-           exeext=.exe
-           outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
-         *) exeext= ;;
-       esac
-       case $host in
-         *cygwin* | *mingw* )
-           cwrappersource=`$echo ${objdir}/lt-${output}.c`
-           cwrapper=`$echo ${output}.exe`
-           $rm $cwrappersource $cwrapper
-           trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-
-           cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
-   The $output program cannot be directly executed until all the libtool
-   libraries that it depends on are installed.
-
-   This wrapper executable should never be moved out of the build directory.
-   If it is, it will not operate correctly.
-
-   Currently, it simply execs the wrapper *script* "/bin/sh $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
-*/
-EOF
-           cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
-#define HAVE_DOS_BASED_FILE_SYSTEM
-#ifndef DIR_SEPARATOR_2
-#define DIR_SEPARATOR_2 '\\'
-#endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
-        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-char * basename (const char *name);
-char * fnqualify(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
-  char **newargz;
-  int i;
-
-  program_name = (char *) xstrdup ((char *) basename (argv[0]));
-  newargz = XMALLOC(char *, argc+2);
-EOF
-
-           cat >> $cwrappersource <<EOF
-  newargz[0] = "$SHELL";
-EOF
-
-           cat >> $cwrappersource <<"EOF"
-  newargz[1] = fnqualify(argv[0]);
-  /* we know the script has the same name, without the .exe */
-  /* so make sure newargz[1] doesn't end in .exe */
-  strendzap(newargz[1],".exe");
-  for (i = 1; i < argc; i++)
-    newargz[i+1] = xstrdup(argv[i]);
-  newargz[argc+1] = NULL;
-EOF
-
-           cat >> $cwrappersource <<EOF
-  execv("$SHELL",newargz);
-EOF
-
-           cat >> $cwrappersource <<"EOF"
-}
-
-void *
-xmalloc (size_t num)
-{
-  void * p = (void *) malloc (num);
-  if (!p)
-    lt_fatal ("Memory exhausted");
-
-  return p;
-}
-
-char *
-xstrdup (const char *string)
-{
-  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-;
-}
-
-char *
-basename (const char *name)
-{
-  const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  /* Skip over the disk name in MSDOS pathnames. */
-  if (isalpha (name[0]) && name[1] == ':')
-    name += 2;
-#endif
-
-  for (base = name; *name; name++)
-    if (IS_DIR_SEPARATOR (*name))
-      base = name + 1;
-  return (char *) base;
-}
-
-char *
-fnqualify(const char *path)
-{
-  size_t size;
-  char *p;
-  char tmp[LT_PATHMAX + 1];
-
-  assert(path != NULL);
-
-  /* Is it qualified already? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-  if (isalpha (path[0]) && path[1] == ':')
-    return xstrdup (path);
-#endif
-  if (IS_DIR_SEPARATOR (path[0]))
-    return xstrdup (path);
-
-  /* prepend the current directory */
-  /* doesn't handle '~' */
-  if (getcwd (tmp, LT_PATHMAX) == NULL)
-    lt_fatal ("getcwd failed");
-  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
-  p = XMALLOC(char, size);
-  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
-  return p;
-}
-
-char *
-strendzap(char *str, const char *pat)
-{
-  size_t len, patlen;
-
-  assert(str != NULL);
-  assert(pat != NULL);
-
-  len = strlen(str);
-  patlen = strlen(pat);
-
-  if (patlen <= len)
-  {
-    str += len - patlen;
-    if (strcmp(str, pat) == 0)
-      *str = '\0';
-  }
-  return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
-          const char * message, va_list ap)
-{
-  fprintf (stderr, "%s: %s: ", program_name, mode);
-  vfprintf (stderr, message, ap);
-  fprintf (stderr, ".\n");
-
-  if (exit_status >= 0)
-    exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
-  va_list ap;
-  va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-  va_end (ap);
-}
-EOF
-         # we should really use a build-platform specific compiler
-         # here, but OTOH, the wrappers (shell script and this C one)
-         # are only useful if you want to execute the "real" binary.
-         # Since the "real" binary is built for $host, then this
-         # wrapper might as well be built for $host, too.
-         $run $LTCC -s -o $cwrapper $cwrappersource
-         ;;
-       esac
-       $rm $output
-       trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
-       $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# The $output program cannot be directly executed until all the libtool
-# libraries that it depends on are installed.
-#
-# This wrapper script should never be moved out of the build directory.
-# If it is, it will not operate correctly.
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
-
-relink_command=\"$relink_command\"
-
-# This environment variable determines our operation mode.
-if test \"\$libtool_install_magic\" = \"$magic\"; then
-  # install mode needs the following variable:
-  notinst_deplibs='$notinst_deplibs'
-else
-  # When we are sourced in execute mode, \$file and \$echo are already set.
-  if test \"\$libtool_execute_magic\" != \"$magic\"; then
-    echo=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$echo works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$echo will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
-"
-       $echo >> $output "\
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-
-  # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
-  while test -n \"\$file\"; do
-    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-
-    # If there was a directory component, then change thisdir.
-    if test \"x\$destdir\" != \"x\$file\"; then
-      case \"\$destdir\" in
-      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-      *) thisdir=\"\$thisdir/\$destdir\" ;;
-      esac
-    fi
-
-    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
-  done
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-       if test "$fast_install" = yes; then
-         $echo >> $output "\
-  program=lt-'$outputname'$exeext
-  progdir=\"\$thisdir/$objdir\"
-
-  if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-
-    file=\"\$\$-\$program\"
-
-    if test ! -d \"\$progdir\"; then
-      $mkdir \"\$progdir\"
-    else
-      $rm \"\$progdir/\$file\"
-    fi"
-
-         $echo >> $output "\
-
-    # relink executable if necessary
-    if test -n \"\$relink_command\"; then
-      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-      else
-       $echo \"\$relink_command_output\" >&2
-       $rm \"\$progdir/\$file\"
-       exit $EXIT_FAILURE
-      fi
-    fi
-
-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $rm \"\$progdir/\$program\";
-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $rm \"\$progdir/\$file\"
-  fi"
-       else
-         $echo >> $output "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-       fi
-
-       $echo >> $output "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-       # Export our shlibpath_var if we have one.
-       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-         $echo >> $output "\
-    # Add our own library path to $shlibpath_var
-    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-
-    # Some systems cannot cope with colon-terminated $shlibpath_var
-    # The second colon is a workaround for a bug in BeOS R4 sed
-    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-       fi
-
-       # fixup the dll searchpath if we need to.
-       if test -n "$dllsearchpath"; then
-         $echo >> $output "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-       fi
-
-       $echo >> $output "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-"
-       case $host in
-       # Backslashes separate directories on plain windows
-       *-*-mingw | *-*-os2*)
-         $echo >> $output "\
-      exec \$progdir\\\\\$program \${1+\"\$@\"}
-"
-         ;;
-
-       *)
-         $echo >> $output "\
-      exec \$progdir/\$program \${1+\"\$@\"}
-"
-         ;;
-       esac
-       $echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-      exit $EXIT_FAILURE
-    fi
-  else
-    # The program doesn't exist.
-    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
-    \$echo \"This script is just a wrapper for \$program.\" 1>&2
-    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit $EXIT_FAILURE
-  fi
-fi\
-"
-       chmod +x $output
-      fi
-      exit $EXIT_SUCCESS
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-       oldobjs="$libobjs_save"
-       addlibs="$convenience"
-       build_libtool_libs=no
-      else
-       if test "$build_libtool_libs" = module; then
-         oldobjs="$libobjs_save"
-         build_libtool_libs=no
-       else
-         oldobjs="$old_deplibs $non_pic_objects"
-       fi
-       addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-       gentop="$output_objdir/${outputname}x"
-       $show "${rm}r $gentop"
-       $run ${rm}r "$gentop"
-       $show "$mkdir $gentop"
-       $run $mkdir "$gentop"
-       status=$?
-       if test "$status" -ne 0 && test ! -d "$gentop"; then
-         exit $status
-       fi
-       generated="$generated $gentop"
-
-       # Add in members from convenience archives.
-       for xlib in $addlibs; do
-         # Extract the objects.
-         case $xlib in
-         [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
-         *) xabs=`pwd`"/$xlib" ;;
-         esac
-         xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
-         xdir="$gentop/$xlib"
-
-         $show "${rm}r $xdir"
-         $run ${rm}r "$xdir"
-         $show "$mkdir $xdir"
-         $run $mkdir "$xdir"
-         status=$?
-         if test "$status" -ne 0 && test ! -d "$xdir"; then
-           exit $status
-         fi
-         # We will extract separately just the conflicting names and we will no
-         # longer touch any unique names. It is faster to leave these extract
-         # automatically by $AR in one run.
-         $show "(cd $xdir && $AR x $xabs)"
-         $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
-         if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
-           :
-         else
-           $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
-           $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
-           $AR t "$xabs" | sort | uniq -cd | while read -r count name
-           do
-             i=1
-             while test "$i" -le "$count"
-             do
-              # Put our $i before any first dot (extension)
-              # Never overwrite any file
-              name_to="$name"
-              while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
-              do
-                name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
-              done
-              $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
-              $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
-              i=`expr $i + 1`
-             done
-           done
-         fi
-
-         oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
-       done
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-       cmds=$old_archive_from_new_cmds
-      else
-       eval cmds=\"$old_archive_cmds\"
-
-       if len=`expr "X$cmds" : ".*"` &&
-            test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-         cmds=$old_archive_cmds
-       else
-         # the command line is too long to link in one step, link in parts
-         $echo "using piecewise archive linking..."
-         save_RANLIB=$RANLIB
-         RANLIB=:
-         objlist=
-         concat_cmds=
-         save_oldobjs=$oldobjs
-         # GNU ar 2.10+ was changed to match POSIX; thus no paths are
-         # encoded into archives.  This makes 'ar r' malfunction in
-         # this piecewise linking case whenever conflicting object
-         # names appear in distinct ar calls; check, warn and compensate.
-           if (for obj in $save_oldobjs
-           do
-             $echo "X$obj" | $Xsed -e 's%^.*/%%'
-           done | sort | sort -uc >/dev/null 2>&1); then
-           :
-         else
-           $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
-           $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
-           AR_FLAGS=cq
-         fi
-         # Is there a better way of finding the last object in the list?
-         for obj in $save_oldobjs
-         do
-           last_oldobj=$obj
-         done
-         for obj in $save_oldobjs
-         do
-           oldobjs="$objlist $obj"
-           objlist="$objlist $obj"
-           eval test_cmds=\"$old_archive_cmds\"
-           if len=`expr "X$test_cmds" : ".*"` &&
-              test "$len" -le "$max_cmd_len"; then
-             :
-           else
-             # the above command should be used before it gets too long
-             oldobjs=$objlist
-             if test "$obj" = "$last_oldobj" ; then
-               RANLIB=$save_RANLIB
-             fi
-             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-             objlist=
-           fi
-         done
-         RANLIB=$save_RANLIB
-         oldobjs=$objlist
-         if test "X$oldobjs" = "X" ; then
-           eval cmds=\"\$concat_cmds\"
-         else
-           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-         fi
-       fi
-      fi
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-        eval cmd=\"$cmd\"
-       IFS="$save_ifs"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$generated"; then
-      $show "${rm}r$generated"
-      $run ${rm}r$generated
-    fi
-
-    # Now create the libtool archive.
-    case $output in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      $show "creating $output"
-
-      # Preserve any variables that may affect compiler behavior
-      for var in $variables_saved_for_relink; do
-       if eval test -z \"\${$var+set}\"; then
-         relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-       elif eval var_value=\$$var; test -z "$var_value"; then
-         relink_command="$var=; export $var; $relink_command"
-       else
-         var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-         relink_command="$var=\"$var_value\"; export $var; $relink_command"
-       fi
-      done
-      # Quote the link command for shipping.
-      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
-       relink_command=
-      fi
-
-
-      # Only create the output if not a dry run.
-      if test -z "$run"; then
-       for installed in no yes; do
-         if test "$installed" = yes; then
-           if test -z "$install_libdir"; then
-             break
-           fi
-           output="$output_objdir/$outputname"i
-           # Replace all uninstalled libtool libraries with the installed ones
-           newdependency_libs=
-           for deplib in $dependency_libs; do
-             case $deplib in
-             *.la)
-               name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-               if test -z "$libdir"; then
-                 $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-                 exit $EXIT_FAILURE
-               fi
-               newdependency_libs="$newdependency_libs $libdir/$name"
-               ;;
-             *) newdependency_libs="$newdependency_libs $deplib" ;;
-             esac
-           done
-           dependency_libs="$newdependency_libs"
-           newdlfiles=
-           for lib in $dlfiles; do
-             name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-             if test -z "$libdir"; then
-               $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-               exit $EXIT_FAILURE
-             fi
-             newdlfiles="$newdlfiles $libdir/$name"
-           done
-           dlfiles="$newdlfiles"
-           newdlprefiles=
-           for lib in $dlprefiles; do
-             name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-             if test -z "$libdir"; then
-               $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-               exit $EXIT_FAILURE
-             fi
-             newdlprefiles="$newdlprefiles $libdir/$name"
-           done
-           dlprefiles="$newdlprefiles"
-         else
-           newdlfiles=
-           for lib in $dlfiles; do
-             case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-               *) abs=`pwd`"/$lib" ;;
-             esac
-             newdlfiles="$newdlfiles $abs"
-           done
-           dlfiles="$newdlfiles"
-           newdlprefiles=
-           for lib in $dlprefiles; do
-             case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-               *) abs=`pwd`"/$lib" ;;
-             esac
-             newdlprefiles="$newdlprefiles $abs"
-           done
-           dlprefiles="$newdlprefiles"
-         fi
-         $rm $output
-         # place dlname in correct position for cygwin
-         tdlname=$dlname
-         case $host,$output,$installed,$module,$dlname in
-           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-         esac
-         $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# The name that we can dlopen(3).
-dlname='$tdlname'
-
-# Names of this library.
-library_names='$library_names'
-
-# The name of the static archive.
-old_library='$old_library'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_libs'
-
-# Version information for $libname.
-current=$current
-age=$age
-revision=$revision
-
-# Is this an already installed library?
-installed=$installed
-
-# Should we warn about portability when linking against -modules?
-shouldnotlink=$module
-
-# Files to dlopen/dlpreopen
-dlopen='$dlfiles'
-dlpreopen='$dlprefiles'
-
-# Directory that this library needs to be installed in:
-libdir='$install_libdir'"
-         if test "$installed" = no && test "$need_relink" = yes; then
-           $echo >> $output "\
-relink_command=\"$relink_command\""
-         fi
-       done
-      fi
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
-      ;;
-    esac
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool install mode
-  install)
-    modename="$modename: install"
-
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-       # Allow the use of GNU shtool's install command.
-       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
-      # Aesthetically quote it.
-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
-       arg="\"$arg\""
-       ;;
-      esac
-      install_prog="$arg "
-      arg="$1"
-      shift
-    else
-      install_prog=
-      arg="$nonopt"
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case $arg in
-    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \      ]*|*]*)
-      arg="\"$arg\""
-      ;;
-    esac
-    install_prog="$install_prog$arg"
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    for arg
-    do
-      if test -n "$dest"; then
-       files="$files $dest"
-       dest="$arg"
-       continue
-      fi
-
-      case $arg in
-      -d) isdir=yes ;;
-      -f) prev="-f" ;;
-      -g) prev="-g" ;;
-      -m) prev="-m" ;;
-      -o) prev="-o" ;;
-      -s)
-       stripme=" -s"
-       continue
-       ;;
-      -*) ;;
-
-      *)
-       # If the previous option needed an argument, then skip it.
-       if test -n "$prev"; then
-         prev=
-       else
-         dest="$arg"
-         continue
-       fi
-       ;;
-      esac
-
-      # Aesthetically quote the argument.
-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*)
-       arg="\"$arg\""
-       ;;
-      esac
-      install_prog="$install_prog $arg"
-    done
-
-    if test -z "$install_prog"; then
-      $echo "$modename: you must specify an install program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-       $echo "$modename: no file or destination specified" 1>&2
-      else
-       $echo "$modename: you must specify a destination" 1>&2
-      fi
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Strip any trailing slash from the destination.
-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$destdir" = "X$dest" && destdir=.
-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files
-      if test "$#" -gt 2; then
-       $echo "$modename: \`$dest' is not a directory" 1>&2
-       $echo "$help" 1>&2
-       exit $EXIT_FAILURE
-      fi
-    fi
-    case $destdir in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-       case $file in
-       *.lo) ;;
-       *)
-         $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-      done
-      ;;
-    esac
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    staticlibs=
-    future_libdirs=
-    current_libdirs=
-    for file in $files; do
-
-      # Do each installation.
-      case $file in
-      *.$libext)
-       # Do the static libraries later.
-       staticlibs="$staticlibs $file"
-       ;;
-
-      *.la)
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       library_names=
-       old_library=
-       relink_command=
-       # If there is no directory component, then add one.
-       case $file in
-       */* | *\\*) . $file ;;
-       *) . ./$file ;;
-       esac
-
-       # Add the libdir to current_libdirs if it is the destination.
-       if test "X$destdir" = "X$libdir"; then
-         case "$current_libdirs " in
-         *" $libdir "*) ;;
-         *) current_libdirs="$current_libdirs $libdir" ;;
-         esac
-       else
-         # Note the libdir as a future libdir.
-         case "$future_libdirs " in
-         *" $libdir "*) ;;
-         *) future_libdirs="$future_libdirs $libdir" ;;
-         esac
-       fi
-
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
-       test "X$dir" = "X$file/" && dir=
-       dir="$dir$objdir"
-
-       if test -n "$relink_command"; then
-         # Determine the prefix the user has applied to our future dir.
-         inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-
-         # Don't allow the user to place us outside of our expected
-         # location b/c this prevents finding dependent libraries that
-         # are installed to the same prefix.
-         # At present, this check doesn't affect windows .dll's that
-         # are installed into $libdir/../bin (currently, that works fine)
-         # but it's something to keep an eye on.
-         if test "$inst_prefix_dir" = "$destdir"; then
-           $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         if test -n "$inst_prefix_dir"; then
-           # Stick the inst_prefix_dir data into the link command.
-           relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-         else
-           relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-         fi
-
-         $echo "$modename: warning: relinking \`$file'" 1>&2
-         $show "$relink_command"
-         if $run eval "$relink_command"; then :
-         else
-           $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-           exit $EXIT_FAILURE
-         fi
-       fi
-
-       # See the names of the shared library.
-       set dummy $library_names
-       if test -n "$2"; then
-         realname="$2"
-         shift
-         shift
-
-         srcname="$realname"
-         test -n "$relink_command" && srcname="$realname"T
-
-         # Install the shared library and build the symlinks.
-         $show "$install_prog $dir/$srcname $destdir/$realname"
-         $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
-         if test -n "$stripme" && test -n "$striplib"; then
-           $show "$striplib $destdir/$realname"
-           $run eval "$striplib $destdir/$realname" || exit $?
-         fi
-
-         if test "$#" -gt 0; then
-           # Delete the old symlinks, and create new ones.
-           for linkname
-           do
-             if test "$linkname" != "$realname"; then
-               $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-               $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
-             fi
-           done
-         fi
-
-         # Do each command in the postinstall commands.
-         lib="$destdir/$realname"
-         cmds=$postinstall_cmds
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
-           IFS="$save_ifs"
-           eval cmd=\"$cmd\"
-           $show "$cmd"
-           $run eval "$cmd" || exit $?
-         done
-         IFS="$save_ifs"
-       fi
-
-       # Install the pseudo-library for information purposes.
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-       instname="$dir/$name"i
-       $show "$install_prog $instname $destdir/$name"
-       $run eval "$install_prog $instname $destdir/$name" || exit $?
-
-       # Maybe install the static library, too.
-       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-       ;;
-
-      *.lo)
-       # Install (i.e. copy) a libtool object.
-
-       # Figure out destination file name, if it wasn't already specified.
-       if test -n "$destname"; then
-         destfile="$destdir/$destname"
-       else
-         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-         destfile="$destdir/$destfile"
-       fi
-
-       # Deduce the name of the destination old-style object file.
-       case $destfile in
-       *.lo)
-         staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-         ;;
-       *.$objext)
-         staticdest="$destfile"
-         destfile=
-         ;;
-       *)
-         $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       # Install the libtool object if requested.
-       if test -n "$destfile"; then
-         $show "$install_prog $file $destfile"
-         $run eval "$install_prog $file $destfile" || exit $?
-       fi
-
-       # Install the old object if enabled.
-       if test "$build_old_libs" = yes; then
-         # Deduce the name of the old-style object file.
-         staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
-         $show "$install_prog $staticobj $staticdest"
-         $run eval "$install_prog \$staticobj \$staticdest" || exit $?
-       fi
-       exit $EXIT_SUCCESS
-       ;;
-
-      *)
-       # Figure out destination file name, if it wasn't already specified.
-       if test -n "$destname"; then
-         destfile="$destdir/$destname"
-       else
-         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-         destfile="$destdir/$destfile"
-       fi
-
-       # If the file is missing, and there is a .exe on the end, strip it
-       # because it is most likely a libtool script we actually want to
-       # install
-       stripped_ext=""
-       case $file in
-         *.exe)
-           if test ! -f "$file"; then
-             file=`$echo $file|${SED} 's,.exe$,,'`
-             stripped_ext=".exe"
-           fi
-           ;;
-       esac
-
-       # Do a test to see if this is really a libtool program.
-       case $host in
-       *cygwin*|*mingw*)
-           wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
-           ;;
-       *)
-           wrapper=$file
-           ;;
-       esac
-       if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
-         notinst_deplibs=
-         relink_command=
-
-         # To insure that "foo" is sourced, and not "foo.exe",
-         # finese the cygwin/MSYS system by explicitly sourcing "foo."
-         # which disallows the automatic-append-.exe behavior.
-         case $build in
-         *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-         *) wrapperdot=${wrapper} ;;
-         esac
-         # If there is no directory component, then add one.
-         case $file in
-         */* | *\\*) . ${wrapperdot} ;;
-         *) . ./${wrapperdot} ;;
-         esac
-
-         # Check the variables that should have been set.
-         if test -z "$notinst_deplibs"; then
-           $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         finalize=yes
-         for lib in $notinst_deplibs; do
-           # Check to see that each library is installed.
-           libdir=
-           if test -f "$lib"; then
-             # If there is no directory component, then add one.
-             case $lib in
-             */* | *\\*) . $lib ;;
-             *) . ./$lib ;;
-             esac
-           fi
-           libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
-           if test -n "$libdir" && test ! -f "$libfile"; then
-             $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-             finalize=no
-           fi
-         done
-
-         relink_command=
-         # To insure that "foo" is sourced, and not "foo.exe",
-         # finese the cygwin/MSYS system by explicitly sourcing "foo."
-         # which disallows the automatic-append-.exe behavior.
-         case $build in
-         *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
-         *) wrapperdot=${wrapper} ;;
-         esac
-         # If there is no directory component, then add one.
-         case $file in
-         */* | *\\*) . ${wrapperdot} ;;
-         *) . ./${wrapperdot} ;;
-         esac
-
-         outputname=
-         if test "$fast_install" = no && test -n "$relink_command"; then
-           if test "$finalize" = yes && test -z "$run"; then
-             tmpdir="/tmp"
-             test -n "$TMPDIR" && tmpdir="$TMPDIR"
-             tmpdir="$tmpdir/libtool-$$"
-             save_umask=`umask`
-             umask 0077
-             if $mkdir "$tmpdir"; then
-               umask $save_umask
-             else
-               umask $save_umask
-               $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
-               continue
-             fi
-             file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
-             outputname="$tmpdir/$file"
-             # Replace the output file specification.
-             relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-
-             $show "$relink_command"
-             if $run eval "$relink_command"; then :
-             else
-               $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-               ${rm}r "$tmpdir"
-               continue
-             fi
-             file="$outputname"
-           else
-             $echo "$modename: warning: cannot relink \`$file'" 1>&2
-           fi
-         else
-           # Install the binary that we compiled earlier.
-           file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
-         fi
-       fi
-
-       # remove .exe since cygwin /usr/bin/install will append another
-       # one anyways
-       case $install_prog,$host in
-       */usr/bin/install*,*cygwin*)
-         case $file:$destfile in
-         *.exe:*.exe)
-           # this is ok
-           ;;
-         *.exe:*)
-           destfile=$destfile.exe
-           ;;
-         *:*.exe)
-           destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
-           ;;
-         esac
-         ;;
-       esac
-       $show "$install_prog$stripme $file $destfile"
-       $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-       test -n "$outputname" && ${rm}r "$tmpdir"
-       ;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-
-      $show "$install_prog $file $oldlib"
-      $run eval "$install_prog \$file \$oldlib" || exit $?
-
-      if test -n "$stripme" && test -n "$old_striplib"; then
-       $show "$old_striplib $oldlib"
-       $run eval "$old_striplib $oldlib" || exit $?
-      fi
-
-      # Do each command in the postinstall commands.
-      cmds=$old_postinstall_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-       IFS="$save_ifs"
-       eval cmd=\"$cmd\"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$future_libdirs"; then
-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-    fi
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-    else
-      exit $EXIT_SUCCESS
-    fi
-    ;;
-
-  # libtool finish mode
-  finish)
-    modename="$modename: finish"
-    libdirs="$nonopt"
-    admincmds=
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-       libdirs="$libdirs $dir"
-      done
-
-      for libdir in $libdirs; do
-       if test -n "$finish_cmds"; then
-         # Do each command in the finish commands.
-         cmds=$finish_cmds
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
-           IFS="$save_ifs"
-           eval cmd=\"$cmd\"
-           $show "$cmd"
-           $run eval "$cmd" || admincmds="$admincmds
-       $cmd"
-         done
-         IFS="$save_ifs"
-       fi
-       if test -n "$finish_eval"; then
-         # Do the single finish_eval.
-         eval cmds=\"$finish_eval\"
-         $run eval "$cmds" || admincmds="$admincmds
-       $cmds"
-       fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    test "$show" = : && exit $EXIT_SUCCESS
-
-    $echo "----------------------------------------------------------------------"
-    $echo "Libraries have been installed in:"
-    for libdir in $libdirs; do
-      $echo "   $libdir"
-    done
-    $echo
-    $echo "If you ever happen to want to link against installed libraries"
-    $echo "in a given directory, LIBDIR, you must either use libtool, and"
-    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-    $echo "flag during linking and do at least one of the following:"
-    if test -n "$shlibpath_var"; then
-      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      $echo "     during execution"
-    fi
-    if test -n "$runpath_var"; then
-      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-      $echo "     during linking"
-    fi
-    if test -n "$hardcode_libdir_flag_spec"; then
-      libdir=LIBDIR
-      eval flag=\"$hardcode_libdir_flag_spec\"
-
-      $echo "   - use the \`$flag' linker flag"
-    fi
-    if test -n "$admincmds"; then
-      $echo "   - have your system administrator run these commands:$admincmds"
-    fi
-    if test -f /etc/ld.so.conf; then
-      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-    fi
-    $echo
-    $echo "See any operating system documentation about shared libraries for"
-    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    $echo "----------------------------------------------------------------------"
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool execute mode
-  execute)
-    modename="$modename: execute"
-
-    # The first argument is the command name.
-    cmd="$nonopt"
-    if test -z "$cmd"; then
-      $echo "$modename: you must specify a COMMAND" 1>&2
-      $echo "$help"
-      exit $EXIT_FAILURE
-    fi
-
-    # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
-      if test ! -f "$file"; then
-       $echo "$modename: \`$file' is not a file" 1>&2
-       $echo "$help" 1>&2
-       exit $EXIT_FAILURE
-      fi
-
-      dir=
-      case $file in
-      *.la)
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # Read the libtool library.
-       dlname=
-       library_names=
-
-       # If there is no directory component, then add one.
-       case $file in
-       */* | *\\*) . $file ;;
-       *) . ./$file ;;
-       esac
-
-       # Skip this library if it cannot be dlopened.
-       if test -z "$dlname"; then
-         # Warn if it was a shared library.
-         test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-         continue
-       fi
-
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-
-       if test -f "$dir/$objdir/$dlname"; then
-         dir="$dir/$objdir"
-       else
-         $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-         exit $EXIT_FAILURE
-       fi
-       ;;
-
-      *.lo)
-       # Just add the directory containing the .lo file.
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-       ;;
-
-      *)
-       $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-       continue
-       ;;
-      esac
-
-      # Get the absolute pathname.
-      absdir=`cd "$dir" && pwd`
-      test -n "$absdir" && dir="$absdir"
-
-      # Now add the directory to shlibpath_var.
-      if eval "test -z \"\$$shlibpath_var\""; then
-       eval "$shlibpath_var=\"\$dir\""
-      else
-       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-      fi
-    done
-
-    # This variable tells wrapper scripts just to set shlibpath_var
-    # rather than running their programs.
-    libtool_execute_magic="$magic"
-
-    # Check if any of the arguments is a wrapper script.
-    args=
-    for file
-    do
-      case $file in
-      -*) ;;
-      *)
-       # Do a test to see if this is really a libtool program.
-       if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         # If there is no directory component, then add one.
-         case $file in
-         */* | *\\*) . $file ;;
-         *) . ./$file ;;
-         esac
-
-         # Transform arg to wrapped name.
-         file="$progdir/$program"
-       fi
-       ;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-      args="$args \"$file\""
-    done
-
-    if test -z "$run"; then
-      if test -n "$shlibpath_var"; then
-       # Export the shlibpath_var.
-       eval "export $shlibpath_var"
-      fi
-
-      # Restore saved environment variables
-      if test "${save_LC_ALL+set}" = set; then
-       LC_ALL="$save_LC_ALL"; export LC_ALL
-      fi
-      if test "${save_LANG+set}" = set; then
-       LANG="$save_LANG"; export LANG
-      fi
-
-      # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # Display what would be done.
-      if test -n "$shlibpath_var"; then
-       eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-       $echo "export $shlibpath_var"
-      fi
-      $echo "$cmd$args"
-      exit $EXIT_SUCCESS
-    fi
-    ;;
-
-  # libtool clean and uninstall mode
-  clean | uninstall)
-    modename="$modename: $mode"
-    rm="$nonopt"
-    files=
-    rmforce=
-    exit_status=0
-
-    # This variable tells wrapper scripts just to set variables rather
-    # than running their programs.
-    libtool_install_magic="$magic"
-
-    for arg
-    do
-      case $arg in
-      -f) rm="$rm $arg"; rmforce=yes ;;
-      -*) rm="$rm $arg" ;;
-      *) files="$files $arg" ;;
-      esac
-    done
-
-    if test -z "$rm"; then
-      $echo "$modename: you must specify an RM program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    rmdirs=
-
-    origobjdir="$objdir"
-    for file in $files; do
-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$dir" = "X$file"; then
-       dir=.
-       objdir="$origobjdir"
-      else
-       objdir="$dir/$origobjdir"
-      fi
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-      test "$mode" = uninstall && objdir="$dir"
-
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
-       case " $rmdirs " in
-         *" $objdir "*) ;;
-         *) rmdirs="$rmdirs $objdir" ;;
-       esac
-      fi
-
-      # Don't error if the file doesn't exist and rm -f was used.
-      if (test -L "$file") >/dev/null 2>&1 \
-       || (test -h "$file") >/dev/null 2>&1 \
-       || test -f "$file"; then
-       :
-      elif test -d "$file"; then
-       exit_status=1
-       continue
-      elif test "$rmforce" = yes; then
-       continue
-      fi
-
-      rmfiles="$file"
-
-      case $name in
-      *.la)
-       # Possibly a libtool archive, so verify it.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         . $dir/$name
-
-         # Delete the libtool libraries and symlinks.
-         for n in $library_names; do
-           rmfiles="$rmfiles $objdir/$n"
-         done
-         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-         test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-
-         if test "$mode" = uninstall; then
-           if test -n "$library_names"; then
-             # Do each command in the postuninstall commands.
-             cmds=$postuninstall_cmds
-             save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd"
-               if test "$?" -ne 0 && test "$rmforce" != yes; then
-                 exit_status=1
-               fi
-             done
-             IFS="$save_ifs"
-           fi
-
-           if test -n "$old_library"; then
-             # Do each command in the old_postuninstall commands.
-             cmds=$old_postuninstall_cmds
-             save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd"
-               if test "$?" -ne 0 && test "$rmforce" != yes; then
-                 exit_status=1
-               fi
-             done
-             IFS="$save_ifs"
-           fi
-           # FIXME: should reinstall the best remaining shared library.
-         fi
-       fi
-       ;;
-
-      *.lo)
-       # Possibly a libtool object, so verify it.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
-         # Read the .lo file
-         . $dir/$name
-
-         # Add PIC object to the list of files to remove.
-         if test -n "$pic_object" \
-            && test "$pic_object" != none; then
-           rmfiles="$rmfiles $dir/$pic_object"
-         fi
-
-         # Add non-PIC object to the list of files to remove.
-         if test -n "$non_pic_object" \
-            && test "$non_pic_object" != none; then
-           rmfiles="$rmfiles $dir/$non_pic_object"
-         fi
-       fi
-       ;;
-
-      *)
-       if test "$mode" = clean ; then
-         noexename=$name
-         case $file in
-         *.exe)
-           file=`$echo $file|${SED} 's,.exe$,,'`
-           noexename=`$echo $name|${SED} 's,.exe$,,'`
-           # $file with .exe has already been added to rmfiles,
-           # add $file without .exe
-           rmfiles="$rmfiles $file"
-           ;;
-         esac
-         # Do a test to see if this is a libtool program.
-         if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-           relink_command=
-           . $dir/$noexename
-
-           # note $name still contains .exe if it was in $file originally
-           # as does the version of $file that was added into $rmfiles
-           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-           if test "$fast_install" = yes && test -n "$relink_command"; then
-             rmfiles="$rmfiles $objdir/lt-$name"
-           fi
-           if test "X$noexename" != "X$name" ; then
-             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-           fi
-         fi
-       fi
-       ;;
-      esac
-      $show "$rm $rmfiles"
-      $run $rm $rmfiles || exit_status=1
-    done
-    objdir="$origobjdir"
-
-    # Try to remove the ${objdir}s in the directories where we deleted files
-    for dir in $rmdirs; do
-      if test -d "$dir"; then
-       $show "rmdir $dir"
-       $run rmdir $dir >/dev/null 2>&1
-      fi
-    done
-
-    exit $exit_status
-    ;;
-
-  "")
-    $echo "$modename: you must specify a MODE" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-  esac
-
-  if test -z "$exec_cmd"; then
-    $echo "$modename: invalid operation mode \`$mode'" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
-  eval exec $exec_cmd
-  exit $EXIT_FAILURE
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
-    --config          show all configuration variables
-    --debug           enable verbose shell tracing
--n, --dry-run         display commands without modifying any files
-    --features        display basic configuration information and exit
-    --finish          same as \`--mode=finish'
-    --help            display this help message and exit
-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-    --quiet           same as \`--silent'
-    --silent          don't print informational messages
-    --tag=TAG         use configuration variables from tag TAG
-    --version         print version information
-
-MODE must be one of the following:
-
-      clean           remove files from the build directory
-      compile         compile a source file into a libtool object
-      execute         automatically set library path, then run a program
-      finish          complete the installation of libtool libraries
-      install         install libraries or executables
-      link            create a library or an executable
-      uninstall       remove libraries from an installed directory
-
-MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool@gnu.org>."
-  exit $EXIT_SUCCESS
-  ;;
-
-clean)
-  $echo \
-"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-
-Remove files from the build directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, object or program, all the files associated
-with it are deleted. Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-compile)
-  $echo \
-"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-
-Compile a source file into a libtool library object.
-
-This mode accepts the following additional options:
-
-  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
-  -static           always build a \`.o' file suitable for static linking
-
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-from the given SOURCEFILE.
-
-The output file name is determined by removing the directory component from
-SOURCEFILE, then substituting the C source code suffix \`.c' with the
-library object suffix, \`.lo'."
-  ;;
-
-execute)
-  $echo \
-"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-
-Automatically set library path, then run a program.
-
-This mode accepts the following additional options:
-
-  -dlopen FILE      add the directory containing FILE to the library path
-
-This mode sets the library path environment variable according to \`-dlopen'
-flags.
-
-If any of the ARGS are libtool executable wrappers, then they are translated
-into their corresponding uninstalled binary, and any of their required library
-directories are added to the library path.
-
-Then, COMMAND is executed, with ARGS as arguments."
-  ;;
-
-finish)
-  $echo \
-"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-
-Complete the installation of libtool libraries.
-
-Each LIBDIR is a directory that contains libtool libraries.
-
-The commands that this mode executes may require superuser privileges.  Use
-the \`--dry-run' option if you just want to see what would be executed."
-  ;;
-
-install)
-  $echo \
-"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-
-Install executables or libraries.
-
-INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
-
-The rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-  ;;
-
-link)
-  $echo \
-"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-
-Link object files or libraries together to form another library, or to
-create an executable program.
-
-LINK-COMMAND is a command using the C compiler that you would use to create
-a program from several object files.
-
-The following components of LINK-COMMAND are treated specially:
-
-  -all-static       do not do any dynamic linking at all
-  -avoid-version    do not add a version suffix if possible
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
-  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
-  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-  -export-symbols SYMFILE
-                   try to export only the symbols listed in SYMFILE
-  -export-symbols-regex REGEX
-                   try to export only the symbols matching REGEX
-  -LLIBDIR          search LIBDIR for required installed libraries
-  -lNAME            OUTPUT-FILE requires the installed library libNAME
-  -module           build a library that can dlopened
-  -no-fast-install  disable the fast-install mode
-  -no-install       link a not-installable executable
-  -no-undefined     declare that a library does not refer to external symbols
-  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
-  -objectlist FILE  Use a list of object files found in FILE to specify objects
-  -precious-files-regex REGEX
-                    don't remove output files matching REGEX
-  -release RELEASE  specify package release information
-  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
-  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
-  -static           do not do any dynamic linking of libtool libraries
-  -version-info CURRENT[:REVISION[:AGE]]
-                   specify library version info [each variable defaults to 0]
-
-All other options (arguments beginning with \`-') are ignored.
-
-Every other argument is treated as a filename.  Files ending in \`.la' are
-treated as uninstalled libtool libraries, other files are standard or library
-object files.
-
-If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-only library objects (\`.lo' files) may be specified, and \`-rpath' is
-required, except when creating a convenience library.
-
-If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-using \`ar' and \`ranlib', or on Windows using \`lib'.
-
-If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-is created, otherwise an executable program is created."
-  ;;
-
-uninstall)
-  $echo \
-"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-
-Remove libraries from an installation directory.
-
-RM is the name of the program to use to delete files associated with each FILE
-(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
-to RM.
-
-If FILE is a libtool library, all the files associated with it are deleted.
-Otherwise, only FILE itself is deleted using RM."
-  ;;
-
-*)
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-  ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $EXIT_SUCCESS
-
-# The TAGs below are defined such that we never get into a situation
-# in which we disable both kinds of libraries.  Given conflicting
-# choices, we go for a static library, that is the most portable,
-# since we can't tell whether shared libraries were disabled because
-# the user asked for that or because the platform doesn't support
-# them.  This is particularly important on AIX, because we don't
-# support having both static and shared libraries enabled at the same
-# time on that platform, so we default to a shared-only configuration.
-# If a disable-shared tag is given, we'll fallback to a static-only
-# configuration.  But we'll never go from static-only to shared-only.
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-build_libtool_libs=no
-build_old_libs=yes
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/tags/gpgme-1-1-1/m4/ChangeLog b/tags/gpgme-1-1-1/m4/ChangeLog
deleted file mode 100644 (file)
index 862751a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-2006-02-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * pth.m4: Fix code generation (required for Max OS X).
-       Submitted by Emanuele Giaquinta <exg@gentoo.org>.
-
-2005-11-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * glib-2.0.m4: New file.
-
-2004-12-28  Werner Koch  <wk@g10code.com>
-
-       * pth.m4: Changed quoting for use with automake 1.9.
-
-2004-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * pth.m4: Disable _ac_pth_line, and don't fail if Pth is not
-       found.
-       
-       * glibc21.m4: New file.
-       * gpg-error.m4: New file.
-       * pth.m4: New file.
-
- Copyright 2004 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/m4/glib-2.0.m4 b/tags/gpgme-1-1-1/m4/glib-2.0.m4
deleted file mode 100644 (file)
index d6413ff..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-# Configure paths for GLIB
-# Owen Taylor     1997-2001
-
-dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or 
-dnl gthread is specified in MODULES, pass to pkg-config
-dnl
-AC_DEFUN([AM_PATH_GLIB_2_0],
-[dnl 
-dnl Get the cflags and libraries from pkg-config
-dnl
-AC_ARG_ENABLE(glibtest, [  --disable-glibtest      do not try to compile and run a test GLIB program],
-                   , enable_glibtest=yes)
-
-  pkg_config_args=glib-2.0
-  for module in . $4
-  do
-      case "$module" in
-         gmodule) 
-             pkg_config_args="$pkg_config_args gmodule-2.0"
-         ;;
-         gmodule-no-export) 
-             pkg_config_args="$pkg_config_args gmodule-no-export-2.0"
-         ;;
-         gobject) 
-             pkg_config_args="$pkg_config_args gobject-2.0"
-         ;;
-         gthread) 
-             pkg_config_args="$pkg_config_args gthread-2.0"
-         ;;
-      esac
-  done
-
-  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-
-  no_glib=""
-
-  if test x$PKG_CONFIG != xno ; then
-    if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-      :
-    else
-      echo *** pkg-config too old; version 0.7 or better required.
-      no_glib=yes
-      PKG_CONFIG=no
-    fi
-  else
-    no_glib=yes
-  fi
-
-  min_glib_version=ifelse([$1], ,2.0.0,$1)
-  AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
-
-  if test x$PKG_CONFIG != xno ; then
-    ## don't try to run the test against uninstalled libtool libs
-    if $PKG_CONFIG --uninstalled $pkg_config_args; then
-         echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
-         enable_glibtest=no
-    fi
-
-    if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
-         :
-    else
-         no_glib=yes
-    fi
-  fi
-
-  if test x"$no_glib" = x ; then
-    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
-    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-
-    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
-    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
-    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
-           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-    if test "x$enable_glibtest" = "xyes" ; then
-      ac_save_CFLAGS="$CFLAGS"
-      ac_save_LIBS="$LIBS"
-      CFLAGS="$CFLAGS $GLIB_CFLAGS"
-      LIBS="$GLIB_LIBS $LIBS"
-dnl
-dnl Now check if the installed GLIB is sufficiently new. (Also sanity
-dnl checks the results of pkg-config to some extent)
-dnl
-      rm -f conf.glibtest
-      AC_TRY_RUN([
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int 
-main ()
-{
-  int major, minor, micro;
-  char *tmp_version;
-
-  system ("touch conf.glibtest");
-
-  /* HP/UX 9 (%@#!) writes to sscanf strings */
-  tmp_version = g_strdup("$min_glib_version");
-  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-     printf("%s, bad version string\n", "$min_glib_version");
-     exit(1);
-   }
-
-  if ((glib_major_version != $glib_config_major_version) ||
-      (glib_minor_version != $glib_config_minor_version) ||
-      (glib_micro_version != $glib_config_micro_version))
-    {
-      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
-             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-             glib_major_version, glib_minor_version, glib_micro_version);
-      printf ("*** was found! If pkg-config was correct, then it is best\n");
-      printf ("*** to remove the old version of GLib. 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 pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-      printf("*** to point to the correct configuration files\n");
-    } 
-  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
-          (glib_minor_version != GLIB_MINOR_VERSION) ||
-           (glib_micro_version != GLIB_MICRO_VERSION))
-    {
-      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
-            GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-      printf("*** library (version %d.%d.%d)\n",
-            glib_major_version, glib_minor_version, glib_micro_version);
-    }
-  else
-    {
-      if ((glib_major_version > major) ||
-        ((glib_major_version == major) && (glib_minor_version > minor)) ||
-        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-      {
-        return 0;
-       }
-     else
-      {
-        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
-               glib_major_version, glib_minor_version, glib_micro_version);
-        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
-              major, minor, micro);
-        printf("*** GLIB is always available from ftp://ftp.gtk.org.\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 pkg-config shell script is\n");
-        printf("*** being found. The easiest way to fix this is to remove the old version\n");
-        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
-        printf("*** correct copy of pkg-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_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-       CFLAGS="$ac_save_CFLAGS"
-       LIBS="$ac_save_LIBS"
-     fi
-  fi
-  if test "x$no_glib" = x ; then
-     AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
-     ifelse([$2], , :, [$2])     
-  else
-     AC_MSG_RESULT(no)
-     if test "$PKG_CONFIG" = "no" ; then
-       echo "*** A new enough version of pkg-config was not found."
-       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-     else
-       if test -f conf.glibtest ; then
-        :
-       else
-          echo "*** Could not run GLIB test program, checking why..."
-          ac_save_CFLAGS="$CFLAGS"
-          ac_save_LIBS="$LIBS"
-          CFLAGS="$CFLAGS $GLIB_CFLAGS"
-          LIBS="$LIBS $GLIB_LIBS"
-          AC_TRY_LINK([
-#include <glib.h>
-#include <stdio.h>
-],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
-        [ echo "*** The test program compiled, but did not run. This usually means"
-          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
-          echo "*** version of GLIB. If it is not finding GLIB, 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 "*** The test program failed to compile or link. See the file config.log for the"
-          echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
-          CFLAGS="$ac_save_CFLAGS"
-          LIBS="$ac_save_LIBS"
-       fi
-     fi
-     GLIB_CFLAGS=""
-     GLIB_LIBS=""
-     GLIB_GENMARSHAL=""
-     GOBJECT_QUERY=""
-     GLIB_MKENUMS=""
-     ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GLIB_CFLAGS)
-  AC_SUBST(GLIB_LIBS)
-  AC_SUBST(GLIB_GENMARSHAL)
-  AC_SUBST(GOBJECT_QUERY)
-  AC_SUBST(GLIB_MKENUMS)
-  rm -f conf.glibtest
-])
diff --git a/tags/gpgme-1-1-1/m4/glibc21.m4 b/tags/gpgme-1-1-1/m4/glibc21.m4
deleted file mode 100644 (file)
index 9c9f3db..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License.  As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# Test for the GNU C Library, version 2.1 or newer.
-# From Bruno Haible.
-
-AC_DEFUN([jm_GLIBC21],
-  [
-    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
-      ac_cv_gnu_library_2_1,
-      [AC_EGREP_CPP([Lucky GNU user],
-       [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-       ],
-       ac_cv_gnu_library_2_1=yes,
-       ac_cv_gnu_library_2_1=no)
-      ]
-    )
-    AC_SUBST(GLIBC21)
-    GLIBC21="$ac_cv_gnu_library_2_1"
-  ]
-)
diff --git a/tags/gpgme-1-1-1/m4/gpg-error.m4 b/tags/gpgme-1-1-1/m4/gpg-error.m4
deleted file mode 100644 (file)
index e85f511..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# gpg-error.m4 - autoconf macro to detect libgpg-error.
-# Copyright (C) 2002, 2003, 2004 g10 Code GmbH
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This file 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.
-
-dnl AM_PATH_GPG_ERROR([MINIMUM-VERSION,
-dnl                   [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
-dnl Test for libgpg-error and define GPG_ERROR_CFLAGS and GPG_ERROR_LIBS
-dnl
-AC_DEFUN([AM_PATH_GPG_ERROR],
-[ AC_ARG_WITH(gpg-error-prefix,
-            AC_HELP_STRING([--with-gpg-error-prefix=PFX],
-                           [prefix where GPG Error is installed (optional)]),
-     gpg_error_config_prefix="$withval", gpg_error_config_prefix="")
-  if test x$gpg_error_config_prefix != x ; then
-     if test x${GPG_ERROR_CONFIG+set} != xset ; then
-        GPG_ERROR_CONFIG=$gpg_error_config_prefix/bin/gpg-error-config
-     fi
-  fi
-
-  AC_PATH_PROG(GPG_ERROR_CONFIG, gpg-error-config, no)
-  min_gpg_error_version=ifelse([$1], ,0.0,$1)
-  AC_MSG_CHECKING(for GPG Error - version >= $min_gpg_error_version)
-  ok=no
-  if test "$GPG_ERROR_CONFIG" != "no" ; then
-    req_major=`echo $min_gpg_error_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
-    req_minor=`echo $min_gpg_error_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
-    gpg_error_config_version=`$GPG_ERROR_CONFIG $gpg_error_config_args --version`
-    major=`echo $gpg_error_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
-    minor=`echo $gpg_error_config_version | \
-               sed 's/\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
-    if test "$major" -gt "$req_major"; then
-        ok=yes
-    else 
-        if test "$major" -eq "$req_major"; then
-            if test "$minor" -ge "$req_minor"; then
-               ok=yes
-            fi
-        fi
-    fi
-  fi
-  if test $ok = yes; then
-    GPG_ERROR_CFLAGS=`$GPG_ERROR_CONFIG $gpg_error_config_args --cflags`
-    GPG_ERROR_LIBS=`$GPG_ERROR_CONFIG $gpg_error_config_args --libs`
-    AC_MSG_RESULT(yes)
-    ifelse([$2], , :, [$2])
-  else
-    GPG_ERROR_CFLAGS=""
-    GPG_ERROR_LIBS=""
-    AC_MSG_RESULT(no)
-    ifelse([$3], , :, [$3])
-  fi
-  AC_SUBST(GPG_ERROR_CFLAGS)
-  AC_SUBST(GPG_ERROR_LIBS)
-])
-
diff --git a/tags/gpgme-1-1-1/m4/libtool.m4 b/tags/gpgme-1-1-1/m4/libtool.m4
deleted file mode 100644 (file)
index 67d151d..0000000
+++ /dev/null
@@ -1,5939 +0,0 @@
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-## Copyright 1996, 1997, 1998, 1999, 2000, 2001
-## Free Software Foundation, Inc.
-## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-##
-## As a special exception to the GNU General Public License, if you
-## distribute this file as part of a program that contains a
-## configuration script generated by Autoconf, you may include it under
-## the same distribution terms that you use for the rest of that program.
-
-# serial 47 AC_PROG_LIBTOOL
-# Debian $Rev: 203 $
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
-         [],
-         [m4_define([AC_PROVIDE_IFELSE],
-                [m4_ifdef([AC_PROVIDE_$1],
-                          [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
-  AC_PROVIDE_IFELSE([AC_PROG_CXX],
-    [AC_LIBTOOL_CXX],
-    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
-  ])])
-dnl And a similar setup for Fortran 77 support
-  AC_PROVIDE_IFELSE([AC_PROG_F77],
-    [AC_LIBTOOL_F77],
-    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
-  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-    [AC_LIBTOOL_GCJ],
-    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-      [AC_LIBTOOL_GCJ],
-      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
-       [AC_LIBTOOL_GCJ],
-      [ifdef([AC_PROG_GCJ],
-            [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([A][M_PROG_GCJ],
-            [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([LT_AC_PROG_GCJ],
-            [define([LT_AC_PROG_GCJ],
-               defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-case $host_os in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-
-# Same as above, but do not quote variable references.
-[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# Sed substitution to avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-if test -n "$RANLIB"; then
-  case $host_os in
-  openbsd*)
-    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
-    ;;
-  *)
-    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    AC_PATH_MAGIC
-  fi
-  ;;
-esac
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
-    [AC_HELP_STRING([--disable-libtool-lock],
-       [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
-    [AC_HELP_STRING([--with-pic],
-       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])dnl
-
-# If no C compiler was specified, use CC.
-LTCC=${LTCC-"$CC"}
-
-# Allow CC to be a program name with arguments.
-compiler=$CC
-])# _LT_AC_SYS_COMPILER
-
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# Links a minimal program and checks the executable
-# for the system default hardcoded library path. In most cases,
-# this is /usr/lib:/lib, but when the MPI compilers are used
-# the location of the communication and MPI libs are included too.
-# If we don't find anything, use the default library path according
-# to the aix ld manual.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-        [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-[$]*
-EOF
-  exit 0
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-       echo_test_string="`eval $cmd`" &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-    then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-   test "X$echo_testing_string" = "X$echo_test_string"; then
-  :
-else
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for dir in $PATH /usr/ucb; do
-    IFS="$lt_save_ifs"
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-        test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running configure again with it.
-      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-    else
-      # Try using printf.
-      echo='printf %s\n'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-        echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-        test "X$echo_testing_string" = "X$echo_test_string"; then
-       # Cool, printf works
-       :
-      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-       export CONFIG_SHELL
-       SHELL="$CONFIG_SHELL"
-       export SHELL
-       echo="$CONFIG_SHELL [$]0 --fallback-echo"
-      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       echo="$CONFIG_SHELL [$]0 --fallback-echo"
-      else
-       # maybe with a smaller string...
-       prev=:
-
-       for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-         if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-         then
-           break
-         fi
-         prev="$cmd"
-       done
-
-       if test "$prev" != 'sed 50q "[$]0"'; then
-         echo_test_string=`eval $prev`
-         export echo_test_string
-         exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-       else
-         # Oops.  We lost completely, so just stick with echo.
-         echo=echo
-       fi
-      fi
-    fi
-  fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-    [AC_HELP_STRING([--disable-libtool-lock],
-       [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case $host in
-ia64-*-hpux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case `/usr/bin/file conftest.$ac_objext` in
-    *ELF-32*)
-      HPUX_IA64_MODE="32"
-      ;;
-    *ELF-64*)
-      HPUX_IA64_MODE="64"
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-   if test "$lt_cv_prog_gnu_ld" = yes; then
-    case `/usr/bin/file conftest.$ac_objext` in
-    *32-bit*)
-      LD="${LD-ld} -melf32bsmip"
-      ;;
-    *N32*)
-      LD="${LD-ld} -melf32bmipn32"
-      ;;
-    *64-bit*)
-      LD="${LD-ld} -melf64bmip"
-      ;;
-    esac
-   else
-    case `/usr/bin/file conftest.$ac_objext` in
-    *32-bit*)
-      LD="${LD-ld} -32"
-      ;;
-    *N32*)
-      LD="${LD-ld} -n32"
-      ;;
-    *64-bit*)
-      LD="${LD-ld} -64"
-      ;;
-    esac
-   fi
-  fi
-  rm -rf conftest*
-  ;;
-
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case "`/usr/bin/file conftest.o`" in
-    *32-bit*)
-      case $host in
-        x86_64-*linux*)
-          LD="${LD-ld} -m elf_i386"
-          ;;
-        ppc64-*linux*|powerpc64-*linux*)
-          LD="${LD-ld} -m elf32ppclinux"
-          ;;
-        s390x-*linux*)
-          LD="${LD-ld} -m elf_s390"
-          ;;
-        sparc64-*linux*)
-          LD="${LD-ld} -m elf32_sparc"
-          ;;
-      esac
-      ;;
-    *64-bit*)
-      case $host in
-        x86_64-*linux*)
-          LD="${LD-ld} -m elf_x86_64"
-          ;;
-        ppc*-*linux*|powerpc*-*linux*)
-          LD="${LD-ld} -m elf64ppc"
-          ;;
-        s390*-*linux*)
-          LD="${LD-ld} -m elf64_s390"
-          ;;
-        sparc*-*linux*)
-          LD="${LD-ld} -m elf64_sparc"
-          ;;
-      esac
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
-
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_LANG_PUSH(C)
-     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-  ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   # The option is referenced via a variable to avoid confusing sed.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s "$ac_outfile"; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test ! -s conftest.err; then
-       $2=yes
-     fi
-   fi
-   $rm conftest*
-])
-
-if test x"[$]$2" = xyes; then
-    ifelse([$5], , :, [$5])
-else
-    ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                          [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-   save_LDFLAGS="$LDFLAGS"
-   LDFLAGS="$LDFLAGS $3"
-   printf "$lt_simple_link_test_code" > conftest.$ac_ext
-   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test -s conftest.err; then
-       # Append any errors to the config.log.
-       cat conftest.err 1>&AS_MESSAGE_LOG_FD
-     else
-       $2=yes
-     fi
-   fi
-   $rm conftest*
-   LDFLAGS="$save_LDFLAGS"
-])
-
-if test x"[$]$2" = xyes; then
-    ifelse([$4], , :, [$4])
-else
-    ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# find the maximum length of command line arguments
-AC_MSG_CHECKING([the maximum length of command line arguments])
-AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-  i=0
-  teststring="ABCD"
-
-  case $build_os in
-  msdosdjgpp*)
-    # On DJGPP, this test can blow up pretty badly due to problems in libc
-    # (any single argument exceeding 2000 bytes causes a buffer overrun
-    # during glob expansion).  Even if it were fixed, the result of this
-    # check would be larger than it should be.
-    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
-    ;;
-
-  gnu*)
-    # Under GNU Hurd, this test is not required because there is
-    # no limit to the length of command line arguments.
-    # Libtool will interpret -1 as no limit whatsoever
-    lt_cv_sys_max_cmd_len=-1;
-    ;;
-
-  cygwin* | mingw*)
-    # On Win9x/ME, this test blows up -- it succeeds, but takes
-    # about 5 minutes as the teststring grows exponentially.
-    # Worse, since 9x/ME are not pre-emptively multitasking,
-    # you end up with a "frozen" computer, even though with patience
-    # the test eventually succeeds (with a max line length of 256k).
-    # Instead, let's just punt: use the minimum linelength reported by
-    # all of the supported platforms: 8192 (on NT/2K/XP).
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
-  amigaos*)
-    # On AmigaOS with pdksh, this test takes hours, literally.
-    # So we just punt and use a minimum line length of 8192.
-    lt_cv_sys_max_cmd_len=8192;
-    ;;
-
- *)
-    # If test is not a shell built-in, we'll probably end up computing a
-    # maximum length that is only half of the actual maximum length, but
-    # we can't tell.
-    while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
-              = "XX$teststring") >/dev/null 2>&1 &&
-           new_result=`expr "X$teststring" : ".*" 2>&1` &&
-           lt_cv_sys_max_cmd_len=$new_result &&
-           test $i != 17 # 1/2 MB should be enough
-    do
-      i=`expr $i + 1`
-      teststring=$teststring$teststring
-    done
-    teststring=
-    # Add a significant safety factor because C++ compilers can tack on massive
-    # amounts of additional arguments before passing them to the linker.
-    # It appears as though 1/2 is a usable value.
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-    ;;
-  esac
-])
-if test -n $lt_cv_sys_max_cmd_len ; then
-  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-else
-  AC_MSG_RESULT(none)
-fi
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# --------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-#  define LT_DLGLOBAL          RTLD_GLOBAL
-#else
-#  ifdef DL_GLOBAL
-#    define LT_DLGLOBAL                DL_GLOBAL
-#  else
-#    define LT_DLGLOBAL                0
-#  endif
-#endif
-
-/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LT_DLLAZY_OR_NOW
-#  ifdef RTLD_LAZY
-#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
-#  else
-#    ifdef DL_LAZY
-#      define LT_DLLAZY_OR_NOW         DL_LAZY
-#    else
-#      ifdef RTLD_NOW
-#        define LT_DLLAZY_OR_NOW       RTLD_NOW
-#      else
-#        ifdef DL_NOW
-#          define LT_DLLAZY_OR_NOW     DL_NOW
-#        else
-#          define LT_DLLAZY_OR_NOW     0
-#        endif
-#      endif
-#    endif
-#  endif
-#endif
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=42;}
-int main ()
-{
-  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-  int status = $lt_dlunknown;
-
-  if (self)
-    {
-      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
-      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-      /* dlclose (self); */
-    }
-
-    exit (status);
-}]
-EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-    (./conftest; exit; ) 2>/dev/null
-    lt_status=$?
-    case x$lt_status in
-      x$lt_dlno_uscore) $1 ;;
-      x$lt_dlneed_uscore) $2 ;;
-      x$lt_unknown|x*) $3 ;;
-    esac
-  else :
-    # compilation failed
-    $3
-  fi
-fi
-rm -fr conftest*
-])# _LT_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# -------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-  lt_cv_dlopen=no
-  lt_cv_dlopen_libs=
-
-  case $host_os in
-  beos*)
-    lt_cv_dlopen="load_add_on"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ;;
-
-  mingw* | pw32*)
-    lt_cv_dlopen="LoadLibrary"
-    lt_cv_dlopen_libs=
-   ;;
-
-  cygwin*)
-    lt_cv_dlopen="dlopen"
-    lt_cv_dlopen_libs=
-   ;;
-
-  darwin*)
-  # if libdl is installed we need to link against it
-    AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-    lt_cv_dlopen="dyld"
-    lt_cv_dlopen_libs=
-    lt_cv_dlopen_self=yes
-    ])
-   ;;
-
-  *)
-    AC_CHECK_FUNC([shl_load],
-         [lt_cv_dlopen="shl_load"],
-      [AC_CHECK_LIB([dld], [shl_load],
-           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
-       [AC_CHECK_FUNC([dlopen],
-             [lt_cv_dlopen="dlopen"],
-         [AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-           [AC_CHECK_LIB([svld], [dlopen],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-             [AC_CHECK_LIB([dld], [dld_link],
-                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
-             ])
-           ])
-         ])
-       ])
-      ])
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-
-    save_LDFLAGS="$LDFLAGS"
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-
-    save_LIBS="$LIBS"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-    AC_CACHE_CHECK([whether a program can dlopen itself],
-         lt_cv_dlopen_self, [dnl
-         _LT_AC_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-    ])
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      LDFLAGS="$LDFLAGS $link_static_flag"
-      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-         lt_cv_dlopen_self_static, [dnl
-         _LT_AC_TRY_DLOPEN_SELF(
-           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
-      ])
-    fi
-
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
-    ;;
-  esac
-
-  case $lt_cv_dlopen_self in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case $lt_cv_dlopen_self_static in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-   $rm -r conftest 2>/dev/null
-   mkdir conftest
-   cd conftest
-   mkdir out
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-   lt_compiler_flag="-o out/conftest2.$ac_objext"
-   # Insert the option either (1) after the last *FLAGS variable, or
-   # (2) before a word containing "conftest.", or (3) at the end.
-   # Note that $ac_compile itself does not contain backslashes and begins
-   # with a dollar sign (not a hyphen), so the echo should work correctly.
-   lt_compile=`echo "$ac_compile" | $SED \
-   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
-   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-   -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   if (exit $ac_status) && test -s out/conftest2.$ac_objext
-   then
-     # The compiler can only warn and ignore the option if not recognized
-     # So say no if there are warnings
-     if test ! -s out/conftest.err; then
-       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-     fi
-   fi
-   chmod u+w .
-   $rm conftest*
-   # SGI C++ compiler will create directory out/ii_files/ for
-   # template instantiation
-   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-   $rm out/* && rmdir out
-   cd ..
-   rmdir conftest
-   $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  AC_MSG_CHECKING([if we can lock with hard links])
-  hard_links=yes
-  $rm conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  AC_MSG_RESULT([$hard_links])
-  if test "$hard_links" = no; then
-    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_OBJDIR],
-[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-[rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  lt_cv_objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  lt_cv_objdir=_libs
-fi
-rmdir .libs 2>/dev/null])
-objdir=$lt_cv_objdir
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
-   test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
-   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_AC_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[striplib=
-old_striplib=
-AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
-  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-  AC_MSG_RESULT([yes])
-else
-# FIXME - insert some real tests, host_os isn't really good enough
-  case $host_os in
-   darwin*)
-       if test -n "$STRIP" ; then
-         striplib="$STRIP -x"
-         AC_MSG_RESULT([yes])
-       else
-  AC_MSG_RESULT([no])
-fi
-       ;;
-   *)
-  AC_MSG_RESULT([no])
-    ;;
-  esac
-fi
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_MSG_CHECKING([dynamic linker characteristics])
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-shrext_cmds=".so"
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-if test "$GCC" = yes; then
-  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-    # if the path contains ";" then we assume it to be the separator
-    # otherwise default to the standard path separator (i.e. ":") - it is
-    # assumed that no part of a normal pathname contains ";" but that should
-    # okay in the real world where ";" in dirpaths is itself problematic.
-    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-  else
-    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-need_lib_prefix=unknown
-hardcode_into_libs=no
-
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-need_version=unknown
-
-case $host_os in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX 3 has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}${shared_ext}$major'
-  ;;
-
-aix4* | aix5*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
-    # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-    shlibpath_var=LD_LIBRARY_PATH
-  else
-    # With GCC up to 2.95.x, collect2 would create an import file
-    # for dependence libraries.  The import file would start with
-    # the line `#! .'.  This would cause the generated library to
-    # depend on `.', always an invalid library.  This was fixed in
-    # development snapshots of GCC prior to 3.0.
-    case $host_os in
-      aix4 | aix4.[[01]] | aix4.[[01]].*)
-      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-          echo ' yes '
-          echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-       :
-      else
-       can_build_shared=no
-      fi
-      ;;
-    esac
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-      # instead of lib<name>.a to let people know that these are not
-      # typical AIX shared libraries.
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    else
-      # We preserve .a as extension for shared libraries through AIX4.2
-      # and later when we are not doing run time linking.
-      library_names_spec='${libname}${release}.a $libname.a'
-      soname_spec='${libname}${release}${shared_ext}$major'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  library_names_spec='$libname.ixlibrary $libname.a'
-  # Create ${libname}_ixlibrary.a entries in /sys/libs.
-  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi4*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw* | pw32*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    library_names_spec='$libname.dll.a'
-    # DLL is installed to $(libdir)/../bin by postinstall_cmds
-    postinstall_cmds='base_file=`basename \${file}`~
-      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-      dldir=$destdir/`dirname \$dlpath`~
-      test -d \$dldir || mkdir -p \$dldir~
-      $install_prog $dir/$dlname \$dldir/$dlname'
-    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-      dlpath=$dir/\$dldll~
-       $rm \$dlpath'
-    shlibpath_overrides_runpath=yes
-
-    case $host_os in
-    cygwin*)
-      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-      else
-        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-      fi
-      ;;
-    pw32*)
-      # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      ;;
-    esac
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  ;;
-
-darwin* | rhapsody*)
-  dynamic_linker="$host_os dyld"
-  version_type=darwin
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-  soname_spec='${libname}${release}${major}$shared_ext'
-  shlibpath_overrides_runpath=yes
-  shlibpath_var=DYLD_LIBRARY_PATH
-  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
-  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-kfreebsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='GNU ld.so'
-  ;;
-
-freebsd*)
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  version_type=freebsd-$objformat
-  case $version_type in
-    freebsd-elf*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_os in
-  freebsd2*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    hardcode_into_libs=yes
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    hardcode_into_libs=yes
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  hardcode_into_libs=yes
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  case "$host_cpu" in
-  ia64*)
-    shrext_cmds='.so'
-    hardcode_into_libs=yes
-    dynamic_linker="$host_os dld.so"
-    shlibpath_var=LD_LIBRARY_PATH
-    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    if test "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   hppa*64*)
-     shrext_cmds='.sl'
-     hardcode_into_libs=yes
-     dynamic_linker="$host_os dld.sl"
-     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-     soname_spec='${libname}${release}${shared_ext}$major'
-     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-     ;;
-   *)
-    shrext_cmds='.sl'
-    dynamic_linker="$host_os dld.sl"
-    shlibpath_var=SHLIB_PATH
-    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    ;;
-  esac
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $host_os in
-    nonstopux*) version_type=nonstopux ;;
-    *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       else
-               version_type=irix
-       fi ;;
-  esac
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-  case $host_os in
-  irix5* | nonstopux*)
-    libsuff= shlibsuff=
-    ;;
-  *)
-    case $LD in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-      libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-      libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-      libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  hardcode_into_libs=yes
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux*oldld* | linux*aout* | linux*coff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # This implies no fast_install, which is unacceptable.
-  # Some rework will be needed to allow for fast_install
-  # before this can be enabled.
-  hardcode_into_libs=yes
-
-  # Append ld.so.conf contents to the search path
-  if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '`
-    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-  fi
-
-  # We used to test for /lib/ld.so.1 and disable shared libraries on
-  # powerpc, because MkLinux only supported shared libraries with the
-  # GNU dynamic linker.  Since this was broken with cross compilers,
-  # most powerpc-linux boxes support dynamic linking these days and
-  # people can always --disable-shared, the test was removed, and we
-  # assume the GNU/Linux dynamic linker is in use.
-  dynamic_linker='GNU/Linux ld.so'
-  ;;
-
-knetbsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='GNU ld.so'
-  ;;
-
-netbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-    soname_spec='${libname}${release}${shared_ext}$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  ;;
-
-newsos6)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-nto-qnx*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=yes
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  soname_spec='${libname}${release}${shared_ext}$major'
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  hardcode_into_libs=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case $host_vendor in
-    sni)
-      shlibpath_overrides_runpath=no
-      need_lib_prefix=no
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      runpath_var=LD_RUN_PATH
-      ;;
-    siemens)
-      need_lib_prefix=no
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      ;;
-  esac
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_ARG_WITH([tags],
-    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
-        [include additional configurations @<:@automatic@:>@])],
-    [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
-  if test ! -f "${ofile}"; then
-    AC_MSG_WARN([output file `$ofile' does not exist])
-  fi
-
-  if test -z "$LTCC"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-    if test -z "$LTCC"; then
-      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
-    else
-      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
-    fi
-  fi
-
-  # Extract list of available tagged configurations in $ofile.
-  # Note that this assumes the entire list is on one line.
-  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
-  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-  for tagname in $tagnames; do
-    IFS="$lt_save_ifs"
-    # Check whether tagname contains only valid characters
-    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
-    "") ;;
-    *)  AC_MSG_ERROR([invalid tag name: $tagname])
-       ;;
-    esac
-
-    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-    then
-      AC_MSG_ERROR([tag name \"$tagname\" already exists])
-    fi
-
-    # Update the list of available tags.
-    if test -n "$tagname"; then
-      echo appending configuration tag \"$tagname\" to $ofile
-
-      case $tagname in
-      CXX)
-       if test -n "$CXX" && test "X$CXX" != "Xno"; then
-         AC_LIBTOOL_LANG_CXX_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      F77)
-       if test -n "$F77" && test "X$F77" != "Xno"; then
-         AC_LIBTOOL_LANG_F77_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      GCJ)
-       if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-         AC_LIBTOOL_LANG_GCJ_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      RC)
-       AC_LIBTOOL_LANG_RC_CONFIG
-       ;;
-
-      *)
-       AC_MSG_ERROR([Unsupported tag name: $tagname])
-       ;;
-      esac
-
-      # Append the new tag name to the list of available tags.
-      if test -n "$tagname" ; then
-      available_tags="$available_tags $tagname"
-    fi
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  # Now substitute the updated list of available tags.
-  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-    mv "${ofile}T" "$ofile"
-    chmod +x "$ofile"
-  else
-    rm -f "${ofile}T"
-    AC_MSG_ERROR([unable to update list of available tagged configurations.])
-  fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 dll's
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
-    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-       [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_shared=yes ;;
-    no) enable_shared=no ;;
-    *)
-      enable_shared=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_shared=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-#- set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
-    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-       [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_static=yes ;;
-    no) enable_static=no ;;
-    *)
-     enable_static=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_static=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
-    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-    [p=${PACKAGE-default}
-    case $enableval in
-    yes) enable_fast_install=yes ;;
-    no) enable_fast_install=no ;;
-    *)
-      enable_fast_install=no
-      # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-      for pkg in $enableval; do
-       IFS="$lt_save_ifs"
-       if test "X$pkg" = "X$p"; then
-         enable_fast_install=yes
-       fi
-      done
-      IFS="$lt_save_ifs"
-      ;;
-    esac],
-    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
-   [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])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognise shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_MSG_CHECKING([for $1])
-AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-[case $MAGIC_CMD in
-[[\\/*] |  ?:[\\/]*])
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-  ;;
-*)
-  lt_save_MAGIC_CMD="$MAGIC_CMD"
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-dnl $ac_dummy forces splitting on constant user-supplied paths.
-dnl POSIX.2 word splitting is done only on the output of word expansions,
-dnl not every word.  This closes a longstanding sh security hole.
-  ac_dummy="ifelse([$2], , $PATH, [$2])"
-  for ac_dir in $ac_dummy; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$1; then
-      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-      if test -n "$file_magic_test_file"; then
-       case $deplibs_check_method in
-       "file_magic "*)
-         file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-           $EGREP "$file_magic_regex" > /dev/null; then
-           :
-         else
-           cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool@gnu.org
-
-EOF
-         fi ;;
-       esac
-      fi
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
-  ;;
-esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-if test -n "$MAGIC_CMD"; then
-  AC_MSG_RESULT($MAGIC_CMD)
-else
-  AC_MSG_RESULT(no)
-fi
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognise a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
-    [AC_HELP_STRING([--with-gnu-ld],
-       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by $CC])
-  case $host in
-  *-*-mingw*)
-    # gcc leaves a trailing carriage return which upsets mingw
-    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-  *)
-    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-  esac
-  case $ac_prog in
-    # Accept absolute paths.
-    [[\\/]]* | ?:[[\\/]]*)
-      re_direlt='/[[^/]][[^/]]*/\.\./'
-      # Canonicalize the pathname of ld
-      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
-else
-  AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(lt_cv_path_LD,
-[if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      lt_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-      *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && break
-       ;;
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$lt_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
-else
-  AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-case `$LD -v 2>&1 </dev/null` in
-*GNU* | *'with BFD'*)
-  lt_cv_prog_gnu_ld=yes
-  ;;
-*)
-  lt_cv_prog_gnu_ld=no
-  ;;
-esac])
-with_gnu_ld=$lt_cv_prog_gnu_ld
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[AC_CACHE_CHECK([for $LD option to reload object files],
-  lt_cv_ld_reload_flag,
-  [lt_cv_ld_reload_flag='-r'])
-reload_flag=$lt_cv_ld_reload_flag
-case $reload_flag in
-"" | " "*) ;;
-*) reload_flag=" $reload_flag" ;;
-esac
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependent libraries],
-lt_cv_deplibs_check_method,
-[lt_cv_file_magic_cmd='$MAGIC_CMD'
-lt_cv_file_magic_test_file=
-lt_cv_deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [[regex]]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given extended regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-
-case $host_os in
-aix4* | aix5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-beos*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-bsdi4*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='/usr/bin/file -L'
-  lt_cv_file_magic_test_file=/shlib/libc.so
-  ;;
-
-cygwin*)
-  # func_win32_libid is a shell function defined in ltmain.sh
-  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-  lt_cv_file_magic_cmd='func_win32_libid'
-  ;;
-
-mingw* | pw32*)
-  # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
-  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
-  ;;
-
-darwin* | rhapsody*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-freebsd* | kfreebsd*-gnu)
-  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-    case $host_cpu in
-    i*86 )
-      # Not sure whether the presence of OpenBSD here was a mistake.
-      # Let's accept both of them until this is cleared up.
-      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=/usr/bin/file
-      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-      ;;
-    esac
-  else
-    lt_cv_deplibs_check_method=pass_all
-  fi
-  ;;
-
-gnu*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  case "$host_cpu" in
-  ia64*)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-    ;;
-  hppa*64*)
-    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-    ;;
-  *)
-    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-    lt_cv_file_magic_test_file=/usr/lib/libc.sl
-    ;;
-  esac
-  ;;
-
-irix5* | irix6* | nonstopux*)
-  case $LD in
-  *-32|*"-32 ") libmagic=32-bit;;
-  *-n32|*"-n32 ") libmagic=N32;;
-  *-64|*"-64 ") libmagic=64-bit;;
-  *) libmagic=never-match;;
-  esac
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-# This must be Linux ELF.
-linux*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-netbsd* | knetbsd*-gnu)
-  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-  else
-    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-  fi
-  ;;
-
-newos6*)
-  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=/usr/lib/libnls.so
-  ;;
-
-nto-qnx*)
-  lt_cv_deplibs_check_method=unknown
-  ;;
-
-openbsd*)
-  lt_cv_file_magic_cmd=/usr/bin/file
-  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
-  else
-    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
-  fi
-  ;;
-
-osf3* | osf4* | osf5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sco3.2v5*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-solaris*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  case $host_vendor in
-  motorola)
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-    ;;
-  ncr)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  sequent)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-    ;;
-  sni)
-    lt_cv_file_magic_cmd='/bin/file'
-    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-    lt_cv_file_magic_test_file=/lib/libc.so
-    ;;
-  siemens)
-    lt_cv_deplibs_check_method=pass_all
-    ;;
-  esac
-  ;;
-
-sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-file_magic_cmd=$lt_cv_file_magic_cmd
-deplibs_check_method=$lt_cv_deplibs_check_method
-test -z "$deplibs_check_method" && deplibs_check_method=unknown
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  lt_cv_path_NM="$NM"
-else
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    IFS="$lt_save_ifs"
-    test -z "$ac_dir" && ac_dir=.
-    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
-    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-      # Check to see if the nm accepts a BSD-compat flag.
-      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-      #   nm: unknown option "B" ignored
-      # Tru64's nm complains that /dev/null is an invalid object file
-      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-      */dev/null* | *'Invalid file or object type'*)
-       lt_cv_path_NM="$tmp_nm -B"
-       break
-        ;;
-      *)
-       case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-       */dev/null*)
-         lt_cv_path_NM="$tmp_nm -p"
-         break
-         ;;
-       *)
-         lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-         continue # so that we can try to find one that supports BSD flags
-         ;;
-       esac
-      esac
-    fi
-  done
-  IFS="$lt_save_ifs"
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-  # These system don't have libm, or don't need it
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
-  ;;
-esac
-])# AC_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
-# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
-# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
-# '${top_srcdir}/' (note the single quotes!).  If your package is not
-# flat and you're not using automake, define top_builddir and
-# top_srcdir appropriately in the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  case $enable_ltdl_convenience in
-  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-  "") enable_ltdl_convenience=yes
-      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-  esac
-  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
-  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
-# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
-# DIRECTORY is not provided and an installed libltdl is not found, it is
-# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
-# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
-# quotes!).  If your package is not flat and you're not using automake,
-# define top_builddir and top_srcdir appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  AC_CHECK_LIB(ltdl, lt_dlinit,
-  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-  [if test x"$enable_ltdl_install" = xno; then
-     AC_MSG_WARN([libltdl not installed, but installation disabled])
-   else
-     enable_ltdl_install=yes
-   fi
-  ])
-  if test x"$enable_ltdl_install" = x"yes"; then
-    ac_configure_args="$ac_configure_args --enable-ltdl-install"
-    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
-    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  else
-    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-    LIBLTDL="-lltdl"
-    LTDLINCL=
-  fi
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
-    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
-      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
-        [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
-          [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# --------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[lt_save_CC="$CC"
-AC_LANG_PUSH(C)
-
-# Source file extension for C test sources.
-ac_ext=c
-
-# Object file extension for compiled C test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
-
-_LT_AC_SYS_COMPILER
-
-#
-# Check for any special shared library compilation flags.
-#
-_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
-if test "$GCC" = no; then
-  case $host_os in
-  sco3.2v5*)
-    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
-    ;;
-  esac
-fi
-if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
-  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
-  if echo "$old_CC $old_CFLAGS " | grep "[[    ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[        ]]" >/dev/null; then :
-  else
-    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
-    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
-  fi
-fi
-
-
-#
-# Check to make sure the static flag actually works.
-#
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
-  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
-  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
-  [],
-  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-# Report which librarie types wil actually be built
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix4* | aix5*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-  ;;
-  darwin* | rhapsody*)
-  if test "$GCC" = yes; then
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    case "$host_os" in
-    rhapsody* | darwin1.[[012]])
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
-      ;;
-    *) # Darwin 1.3 on
-      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-      else
-        case ${MACOSX_DEPLOYMENT_TARGET} in
-          10.[[012]])
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-            ;;
-          10.*)
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
-            ;;
-        esac
-      fi
-      ;;
-    esac
-    output_verbose_link_cmd='echo'
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
-    _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    _LT_AC_TAGVAR(hardcode_direct, $1)=no
-    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-  else
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-  fi
-    ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cc
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# Allow CC to be a program name with arguments.
-lt_save_CC=$CC
-lt_save_LD=$LD
-lt_save_GCC=$GCC
-GCC=$GXX
-lt_save_with_gnu_ld=$with_gnu_ld
-lt_save_path_LD=$lt_cv_path_LD
-if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-else
-  unset lt_cv_prog_gnu_ld
-fi
-if test -n "${lt_cv_path_LDCXX+set}"; then
-  lt_cv_path_LD=$lt_cv_path_LDCXX
-else
-  unset lt_cv_path_LD
-fi
-test -z "${LDCXX+set}" || LD=$LDCXX
-CC=${CXX-"c++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
-  # Set up default GNU C++ configuration
-
-  AC_PROG_LD
-
-  # Check if GNU C++ uses GNU ld as the underlying linker, since the
-  # archiving commands below assume that GNU ld is being used.
-  if test "$with_gnu_ld" = yes; then
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-    #     investigate it a little bit more. (MM)
-    wlarc='${wl}'
-
-    # ancient GNU ld didn't support --whole-archive et. al.
-    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
-       grep 'no-whole-archive' > /dev/null; then
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-  else
-    with_gnu_ld=no
-    wlarc=
-
-    # A generic and very simple default shared library creation
-    # command for GNU C++ for the case where it uses the native
-    # linker, instead of GNU ld.  If possible, this setting should
-    # overridden to take advantage of the native linker features on
-    # the platform it is being used on.
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-  fi
-
-  # Commands to make compiler produce verbose output that lists
-  # what "hidden" libraries, object files and flags are used when
-  # linking a shared library.
-  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-else
-  GXX=no
-  with_gnu_ld=no
-  wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
-  aix3*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  aix4* | aix5*)
-    if test "$host_cpu" = ia64; then
-      # On IA64, the linker does run time linking by default, so we don't
-      # have to do anything special.
-      aix_use_runtimelinking=no
-      exp_sym_flag='-Bexport'
-      no_entry_flag=""
-    else
-      aix_use_runtimelinking=no
-
-      # Test if we are trying to use run time linking or normal
-      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-      # need to do runtime linking.
-      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
-       for ld_flag in $LDFLAGS; do
-         case $ld_flag in
-         *-brtl*)
-           aix_use_runtimelinking=yes
-           break
-           ;;
-         esac
-       done
-      esac
-
-      exp_sym_flag='-bexport'
-      no_entry_flag='-bnoentry'
-    fi
-
-    # When large executables or shared objects are built, AIX ld can
-    # have problems creating the table of contents.  If linking a library
-    # or program results in "error TOC overflow" add -mminimal-toc to
-    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-    _LT_AC_TAGVAR(archive_cmds, $1)=''
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-    if test "$GXX" = yes; then
-      case $host_os in aix4.[012]|aix4.[012].*)
-      # We only want to do this on AIX 4.2 and lower, the check
-      # below for broken collect2 doesn't work under 4.3+
-       collect2name=`${CC} -print-prog-name=collect2`
-       if test -f "$collect2name" && \
-          strings "$collect2name" | grep resolve_lib_name >/dev/null
-       then
-         # We have reworked collect2
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-       else
-         # We have old collect2
-         _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-       fi
-      esac
-      shared_flag='-shared'
-    else
-      # not using gcc
-      if test "$host_cpu" = ia64; then
-       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-       # chokes on -Wl,-G. The following line is correct:
-       shared_flag='-G'
-      else
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag='${wl}-G'
-       else
-         shared_flag='${wl}-bM:SRE'
-       fi
-      fi
-    fi
-
-    # It seems that -bexpall does not export symbols beginning with
-    # underscore (_), so it is better to generate a list of symbols to export.
-    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-    if test "$aix_use_runtimelinking" = yes; then
-      # Warning - without using the other runtime loading flags (-brtl),
-      # -berok will link without error, but may produce a broken library.
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-      # Determine the default libpath from the value encoded in an empty executable.
-      _LT_AC_SYS_LIBPATH_AIX
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-     else
-      if test "$host_cpu" = ia64; then
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-      else
-       # Determine the default libpath from the value encoded in an empty executable.
-       _LT_AC_SYS_LIBPATH_AIX
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-       # Warning - without using the other run time loading flags,
-       # -berok will link without error, but may produce a broken library.
-       _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-       # -bexpall does not export symbols beginning with underscore (_)
-       _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-       # Exported symbols can be pulled into shared objects from archives
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
-       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-       # This is similar to how AIX traditionally builds it's shared libraries.
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-      fi
-    fi
-    ;;
-  chorus*)
-    case $cc_basename in
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-
-  cygwin* | mingw* | pw32*)
-    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-    # as there is no search path for DLLs.
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-    _LT_AC_TAGVAR(always_export_symbols, $1)=no
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-      # If the export-symbols file already is a .def file (1st line
-      # is EXPORTS), use it as is; otherwise, prepend...
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-       cp $export_symbols $output_objdir/$soname.def;
-      else
-       echo EXPORTS > $output_objdir/$soname.def;
-       cat $export_symbols >> $output_objdir/$soname.def;
-      fi~
-      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-  ;;
-
-  darwin* | rhapsody*)
-  if test "$GXX" = yes; then
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    case "$host_os" in
-    rhapsody* | darwin1.[[012]])
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
-      ;;
-    *) # Darwin 1.3 on
-      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-      else
-        case ${MACOSX_DEPLOYMENT_TARGET} in
-          10.[[012]])
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-            ;;
-          10.*)
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
-            ;;
-        esac
-      fi
-      ;;
-    esac
-    lt_int_apple_cc_single_mod=no
-    output_verbose_link_cmd='echo'
-    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
-      lt_int_apple_cc_single_mod=yes
-    fi
-    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-    else
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-    fi
-    _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-
-    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    else
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    fi
-    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-    _LT_AC_TAGVAR(hardcode_direct, $1)=no
-    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-  else
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-  fi
-    ;;
-
-  dgux*)
-    case $cc_basename in
-      ec++)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      ghcx)
-       # Green Hills C++ Compiler
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  freebsd[12]*)
-    # C++ shared libraries reported to be fairly broken before switch to ELF
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  freebsd-elf*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    ;;
-  freebsd* | kfreebsd*-gnu)
-    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-    # conventions
-    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-    ;;
-  gnu*)
-    ;;
-  hpux9*)
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                               # but as the default
-                               # location of the library.
-
-    case $cc_basename in
-    CC)
-      # FIXME: insert proper C++ library support
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    aCC)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      # Commands to make compiler produce verbose output that lists
-      # what "hidden" libraries, object files and flags are used when
-      # linking a shared library.
-      #
-      # There doesn't appear to be a way to prevent this compiler from
-      # explicitly linking system object files so we need to strip them
-      # from the output so that they don't get included in the library
-      # dependencies.
-      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-      ;;
-    *)
-      if test "$GXX" = yes; then
-        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-        # FIXME: insert proper C++ library support
-        _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-    ;;
-  hpux10*|hpux11*)
-    if test $with_gnu_ld = no; then
-      case "$host_cpu" in
-      hppa*64*)
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-        ;;
-      ia64*)
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-        ;;
-      *)
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        ;;
-      esac
-    fi
-    case "$host_cpu" in
-    hppa*64*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-    ia64*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                             # but as the default
-                                             # location of the library.
-      ;;
-    *)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-                                             # but as the default
-                                             # location of the library.
-      ;;
-    esac
-
-    case $cc_basename in
-      CC)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      aCC)
-       case "$host_cpu" in
-       hppa*64*|ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-         ;;
-       *)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-         ;;
-       esac
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes; then
-         if test $with_gnu_ld = no; then
-           case "$host_cpu" in
-           ia64*|hppa*64*)
-             _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
-             ;;
-           *)
-             _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             ;;
-           esac
-         fi
-       else
-         # FIXME: insert proper C++ library support
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  irix5* | irix6*)
-    case $cc_basename in
-      CC)
-       # SGI C++
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-
-       # Archives containing C++ object files must be created using
-       # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
-       # necessary to make sure instantiated templates are included
-       # in the archive.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-       ;;
-      *)
-       if test "$GXX" = yes; then
-         if test "$with_gnu_ld" = no; then
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-         else
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
-         fi
-       fi
-       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-       ;;
-    esac
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    ;;
-  linux*)
-    case $cc_basename in
-      KCC)
-       # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-       # KCC will only create a shared library if the output file
-       # ends with ".so" (or ".sl" for HP-UX), so rename the library
-       # to its proper name (with version) after linking.
-       _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-
-       # Archives containing C++ object files must be created using
-       # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-       ;;
-      icpc)
-       # Intel C++
-       with_gnu_ld=yes
-       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-       ;;
-      cxx)
-       # Compaq C++
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-
-       runpath_var=LD_RUN_PATH
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-       ;;
-    esac
-    ;;
-  lynxos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  m88k*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  mvs*)
-    case $cc_basename in
-      cxx)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  netbsd* | knetbsd*-gnu)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    fi
-    # Workaround some broken pre-1.5 toolchains
-    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-    ;;
-  osf3*)
-    case $cc_basename in
-      KCC)
-       # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-       # KCC will only create a shared library if the output file
-       # ends with ".so" (or ".sl" for HP-UX), so rename the library
-       # to its proper name (with version) after linking.
-       _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Archives containing C++ object files must be created using
-       # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
-       ;;
-      RCC)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      cxx)
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-         # Commands to make compiler produce verbose output that lists
-         # what "hidden" libraries, object files and flags are used when
-         # linking a shared library.
-         output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-       else
-         # FIXME: insert proper C++ library support
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  osf4* | osf5*)
-    case $cc_basename in
-      KCC)
-       # Kuck and Associates, Inc. (KAI) C++ Compiler
-
-       # KCC will only create a shared library if the output file
-       # ends with ".so" (or ".sl" for HP-UX), so rename the library
-       # to its proper name (with version) after linking.
-       _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Archives containing C++ object files must be created using
-       # the KAI C++ compiler.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
-       ;;
-      RCC)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      cxx)
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-         echo "-hidden">> $lib.exp~
-         $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
-         $rm $lib.exp'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-         # Commands to make compiler produce verbose output that lists
-         # what "hidden" libraries, object files and flags are used when
-         # linking a shared library.
-         output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-
-       else
-         # FIXME: insert proper C++ library support
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  psos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  sco*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    case $cc_basename in
-      CC)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  sunos4*)
-    case $cc_basename in
-      CC)
-       # Sun C++ 4.x
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      lcc)
-       # Lucid
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  solaris*)
-    case $cc_basename in
-      CC)
-       # Sun C++ 4.2, 5.x and Centerline C++
-       _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-       $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-       case $host_os in
-         solaris2.[0-5] | solaris2.[0-5].*) ;;
-         *)
-           # The C++ compiler is used as linker so we must use $wl
-           # flag to pass the commands to the underlying system
-           # linker.
-           # Supported since Solaris 2.6 (maybe 2.5.1?)
-           _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-           ;;
-       esac
-       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-       # Commands to make compiler produce verbose output that lists
-       # what "hidden" libraries, object files and flags are used when
-       # linking a shared library.
-       #
-       # There doesn't appear to be a way to prevent this compiler from
-       # explicitly linking system object files so we need to strip them
-       # from the output so that they don't get included in the library
-       # dependencies.
-       output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-
-       # Archives containing C++ object files must be created using
-       # "CC -xar", where "CC" is the Sun C++ compiler.  This is
-       # necessary to make sure instantiated templates are included
-       # in the archive.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-       ;;
-      gcx)
-       # Green Hills C++ Compiler
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-
-       # The C++ compiler must be used to create the archive.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-       ;;
-      *)
-       # GNU C++ compiler with Solaris linker
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-         if $CC --version | grep -v '^2\.7' > /dev/null; then
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-         else
-           # g++ 2.7 appears to require `-G' NOT `-shared' on this
-           # platform.
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-
-           # Commands to make compiler produce verbose output that lists
-           # what "hidden" libraries, object files and flags are used when
-           # linking a shared library.
-           output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-         fi
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-       fi
-       ;;
-    esac
-    ;;
-  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    ;;
-  tandem*)
-    case $cc_basename in
-      NCC)
-       # NonStop-UX NCC 3.20
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  vxworks*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  *)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-with_gnu_ld=$lt_save_with_gnu_ld
-lt_cv_path_LDCXX=$lt_cv_path_LD
-lt_cv_path_LD=$lt_save_path_LD
-lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-# ------------------------
-# Figure out "hidden" library dependencies from verbose
-# compiler output when linking a shared library.
-# Parse the compiler output and extract the necessary
-# objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
-dnl we can't use the lt_simple_compile_test_code here,
-dnl because it contains code intended for an executable,
-dnl not a library.  It's possible we should let each
-dnl tag define a new lt_????_link_test_code variable,
-dnl but it's only used here...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-EOF
-])
-dnl Parse the compiler output and extract the necessary
-dnl objects, libraries and library flags.
-if AC_TRY_EVAL(ac_compile); then
-  # Parse the compiler output and extract the necessary
-  # objects, libraries and library flags.
-
-  # Sentinel used to keep track of whether or not we are before
-  # the conftest object file.
-  pre_test_object_deps_done=no
-
-  # The `*' in the case matches for architectures that use `case' in
-  # $output_verbose_cmd can trigger glob expansion during the loop
-  # eval without this substitution.
-  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
-
-  for p in `eval $output_verbose_link_cmd`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" \
-         || test $p = "-R"; then
-        prev=$p
-        continue
-       else
-        prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        case $p in
-        -L* | -R*)
-          # Internal compiler library paths should come after those
-          # provided the user.  The postdeps already come after the
-          # user supplied libs so there is no need to process them.
-          if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
-            _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-          else
-            _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-          fi
-          ;;
-        # The "-l" case would never come before the object being
-        # linked, so don't bother handling this case.
-        esac
-       else
-        if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
-          _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
-        else
-          _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
-        fi
-       fi
-       ;;
-
-    *.$objext)
-       # This assumes that the test object file only shows up
-       # once in the compiler output.
-       if test "$p" = "conftest.$objext"; then
-        pre_test_object_deps_done=yes
-        continue
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
-          _LT_AC_TAGVAR(predep_objects, $1)="$p"
-        else
-          _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
-        fi
-       else
-        if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
-          _LT_AC_TAGVAR(postdep_objects, $1)="$p"
-        else
-          _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
-        fi
-       fi
-       ;;
-
-    *) ;; # Ignore the rest.
-
-    esac
-  done
-
-  # Clean up.
-  rm -f a.out a.exe
-else
-  echo "libtool.m4: error: problem compiling $1 test program"
-fi
-
-$rm -f confest.$objext
-
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="      program t\n      end\n"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-aix4* | aix5*)
-  test "$enable_shared" = yes && enable_static=no
-  ;;
-esac
-AC_MSG_RESULT([$enable_shared])
-
-AC_MSG_CHECKING([whether to build static libraries])
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
-
-# Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-## CAVEAT EMPTOR:
-## There is no encapsulation within the following macros, do not change
-## the running order or otherwise move them around unless you know exactly
-## what you are doing...
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_TAGVAR(objext, $1)=$objext
-
-# Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-
-# Code to be used in simple link tests
-lt_simple_link_test_code="$lt_simple_compile_test_code"
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_COMPILER
-
-# Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then create an initial libtool script
-# with a default configuration from the untagged config vars.  Otherwise
-# add code to config.status for appending the configuration named by
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    _LT_AC_TAGVAR(compiler, $1) \
-    _LT_AC_TAGVAR(CC, $1) \
-    _LT_AC_TAGVAR(LD, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
-    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
-    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
-    _LT_AC_TAGVAR(old_archive_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
-    _LT_AC_TAGVAR(predep_objects, $1) \
-    _LT_AC_TAGVAR(postdep_objects, $1) \
-    _LT_AC_TAGVAR(predeps, $1) \
-    _LT_AC_TAGVAR(postdeps, $1) \
-    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
-    _LT_AC_TAGVAR(archive_cmds, $1) \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(postinstall_cmds, $1) \
-    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
-    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
-    _LT_AC_TAGVAR(no_undefined_flag, $1) \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
-    _LT_AC_TAGVAR(hardcode_automatic, $1) \
-    _LT_AC_TAGVAR(module_cmds, $1) \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
-    _LT_AC_TAGVAR(exclude_expsyms, $1) \
-    _LT_AC_TAGVAR(include_expsyms, $1); do
-
-    case $var in
-    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(module_cmds, $1) | \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\[$]0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
-    ;;
-  esac
-
-ifelse([$1], [],
-  [cfgfile="${ofile}T"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  $rm -f "$cfgfile"
-  AC_MSG_NOTICE([creating $ofile])],
-  [cfgfile="$ofile"])
-
-  cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A sed program that does not truncate output.
-SED=$lt_SED
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="$SED -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation ?
-need_locks=$lt_need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen_support=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$lt_libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$lt_library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$lt_soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$lt_deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$lt_file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-
-# Transform the output of nm in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# Set to yes if building a shared library automatically hardcodes DIR into the library
-# and all subsequent libraries and executables linked against it.
-hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
-  case $host_os in
-  aix3*)
-    cat <<\EOF >> "$cfgfile"
-
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-
-  mv -f "$cfgfile" "$ofile" || \
-    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-  chmod +x "$ofile"
-])
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-[
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[[BCDEGRST]]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-irix* | nonstopux*)
-  symcode='[[BCDEGRST]]'
-  ;;
-osf*)
-  symcode='[[BCDEGQRST]]'
-  ;;
-solaris* | sysv5*)
-  symcode='[[BDRT]]'
-  ;;
-sysv4)
-  symcode='[[DFNSTU]]'
-  ;;
-esac
-
-# Handle CRLF in mingw tool chain
-opt_cr=
-case $build_os in
-mingw*)
-  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Write the raw and C identifiers.
-  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[     ]]\($symcode$symcode*\)[[       ]][[    ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  if AC_TRY_EVAL(ac_compile); then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-       mv -f "$nlist"T "$nlist"
-      else
-       rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if grep ' nm_test_var$' "$nlist" >/dev/null; then
-       if grep ' nm_test_func$' "$nlist" >/dev/null; then
-         cat <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
-         cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-         cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-           pipe_works=yes
-         fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_save_CFLAGS"
-       else
-         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-       fi
-      else
-       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-      fi
-    else
-      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-    fi
-  else
-    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-    cat conftest.$ac_ext >&5
-  fi
-  rm -f conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    lt_cv_sys_global_symbol_pipe=
-  fi
-done
-])
-if test -z "$lt_cv_sys_global_symbol_pipe"; then
-  lt_cv_sys_global_symbol_to_cdecl=
-fi
-if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-  AC_MSG_RESULT(failed)
-else
-  AC_MSG_RESULT(ok)
-fi
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-    amigaos*)
-      # FIXME: we need at least 68020 code to build shared libraries, but
-      # adding the `-m68020' flag to GCC prevents building anything better,
-      # like `-m68040'.
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | os2* | pw32*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case "$host_cpu" in
-      hppa*64*|ia64*)
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix4* | aix5*)
-       # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
-         # AIX 5 now supports IA64 processor
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-       else
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-       fi
-       ;;
-      chorus*)
-       case $cc_basename in
-       cxch68)
-         # Green Hills C++ Compiler
-         # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-         ;;
-       esac
-       ;;
-      dgux*)
-       case $cc_basename in
-         ec++)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         ghcx)
-           # Green Hills C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      freebsd* | kfreebsd*-gnu)
-       # FreeBSD uses GNU C++
-       ;;
-      hpux9* | hpux10* | hpux11*)
-       case $cc_basename in
-         CC)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
-           if test "$host_cpu" != ia64; then
-             _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-           fi
-           ;;
-         aCC)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
-           case "$host_cpu" in
-           hppa*64*|ia64*)
-             # +Z the default
-             ;;
-           *)
-             _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-             ;;
-           esac
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      irix5* | irix6* | nonstopux*)
-       case $cc_basename in
-         CC)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           # CC pic flag -KPIC is the default.
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      linux*)
-       case $cc_basename in
-         KCC)
-           # KAI C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           ;;
-         icpc)
-           # Intel C++
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         cxx)
-           # Compaq C++
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      lynxos*)
-       ;;
-      m88k*)
-       ;;
-      mvs*)
-       case $cc_basename in
-         cxx)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      netbsd* | knetbsd*-gnu)
-       ;;
-      osf3* | osf4* | osf5*)
-       case $cc_basename in
-         KCC)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           ;;
-         RCC)
-           # Rational C++ 2.4.1
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         cxx)
-           # Digital/Compaq C++
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           # Make sure the PIC flag is empty.  It appears that all Alpha
-           # Linux and Compaq Tru64 Unix objects are PIC.
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      psos*)
-       ;;
-      sco*)
-       case $cc_basename in
-         CC)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      solaris*)
-       case $cc_basename in
-         CC)
-           # Sun C++ 4.2, 5.x and Centerline C++
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-           ;;
-         gcx)
-           # Green Hills C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sunos4*)
-       case $cc_basename in
-         CC)
-           # Sun C++ 4.x
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         lcc)
-           # Lucid
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      tandem*)
-       case $cc_basename in
-         NCC)
-           # NonStop-UX NCC 3.20
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      unixware*)
-       ;;
-      vxworks*)
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-       ;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # FIXME: we need at least 68020 code to build shared libraries, but
-      # adding the `-m68020' flag to GCC prevents building anything better,
-      # like `-m68040'.
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | pw32* | os2*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    msdosdjgpp*)
-      # Just because we use GCC doesn't mean we suddenly get shared libraries
-      # on systems that don't support them.
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case "$host_cpu" in
-      hppa*64*|ia64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-
-    mingw* | pw32* | os2*)
-      # This hack is so that the source file can tell whether it is being
-      # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case "$host_cpu" in
-      hppa*64*|ia64*)
-       # +Z the default
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    linux*)
-      case $CC in
-      icc* | ecc*)
-       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      ccc*)
-        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    sco3.2v5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
-    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
-    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case "$host_os" in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  case $host_os in
-  aix4* | aix5*)
-    # If we're using GNU nm, then we don't want the "-C" option.
-    # -C means demangle to AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw*)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux*)
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-],[
-  runpath_var=
-  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_AC_TAGVAR(archive_cmds, $1)=
-  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
-  _LT_AC_TAGVAR(module_cmds, $1)=
-  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(always_export_symbols, $1)=no
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_AC_TAGVAR(include_expsyms, $1)=
-  # exclude_expsyms can be an extended regexp of symbols to exclude
-  # it will be wrapped by ` (' and `)$', so one must not match beginning or
-  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-  # as well as any symbol that contains `d'.
-  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
-  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-  # platforms (ab)use it in PIC code, but their linkers get confused if
-  # the symbol is explicitly referenced.  Since portable code cannot
-  # rely on this symbol name, it's probably fine to never include it in
-  # preloaded symbol tables.
-  extract_expsyms_cmds=
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; then
-    # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
-
-    # See if GNU ld supports shared libraries.
-    case $host_os in
-    aix3* | aix4* | aix5*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=no
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
-       # If the export-symbols file already is a .def file (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-         cp $export_symbols $output_objdir/$soname.def;
-       else
-         echo EXPORTS > $output_objdir/$soname.def;
-         cat $export_symbols >> $output_objdir/$soname.def;
-       fi~
-       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    netbsd* | knetbsd*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      fi
-      ;;
-
-    solaris* | sysv5*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-  linux*)
-    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
-      supports_anon_versioning=no
-      case `$LD -v 2>/dev/null` in
-        *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-        *\ 2.11.*) ;; # other 2.11 versions
-        *) supports_anon_versioning=yes ;;
-      esac
-      if test $supports_anon_versioning = yes; then
-        _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
-cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-$echo "local: *; };" >> $output_objdir/$libname.ver~
-        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-      else
-        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
-      fi
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-    ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
-      runpath_var=LD_RUN_PATH
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-      # ancient GNU ld didn't support --whole-archive et. al.
-      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-      fi
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$link_static_flag"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix4* | aix5*)
-      if test "$host_cpu" = ia64; then
-       # On IA64, the linker does run time linking by default, so we don't
-       # have to do anything special.
-       aix_use_runtimelinking=no
-       exp_sym_flag='-Bexport'
-       no_entry_flag=""
-      else
-       # If we're using GNU nm, then we don't want the "-C" option.
-       # -C means demangle to AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-         _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-       else
-         _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-       fi
-       aix_use_runtimelinking=no
-
-       # Test if we are trying to use run time linking or normal
-       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-       # need to do runtime linking.
-       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-       esac
-
-       exp_sym_flag='-bexport'
-       no_entry_flag='-bnoentry'
-      fi
-
-      # When large executables or shared objects are built, AIX ld can
-      # have problems creating the table of contents.  If linking a library
-      # or program results in "error TOC overflow" add -mminimal-toc to
-      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
-      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-
-      _LT_AC_TAGVAR(archive_cmds, $1)=''
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-      if test "$GCC" = yes; then
-       case $host_os in aix4.[012]|aix4.[012].*)
-       # We only want to do this on AIX 4.2 and lower, the check
-       # below for broken collect2 doesn't work under 4.3+
-         collect2name=`${CC} -print-prog-name=collect2`
-         if test -f "$collect2name" && \
-          strings "$collect2name" | grep resolve_lib_name >/dev/null
-         then
-         # We have reworked collect2
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-         else
-         # We have old collect2
-         _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-         # It fails to find uninstalled libraries when the uninstalled
-         # path is not listed in the libpath.  Setting hardcode_minus_L
-         # to unsupported forces relinking
-         _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-       esac
-       shared_flag='-shared'
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; then
-       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-       # chokes on -Wl,-G. The following line is correct:
-         shared_flag='-G'
-       else
-       if test "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-       fi
-       fi
-      fi
-
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       _LT_AC_SYS_LIBPATH_AIX
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-       if test "$host_cpu" = ia64; then
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
-       else
-        # Determine the default libpath from the value encoded in an empty executable.
-        _LT_AC_SYS_LIBPATH_AIX
-        _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-         # Warning - without using the other run time loading flags,
-         # -berok will link without error, but may produce a broken library.
-         _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-         # -bexpall does not export symbols beginning with underscore (_)
-         _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-         # Exported symbols can be pulled into shared objects from archives
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-         # This is similar to how AIX traditionally builds it's shared libraries.
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      # see comment about different semantics on the GNU ld section
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    bsdi4*)
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Tell ltmain to make .lib files, not .a files.
-      libext=lib
-      # Tell ltmain to make .dll files, not .so files.
-      shrext_cmds=".dll"
-      # FIXME: Setting linknames here is a bad hack.
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-    if test "$GXX" = yes ; then
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      case "$host_os" in
-      rhapsody* | darwin1.[[012]])
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
-       ;;
-      *) # Darwin 1.3 on
-      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-      else
-        case ${MACOSX_DEPLOYMENT_TARGET} in
-          10.[[012]])
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
-            ;;
-          10.*)
-            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
-            ;;
-        esac
-      fi
-       ;;
-      esac
-       lt_int_apple_cc_single_mod=no
-       output_verbose_link_cmd='echo'
-       if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
-         lt_int_apple_cc_single_mod=yes
-       fi
-       if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-       else
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-      fi
-      _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
-        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-        else
-          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-        fi
-          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-      ;;
-
-    dgux*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-    # support.  Future versions do this automatically, but an explicit c++rt0.o
-    # does not break anything, and helps significantly (at the cost of a little
-    # extra space).
-    freebsd2.2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | kfreebsd*-gnu)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10* | hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case "$host_cpu" in
-       hppa*64*|ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      else
-       case "$host_cpu" in
-       hppa*64*|ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
-         ;;
-       *)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       case "$host_cpu" in
-       hppa*64*)
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no
-         _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-         ;;
-       ia64*)
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no
-         _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         ;;
-       *)
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-         _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | knetbsd*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    openbsd*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      else
-       case $host_os in
-        openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-          _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-          _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-          ;;
-        *)
-          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-          _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-          ;;
-       esac
-      fi
-      ;;
-
-    os2*)
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-       $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
-
-       # Both c and cxx compiler support -rpath directly
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    sco3.2v5*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-       $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      case $host_os in
-      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
-      esac
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no
-        ;;
-       motorola)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4.2uw2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      hardcode_runpath_var=yes
-      runpath_var=LD_RUN_PATH
-      ;;
-
-   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      runpath_var='LD_RUN_PATH'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv5*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-      # $CC -shared without GNU ld will not create a library from C++
-      # object files and a static libstdc++, better avoid it by now
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_AC_TAGVAR(archive_cmds, $1) in
-    *'~'*)
-      # FIXME: we may have to deal with multi-command sequences.
-      ;;
-    '$CC '*)
-      # Test whether the compiler implicitly links with -lc since on some
-      # systems, -lgcc has to come before -lc. If gcc already passes -lc
-      # to ld, don't add -lc before -lgcc.
-      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
-        then
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
-  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-  AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-############################################################
-# NOTE: This macro has been submitted for inclusion into   #
-#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
-#  a released version of Autoconf we should remove this    #
-#  macro and use it instead.                               #
-############################################################
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-AC_DEFUN([LT_AC_PROG_SED],
-[AC_MSG_CHECKING([for a sed that does not truncate output])
-AC_CACHE_VAL(lt_cv_path_SED,
-[# Loop through the user's path and test for sed and gsed.
-# Then use that list of sed's as ones to test for truncation.
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for lt_ac_prog in sed gsed; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-      fi
-    done
-  done
-done
-lt_ac_max=0
-lt_ac_count=0
-# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-# along with /bin/sed that truncates output.
-for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-  test ! -f $lt_ac_sed && break
-  cat /dev/null > conftest.in
-  lt_ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-  # Check for GNU sed and select it if it is found.
-  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-    lt_cv_path_SED=$lt_ac_sed
-    break
-  fi
-  while true; do
-    cat conftest.in conftest.in >conftest.tmp
-    mv conftest.tmp conftest.in
-    cp conftest.in conftest.nl
-    echo >>conftest.nl
-    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-    cmp -s conftest.out conftest.nl || break
-    # 10000 chars as input seems more than enough
-    test $lt_ac_count -gt 10 && break
-    lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
-      lt_ac_max=$lt_ac_count
-      lt_cv_path_SED=$lt_ac_sed
-    fi
-  done
-done
-SED=$lt_cv_path_SED
-])
-AC_MSG_RESULT([$SED])
-])
diff --git a/tags/gpgme-1-1-1/m4/pth.m4 b/tags/gpgme-1-1-1/m4/pth.m4
deleted file mode 100644 (file)
index 10f64e1..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-dnl ##
-dnl ##  GNU Pth - The GNU Portable Threads
-dnl ##  Copyright (c) 1999-2002 Ralf S. Engelschall <rse@engelschall.com>
-dnl ##
-dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
-dnl ##  library which can be found at http://www.gnu.org/software/pth/.
-dnl ##
-dnl ##  This library is free software; you can redistribute it and/or
-dnl ##  modify it under the terms of the GNU Lesser General Public
-dnl ##  License as published by the Free Software Foundation; either
-dnl ##  version 2.1 of the License, or (at your option) any later version.
-dnl ##
-dnl ##  This library is distributed in the hope that it will be useful,
-dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-dnl ##  Lesser General Public License for more details.
-dnl ##
-dnl ##  You should have received a copy of the GNU Lesser General Public
-dnl ##  License along with this library; if not, write to the Free Software
-dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
-dnl ##
-dnl ##  pth.m4: Autoconf macro for locating GNU Pth from within
-dnl ##          configure.in of third-party software packages
-dnl ##
-
-dnl ##
-dnl ##  Synopsis:
-dnl ##  AC_CHECK_PTH([MIN-VERSION [,          # minimum Pth version, e.g. 1.2.0
-dnl ##                DEFAULT-WITH-PTH [,     # default value for --with-pth option
-dnl ##                DEFAULT-WITH-PTH-TEST [,# default value for --with-pth-test option
-dnl ##                EXTEND-VARS [,          # whether CFLAGS/LDFLAGS/etc are extended
-dnl ##                ACTION-IF-FOUND [,      # action to perform if Pth was found
-dnl ##                ACTION-IF-NOT-FOUND     # action to perform if Pth was not found
-dnl ##                ]]]]]])
-dnl ##  Examples:
-dnl ##  AC_CHECK_PTH(1.2.0)
-dnl ##  AC_CHECK_PTH(1.2.0,,,no,CFLAGS="$CFLAGS -DHAVE_PTH $PTH_CFLAGS")
-dnl ##  AC_CHECK_PTH(1.2.0,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_PTH")
-dnl ##
-dnl
-dnl #   auxilliary macros
-AC_DEFUN([_AC_PTH_ERROR], [dnl
-AC_MSG_RESULT([*FAILED*])
-dnl define(_ac_pth_line,dnl
-dnl "+------------------------------------------------------------------------+")
-dnl echo " _ac_pth_line" 1>&2
-cat <<EOT | sed -e 's/^[[      ]]*/ | /' -e 's/>>/  /' 1>&2
-$1
-EOT
-dnl echo " _ac_pth_line" 1>&2
-dnl undefine(_ac_pth_line)
-exit 1
-])
-AC_DEFUN([_AC_PTH_VERBOSE], [dnl
-if test ".$verbose" = .yes; then
-    AC_MSG_RESULT([  $1])
-fi
-])
-dnl #   the user macro
-AC_DEFUN([AC_CHECK_PTH], [dnl
-dnl
-dnl #   prerequisites
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_CPP])dnl
-dnl
-PTH_CPPFLAGS=''
-PTH_CFLAGS=''
-PTH_LDFLAGS=''
-PTH_LIBS=''
-AC_SUBST(PTH_CPPFLAGS)
-AC_SUBST(PTH_CFLAGS)
-AC_SUBST(PTH_LDFLAGS)
-AC_SUBST(PTH_LIBS)
-dnl #   command line options
-AC_MSG_CHECKING(for GNU Pth)
-_AC_PTH_VERBOSE([])
-AC_ARG_WITH(pth,dnl
-[  --with-pth[=ARG]        Build with GNU Pth Library  (default=]ifelse([$2],,yes,$2)[)],dnl
-,dnl
-with_pth="ifelse([$2],,yes,$2)"
-)dnl
-AC_ARG_WITH(pth-test,dnl
-[  --with-pth-test         Perform GNU Pth Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
-,dnl
-with_pth_test="ifelse([$3],,yes,$3)"
-)dnl
-_AC_PTH_VERBOSE([+ Command Line Options:])
-_AC_PTH_VERBOSE([    o --with-pth=$with_pth])
-_AC_PTH_VERBOSE([    o --with-pth-test=$with_pth_test])
-dnl
-dnl #   configuration
-if test ".$with_pth" != .no; then
-    _pth_subdir=no
-    _pth_subdir_opts=''
-    case "$with_pth" in
-        subdir:* )
-            _pth_subdir=yes
-            changequote(, )dnl
-            _pth_subdir_opts=`echo $with_pth | sed -e 's/^subdir:[^    ]*[     ]*//'`
-            with_pth=`echo $with_pth | sed -e 's/^subdir:\([^  ]*\).*$/\1/'`
-            changequote([, ])dnl
-            ;;
-    esac
-    _pth_version=""
-    _pth_location=""
-    _pth_type=""
-    _pth_cppflags=""
-    _pth_cflags=""
-    _pth_ldflags=""
-    _pth_libs=""
-    if test ".$with_pth" = .yes; then
-        #   via config script in $PATH
-        changequote(, )dnl
-        _pth_version=`(pth-config --version) 2>/dev/null |\
-                      sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
-        changequote([, ])dnl
-        if test ".$_pth_version" != .; then
-            _pth_location=`pth-config --prefix`
-            _pth_type='installed'
-            _pth_cppflags=`pth-config --cflags`
-            _pth_cflags=`pth-config --cflags`
-            _pth_ldflags=`pth-config --ldflags`
-            _pth_libs=`pth-config --libs`
-        fi
-    elif test -d "$with_pth"; then
-        with_pth=`echo $with_pth | sed -e 's;/*$;;'`
-        _pth_found=no
-        #   via locally included source tree
-        if test ".$_pth_subdir" = .yes; then
-            _pth_location="$with_pth"
-            _pth_type='local'
-            _pth_cppflags="-I$with_pth"
-            _pth_cflags="-I$with_pth"
-            if test -f "$with_pth/ltconfig"; then
-                _pth_ldflags="-L$with_pth/.libs"
-            else
-                _pth_ldflags="-L$with_pth"
-            fi
-            _pth_libs="-lpth"
-            changequote(, )dnl
-            _pth_version=`grep '^const char PTH_Hello' $with_pth/pth_vers.c |\
-                          sed -e 's;^.*Version[        ]*\([0-9]*\.[0-9]*[.ab][0-9]*\)[        ].*$;\1;'`
-            changequote([, ])dnl
-            _pth_found=yes
-            ac_configure_args="$ac_configure_args --enable-subdir $_pth_subdir_opts"
-            with_pth_test=no
-        fi
-        #   via config script under a specified directory
-        #   (a standard installation, but not a source tree)
-        if test ".$_pth_found" = .no; then
-            for _dir in $with_pth/bin $with_pth; do
-                if test -f "$_dir/pth-config"; then
-                    test -f "$_dir/pth-config.in" && continue # pth-config in source tree!
-                    changequote(, )dnl
-                    _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
-                                  sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
-                    changequote([, ])dnl
-                    if test ".$_pth_version" != .; then
-                        _pth_location=`$_dir/pth-config --prefix`
-                        _pth_type="installed"
-                        _pth_cppflags=`$_dir/pth-config --cflags`
-                        _pth_cflags=`$_dir/pth-config --cflags`
-                        _pth_ldflags=`$_dir/pth-config --ldflags`
-                        _pth_libs=`$_dir/pth-config --libs`
-                        _pth_found=yes
-                        break
-                    fi
-                fi
-            done
-        fi
-        #   in any subarea under a specified directory
-        #   (either a special installation or a Pth source tree)
-        if test ".$_pth_found" = .no; then
-            changequote(, )dnl
-            _pth_found=0
-            for _file in x `find $with_pth -name "pth.h" -type f -print`; do
-                test .$_file = .x && continue
-                _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
-                _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
-                              sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
-                if test ".$_pth_version" = .; then
-                    _pth_version=`grep '^#define PTH_VERSION_STR' $_file |\
-                                  sed -e 's;^#define[  ]*PTH_VERSION_STR[      ]*"\([0-9]*\.[0-9]*[.ab][0-9]*\)[       ].*$;\1;'`
-                fi
-                _pth_cppflags="-I$_dir"
-                _pth_cflags="-I$_dir"
-                _pth_found=`expr $_pth_found + 1`
-            done
-            for _file in x `find $with_pth -name "libpth.[aso]" -type f -print`; do
-                test .$_file = .x && continue
-                _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
-                _pth_ldflags="-L$_dir"
-                _pth_libs="-lpth"
-                _pth_found=`expr $_pth_found + 1`
-            done
-            changequote([, ])dnl
-            if test ".$_pth_found" = .2; then
-                _pth_location="$with_pth"
-                _pth_type="uninstalled"
-            else
-                _pth_version=''
-            fi
-        fi
-    fi
-    _AC_PTH_VERBOSE([+ Determined Location:])
-    _AC_PTH_VERBOSE([    o path: $_pth_location])
-    _AC_PTH_VERBOSE([    o type: $_pth_type])
-    if test ".$_pth_version" = .; then
-       with_pth=no
-    else
-dnl        if test ".$with_pth" != .yes; then
-dnl             _AC_PTH_ERROR([dnl
-dnl             Unable to locate GNU Pth under $with_pth.
-dnl             Please specify the correct path to either a GNU Pth installation tree
-dnl             (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
-dnl             the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
-dnl             path to a pth-X.Y.Z/ directory; but make sure the package is already
-dnl             built, i.e., the "configure; make" step was already performed there).])
-dnl        else
-dnl             _AC_PTH_ERROR([dnl
-dnl             Unable to locate GNU Pth in any system-wide location (see \$PATH).
-dnl             Please specify the correct path to either a GNU Pth installation tree
-dnl             (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
-dnl             the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
-dnl             path to a pth-X.Y.Z/ directory; but make sure the package is already
-dnl             built, i.e., the "configure; make" step was already performed there).])
-dnl        fi
-dnl    fi
-    dnl #
-    dnl #  Check whether the found version is sufficiently new
-    dnl #
-    _req_version="ifelse([$1],,1.0.0,$1)"
-    for _var in _pth_version _req_version; do
-        eval "_val=\"\$${_var}\""
-        _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\1/'`
-        _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\2/'`
-        _rtype=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\3/'`
-        _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\4/'`
-        case $_rtype in
-            "a" ) _rtype=0 ;;
-            "b" ) _rtype=1 ;;
-            "." ) _rtype=2 ;;
-        esac
-        _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \
-              "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"`
-        eval "${_var}_hex=\"\$_hex\""
-    done
-    _AC_PTH_VERBOSE([+ Determined Versions:])
-    _AC_PTH_VERBOSE([    o existing: $_pth_version -> 0x$_pth_version_hex])
-    _AC_PTH_VERBOSE([    o required: $_req_version -> 0x$_req_version_hex])
-    _ok=0
-    if test ".$_pth_version_hex" != .; then
-        if test ".$_req_version_hex" != .; then
-            if test $_pth_version_hex -ge $_req_version_hex; then
-                _ok=1
-            fi
-        fi
-    fi
-    if test ".$_ok" = .0; then
-        _AC_PTH_ERROR([dnl
-        Found Pth version $_pth_version, but required at least version $_req_version.
-        Upgrade Pth under $_pth_location to $_req_version or higher first, please.])
-    fi
-    dnl #
-    dnl #   Perform Pth Sanity Compile Check
-    dnl #
-    if test ".$with_pth_test" = .yes; then
-        _ac_save_CPPFLAGS="$CPPFLAGS"
-        _ac_save_CFLAGS="$CFLAGS"
-        _ac_save_LDFLAGS="$LDFLAGS"
-        _ac_save_LIBS="$LIBS"
-        CPPFLAGS="$CPPFLAGS $_pth_cppflags"
-        CFLAGS="$CFLAGS $_pth_cflags"
-        LDFLAGS="$LDFLAGS $_pth_ldflags"
-        LIBS="$LIBS $_pth_libs"
-        _AC_PTH_VERBOSE([+ Test Build Environment:])
-        _AC_PTH_VERBOSE([    o CPPFLAGS=\"$CPPFLAGS\"])
-        _AC_PTH_VERBOSE([    o CFLAGS=\"$CFLAGS\"])
-        _AC_PTH_VERBOSE([    o LDFLAGS=\"$LDFLAGS\"])
-        _AC_PTH_VERBOSE([    o LIBS=\"$LIBS\"])
-        cross_compile=no
-        define(_code1, [dnl
-        #include <stdio.h>
-        #include <pth.h>
-        ])
-        define(_code2, [dnl
-            FILE *fp;
-            if (!(fp = fopen("conftestval", "w")))
-                exit(1);
-            fprintf(fp, "hmm");
-            fclose(fp);
-            pth_init();
-            pth_kill();
-            if (!(fp = fopen("conftestval", "w")))
-                exit(1);
-            fprintf(fp, "yes");
-            fclose(fp);
-            exit(0);
-        ])
-        _AC_PTH_VERBOSE([+ Performing Sanity Checks:])
-        _AC_PTH_VERBOSE([    o pre-processor test])
-        AC_TRY_CPP(_code1, _ok=yes, _ok=no)
-        if test ".$_ok" != .yes; then
-            _AC_PTH_ERROR([dnl
-            Found GNU Pth $_pth_version under $_pth_location, but
-            was unable to perform a sanity pre-processor check. This means
-            the GNU Pth header pth.h was not found.
-            We used the following build environment:
-            >> CPP="$CPP"
-            >> CPPFLAGS="$CPPFLAGS"
-            See config.log for possibly more details.])
-        fi
-        _AC_PTH_VERBOSE([    o link check])
-        AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
-        if test ".$_ok" != .yes; then
-            _AC_PTH_ERROR([dnl
-            Found GNU Pth $_pth_version under $_pth_location, but
-            was unable to perform a sanity linker check. This means
-            the GNU Pth library libpth.a was not found.
-            We used the following build environment:
-            >> CC="$CC"
-            >> CFLAGS="$CFLAGS"
-            >> LDFLAGS="$LDFLAGS"
-            >> LIBS="$LIBS"
-            See config.log for possibly more details.])
-        fi
-        _AC_PTH_VERBOSE([    o run-time check])
-        AC_TRY_RUN(AC_LANG_PROGRAM(_code1, _code2), _ok=`cat conftestval`, _ok=no, _ok=no)
-        if test ".$_ok" != .yes; then
-            if test ".$_ok" = .no; then
-                _AC_PTH_ERROR([dnl
-                Found GNU Pth $_pth_version under $_pth_location, but
-                was unable to perform a sanity execution check. This usually
-                means that the GNU Pth shared library libpth.so is present
-                but \$LD_LIBRARY_PATH is incomplete to execute a Pth test.
-                In this case either disable this test via --without-pth-test,
-                or extend \$LD_LIBRARY_PATH, or build GNU Pth as a static
-                library only via its --disable-shared Autoconf option.
-                We used the following build environment:
-                >> CC="$CC"
-                >> CFLAGS="$CFLAGS"
-                >> LDFLAGS="$LDFLAGS"
-                >> LIBS="$LIBS"
-                See config.log for possibly more details.])
-            else
-                _AC_PTH_ERROR([dnl
-                Found GNU Pth $_pth_version under $_pth_location, but
-                was unable to perform a sanity run-time check. This usually
-                means that the GNU Pth library failed to work and possibly
-                caused a core dump in the test program. In this case it
-                is strongly recommended that you re-install GNU Pth and this
-                time make sure that it really passes its "make test" procedure.
-                We used the following build environment:
-                >> CC="$CC"
-                >> CFLAGS="$CFLAGS"
-                >> LDFLAGS="$LDFLAGS"
-                >> LIBS="$LIBS"
-                See config.log for possibly more details.])
-            fi
-        fi
-        _extendvars="ifelse([$4],,yes,$4)"
-        if test ".$_extendvars" != .yes; then
-            CPPFLAGS="$_ac_save_CPPFLAGS"
-            CFLAGS="$_ac_save_CFLAGS"
-            LDFLAGS="$_ac_save_LDFLAGS"
-            LIBS="$_ac_save_LIBS"
-        fi
-    else
-        _extendvars="ifelse([$4],,yes,$4)"
-        if test ".$_extendvars" = .yes; then
-            if test ".$_pth_subdir" = .yes; then
-                CPPFLAGS="$CPPFLAGS $_pth_cppflags"
-                CFLAGS="$CFLAGS $_pth_cflags"
-                LDFLAGS="$LDFLAGS $_pth_ldflags"
-                LIBS="$LIBS $_pth_libs"
-            fi
-        fi
-    fi
-    PTH_CPPFLAGS="$_pth_cppflags"
-    PTH_CFLAGS="$_pth_cflags"
-    PTH_LDFLAGS="$_pth_ldflags"
-    PTH_LIBS="$_pth_libs"
-    AC_SUBST(PTH_CPPFLAGS)
-    AC_SUBST(PTH_CFLAGS)
-    AC_SUBST(PTH_LDFLAGS)
-    AC_SUBST(PTH_LIBS)
-    _AC_PTH_VERBOSE([+ Final Results:])
-    _AC_PTH_VERBOSE([    o PTH_CPPFLAGS=\"$PTH_CPPFLAGS\"])
-    _AC_PTH_VERBOSE([    o PTH_CFLAGS=\"$PTH_CFLAGS\"])
-    _AC_PTH_VERBOSE([    o PTH_LDFLAGS=\"$PTH_LDFLAGS\"])
-    _AC_PTH_VERBOSE([    o PTH_LIBS=\"$PTH_LIBS\"])
-fi
-fi
-if test ".$with_pth" != .no; then
-    AC_MSG_RESULT([version $_pth_version, $_pth_type under $_pth_location])
-    ifelse([$5], , :, [$5])
-else
-    AC_MSG_RESULT([no])
-    ifelse([$6], , :, [$6])
-fi
-])
diff --git a/tags/gpgme-1-1-1/missing b/tags/gpgme-1-1-1/missing
deleted file mode 100755 (executable)
index 6a37006..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-#! /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@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/tags/gpgme-1-1-1/mkinstalldirs b/tags/gpgme-1-1-1/mkinstalldirs
deleted file mode 100755 (executable)
index d2d5f21..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@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
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  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: 2
-# End:
-# mkinstalldirs ends here
diff --git a/tags/gpgme-1-1-1/tests/ChangeLog b/tags/gpgme-1-1-1/tests/ChangeLog
deleted file mode 100644 (file)
index a25e82b..0000000
+++ /dev/null
@@ -1,715 +0,0 @@
-2005-12-06  Werner Koch  <wk@g10code.com>
-
-       * gpg/t-keylist.c (main): Changed for that secondary keys now have
-       a fingerprint.
-       * gpg/t-keylist-sig.c (main): Ditto.
-       * gpgsm/t-keylist.c (main): Ditto.  The test used to be wrong.
-
-2005-10-18  Werner Koch  <wk@g10code.com>
-
-       * gpg/pubdemo.asc, gpg/secdemo.asc: Add 2 expired subkeys to
-       Whisky.
-       * gpg/t-keylist.c: Reordered list to match new demo keyring.  Add
-       arg for number of subkeys and for extra checking function.
-       (main): Enhanced a few error outputs.  Changed subkey
-       counting. Call extra checking fucntion.
-       (check_whisky): New.
-
-2005-10-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c (main): Allow for an email address as a second
-       uid.
-
-       * gpg/t-sig-notation.c: Change critical notation to something
-       GnuPG understands.
-
-2005-10-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (EXTRA_DIST): Remove gpg.conf.
-       (DISTCLEANFILES): Add gpg.conf.
-       (all-local): Add gpg.conf.
-       (./gpg.conf): New target.
-       * gpg/gpg.conf: Remove file.
-
-       * gpg/Makefile.am (EXTRA_DIST): Add gpg.conf.
-
-       * gpg/Makefile.am (TESTS): Add t-sig-notation.
-       * gpg/t-sig-notation.c (check_result): New file.
-       * gpg/t-verify.c (check_result): Also check the length of the
-       notation data.
-       * gpg/gpg.conf: New file.
-
-2005-09-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (TESTS): Add t-filename.
-       * gpg/t-filename.c: New file.
-
-2005-09-23  Werner Koch  <wk@g10code.com>
-
-       * gpg/t-support.h (init_gpgme) [W32]: Don't use LC_MESSAGES.
-
-       * gpg/t-encrypt-large.c: New test.
-       * gpg/Makefile.am (TESTS): Add t-encrypt-large.
-
-2005-06-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (TESTS): Add t-wait.
-       * gpg/t-wait.c (main): New test.
-
-2004-12-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/mkdemodirs: Add copyright notice.
-
-       * gpgsm/Makefile.am, gpgsm/t-support.h, gpgsm/t-decrypt.c,
-       gpgsm/t-encrypt.c, gpgsm/t-export.c, gpgsm/t-genkey.c,
-       gpgsm/t-import.c, gpgsm/t-keylist.c, gpgsm/t-sign.c,
-       gpgsm/t-verify.c, gpg/Makefile.am, gpg/t-decrypt.c,
-       gpg/t-decrypt-verify.c, gpg/t-edit.c, gpg/t-encrypt.c,
-       gpg/t-encrypt-sign.c, gpg/t-encrypt-sym.c, gpg/t-eventloop.c,
-       gpg/t-export.c, gpg/t-genkey.c, gpg/t-import.c, gpg/t-keylist.c,
-       gpg/t-keylist-sig.c, gpg/t-sign.c, gpg/t-signers.c,
-       gpg/t-support.h, gpg/t-thread1.c, gpg/t-trustlist.c,
-       gpg/t-verify.c, Makefile.am, t-data.c, t-engine-info.c,
-       t-version.c: Change license to LGPL.
-
-2004-08-17  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c (struct): Add new fields VALIDITY and
-       KEY_LENGTH.  
-       (main): Use them.
-       * gpgsm/t-import.c (check_result): New argument total_stat.
-       (main): Pass this argument.  Reduce number of total considered
-       keys to 1 for the second test.
-
-2004-04-05  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/Makefile.am: Changed the faked system time to 20011213T12000.
-
-2004-03-07  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c: Add chain IDs.
-
-2004-03-03  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-export.c (main): Also check exporting 2 certificates.
-
-2004-02-17  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-import.c (check_result): gpgsm does now return info in
-       the result->imports; adjust for that.
-
-       * gpgsm/Makefile.am (TESTS_ENVIRONMENT): Reset the GPG_AGENT_INFO.
-
-        Include config.h at the top of each C source.  This is required
-       due to LFS support.
-       
-       * gpg/t-keylist-sig.c (main): s/class/sig_class/.
-       * gpg/t-signers.c (check_result): Ditto.
-       * gpg/t-sign.c (check_result): Ditto.
-       * gpg/t-encrypt-sign.c (check_result): Ditto. 
-       * gpgsm/t-sign.c (check_result): Ditto.
-
-2004-01-12  Werner Koch  <wk@gnupg.org>
-
-       * gpg/t-keylist-sig.c (main): Temporary disabled one test due top
-       gpg 1.3.4 problems.
-       * gpg/t-import.c (check_result): Likewise.
-
-2003-11-19  Werner Koch  <wk@gnupg.org>
-
-       * gpg/t-support.h (DIM): Added.
-
-       * gpg/t-verify.c (check_result): Rewrote test for notations
-       because the order of notaions is not guaranteed.
-
-       * gpgsm/t-support.h (fail_if_err): Also print the numeric values.
-
-2003-10-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-eventloop.c: Include <sys/types.h> for old systems.
-
-       * gpgsm/Makefile.am (DISTCLEANFILES): Add random_seed.
-
-       * gpg/t-thread1.c (thread_one): Do not call initialize_gpgme.
-       Likewise.
-
-2003-09-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-thread1.c (main): Call init_gpgme here.
-       (initialize_gpgme): Function removed.
-
-       * gpg/t-thread1.c: New file.
-       * gpg/Makefile.am (TESTS): Add t-thread1.c.
-       (t_thread1_LDADD): New variable.
-       (LDADD): Remove GPG Error lib.
-       * gpgsm/Makefile.am (LDADD): Likewise.
-
-       * gpg/t-import.c (main): Likewise.
-       * gpg/t-keylist-sig.c (main): Likewise.
-       * gpg/t-keylist.c (main): Likewise.
-       * gpg/t-sign.c (main): Likewise.
-       * gpg/t-signers.c (main): Likewise.
-       * gpg/t-trustlist.c (main): Likewise.
-       * gpgsm/t-support.h: Include <stdlib.h> and <locale.h>.
-       (init_gpgme): New function.
-       * gpg/t-support.h: Likewise.
-       * gpgsm/t-verify.c (main): Call init_gpgme.
-       * gpgsm/t-decrypt.c (main): Likewise.
-       * gpgsm/t-encrypt.c (main): Likewise.
-       * gpgsm/t-export.c (main): Likewise.
-       * gpgsm/t-genkey.c (main): Likewise.
-       * gpgsm/t-import.c (main): Likewise.
-       * gpgsm/t-keylist.c (main): Likewise.
-       * gpgsm/t-sign.c (main): Likewise.
-       * gpg/t-verify.c (main): Call init_gpgme.
-       * gpg/t-decrypt-verify.c (main): Likewise.
-       * gpg/t-decrypt.c (main): Likewise.
-       * gpg/t-edit.c (main): Likewise.
-       * gpg/t-encrypt-sign.c (main): Likewise.
-       * gpg/t-encrypt-sym.c (main): Likewise.
-       * gpg/t-encrypt.c (main): Likewise.
-       * gpg/t-eventloop.c (main): Likewise.
-       * gpg/t-export.c (main): Likewise.
-       * gpg/t-genkey.c (main): Likewise.
-
-2003-08-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-sign.c (check_result): Change output format for signature
-       class to unsigned int.
-       * gpg/t-signers.c (check_result): Likewise.
-       * gpg/t-encrypt-sign.c (check_result): Likewise.
-       * gpgsm/t-sign.c (check_result): Likewise.
-
-2003-07-31  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-verify.c (check_result): Change type of SUMMARY to
-       unsigned int.
-       * gpg/t-decrypt-verify.c (check_verify_result): Likewise.
-       * gpg/t-keylist-sig.c (keys): Change type of member CLASS to
-       unsigned int.
-       * t-data.c (read_cb): Change type of AMOUNT to unsigned int.
-       * t-version.c (version): Remove unused variable.
-
-2003-07-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (AM_CPPFLAGS): New variable.
-       (LDADD): Add @GPG_ERROR_LIBS@.
-       * gpg/Makefile.am (AM_CPPFLAGS): New variable.
-       (LDADD): Add @GPG_ERROR_LIBS@.
-       * gpgsm/Makefile.am (AM_CPPFLAGS): New variable.
-       (LDADD): Add @GPG_ERROR_LIBS@.
-
-2003-06-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       Everywhere: Use libgpg-error error codes.
-
-       * gpg/Makefile.am (noinst_HEADERS): New variable.
-       * gpg/t-support.h: New file.
-       * gpgsm/Makefile.am (noinst_HEADERS): New variable.
-       * gpgsm/t-support.h: New file.
-
-2003-05-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-encrypt-sym.c (main): Adapt to new syntax.
-       * gpg/t-encrypt.c (main): Likewise.
-       * gpg/t-eventloop.c (main): Likewise.
-       * gpg/t-encrypt-sign.c (main): Likewise.
-       * gpgsm/t-export.c (main): Likewise.
-       * gpgsm/t-encrypt.c (main): Likewise.
-
-2003-05-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-eventloop.c (main): Rewrite recipient management.
-       * gpg/t-encrypt-sign.c (main): Likewise.
-       * gpg/t-encrypt.c (main): Likewise.
-       * gpg/t-export.c (main): Likewise.
-       * gpgsm/t-encrypt.c (main): Likewise.
-       * gpgsm/t-export.c (main): Likewise.
-       
-2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (TESTS): Order t-keylist and t-keylist-sig after
-       t-import.
-       * gpg/t-edit.c (edit_fnc): Fix primary UID for keylisting tests.
-       * gpg/t-keylist.c: Change order of user IDs.
-       * gpg/t-keylist-sig.c: Likewise.
-       * gpg/t-import.c: Add support for gpg in CVS.
-
-2003-05-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-data.c: Remove TEST_OUT_CB.
-       (main): Likewise.
-       * gpg/t-trustlist.c (main): Access ITEM directly.
-
-       * (t-decrypt-verify.c, t-decrypt.c, t-edit.c, t-encrypt-sign.c,
-       t-encrypt-sym.c, t-sign.c, t-signers.c): Include <unistd.h>.
-       (passphrase_cb): Rewritten.
-       * t-edit.c (edit_fnc): Rewritten.
-
-2003-05-04  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-keylist-sig.c (main): Remove timestamp check.
-
-       * gpgsm/t-keylist.c: Add check for timestamp.
-
-       * gpg/Makefile.am (TESTS): Add t-keylist-sig.
-       * gpg/t-keylist-sig.c: New file.
-
-2003-04-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-eventloop.c (main): Do not call print_op_info.
-       (print_op_info): Function removed.
-
-       * gpg/t-keylist.c: Rewritten.
-       * gpgsm/t-keylist.c (main): Rewritten.
-       * gpg/t-edit.c (main): Do not use gpgme_key_get_as_xml.  Use
-       gpgme_key_unref instead gpgme_key_release.
-       * gpg/t-signers.c (main): Use gpgme_key_unref instead
-       gpgme_key_release.
-
-2003-04-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-trustlist.c: Rewritten.
-
-       * gpg/t-verify.c (main): Rewritten.
-       * gpg/t-decrypt-verify.c: Rewritten.
-       * gpgsm/t-verify.c (main): Rewritten.
-
-2003-04-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-decrypt.c (main): Rewritten.
-
-       * gpg/t-decrypt.c: Rewritten.
-
-       * gpg/t-signers.c: Rewritten.
-
-2003-04-27  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-encrypt-sign.c (check_result): Rewritten.
-
-       * gpg/t-sign.c: Rewritten.
-       * gpgsm/t-sign.c: Rewritten.
-       * gpg/t-encrypt.c: Check for invalid recipients.
-       * gpgsm/t-encrypt.c: Likewise.
-
-       * gpg/t-import.c (check_result): Really use FPR.
-       * gpgsm/t-import.c (check_result): Rewritten.
-
-2003-04-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-import.c: Rewritten.
-
-       * gpgsm/t-genkey.c: Rewritten.
-       * gpgsm/Makefile.am (noinst_PROGRAMS): Add t-genkey.
-       * gpg/t-genkey.c: Include <stdlib.h>.
-       (main): Check result->fpr before checking its length.
-
-2003-04-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-genkey.c: Rewritten to match new semantics.
-
-2003-02-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-decrypt.c (passphrase_cb): Fix to new prototype.
-       * gpg/t-decrypt-verify.c (passphrase_cb): Likewise.
-       * gpg/t-edit.c (passphrase_cb): Likewise.
-       * gpg/t-encrypt-sign.c (passphrase_cb): Likewise.
-       * gpg/t-encrypt-sym.c (passphrase_cb): Likewise.
-       * gpg/t-sign.c (passphrase_cb): Likewise.
-       * gpg/t-signers.c (passphrase_cb): Likewise.
-
-2003-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-engine-info.c: Use file_name instead path throughout.
-
-       * Makefile.am (TESTS): Add t-engine-info.
-       * t-engine-info.c: New file.
-       * gpg/t-encrypt.c (main): Don't print engine info.
-       * gpg/t-eventloop.c (main): Likewise.
-       * gpg/t-encrypt-sign.c (main): Likewise.
-       * gpgsm/t-encrypt.c (main): Likewise.
-       
-2002-12-24  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-verify.c (main): Adjust caller of gpgme_op_verify.
-       * gpg/t-verify.c (main): Likewise.
-       * gpg/t-decrypt-verify.c (main): Likewise for
-       gpgme_op_decrypt_verify.
-
-2002-12-23  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile.am (./gpgsm.conf): Add a faked system time to
-       avoid certification's expiry.
-       * gpgsm/t-encrypt.c (main): Use the short certification name.
-
-2002-11-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-genkey.c (main): Add missing argument to gpgme_op_genkey
-       invocation.
-
-2002-10-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-decrypt.c (print_data): Update to new gpgme_data_read
-       interface, and use gpgme_engine_check_version instead
-       gpgme_check_version.
-       * gpg/t-decrypt-verify.c (print_data): Likewise.
-       * gpg/t-edit.c (main): Likewise.
-       * gpg/t-encrypt.c (print_data): Likewise.
-       * gpg/t-encrypt-sign.c (print_data): Likewise.
-       * gpg/t-encrypt-sym.c (print_data): Likewise.
-       * gpg/t-eventloop.c (print_data): Likewise.
-       * gpg/t-export.c (print_data): Likewise.
-       * gpg/t-sign.c (print_data): Likewise.
-       * gpg/t-signers.c (print_data): Likewise.
-       * gpgsm/t-decrypt.c (print_data): Likewise.
-       * gpgsm/t-encrypt.c (print_data): Likewise.
-       * gpgsm/t-export.c (print_data): Likewise.
-       * gpgsm/t-sign.c (print_data): Likewise.
-       * gpg/t-verify.c (main): Likewise for gpgme_op_verify.
-       * gpgsm/t-verify.c (main): Likewise for gpgme_op_verify.
-       * t-data.c (read_once_test): Likewise.
-       (write_test): Update for new behaviour of data objects.
-       (main): Remove type test.
-
-2002-09-30  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-keylist.c (doit): Add arg SECRET.
-       (main): Add option --secret.
-
-2002-09-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-version.c: Include <string.h>.  Reported by Stéphane Corthésy.
-
-2002-09-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-keylist.c (main): Test PATTERN for NULL before printing.
-       Reported by Dr. Stefan Dalibor <Dr.Stefan.Dalibor@bfa.de>.
-       
-2002-08-01  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-edit.c: Also add a test for the expire command (testing
-       the passphrase callback).
-
-2002-07-28  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-edit.c: New file.
-       * gpg/Makefile (TESTS): Add t-edit.
-
-2002-07-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-encrypt-sym.c (main): Change type of I to size_t and
-       rename to LEN.
-       * gpg/t-verify.c (main): Likewise.  Submitted by Stéphane
-       Corthésy.
-
-2002-07-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-eventloop.c: New file.
-       * gpg/Makefile (TESTS): Add t-eventloop.
-
-2002-06-26  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-import.c (print_op_info): New.
-       (main): Print operation info.
-
-2002-06-25  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/Makefile.am (DISTCLEANFILES): new.
-
-2002-06-25  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile.am (TESTS): Add t-export.
-       gpgsm/t-export.c: New file.
-
-2002-06-20  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-sign.c (main): Also test a normal signature.
-
-       * gpg/Makefile (TESTS_ENVIRONMENT): Set GPG_AGENT_INFO empty.
-       * gpg/t-signers.c, gpg/t-sign.c, gpg/t-encrypt-sym.c
-       * gpg/t-encrypt-sign.c, gpg/t-decrypt.c
-       * gpg/t-decrypt-verify.c (main): Changed the GPG_AGENT_INFO check to
-       match the one in ../../gpgme/rungpg.c.
-
-2002-06-12  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-keylist.c (doit): Print operation info if available.
-
-2002-06-10  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-verify.c (print_sig_stat): Print the error token.
-
-2002-06-04  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/t-encrypt.c (main): Add a simple option parser and allow
-       to specify an encryption key.
-
-2002-05-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (all-local): Remove dependency on ./secring.gpg.
-       (./secring.gpg): Remove target, and move all rules for this target
-       to ...
-       (./pubring.gpg): ... here.  This was necessary because GnuPG 1.0.7
-       does create an empty secring.gpg file when importing public keys.
-
-2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-verify.c (validity_string): New.
-       (print_sig_stat): Print expire time and validity.
-       (status_string): Add new exipred stati.
-
-2002-05-03  Werner Koch  <wk@gnupg.org>
-
-       * gpg/t-verify.c (validity_string): New.
-       (print_sig_stat): Print expire time and validity.
-       (status_string): Add new exipred stati.
-
-2002-04-05  Marcus Brinkmann  <marcus@g10code,de>
-
-       * gpgsm/Makefile.am (./trustlist.txt): Put more into this file to
-       prevent use of gpg-agent.
-       (./gpg-agent.conf): Remove target.
-       (all-local): Remove ./gpg-agent.conf.
-
-2002-04-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c (main): Use gpgme_engine_check_version instead
-       gpgme_check_engine.
-       * gpgsm/t-encrypt.c (main): Likewise.
-
-2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-encrypt-sym.c: New file.
-       * gpg/Makefile.am (TESTS): Add t-encrypt-sym.
-
-2002-03-05  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (CLEANFILES): Remove random_seed, which is now
-       in DISTCLEANFILES.
-
-2002-03-04  Werner Koch  <wk@gnupg.org>
-
-       * gpg/Makefile.am (DISTCLEANFILES): Added.
-
-2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-verify.c (main): Add a few more sanity checks, and a check
-       for normal signatures.
-
-2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-encrypt-sign.c: New file.
-       * gpg/Makefile.am (TESTS): Add t-encrypt-sign.
-
-2002-02-13  Werner Koch  <wk@gnupg.org>
-
-       * gpgsm/Makefile.am (private-keys-v1.d): Don't
-       fail when the directory already exists.
-
-2002-02-12  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (CLEANFILES): New target.
-       (distclean-local): Rename to ...
-       (clean-local): ... this.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile.am (./private-keys-v1.d/$(key_id).key): Fix rule.
-
-2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-genkey.c: New file (not added to Makefile.am because of
-       gpg-agent bug).
-
-2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile.am (key_id): Update value.
-       (all-local): Add .key to keyid filename.
-       (./private-keys-v1.d/$(key_id)): Renamed to ...
-       (./private-keys-v1.d/$(key_id).key): ... this.
-       (all-local): Add ./gpgsm.conf, ./trustlist.txt.
-       (./gpgsm.conf, ./trustlist.txt): New target.
-       * gpgsm/567064FE6D14A17B2D811ABB407728BC558AA455: Renamed to ...
-       * gpgsm/32100C27173EF6E9C4E9A25D3D69F86D37A4F939: ... this.
-
-2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-import.c (print_op_info): New function.
-       (main): Use it.
-
-2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-signers.c (passphrase_cb): Change type of r_hd to void**.
-       * gpg/t-sign.c (passphrase_cb): Likewise.
-       * gpg/t-decrypt-verify.c (passphrase_cb): Likewise.
-       * gpg/t-decrypt.c (passphrase_cb): Likewise.
-
-2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/t-decrypt-verify.c: Don't include `mcheck.h'.  Reported by
-       Stéphane Corthésy.
-
-2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (EXTRA_DIST): Add missing line continuation.
-
-2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile.am (EXTRA_DIST): Add $(key_id).
-
-2001-12-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/Makefile: Rename `pubcerts.kbx' to `pubring.kbx'.
-
-2001-12-15  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c (check_two_contexts): Set protocols.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-sign.c: New file.
-       * gpgsm/Makefile.am (TESTS): Add t-sign.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-decrypt.c: New file.
-       * gpgsm/567064FE6D14A17B2D811ABB407728BC558AA455: Likewise.
-       * gpgsm/Makefile.am (TESTS): Add t-decrypt.
-       (key_id): New variable.
-       (all-local): New target ./private-keys-v1.d/$(key_id) added.
-       (./private-keys-v1.d/$(key_id)): New target.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-verify.c: New file.
-       * gpgsm/Makefile.am (TESTS): Add t-verify.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/Makefile.am (GPG): Set to @GPG_PATH@.
-       (./pubring.gpg): Use $(GPG) instead gpg.
-       (./secring.gpg): Likewise.
-
-       * gpgsm/t-import.c (main): Remove third test case.
-       * gpgsm/Makefile.am (GPGSM): Set to @GPGSM@.
-       (all-local): New target.
-       (./pubcerts.kbx): Likewise.
-       * gpgsm/t-encrypt.c: New file.
-       * gpgsm/Makefile.am (TESTS): Add t-encrypt.
-
-2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/t-keylist.c: New file.
-       * gpgsm/Makefile.am (TESTS): Add t-keylist.
-
-2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpgsm/cert_dfn_pca01.der: New file.
-       * gpgsm/cert_dfn_pca15.der: Likewise.
-       * gpgsm/cert_g10code_test1.der: Likewise.
-       * gpgsm/t-import.c: Likewise.
-       * gpgsm/Makefile.am (EXTRADIST): Add new files.
-       (TESTS): Add t-import.
-
-2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * gpg/: New directory.
-       * Makefile.am, t-verify.c, t-encrypt.c, t-signers.c, t-trustlist.c,
-       t-sign.c, t-keylist.c, t-import.c, t-genkey.c, t-export.c,
-       t-decrypt-verify.c, t-decrypt.c, t-version.c, t-data.c, mkdemodirs.
-       cipher-1.asc, cipher-2.asc, geheim.txt, pubdemo.asc, pubkey-1.asc,
-       secdemo.asc, seckey-1.asc): Move to sub directory gpg/.
-
-       * gpg/Makefile.am (INCLUDES): Include gpgme/, not include/ and
-       intl/.
-       (LDD): Correct relative path to gpgme library.
-       (TESTS): Remove t-version and t-data.
-       * gpg/t-verify.c, gpg/t-encrypt.c, gpg/t-signers.c, gpg/t-trustlist.c,
-       gpg/t-sign.c, gpg/t-keylist.c, gpg/t-import.c, gpg/t-genkey.c,
-       gpg/t-export.c, gpg/t-decrypt-verify.c, gpg/t-decrypt.c,
-       t-version.c, t-data.c): Include gpgme.h, not "../gpgme/gpgme.h".
-
-       * Makefile.am: New file.
-       * gpgsm/: New directory.
-       * gpgsm/Makefile.am: New file.
-
-2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (TESTS): Add t-decrypt-verify.
-       * t-decrypt-verify.c: New file.
-       * cipher-2.asc: Likewise.
-
-2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-data.c: Include stddef.h.
-       (read_once_test): Change type of READ to size_t.
-       (read_test): Likewise.
-       (write_test): Likewise.
-
-2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-signers.c: New file.
-       * Makefile.am (TESTS): Add t-signers.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (TEST_ENVIRONMENT): Revert last change.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (TEST_ENVIRONMENT): Set environment to $(srcdir),
-       not current directory.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-data.c (write_test): New function.
-       (main): Invoke write_test for all rounds except TEST_OUT_CB.
-
-2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
-
-       * Makefile.am (INCLUDES): Remove spurious duplicate to silence
-       automake.
-
-2001-10-16  Marcus Brinkmann  <marcus@g10code.de>
-
-       * t-version.c: New file.
-       * t-data.c: Likewise.
-       * t-data-1.txt: Likewise.
-       * t-data-2.txt: Likewise.
-       * Makefile.am (TESTS): Add t-version, t-data.
-
-2001-09-17  Werner Koch  <wk@gnupg.org>
-
-       * t-keylist.c (check_two_contexts): New. 
-
-2001-09-03  Werner Koch  <wk@gnupg.org>
-
-       * t-encrypt.c (print_op_info): New and use it after each operation.. 
-
-2001-08-28  Werner Koch  <wk@gnupg.org>
-
-       * t-sign.c (print_op_info): New and use it after each operation.
-
-2001-03-15  Werner Koch  <wk@gnupg.org>
-
-       * t-keylist.c (doit): List subkeys too, show caps.
-
-2001-02-13  Werner Koch  <wk@gnupg.org>
-
-       * t-verify.c (print_sig_stat): Repaled ulong by unsigned long
-       because we don't use the config stuff here.
-
-2001-02-12  Werner Koch  <wk@gnupg.org>
-
-       * tests/t-verify.c (print_sig_stat): Print info about the keys.
-
-
- Copyright 2001, 2004 g10 Code GmbH
-
- This file is free software; as a special exception the author gives
- unlimited permission to copy and/or distribute it, with or without
- modifications, as long as this notice is preserved.
-
- This file 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.
diff --git a/tags/gpgme-1-1-1/tests/Makefile.am b/tags/gpgme-1-1-1/tests/Makefile.am
deleted file mode 100644 (file)
index aee20ca..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# Makefile.am - Makefile for GPGME tests.
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2004 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-TESTS_ENVIRONMENT = GNUPGHOME=.
-
-TESTS = t-version t-data t-engine-info
-
-EXTRA_DIST = t-data-1.txt t-data-2.txt
-
-INCLUDES = -I$(top_srcdir)/gpgme
-
-AM_CPPFLAGS = @GPG_ERROR_CFLAGS@
-LDADD = ../gpgme/libgpgme.la @GPG_ERROR_LIBS@
-
-noinst_PROGRAMS = $(TESTS)
-
-if RUN_GPG_TESTS
-gpgtests = gpg
-else
-gpgtests = 
-endif
-
-if RUN_GPGSM_TESTS
-gpgsmtests = gpgsm
-else
-gpgsmtests = 
-endif
-
-SUBDIRS = ${gpgtests} ${gpgsmtests}
diff --git a/tags/gpgme-1-1-1/tests/gpg/Makefile.am b/tags/gpgme-1-1-1/tests/gpg/Makefile.am
deleted file mode 100644 (file)
index 023d2aa..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001, 2004, 2005 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-GPG = @GPG@
-
-TESTS_ENVIRONMENT = GNUPGHOME=. GPG_AGENT_INFO=
-
-# The keylist tests must come after the import and the edit test.
-noinst_HEADERS = t-support.h
-TESTS = t-encrypt t-encrypt-sym t-encrypt-sign t-sign t-signers        \
-       t-decrypt t-verify t-decrypt-verify t-sig-notation \
-       t-export t-import t-trustlist t-eventloop t-edit \
-       t-keylist t-keylist-sig t-thread1 t-wait t-encrypt-large \
-       t-file-name
-
-CLEANFILES = secring.gpg pubring.gpg trustdb.gpg
-DISTCLEANFILES = pubring.gpg~ random_seed gpg.conf
-
-EXTRA_DIST = mkdemodirs pubdemo.asc secdemo.asc cipher-1.asc cipher-2.asc \
-       geheim.txt pubkey-1.asc seckey-1.asc
-
-INCLUDES = -I$(top_srcdir)/gpgme
-
-AM_CPPFLAGS = @GPG_ERROR_CFLAGS@
-LDADD = ../../gpgme/libgpgme.la
-t_thread1_LDADD = ../../gpgme/libgpgme-pthread.la
-
-# We don't run t-genkey in the test suite, because it takes too long
-noinst_PROGRAMS = $(TESTS) t-genkey
-
-clean-local:
-       $(srcdir)/mkdemodirs --clean
-
-all-local: ./pubring.gpg ./gpg.conf
-
-./pubring.gpg: $(srcdir)/pubdemo.asc ./Alpha/Secret.gpg 
-       $(GPG) --homedir . --import $(srcdir)/pubdemo.asc
-       $(GPG) --homedir . --allow-secret-key-import \
-               --import Alpha/Secret.gpg Zulu/Secret.gpg
-
-./Alpha/Secret.gpg: secdemo.asc 
-       srcdir=$(srcdir) $(srcdir)/mkdemodirs 
-
-./gpg.conf:
-# This is required for t-sig-notations.
-       echo no-force-v3-sigs > ./gpg.conf
diff --git a/tags/gpgme-1-1-1/tests/gpg/cipher-1.asc b/tags/gpgme-1-1-1/tests/gpg/cipher-1.asc
deleted file mode 100644 (file)
index f0a8ca4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.0.4-2 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-hQEOA2rm1+5GqHH4EAP/Tcqiuhvrjj+RFBKnWn2A7f1ztV17U2EngYFy8TbZYGNp
-JoMNdpA7GNZs7iqc/x1epaZDKfaQwWEtARZmK/4nlhB48N+oZeKTm7PXIkRPqrCZ
-3fxJjCJaU0yrNGuO345DOr0QwDImVhubVEkfgs8yXK2Szx2G8X3LmiaILHAqA2oD
-/1ZqjY8k+ovrLL/qe8un/NTwzSjKIPVGR6mhLFXmj8fnp2kSsbo+Bhh4MczTRR6l
-SA32z25vcakKu2qn5Wa4yDcx9NcMt8RHXzmfMDLj6UFq99QqKeLK2ywcIpY9p/GL
-fQyaf7r3HTVugBSaoOzegLJ+L7MfWohrStkMeLnJQnro0nYBjADVcUQuSS4N3lst
-Df3XrxxA/iJvxt4F9K27u4tp5U1HDg1CIxVrkMs92LBri3S6ZtfjdoqQ7QghFwGP
-Kw1lKiWayM6NH9rcCKSgk4kl4P/2l3f78XeFgiywN7UGeSoH3BLMSv9gSxl5KrAz
-d2imhTMrfEvZ
-=y4ng
------END PGP MESSAGE-----
diff --git a/tags/gpgme-1-1-1/tests/gpg/cipher-2.asc b/tags/gpgme-1-1-1/tests/gpg/cipher-2.asc
deleted file mode 100644 (file)
index 210f3e9..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN PGP MESSAGE-----
-Version: GnuPG v1.0.6 (GNU/Linux)
-Comment: Weitere Infos: siehe http://www.gnupg.org
-
-hQEOA++dwnahcsiBEAP9HgkC1ElQwZRX1X/MBF54Q28dpXKr84IviO4QcbnnhmYk
-2IlaNe6mr8R7kNM1aqJFK3fnobqnSWwM/VBObMqqYnzZSfclCNsy66sojQJxwXcz
-DKQKi69BLaC6aTMnX048tOl8pJpR72fkffUOUa5ywDHVVVUClDG3XkIrfM1du3YD
-/A6vFSrRylupKhQBxdtSUx5IDmpDYwG2vqqbYKoMaQ4pPSKLYV2zskU+pQWRlk6y
-nwPGY5h9eGz0xYHMPxhe9VnwljeTEDwz5U4CHF3wQ8h5WBxOVx5QN/H/UyjpmoJT
-ddrIu+8GgajhBVKVYAOqr577exkiSDA60/JrYbKZBvzL0sAJAUu+HoeMPJ+5/RYF
-pLSdz/3MbVDRJJqzV2TJnEBvFtPa6urzx99P0u4xr+RJMFmR9/99YXhYz7+Y6d/B
-44F6B3YouYxiK39IoOUcYPZTwb5kaudD5a3mU3XxEhSDUpnyvowPiKQO1T8CPd2u
-2HsD3KeaOc2VFE0gnvqECvUTQfSCZCk/kil8XVAMHZrEA0bWAYiaHfHEOB8SRCy8
-rW0wsON4uDXmZpUkfOjFoYZdpJI7fDKkb5uYUzFZDasharEaXb1X/5xSAclx
-=+eYk
------END PGP MESSAGE-----
diff --git a/tags/gpgme-1-1-1/tests/gpg/geheim.txt b/tags/gpgme-1-1-1/tests/gpg/geheim.txt
deleted file mode 100644 (file)
index 99a5478..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Wenn Sie dies lesen können, ist es wohl nicht
-geheim genug.
diff --git a/tags/gpgme-1-1-1/tests/gpg/mkdemodirs b/tags/gpgme-1-1-1/tests/gpg/mkdemodirs
deleted file mode 100755 (executable)
index ab2c568..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-# Copyright (C) 2004 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-set -e
-
-GPG="gpg --batch --quiet --no-secmem-warning"
-NAMES='Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India
-       Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo
-       Sierra Tango Uniform Victor Whisky XRay Yankee Zulu'
-
-if [ "$1" = "--clean" ]; then
-    (for i in $NAMES; do
-       [ -d $i ] && rm -r $i || true
-    done) || true
-    exit 0
-fi
-
-[ -z "$srcdir" ] && srcdir="../tests"
-
-
-$GPG --dearmor -o secdemo.gpg --yes $srcdir/secdemo.asc
-$GPG --dearmor -o pubdemo.gpg --yes $srcdir/pubdemo.asc
-[ -f ./tdb.tmp ] && rm ./tdb.tmp
-GPGDEMO="$GPG --homedir . --trustdb-name ./tdb.tmp --no-default-keyring
-        --keyring pubdemo.gpg --secret-keyring secdemo.gpg"
-echo -n "Creating:"
-for name in $NAMES; do
-    echo -n " $name"
-    [ -d $name ] && rm -r $name
-    mkdir $name
-    $GPGDEMO --export-secret-key -o - $name > $name/Secret.gpg
-    $GPG --homedir $name --allow-secret-key-import --import $name/Secret.gpg
-    $GPGDEMO --export -o - $name > $name/Public.gpg
-    $GPG --homedir $name --import $name/Public.gpg
-    [ -f $name/pubring.gpg~ ] && rm $name/pubring.gpg~
-done
-echo "."
-[ -f ./tdb.tmp ] && rm ./tdb.tmp
-rm pubdemo.gpg secdemo.gpg
diff --git a/tags/gpgme-1-1-1/tests/gpg/pubdemo.asc b/tags/gpgme-1-1-1/tests/gpg/pubdemo.asc
deleted file mode 100644 (file)
index be600c7..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-26 demo keys [2005-10-18]
-
-pub  1024D/68697734 1999-03-08 Alpha Test (demo key) <alpha@example.net>
-uid                            Alice (demo key)
-uid                            Alfa Test (demo key) <alfa@example.net>
-sub  1024g/46A871F8 1999-03-08
-pub  1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) <bravo@example.net>
-uid                            Bob (demo key)
-sub  1024g/E29BA37F 1999-03-08
-pub  1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) <charlie@example.net>
-sub  1024g/BC43DA60 1999-03-08
-pub  1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) <delta@example.net>
-sub  1024g/B0C45424 1999-03-08
-pub  1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) <echo@example.net>
-uid                            Eve (demo key)
-uid                            Echelon (demo key)
-sub  1024g/7272144D 1999-03-08
-pub  1024D/7372E243 1999-03-08 Foxtrot Test (demo key) <foxtrot@example.net>
-sub  1024g/EE45198E 1999-03-08
-pub  1024D/8FC282E6 1999-03-08 Golf Test (demo key) <golf@example.net>
-sub  1024g/9DCAD354 1999-03-08
-pub  1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) <hotel@example.net>
-sub  1024g/D622AD0A 1999-03-08
-pub  1024D/04259677 1999-03-08 India Test (demo key) <india@example.net>
-sub  1024g/61F76C73 1999-03-08
-pub  1024D/D2699313 1999-03-08 Juliet Test (demo key) <juliet@example.net>
-sub  1024g/35F8F136 1999-03-08
-pub  1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) <kilo@example.net>
-sub  1024g/9AF64D02 1999-03-08
-pub  1024D/B79103F8 1999-03-08 Lima Test (demo key) <lima@example.net>
-sub  1024g/FE56350C 1999-03-08
-pub  1024D/BE5CF886 1999-03-08 Mike Test (demo key) <mike@example.net>
-uid                            Mallory (demo key)
-sub  1024g/4F31EAE8 1999-03-08
-pub  1024D/30CEC684 1999-03-08 November Test (demo key) <november@example.net>
-sub  1024g/8B70E472 1999-03-08
-pub  1024D/6D9732AC 1999-03-08 Oscar Test (demo key) <oscar@example.net>
-sub  1024g/2681619F 1999-03-08
-pub  1024D/3FF13206 1999-03-08 Papa test (demo key) <papa@example.net>
-sub  1024g/63330D9C 1999-03-08
-pub  1024D/3C661C84 1999-03-08 Quebec Test (demo key) <quebec@example.net>
-sub  1024g/A029ACF4 1999-03-08
-pub  1024D/777FBED3 1999-03-08 Romeo Test (demo key) <romeo@example.net>
-sub  1024g/11D102EA 1999-03-08
-pub  1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) <sierra@example.net>
-sub  1024g/0F1B50B4 1999-03-08
-pub  1024D/85A81F38 1999-03-08 Tango Test (demo key) <tango@example.net>
-sub  1024g/101C0402 1999-03-08
-pub  1024D/653244D6 1999-03-08 Uniform Test (demo key) <uniform@example.net>
-sub  1024g/5522BDB9 1999-03-08
-pub  1024D/61F04784 1999-03-08 Victor Test (demo key) <victor@example.org>
-sub  1024g/07287134 1999-03-08
-pub  1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) <whisky@example.net>
-sub  1024g/FD6E27F6 1999-03-08
-sub  1024D/E51987C9 2005-10-18 [expires: 2005-10-18]
-sub  1024R/40DB9D43 2005-10-18 [expires: 2005-10-18]
-pub  1024D/567FB34A 1999-03-08 XRay Test (demo key) <xray@example.net>
-sub  1024g/41E408BE 1999-03-08
-pub  1024D/4B11B25F 1999-03-08 Yankee Test (demo key) <yankee@example.net>
-sub  1024g/F7B080AD 1999-03-08
-pub  1024D/54ACD246 1999-03-08 Zulu Test (demo key) <zulu@example.net>
-sub  1024g/A172C881 1999-03-08
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp
-ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy
-hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj
-VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU
-/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p
-+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5
-cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS
-09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+
-lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz
-dCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML
-CgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv
-WwCgl6NEzT+/WewPTGcwZY+pLkycLv20EEFsaWNlIChkZW1vIGtleSmIVQQTEQIA
-FQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6P
-dwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVt
-byBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwID
-FgIBAheAAAoJEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbma
-JdB8FdJnHfGh1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7
-EW29nD4UDQG4OzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrX
-z4sTl1T4cop1FBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9
-yYSF/YK4Cf7bIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdly
-ABsOkNBSaeKO3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2Iad
-zEhLlIOz5BVp/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakP
-iEYEGBECAAYFAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndq
-knsAnRxzVeHi/iJ73OCKtvFrHbV9GogqmQGiBDbjouIRBACKncc4Ueec7dWaVARy
-2SmNVufeSenYs4AsIPP0v59jEl7JI0rb+4JbIJoAzW/hcm26GS/UbbpQwig8/PgM
-UV5QfBST4CEOlf7/x2a4HKk9tDV4An7q2aNr1beW+twxfUGWWV5I0o1b/iKVk/Li
-QRiaMr8pJXY266m6/2Pn9LmDtwCg+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eRxLqC
-t1hT98gdDLykRTlI3kMq6EK3I+z/8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpDltPY
-HgWnUC733ujAKANdyybm3HrA3TSBjEAhNfcu8nkrVorvASQUDCLJatWRWJTUVrPH
-+GXIXMA/Oi6LDsgNDOJanwzzvDCCm8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMIfSFS
-vpZWNgQgYZntiXSUGYOVs28T/87RoRx02tsVDw2PA8z68q/XRuM9NdetxbUXQHB9
-eszFLi3W1idsXhd/C4SyiTgEFXG8Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVLmBp7
-qfj5Y9XSM5SE0Th+fLQpQnJhdm8gVGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFt
-cGxlLm5ldD6IVQQTEQIAFQUCNuOi4gMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOw
-svruAJ4iU4M5s1xsZiXa0wLnX4FBBl9abgCfflNpwyEp6KEhKCPWwPRG9WJc0qi0
-DkJvYiAoZGVtbyBrZXkpiFUEExECABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ
-/hgLHanjsLIa4QCgityK8zajBOqAN0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFz
-rpO/fX0OuQENBDbjowcQBACVSdXxUWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYv
-BtbB/y7TFIfvAr4ZFbpuqew6JvtjIEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBD
-uLkb09RukCD4zdY6xwbAMRsOzZgv597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffO
-TwADBwP/SyVZvFEdEVn5/dQTp7eAtXdrbZEM379ctCJ2663RbTZd55lIBev1fTnK
-QkvDTY2e58yIQ4E+Nzr99qg9Cyf6e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9q
-gn0Sgsnu/ww2txVw3XEjqL8Hgl+4Q/57YRvJOe+q29Ye9LL8eaiIRgQYEQIABgUC
-NuOjBwAKCRD+GAsdqeOwsjK5AJ9pek7H6yt3ZHAJ+7nn7sGmxYxb5ACg1INFN4AM
-zqEUjbZ51KTVdAvyKlSZAaIENuOQZxEEAL8MJC6eA7aInuP372p3ZyuMFTwr4CZC
-GzbskGQmq0BsL/EWqQcGwDU+LxlvpMtr84KbY9tcWIznHTTCISdUo3O4Y7NTy4cH
-qTBa0uPz5XtU5Y6RIMS2eVMXq7TL0k6+zsbAO+o4zkLdAfstr7Oc14C7XnbsePqX
-RcZIDPK+n42TAKCeS1TXVUWkpIh2imVkFrI307NPywP8DBz/z3R+JIxZg0ajj6fo
-gfGGMEEz2Uv4MB7VG0IS3BRJY2sawjEWcNGQzG8ylpPga6wb4M+FpN12sMFLIWII
-vEoMFiAxtI7rBD2DrNYQSHVkxMxVT9qSvzUM4QKiVef9/dDixGPEjeG7bPy2NV7A
-A81O5YRNDqIcehWp2mQrhoAEAJ9syud8rpO6PFKz3Ux8oFZ9jHLD2GMzr5VXxwkl
-0NeKF4wrNZytV5zCBhjO6SY2Kc7/8FGZByzXB1+LlR18cs0UOKDD3pJ3JmkfH7v2
-CEPc2oObNhqShEigMpxkAisCOB+XmJ/q8iIDhzUuOFJ1xVMGxLKJz+aSTTUSDO1Y
-pjRptC1DaGFybGllIFRlc3QgKGRlbW8ga2V5KSA8Y2hhcmxpZUBleGFtcGxlLm5l
-dD6IVQQTEQIAFQUCNuOQZwMLCgMDFQMCAxYCAQIXgAAKCRBBP0rzGv2rbD5EAJ9f
-cDAXA+7n6av9/VJr9a/Sb1PnuACfVMEihQSsyol6FBm7vc3S73d+pIq5AQ0ENuOQ
-ghAEAKFjw1K+7qwrSngPQBUGxHPyJVdiptGVFNkAdLgsJfDH+LwWZ90hedo0s6jK
-Ljhiu5IKeVl2Hhhaq4LHaaDLAbnz0DNwWFqGaoSU1spvubgX/8QYhkrTNOBbXe1D
-Ab2FNc6Fh6pyGc45oMPA8QrUav7aj/kA2qGquKfRMUUFYuB3AAMHA/9HTT2zrVf8
-WRRQCHzDhO5rqqd03/YaypezI9iN0XkTeASsryMNwMueI4eqSzBXXtskbzVzMJET
-klxUUstZAmD1yl6hOk/5hwX6b3CG2zBo4n8s+vHzzyL86aW5IPzVU/7rMGGFNRul
-rN8sR23ddzOlbsI101vKIRyBP7oKv5bYZohGBBgRAgAGBQI245CCAAoJEEE/SvMa
-/atsta0AnA21IY9iNt6wtJN5HAoYDl99mIUOAJ9M8Loj5fIZq+McmtodOBL9tII3
-Q5kBogQ246OHEQQA3mc7VzzWMKaCH+gX6nqSJmaoVXdql7mQSZxL8GhaAJe3q+Nq
-V1y2YViLu/4Fjg33MjcbFCoDG3kPp1jto3XGULbfoJkQBpdReS28bD+mkcON1uzw
-JG5mID2ObWP3YYBRj+abqFfZoYo6RXCv3I3oOsDYJo7hLAr/AReRV+P6drMAoMJo
-HMfPBKSRd/xA605OP/F6+mfPBAC/fSVoJ5dMNkzYj/U93OZrVXXGLN9p7SR/Nk4k
-ENC0dAO80WOa7qIzWQvS7E4beSuvQCWpKwwPxbuZq9sWKBSXFuG+66XilMv8GIn3
-joWGOU9jQ2L2mZ0CV2ejvJRixYAMQpp2RDeCERWoSrP4AJhvOnenwr7kq6IUmb0P
-i7K9OgQAhU+LY37i+jGdFYbApcXgT58tgDNdPmwwzOXjpeTgyzfTcX/kkbuQHSKI
-89jqg/SXeeVqG6VFxs0yPtINt+t+iLibh+1RghfdpxcJI3SA25UaKmDwLCUZDIgu
-BZEWnqhdA6YCWnGEgZx3WN2HeyPnL4JCu6AY804lP2bOYWQHivG0KURlbHRhIFRl
-c3QgKGRlbW8ga2V5KSA8ZGVsdGFAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjo4cD
-CwoDAxUDAgMWAgECF4AACgkQ66nyQOudyeauJgCgl0HAxcZVFMWV/DW7heKYJE9U
-VE0An1YVfKzHS6BZohosne3I1lAdagBGuQENBDbjo6oQBACPtZ1o4mPMk2zYbyu+
-sNm8P+5oAtD0+129gCn8OunvEwflPrb4opOUp07ezwhAE+K4Whwk2Kvmy3+ebxeX
-6Bw5k6+2vjlz9yXnh8Y7WA6MFk5+BuR0FUr8szC5BYh5srioJmcA6UMtg0ZVSC4Y
-ucRAFJ+eGGSCHRYDSSq3t9i+lwADBQP/dw4So+Ux1h4ucYQbjA/G3JUhyHAY6/Rh
-FblqlvPZ907ui2PUAVQ3lbMXDQDn5YfNrU4hSGDnRlyjoefArHoX4ttnlo5zfsQC
-9oWA+4zEF+RpZhqAKh/eMEXQJtNZRdX8Pn90WYh64ZO5Qw2wZUf45IxbaEE3/v5o
-krksscv6HOmIRgQYEQIABgUCNuOjqgAKCRDrqfJA653J5nNNAKCaviZP/A83ammD
-nHvkTdxefqoHbwCfaE7+GAg+R/+tJLJ0DvZllz8xYzqZAaIENuORzREEAIrOxkw6
-rRDOpbqKenlrMRYvfqoVFafTekvsZW8M0GVQOBYwqn9VUfSV/H8Iy3nJsU+cU4UF
-XEaoHhVWgspMtjYHvxXBTD2UHmj+Y7+RkVnOT7x/UsPKbxjkweeleGXkeHECwwZu
-QhebSrtQQllqtjCx33Le013ukAs2SnI83cPLAKDfVb6yjfhG0Avkx83VmlFqXXH1
-pwQAhVhMi1T06SNYzbKAmdNBfBWrv9m2l5PJnUTpSWUum6ueJLHzkEM0XgVnHt+Y
-dFuzXgUafsnqEn+2N4tI0zuJqzoi/9DQnEvKijZxihtYq3S3rN6UIQ2aXFHthvVt
-xZxocZeluYaWHPeedJlI9h9yObZn0mLFXFY6TUiHQYs8RNgD/0iNbequyxzEKdId
-zD0Ns+3WjIVBlYl51Zdvqyo2+U+270hXVdIssrsqKr1DwRlsCRSwMY+nrB0ZUOlv
-LaIB7qCQke3C9myu/fJoGDhMZOYAXsatVR0EGTdXnSuCxqNhEiqwlbZGMAcwFO+o
-WBSgGyjFPHTMSOw0XS42d73UNxTatCdFY2hvIFRlc3QgKGRlbW8ga2V5KSA8ZWNo
-b0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOkfwMLCgMDFQMCAxYCAQIXgAAKCRAx
-jB+u+u9tG2cDAKCzaFoiAm79QSmYISeiM7XMKhoHDACaA8CU1j8+20C7rNipOHYz
-3KfUMhe0DkV2ZSAoZGVtbyBrZXkpiFUEExECABUFAjbjuAADCwoDAxUDAgMWAgEC
-F4AACgkQMYwfrvrvbRsg3QCeOMf0g3znbc8IBiTrIPUgUz9p3WoAoJ6eRZTZk7z+
-hTyx4JDceReQbYlGtBJFY2hlbG9uIChkZW1vIGtleSmIVQQTEQIAFQUCNuO4HwML
-CgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG16mAJ46lQbmtWRZUldQtp4ZnOptP7ZJ
-tQCfceYMZfMAnqUKJiHk2tMhvwDvAh25AQ0ENuOR/xAEALSl7SaNEf8mYovea5tJ
-NEwoZx3vv6XymyXga1wDqKo2PeDrnRDbHGBb5BvWIv1J6Igk/wq4R+Pq989Upkcq
-REB+yOeluE3zPPtZBrbLySSaqiMegYiHnAAPc0TqjH7UPZa+fJKZTUk64BCUQN9E
-LkL2FKtAGQ7RNQJYvbCq4O/XAAMFBACXdO4a3ZIK5hJejhHZ01mkHa6Sqoc6Pued
-NC7tlWiLU62BljGiv/DvzcbMsnvk991AxJ3pP4ZvKr5CClqIG+WZa1zmtwXdmCfG
-Jb2fbNSVD4zp16e5slPr8Cp+fvIv2/SyvwruROs+oAzSVvoMAzAGSk3yj5nT5oik
-bn+M62fC5IhGBBgRAgAGBQI245H/AAoJEDGMH676720bj5AAnRH+1me1/iHDnS5l
-tXysOdl24/BMAKCPThApQ7lJe8LYr61+lXUUwr1TKZkBogQ246UmEQQA3Vs5XdZc
-g1g6hj0sxjrHoV8k0mtKTn1Uy3JKSaQ6RK3J/I0vHCq15FVKMCO0pWYT0ZmCPuaa
-hmhuRWeVSXdU3ylooXOzviQx6Ct8mpjp4ejhUBT2VBdflpQBohVy3Pljg824DkjM
-v/MlwOp9M3vr93reZ/Ss4m97Axo8OQzJomMAoJlMJ6H6rJB1b9UurQ4NPJlwCyij
-BACFRsn/Yo9wczW9H1WBlDi1NO56kN0aTUD2irT0KQaG0ZJ0P2Unc7ogC3AgfkOu
-uH9XChgPjoLZtC/39cVJikVt60/ZczLXAsupHLnQiNjh5v4DnD8yqo4+aJ6Q/OH4
-EeAXW7HoU/Prq5sRYiv2xRSOngtS+XnQUHES7O0xdo2N0gQAnV8vch4Oog0yYcrL
-0e1Li1hP9bPcrIq4WYD29L8iBcB30czPegGCD6S2a/475Kw2sE8WBnxiGa4+1Mhn
-j7u0QnhUVVV+eQenrzb93wKm5sENRh01+1hwjXQJD9O8k8Wf8J2bnTwM0MEZBH2d
-/U3XHGzoR3x72790TUNFcW1rUFK0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxm
-b3h0cm90QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheA
-AAoJENS/V/NzcuJDdy0An2YZaL/VMei6H3kreYNoVYow3V9IAJ0XO2nYsUNoaaa7
-+LzaCr5rphfw+LkBDQQ246VQEAQA31Qj2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1t
-zcUPWYy38NIq+lNYBg7hLFkUfn0uTsAm33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/
-gYo5FhhC+qERZ1iPMyfMwwD7rrz9bthUGTqChV2h6NiPUPM7ic/D9rxJICXy8dso
-j0dQ6dsAAwUD/0ggimQTUCGmNHHypor/GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qW
-LRnS9uxEsOJIGSLMSdxC0FZEYq4jCm7CYjTOHTHvvYDbhs9QhvW9r4VD2efbERFS
-EYMiH69ASQLGDp/O5kOZTgQOvl5oxzvsrOMaRFSWcn66uUAMORmHKz1giEYEGBEC
-AAYFAjbjpVAACgkQ1L9X83Ny4kOO+QCglWbqVGzF6vcsNNzN+EUvWE/TMykAn1IB
-XfhZ/PcalODsIPzEM2JS63lJmQGiBDbjktERBAC5tQ53QHtwXMkcXm+jk3CIxnUl
-c+PI2ovY5YT9d9p4mIHnmgyZUQ+YrUkXr3BTtkGmjWXg8QhZw/tZEyq8EQWX7wud
-6VGRJb3mTAWvcPxNGdqtnLeR+IEXW3fd2eRVNpljEIMo4F1n9mJG8trqBn8oeEhN
-/NpLuHfobYxsCUaWPwCgpA8WwQ+MHIph3Hvabn/Ym7/h3iMD+gI0Apokfs3xjccu
-KzVKGGnK0k/XIL0YmO15ze6DNhILtEpXc0lwF4JfiibcqGINI3phhUgJ/jB2rPpM
-Chyio/NHa3sXPr66nEiCHlYaecKzZ7u47V5dQJJc41+IMQPNEoZNCOR2/AWj7zzQ
-OSIaWf+qZGtwgsDnrx3A2c6sGKjlA/91uSlQGGoYOvYtyGmShjJCWrNu9SlcnXGV
-9mKbWN+uZ1+yTzd0TeIHO+ZPwHIhlwyioMQeKX3kuYmnerDXJV4Ck/9lZH7ReIEs
-QX0aFwA5zmKEfYAJJctaJFenIyYrb96tO9NfdCQByqhDVwVYLA00KuWDJwHzgd2b
-kZd1qOntwLQnR29sZiBUZXN0IChkZW1vIGtleSkgPGdvbGZAZXhhbXBsZS5uZXQ+
-iFUEExECABUFAjbjktEDCwoDAxUDAgMWAgECF4AACgkQFoQQpI/CguYi4wCfbbaA
-ruJvA5fMgp3+Bk/T0kL/f54AoI56Vqqpio01uS7SADzj47t3WQyquQENBDbjkvwQ
-BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn
-JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs
-TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T
-jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1
-0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb
-5oy5wy797sQpsbrgGetCTsvPotIpvbGIRgQYEQIABgUCNuOS/AAKCRAWhBCkj8KC
-5vfsAKCJwKTpe9OoS/fhFdVKSF/4RwMc4wCfeSuo9zll5IkZrtF9FxWGblC1y/KZ
-AaIENuOl2hEEAKeOL2pIdZ+zQtehxdL9l/uDBFSTuN9rLb8DgLiw8Z9j8U5CEH/M
-38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT83lq+Ad0lgaZTR4z6nrd5ViOlHPlfqo4
-RPZPzPe+uF7EfDl792sJerXGAasLosmKnxKAyJyVjh7eZcjTS/hUhO9zAKDVyLHJ
-/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlxsXpcrCQIoKeDXgKNVv9L+0Pebspzr2WO
-ah8iBN1QOkbtexIKCbb9mmviEnJU0FFx5MIw4mipvY4EpCaH3McGwJpCzWmdzID8
-Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RDtfbIlbwotfbiOT9Tr3IPbH+tHAZByMRy
-vxID/RN90WOPSpODxr9AH9btmeJD0BfNt99116+qdwvWrTofcbkBgzvB34vLLDaM
-KVIyinxz2lYyC7aSpA3uzjZvoPvPrQJFLE0dx7DSkUTtWbQGByRabpyrXYdKZzsF
-XLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq/A0jgztaZVWa37IYtClIb3RlbCBUZXN0
-IChkZW1vIGtleSkgPGhvdGVsQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246XaAwsK
-AwMVAwIDFgIBAheAAAoJEBPbllU0xuPx7NQAoMhUK7d8mW1F45Qpwtpbn/EdSuqN
-AJ94+GVY6GrtMbA8yrZHeD8zSAedrrkBDQQ246YdEAQAzpO6UuCWWpP9up5GVhLP
-oSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41PjaGl6Pkh5lj2qkSUBa892SXyQMYqMqE
-q/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7jznGQlMsltx7qamoVNP0XF+ws1wHLjyQ
-l3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61qQLRXsSFr7LMBnaUSR0o6+4/HCdh8t+m
-nAeQBDAkne5DTPiwqzqsjoYekX6JK7wk+mbsJTd/Zw55Jkq9xVm6nEUo/JIbN7cP
-lMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mGZZiBfy9yTcxUfo5qTg0ffWy40CNHaVKk
-+iIcktGziEYEGBECAAYFAjbjph0ACgkQE9uWVTTG4/EmaACfU+XRhr/UgvgCfMlO
-thY327vlI30AoJypWeGLup2DqouZIGkY8bmpDrz9mQGiBDbjlLERBADIbiZFRBlq
-CMOCXTECdpJssJDnAmpir+yfAKX4hsOVdygepdA071Ams8rApABS/c2+Tuaplad8
-w+iyQs4BKuzqeQK/YWj0DDqyY2LM7qJbvFd6nC/GOGjiEucTTSgY8IOFScBTTks7
-alMGjHAdWzSjq+1ppWJeTSzp04UKhV1/0wCguOIaUr/cMVahSuoiK4Tdot+CR10E
-AKunWycnUG2IaGYqO3sCfpChzktWdTjUn9ESJAjKK1QUC89f5+KrMPITdUPypf++
-9MumBkJi+8R0GVJ8zwhwKfX9CHhrD0kfO68pCDxZyW+dDzOr/tFX0nuH9pL8oiEM
-kikaGLph+N+N1Ip8thh+vdLhNUr3EPRlrcAfv+WtOpbyA/9+kpa7x8nIn2SofJis
-j+PjKS3lAoGPe0eOoK/sVBvgVjy3Gc3d8vMG29r+2WRIpGwuhuLGNlQYX65BHV1M
-K/TjYvFnpoRSqtTK3GpRzTmkJIC8RlXxtfYf/n66VLB3EoTOzWHY29JMCJnnjPMo
-aMc2YSK10Bo8P/27nF0CKo8XEbQpSW5kaWEgVGVzdCAoZGVtbyBrZXkpIDxpbmRp
-YUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYCAQIXgAAKCRAf
-6PxvBCWWd1pYAKCVZ7DfK+i/YZGyEu18DnWq0ixligCghGwDoMGgLnenSjyShMZ+
-1Ecekia5AQ0ENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzET
-uQA2AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3
-bpgFRJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7
-AAMFA/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtV
-TJUoIo8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSG
-buuLMkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+ohGBBgRAgAGBQI2
-45USAAoJEB/o/G8EJZZ3CXgAoI5oimsZs8ZKmLb5sPB4AZzngCyzAJ9og9spt3EY
-XAB95XmfzqgJBRv04ZkBogQ246f/EQQAl65ub9rEKS7XsXwNkvGtj1K7gnql2H1b
-J5GF9bGCWhWmB8WFtsAy9XUeC3WbrcuWFgTsbtTfXZ5I7j7HSG6ukf6Ycusb+bA1
-IoT+GAQGWpFeWoXe16wXZFl0pEc2iUnx9ThtoQF0fO5YlbvHJPEQ3kvoqcdb52WO
-OfOuCAJxc6sAoNqo5w0YxgJ9jkj7J4cmR+OFUEKXA/wO0jrvYE7eiZeFUjGNiRot
-xzhTzh53rxtz2/DWG3D+IBFOt4qqxxp3WCSNO5SnBZWUW50hDkhTxS7jSmsfPBmC
-inmQ6EF5FaFPyLQBq0uKwhMaWficdrQS9syXFlPuzQ5jOS3kVAxOmtDd7CMTC889
-2dj02qzAE46QNNUI91kZXAP+PINfoJ8hV2zvlGZ9tVlo+Lgsl1BOvxvEgmYV14gy
-TmMWga5sNq7TdMdWi8Fz0Vy7sI4S+RMJ96rMws2iTzWLi2jGO44itoWttCwqmGJm
-lSWurRsvYhSBgvNCLXFGGaQn5ncO1tqKnWSDf625UnAipsgW8P4Agd5qJZiwXfJ6
-7Hi0K0p1bGlldCBUZXN0IChkZW1vIGtleSkgPGp1bGlldEBleGFtcGxlLm5ldD6I
-VQQTEQIAFQUCNuOn/wMLCgMDFQMCAxYCAQIXgAAKCRAMggxx0mmTE0D2AKCkQfBM
-tzcuk2imhqC9hjRUBMDNTACdFm5StEnEim5tQTftoXw5pikZIL25AQ0ENuOoKhAE
-AJHZUiWH04mR/wpH1fLZ4SOiA8/koImSnJ3hAZzvoQCaLbQERgKI3W1EZTiHmakQ
-oCqXU1wSuzHRwM+EShZwAFzwwWYAOavgqKp+fNLfzvwChm/JCp/Z+ds/ZQvAOSpx
-2kQLDilcj0yFOb6uhS5rFpjAeeYs/Nug5PZDIVe5pnUHAAQNBACPCatyZ6n9B6qm
-l+wmbjShyYGoNeG02gcNJ4mStCkgehQac4rRKMrLeSQTwpdGskBMNB5+I4WQKnGc
-myP/6QtQjUAQTuO1VItMtVFYxMbWjZplsboM5M1hx8eFpslrAkMBjeAfa4lMLOIN
-3YAtNO5fmqJys4+UBKNV4ojDUxRZj4hGBBgRAgAGBQI246gqAAoJEAyCDHHSaZMT
-j64AoL6wmTv08Y6txelPb8XUKpayw4FyAJ4neVj62ZIfdX94DPkF00H5qvVeEZkB
-ogQ245UlEQQAnKdAaILozJ04V6Z+FIwQEY/aF4EFrJJIc+uewF7ukZl/7uUZqSxq
-mzZjbqigyMFGybJSMa6TpwN0BKG5CJe04R/mVCIRsz1Jx5YXezN3UFsNVNE36R8l
-8dxWG+wgj2m60gu4VlodcpVMc/kRiSUgKUfg/xmPnRe3SJZSlG2lBm8AoNc/r5DW
-86om3MHWK8AoyhvVXhWvA/wOcjx6gfTTKftzpQBhOF0U0fC3npQC6bvjLjTBhQjC
-3WX5rfwJqMmrudRbEO1sFqzTOQPtb9xatMeVqTcOi6+x2zfXes4nTfi9Lgq1z8Hh
-E/LnktwxZxyPeOXqXu9N023IyQTv7mC59C1xMZk4POOv9WZUGz4C85s2/9iTJCfk
-MwP+MRW0S9mHmisruCY6TDVFc12KIFMIPSmWav6gW6bCAA+wIHfmcSyR6MHiLV2g
-tJ0vQuqgyWfeTiaxPof07dg9pZsV7Hk1ZUhEmloeOcfZmwtHkRhWGEbEsd89IWMD
-JlwNJ7Y9JZ3QvK7vB42bQVvyhdFQdEXH0slvlvsgKtCcaOa0J0tpbG8gVGVzdCAo
-ZGVtbyBrZXkpIDxraWxvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI245UlAwsKAwMV
-AwIDFgIBAheAAAoJEK0bD61DwtDH1RIAn1kxWuxGwCS1+i7Fp1cFzzZCHycLAJwJ
-q+RG7ux9sQEmop2V2mKdjBZmkrkBDQQ245VIEAQAuZli0/vYbs6h1HhF9HbvRHFM
-ePjQ99Sk8h/dTx7PI7eSqMHXYh0PZghchlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2
-ycH8ftUcGRo5CdESgiceziF6Vg4PQz9FlxtEhvrl7q8R6y7O+j03QAJKUGwBdt54
-0oZ8YYKiDvgZUZxnoecAAwcD/1b2fYzAnuWrQZXhXQQ4cNVxMBVFKHScH24oFVbu
-EWLgM/tdgF+CPw2Vtzba8ySR1K80VSgsQfs6n2wyCVd+II8lKHTZT/pfICFcPJlH
-Ks4ge+JNn1IcxBAiq0QRNW5hGTO9KdJ8MFWrWn2Bbp5k32roAzuCagoielFo4MVF
-ZTsNiEYEGBECAAYFAjbjlUgACgkQrRsPrUPC0MeO/QCfaGt8NeCm0zbssmOrXZ6v
-9zFk8xEAnj3SpjLTyqemniHSJ9KEzIKJCdiDmQGiBDbjqN0RBADBWmbmmByw+u1J
-TAixxj5NXRXQJ9zLtkxRQ1GHxLQPyQzojWWnD4kEme8yvsFXuulbPX8zZMnl6qcC
-8wt+b5E8dCtZuvQL3vS51yGe9M76VRC/1HgriE0YqHMTYJT4J+HciftldHFid+jR
-nGZpLwVtLxiLaWAm6SBi82FTn4lVGwCgtjc3u/SMsPgylPRyN/QeH8/OZ5MD/R2y
-G/c+ZF4kWcgmlzjJxQUN2wGYeDoOWUMXS8mf6yF+DLtwxo6oOlLaLHVTR6+qH2Vh
-z1zaqk1Ir6FJjkuUGvHbVFt2BmvL26StTjJ4zC4UFSWYP3qLvfbPThT+RoD4ea+V
-cPxGEGeqs0umImJ6s0reS3KJS9vgHtGo11Is4nP1A/9EzV7QkX5EuEnlUpGV2q29
-aGYx3RpcOhDYixogNHuW+K9KwcluBEEBmT74NwxVzI6qdJVVZn5lxT4IC5G0z/ki
-df1Rkgv8Eqj5DIikgnp0asB8FiHSsb+39d4cnk2V0ez/LmknXUl2mpKpk/fb+qXW
-TqPDbFUE8dz8zyqRFXIjwbQnTGltYSBUZXN0IChkZW1vIGtleSkgPGxpbWFAZXhh
-bXBsZS5uZXQ+iFUEExECABUFAjbjqN0DCwoDAxUDAgMWAgECF4AACgkQN8q1H7eR
-A/iKXACgkZY9/w96yK2Oiq/MUs/A74SzJ2MAniQ2eSHT5CQ4G8PPvYfPZueNI9PT
-uQENBDbjqPUQBACn8JyfkTPFcgaWMpUpnk+nTEkDe4GhAG9fO7alTgdT6+aDCdfX
-fXfH7gGwdURvDv6V/KEqcMPRNLAgAeP/F4T6OtoJNTxfWLB7j14DJNpYXjBPJPN1
-kpD2at8GcWB1aVGMsAtxMwlo4TZlqyfzCAAQeCLhBbIE9LWKX5oUTqiLOwADBgP9
-Gm8md+/xWp9sLE5i3uZ4t9Muu9w+UY3Ke/WcSA2CNthEYhHNtcMPP6PBwtz0x425
-mC1pe9RuxDyzRfV0/q+rjdWZBNA+VTVNDHXSj5hifvem3KFvA6TIgMabJ/q4WE7T
-4Hn8xjQpEsLGjSXAzG9WRg13qTzTilIk+rC6xYGbZHSIRgQYEQIABgUCNuOo9QAK
-CRA3yrUft5ED+P5vAJ9dQMc2nMpcKuH28xwKl8r7MP3pygCfWHGKFHWIDkUt8RfH
-AB9geauEQSKZAaIENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t
-k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+
-Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV
-n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU
-p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg
-SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT
-Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn
-4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL
-b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQtCdN
-aWtlIFRlc3QgKGRlbW8ga2V5KSA8bWlrZUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOqZAMLCgMDFQMCAxYCAQIXgAAKCRC+eUhSvlz4hvEjAJsEfDLAxH49s9lf0nql
-F4tcflpr/wCeJKCP6iVwvhGIdCu+Dbvf6z8/sI60Ek1hbGxvcnkgKGRlbW8ga2V5
-KYhVBBMRAgAVBQI247e3AwsKAwMVAwIDFgIBAheAAAoJEL55SFK+XPiGmdUAoKhr
-c+z524neflMpRwJ+NG8KVxOxAJsFZqm7bBtYllrdcTqNqMk49LfBObkBDQQ246p+
-EAQApnvWjY5rMvw9Ly8xFL49pGjAYFb9zFijvgG4tMirI3T9EBLflKLJ8m4KWoRo
-T2eNmy/JGLHyZjveaVh8TerDV+uxZkEGvv702nz8NOElQTjHWHoy0n6poci6Fxhf
-Jd1bnOjDK2mZEufEQNSn2PhA46gjCLRTAPuwLpitSSL5ubsAAwYD/ij9KRO69/Jx
-3+W9DZQxWIQBiKnYHVr1us2WpdpTV4jpCqJOCOgB/hlBmCY1C1/tpsAj1A3ZZamJ
-RWVZoNokkReItZLXfGacprGbmmjcg89gFM5V3nEUNCU/mm2BQWp58h4NOCv60dGr
-5GAqHDxAStPk388zbxEdyFs57CPQ4ZJtiEYEGBECAAYFAjbjqn4ACgkQvnlIUr5c
-+IaRMgCfdcoqwoaTU7rNH0BWaYUfCrQ6TnIAniN+yQaBbwZHMbSaDTBRndjLglsK
-mQGiBDbjquMRBACteKaHZ7pcM7Quj8Ec8Sx0fJ3u0NdLso5xn9Ek4FWMLBu6jw7b
-/5KjB2WtXOZSWKHOzeTfUAx79NMKJrD9jZW/0kEAFVeZpwZF1l8fBsRELR9cxAaj
-E3RvFkgCYAhXsF1Jno+qiU5TNvadGU4SzmP4vOnnjrIWTy83mtZiwoFIcwCggaaa
-ClE8Q41NyIfVtjS3f+Nm8x0D/icH9uwM3vpB2QV29IIBqazgaFr7vBoogFoAllaC
-QbPLiyHX1Mk3kEZg5xewmDS/tU4rGqj7UcL9OlZx1ICD8cp80yNYfoI7K5XM6sYO
-MmfJORGOEsqMtoYbo3lluDgDkg26DZNynUeFHZRrIWz2cKqTuaB3dw09m8sJNus3
-poEtA/9Q1KDsjKPi8+2kUzJoK3V61QglXAVDlfzK6B5KOEZ6GR/gX9M5uyyLjREy
-bFSSNPlvLR11+mV4GR5AcrVQOmE0QpFyo1Mr+uDsbqwkzERvRq1r5pOyqM5WPXhl
-Xa5oo4na1fBEX76IEzK6xIVG07GnNnaY+dlPgsLq4I8+A20ZG7QvTm92ZW1iZXIg
-VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ49ENMfPwK1U1ESEYQS
-5Yts3SRcAgCdG65G3ZW0dnhnjQAhf/vk+EteMfK5AQ0ENuOrHBAEAOGceVg3PC6F
-tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap
-r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7
-JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe
-52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE
-VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW
-vrlUyIYOTm2RcTxkf4hGBBgRAgAGBQI246scAAoJECWwD9QwzsaEIOcAnjt0vZDn
-9+3cTNpCuV1ZKIu2t410AJ0Y3CnFBUFBOKk6zkOJnaArwVN3ZZkBogQ246tbEQQA
-lWieyQhDso2ZnD2wb+gq6aqk1rRUhcwdBwCTbiE1aLAsnuMl8nLH4fvhaTz2V/Ae
-joL00e28duA5or9JiBfmVblrpTAIGWsu0AU6uEQsWgZwRdso3NH/KfH8Z5lxwJtk
-Z/hlAiEHohmGoD38mJNsgnm63RXadUH76irO6McvWlcAoONeH7i25AcrMol4O7BZ
-wqGq25ibA/9IRhK7AFhfgaRrDTz84PaIssxp1dWKalRruMJYGQK2LDuEl53Q+d1r
-nYBPliPbjWr/9Gkjx3K4B0CfWWQC0sUl77bNRFqr8FXkjRZcvkCoxxHG7PIFG77r
-Ld2SiQ+eS+dp5QijuuMC8skkvQuuxS6eIk0g+jjGlNhjuu97Ya6xeQP/Zxek37p8
-P1u9TTmN7nPtlzGXGrfKVi9DtJ31E805ruXFqTuoFfcOBRrtfY+DOebX8RxIwQV/
-TEmyxwoXdmkv03EYwD6AJSmx3WuVi5/revcH9nfSEHDy7sFC8CBp4aavAFRQNrho
-mSB9lSm5clGLZiD4nljF1EFABwQFch7HhlO0KU9zY2FyIFRlc3QgKGRlbW8ga2V5
-KSA8b3NjYXJAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjq1sDCwoDAxUDAgMWAgEC
-F4AACgkQX2NWum2XMqywLwCbBT6UT+lNWMh/jxFu/m5Dy2qMwpMAmwePBu7USi6T
-WKaXYRSL2yywJR0HuQENBDbjq44QBACdC1XRPM9CMFrgVUvioU7SShffLnjgWBZ3
-hqbOYrsgtXfuQdv6lAixnNPdnk/k4mjL8w1pqbjUmfmbppVDxzsiiUQlJatzGDfU
-1gDc7ksnXpF/vzghbucy8HNO0SHi3uM/GXC574iZ1oxa/A14fKnCVYT1ThqUa1us
-C5YQXHm4IwADBQP/f4LZgN3dbL4jLqXHDNpAIEjiTbKXxDKHOnAof//4SE0mpaNV
-HLu3nxI57CtXfSI2kMQSm/3pqpTKzaBlM/CbMAJUanhmlLPARDcJ/hQcDtBsF5nF
-G7zfLfe0SBwgsM1HxL968Vva7WsbYpSa98+3HSDuy9VwphFp7i4HbnCbSK6IRgQY
-EQIABgUCNuOrjgAKCRBfY1a6bZcyrA3hAJ0erCoxKtpc184iLkp5kpXQakDGHgCe
-K2WXA5gTOULftladXZn8tNoXM6CZAaIENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9
-aFWt81G93W8WhV51qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC
-10mAsLfJ+1rbnGJPuNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+
-JBw53ytRwjwe7m/D1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzG
-qLaHXSEBsh84OQTxPI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A
-6juudf7A2Ucy03G8HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFx
-RQ8BYJDGIwPrUW5JdlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hv
-F9kUc+1hbmir8SOZ/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJ
-AARnkiVG6yckMLsxHi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHS
-yxr2SYb+8lbutCdQYXBhIHRlc3QgKGRlbW8ga2V5KSA8cGFwYUBleGFtcGxlLm5l
-dD6IVQQTEQIAFQUCNuOsQwMLCgMDFQMCAxYCAQIXgAAKCRBdFeAdP/EyBgb6AJsE
-NGQmK4nUrwcbtZ7+av5GDQ2T4wCfYJaV2rBtTR9aWTRQfZOQoIkNF8+5AQ0ENuOs
-cRAEAN5hO+fEhqW2pX71oSUqW/TRHWSbybNc5brQ1tzgTbheHiG/LQJ1lHjtZoZQ
-syW3H/efEuNARwryo4IjvK0nmiQsqZUR1795XTIbo/waPN08QujC26uWbL1pYL5y
-QarwbKOoyAst4jgE1NpZVc/r1+WUp7NuEapicVjvFNzkiVCLAAMGBACWQJYr+h0o
-zr7JQ/BqI8vTKuVXb+DIBQjuSzN7LvaiIqMqb9ZdfNNmZ1Atvklo2Ce2VMyliQzV
-STZuHJQbfrDTBXBf+Q+AINiHdZEAodzBvDv6p7vsTnoP+A2bS8l6xrWObKt3Ky9+
-GUDkqW3WuagcUKogQgEb/FKec+GegwSgUYhGBBgRAgAGBQI246xxAAoJEF0V4B0/
-8TIGk4cAn1I/jmu7FSgglh9aPmVYAw7HWQMAAJ9PAPPXfqtwza6I8ttGPLYNvEAm
-AZkBogQ246zREQQAgcIj/Eo8PrIhEaxKcjc9dNb9/0BZ3BxBk7x9a7HKm6o0/vcf
-LH2XFjFxB4Ddfe+O1PC9KNUqIi6GTafGbyqS47XsnOJs5nvsrgmVpUUzAd7p0dxc
-c2tJodwhkH4GtOP4i4P9XBrxngQrWQ0ju333EPF6wLWi7qkVyGENCfsvktMAoKYg
-M+XYh9UQe7/HX0GiCnk3ExVnA/4ryBxdyBihj02i6s8vAe5mlTrwv85ugouSB95X
-EX8GPfvaWIW/TpUWQ6a7o8YzU/kIPa7YzETYX8e/FVr2Zd33HAfeLUNp3OS0NvEb
-YJlGDfW7/X7qLVv1o5WCjCHUhK8DCf9Ax9b4z7CbRHptxSE4U79NCCOsXQsObV28
-qlGsFQP+IIaCh7dTqADw/nBmfuXxepPKXS6Xdi0to79LfQtr+TUtJOEVGIbqqQBs
-gESFiT5qR0W7qhOnl47TIQyPQnt/V994QwyAGtIgtM5qYFRW70g1FkyDRX57PzTM
-uU2BjVI6mHkaUkLaLujbRXiQFm8IXJ4rf297GppKuSgvNcr7Rmq0K1F1ZWJlYyBU
-ZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs
-0QMLCgMDFQMCAxYCAQIXgAAKCRAcZ+wTPGYchNG4AJ98zSyvQ3Rt+Y+AVfawyEoo
-sFG5KwCgmMyj4RYhRlXKWCPORBxAfCOYMtW5AQ0ENuOs5BAEAJGi4T/jrY5BtRTM
-0psAneQytzzFgH4+LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrz
-ra0SQ75/SkI5+/S5ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvK
-V5b45htqCPnV2Pgq+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN
-7stgGZsbHCc0y6ln1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4P
-gSuXq6VDG5WNw6B9bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyf
-xwGr2JKkVF0S+YhGBBgRAgAGBQI246zkAAoJEBxn7BM8ZhyEiJcAoJTy/pFHvd9y
-xAYZBYp7qLG2lUIOAJ9Rlpbjou3wb81vE+Qev1+GQGpaVZkBogQ24644EQQAlNDo
-1aAt9iof3VI1z3TehyLrBIR4XmKRSM2Bx02CZhQRIwY/QsK6WBoxlJqfgUtsBUuf
-cztjJaUBixq5qPmBgXYqN9/B8HZvG2nknHdiqKrvqFpAqATJtlccW0tzPJKtKaTb
-tkORBDv6hssFa1aXwTN7IjN5nLI1Wh8lsvk9SKsAoP5Z4IDSK/mM9h6FPRsAsAYv
-d99ZA/40UwQLl06u7wBtmxqSdF/86kjC0kWX8J2Y9vIceiNEiE9MmVNcYIKwIM0m
-wduF50EksVjEdgWUJrqT3RztJfMT5+Sgm2KOAvvfmbKa8RF4NPSrVXDDrFeqk6uN
-DT0jnUUTQFYTjk4Pxg9Kl+a/c7Qee6qXn5qeDX8ubZqN0noX0QP/Y5HSgi62UbBP
-5B+e5BqE+ZLeJ7yVtl909NwTCr7KVZt1o3Za0dCYtMosPT9ObAjCanhSnuEWa3hu
-outOgorWaUSEW6Y3zBKvN/M4FA7+1Rhe86gnnWLt+rHqX5M8Y/7JTcrugNtR04DF
-sYga5A16CLsTDxSmM2Rgvpwh14FtrqG0KVJvbWVvIFRlc3QgKGRlbW8ga2V5KSA8
-cm9tZW9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjrjgDCwoDAxUDAgMWAgECF4AA
-CgkQO9vtsXd/vtOr4ACgllMIBb4leDKz61LQiA4TGWQp9+QAn0gF7rrvXtHdEc9k
-FQxgfASZH4RZuQENBDbjrmYQBACJ5res4tXRZj36s7P4KZWUf0YC8mtLxxeNEXe5
-ckAtn8gMfcSQJ4Mei4O1EBvrKZ9Dz28Emv0FmDd66DUd4ybRIk1PN8kWry9UuGLA
-f/VBAkMIyXhYCEnB7wRsNj4kF5DhYiytep2wekPocZO2GAUoIyY2yMNb2m2g2K8U
-nK2QBwADBQP+Ixih3o+++i02Xwi4wOe7aro2xSeBmH9b8nEaJ8v8RVLRO0AgoR4G
-LzKeTOfv57FU48tlY7sxth6FOxeJaQkS1nD1LRpb3GUDZr7qM/yOGYp0WhdRgGW+
-c0eYa32g5ajq2zn3+H1L4yrmRSZM4nmZ5ZXe9ijkGs0UNYqmi0gBYxqIRgQYEQIA
-BgUCNuOuZgAKCRA72+2xd3++00nRAKCX6f3/mVnEreWCgorUdZh8hg1LEgCg7FUW
-Ctn3HWOwgOwxxKzOs/rQm+CZAaIENuOvBBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ
-67rKzBkicjelpwWk6LndsCrbLsIWsDf8fNtih0r9As+2arfApkNlwuCGq1ZlPGGG
-Ef18OqPxFvnghVEbDdcosP4bIm3k6G2sgFbMl68xAGnTtkS5Gfz43uTuznPzdZnG
-bIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud9lx1bWM9KqUtAwQAiRYHm605RZVBkdzl
-fYx1Iwgn/l8Chq3MsPrfBMslapBnq1an2/nEQPmuIde9C6ALN1t03DHpKonx2Xgj
-YVz8pgty2FU7txSSm2EE+975dXp3ov4TfD1KxksOl770PAzixLfNhPW1q4A2cEru
-GgO74qEX3/fAa1J0nRKDgmA/mgYD/2TSZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB
-8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePcti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZC
-B6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmA
-Ymo4xn7YtCtTaWVycmEgVGVzdCAoZGVtbyBrZXkpIDxzaWVycmFAZXhhbXBsZS5u
-ZXQ+iFUEExECABUFAjbjrwQDCwoDAxUDAgMWAgECF4AACgkQpeZ/f6OuPqGvfwCg
-oevUn2afCdW1bLwbcRs5kYrM1GwAn04Y4r15A7ytYdO2PaxSkSJ4gn5NuQENBDbj
-r4AQBAC4cckdPiWgQNkGvAm3q8FxzRLog68/jffvj8Mvt++XQ4NikO0VJ8ezYkVd
-+vG3v5RoHTISynmMWZZjT56aFDSDZPOkQs2G0qZgAEgTpzCUBdlnUC8ZrHSTSQjC
-n7HtR2cpYCCUBliPtatDvS3Me1XdRfBhXib04TB0ci6DrzFQkwADBQQAje0R1INm
-9GkZKAzTECi+lVei7wbXkn4JF6n9r1KL5oULVF8aGHNEJ1Twj7kuq2kacYjc/Di4
-KdESRTZN9szlZnNruvAd9JKHIgbeysene3yRhy+YFaqXm1MtWCdwwaDiDoHDASpl
-55RtuCKxz6uW77qhrZ8E6GRDrhI92R88DbmIRgQYEQIABgUCNuOvgAAKCRCl5n9/
-o64+oWsJAJ0XijmoDUP1Iu6lhsSlmGOiNO/l4QCff5G6w6Vkq8d86Ev2IwS9Wf4u
-NmaZAaIENuOwChEEAJDhTfBph5G51alEDUaIfFvD0K+oXDXqDB7hDg3stVIpZR99
-d2bo/dPOuVWorwXFBDJeK0c7iJEQrMWKlxdqbRGkH8paFSnL5XWo4xMjknqnJzYu
-3gb734ioFHTC4WDM2/voTGuFpLw+eirW+wl12wusHpnNkWxMEIWt2HoGTerfAKD3
-JUBraePb8gHKnXFzyEu8RLp3swP/XaAKje+NAYeqhcAqxv2SEPUj8EMgtX7SDkky
-Dv8wuRfcNwMAt4XwHYnnM3bpUwWj2JcDGE9rsNna/HuFAjz/2lrhUKncH0Cywvjh
-Ytt1t92j0cPZaeR3pY8R/bm8Ns20tiP7uxVlj+szI2Pf5KiUHhiWHJ2RTXGE2pUm
-T6UFhc0D/juyZvINKwkbUSSwpKvsoi15d6e4Wx5PZ2mArT5y+ULitBx4WKIsXV6U
-VVaEBNaBe63k9cFGdPEba/HflSd76kLmcSdy+Fr73d3TMIrmwAKMVdKjRAEc3l87
-YaPd2/LdT+TWzCQw33EotexJ7yZzZA2SJx27/jyIgXkWtwvn5UCMtClUYW5nbyBU
-ZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247AK
-AwsKAwMVAwIDFgIBAheAAAoJEFjLmkyFqB84JOIAni+c3CDhA3k2Pp2CWgBSFcsT
-A59CAJ4gy1+t/Pwk/095y1T6g3rwRbE0zbkBDQQ247CeEAQAnr0w2OcvlUX7E8u2
-C8dJGIj7wRU5qDazxh0tw55/ybJ3/KyhCFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/
-IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0bBhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8
-IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYEAJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRi
-uw0OXQ9B656zp02G5qtDN+IXhgLdfQqgqyWckP4BLDJ4NtQoEM/Mr2/7oj3h01Xp
-bU86R1QFQOXmoWw3q7yqEWIwfOBqClSF0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH
-4PrVjHoNEz4CiEYEGBECAAYFAjbjsJ4ACgkQWMuaTIWoHzgImwCfYJ4NGyH/snAB
-xoxryuVciL3Cyu8AoMtIZ222A8al4XK0DrQqJAnIZlF+mQGiBDbjsakRBADettZo
-8gTOTr1nJXbk5sJfuVSQaMmbgLpZpMs3Q7C+gAX0XX+Q/vcuHp+wV2Nq0S4v+w5K
-+sxDF4A8UDf+q+GmNKMA5U27hkcDQvE48EYUghcdWKjWeFwmmJOb0KMoatdeh4iP
-T4j8ocGw+i0z6o/e0y0OVWsUvIqp4iZP3UlnOwCggOq5GfPJMq3K3cND3nU7GOR8
-e1EEAMcgH09o68Hbjbwpw+ejPuKwVFa37COX/65FF8PONeleq7Mr3Y8yKqbLIsIW
-DaxrlflpbyMz/ShuDdNU8gh+msfwh0+RNzdEPmpJCCVJOdZO46cudgbyAQriH7Py
-sSbi7AbmpnMl7kQruhAZWXLtnH1e1kKovB43a3ph8wF4kotyA/45A8bLKEmJvpq/
-amY6VjDnGsxkDjjw2OoVbt8sLdGjpganj3fvy5KRhWeWLKhmtq44tH97m4YDmGCH
-Va/Iic4aDPMMvUPWdaY5DyCeerVOb3JN1qLC7o5x2HBt8RE7cXnPJl5VKxc4qzys
-5bqQEYYt2dP4cJqKk3OjjCbl6TJ+8bQtVW5pZm9ybSBUZXN0IChkZW1vIGtleSkg
-PHVuaWZvcm1AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjsakDCwoDAxUDAgMWAgEC
-F4AACgkQqUwPdWUyRNYzWwCeMxscN9idLHgH2DP2U6tP0tNR0T0An3lfFgidO+z8
-ZeHXzuOM9TAS+jz6uQENBDbjscMQBAC1u+09NP46dPnn6RJtczL3LEroyrcPmHOk
-3FbiNfJ8YMnFBeST+U++chi/kKzm+N4y8TZE8sHwGqnkeIBtJX2YmQJFhKi2RR9A
-tVn2HV1ZTBYT1q/P7MpZTPMI9EODlCEPJTvX+MdtP8xh0Gsj1i1wujQOJAiXdrqs
-Pxen4Sch5wADBQP+NRROzLFq4kBUpgoTyvWzJl96Gdykf+O0AhbTlZ7ix9KtQLfx
-Grqzgo0hwDjb2QzeWHfjVhaaaSc5UWNMuIQyHRcsj9x4n25XGE0HUyOVSD46IOAj
-fZF+beXOa/NbYcR+zzORfXr1qyW2g4oV8LN4s4uV4dPamQ3l98Lkg8lhWCeIRgQY
-EQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ9ZgYjqQ3rScmCwhc3Ihzt2ATANbwCd
-FuVgvD2Yh8lsuiWswLDFrNsDk5WZAaIENuOzmhEEAKMDGobMDqPX3SKI3/W8m9Lm
-NgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7nTz02IJwZRVlrbEPd
-W76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOuxkW1LWavujX1JRvl
-BZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O4QP/apMk2mc+GJwp
-KSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3krMgOCR6dEsGukIsg
-VWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFBT7PI5TkLzlAEP1y2
-Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmbxUpenRhg/mF5rwmH
-l81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/7r6f4kFUrhO5atCl
-nRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab63kZwXCPiSR+iEwRp
-42GbVL7F/b2rtCtWaWN0b3IgVGVzdCAoZGVtbyBrZXkpIDx2aWN0b3JAZXhhbXBs
-ZS5vcmc+iFUEExECABUFAjbjs5oDCwoDAxUDAgMWAgECF4AACgkQR69LaWHwR4TM
-SQCgwD4p9j1sDwR1+9bBrzNQzVIyzmsAoNL7pfcdW4Jou1XHNc6hv4MpsHtvuQEN
-BDbjs74QBACHkUCB29pMkveMEZyNiKImizF5NZ/cv91Rj319k3xHf0NJWhQp/1G3
-8SxLkPLBdWcoB4mJRNjDyVsxFUXvRWFIMekwL0q1sHSWTcJwCpQs+LKKtPmD3LA3
-bhbuTSdpYgmKy21SH4epubqBzk/P0193mWXzHgSGLeUoTo3N7eBQ0wADBQP8C1Q3
-WGrBZNOmFVly0erclpQRv1qCa785yx/bj9ur2LxHwVozAEXh8jmoiKZyoAz7YFnp
-29kR2qtVplH1oePNyFweZqIjtmZbiCaT4scUVZ/3LuYbxgMoUFeRoG4mnEVvUUh8
-mmZovMmZFrvp0uojcDsfYTx0VBr8waxgJrg2YguIRQQYEQIABgUCNuOzvgAKCRBH
-r0tpYfBHhFPdAKCcyVECIa28vmUPgZ2jkXQoQ/nNkQCUDpGL1aZn1eKrDlHcGyD4
-CzywnpkBogQ247Q0EQQAvVX9TJEynPJEsX3X2fGPPDiQK+oB7D1INI9bfID5NKto
-o8qybivOLo85i5m7RUiEyhX3E9lUg9buKmtIhas0sJ8sLURmCndIKtXjIWg3Kd0p
-mjE8q2zyd7ChQ3ffJ20875wNbR4GQhSO1WTuxwRoL53ft+9JTULJxkQRf71Azm8A
-oJZQYphKeLWrLtFjb2WKbYxst54tBACS7C/Vu40euIevp2TZHTtY0U+ObFvJr8jD
-rdQZMkUFSuhti7rfO/bf7qTwmCvv6IVmn905ACh9bnKwZvcR5T1yR2b6CAN267fz
-riZhu6/FG+9Ddr62ZnV2rP8Oa7uxAXCnoovaafKYupopvHV0z0tUf2+wasrQdHZT
-vc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdVFiHdlIlEd5P3jQsXOyHVMrWp
-6qH10sQLto8gweWJr9aHem0QjTNSTVpzp6laBHf7tnLEwCJGeX5f5BOh87akRjwf
-h9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cbLax/pGFWEq20K1doaXNr
-eSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuO0NAMLCgMDFQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9MbluIqs8qjd1lOkj5
-8xC5K482bACgjeYJadH5StXmbJMGw2ZD29yevzOIVQQTEQIAFQUCNuO0NAMLCgMD
-FQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9KLOBiv3gbMisxZtzofWFruAU5fgCf
-ah6JSqX0OheC+mHzYBQa2a/1O5G5AQ0ENuO0VhAEAM9X7EMxDw3OSqgnI76WuIBS
-sI0gF/UptzpT8g8AY6gQPVhU9fgQHbu7cr8SZFV3dyUVLTzkNq7msUivd3/Fecuf
-77CpKBCrQlzst+UykiPQ/bT3+gq3owGi9MBCfeU2l5yZZ3yjGIqg8/XnxmCbuItw
-69FNyz7+nQoDM28ci9B3AAMFA/wJBLjxXXqWFY5JdXq7ck66Qx5YHDpPH7szUKrI
-GKGZHxk2UXoU8G9WRfQ0VVQfaomfnKvo+bFDFJGcLfIITI8FrjzGoh2K3PKcxsQi
-Q1SsVlMT3XmuvST0yvDM8a4t9o+2v8yLLgEjR2dn/lTiGjE/ANunRo9TBGpvz5P0
-85NmzohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAn18Lg2NXAdY6HW0LEurh
-0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLLkBogRDVOPaEQQA0vZ86nCVajqp
-71XSCfin8OI+gHAAbVA2t0JAH94SELIUTqhU3KDiqg481GoI0g5sbn83VOOnV06H
-yfCoS3hVAw+qPIJ5B9hOT7YSd078qI5N6H6mV6vXhC4mFn+Q71t1ZIjZM2grgXBK
-8gBa9XyIZPrtdI1K6H7PAaWitfJCLTcAoKRwVDiGrW2eio0bD3ri1TZKY6o5A/0f
-KN6cxEMJuAX6hI9QBkdwCdQBYTfnaw6RgZOiU3Yfq/IhwLJe4GDm9JdBLSv8N9Xj
-pkcsvDDu29ByeL8c2Mer7WQwFnx51MKKaHisWUafcO9QgLAFiS59nTCQimlbd/Wc
-hiuLkJesLf5KjTcs+y4I1ryjpjZDseGhC49nK4BMAQP9FZ6uNXhULndYmA8WRs9G
-GF95IzlbwixmZNkoviIF9Pv4nGT+xJPrMj89OzHt8KCLx2YyVelrLhwOCSxfjPMw
-2Je1qRwcDXGKnF3/Nb1Mw9/3TQoRexGz7+SuV4v5EEvu53CY6sYbvRkuWHopzmdJ
-3nIXNbywNRCse/EzhN+1H2uIlwQYEQIADwUCQ1Tj2gIbAgUJAAAAPABSCRDe8Pe4
-7Gfb3kcgBBkRAgAGBQJDVOPbAAoJEGX0CIjlGYfJ12EAoJ48RmJso+koefTCqbqS
-zIEK2tGjAJ4+2Ur67Vye4z0tH6ArbYhPx8mRS6EYAJ0bOtXgxXzLucJLCaBqpYK7
-xbtZKwCfUQ/sT2tTaBwe+dAwzeIS1tsyDl+4iwRDVOQFAQQAykNkLQNR34cKEes6
-UcssN7IDzXup4UoNQVt+YBJwMI7rsI8jtaUeBZxxBmFOAp1dp3JQTUgv1CxWQZk8
-S/fuKOK3D7+NnDyZIBITsPF4IyE6qLkuFtEsxLnOPjf2gmWT1wk2AX1UQmRgXcp4
-+4jnIk2B5Rh3+FnM7dc+8CaCCc8ABimITwQYEQIADwUCQ1TkBQIbDAUJAAAARgAK
-CRDe8Pe47Gfb3vVeAKCSwHVbYSnEz9o3AOWcJleQA8IL6wCfRnVu8NlqzIBcstTX
-TimrHUIM/k2ZAaIENuO03BEEAK1KlG4lUzMSYafGwOLzFwMwri48rOAOOAxPrkRW
-/QBrGU5sPxUzxEzu4lP9365cmMk4CLyNswxdUsB1xtOihd8iLvCxejgjNDdJOypy
-qcPDNrZD4k/g/ADax1OXde/Hr85uND8jQ8isUhjZSBtTeDCChbTXTJWoS77vdZBt
-OFnrAKCz2ucyEr7F/hMPeTNaOELYvImB2wP+MK/nmEcsD9+Xm/xeVfWzi1oVphA8
-8OCh10O1fjieyQ+Z+OEuSizysCKIKIQ5T5q8Q0wCf2ALpAKVCLXd9JK9FKt+EIBZ
-LQLKoAj+wuShDNU08VNuU3LOKI1B6A8jI9eBArokwj9GRUSlIr6KYI4EYRUyl1VV
-k8kpENIPUg2iE0oD/2tBclzEFGCY7gexgOq+FOkJyB7MUuca0IJLIW+LadjFVjIa
-pYbHzi2o9VmfqHtA8SsNDt2Ckx/xAM5jXpSnDG7U3IpS2iHSOZfmJWpv22Xu0L2z
-drO9ip9j2Y7WKjt1M6sNeG6gCUZdHpJXjHWUTDMwLKLq/ojVTx55aHV50NoMtCdY
-UmF5IFRlc3QgKGRlbW8ga2V5KSA8eHJheUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuO03AMLCgMDFQMCAxYCAQIXgAAKCRCJeabFVn+zSrdPAJ9D0aoYjMxfi9+w8r3G
-lZftM0q5mwCdHy/vA+Ra3KdZt2LQTKaPo+XbIni5AQ0ENuO1BRAEAMbhpQb6qA5M
-YSA4BWc3RyTvoCcpveM4Ehh5AZgSAX+UNhtjt85De0iBDSNesoPXMcu85E2wbvTz
-IM1Hv1LkKL/WemFys049Yy6M6xnZYyjnFuWEb5Ym6O3ilw1JEr0/l+idQTiFXsZd
-OWODXJn+6LTQ63tvUHyvIBgTv23UHey/AAQLA/0eDavyUGr+P+3eRE7jGXXTwMVe
-JAp2Puxe6CYBwyiYXicbePazbX10sQWVLCfT+l4a+OnwkU99ww9T/EclJpkt/3SZ
-ex/6kdwNa6MeBUD1gLpOFhobH0l75WZxViiYQvE2cxYrI4l48NThWIheEwK8Y/Q+
-3f3BxCiIuN67Xn6X/ohGBBgRAgAGBQI247UFAAoJEIl5psVWf7NK7JAAnihkYWPn
-xhbWi9SUMaB3Qz0SfsLvAJsEGrvruaT2XPVKwa9FFfqRj6WPnpkBogQ247VREQQA
-3VAGc4T+vuvVXcka4ETaLaLlL1xOiPIdJMWRWWQ60CZqWXDVpFBw6oG2AyfUZiHh
-LlmTZssz8UhXLw/URsPSpiGbtpGWKiLs4OCqjslN0lHzcnGqxGWCZJixMgZa5DcW
-ZJjwqdXEbDChgm4ULP/7+iKvIenTQNhFoCXr9MtdoHMAoLpNCmSKlTu1H5GlWmYT
-K9AndWrfA/47ip0VYgzIvUhI0iWcG95sNfshApzPL6zPgKBqACogs/5/DfRn9g07
-BcuMihLJD0PLNPVnOXqQRaN4Da7jLuJA53XtLgpogxG08M6XUimTucfcovu29/bg
-jZIKA5c8KJ2lzXSJ9jZxSoy+O051f7yhXbUmYC1vdNr8GBk69QKy/wQAiHMfU3cb
-CfTTMmig+zBHCkHjqzqr/zKtR8RT5AwSOIU2aUIiHdV08apCelBw8PbEf077TuWC
-q2YyDZJmgWRYh5cdaMgdAd7ul1FS1yHPZYshcofWjgXUJHR4I8iPCs5OmdHo2HK3
-uU2OM36ZQGSpFA5WN1NEm9GtMSBoYKN2ERC0K1lhbmtlZSBUZXN0IChkZW1vIGtl
-eSkgPHlhbmtlZUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuO1UQMLCgMDFQMCAxYC
-AQIXgAAKCRCe7zTNSxGyX0kEAKCUUXvVByh4l9ohXM16up6769DYSwCffVvyOW9v
-9kENNcHvItZnEmD1o+O5AQ0ENuO1ZxAEAJriuUXEtM08l6eko1tvlnkCKSZyQ35S
-9PogXv/90gA79NalJsN41jALsRvgnAgKZLJddtlfZ6RB4iwuENgOva6C0bG8SgT3
-m7rLX2nSyaFWKj7L456wZWn3uRnKxT5ymxNMFemV8f06f3kg4kJYneJVs+Sfs/5j
-eyoRwDc6EQG7AAMGBACTuX5AknTcJIrBV83irJVsZvWKHtUzqLoklddYXsdI/eB6
-c+cBlhFxe8/hWw6vuFdFKhpCsWhEbJehzFjZCJo+ezf/YdQtWA34ik4poObWaSpn
-oV7ZXaVhgjQ2axNEWrKxQihDVYRTIaXOJAJ8eq2wNPi4UbyZL5HcWO6SlP/2mYhG
-BBgRAgAGBQI247VnAAoJEJ7vNM1LEbJf9FwAn337iOCEu3IIdDzYIa/9L9y/zYZ3
-AKCTcLrZje5JL/Z/6D6pAcsy8b2beJkBogQ247XLEQQAgQyThl/Qv8cQlWTT+jh8
-+nC+bzNz4plAIVfvRwFVT0FYk5xSq5GD0kMkX1s4zlPETtU6eQh8++O6Dm+o/T++
-Mh9bsu/MhYOFLoVwVop4bgiiquCCFsCZAigRa9VPH7vGumOjXI6ogwNCphkSazD5
-l3p15CaRRhxu/K1LzYvSDH8AoLoMzSC4f912QmVPgVD2Hly/p1ABBACA12YY9bxV
-x4IvZZooyg4yaHBAaGpjf7WkMujsdUUQ+h7XwD2OUxEdZ+8ZvYTMxPjr9SCqR/xP
-O9kYWtartb+3jmunk7jVhdDb5kkfeeX63kbDbkfCTSG+krSNhEfacwVH48pAvaYN
-sD3gu8KUCSBfUxfiWtQbxtiPoWtsSe/OgAP7BxFLwDrHOfGGz5WyD8qdiXRB7100
-U9jSElUbkzELIPL1ffZzGEdglIdu9Lj8stsWWg/5GHCff9Z4GOwvaW2zVqFe9D5B
-DDv6o+uziFYllT81ISHVEaK26RobnN6Ac1MToImpeyGyEj0SLQ4INqGaGOIaskDc
-fAo9mWQMw6TNrwq0J1p1bHUgVGVzdCAoZGVtbyBrZXkpIDx6dWx1QGV4YW1wbGUu
-bmV0PohVBBMRAgAVBQI247XLAwsKAwMVAwIDFgIBAheAAAoJEGvEd4BUrNJGQOsA
-niVMkc7hW7GdLkLpb6YDiEUy0yrHAKC3dyJ1RI9tKXk1EOW9jTopkl5ysbkBDQQ2
-47XyEAQAzHzwwUKDM7+djJo2/EnWmCijc6g3fStaGNoXDEovi3B2oPiiRTsigX90
-qB5nFP7whDfi8k4JY2Eig5hH+MGdvni36hYEnQSadsZueYofvQh14N3V8fUmx4hi
-QiMXyWiLJzc91ZiRjww4wZWn/4Y5f+0mb0fjCaVSxTxo4+7joU8AAwUD/0oL9Gm3
-gl1XVV8BhJoXVdFQ6PN9yEEXUbtcrfkC51kTBk2NaEGqbB+kC8GEmXwyZcW7AQN7
-X6ikraUUm3RjTU7CvkSHobBnXYt7FhqZURpuV7eSqZGP5nP7SxWmCTTKgIH1kHCp
-WRwaexKFjIIkYgyVFqtEx9cEQ6D2kXPh+RnaiEYEGBECAAYFAjbjtfIACgkQa8R3
-gFSs0kZ9YwCguRqebBzPbFnWXjOqn7ueBdjsDEAAn042F36TAKQETj5I4YRTah9H
-fMeR
-=oe6c
------END PGP PUBLIC KEY BLOCK-----
-
diff --git a/tags/gpgme-1-1-1/tests/gpg/pubkey-1.asc b/tags/gpgme-1-1-1/tests/gpg/pubkey-1.asc
deleted file mode 100644 (file)
index bed1da3..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.0.4b (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-mQGiBDo41NoRBADSfQazKGYf8nokq6zUKH/6INtV6MypSzSGmX2XErnARkIIPPYj
-cQRQ8zCbGV7ZU2ezVbzhFLUSJveE8PZUzzCrLp1O2NSyBTRcR5HVSXW95nJfY8eV
-pOvZRAKul0BVLh81kYTsrfzaaCjh9VWNP26LoeN2r+PjZyktXe7gM3C4SwCgoTxK
-WUVi9HoT2HCLY7p7oig5hEcEALdCJal0UYomX3nJapIVLVZg3vkidr1RICYMb2vz
-58i17h8sxEtobD1vdIKNejulntaRAXs4n0tDYD9z7pRlwG1CLz1R9WxYzeOOqUDr
-fnVXdmU8L/oVWABat8v1V7QQhjMMf+41fuzVwDMMGqjVPLhu4X6wp3A8uyM3YDnQ
-VMN1A/4n2G5gHoOvjqxn8Ch5tBAdMGfO8gH4RjQOwzm2R1wPQss/yzUN1+tlMZGX
-K2dQ2FCWC/hDUSNaEQRlI15wxxBNZ2RQwlzE2A8v113DpvyzOtv0QO95gJ1teCXC
-7j/BN9asgHaBBc39JLO/TcpuI7Hf8PQ5VcP2F0UE3lczGhXbLLQ/Sm9lIFJhbmRv
-bSBIYWNrZXIgKHRlc3Qga2V5IHdpdGggcGFzc3BocmFzZSAieCIpIDxqb2VAc2V0
-cS5vcmc+iFcEExECABcFAjo41NoFCwcKAwQDFQMCAxYCAQIXgAAKCRCvgiRPnNn9
-VXm9AJ0auCQID9AQ4ic48A05OI4tcvs24ACgjsLML1iIYUtrSP1o6QSIYdnTUZy5
-AQ0EOjjU3RAEAJ50lvtCGbnQlI97VX6tJkosdPmdzeXaTWfv//A2wmSANbYnuych
-GMa1LN43Ew+H6FXMWJ3MB/exs6UBFCgGsw88qmcla2bosQN/aVLA7fqXT9ujqoNG
-aIVEmgdbK1MkSPFXBFyVW3hteod83D0UqFlltwp4A3ageCYFVJTp50d3AAMFA/44
-YCQQbg9x9JvzHX3VH7CRX+raEDkDL3Pbz0PHas7bwI7gzZ+GFyNKaCvrHQOyuR8R
-IKIbjtQYnXr1675ConCTceIXhysY32sTn5V6UFUW2t0xaRfas8sZBbLDyIJkpt4f
-yD+6OaRoui9KZqXMNwt7i/XFIto/sWd/OK3SIgZkAYhGBBgRAgAGBQI6ONTdAAoJ
-EK+CJE+c2f1VVJoAn36uPWUhCdGXbSLxGibYfBt7et71AJ9JgWeRlTDTIoXYN8J+
-qsPN0YCxtg==
-=4+Yp
------END PGP PUBLIC KEY BLOCK-----
diff --git a/tags/gpgme-1-1-1/tests/gpg/secdemo.asc b/tags/gpgme-1-1-1/tests/gpg/secdemo.asc
deleted file mode 100644 (file)
index 1a697f8..0000000
+++ /dev/null
@@ -1,699 +0,0 @@
-26 demo keys (passphrase is "abc") [2005-10-18]
-
-sec  1024D/68697734 1999-03-08 Alpha Test (demo key) <alpha@example.net>
-uid                            Alice (demo key)
-uid                            Alfa Test (demo key) <alfa@example.net>
-ssb  1024g/46A871F8 1999-03-08 
-sec  1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) <bravo@example.net>
-uid                            Bob (demo key)
-ssb  1024g/E29BA37F 1999-03-08 
-sec  1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) <charlie@example.net>
-ssb  1024g/BC43DA60 1999-03-08 
-sec  1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) <delta@example.net>
-ssb  1024g/B0C45424 1999-03-08 
-sec  1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) <echo@example.net>
-uid                            Eve (demo key)
-uid                            Echelon (demo key)
-ssb  1024g/7272144D 1999-03-08 
-sec  1024D/7372E243 1999-03-08 Foxtrot Test (demo key) <foxtrot@example.net>
-ssb  1024g/EE45198E 1999-03-08 
-sec  1024D/8FC282E6 1999-03-08 Golf Test (demo key) <golf@example.net>
-ssb  1024g/9DCAD354 1999-03-08 
-sec  1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) <hotel@example.net>
-ssb  1024g/D622AD0A 1999-03-08 
-sec  1024D/04259677 1999-03-08 India Test (demo key) <india@example.net>
-ssb  1024g/61F76C73 1999-03-08 
-sec  1024D/D2699313 1999-03-08 Juliet Test (demo key) <juliet@example.net>
-ssb  1024g/35F8F136 1999-03-08 
-sec  1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) <kilo@example.net>
-ssb  1024g/9AF64D02 1999-03-08 
-sec  1024D/B79103F8 1999-03-08 Lima Test (demo key) <lima@example.net>
-ssb  1024g/FE56350C 1999-03-08 
-sec  1024D/BE5CF886 1999-03-08 Mike Test (demo key) <mike@example.net>
-uid                            Mallory (demo key)
-ssb  1024g/4F31EAE8 1999-03-08 
-sec  1024D/30CEC684 1999-03-08 November Test (demo key) <november@example.net>
-ssb  1024g/8B70E472 1999-03-08 
-sec  1024D/6D9732AC 1999-03-08 Oscar Test (demo key) <oscar@example.net>
-ssb  1024g/2681619F 1999-03-08 
-sec  1024D/3FF13206 1999-03-08 Papa test (demo key) <papa@example.net>
-ssb  1024g/63330D9C 1999-03-08 
-sec  1024D/3C661C84 1999-03-08 Quebec Test (demo key) <quebec@example.net>
-ssb  1024g/A029ACF4 1999-03-08 
-sec  1024D/777FBED3 1999-03-08 Romeo Test (demo key) <romeo@example.net>
-ssb  1024g/11D102EA 1999-03-08 
-sec  1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) <sierra@example.net>
-ssb  1024g/0F1B50B4 1999-03-08 
-sec  1024D/85A81F38 1999-03-08 Tango Test (demo key) <tango@example.net>
-ssb  1024g/101C0402 1999-03-08 
-sec  1024D/653244D6 1999-03-08 Uniform Test (demo key) <uniform@example.net>
-ssb  1024g/5522BDB9 1999-03-08 
-sec  1024D/61F04784 1999-03-08 Victor Test (demo key) <victor@example.org>
-ssb  1024g/07287134 1999-03-08 
-sec  1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) <whisky@example.net>
-ssb  1024g/FD6E27F6 1999-03-08 
-ssb  1024D/E51987C9 2005-10-18 
-ssb  1024R/40DB9D43 2005-10-18 
-sec  1024D/567FB34A 1999-03-08 XRay Test (demo key) <xray@example.net>
-ssb  1024g/41E408BE 1999-03-08 
-sec  1024D/4B11B25F 1999-03-08 Yankee Test (demo key) <yankee@example.net>
-ssb  1024g/F7B080AD 1999-03-08 
-sec  1024D/54ACD246 1999-03-08 Zulu Test (demo key) <zulu@example.net>
-ssb  1024g/A172C881 1999-03-08 
-
-
------BEGIN PGP PRIVATE KEY BLOCK-----
-
-lQHOBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp
-ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy
-hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj
-VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU
-/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p
-+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5
-cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS
-09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+
-lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av8EAQNuYiCeVh4Q
-pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuHtClBbHBoYSBUZXN0IChk
-ZW1vIGtleSkgPGFscGhhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI2446eAwsKAwMV
-AwIDFgIBAheAAAoJEC1yfMdoaXc0OXgAniui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ
-122s1KPXI/JMLBTBGCE9SiYQJLQQQWxpY2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI2
-47arAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0J4wAn0x5RWtqCjklzo93B143
-k4zBvLftAKCFbrlxlNCUPVsGUir9AzxvP0A3gbQnQWxmYSBUZXN0IChkZW1vIGtl
-eSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjuFgDCwoDAxUDAgMWAgEC
-F4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5WblWLc2+6jwlmuLg8n8MAn12puZol0HwV
-0mcd8aHWtcrfL8lynQGlBDbjjw8QBACcjdcfV/S7I319mfDvbOwczDvTqDsRbb2c
-PhQNAbg7NFlWJKtRrmff14jtCt9M77WZ5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOX
-VPhyinUUGSq68IArA8vLSUTuOO0LIi05LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9
-grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkPbzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q
-0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDxj1nynE5ZgRBiVoyudEELgNnYhp3MSEuU
-g7PkFWn+N+GuvyhVUHApleyvP09kvP57hif6yJRS+V6L1ugP0vZmBI4dqQ//BAED
-bmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSExyy8unuzNvx5GFG6KNtxoFCDzMMzUa0ED
-H1x/QJA3CgqMpS282nLdk/5O+AphiEVeGv8+c6pL/t7falIfSgKZ0j2nvCKH12So
-bwiNflTGJB+jLnnesjqYJD7h0SVLjToP/vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8S
-UxScIIhGBBgRAgAGBQI2448PAAoJEC1yfMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AX
-jLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+O7fYF5UBzgQ246LiEQQAip3HOFHnnO3V
-mlQEctkpjVbn3knp2LOALCDz9L+fYxJeySNK2/uCWyCaAM1v4XJtuhkv1G26UMIo
-PPz4DFFeUHwUk+AhDpX+/8dmuBypPbQ1eAJ+6tmja9W3lvrcMX1BllleSNKNW/4i
-lZPy4kEYmjK/KSV2Nuupuv9j5/S5g7cAoPiKn8fILCtj2Qlr/O7hCgDi8x17A/9X
-kcS6grdYU/fIHQy8pEU5SN5DKuhCtyPs//KQyDA7jyCatXjOvGHRWa/LO4tcntUK
-Q5bT2B4Fp1Au997owCgDXcsm5tx6wN00gYxAITX3LvJ5K1aK7wEkFAwiyWrVkViU
-1Fazx/hlyFzAPzouiw7IDQziWp8M87wwgpvIVkKlvQP+MWAGeDVRa0KvILUDyVrj
-CH0hUr6WVjYEIGGZ7Yl0lBmDlbNvE//O0aEcdNrbFQ8NjwPM+vKv10bjPTXXrcW1
-F0BwfXrMxS4t1tYnbF4XfwuEsok4BBVxvGPLPeBGnYJNTwGBzehnd0mO45nr6mBl
-S5gae6n4+WPV0jOUhNE4fnz/BAEDZ+eT3rtPNfpwG0QtNEjpDuT92icLuwCL1zfT
-YKyXVFu00JkCvnB8k7QpQnJhdm8gVGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFt
-cGxlLm5ldD6IVQQTEQIAFQUCNuOi4wMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOw
-smzHAJ4/wZXBeYHYY/IbohYo5IGWYv2IAACg8aZj+CQpLM/lDyrEPFG7bkz26T20
-DkJvYiAoZGVtbyBrZXkpiFUEExECABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ
-/hgLHanjsLIa4QCgityK8zajBOqAN0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFz
-rpO/fX0OnQGlBDbjowcQBACVSdXxUWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYv
-BtbB/y7TFIfvAr4ZFbpuqew6JvtjIEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBD
-uLkb09RukCD4zdY6xwbAMRsOzZgv597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffO
-TwADBwP/SyVZvFEdEVn5/dQTp7eAtXdrbZEM379ctCJ2663RbTZd55lIBev1fTnK
-QkvDTY2e58yIQ4E+Nzr99qg9Cyf6e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9q
-gn0Sgsnu/ww2txVw3XEjqL8Hgl+4Q/57YRvJOe+q29Ye9LL8eaj/BAEDZ+eT3rtP
-NfpwG0QtNEjpDueclWEU7qldXMk8f3YzKKAvQfYWIlwPJHFJ/0Tt4c7R1RRkmEFm
-DYThgT3vha1BX2Osoxnkva5SykN6Ghgq+qb2WHSAXc5LVvkyLQz2JkWmgUyqwcPI
-5nHLJ+8ZxK4lXIJEk0zHe9OiPHAiEIf4iojOaRWRjz4IUD5+qWkui/snT9GTZYhG
-BBgRAgAGBQI246MHAAoJEP4YCx2p47CyMrkAnRZD571KWLq1aD44YNacOFM7mlWM
-AJ0Tm/dzklD/T2cX+F1ScBylNj5wlJUBzgQ245BnEQQAvwwkLp4Dtoie4/fvandn
-K4wVPCvgJkIbNuyQZCarQGwv8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sj
-c7hjs1PLhwepMFrS4/Ple1TljpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zX
-gLtedux4+pdFxkgM8r6fjZMAoJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4k
-jFmDRqOPp+iB8YYwQTPZS/gwHtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk
-3XawwUshYgi8SgwWIDG0jusEPYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN
-4bts/LY1XsADzU7lhE0Oohx6FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPY
-YzOvlVfHCSXQ14oXjCs1nK1XnMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPe
-kncmaR8fu/YIQ9zag5s2GpKESKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP
-5pJNNRIM7VimNGn/BAEDIklsjKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28i
-MQy45N5zv7QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVAZXhhbXBs
-ZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K8xr9q2w+
-RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG+WN3nQGl
-BDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8FmfdIXna
-NLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//EGIZK0zTg
-W13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwADBwP/R009
-s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqkswV17bJG81
-czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD81VP+6zBh
-hTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70pJ77zKAq/
-uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5EzBpZ3ON5L
-aFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TRE3syS1FQ
-ZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgRAgAGBQI2
-45CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0bP+lAOCRS
-YziWSIDf+BJ9F19H3ZUBzgQ246OHEQQA3mc7VzzWMKaCH+gX6nqSJmaoVXdql7mQ
-SZxL8GhaAJe3q+NqV1y2YViLu/4Fjg33MjcbFCoDG3kPp1jto3XGULbfoJkQBpdR
-eS28bD+mkcON1uzwJG5mID2ObWP3YYBRj+abqFfZoYo6RXCv3I3oOsDYJo7hLAr/
-AReRV+P6drMAoMJoHMfPBKSRd/xA605OP/F6+mfPBAC/fSVoJ5dMNkzYj/U93OZr
-VXXGLN9p7SR/Nk4kENC0dAO80WOa7qIzWQvS7E4beSuvQCWpKwwPxbuZq9sWKBSX
-FuG+66XilMv8GIn3joWGOU9jQ2L2mZ0CV2ejvJRixYAMQpp2RDeCERWoSrP4AJhv
-Onenwr7kq6IUmb0Pi7K9OgQAhU+LY37i+jGdFYbApcXgT58tgDNdPmwwzOXjpeTg
-yzfTcX/kkbuQHSKI89jqg/SXeeVqG6VFxs0yPtINt+t+iLibh+1RghfdpxcJI3SA
-25UaKmDwLCUZDIguBZEWnqhdA6YCWnGEgZx3WN2HeyPnL4JCu6AY804lP2bOYWQH
-ivH/BAEDYa6EPLwGsFGwSRgJuxOczaFyt5cvcleOf0qIVWQ8zg7zpaOi1spi6rQp
-RGVsdGEgVGVzdCAoZGVtbyBrZXkpIDxkZWx0YUBleGFtcGxlLm5ldD6IVQQTEQIA
-FQUCNuOjhwMLCgMDFQMCAxYCAQIXgAAKCRDrqfJA653J5q4mAKC2XzshPCkG6gim
-QNpS28Zwl69htQCgp1gHi/+kS47sk+3XRt6nfoIBJwedAaUENuOjqhAEAI+1nWji
-Y8yTbNhvK76w2bw/7mgC0PT7Xb2AKfw66e8TB+U+tviik5SnTt7PCEAT4rhaHCTY
-q+bLf55vF5foHDmTr7a+OXP3JeeHxjtYDowWTn4G5HQVSvyzMLkFiHmyuKgmZwDp
-Qy2DRlVILhi5xEAUn54YZIIdFgNJKre32L6XAAMFA/93DhKj5THWHi5xhBuMD8bc
-lSHIcBjr9GEVuWqW89n3Tu6LY9QBVDeVsxcNAOflh82tTiFIYOdGXKOh58Csehfi
-22eWjnN+xAL2hYD7jMQX5GlmGoAqH94wRdAm01lF1fw+f3RZiHrhk7lDDbBlR/jk
-jFtoQTf+/miSuSyxy/oc6f8EAQNhroQ8vAawUbBJGAm7E5zNohCGfow8evYur7Yi
-tpkufrndPvf1xHdX6BzF6AcqIU7CXlL28F7wLuxbw3X66Kt1xr0o2fnM0zCHpMwW
-2EcQvqT2BDTbgZ/3ui0ykA+KFVvrkGHD2seQL2XkebZvUT8bkNRGDQJh0djhLZhO
-M0m6hra57Kf2tPe20wp5sR+j7ENfR0rHiEYEGBECAAYFAjbjo6oACgkQ66nyQOud
-yeZzTQCfUnuDgUMiEoBukTDNnuvn62NNR/sAniZp9Uhila1p2XiARI/o0eTkgDAw
-lQHOBDbjkc0RBACKzsZMOq0QzqW6inp5azEWL36qFRWn03pL7GVvDNBlUDgWMKp/
-VVH0lfx/CMt5ybFPnFOFBVxGqB4VVoLKTLY2B78VwUw9lB5o/mO/kZFZzk+8f1LD
-ym8Y5MHnpXhl5HhxAsMGbkIXm0q7UEJZarYwsd9y3tNd7pALNkpyPN3DywCg31W+
-so34RtAL5MfN1ZpRal1x9acEAIVYTItU9OkjWM2ygJnTQXwVq7/ZtpeTyZ1E6Ull
-LpurniSx85BDNF4FZx7fmHRbs14FGn7J6hJ/tjeLSNM7ias6Iv/Q0JxLyoo2cYob
-WKt0t6zelCENmlxR7Yb1bcWcaHGXpbmGlhz3nnSZSPYfcjm2Z9JixVxWOk1Ih0GL
-PETYA/9IjW3qrsscxCnSHcw9DbPt1oyFQZWJedWXb6sqNvlPtu9IV1XSLLK7Kiq9
-Q8EZbAkUsDGPp6wdGVDpby2iAe6gkJHtwvZsrv3yaBg4TGTmAF7GrVUdBBk3V50r
-gsajYRIqsJW2RjAHMBTvqFgUoBsoxTx0zEjsNF0uNne91DcU2v8EAQP7HKVodZwE
-5NkEJ3i6Lo0iwuRAu/m4Vbrq1Zgq9zYA8B7ygrGHlgyntCdFY2hvIFRlc3QgKGRl
-bW8ga2V5KSA8ZWNob0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOkfwMLCgMDFQMC
-AxYCAQIXgAAKCRAxjB+u+u9tG2cDAKCzaFoiAm79QSmYISeiM7XMKhoHDACaA8CU
-1j8+20C7rNipOHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkpiFUEExECABUFAjbjuAAD
-CwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRsg3QCeOMf0g3znbc8IBiTrIPUgUz9p
-3WoAoJ6eRZTZk7z+hTyx4JDceReQbYlGtBJFY2hlbG9uIChkZW1vIGtleSmIVQQT
-EQIAFQUCNuO4HwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG16mAJ46lQbmtWRZ
-UldQtp4ZnOptP7ZJtQCfceYMZfMAnqUKJiHk2tMhvwDvAh2dAaUENuOR/xAEALSl
-7SaNEf8mYovea5tJNEwoZx3vv6XymyXga1wDqKo2PeDrnRDbHGBb5BvWIv1J6Igk
-/wq4R+Pq989UpkcqREB+yOeluE3zPPtZBrbLySSaqiMegYiHnAAPc0TqjH7UPZa+
-fJKZTUk64BCUQN9ELkL2FKtAGQ7RNQJYvbCq4O/XAAMFBACXdO4a3ZIK5hJejhHZ
-01mkHa6Sqoc6PuedNC7tlWiLU62BljGiv/DvzcbMsnvk991AxJ3pP4ZvKr5CClqI
-G+WZa1zmtwXdmCfGJb2fbNSVD4zp16e5slPr8Cp+fvIv2/SyvwruROs+oAzSVvoM
-AzAGSk3yj5nT5oikbn+M62fC5P8EAQP7HKVodZwE5NkEJ3i6Lo0iwYcZv7GfkzxH
-BBuVK1coW7Tsa6CI42qeo2AH6zLC3Wi2fh0VRaj/gXMnO8S0FDoSNyFYBUqhViPk
-fsTE4/gEo0M1v0l87O70i0eTxO9DlfsehX+v14zSLoxHM06W9yEHU/cePDhrY+Pp
-PCkQEZm65ip7XhQAY+VSMdKf4u6G0akTTrO5iEYEGBECAAYFAjbjkf8ACgkQMYwf
-rvrvbRuPkACfZP1v+fVPYJNr5DmgYosCwEhyB4YAn2QLgRNZ9jyK1qvLvt0qbJUl
-62CXlQHOBDbjpSYRBADdWzld1lyDWDqGPSzGOsehXyTSa0pOfVTLckpJpDpErcn8
-jS8cKrXkVUowI7SlZhPRmYI+5pqGaG5FZ5VJd1TfKWihc7O+JDHoK3yamOnh6OFQ
-FPZUF1+WlAGiFXLc+WODzbgOSMy/8yXA6n0ze+v3et5n9Kzib3sDGjw5DMmiYwCg
-mUwnofqskHVv1S6tDg08mXALKKMEAIVGyf9ij3BzNb0fVYGUOLU07nqQ3RpNQPaK
-tPQpBobRknQ/ZSdzuiALcCB+Q664f1cKGA+Ogtm0L/f1xUmKRW3rT9lzMtcCy6kc
-udCI2OHm/gOcPzKqjj5onpD84fgR4BdbsehT8+urmxFiK/bFFI6eC1L5edBQcRLs
-7TF2jY3SBACdXy9yHg6iDTJhysvR7UuLWE/1s9ysirhZgPb0vyIFwHfRzM96AYIP
-pLZr/jvkrDawTxYGfGIZrj7UyGePu7RCeFRVVX55B6evNv3fAqbmwQ1GHTX7WHCN
-dAkP07yTxZ/wnZudPAzQwRkEfZ39TdccbOhHfHvbv3RNQ0VxbWtQUv8EAQO595ah
-JXcubqawgYCOwcKTNBJVjftg9mvS4BJQhejHk5xuGHGpqOBmtC1Gb3h0cm90IFRl
-c3QgKGRlbW8ga2V5KSA8Zm94dHJvdEBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOl
-JgMLCgMDFQMCAxYCAQIXgAAKCRDUv1fzc3LiQ3ctAJ9QF57VC7tHkxX6KiI9oCKE
-Uepf5ACdFSF2rDZ+XDAug7Xbh/wpdwQhVtudAaUENuOlUBAEAN9UI9jBnn0wqBdM
-fg/vVDMWekbgT8yOoM19bc3FD1mMt/DSKvpTWAYO4SxZFH59Lk7AJt94dkPM+Pwx
-k+45kFqaCIO8jU6+uvNS/4GKORYYQvqhEWdYjzMnzMMA+668/W7YVBk6goVdoejY
-j1DzO4nPw/a8SSAl8vHbKI9HUOnbAAMFA/9IIIpkE1AhpjRx8qaK/xmNFwAC+Fcv
-IwLAtBR9VGqg1U60wx9ali0Z0vbsRLDiSBkizEncQtBWRGKuIwpuwmI0zh0x772A
-24bPUIb1va+FQ9nn2xERUhGDIh+vQEkCxg6fzuZDmU4EDr5eaMc77KzjGkRUlnJ+
-urlADDkZhys9YP8EAQO595ahJXcubqawgYCOwcKTMLJiwDbUjYSnvlZhZLzfZrMp
-pGf18gON07NxKYCP0aD9geBkvS8rggtugxKhp7GrbPvsmnv8A6Fs9ZjPbauFHDC+
-IUhyG2ZxtjhGQyIrtauWktSNu1HloQPPqj4T6LMPXCd2N7ECIHSBIiswHX7I4ZhO
-/GkqZY4Rpxbpk1b/af5QjbgBiEYEGBECAAYFAjbjpVAACgkQ1L9X83Ny4kOO+QCf
-WgIpdCqnp6C84k3sRHHNhJxZkbsAnRI8ATqCRceqpbSDP7SXMakYu6rtlQHOBDbj
-ktERBAC5tQ53QHtwXMkcXm+jk3CIxnUlc+PI2ovY5YT9d9p4mIHnmgyZUQ+YrUkX
-r3BTtkGmjWXg8QhZw/tZEyq8EQWX7wud6VGRJb3mTAWvcPxNGdqtnLeR+IEXW3fd
-2eRVNpljEIMo4F1n9mJG8trqBn8oeEhN/NpLuHfobYxsCUaWPwCgpA8WwQ+MHIph
-3Hvabn/Ym7/h3iMD+gI0Apokfs3xjccuKzVKGGnK0k/XIL0YmO15ze6DNhILtEpX
-c0lwF4JfiibcqGINI3phhUgJ/jB2rPpMChyio/NHa3sXPr66nEiCHlYaecKzZ7u4
-7V5dQJJc41+IMQPNEoZNCOR2/AWj7zzQOSIaWf+qZGtwgsDnrx3A2c6sGKjlA/91
-uSlQGGoYOvYtyGmShjJCWrNu9SlcnXGV9mKbWN+uZ1+yTzd0TeIHO+ZPwHIhlwyi
-oMQeKX3kuYmnerDXJV4Ck/9lZH7ReIEsQX0aFwA5zmKEfYAJJctaJFenIyYrb96t
-O9NfdCQByqhDVwVYLA00KuWDJwHzgd2bkZd1qOntwP8EAQMzOMJjiSv9DeOHKJqc
-uHe89G2I204zUEBdWXIIWswBYzjC93U29DM6tCdHb2xmIFRlc3QgKGRlbW8ga2V5
-KSA8Z29sZkBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOS0QMLCgMDFQMCAxYCAQIX
-gAAKCRAWhBCkj8KC5iLjAKCZdUQInKOR+kkkFN0bMKOFSrg3+wCfcKC7DVHitfTf
-3V7WkBS7Izg6wWedAaUENuOS/BAEALbBqf1JwNcuAKo3sJZJEzkHry8Lc8Jt6Ziy
-45dmN03xp/DYtIfFndu5Fd9jFGck2jWmbg8aQxDtmlCKRllUJlr5aghVdhdGdgCP
-EeG8dbQtpA++fIVL0fktoZ/ZSuxNZUD7r3nNixJpfrr1cVv1ZuIgwYHjJSJc+9DB
-QvS1J36TAAMFA/wLewpaOw+HTZONwTL4UPFYCfiDct+w4/Dx19rAmWf7SH0sDSFN
-5tsoEla3k5QyqONOr+kJnn7P5vXR/ZbARP/EC+NBJN0mOsVf0M01TeOEIJ6USlqX
-2jGxs1iVV3nM5TZE3iGWaP54Q5vmjLnDLv3uxCmxuuAZ60JOy8+i0im9sf8EAQMz
-OMJjiSv9DeOHKJqcuHe88M29HoyPcFtrcllVBMqQ95IHdcEmBDyyzOdky/GU10Y+
-XpI6WkFg9yZS6ja7r19L4tTOrEzS6eMsL9ZFE9avlALKDeQkVelnkNyx1dQ+KR9p
-EPhda5U9NK1y7s0LdhG35A3TLiZ1p1kyNIDAzIeD+ipkcXoegr9MDllNUc2VpuP7
-M2nJiEYEGBECAAYFAjbjkv0ACgkQFoQQpI/CguZK5QCdFyMPKuMhs4IORB8Kuk+9
-uqIehAwAoJhITUNWoGT5GVVSnxG4+aC/MgoLlQHOBDbjpdoRBACnji9qSHWfs0LX
-ocXS/Zf7gwRUk7jfay2/A4C4sPGfY/FOQhB/zN/Fsx9ZxyipWSoxlWWIsoUXwBvN
-8Lx50/N5avgHdJYGmU0eM+p63eVYjpRz5X6qOET2T8z3vrhexHw5e/drCXq1xgGr
-C6LJip8SgMiclY4e3mXI00v4VITvcwCg1cixyf4EJTGJPLxOV2C+z8OHdvMD/1bC
-lZI5cbF6XKwkCKCng14CjVb/S/tD3m7Kc69ljmofIgTdUDpG7XsSCgm2/Zpr4hJy
-VNBRceTCMOJoqb2OBKQmh9zHBsCaQs1pncyA/GeqCElMirLj+z145gEm6IFeiKst
-pv9kQ7X2yJW8KLX24jk/U69yD2x/rRwGQcjEcr8SA/0TfdFjj0qTg8a/QB/W7Zni
-Q9AXzbffddevqncL1q06H3G5AYM7wd+Lyyw2jClSMop8c9pWMgu2kqQN7s42b6D7
-z60CRSxNHcew0pFE7Vm0BgckWm6cq12HSmc7BVy2/i0k1sBd7EC2sdAuHGE+ziz5
-cYw1avwNI4M7WmVVmt+yGP8EAQOGra5cBw9i1UFlvGlJ9eyL42cZ6dmeRJuqta7M
-7bO5va1wr/nylBRftClIb3RlbCBUZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1w
-bGUubmV0PohVBBMRAgAVBQI246XaAwsKAwMVAwIDFgIBAheAAAoJEBPbllU0xuPx
-7NQAnRTmLEOKTUnU/YK3YZjjVyl4FUc5AKCJm5Qv4sEbYt/8mfC43NLRHOB0z50B
-pQQ246YdEAQAzpO6UuCWWpP9up5GVhLPoSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41
-PjaGl6Pkh5lj2qkSUBa892SXyQMYqMqEq/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7
-jznGQlMsltx7qamoVNP0XF+ws1wHLjyQl3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61
-qQLRXsSFr7LMBnaUSR0o6+4/HCdh8t+mnAeQBDAkne5DTPiwqzqsjoYekX6JK7wk
-+mbsJTd/Zw55Jkq9xVm6nEUo/JIbN7cPlMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mG
-ZZiBfy9yTcxUfo5qTg0ffWy40CNHaVKk+iIcktGz/wQBA4atrlwHD2LVQWW8aUn1
-7IvgBwLos11Jv+dIDqgz5/fwL4EJz88YHle9TmlM1Cr2RFSAuwPHjW5i16KDNynO
-qaWlTstZegVTXBwPogHRDpxi/XuOjQC8Bc/gx67drpmNm2p77epGMlqgoZ6er55P
-DuAg/Lnyp0OHN830rpevbrlAPpeHuWRvFeclKIpEz+5G+/+z0jKIRgQYEQIABgUC
-NuOmHQAKCRAT25ZVNMbj8SZoAJ488ZCSBKz8PYif1pS7+ILz2PyISwCfVke9uQJi
-IzxHvGKoTX8eW/lWvQqVAc4ENuOUsREEAMhuJkVEGWoIw4JdMQJ2kmywkOcCamKv
-7J8ApfiGw5V3KB6l0DTvUCazysCkAFL9zb5O5qmVp3zD6LJCzgEq7Op5Ar9haPQM
-OrJjYszuolu8V3qcL8Y4aOIS5xNNKBjwg4VJwFNOSztqUwaMcB1bNKOr7WmlYl5N
-LOnThQqFXX/TAKC44hpSv9wxVqFK6iIrhN2i34JHXQQAq6dbJydQbYhoZio7ewJ+
-kKHOS1Z1ONSf0RIkCMorVBQLz1/n4qsw8hN1Q/Kl/770y6YGQmL7xHQZUnzPCHAp
-9f0IeGsPSR87rykIPFnJb50PM6v+0VfSe4f2kvyiIQySKRoYumH4343Uiny2GH69
-0uE1SvcQ9GWtwB+/5a06lvID/36SlrvHycifZKh8mKyP4+MpLeUCgY97R46gr+xU
-G+BWPLcZzd3y8wbb2v7ZZEikbC6G4sY2VBhfrkEdXUwr9ONi8WemhFKq1MrcalHN
-OaQkgLxGVfG19h/+frpUsHcShM7NYdjb0kwImeeM8yhoxzZhIrXQGjw//bucXQIq
-jxcR/wQBAwmIVrocZ3iWL9mYXF6ltdajZSzt7R3+EFj2DmfW0QoZtFM1uQkYpPG0
-KUluZGlhIFRlc3QgKGRlbW8ga2V5KSA8aW5kaWFAZXhhbXBsZS5uZXQ+iFUEExEC
-ABUFAjbjlLEDCwoDAxUDAgMWAgECF4AACgkQH+j8bwQllndaWACeJb8gwlf5faF5
-CTszXhi9w3+bvO4An1puRe2LCIYvj0ewVWnxVAbFk8PrnQGlBDbjlRIQBACDDIJP
-3vJbFfyhJHeP4zSuMhY+YsvxWqJ/NNCNxlMxE7kANgE94HrUfhrleKW2VhP/NG/Y
-ZzVudFCRoj9fkl31bWOb0/Kf4DRcJ+XdDv6at26YBUSZqGsE88fEhQ8AlTxxHMDh
-xNo+S73670QTsilN9ra/e+q4vlKMLdPvdi7gOwADBQP9GKPXQ6oY0dlKDXGHxGcF
-oUR2miXpz9890G84yZAEm+R/OMQkxKb9HahLVUyVKCKPC4eVY24gsKJOEDy1Um0B
-Xh6kym+zfej43r5GdQqOjqywjTnD0b18YAsEhm7rizJECRLrZ1y7tAziqrmPeCl1
-4e/S2u5U4I0XhP9Vs24HNfr/BAEDCYhWuhxneJYv2ZhcXqW11qA65iKv4k3bInmf
-WEWAPqyeDgbW9rI6ldi+lmDTqnNqg0o/UAyESfMog8rAP+GIrq/lDQakbSUBq6Ho
-A1xuPjR7LnZ1cxl2kLIBKgI2fT2RLbKxH/A/PTXmdN8kBZAF0N5/mgn+vY5mrv2H
-9mAF+w/G65MYEKdzwlHDoBr/BD6Pa/gHkYhGBBgRAgAGBQI245USAAoJEB/o/G8E
-JZZ3CXgAmgKk+ky+Dd4BtpS0Dc1eoDHf6d3YAJ9v9phIBW9wpKK1sHVvvsH/2E4X
-tJUBzgQ246f/EQQAl65ub9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WF
-tsAy9XUeC3WbrcuWFgTsbtTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe
-16wXZFl0pEc2iUnx9ThtoQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo
-5w0YxgJ9jkj7J4cmR+OFUEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DW
-G3D+IBFOt4qqxxp3WCSNO5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQB
-q0uKwhMaWficdrQS9syXFlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI
-91kZXAP+PINfoJ8hV2zvlGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdW
-i8Fz0Vy7sI4S+RMJ96rMws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNC
-LXFGGaQn5ncO1tqKnWSDf625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+
-rX7E/usFH0MyFQczfHWCg6VkC9TYfdLwbBVtdcq/lugvQLQrSnVsaWV0IFRlc3Qg
-KGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246f/AwsK
-AwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcXYBl7cLVDPp1J
-AJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfTiZH/CkfV8tnh
-I6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7MdHAz4RKFnAA
-XPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyPTIU5vq6FLmsW
-mMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJgag14bTaBw0n
-iZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CNQBBO47VUi0y1
-UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+aonKzj5QEo1Xi
-iMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0dr9Ej9Ccl8GT/
-tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1nuXV+mW/xLMM1
-GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjGy/lFtOkcdJOo
-v7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmTE4+uAJ4+Jbld
-pmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGVAc4ENuOVJREE
-AJynQGiC6MydOFemfhSMEBGP2heBBaySSHPrnsBe7pGZf+7lGaksaps2Y26ooMjB
-RsmyUjGuk6cDdAShuQiXtOEf5lQiEbM9SceWF3szd1BbDVTRN+kfJfHcVhvsII9p
-utILuFZaHXKVTHP5EYklIClH4P8Zj50Xt0iWUpRtpQZvAKDXP6+Q1vOqJtzB1ivA
-KMob1V4VrwP8DnI8eoH00yn7c6UAYThdFNHwt56UAum74y40wYUIwt1l+a38CajJ
-q7nUWxDtbBas0zkD7W/cWrTHlak3Douvsds313rOJ034vS4Ktc/B4RPy55LcMWcc
-j3jl6l7vTdNtyMkE7+5gufQtcTGZODzjr/VmVBs+AvObNv/YkyQn5DMD/jEVtEvZ
-h5orK7gmOkw1RXNdiiBTCD0plmr+oFumwgAPsCB35nEskejB4i1doLSdL0LqoMln
-3k4msT6H9O3YPaWbFex5NWVIRJpaHjnH2ZsLR5EYVhhGxLHfPSFjAyZcDSe2PSWd
-0Lyu7weNm0Fb8oXRUHRFx9LJb5b7ICrQnGjm/wQBA3NCmZyGwaocX3hYb9Uj7Whi
-UDisj8phP8MH7MdcGq4iXYpmhRF5vJu0J0tpbG8gVGVzdCAoZGVtbyBrZXkpIDxr
-aWxvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheAAAoJ
-EK0bD61DwtDH1RIAniwQsiPwhnGW+TCqaYQxe2bWQiFCAJ9kSky1OmRFtP6sQcyy
-x6LvYkmL450BpQQ245VIEAQAuZli0/vYbs6h1HhF9HbvRHFMePjQ99Sk8h/dTx7P
-I7eSqMHXYh0PZghchlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2ycH8ftUcGRo5CdES
-giceziF6Vg4PQz9FlxtEhvrl7q8R6y7O+j03QAJKUGwBdt540oZ8YYKiDvgZUZxn
-oecAAwcD/1b2fYzAnuWrQZXhXQQ4cNVxMBVFKHScH24oFVbuEWLgM/tdgF+CPw2V
-tzba8ySR1K80VSgsQfs6n2wyCVd+II8lKHTZT/pfICFcPJlHKs4ge+JNn1IcxBAi
-q0QRNW5hGTO9KdJ8MFWrWn2Bbp5k32roAzuCagoielFo4MVFZTsN/wQBA3NCmZyG
-waocX3hYb9Uj7WhhNmbxLh2adi8RjvsHqFo8xA3mcKO5up8cYYgwnFFEb8gfNerS
-02Lh+6ygsgu1VtSC1r73i7OCeytQmplt+bCsh33pTnacbzZkyEulfjWVn90tmi4K
-v+Mw7S68X5ZgyM7Th98F9yc2R5C/SntYMfTNlmO4nRqhTAEz3HFTeVhODOVpmLyI
-RgQYEQIABgUCNuOVSAAKCRCtGw+tQ8LQx479AJ41i0UNeuvbU1mUu7Q58B6U8Ezn
-UACgqCWi5kbR/j2yb20eDUZz+fCPPOGVAc4ENuOo3REEAMFaZuaYHLD67UlMCLHG
-Pk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacPiQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35v
-kTx0K1m69Ave9LnXIZ70zvpVEL/UeCuITRiocxNglPgn4dyJ+2V0cWJ36NGcZmkv
-BW0vGItpYCbpIGLzYVOfiVUbAKC2Nze79Iyw+DKU9HI39B4fz85nkwP9HbIb9z5k
-XiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/rIX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqq
-TUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjMLhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQ
-Z6qzS6YiYnqzSt5LcolL2+Ae0ajXUizic/UD/0TNXtCRfkS4SeVSkZXarb1oZjHd
-Glw6ENiLGiA0e5b4r0rByW4EQQGZPvg3DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGS
-C/wSqPkMiKSCenRqwHwWIdKxv7f13hyeTZXR7P8uaSddSXaakqmT99v6pdZOo8Ns
-VQTx3PzPKpEVciPB/wQBA3B94sZ4BXVUUYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5
-PkcxqfpPpGu0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0
-PohVBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAAAoJEDfKtR+3kQP4ilwAn2q9
-qdnkpFPi1neWFi0OEOr5le7lAJ40e+wQHgKIE+Fn7sjYQ0Liwn7oip0BpQQ246j1
-EAQAp/Ccn5EzxXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVE
-bw7+lfyhKnDD0TSwIAHj/xeE+jraCTU8X1iwe49eAyTaWF4wTyTzdZKQ9mrfBnFg
-dWlRjLALcTMJaOE2Zasn8wgAEHgi4QWyBPS1il+aFE6oizsAAwYD/RpvJnfv8Vqf
-bCxOYt7meLfTLrvcPlGNynv1nEgNgjbYRGIRzbXDDz+jwcLc9MeNuZgtaXvUbsQ8
-s0X1dP6vq43VmQTQPlU1TQx10o+YYn73ptyhbwOkyIDGmyf6uFhO0+B5/MY0KRLC
-xo0lwMxvVkYNd6k804pSJPqwusWBm2R0/wQBA3B94sZ4BXVUUYZFifR1y3VOfk4w
-3PRZvIRE/y8bsqADpUHOrpzhg45mVJx0XUD9jUsufCzZg7wHdE3KlnZW2cJ+HHoh
-up28Ie38bbaUVgfofuur31BiAVojpu8KhTncGAMb64oNfdRJapHzzBcuUigQ9ETt
-6OPgUE/thuHws+GpxQe8KhGQcVfJwuRernhyJhW+BEeIRgQYEQIABgUCNuOo9gAK
-CRA3yrUft5ED+PJaAKCkicGM/NGxdTvpyHhtVSSkTRV/6gCgsnKOr6ziNIo/Bbdf
-RfYDd1dL4lOVAc4ENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t
-k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+
-Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV
-n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU
-p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg
-SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT
-Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn
-4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL
-b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQ/wQB
-A5YOFNcg/BY3BMnzmbEa9r4DVqdF0faqHCAPM1GU/o1rZ++VSNJruLO0J01pa2Ug
-VGVzdCAoZGVtbyBrZXkpIDxtaWtlQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246pk
-AwsKAwMVAwIDFgIBAheAAAoJEL55SFK+XPiG8SMAmQEeRej4CyoP+wmpdhNm+c9f
-amN9AJ9nKsCqRWJ/ufezi0YqAcbgbaNQ5rQSTWFsbG9yeSAoZGVtbyBrZXkpiFUE
-ExECABUFAjbjt7cDCwoDAxUDAgMWAgECF4AACgkQvnlIUr5c+IaZ1QCgqGtz7Pnb
-id5+UylHAn40bwpXE7EAmwVmqbtsG1iWWt1xOo2oyTj0t8E5nQGlBDbjqn4QBACm
-e9aNjmsy/D0vLzEUvj2kaMBgVv3MWKO+Abi0yKsjdP0QEt+UosnybgpahGhPZ42b
-L8kYsfJmO95pWHxN6sNX67FmQQa+/vTafPw04SVBOMdYejLSfqmhyLoXGF8l3Vuc
-6MMraZkS58RA1KfY+EDjqCMItFMA+7AumK1JIvm5uwADBgP+KP0pE7r38nHf5b0N
-lDFYhAGIqdgdWvW6zZal2lNXiOkKok4I6AH+GUGYJjULX+2mwCPUDdllqYlFZVmg
-2iSRF4i1ktd8ZpymsZuaaNyDz2AUzlXecRQ0JT+abYFBannyHg04K/rR0avkYCoc
-PEBK0+TfzzNvER3IWznsI9Dhkm3/BAEDlg4U1yD8FjcEyfOZsRr2vgAw2DSsek1W
-QcJVSrTcrl4DmC6JoYKNZxcZxkz+azXGMzU6P/gruBQX4ldaWq8ObvjrdF+g032G
-Xju9Olh9Wx82E+lc4O2K5kwNe0fveQQG7vFrmajyXnIB4myEx8jSGNcEUcl/6pMm
-wjzIOMcU1lPVYNkZU8cFQpZHJ2dY0OO9MXpawIhGBBgRAgAGBQI246p+AAoJEL55
-SFK+XPiGkTIAnj6CpWQaP+vvx+HhzcjTcL/VKlZQAJ9Nk+d40+pCqkNEZDcV/xO6
-vXHbbZUBzgQ246rjEQQArXimh2e6XDO0Lo/BHPEsdHyd7tDXS7KOcZ/RJOBVjCwb
-uo8O2/+SowdlrVzmUlihzs3k31AMe/TTCiaw/Y2Vv9JBABVXmacGRdZfHwbERC0f
-XMQGoxN0bxZIAmAIV7BdSZ6PqolOUzb2nRlOEs5j+Lzp546yFk8vN5rWYsKBSHMA
-oIGmmgpRPEONTciH1bY0t3/jZvMdA/4nB/bsDN76QdkFdvSCAams4Gha+7waKIBa
-AJZWgkGzy4sh19TJN5BGYOcXsJg0v7VOKxqo+1HC/TpWcdSAg/HKfNMjWH6COyuV
-zOrGDjJnyTkRjhLKjLaGG6N5Zbg4A5INug2Tcp1HhR2UayFs9nCqk7mgd3cNPZvL
-CTbrN6aBLQP/UNSg7Iyj4vPtpFMyaCt1etUIJVwFQ5X8yugeSjhGehkf4F/TObss
-i40RMmxUkjT5by0ddfpleBkeQHK1UDphNEKRcqNTK/rg7G6sJMxEb0ata+aTsqjO
-Vj14ZV2uaKOJ2tXwRF++iBMyusSFRtOxpzZ2mPnZT4LC6uCPPgNtGRv/BAEDsc7Y
-SdD9O4gyqEDz+24vfhBH5b1jnJJ9MOulZipNjfbpG+Tocn1wYbQvTm92ZW1iZXIg
-VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC
-NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ96+gRNnRtFX68Wbsix
-2VqHsXeLugCfVbbEonL55bC9BBQ89XY+6AFNSgGdAaUENuOrHBAEAOGceVg3PC6F
-tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap
-r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7
-JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe
-52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE
-VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW
-vrlUyIYOTm2RcTxkf/8EAQOxzthJ0P07iDKoQPP7bi9+FNgB92LCXMeilHSPeArG
-JblD4lyK8pp+jwjSCaWJrWQO/OJJOzhTh6Betn6H6C6bapoEaQ8TuKbHEnOMUfax
-tx/yzDtWu4EWGMyG9sSPjXRr/lChDsi5OMcYnrxK3foQYMEHBMb1fIqqtRZmqWPc
-FixNLKLjBalB2cMRuYaY8o2V3ZyKiEYEGBECAAYFAjbjqxwACgkQJbAP1DDOxoQg
-5wCfbgzOK8WkgR8iruUOQagMIqwMr6gAn1iBQ2TJM5znLHzYgLX+D0k5IG/plQHO
-BDbjq1sRBACVaJ7JCEOyjZmcPbBv6CrpqqTWtFSFzB0HAJNuITVosCye4yXycsfh
-++FpPPZX8B6OgvTR7bx24Dmiv0mIF+ZVuWulMAgZay7QBTq4RCxaBnBF2yjc0f8p
-8fxnmXHAm2Rn+GUCIQeiGYagPfyYk2yCebrdFdp1QfvqKs7oxy9aVwCg414fuLbk
-BysyiXg7sFnCoarbmJsD/0hGErsAWF+BpGsNPPzg9oiyzGnV1YpqVGu4wlgZArYs
-O4SXndD53WudgE+WI9uNav/0aSPHcrgHQJ9ZZALSxSXvts1EWqvwVeSNFly+QKjH
-Ecbs8gUbvust3ZKJD55L52nlCKO64wLyySS9C67FLp4iTSD6OMaU2GO673thrrF5
-A/9nF6Tfunw/W71NOY3uc+2XMZcat8pWL0O0nfUTzTmu5cWpO6gV9w4FGu19j4M5
-5tfxHEjBBX9MSbLHChd2aS/TcRjAPoAlKbHda5WLn+t69wf2d9IQcPLuwULwIGnh
-pq8AVFA2uGiZIH2VKblyUYtmIPieWMXUQUAHBAVyHseGU/8EAQMb786noBSUDw4m
-7xGDnWduktairbapLv/ColtFylU7mo8tzwPJ9N6MtClPc2NhciBUZXN0IChkZW1v
-IGtleSkgPG9zY2FyQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246tbAwsKAwMVAwID
-FgIBAheAAAoJEF9jVrptlzKssC8An32a3EYMFU3dvYtqymOZk1G6qdElAJ9XrILy
-cL0GM22u75KkQfVlZReszp0BpQQ246uOEAQAnQtV0TzPQjBa4FVL4qFO0koX3y54
-4FgWd4amzmK7ILV37kHb+pQIsZzT3Z5P5OJoy/MNaam41Jn5m6aVQ8c7IolEJSWr
-cxg31NYA3O5LJ16Rf784IW7nMvBzTtEh4t7jPxlwue+ImdaMWvwNeHypwlWE9U4a
-lGtbrAuWEFx5uCMAAwUD/3+C2YDd3Wy+Iy6lxwzaQCBI4k2yl8QyhzpwKH//+EhN
-JqWjVRy7t58SOewrV30iNpDEEpv96aqUys2gZTPwmzACVGp4ZpSzwEQ3Cf4UHA7Q
-bBeZxRu83y33tEgcILDNR8S/evFb2u1rG2KUmvfPtx0g7svVcKYRae4uB25wm0iu
-/wQBAxvvzqegFJQPDibvEYOdZ26Rt9GjNyo0jdE5rAxUvk0VBw7TW+V6uxtqp+fK
-rP3W/ewR4mUXo1jq29kicdAtO/nI0uEWiMuascrL4lCWWcrEK2n4AX7KbzJ9W3HD
-upQhHHwYga7LFg+ZAc+6m9k+cn6M8SycsbQt90IMqon/jpYnSialNZilcMpFfYCn
-qBDTVKpBReiIRgQYEQIABgUCNuOrjgAKCRBfY1a6bZcyrA3hAKCPwFgK2ukTx/0R
-6o/BN6HFJh7Y+ACeIB2LqEi2uOknmyef7JveVqldPTyVAc4ENuOsQxEEAIQRmJhs
-JniNi/bRff/YGrZ9aFWt81G93W8WhV51qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X
-15FesVBPYIQa5BIC10mAsLfJ+1rbnGJPuNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDR
-nBzuaMCPdsirveu+JBw53ytRwjwe7m/D1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE
-0wP7BimQxXyPwSzGqLaHXSEBsh84OQTxPI98BXgq0195/A1B1/pPs356euKlqoef
-UTHYhbjiMYbjZT+A6juudf7A2Ucy03G8HDZ4k1f1vmzrj24+6ygGBcxTVr0Bawei
-C1DwG3LjQoJ1cuFxRQ8BYJDGIwPrUW5JdlnzW2bJWfdyXOoD/0S7iEVN9txkSKil
-dOeP1YcDCD8MM3hvF9kUc+1hbmir8SOZ/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2
-jWCTqldOD/ZYxHVJAARnkiVG6yckMLsxHi2LPPBK8xack0y92mKe7za/7fhVgCRS
-s7M/rzUbzUhyInHSyxr2SYb+8lbu/wQBA3vncg3S/0EKhZRFb/E5MzbPjleeF5fQ
-n4SvP7U30kDoHyI3LH6KymC0J1BhcGEgdGVzdCAoZGVtbyBrZXkpIDxwYXBhQGV4
-YW1wbGUubmV0PohVBBMRAgAVBQI246xEAwsKAwMVAwIDFgIBAheAAAoJEF0V4B0/
-8TIG4YwAn2L7BGoJE1q7g/ePfsIhAc0nacGKAJ4iBZV69HtWtOryudH1sG7zEoaR
-KZ0BpQQ246xxEAQA3mE758SGpbalfvWhJSpb9NEdZJvJs1zlutDW3OBNuF4eIb8t
-AnWUeO1mhlCzJbcf958S40BHCvKjgiO8rSeaJCyplRHXv3ldMhuj/Bo83TxC6MLb
-q5ZsvWlgvnJBqvBso6jICy3iOATU2llVz+vX5ZSns24RqmJxWO8U3OSJUIsAAwYE
-AJZAliv6HSjOvslD8Gojy9Mq5Vdv4MgFCO5LM3su9qIioypv1l1802ZnUC2+SWjY
-J7ZUzKWJDNVJNm4clBt+sNMFcF/5D4Ag2Id1kQCh3MG8O/qnu+xOeg/4DZtLyXrG
-tY5sq3crL34ZQOSpbda5qBxQqiBCARv8Up5z4Z6DBKBR/wQBA3vncg3S/0EKhZRF
-b/E5MzbLEL6CTR0ywkrjR5f4P+KFRNbVixP74rOGEYga1Uy8PrUOMDBIjbtKVWQy
-6ly4hnMv7ZPtIZSJFpeofg7k/kTNJB0W0BcJhWfg5CbiWncJYH+IZT6+/0aJfmhe
-y7gMlkoXOqH7y1MlLXHLriVzNOpapAK4Q7vwzzfRL8kXP8zC+u1noiuIRgQYEQIA
-BgUCNuOscgAKCRBdFeAdP/EyBhuTAJ4zaeXrBSUA3s0m0MV04WJxDDGwWgCeKwYd
-KMH/CO2Eaetd28XWxnxJHO6VAc4ENuOs0REEAIHCI/xKPD6yIRGsSnI3PXTW/f9A
-WdwcQZO8fWuxypuqNP73Hyx9lxYxcQeA3X3vjtTwvSjVKiIuhk2nxm8qkuO17Jzi
-bOZ77K4JlaVFMwHe6dHcXHNrSaHcIZB+BrTj+IuD/Vwa8Z4EK1kNI7t99xDxesC1
-ou6pFchhDQn7L5LTAKCmIDPl2IfVEHu/x19Bogp5NxMVZwP+K8gcXcgYoY9NourP
-LwHuZpU68L/OboKLkgfeVxF/Bj372liFv06VFkOmu6PGM1P5CD2u2MxE2F/HvxVa
-9mXd9xwH3i1DadzktDbxG2CZRg31u/1+6i1b9aOVgowh1ISvAwn/QMfW+M+wm0R6
-bcUhOFO/TQgjrF0LDm1dvKpRrBUD/iCGgoe3U6gA8P5wZn7l8XqTyl0ul3YtLaO/
-S30La/k1LSThFRiG6qkAbIBEhYk+akdFu6oTp5eO0yEMj0J7f1ffeEMMgBrSILTO
-amBUVu9INRZMg0V+ez80zLlNgY1SOph5GlJC2i7o20V4kBZvCFyeK39vexqaSrko
-LzXK+0Zq/wQBA0GK22cdg+tRJk3gYcN/JjZjdGbyparZK4zFc6L9X+dZtsC9gBVh
-D2i0K1F1ZWJlYyBUZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6I
-VQQTEQIAFQUCNuOs0QMLCgMDFQMCAxYCAQIXgAAKCRAcZ+wTPGYchNG4AKCjSqAG
-ZAKs7NstyNXe0qmxdjqhgACfUIFuQ0RAvRxngnEfGZJiTL7vHBmdAaUENuOs5BAE
-AJGi4T/jrY5BtRTM0psAneQytzzFgH4+LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9
-pMWAdOjWgSKbYyrzra0SQ75/SkI5+/S5ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMun
-qPJ9JCUXc88WxGvKV5b45htqCPnV2Pgq+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQH
-RdThl4HUxQw4lgYN7stgGZsbHCc0y6ln1HF9vlE4Tl6HI/NR/8OauQrXt8988dh0
-39QNZsOdAeRWTk4PgSuXq6VDG5WNw6B9bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ
-68vKJ2JihxPHRAyfxwGr2JKkVF0S+f8EAQNBittnHYPrUSZN4GHDfyY2YCjm88Cd
-mfBmhTozr+i8fBZaKPsQQkAz4Ybhdf+dCkGOyQjOvI9qUX4wNF1n9/2af6a9A9TJ
-NYGpdQ3AQUyyH1AXIfYLeZhAKR8oHgP3r5L4DDGmyAG/I47Ziko9nyyRjEkT5B17
-n0HedUtHH0+v6vtjNc4OA0XtbY0SCvuFMpLRF9guiEYEGBECAAYFAjbjrOQACgkQ
-HGfsEzxmHISIlwCfZ8SYKvVQnWcUbLR4pdAC/SDm0XwAnAqTsdVw9qkF0c5EwGns
-st/qiAqalQHOBDbjrjgRBACU0OjVoC32Kh/dUjXPdN6HIusEhHheYpFIzYHHTYJm
-FBEjBj9CwrpYGjGUmp+BS2wFS59zO2MlpQGLGrmo+YGBdio338Hwdm8baeScd2Ko
-qu+oWkCoBMm2VxxbS3M8kq0ppNu2Q5EEO/qGywVrVpfBM3siM3mcsjVaHyWy+T1I
-qwCg/lnggNIr+Yz2HoU9GwCwBi9331kD/jRTBAuXTq7vAG2bGpJ0X/zqSMLSRZfw
-nZj28hx6I0SIT0yZU1xggrAgzSbB24XnQSSxWMR2BZQmupPdHO0l8xPn5KCbYo4C
-+9+ZsprxEXg09KtVcMOsV6qTq40NPSOdRRNAVhOOTg/GD0qX5r9ztB57qpefmp4N
-fy5tmo3SehfRA/9jkdKCLrZRsE/kH57kGoT5kt4nvJW2X3T03BMKvspVm3WjdlrR
-0Ji0yiw9P05sCMJqeFKe4RZreG6i606CitZpRIRbpjfMEq838zgUDv7VGF7zqCed
-Yu36sepfkzxj/slNyu6A21HTgMWxiBrkDXoIuxMPFKYzZGC+nCHXgW2uof8EAQOP
-MKazZfwtUoJ7eB74i789uCp+H+yM1KROCEcmSW/T7ago8wfbaRdCtClSb21lbyBU
-ZXN0IChkZW1vIGtleSkgPHJvbWVvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI24644
-AwsKAwMVAwIDFgIBAheAAAoJEDvb7bF3f77Tq+AAn10WjJmAMcn1pBFwE28eIqtU
-z5bsAKCoNi7oa/HFVQZRypKR7SChjez90p0BpQQ2465mEAQAiea3rOLV0WY9+rOz
-+CmVlH9GAvJrS8cXjRF3uXJALZ/IDH3EkCeDHouDtRAb6ymfQ89vBJr9BZg3eug1
-HeMm0SJNTzfJFq8vVLhiwH/1QQJDCMl4WAhJwe8EbDY+JBeQ4WIsrXqdsHpD6HGT
-thgFKCMmNsjDW9ptoNivFJytkAcAAwUD/iMYod6PvvotNl8IuMDnu2q6NsUngZh/
-W/JxGifL/EVS0TtAIKEeBi8ynkzn7+exVOPLZWO7MbYehTsXiWkJEtZw9S0aW9xl
-A2a+6jP8jhmKdFoXUYBlvnNHmGt9oOWo6ts59/h9S+Mq5kUmTOJ5meWV3vYo5BrN
-FDWKpotIAWMa/wQBA48wprNl/C1Sgnt4HviLvz27SydCgapMV/zUfdQL64nYYQj/
-00crVG3e1cAN2iOPRNsjnczkYXjFfSxTxoVvQEOvScRoOF1LQ6doAGGSJmSkyIGZ
-wxb4VLD8GhqmCX30XxOcTRG6EiLq9+kDGL5gAnBUTviRF6Tc+y9N79L+nxc4lawj
-36d0ZXeIG2fm8RycxA2E4ICIRgQYEQIABgUCNuOuZgAKCRA72+2xd3++00nRAKCQ
-vRyQt5pNoWbpj8btfqGK00jpOACgjSITGzCNURjHPCPEBAPqgOVDh4CVAc4ENuOv
-BBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ67rKzBkicjelpwWk6LndsCrbLsIWsDf8
-fNtih0r9As+2arfApkNlwuCGq1ZlPGGGEf18OqPxFvnghVEbDdcosP4bIm3k6G2s
-gFbMl68xAGnTtkS5Gfz43uTuznPzdZnGbIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud
-9lx1bWM9KqUtAwQAiRYHm605RZVBkdzlfYx1Iwgn/l8Chq3MsPrfBMslapBnq1an
-2/nEQPmuIde9C6ALN1t03DHpKonx2XgjYVz8pgty2FU7txSSm2EE+975dXp3ov4T
-fD1KxksOl770PAzixLfNhPW1q4A2cEruGgO74qEX3/fAa1J0nRKDgmA/mgYD/2TS
-ZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePc
-ti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZCB6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6
-DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmAYmo4xn7Y/wQBAw1YC6sO6OK1YqygeAug
-0cwEFM97WACPFwv/yo59kPUn2OPV90GqWcO0K1NpZXJyYSBUZXN0IChkZW1vIGtl
-eSkgPHNpZXJyYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOvBAMLCgMDFQMCAxYC
-AQIXgAAKCRCl5n9/o64+oa9/AKCaJbj4sc17CLwMOuvFVejk4mwUQQCfcrpQGZox
-97B60MgQRs/wklSEVWedAaUENuOvgBAEALhxyR0+JaBA2Qa8CberwXHNEuiDrz+N
-9++Pwy+375dDg2KQ7RUnx7NiRV368be/lGgdMhLKeYxZlmNPnpoUNINk86RCzYbS
-pmAASBOnMJQF2WdQLxmsdJNJCMKfse1HZylgIJQGWI+1q0O9Lcx7Vd1F8GFeJvTh
-MHRyLoOvMVCTAAMFBACN7RHUg2b0aRkoDNMQKL6VV6LvBteSfgkXqf2vUovmhQtU
-XxoYc0QnVPCPuS6raRpxiNz8OLgp0RJFNk32zOVmc2u68B30kociBt7Kx6d7fJGH
-L5gVqpebUy1YJ3DBoOIOgcMBKmXnlG24IrHPq5bvuqGtnwToZEOuEj3ZHzwNuf8E
-AQMNWAurDujitWKsoHgLoNHMAI9CpJsg3p5r1/2dTbN+h0CJ+lqHoo70wkoAb+ga
-M+7jq/FWce/7mNExPIYobdgkvZ2rbKJPx8o0zJqu77IkMLTb/eh8z+dEaC9X0S/u
-YgN6AUJl/DsEU+XwOd+JY8Es0wJda+M0qvSGaH6+kTYy4pO5QD1BrfdPTOVNxcFn
-a7HAItZPiEYEGBECAAYFAjbjr4EACgkQpeZ/f6OuPqEzHwCgo3fuvctqBR1zM+lG
-iitaCcoRH98AoM2iZsG2q1yiU3MebUWDxcPCiuRMlQHOBDbjsAoRBACQ4U3waYeR
-udWpRA1GiHxbw9CvqFw16gwe4Q4N7LVSKWUffXdm6P3TzrlVqK8FxQQyXitHO4iR
-EKzFipcXam0RpB/KWhUpy+V1qOMTI5J6pyc2Lt4G+9+IqBR0wuFgzNv76ExrhaS8
-Pnoq1vsJddsLrB6ZzZFsTBCFrdh6Bk3q3wCg9yVAa2nj2/IByp1xc8hLvES6d7MD
-/12gCo3vjQGHqoXAKsb9khD1I/BDILV+0g5JMg7/MLkX3DcDALeF8B2J5zN26VMF
-o9iXAxhPa7DZ2vx7hQI8/9pa4VCp3B9AssL44WLbdbfdo9HD2Wnkd6WPEf25vDbN
-tLYj+7sVZY/rMyNj3+SolB4YlhydkU1xhNqVJk+lBYXNA/47smbyDSsJG1EksKSr
-7KIteXenuFseT2dpgK0+cvlC4rQceFiiLF1elFVWhATWgXut5PXBRnTxG2vx35Un
-e+pC5nEncvha+93d0zCK5sACjFXSo0QBHN5fO2Gj3dvy3U/k1swkMN9xKLXsSe8m
-c2QNkicdu/48iIF5FrcL5+VAjP8EAQOkqTnVSVlDNyanmeWCbHT5y1XDf7flXnKw
-AlPvRhV71WMkqrgQyZSOtClUYW5nbyBUZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4
-YW1wbGUubmV0PohVBBMRAgAVBQI247AKAwsKAwMVAwIDFgIBAheAAAoJEFjLmkyF
-qB84JOIAn1w8JVmBDp+6A35ia9SqWpt52ZiiAKCIHwczU5eSjSlPSm5W8C7dlk+B
-CZ0BpQQ247CeEAQAnr0w2OcvlUX7E8u2C8dJGIj7wRU5qDazxh0tw55/ybJ3/Kyh
-CFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0b
-BhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYE
-AJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRiuw0OXQ9B656zp02G5qtDN+IXhgLdfQqg
-qyWckP4BLDJ4NtQoEM/Mr2/7oj3h01XpbU86R1QFQOXmoWw3q7yqEWIwfOBqClSF
-0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH4PrVjHoNEz4C/wQBA6SpOdVJWUM3JqeZ
-5YJsdPnICDfLPDsLTp+mSJOvz8ZkqbdjjI/q3Kptusm2FbDk07+WCtgfeKcaeJZH
-FNDb0PYRG9S22OGNlhDTmZluNPmUG5syMkoyycBX+4RTirp7LNS+VBIOHa6d1wD1
-k8lANIjD/ilD8pW0pAyqN5oJLDgGD9892G7eeE9Vy4XGRmBB6TbFMF2IRgQYEQIA
-BgUCNuOwngAKCRBYy5pMhagfOAibAKCS4dbgdlteoklBNH9XU3+trecmqgCg4u4N
-x5RLyPVJoOlZhb87WTBcW5+VAc4ENuOxqREEAN621mjyBM5OvWclduTmwl+5VJBo
-yZuAulmkyzdDsL6ABfRdf5D+9y4en7BXY2rRLi/7Dkr6zEMXgDxQN/6r4aY0owDl
-TbuGRwNC8TjwRhSCFx1YqNZ4XCaYk5vQoyhq116HiI9PiPyhwbD6LTPqj97TLQ5V
-axS8iqniJk/dSWc7AKCA6rkZ88kyrcrdw0PedTsY5Hx7UQQAxyAfT2jrwduNvCnD
-56M+4rBUVrfsI5f/rkUXw8416V6rsyvdjzIqpssiwhYNrGuV+WlvIzP9KG4N01Ty
-CH6ax/CHT5E3N0Q+akkIJUk51k7jpy52BvIBCuIfs/KxJuLsBuamcyXuRCu6EBlZ
-cu2cfV7WQqi8HjdremHzAXiSi3ID/jkDxssoSYm+mr9qZjpWMOcazGQOOPDY6hVu
-3ywt0aOmBqePd+/LkpGFZ5YsqGa2rji0f3ubhgOYYIdVr8iJzhoM8wy9Q9Z1pjkP
-IJ56tU5vck3WosLujnHYcG3xETtxec8mXlUrFzirPKzlupARhi3Z0/hwmoqTc6OM
-JuXpMn7x/wQBAwH5EiW2ICr1W3T/Rx6Cb3eG3/JG8Sjo3rpEYlaApMS+d4oM/9V8
-3kq0LVVuaWZvcm0gVGVzdCAoZGVtbyBrZXkpIDx1bmlmb3JtQGV4YW1wbGUubmV0
-PohVBBMRAgAVBQI247GpAwsKAwMVAwIDFgIBAheAAAoJEKlMD3VlMkTWM1sAn0ei
-deyWSJxrd/trrimzJpapYrQPAJ99nNzMTsSCQwsfLaq0E7kkkS7KtZ0BpQQ247HD
-EAQAtbvtPTT+OnT55+kSbXMy9yxK6Mq3D5hzpNxW4jXyfGDJxQXkk/lPvnIYv5Cs
-5vjeMvE2RPLB8Bqp5HiAbSV9mJkCRYSotkUfQLVZ9h1dWUwWE9avz+zKWUzzCPRD
-g5QhDyU71/jHbT/MYdBrI9YtcLo0DiQIl3a6rD8Xp+EnIecAAwUD/jUUTsyxauJA
-VKYKE8r1syZfehncpH/jtAIW05We4sfSrUC38Rq6s4KNIcA429kM3lh341YWmmkn
-OVFjTLiEMh0XLI/ceJ9uVxhNB1MjlUg+OiDgI32Rfm3lzmvzW2HEfs8zkX169asl
-toOKFfCzeLOLleHT2pkN5ffC5IPJYVgn/wQBAwH5EiW2ICr1W3T/Rx6Cb3eFuP+I
-vpNCP9FJtq/cHx/aNtVczSNEk2ParqkEbsZoGgIF0fZStEWeTda8b2/P8dt8E/hZ
-L8YE86A6y26jjzhIQBnThCdlxYXCI+f3rwXSdBJYBu6jvOA6Cp7VJkBGBUknV3c2
-6VN6mF0tq2xw8EdB0Z94SBwIObsUJxUXGSx6F9n/BIaIRgQYEQIABgUCNuOxwwAK
-CRCpTA91ZTJE1s6YAJ90NN6PZ4hYojIqGPHLsoXLX4ZQqwCeNI8dzekcdK9ZkqXR
-xIfFj4cQH5+VAc4ENuOzmhEEAKMDGobMDqPX3SKI3/W8m9LmNgtDUffHGHNd1npn
-GM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7nTz02IJwZRVlrbEPdW76eItMAY1NB43Lp
-jQTrAR++mVAslulUY6a5V5nJKEc0IqOuxkW1LWavujX1JRvlBZLeBkdpsVNuaGJt
-wUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O4QP/apMk2mc+GJwpKSxXBvoQkVcfuZBJ
-mXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3krMgOCR6dEsGukIsgVWRDj9to/+E6IIs6
-YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFBT7PI5TkLzlAEP1y2Rtin/Sa71unGZhNy
-EfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmbxUpenRhg/mF5rwmHl81VvVBbZCoZ35c0
-edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/7r6f4kFUrhO5atClnRyBkvmNmdfbtM5h
-d5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab63kZwXCPiSR+iEwRp42GbVL7F/b2r/wQB
-A+smNbHH+mT2ogDvwebUEYQ5u7AjqZvUWkfnZPKAVQwghkIrT1Vq21u0K1ZpY3Rv
-ciBUZXN0IChkZW1vIGtleSkgPHZpY3RvckBleGFtcGxlLm9yZz6IVQQTEQIAFQUC
-NuOzmgMLCgMDFQMCAxYCAQIXgAAKCRBHr0tpYfBHhMxJAJ91JH/X2uIsYSrKJmI/
-S1Zgwoz1/wCfdQoDeGHzNwPI5NaxIZH0XYr+O22dAaUENuOzvhAEAIeRQIHb2kyS
-94wRnI2IoiaLMXk1n9y/3VGPfX2TfEd/Q0laFCn/UbfxLEuQ8sF1ZygHiYlE2MPJ
-WzEVRe9FYUgx6TAvSrWwdJZNwnAKlCz4soq0+YPcsDduFu5NJ2liCYrLbVIfh6m5
-uoHOT8/TX3eZZfMeBIYt5ShOjc3t4FDTAAMFA/wLVDdYasFk06YVWXLR6tyWlBG/
-WoJrvznLH9uP26vYvEfBWjMAReHyOaiIpnKgDPtgWenb2RHaq1WmUfWh483IXB5m
-oiO2ZluIJpPixxRVn/cu5hvGAyhQV5GgbiacRW9RSHyaZmi8yZkWu+nS6iNwOx9h
-PHRUGvzBrGAmuDZiC/8EAQPrJjWxx/pk9qIA78Hm1BGEOtrTuBDDiXmHnTN7vG9T
-7F+vQT/JusPW4EJHYO4E2e1J6gyPEGOqrAsLW97WTEN+LW1bdTdY7dhM4jSI+Unv
-ZqZ71xW06WXE2lxGD4ayXuzP6Q0KQT7YcMnrkqBluRJTfGKdjX0RPXt/5+KWd7H3
-VEst836l75/lYfLrbWxaArFjztISiEYEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT
-3QCfcsKGxTTd4f5S/liM5MfnCtlAU9QAnia0uQcnuH/aodTQqspKUGN3Z04+lQHO
-BDbjtDQRBAC9Vf1MkTKc8kSxfdfZ8Y88OJAr6gHsPUg0j1t8gPk0q2ijyrJuK84u
-jzmLmbtFSITKFfcT2VSD1u4qa0iFqzSwnywtRGYKd0gq1eMhaDcp3SmaMTyrbPJ3
-sKFDd98nbTzvnA1tHgZCFI7VZO7HBGgvnd+370lNQsnGRBF/vUDObwCgllBimEp4
-tasu0WNvZYptjGy3ni0EAJLsL9W7jR64h6+nZNkdO1jRT45sW8mvyMOt1BkyRQVK
-6G2Lut879t/upPCYK+/ohWaf3TkAKH1ucrBm9xHlPXJHZvoIA3brt/OuJmG7r8Ub
-70N2vrZmdXas/w5ru7EBcKeii9pp8pi6mim8dXTPS1R/b7BqytB0dlO9zSl9j7no
-A/9Y5UnQobM/qT1tiNhJEnUwlvvTB1UWId2UiUR3k/eNCxc7IdUytanqofXSxAu2
-jyDB5Ymv1od6bRCNM1JNWnOnqVoEd/u2csTAIkZ5fl/kE6HztqRGPB+H0n3Nb4MG
-u2mpLq+OUNhTnLpEZsZGXqd21eFXkWkThxstrH+kYVYSrf8EAQMsrHk/oVe3Xf3i
-4RPIB3bwsBoWGrA4kRK7mm5a6M/pBLavd6wy89rvtCtXaGlza3kgVGVzdCAoZGVt
-byBrZXkpIDx3aGlza3lAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtDQDCwoDAxUD
-AgMWAgECF4AACgkQ3vD3uOxn296iagCfSizgYr94GzIrMWbc6H1ha7gFOX4An2oe
-iUql9DoXgvph82AUGtmv9TuRnQGlBDbjtFYQBADPV+xDMQ8NzkqoJyO+lriAUrCN
-IBf1Kbc6U/IPAGOoED1YVPX4EB27u3K/EmRVd3clFS085Dau5rFIr3d/xXnLn++w
-qSgQq0Jc7LflMpIj0P209/oKt6MBovTAQn3lNpecmWd8oxiKoPP158Zgm7iLcOvR
-Tcs+/p0KAzNvHIvQdwADBQP8CQS48V16lhWOSXV6u3JOukMeWBw6Tx+7M1CqyBih
-mR8ZNlF6FPBvVkX0NFVUH2qJn5yr6PmxQxSRnC3yCEyPBa48xqIditzynMbEIkNU
-rFZTE915rr0k9MrwzPGuLfaPtr/Miy4BI0dnZ/5U4hoxPwDbp0aPUwRqb8+T9POT
-Zs7/BAEDLKx5P6FXt1394uETyAd28LN6Abjx+ozpGMN36+SHvBm1QBbee0EWJ9LY
-natmavOGPgEn7HZFbgk/QaUQiMRMNQIEykHjoKU1C5uWEDR+P/wuEYX0+pQ1UhUU
-Z8v+/wZjAC+X5WymJmjKW2l4LXfq0RpOU3DedzHl5+zcuhfZN03MhxX4mcTHdGNS
-LqWzikj/1HWl3ohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAnROeKraABkL+
-JUAzQwMcNm+0JCezAJ0Uz6p+tN5wt6ywyH09JfENI3F77Z0B4QRDVOPaEQQA0vZ8
-6nCVajqp71XSCfin8OI+gHAAbVA2t0JAH94SELIUTqhU3KDiqg481GoI0g5sbn83
-VOOnV06HyfCoS3hVAw+qPIJ5B9hOT7YSd078qI5N6H6mV6vXhC4mFn+Q71t1ZIjZ
-M2grgXBK8gBa9XyIZPrtdI1K6H7PAaWitfJCLTcAoKRwVDiGrW2eio0bD3ri1TZK
-Y6o5A/0fKN6cxEMJuAX6hI9QBkdwCdQBYTfnaw6RgZOiU3Yfq/IhwLJe4GDm9JdB
-LSv8N9XjpkcsvDDu29ByeL8c2Mer7WQwFnx51MKKaHisWUafcO9QgLAFiS59nTCQ
-imlbd/WchiuLkJesLf5KjTcs+y4I1ryjpjZDseGhC49nK4BMAQP9FZ6uNXhULndY
-mA8WRs9GGF95IzlbwixmZNkoviIF9Pv4nGT+xJPrMj89OzHt8KCLx2YyVelrLhwO
-CSxfjPMw2Je1qRwcDXGKnF3/Nb1Mw9/3TQoRexGz7+SuV4v5EEvu53CY6sYbvRku
-WHopzmdJ3nIXNbywNRCse/EzhN+1H2v+AwMCeQ0GPAUFo8VgGOz57mojjJX8F4Vl
-X7IYjOVab40guLzkSGqxQCsps8UmWL/mKfAoBYRgpPDRozfnxSSIlwQYEQIADwUC
-Q1Tj2wIbAgUJAAAAPABSCRDe8Pe47Gfb3kcgBBkRAgAGBQJDVOPbAAoJEGX0CIjl
-GYfJ12EAnRuCm61Ypk5bbynrSpZu5nd7Kf6YAJ0aBGUQSyDxdieKqY+f/U1NwDmi
-ZmXsAJ4hJCAMBP1TqRBM2D61RwrUTpVcOgCgi3v4j/k7ojLKcZtv3L62YETM3RSd
-AfwEQ1TkBQEEAMpDZC0DUd+HChHrOlHLLDeyA817qeFKDUFbfmAScDCO67CPI7Wl
-HgWccQZhTgKdXadyUE1IL9QsVkGZPEv37ijitw+/jZw8mSASE7DxeCMhOqi5LhbR
-LMS5zj439oJlk9cJNgF9VEJkYF3KePuI5yJNgeUYd/hZzO3XPvAmggnPAAYp/gMD
-ArwKKdoDxBLOYIbNlJluk4MFdM8VaglnHWRAhSJ7aWgD3qbp+p2AgQkuijQxJT9o
-wKVsPdRePwc7I4ffXuESOQmOjNF1dLwaJKAr+s8hRw9HCOTUlkBIhqtWnKjegKZL
-ZClgnA8M4/91wowP877+Lz5ABGGbMAhvTfPXqzWy8eiGB0FhJe5k5GNaw/jKfqH4
-A12FYeWqLMcl26Yxd8G3w9rYcR6vRvbBf/LqMoRkG0XYF+YCDcBDGTgBvuxG2JKP
-UHSRoV4VRXn1onyZkRBG5xdNGC2RPripX/4sVPXBjIGty1xk455XpE5Q0DkiwRfP
-IhjZr2Zzv5wFb9bTO1PKlGshS41b0SsWS+ULDYSw6rqXbk3F9aGU0YcwkYhIMPde
-tmAuRKmmSlo4b305yr5W62Kn1jKtiJuKjsczpZt3us+vXKCtikb0fyTC4A9dWTEY
-EAacZP+vhaLgGEMWr0vfJlB4KhjM4Zk3lLWVFQVFiE8EGBECAA8FAkNU5AUCGwwF
-CQAAAEYACgkQ3vD3uOxn2971XgCeL6JojSxB+GBZD6VXXdt5i+8EbXwAn3iwQfIp
-Di5nPVvcM/kbD0eIfix2lQHOBDbjtNwRBACtSpRuJVMzEmGnxsDi8xcDMK4uPKzg
-DjgMT65EVv0AaxlObD8VM8RM7uJT/d+uXJjJOAi8jbMMXVLAdcbTooXfIi7wsXo4
-IzQ3STsqcqnDwza2Q+JP4PwA2sdTl3Xvx6/ObjQ/I0PIrFIY2UgbU3gwgoW010yV
-qEu+73WQbThZ6wCgs9rnMhK+xf4TD3kzWjhC2LyJgdsD/jCv55hHLA/fl5v8XlX1
-s4taFaYQPPDgoddDtX44nskPmfjhLkos8rAiiCiEOU+avENMAn9gC6QClQi13fSS
-vRSrfhCAWS0CyqAI/sLkoQzVNPFTblNyziiNQegPIyPXgQK6JMI/RkVEpSK+imCO
-BGEVMpdVVZPJKRDSD1INohNKA/9rQXJcxBRgmO4HsYDqvhTpCcgezFLnGtCCSyFv
-i2nYxVYyGqWGx84tqPVZn6h7QPErDQ7dgpMf8QDOY16Upwxu1NyKUtoh0jmX5iVq
-b9tl7tC9s3azvYqfY9mO1io7dTOrDXhuoAlGXR6SV4x1lEwzMCyi6v6I1U8eeWh1
-edDaDP8EAQPfoYwMXoA+NvOy9Qr7KTriHrsU72UPiLQWJcATcO1+IErNiHeMRXW6
-tCdYUmF5IFRlc3QgKGRlbW8ga2V5KSA8eHJheUBleGFtcGxlLm5ldD6IVQQTEQIA
-FQUCNuO03AMLCgMDFQMCAxYCAQIXgAAKCRCJeabFVn+zSrdPAKCetSLKBzw2Y/8Q
-OyAc7B4vLn6gxQCgkLPtL1D/V/ZfvFdT1ezbGRoprO+dAaUENuO1BRAEAMbhpQb6
-qA5MYSA4BWc3RyTvoCcpveM4Ehh5AZgSAX+UNhtjt85De0iBDSNesoPXMcu85E2w
-bvTzIM1Hv1LkKL/WemFys049Yy6M6xnZYyjnFuWEb5Ym6O3ilw1JEr0/l+idQTiF
-XsZdOWODXJn+6LTQ63tvUHyvIBgTv23UHey/AAQLA/0eDavyUGr+P+3eRE7jGXXT
-wMVeJAp2Puxe6CYBwyiYXicbePazbX10sQWVLCfT+l4a+OnwkU99ww9T/EclJpkt
-/3SZex/6kdwNa6MeBUD1gLpOFhobH0l75WZxViiYQvE2cxYrI4l48NThWIheEwK8
-Y/Q+3f3BxCiIuN67Xn6X/v8EAQPfoYwMXoA+NvOy9Qr7KTriHeTVwSrlVprhmm/M
-2bFHEQQxJP5csnuV5EXOeAUzsIksQ17f5lOppLt339rSn2hxXA/Y0c4FMtJSIqLw
-9pxTeq2vkDv0zYC1SuWfAlxriimd4EsmA0YkvJEay/pYRas9nU+FHu/pKRR+PyND
-9PNvWWPoOk4ClkUf18e/lu0tT4khNNH6iEYEGBECAAYFAjbjtQUACgkQiXmmxVZ/
-s0rskACdGiy9dMrQlMOeDzuRqJcsBPe3YfwAn3nDC2nXHR4/itw7jnJSyAYihahT
-lQHOBDbjtVERBADdUAZzhP6+69VdyRrgRNotouUvXE6I8h0kxZFZZDrQJmpZcNWk
-UHDqgbYDJ9RmIeEuWZNmyzPxSFcvD9RGw9KmIZu2kZYqIuzg4KqOyU3SUfNycarE
-ZYJkmLEyBlrkNxZkmPCp1cRsMKGCbhQs//v6Iq8h6dNA2EWgJev0y12gcwCguk0K
-ZIqVO7UfkaVaZhMr0Cd1at8D/juKnRViDMi9SEjSJZwb3mw1+yECnM8vrM+AoGoA
-KiCz/n8N9Gf2DTsFy4yKEskPQ8s09Wc5epBFo3gNruMu4kDnde0uCmiDEbTwzpdS
-KZO5x9yi+7b39uCNkgoDlzwonaXNdIn2NnFKjL47TnV/vKFdtSZgLW902vwYGTr1
-ArL/BACIcx9TdxsJ9NMyaKD7MEcKQeOrOqv/Mq1HxFPkDBI4hTZpQiId1XTxqkJ6
-UHDw9sR/TvtO5YKrZjINkmaBZFiHlx1oyB0B3u6XUVLXIc9liyFyh9aOBdQkdHgj
-yI8Kzk6Z0ejYcre5TY4zfplAZKkUDlY3U0Sb0a0xIGhgo3YREP8EAQMT5FnbWGWP
-2cVRAqQN/YTcRPzxcHeXQzVsLEK/ZQB8an6kRJZsVmwGtCtZYW5rZWUgVGVzdCAo
-ZGVtbyBrZXkpIDx5YW5rZWVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtVIDCwoD
-AxUDAgMWAgECF4AACgkQnu80zUsRsl9XsQCgkAArOB5EfjSD6bXFfll8/pCcJygA
-oJtNkxKjQfv2DpmfbBlt0RUbCaP6nQGlBDbjtWcQBACa4rlFxLTNPJenpKNbb5Z5
-AikmckN+UvT6IF7//dIAO/TWpSbDeNYwC7Eb4JwICmSyXXbZX2ekQeIsLhDYDr2u
-gtGxvEoE95u6y19p0smhVio+y+OesGVp97kZysU+cpsTTBXplfH9On95IOJCWJ3i
-VbPkn7P+Y3sqEcA3OhEBuwADBgQAk7l+QJJ03CSKwVfN4qyVbGb1ih7VM6i6JJXX
-WF7HSP3genPnAZYRcXvP4VsOr7hXRSoaQrFoRGyXocxY2QiaPns3/2HULVgN+IpO
-KaDm1mkqZ6Fe2V2lYYI0NmsTRFqysUIoQ1WEUyGlziQCfHqtsDT4uFG8mS+R3Fju
-kpT/9pn/BAEDE+RZ21hlj9nFUQKkDf2E3EecwSh+NU1+ETQkC/cpMlFkc4JvMKQ7
-4PEqBxIixlVImLPO52ZUthtBYwpzTKQC9smi3iTo+A2JbBTJjwfFCzQX7lhi1CQy
-zxV0hA17P7kTZEKgH5V+VRWriqFZTFcHvfuZpQSxJzbbTJ4SPTifn06U8gtv4D9e
-/CgIT8X6QJB2VLsEDYhGBBgRAgAGBQI247VnAAoJEJ7vNM1LEbJf9FwAn1fc3Y8+
-VfQp43FQd5+qak9gMXoaAJ9mbIL86WuaZK6Uno0AfGJA1PgP9pUBzgQ247XLEQQA
-gQyThl/Qv8cQlWTT+jh8+nC+bzNz4plAIVfvRwFVT0FYk5xSq5GD0kMkX1s4zlPE
-TtU6eQh8++O6Dm+o/T++Mh9bsu/MhYOFLoVwVop4bgiiquCCFsCZAigRa9VPH7vG
-umOjXI6ogwNCphkSazD5l3p15CaRRhxu/K1LzYvSDH8AoLoMzSC4f912QmVPgVD2
-Hly/p1ABBACA12YY9bxVx4IvZZooyg4yaHBAaGpjf7WkMujsdUUQ+h7XwD2OUxEd
-Z+8ZvYTMxPjr9SCqR/xPO9kYWtartb+3jmunk7jVhdDb5kkfeeX63kbDbkfCTSG+
-krSNhEfacwVH48pAvaYNsD3gu8KUCSBfUxfiWtQbxtiPoWtsSe/OgAP7BxFLwDrH
-OfGGz5WyD8qdiXRB7100U9jSElUbkzELIPL1ffZzGEdglIdu9Lj8stsWWg/5GHCf
-f9Z4GOwvaW2zVqFe9D5BDDv6o+uziFYllT81ISHVEaK26RobnN6Ac1MToImpeyGy
-Ej0SLQ4INqGaGOIaskDcfAo9mWQMw6TNrwr/BAEDcZMUKY/bw+Whlbt8d72KlAfR
-OQf7KnYhddFY0eOFxs6vCS/v6N50dbQnWnVsdSBUZXN0IChkZW1vIGtleSkgPHp1
-bHVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtcsDCwoDAxUDAgMWAgECF4AACgkQ
-a8R3gFSs0kZA6wCeOBSNOP3/J4LLMGDC7YWzVnYcH1oAoJh1THc6xw3dCapVWt7e
-nBljkaZInQGlBDbjtfIQBADMfPDBQoMzv52Mmjb8SdaYKKNzqDd9K1oY2hcMSi+L
-cHag+KJFOyKBf3SoHmcU/vCEN+LyTgljYSKDmEf4wZ2+eLfqFgSdBJp2xm55ih+9
-CHXg3dXx9SbHiGJCIxfJaIsnNz3VmJGPDDjBlaf/hjl/7SZvR+MJpVLFPGjj7uOh
-TwADBQP/Sgv0abeCXVdVXwGEmhdV0VDo833IQRdRu1yt+QLnWRMGTY1oQapsH6QL
-wYSZfDJlxbsBA3tfqKStpRSbdGNNTsK+RIehsGddi3sWGplRGm5Xt5KpkY/mc/tL
-FaYJNMqAgfWQcKlZHBp7EoWMgiRiDJUWq0TH1wRDoPaRc+H5Gdr/BAEDcZMUKY/b
-w+Whlbt8d72KlASOyif5HwnRxkXE7wHaToVqzUKku8/w/Q11MjKK1qIFRq0gYMjw
-3bYjqap6WlZmlMplnKasMp7SfyH6tM2pvS4i3wVH7r/WoWcvWTcT/5DGpLtUaRHP
-rGdP6Vrs5Wt7FfPXzKdum/Mkw97ZIA/Kpj5FLNbB/ln9uAz4D9+00V8R6dyfsohG
-BBgRAgAGBQI247XyAAoJEGvEd4BUrNJGfWMAmwXfO7BnT2jtPTJk2bjNZxEZm+14
-AKCugutV1S43Ft0SWUfgFty8UHTrMA==
-=+vvt
------END PGP PRIVATE KEY BLOCK-----
diff --git a/tags/gpgme-1-1-1/tests/gpg/seckey-1.asc b/tags/gpgme-1-1-1/tests/gpg/seckey-1.asc
deleted file mode 100644 (file)
index 3934804..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
------BEGIN PGP PRIVATE KEY BLOCK-----
-Version: GnuPG v1.0.4b (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-lQHPBDo41NoRBADSfQazKGYf8nokq6zUKH/6INtV6MypSzSGmX2XErnARkIIPPYj
-cQRQ8zCbGV7ZU2ezVbzhFLUSJveE8PZUzzCrLp1O2NSyBTRcR5HVSXW95nJfY8eV
-pOvZRAKul0BVLh81kYTsrfzaaCjh9VWNP26LoeN2r+PjZyktXe7gM3C4SwCgoTxK
-WUVi9HoT2HCLY7p7oig5hEcEALdCJal0UYomX3nJapIVLVZg3vkidr1RICYMb2vz
-58i17h8sxEtobD1vdIKNejulntaRAXs4n0tDYD9z7pRlwG1CLz1R9WxYzeOOqUDr
-fnVXdmU8L/oVWABat8v1V7QQhjMMf+41fuzVwDMMGqjVPLhu4X6wp3A8uyM3YDnQ
-VMN1A/4n2G5gHoOvjqxn8Ch5tBAdMGfO8gH4RjQOwzm2R1wPQss/yzUN1+tlMZGX
-K2dQ2FCWC/hDUSNaEQRlI15wxxBNZ2RQwlzE2A8v113DpvyzOtv0QO95gJ1teCXC
-7j/BN9asgHaBBc39JLO/TcpuI7Hf8PQ5VcP2F0UE3lczGhXbLP8DAwKVpe92I5n5
-JGBjXsTTnVLoJ1hrWTdbLvdbn882m5pHYeqFlvkqKYXJTf0mIzpEU0FfZmFjdG9y
-OgAAr0JzPBwQoEmNI3YSC1MwimZ77bpvVKP9JiM6RFNBX2ZhY3RvcjoAAK9/fVBz
-g73cYbgeNWbz2uITUwNd9KEN/SYjOkRTQV9mYWN0b3I6AACvWjjITYZwah6NiH6C
-YgX52m55Dy5PX7Q/Sm9lIFJhbmRvbSBIYWNrZXIgKHRlc3Qga2V5IHdpdGggcGFz
-c3BocmFzZSAieCIpIDxqb2VAc2V0cS5vcmc+iFcEExECABcFAjo41NoFCwcKAwQD
-FQMCAxYCAQIXgAAKCRCvgiRPnNn9VXm9AKCFQ/t23GQnQEfnnAnvbRNfRo4zIQCb
-BHwILsDBASB1rQzW68UA/XHze0WdAUYEOjjU3RAEAJ50lvtCGbnQlI97VX6tJkos
-dPmdzeXaTWfv//A2wmSANbYnuychGMa1LN43Ew+H6FXMWJ3MB/exs6UBFCgGsw88
-qmcla2bosQN/aVLA7fqXT9ujqoNGaIVEmgdbK1MkSPFXBFyVW3hteod83D0UqFll
-twp4A3ageCYFVJTp50d3AAMFA/44YCQQbg9x9JvzHX3VH7CRX+raEDkDL3Pbz0PH
-as7bwI7gzZ+GFyNKaCvrHQOyuR8RIKIbjtQYnXr1675ConCTceIXhysY32sTn5V6
-UFUW2t0xaRfas8sZBbLDyIJkpt4fyD+6OaRoui9KZqXMNwt7i/XFIto/sWd/OK3S
-IgZkAf8DAwKVpe92I5n5JGAHRuEKSSvGU+0my6zTf17bLWPpFPnICNJdaMfyx24Y
-RZZa+nDpYrRznJ89vohGBBgRAgAGBQI6ONTeAAoJEK+CJE+c2f1V7iIAn0WsYyUV
-Huz4ZZ/WxxN57Ku2Eqs9AJ9Klz9imzvZoUjuE9/Ihr0y56tVng==
-=lKvj
------END PGP PRIVATE KEY BLOCK-----
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-decrypt-verify.c b/tags/gpgme-1-1-1/tests/gpg/t-decrypt-verify.c
deleted file mode 100644 (file)
index 697d383..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/* t-decrypt-verify.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static void
-check_verify_result (gpgme_verify_result_t result, unsigned int summary,
-                    char *fpr, gpgme_error_t status)
-{
-  gpgme_signature_t sig;
-
-  sig = result->signatures;
-  if (!sig || sig->next)
-    {
-      fprintf (stderr, "%s:%i: Unexpected number of signatures\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->summary != summary)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature summary: 0x%x\n",
-              __FILE__, __LINE__, sig->summary);
-      exit (1);
-    }
-  if (strcmp (sig->fpr, fpr))
-    {
-      fprintf (stderr, "%s:%i: Unexpected fingerprint: %s\n",
-              __FILE__, __LINE__, sig->fpr);
-      exit (1);
-    }
-  if (gpg_err_code (sig->status) != status)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature status: %s\n",
-              __FILE__, __LINE__, gpgme_strerror (sig->status));
-      exit (1);
-    }
-  if (sig->notations)
-    {
-      fprintf (stderr, "%s:%i: Unexpected notation data\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->wrong_key_usage)
-    {
-      fprintf (stderr, "%s:%i: Unexpectedly wrong key usage\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->validity != GPGME_VALIDITY_UNKNOWN)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity: %i\n",
-              __FILE__, __LINE__, sig->validity);
-      exit (1);
-    }
-  if (gpg_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity reason: %s\n",
-              __FILE__, __LINE__, gpgme_strerror (sig->validity_reason));
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_decrypt_result_t decrypt_result;
-  gpgme_verify_result_t verify_result;
-  const char *cipher_2_asc = make_filename ("cipher-2.asc");
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_file (&in, cipher_2_asc, 1);
-  fail_if_err (err);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_op_decrypt_verify (ctx, in, out);
-  fail_if_err (err);
-  decrypt_result = gpgme_op_decrypt_result (ctx);
-  if (decrypt_result->unsupported_algorithm)
-    {
-      fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
-              __FILE__, __LINE__, decrypt_result->unsupported_algorithm);
-      exit (1);
-    }    
-  print_data (out);
-  verify_result = gpgme_op_verify_result (ctx);
-  check_verify_result (verify_result, 0,
-                      "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      GPG_ERR_NO_ERROR);
-
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-decrypt.c b/tags/gpgme-1-1-1/tests/gpg/t-decrypt.c
deleted file mode 100644 (file)
index 2a2f4d7..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* t-decrypt.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_decrypt_result_t result;
-  const char *cipher_1_asc = make_filename ("cipher-1.asc");
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_file (&in, cipher_1_asc, 1);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  
-  err = gpgme_op_decrypt (ctx, in, out);
-  fail_if_err (err);
-  result = gpgme_op_decrypt_result (ctx);
-  if (result->unsupported_algorithm)
-    {
-      fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
-              __FILE__, __LINE__, result->unsupported_algorithm);
-      exit (1);
-    }
-  print_data (out);
-   
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-edit.c b/tags/gpgme-1-1-1/tests/gpg/t-edit.c
deleted file mode 100644 (file)
index f2f406d..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* t-edit.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static void
-flush_data (gpgme_data_t dh)
-{
-  char buf[100];
-  int ret;
-  
-  ret = gpgme_data_seek (dh, 0, SEEK_SET);
-  if (ret)
-    fail_if_err (gpg_error_from_errno (errno));
-  while ((ret = gpgme_data_read (dh, buf, 100)) > 0)
-    fwrite (buf, ret, 1, stdout);
-  if (ret < 0)
-    fail_if_err (gpg_error_from_errno (errno));
-}
-
-
-gpgme_error_t
-edit_fnc (void *opaque, gpgme_status_code_t status, const char *args, int fd)
-{
-  char *result = NULL;
-  gpgme_data_t out = (gpgme_data_t) opaque;
-
-  fputs ("[-- Response --]\n", stdout);
-  flush_data (out); 
-
-  fprintf (stdout, "[-- Code: %i, %s --]\n", status, args);
-
-  if (fd >= 0)
-    {
-      if (!strcmp (args, "keyedit.prompt"))
-       {
-         static int step = 0;
-         
-         switch (step)
-           {
-           case 0:
-             result = "fpr";
-             break;
-           case 1:
-             result = "expire";
-             break;
-
-             /* This fixes the primary user ID so the keylisting
-                tests will have predictable output.  */
-           case 2:
-             result = "1";
-             break;
-           case 3:
-             result = "primary";
-             break;
-
-           default:
-             result = "quit";
-             break;
-           }
-         step++;
-       }
-      else if (!strcmp (args, "keyedit.save.okay"))
-       result = "Y";
-      else if (!strcmp (args, "keygen.valid"))
-       result = "0";
-    }
-
-  if (result)
-    {
-      write (fd, result, strlen (result));
-      write (fd, "\n", 1);
-    }
-  return 0;
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t out = NULL;
-  gpgme_key_t key = NULL;
-  const char *pattern = "Alpha";
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, 0);
-
-  err = gpgme_op_keylist_start (ctx, pattern, 0);
-  fail_if_err (err);
-  err = gpgme_op_keylist_next (ctx, &key);
-  fail_if_err (err);
-  err = gpgme_op_keylist_end (ctx);
-  fail_if_err (err);
-
-  err = gpgme_op_edit (ctx, key, edit_fnc, out, out);
-  fail_if_err (err);
-
-  fputs ("[-- Last response --]\n", stdout);
-  flush_data (out);
-
-  gpgme_data_release (out);
-  gpgme_key_unref (key);
-  gpgme_release (ctx);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-encrypt-large.c b/tags/gpgme-1-1-1/tests/gpg/t-encrypt-large.c
deleted file mode 100644 (file)
index 6cc6138..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/* t-encrypt-large.c - Regression test for large amounts of data.
-   Copyright (C) 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-
-struct cb_parms
-{
-  size_t bytes_to_send;
-  size_t bytes_received;
-};
-
-
-
-/* The read callback used by GPGME to read data. */
-static ssize_t
-read_cb (void *handle, void *buffer, size_t size)
-{
-  struct cb_parms *parms = handle;
-  char *p = buffer;
-
-  for (; size && parms->bytes_to_send; size--, parms->bytes_to_send--)
-    *p++ = rand ();
-      
-  return (p - (char*)buffer);
-}
-
-/* The write callback used by GPGME to write data. */
-static ssize_t
-write_cb (void *handle, const void *buffer, size_t size)
-{
-  struct cb_parms *parms = handle;
-
-  parms->bytes_received += size;
-
-  return size;
-}
-
-
-static void
-progress_cb (void *opaque, const char *what, int type, int current, int total)
-{
-  /* This is just a dummy. */
-}
-
-
-
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  struct gpgme_data_cbs cbs;
-  gpgme_data_t in, out;
-  gpgme_key_t key[3] = { NULL, NULL, NULL };
-  gpgme_encrypt_result_t result;
-  size_t nbytes;
-  struct cb_parms parms;
-
-  if (argc > 1)
-    nbytes = atoi (argv[1]);
-  else
-    nbytes = 100000;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-    
-  memset (&cbs, 0, sizeof cbs);
-  cbs.read = read_cb;
-  cbs.write = write_cb;
-  memset (&parms, 0, sizeof parms);
-  parms.bytes_to_send = nbytes;
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_armor (ctx, 0);
-
-  /* Install a progress handler to enforce a bit of more work to the
-     gpgme i/o system. */
-  gpgme_set_progress_cb (ctx, progress_cb, NULL);
-
-  err = gpgme_data_new_from_cbs (&in, &cbs, &parms);
-  fail_if_err (err);
-
-  err = gpgme_data_new_from_cbs (&out, &cbs, &parms);
-  fail_if_err (err);
-
-  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      &key[0], 0);
-  fail_if_err (err);
-  err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
-                      &key[1], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-  fail_if_err (err);
-  result = gpgme_op_encrypt_result (ctx);
-  if (result->invalid_recipients)
-    {
-      fprintf (stderr, "Invalid recipient encountered: %s\n",
-              result->invalid_recipients->fpr);
-      exit (1);
-    }
-  printf ("plaintext=%u bytes, ciphertext=%u bytes\n", 
-          (unsigned int)nbytes, (unsigned int)parms.bytes_received);
-
-  gpgme_key_unref (key[0]);
-  gpgme_key_unref (key[1]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-encrypt-sign.c b/tags/gpgme-1-1-1/tests/gpg/t-encrypt-sign.c
deleted file mode 100644 (file)
index 9da5ff0..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* t-encrypt-sign.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static void
-check_result (gpgme_sign_result_t result, gpgme_sig_mode_t type)
-{
-  if (result->invalid_signers)
-    {
-      fprintf (stderr, "Invalid signer found: %s\n",
-              result->invalid_signers->fpr);
-      exit (1);
-    }
-  if (!result->signatures || result->signatures->next)
-    {
-      fprintf (stderr, "Unexpected number of signatures created\n");
-      exit (1);
-    }
-  if (result->signatures->type != type)
-    {
-      fprintf (stderr, "Wrong type of signature created\n");
-      exit (1);
-    }
-  if (result->signatures->pubkey_algo != GPGME_PK_DSA)
-    {
-      fprintf (stderr, "Wrong pubkey algorithm reported: %i\n",
-              result->signatures->pubkey_algo);
-      exit (1);
-    }
-  if (result->signatures->hash_algo != GPGME_MD_SHA1)
-    {
-      fprintf (stderr, "Wrong hash algorithm reported: %i\n",
-              result->signatures->hash_algo);
-      exit (1);
-    }
-  if (result->signatures->sig_class != 0)
-    {
-      fprintf (stderr, "Wrong signature class reported: %u\n",
-              result->signatures->sig_class);
-      exit (1);
-    }
-  if (strcmp ("A0FF4590BB6122EDEF6E3C542D727CC768697734",
-             result->signatures->fpr))
-    {
-      fprintf (stderr, "Wrong fingerprint reported: %s\n",
-              result->signatures->fpr);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[3] = { NULL, NULL, NULL };
-  gpgme_encrypt_result_t result;
-  gpgme_sign_result_t sign_result;
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-    
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_textmode (ctx, 1);
-  gpgme_set_armor (ctx, 1);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      &key[0], 0);
-  fail_if_err (err);
-  err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
-                      &key[1], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt_sign (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-  fail_if_err (err);
-  result = gpgme_op_encrypt_result (ctx);
-  if (result->invalid_recipients)
-    {
-      fprintf (stderr, "Invalid recipient encountered: %s\n",
-              result->invalid_recipients->fpr);
-      exit (1);
-    }
-  sign_result = gpgme_op_sign_result (ctx);
-  check_result (sign_result, GPGME_SIG_MODE_NORMAL);
-  print_data (out);
-
-  gpgme_key_unref (key[0]);
-  gpgme_key_unref (key[1]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-encrypt-sym.c b/tags/gpgme-1-1-1/tests/gpg/t-encrypt-sym.c
deleted file mode 100644 (file)
index 51a3fc1..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* t-encrypt-sym.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t plain, cipher;
-  const char *text = "Hallo Leute\n";
-  char *text2;
-  char *p;
-  size_t len;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_armor (ctx, 1);
-
-  p = getenv("GPG_AGENT_INFO");
-  if (!(p && strchr (p, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_mem (&plain, text, strlen (text), 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&cipher);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt (ctx, 0, 0, plain, cipher);
-  fail_if_err (err);
-
-  fflush (NULL);
-  fputs ("Begin Result Encryption:\n", stdout);
-  print_data (cipher);
-  fputs ("End Result.\n", stdout);
-
-  gpgme_data_seek (cipher, 0, SEEK_SET);
-
-  gpgme_data_release (plain);
-  err = gpgme_data_new (&plain);
-  fail_if_err (err);
-
-  err = gpgme_op_decrypt (ctx, cipher, plain);
-  fail_if_err (err);
-
-  fputs ("Begin Result Decryption:\n", stdout);
-  print_data (plain);
-  fputs ("End Result.\n", stdout);
-
-  text2 = gpgme_data_release_and_get_mem (plain, &len);
-  if (strncmp (text, text2, len))
-    {
-      fprintf (stderr, "%s:%d: Wrong plaintext\n", __FILE__, __LINE__);
-      exit (1);
-    }
-
-  gpgme_data_release (cipher);
-  gpgme_release (ctx);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-encrypt.c b/tags/gpgme-1-1-1/tests/gpg/t-encrypt.c
deleted file mode 100644 (file)
index 264f31a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* t-encrypt.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[3] = { NULL, NULL, NULL };
-  gpgme_encrypt_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-    
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_armor (ctx, 1);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      &key[0], 0);
-  fail_if_err (err);
-  err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
-                      &key[1], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-  fail_if_err (err);
-  result = gpgme_op_encrypt_result (ctx);
-  if (result->invalid_recipients)
-    {
-      fprintf (stderr, "Invalid recipient encountered: %s\n",
-              result->invalid_recipients->fpr);
-      exit (1);
-    }
-  print_data (out);
-
-  gpgme_key_unref (key[0]);
-  gpgme_key_unref (key[1]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-eventloop.c b/tags/gpgme-1-1-1/tests/gpg/t-eventloop.c
deleted file mode 100644 (file)
index bf1ab4e..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/* t-eventloop.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/select.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-/* Stripped down version of gpgme/wait.c.  */
-
-struct op_result
-{
-  int done;
-  gpgme_error_t err;
-};
-
-struct op_result op_result;
-
-struct one_fd
-{
-  int fd;
-  int dir;
-  gpgme_io_cb_t fnc;
-  void *fnc_data;
-};
-
-#define FDLIST_MAX 32
-struct one_fd fdlist[FDLIST_MAX];
-
-gpgme_error_t
-add_io_cb (void *data, int fd, int dir, gpgme_io_cb_t fnc, void *fnc_data,
-          void **r_tag)
-{
-  struct one_fd *fds = data;
-  int i;
-
-  for (i = 0; i < FDLIST_MAX; i++)
-    {
-      if (fds[i].fd == -1)
-       {
-         fds[i].fd = fd;
-         fds[i].dir = dir;
-         fds[i].fnc = fnc;
-         fds[i].fnc_data = fnc_data;
-         break;
-       }
-    }
-  if (i == FDLIST_MAX)
-    return gpg_err_make (GPG_ERR_SOURCE_USER_1, GPG_ERR_GENERAL);
-  *r_tag = &fds[i];
-  return 0;
-}
-
-void
-remove_io_cb (void *tag)
-{
-  struct one_fd *fd = tag;
-
-  fd->fd = -1;
-}
-
-void
-io_event (void *data, gpgme_event_io_t type, void *type_data)
-{
-  struct op_result *result = data;
-
-  if (type == GPGME_EVENT_DONE)
-    {
-      result->done = 1;
-      result->err = * (gpgme_error_t *) type_data;
-    }
-}
-
-
-int
-do_select (void)
-{
-  fd_set rfds;
-  fd_set wfds;
-  int i, n;
-  int any = 0;
-
-  FD_ZERO (&rfds);
-  FD_ZERO (&wfds);
-  for (i = 0; i < FDLIST_MAX; i++)
-    if (fdlist[i].fd != -1)
-      FD_SET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds);
-
-  do
-    {
-      n = select (FD_SETSIZE, &rfds, &wfds, NULL, 0);
-    }
-  while (n < 0 && errno == EINTR);
-
-  if (n < 0)
-    return n;  /* Error or timeout.  */
-
-  for (i = 0; i < FDLIST_MAX && n; i++)
-    {
-      if (fdlist[i].fd != -1)
-       {
-         if (FD_ISSET (fdlist[i].fd, fdlist[i].dir ? &rfds : &wfds))
-           {
-             assert (n);
-             n--;
-             any = 1;
-             (*fdlist[i].fnc) (fdlist[i].fnc_data, fdlist[i].fd);
-           }
-       }
-    }
-  return any;
-}
-
-int
-my_wait (void)
-{
-  int n;
-
-  do
-    {
-      n = do_select ();
-    }
-  while (n >= 0 && !op_result.done);
-  return 0;
-}
-
-
-struct gpgme_io_cbs io_cbs =
-  {
-    add_io_cb,
-    fdlist,
-    remove_io_cb,
-    io_event,
-    &op_result
-  };
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[3] = { NULL, NULL, NULL };
-  int i;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  for (i = 0; i < FDLIST_MAX; i++)
-    fdlist[i].fd = -1;
-
-  err = gpgme_engine_check_version (GPGME_PROTOCOL_OpenPGP);
-  fail_if_err (err);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_armor (ctx, 1);
-  gpgme_set_io_cbs (ctx, &io_cbs);
-  op_result.done = 0;
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      &key[0], 0);
-  fail_if_err (err);
-  err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
-                      &key[1], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt_start (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-  fail_if_err (err);
-
-  my_wait ();
-  fail_if_err (op_result.err);
-  fail_if_err (err);
-
-  fflush (NULL);
-  fputs ("Begin Result:\n", stdout);
-  print_data (out);
-  fputs ("End Result.\n", stdout);
-   
-  gpgme_key_unref (key[0]);
-  gpgme_key_unref (key[1]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-export.c b/tags/gpgme-1-1-1/tests/gpg/t-export.c
deleted file mode 100644 (file)
index f469843..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* t-export.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t  out;
-  const char *pattern[] = { "Alpha", "Bob", NULL };
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  gpgme_set_armor (ctx, 1);
-  err = gpgme_op_export_ext (ctx, pattern, 0, out);
-  fail_if_err (err);
-
-  fflush (NULL);
-  fputs ("Begin Result:\n", stdout);
-  print_data (out);
-  fputs ("End Result.\n", stdout);
-   
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-   
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-file-name.c b/tags/gpgme-1-1-1/tests/gpg/t-file-name.c
deleted file mode 100644 (file)
index eb20fc0..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/* t-file-name.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-#define TESTNAME "abcde12345"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[2] = { NULL, NULL };
-  gpgme_decrypt_result_t result;
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-    
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_armor (ctx, 1);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  err = gpgme_data_set_file_name (in, TESTNAME);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                      &key[0], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-  fail_if_err (err);
-
-  gpgme_data_release (in);
-  err = gpgme_data_new (&in);
-  fail_if_err (err);
-
-  err = gpgme_data_seek (out, 0, SEEK_SET);
-  fail_if_err (err);
-
-  err = gpgme_op_decrypt (ctx, out, in);
-  fail_if_err (err);
-  result = gpgme_op_decrypt_result (ctx);
-
-  if (strcmp (TESTNAME, result->file_name))
-    {
-      fprintf (stderr, "%s:%i: Unexpected result file name: %s\n",
-               __FILE__, __LINE__,
-              result->file_name ? "(null)" : result->file_name);
-      exit (1);
-    }
-
-  gpgme_key_unref (key[0]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-genkey.c b/tags/gpgme-1-1-1/tests/gpg/t-genkey.c
deleted file mode 100644 (file)
index 407824f..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/* t-genkey.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-/* True if progress function printed something on the screen.  */
-static int progress_called;
-
-static void
-progress (void *self, const char *what, int type, int current, int total)
-{
-  if (!strcmp (what, "primegen") && !current && !total
-      && (type == '.' || type == '+' || type == '!'
-         || type == '^' || type == '<' || type == '>'))
-    {
-      printf ("%c", type);
-      fflush (stdout);
-      progress_called = 1;
-    }
-  else
-    {
-      fprintf (stderr, "unknown progress `%s' %d %d %d\n", what, type,
-              current, total);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  const char *parms = "<GnupgKeyParms format=\"internal\">\n"
-    "Key-Type: DSA\n"
-    "Key-Length: 1024\n"
-    "Subkey-Type: ELG-E\n"
-    "Subkey-Length: 1024\n"
-    "Name-Real: Joe Tester\n"
-    "Name-Comment: (pp=abc)\n"
-    "Name-Email: joe@foo.bar\n"
-    "Expire-Date: 0\n"
-    "Passphrase: abc\n"
-    "</GnupgKeyParms>\n";
-  gpgme_genkey_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  gpgme_set_progress_cb (ctx, progress, NULL);
-  
-  err = gpgme_op_genkey (ctx, parms, NULL, NULL);
-  fail_if_err (err);
-
-  result = gpgme_op_genkey_result (ctx);
-  if (!result)
-    {
-      fprintf (stderr, "%s:%d: gpgme_op_genkey_result returns NULL\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (progress_called)
-    printf ("\n");
-
-  printf ("Generated key: %s (%s)\n", result->fpr ? result->fpr : "none",
-         result->primary ? (result->sub ? "primary, sub" : "primary")
-         : (result->sub ? "sub" : "none"));
-
-  if (result->fpr && strlen (result->fpr) != 40)
-    {
-      fprintf (stderr, "%s:%d: generated key has unexpected fingerprint\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (!result->primary)
-    {
-      fprintf (stderr, "%s:%d: primary key was not generated\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (!result->sub)
-    {
-      fprintf (stderr, "%s:%d: sub key was not generated\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-import.c b/tags/gpgme-1-1-1/tests/gpg/t-import.c
deleted file mode 100644 (file)
index db5f925..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/* t-import.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-void
-check_result (gpgme_import_result_t result, char *fpr, int secret)
-{
-  if (result->considered != 1)
-    {
-      fprintf (stderr, "Unexpected number of considered keys %i\n",
-              result->considered);
-      exit (1);
-    }
-  if (result->no_user_id != 0)
-    {
-      fprintf (stderr, "Unexpected number of user ids %i\n",
-              result->no_user_id);
-      exit (1);
-    }
-  if ((secret && result->imported != 0)
-      || (!secret && (result->imported != 0 && result->imported != 1)))
-    {
-      fprintf (stderr, "Unexpected number of imported keys %i\n",
-              result->imported);
-      exit (1);
-    }
-  if (result->imported_rsa != 0)
-    {
-      fprintf (stderr, "Unexpected number of imported RSA keys %i\n",
-              result->imported_rsa);
-      exit (1);
-    }
-  if ((secret && result->unchanged != 0)
-      || (!secret && ((result->imported == 0 && result->unchanged != 1)
-                     || (result->imported == 1 && result->unchanged != 0))))
-    {
-      fprintf (stderr, "Unexpected number of unchanged keys %i\n",
-              result->unchanged);
-      exit (1);
-    }
-  if (result->new_user_ids != 0)
-    {
-      fprintf (stderr, "Unexpected number of new user IDs %i\n",
-              result->new_user_ids);
-      exit (1);
-    }
-  if (result->new_sub_keys != 0)
-    {
-      fprintf (stderr, "Unexpected number of new sub keys %i\n",
-              result->new_sub_keys);
-      exit (1);
-    }
-  if ((secret
-       && ((result->secret_imported == 0 && result->new_signatures != 0)
-          || (result->secret_imported == 1 && result->new_signatures > 1)))
-      || (!secret && result->new_signatures != 0))
-    {
-      fprintf (stderr, "Unexpected number of new signatures %i\n",
-              result->new_signatures);
-      if (result->new_signatures == 2)
-        fprintf (stderr, "### ignored due to gpg 1.3.4 problems\n");
-      else
-        exit (1);
-    }
-  if (result->new_revocations != 0)
-    {
-      fprintf (stderr, "Unexpected number of new revocations %i\n",
-              result->new_revocations);
-      exit (1);
-    }
-  if ((secret && result->secret_read != 1)
-      || (!secret && result->secret_read != 0))
-    {
-      fprintf (stderr, "Unexpected number of secret keys read %i\n",
-              result->secret_read);
-      exit (1);
-    }
-  if ((secret && result->secret_imported != 0 && result->secret_imported != 1)
-      || (!secret && result->secret_imported != 0))
-    {
-      fprintf (stderr, "Unexpected number of secret keys imported %i\n",
-              result->secret_imported);
-      exit (1);
-    }
-  if ((secret
-       && ((result->secret_imported == 0 && result->secret_unchanged != 1)
-          || (result->secret_imported == 1 && result->secret_unchanged != 0)))
-      || (!secret && result->secret_unchanged != 0))
-    {
-      fprintf (stderr, "Unexpected number of secret keys unchanged %i\n",
-              result->secret_unchanged);
-      exit (1);
-    }
-  if (result->not_imported != 0)
-    {
-      fprintf (stderr, "Unexpected number of secret keys not imported %i\n",
-              result->not_imported);
-      exit (1);
-    }
-  if (secret)
-    {
-      if (!result->imports
-         || (result->imports->next && result->imports->next->next))
-       {
-         fprintf (stderr, "Unexpected number of status reports\n");
-         exit (1);
-       }
-    }
-  else
-    {
-      if (!result->imports || result->imports->next)
-       {
-         fprintf (stderr, "Unexpected number of status reports\n");
-         exit (1);
-       }
-    }
-  if (strcmp (fpr, result->imports->fpr))
-    {
-      fprintf (stderr, "Unexpected fingerprint %s\n",
-              result->imports->fpr);
-      exit (1);
-    }
-  if (result->imports->next && strcmp (fpr, result->imports->next->fpr))
-    {
-      fprintf (stderr, "Unexpected fingerprint on second status %s\n",
-              result->imports->next->fpr);
-      exit (1);
-    }
-  if (result->imports->result != 0)
-    {
-      fprintf (stderr, "Unexpected status result %s\n",
-              gpgme_strerror (result->imports->result));
-      exit (1);
-    }
-  if (secret)
-    {
-      if (result->secret_imported == 0)
-       {
-         if (result->imports->status != GPGME_IMPORT_SECRET)
-           {
-             fprintf (stderr, "Unexpected status %i\n",
-                      result->imports->status);
-             exit (1);
-           }
-       }
-      else
-       {
-         if (result->imports->status
-             != (GPGME_IMPORT_SECRET | GPGME_IMPORT_NEW)
-             || (result->imports->next
-                 && result->imports->next->status != GPGME_IMPORT_SIG))
-           {
-             fprintf (stderr, "Unexpected status %i\n",
-                      result->imports->status);
-             exit (1);
-           }
-       }
-    }
-  else
-    {
-      if ((result->imported == 0 && result->imports->status != 0)
-         || (result->imported == 1
-             && result->imports->status != GPGME_IMPORT_NEW))
-       {
-         fprintf (stderr, "Unexpected status %i\n",
-                  result->imports->status);
-         exit (1);
-       }
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in;
-  gpgme_import_result_t result;
-  const char *pubkey_1_asc = make_filename ("pubkey-1.asc");
-  const char *seckey_1_asc = make_filename ("seckey-1.asc");
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  err = gpgme_data_new_from_file (&in, pubkey_1_asc, 1);
-  fail_if_err (err);
-
-  err = gpgme_op_import (ctx, in);
-  fail_if_err (err);
-  result = gpgme_op_import_result (ctx);
-  check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 0);
-  gpgme_data_release (in);
-
-  err = gpgme_data_new_from_file (&in, seckey_1_asc, 1);
-  fail_if_err (err);
-
-  err = gpgme_op_import (ctx, in);
-  fail_if_err (err);
-  result = gpgme_op_import_result (ctx);
-  check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 1);
-  gpgme_data_release (in);
-
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-keylist-sig.c b/tags/gpgme-1-1-1/tests/gpg/t-keylist-sig.c
deleted file mode 100644 (file)
index b89ba33..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-/* t-keylist-sig.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-struct
-{
-  char *fpr;
-  char *sec_keyid;
-  struct
-  {
-    char *name;
-    char *comment;
-    char *email;
-    struct
-    {
-      gpgme_pubkey_algo_t algo;
-      char *keyid;
-      char *name;
-      char *comment;
-      char *email;
-      unsigned int sig_class;
-      int exportable;
-    } sig;
-  } uid[3];  
-}
-keys[] =
-  {
-    { "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
-      { { "Alfa Test", "demo key", "alfa@example.net",
-          { GPGME_PK_DSA, "2D727CC768697734",
-           "Alfa Test", "demo key", "alfa@example.net", 19, 1 } },
-       { "Alpha Test", "demo key", "alpha@example.net",
-          { GPGME_PK_DSA, "2D727CC768697734",
-           "Alfa Test", "demo key", "alfa@example.net", 19, 1 } },
-       { "Alice", "demo key", NULL,
-          { GPGME_PK_DSA, "2D727CC768697734",
-           "Alfa Test", "demo key", "alfa@example.net", 19, 1 } } } },
-    { NULL }
-  };
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_error_t err;
-  gpgme_ctx_t ctx;
-  gpgme_key_t key;
-  gpgme_keylist_result_t result;
-  int mode;
-  int i = 0;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  mode  = gpgme_get_keylist_mode (ctx);
-  mode |= GPGME_KEYLIST_MODE_SIGS;
-  err = gpgme_set_keylist_mode (ctx, mode);
-  fail_if_err (err);
-
-  err = gpgme_op_keylist_start (ctx, "Alpha", 0);
-  fail_if_err (err);
-    
-  while (!(err = gpgme_op_keylist_next (ctx, &key)))
-    {
-      if (!keys[i].fpr)
-       {
-         fprintf (stderr, "More keys returned than expected\n");
-         exit (1);
-       }
-
-      /* Global key flags.  */
-      if (key->revoked)
-       {
-         fprintf (stderr, "Key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->expired)
-       {
-         fprintf (stderr, "Key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->disabled)
-       {
-         fprintf (stderr, "Key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->invalid)
-       {
-         fprintf (stderr, "Key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (!key->can_encrypt)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for encryption\n");
-         exit (1);
-       }
-      if (!key->can_sign)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for signing\n");
-         exit (1);
-       }
-      if (!key->can_certify)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->secret)
-       {
-         fprintf (stderr, "Key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->protocol != GPGME_PROTOCOL_OpenPGP)
-       {
-         fprintf (stderr, "Key has unexpected protocol: %s\n",
-                  gpgme_get_protocol_name (key->protocol));
-         exit (1);
-       }
-      if (key->issuer_serial)
-       {
-         fprintf (stderr, "Key unexpectedly carries issuer serial: %s\n",
-                  key->issuer_serial);
-         exit (1);
-       }
-      if (key->issuer_name)
-       {
-         fprintf (stderr, "Key unexpectedly carries issuer name: %s\n",
-                  key->issuer_name);
-         exit (1);
-       }
-      if (key->chain_id)
-       {
-         fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
-                  key->chain_id);
-         exit (1);
-       }
-      if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Key has unexpected owner trust: %i\n",
-                  key->owner_trust);
-         exit (1);
-       }
-      if (!key->subkeys || !key->subkeys->next || key->subkeys->next->next)
-       {
-         fprintf (stderr, "Key has unexpected number of subkeys\n");
-         exit (1);
-       }
-
-      /* Primary key.  */
-      if (key->subkeys->revoked)
-       {
-         fprintf (stderr, "Primary key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->subkeys->expired)
-       {
-         fprintf (stderr, "Primary key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->subkeys->disabled)
-       {
-         fprintf (stderr, "Primary key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->subkeys->invalid)
-       {
-         fprintf (stderr, "Primary key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->subkeys->can_encrypt)
-       {
-         fprintf (stderr, "Primary key unexpectedly usable for encryption\n");
-         exit (1);
-       }
-      if (!key->subkeys->can_sign)
-       {
-         fprintf (stderr, "Primary key unexpectedly unusable for signing\n");
-         exit (1);
-       }
-      if (!key->subkeys->can_certify)
-       {
-         fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->subkeys->secret)
-       {
-         fprintf (stderr, "Primary key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->subkeys->pubkey_algo != GPGME_PK_DSA)
-       {
-         fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
-                  gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
-         exit (1);
-       }
-      if (key->subkeys->length != 1024)
-       {
-         fprintf (stderr, "Primary key has unexpected length: %i\n",
-                  key->subkeys->length);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
-       {
-         fprintf (stderr, "Primary key has unexpected key ID: %s\n",
-                  key->subkeys->keyid);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->fpr, keys[i].fpr))
-       {
-         fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
-                  key->subkeys->fpr);
-         exit (1);
-       }
-      if (key->subkeys->expires)
-       {
-         fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
-                  key->subkeys->expires);
-         exit (1);
-       }
-
-      /* Secondary key.  */
-      if (key->subkeys->next->revoked)
-       {
-         fprintf (stderr, "Secondary key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->subkeys->next->expired)
-       {
-         fprintf (stderr, "Secondary key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->subkeys->next->disabled)
-       {
-         fprintf (stderr, "Secondary key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->subkeys->next->invalid)
-       {
-         fprintf (stderr, "Secondary key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (!key->subkeys->next->can_encrypt)
-       {
-         fprintf (stderr, "Secondary key unexpectedly unusable for encryption\n");
-         exit (1);
-       }
-      if (key->subkeys->next->can_sign)
-       {
-         fprintf (stderr, "Secondary key unexpectedly usable for signing\n");
-         exit (1);
-       }
-      if (key->subkeys->next->can_certify)
-       {
-         fprintf (stderr, "Secondary key unexpectedly usable for certifications\n");
-         exit (1);
-       }
-      if (key->subkeys->next->secret)
-       {
-         fprintf (stderr, "Secondary key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->subkeys->next->pubkey_algo != GPGME_PK_ELG_E)
-       {
-         fprintf (stderr, "Secondary key has unexpected public key algo: %s\n",
-                  gpgme_pubkey_algo_name (key->subkeys->next->pubkey_algo));
-         exit (1);
-       }
-      if (key->subkeys->next->length != 1024)
-       {
-         fprintf (stderr, "Secondary key has unexpected length: %i\n",
-                  key->subkeys->next->length);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->next->keyid, keys[i].sec_keyid))
-       {
-         fprintf (stderr, "Secondary key has unexpected key ID: %s\n",
-                  key->subkeys->next->keyid);
-         exit (1);
-       }
-      if (!key->subkeys->next->fpr)
-       {
-         fprintf (stderr, "Secondary key has unexpectedly no fingerprint\n");
-         exit (1);
-       }
-      if (key->subkeys->next->expires)
-       {
-         fprintf (stderr, "Secondary key unexpectedly expires: %lu\n",
-                  key->subkeys->next->expires);
-         exit (1);
-       }
-
-      /* FIXME: The below test will crash if we want to check for a
-        name, comment or email that doesn't exist in the key's user
-        IDs.  */
-      if (!((!keys[i].uid[0].name && !key->uids)
-           || (keys[i].uid[0].name && !keys[i].uid[1].name
-               && key->uids && !key->uids->next)
-           || (keys[i].uid[0].name && keys[i].uid[1].name
-               && !keys[i].uid[2].name
-               && key->uids && key->uids->next && !key->uids->next->next)
-           || (keys[i].uid[0].name && keys[i].uid[1].name
-               && keys[i].uid[2].name
-               && key->uids && key->uids->next && key->uids->next->next
-               && !key->uids->next->next->next)))
-         {
-           fprintf (stderr, "Key has unexpected number of user IDs\n");
-           exit (1);
-         }
-      if (key->uids && key->uids->revoked)
-       {
-         fprintf (stderr, "First user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->invalid)
-       {
-         fprintf (stderr, "First user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
-                  key->uids->validity);
-         exit (1);
-       }
-      if (keys[i].uid[0].name
-         && strcmp (keys[i].uid[0].name, key->uids->name))
-       {
-         fprintf (stderr, "Unexpected name in first user ID: %s\n",
-                  key->uids->name);
-         exit (1);
-       }
-      if (keys[i].uid[0].comment
-         && strcmp (keys[i].uid[0].comment, key->uids->comment))
-       {
-         fprintf (stderr, "Unexpected comment in first user ID: %s\n",
-                  key->uids->comment);
-         exit (1);
-       }
-      if (keys[i].uid[0].email
-         && strcmp (keys[i].uid[0].email, key->uids->email))
-       {
-         fprintf (stderr, "Unexpected email in first user ID: %s\n",
-                  key->uids->email);
-         exit (1);
-       }
-      if (key->uids && (!key->uids->signatures || key->uids->signatures->next))
-       {
-         fprintf (stderr, "First user ID unexpected number of signatures\n");
-         exit (1);
-       }
-      if (keys[i].uid[0].sig.algo != key->uids->signatures->pubkey_algo)
-       {
-         fprintf (stderr, "Unexpected algorithm in first user ID sig: %s\n",
-                  gpgme_pubkey_algo_name (key->uids->signatures->pubkey_algo));
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[0].sig.keyid, key->uids->signatures->keyid))
-       {
-         fprintf (stderr, "Unexpected key ID in first user ID sig: %s\n",
-                  key->uids->signatures->keyid);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[0].sig.name, key->uids->signatures->name))
-       {
-         fprintf (stderr, "Unexpected name in first user ID sig: %s\n",
-                  key->uids->signatures->name);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[0].sig.comment, key->uids->signatures->comment))
-       {
-         fprintf (stderr, "Unexpected comment in first user ID sig: %s\n",
-                  key->uids->signatures->comment);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[0].sig.email, key->uids->signatures->email))
-       {
-         fprintf (stderr, "Unexpected email in first user ID sig: %s\n",
-                  key->uids->signatures->email);
-         exit (1);
-       }
-      if (keys[i].uid[0].sig.sig_class != key->uids->signatures->sig_class)
-       {
-         fprintf (stderr, "Unexpected class in first user ID sig: %i\n",
-                  key->uids->signatures->sig_class);
-         exit (1);
-       }
-      if (keys[i].uid[0].sig.exportable != key->uids->signatures->exportable)
-       {
-         fprintf (stderr, "Unexpected exportable stat in first user ID sig: %i\n",
-                  key->uids->signatures->exportable);
-         exit (1);
-       }
-
-      if (key->uids && key->uids->next && key->uids->next->revoked)
-       {
-         fprintf (stderr, "Second user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->invalid)
-       {
-         fprintf (stderr, "Second user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next
-         && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
-                  key->uids->next->validity);
-         exit (1);
-       }
-      if (keys[i].uid[1].name
-         && strcmp (keys[i].uid[1].name, key->uids->next->name))
-       {
-         fprintf (stderr, "Unexpected name in second user ID: %s\n",
-                  key->uids->next->name);
-         exit (1);
-       }
-      if (keys[i].uid[1].comment
-         && strcmp (keys[i].uid[1].comment, key->uids->next->comment))
-       {
-         fprintf (stderr, "Unexpected comment in second user ID: %s\n",
-                  key->uids->next->comment);
-         exit (1);
-       }
-      if (keys[i].uid[1].email
-         && strcmp (keys[i].uid[1].email, key->uids->next->email))
-       {
-         fprintf (stderr, "Unexpected email in second user ID: %s\n",
-                  key->uids->next->email);
-         exit (1);
-       }
-      /*FIXME: There is a bug in gpg 1.3.4 which duplicates a signaure
-        after importing the secret key.  We disable this test for
-        now. */
-#ifdef __GNUC__
-#warning test disabled due to problems with gpg 1.3.4 generated key
-#endif
-      if (key->uids && (!key->uids->next->signatures /*|| key->uids->next->signatures->next*/))
-       {
-         fprintf (stderr, "Second user ID unexpected number of signatures\n");
-         exit (1);
-       }
-      if (keys[i].uid[1].sig.algo != key->uids->next->signatures->pubkey_algo)
-       {
-         fprintf (stderr, "Unexpected algorithm in second user ID sig: %s\n",
-                  gpgme_pubkey_algo_name (key->uids->next->signatures->pubkey_algo));
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[1].sig.keyid, key->uids->next->signatures->keyid))
-       {
-         fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n",
-                  key->uids->next->signatures->keyid);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[1].sig.name, key->uids->next->signatures->name))
-       {
-         fprintf (stderr, "Unexpected name in second user ID sig: %s\n",
-                  key->uids->next->signatures->name);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[1].sig.comment, key->uids->next->signatures->comment))
-       {
-         fprintf (stderr, "Unexpected comment in second user ID sig: %s\n",
-                  key->uids->next->signatures->comment);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[1].sig.email, key->uids->next->signatures->email))
-       {
-         fprintf (stderr, "Unexpected email in second user ID sig: %s\n",
-                  key->uids->next->signatures->email);
-         exit (1);
-       }
-      if (keys[i].uid[1].sig.sig_class != key->uids->next->signatures->sig_class)
-       {
-         fprintf (stderr, "Unexpected class in second user ID sig: %i\n",
-                  key->uids->next->signatures->sig_class);
-         exit (1);
-       }
-      if (keys[i].uid[1].sig.exportable != key->uids->next->signatures->exportable)
-       {
-         fprintf (stderr, "Unexpected exportable stat in second user ID sig: %i\n",
-                  key->uids->next->signatures->exportable);
-         exit (1);
-       }
-
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->revoked)
-       {
-         fprintf (stderr, "Third user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->invalid)
-       {
-         fprintf (stderr, "Third user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
-                  key->uids->next->next->validity);
-         exit (1);
-       }
-      if (keys[i].uid[2].name
-         && strcmp (keys[i].uid[2].name, key->uids->next->next->name))
-       {
-         fprintf (stderr, "Unexpected name in third user ID: %s\n",
-                  key->uids->next->next->name);
-         exit (1);
-       }
-      if (keys[i].uid[2].comment
-         && strcmp (keys[i].uid[2].comment, key->uids->next->next->comment))
-       {
-         fprintf (stderr, "Unexpected comment in third user ID: %s\n",
-                  key->uids->next->next->comment);
-         exit (1);
-       }
-      if (keys[i].uid[2].email
-         && strcmp (keys[i].uid[2].email, key->uids->next->next->email))
-       {
-         fprintf (stderr, "Unexpected email in third user ID: %s\n",
-                  key->uids->next->next->email);
-         exit (1);
-       }
-      if (key->uids && (!key->uids->next->next->signatures
-                       || key->uids->next->next->signatures->next))
-       {
-         fprintf (stderr, "Third user ID unexpected number of signatures\n");
-         exit (1);
-       }
-      if (keys[i].uid[2].sig.algo != key->uids->next->next->signatures->pubkey_algo)
-       {
-         fprintf (stderr, "Unexpected algorithm in third user ID sig: %s\n",
-                  gpgme_pubkey_algo_name (key->uids->next->next->signatures->pubkey_algo));
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[2].sig.keyid, key->uids->next->next->signatures->keyid))
-       {
-         fprintf (stderr, "Unexpected key ID in third user ID sig: %s\n",
-                  key->uids->next->next->signatures->keyid);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[2].sig.name, key->uids->next->next->signatures->name))
-       {
-         fprintf (stderr, "Unexpected name in third user ID sig: %s\n",
-                  key->uids->next->next->signatures->name);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[2].sig.comment, key->uids->next->next->signatures->comment))
-       {
-         fprintf (stderr, "Unexpected comment in third user ID sig: %s\n",
-                  key->uids->next->next->signatures->comment);
-         exit (1);
-       }
-      if (strcmp (keys[i].uid[2].sig.email, key->uids->next->next->signatures->email))
-       {
-         fprintf (stderr, "Unexpected email in third user ID sig: %s\n",
-                  key->uids->next->next->signatures->email);
-         exit (1);
-       }
-      if (keys[i].uid[2].sig.sig_class != key->uids->next->next->signatures->sig_class)
-       {
-         fprintf (stderr, "Unexpected class in third user ID sig: %i\n",
-                  key->uids->next->next->signatures->sig_class);
-         exit (1);
-       }
-      if (keys[i].uid[2].sig.exportable != key->uids->next->next->signatures->exportable)
-       {
-         fprintf (stderr, "Unexpected exportable stat in third user ID sig: %i\n",
-                  key->uids->next->next->signatures->exportable);
-         exit (1);
-       }
-
-
-
-
-
-      gpgme_key_unref (key);
-      i++;
-    }
-  if (gpg_err_code (err) != GPG_ERR_EOF)
-    fail_if_err (err);
-  err = gpgme_op_keylist_end (ctx);
-  fail_if_err (err);
-
-  result = gpgme_op_keylist_result (ctx);
-  if (result->truncated)
-    {
-      fprintf (stderr, "Key listing unexpectedly truncated\n");
-      exit (1);
-    }
-
-  if (keys[i].fpr)
-    {
-      fprintf (stderr, "Less keys returned than expected\n");
-      exit (1);
-    }
-
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-keylist.c b/tags/gpgme-1-1-1/tests/gpg/t-keylist.c
deleted file mode 100644 (file)
index c8c71d0..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-/* t-keylist.c  - regression test
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-
-struct key_info_s
-{
-  char *fpr;
-  char *sec_keyid;
-  struct
-  {
-    char *name;
-    char *comment;
-    char *email;
-  } uid[3];
-  int n_subkeys;
-  void (*misc_check)(struct key_info_s *keyinfo, gpgme_key_t key);
-};
-
-
-static void check_whisky (struct key_info_s *keyinfo, gpgme_key_t key);
-
-
-\f
-struct key_info_s keys[] =
-  {
-    { "A0FF4590BB6122EDEF6E3C542D727CC768697734", "6AE6D7EE46A871F8",
-      { { "Alfa Test", "demo key", "alfa@example.net" },
-        { "Alpha Test", "demo key", "alpha@example.net" },
-       { "Alice", "demo key", NULL } }, 1 },
-    { "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", "5381EA4EE29BA37F",
-      { { "Bob", "demo key", NULL },
-       { "Bravo Test", "demo key", "bravo@example.net" } }, 1 },
-    { "61EE841A2A27EB983B3B3C26413F4AF31AFDAB6C", "E71E72ACBC43DA60",
-      { { "Charlie Test", "demo key", "charlie@example.net" } }, 1 },
-    { "6560C59C43D031C54D7C588EEBA9F240EB9DC9E6", "06F22880B0C45424",
-      { { "Delta Test", "demo key", "delta@example.net" } }, 1 },
-    { "3531152DE293E26A07F504BC318C1FAEFAEF6D1B", "B5C79E1A7272144D",
-      { { "Echelon", "demo key", NULL },
-       { "Echo Test", "demo key", "echo@example.net" },
-       { "Eve", "demo key", NULL } }, 1 },
-    { "56D33268F7FE693FBB594762D4BF57F37372E243", "0A32EE79EE45198E",
-      { { "Foxtrot Test", "demo key", "foxtrot@example.net" } }, 1 },
-    { "C9C07DCC6621B9FB8D071B1D168410A48FC282E6", "247491CC9DCAD354",
-      { { "Golf Test", "demo key", "golf@example.net" } }, 1 },
-    { "9E91CBB11E4D4135583EF90513DB965534C6E3F1", "76E26537D622AD0A",
-      { { "Hotel Test", "demo key", "hotel@example.net" } }, 1 },
-    { "CD538D6CC9FB3D745ECDA5201FE8FC6F04259677", "C1C8EFDE61F76C73",
-      { { "India Test", "demo key", "india@example.net" } }, 1 },
-    { "F8F1EDC73995AB739AD54B380C820C71D2699313", "BD0B108735F8F136",
-      { { "Juliet Test", "demo key", "juliet@example.net" } }, 1 },
-    { "3FD11083779196C2ECDD9594AD1B0FAD43C2D0C7", "86CBB34A9AF64D02",
-      { { "Kilo Test", "demo key", "kilo@example.net" } }, 1 },
-    { "1DDD28CEF714F5B03B8C246937CAB51FB79103F8", "0363B449FE56350C",
-      { { "Lima Test", "demo key", "lima@example.net" } }, 1 },
-    { "2686AA191A278013992C72EBBE794852BE5CF886", "5F600A834F31EAE8",
-      { { "Mallory", "demo key", NULL },
-       { "Mike Test", "demo key", "mike@example.net" } }, 1 },
-    { "5AB9D6D7BAA1C95B3BAA3D9425B00FD430CEC684", "4C1D63308B70E472",
-      { { "November Test", "demo key", "november@example.net" } }, 1 },
-    { "43929E89F8F79381678CAE515F6356BA6D9732AC", "FF0785712681619F",
-      { { "Oscar Test", "demo key", "oscar@example.net" } }, 1 },
-    { "6FAA9C201E5E26DCBAEC39FD5D15E01D3FF13206", "2764E18263330D9C",
-      { { "Papa test", "demo key", "papa@example.net" } }, 1 },
-    { "A7969DA1C3297AA96D49843F1C67EC133C661C84", "6CDCFC44A029ACF4",
-      { { "Quebec Test", "demo key", "quebec@example.net" } }, 1 },
-    { "38FBE1E4BF6A5E1242C8F6A13BDBEDB1777FBED3", "9FAB805A11D102EA",
-      { { "Romeo Test", "demo key", "romeo@example.net" } }, 1 },
-    { "045B2334ADD69FC221076841A5E67F7FA3AE3EA1", "93B88B0F0F1B50B4",
-      { { "Sierra Test", "demo key", "sierra@example.net" } }, 1 },
-    { "ECAC774F4EEEB0620767044A58CB9A4C85A81F38", "97B60E01101C0402",
-      { { "Tango Test", "demo key", "tango@example.net" } }, 1 },
-    { "0DBCAD3F08843B9557C6C4D4A94C0F75653244D6", "93079B915522BDB9",
-      { { "Uniform Test", "demo key", "uniform@example.net" } }, 1 },
-    { "E8143C489C8D41124DC40D0B47AF4B6961F04784", "04071FB807287134",
-      { { "Victor Test", "demo key", "victor@example.org" } }, 1 },
-    { "E8D6C90B683B0982BD557A99DEF0F7B8EC67DBDE", "D7FBB421FD6E27F6",
-      { { "Whisky Test", "demo key", "whisky@example.net" } }, 3,
-          check_whisky },
-    { "04C1DF62EFA0EBB00519B06A8979A6C5567FB34A", "5CC6F87F41E408BE",
-      { { "XRay Test", "demo key", "xray@example.net" } }, 1 },
-    { "ED9B316F78644A58D042655A9EEF34CD4B11B25F", "5ADFD255F7B080AD",
-      { { "Yankee Test", "demo key", "yankee@example.net" } }, 1 },
-    { "23FD347A419429BACCD5E72D6BC4778054ACD246", "EF9DC276A172C881",
-      { { "Zulu Test", "demo key", "zulu@example.net" } }, 1 },
-    { "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", "087DD7E0381701C4",
-      { { "Joe Random Hacker", "test key with passphrase \"x\"",
-         "joe@setq.org" } }, 1 },
-    { NULL }
-  };
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_error_t err;
-  gpgme_ctx_t ctx;
-  gpgme_key_t key;
-  gpgme_keylist_result_t result;
-  int i = 0;
-  int n;
-  gpgme_subkey_t subkey;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  err = gpgme_op_keylist_start (ctx, NULL, 0);
-  fail_if_err (err);
-    
-  while (!(err = gpgme_op_keylist_next (ctx, &key)))
-    {
-      if (!keys[i].fpr)
-       {
-         fprintf (stderr, "More keys returned than expected\n");
-         exit (1);
-       }
-
-      /* Global key flags.  */
-      if (key->revoked)
-       {
-         fprintf (stderr, "Key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->expired)
-       {
-         fprintf (stderr, "Key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->disabled)
-       {
-         fprintf (stderr, "Key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->invalid)
-       {
-         fprintf (stderr, "Key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (!key->can_encrypt)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for encryption\n");
-         exit (1);
-       }
-      if (!key->can_sign)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for signing\n");
-         exit (1);
-       }
-      if (!key->can_certify)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->secret)
-       {
-         fprintf (stderr, "Key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->protocol != GPGME_PROTOCOL_OpenPGP)
-       {
-         fprintf (stderr, "Key has unexpected protocol: %s\n",
-                  gpgme_get_protocol_name (key->protocol));
-         exit (1);
-       }
-      if (key->issuer_serial)
-       {
-         fprintf (stderr, "Key unexpectedly carries issuer serial: %s\n",
-                  key->issuer_serial);
-         exit (1);
-       }
-      if (key->issuer_name)
-       {
-         fprintf (stderr, "Key unexpectedly carries issuer name: %s\n",
-                  key->issuer_name);
-         exit (1);
-       }
-      if (key->chain_id)
-       {
-         fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
-                  key->chain_id);
-         exit (1);
-       }
-      if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Key has unexpected owner trust: %i\n",
-                  key->owner_trust);
-         exit (1);
-       }
-
-      for (n=0, subkey = key->subkeys; subkey; subkey = subkey->next) 
-        n++;
-      if (!n || n-1 != keys[i].n_subkeys)
-       {
-         fprintf (stderr, "Key `%s' has unexpected number of subkeys\n",
-                   keys[i].uid[0].name);
-         exit (1);
-       }
-
-      /* Primary key.  */
-      if (key->subkeys->revoked)
-       {
-         fprintf (stderr, "Primary key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->subkeys->expired)
-       {
-         fprintf (stderr, "Primary key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->subkeys->disabled)
-       {
-         fprintf (stderr, "Primary key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->subkeys->invalid)
-       {
-         fprintf (stderr, "Primary key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->subkeys->can_encrypt)
-       {
-         fprintf (stderr, "Primary key unexpectedly usable for encryption\n");
-         exit (1);
-       }
-      if (!key->subkeys->can_sign)
-       {
-         fprintf (stderr, "Primary key unexpectedly unusable for signing\n");
-         exit (1);
-       }
-      if (!key->subkeys->can_certify)
-       {
-         fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->subkeys->secret)
-       {
-         fprintf (stderr, "Primary key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->subkeys->pubkey_algo != GPGME_PK_DSA)
-       {
-         fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
-                  gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
-         exit (1);
-       }
-      if (key->subkeys->length != 1024)
-       {
-         fprintf (stderr, "Primary key has unexpected length: %i\n",
-                  key->subkeys->length);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
-       {
-         fprintf (stderr, "Primary key `%s' has unexpected key ID: %s\n",
-                  keys[i].uid[0].name, key->subkeys->keyid);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->fpr, keys[i].fpr))
-       {
-         fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
-                  key->subkeys->fpr);
-         exit (1);
-       }
-      if (key->subkeys->expires)
-       {
-         fprintf (stderr, "Primary key `%s' unexpectedly expires: %lu\n",
-                  keys[i].uid[0].name, key->subkeys->expires);
-         exit (1);
-       }
-
-      /* Secondary key.  */
-      if (key->subkeys->next->revoked)
-       {
-         fprintf (stderr, "Secondary key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->subkeys->next->expired)
-       {
-         fprintf (stderr, "Secondary key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->subkeys->next->disabled)
-       {
-         fprintf (stderr, "Secondary key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->subkeys->next->invalid)
-       {
-         fprintf (stderr, "Secondary key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (!key->subkeys->next->can_encrypt)
-       {
-         fprintf (stderr, "Secondary key unexpectedly unusable for encryption\n");
-         exit (1);
-       }
-      if (key->subkeys->next->can_sign)
-       {
-         fprintf (stderr, "Secondary key unexpectedly usable for signing\n");
-         exit (1);
-       }
-      if (key->subkeys->next->can_certify)
-       {
-         fprintf (stderr, "Secondary key unexpectedly usable for certifications\n");
-         exit (1);
-       }
-      if (key->subkeys->next->secret)
-       {
-         fprintf (stderr, "Secondary key unexpectedly secret\n");
-         exit (1);
-       }
-      if (key->subkeys->next->pubkey_algo != GPGME_PK_ELG_E)
-       {
-         fprintf (stderr, "Secondary key has unexpected public key algo: %s\n",
-                  gpgme_pubkey_algo_name (key->subkeys->next->pubkey_algo));
-         exit (1);
-       }
-      if (key->subkeys->next->length != 1024)
-       {
-         fprintf (stderr, "Secondary key has unexpected length: %i\n",
-                  key->subkeys->next->length);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->next->keyid, keys[i].sec_keyid))
-       {
-         fprintf (stderr, "Secondary key `%s' has unexpected key ID: %s/%s\n",
-                  keys[i].uid[0].name,
-                   key->subkeys->next->keyid, keys[i].sec_keyid );
-         exit (1);
-       }
-      if (!key->subkeys->next->fpr)
-       {
-         fprintf (stderr, "Secondary key has unexpectedly no fingerprint\n");
-         exit (1);
-       }
-      if (key->subkeys->next->expires)
-       {
-         fprintf (stderr, "Secondary key unexpectedly expires: %lu\n",
-                  key->subkeys->next->expires);
-         exit (1);
-       }
-
-      /* FIXME: The below test will crash if we want to check for a
-        name, comment or email that doesn't exist in the key's user
-        IDs.  */
-      if (!((!keys[i].uid[0].name && !key->uids)
-           || (keys[i].uid[0].name && !keys[i].uid[1].name
-               && key->uids && !key->uids->next)
-           || (keys[i].uid[0].name && keys[i].uid[1].name
-               && !keys[i].uid[2].name
-               && key->uids && key->uids->next && !key->uids->next->next)
-           || (keys[i].uid[0].name && keys[i].uid[1].name
-               && keys[i].uid[2].name
-               && key->uids && key->uids->next && key->uids->next->next
-               && !key->uids->next->next->next)))
-         {
-           fprintf (stderr, "Key has unexpected number of user IDs\n");
-           exit (1);
-         }
-      if (key->uids && key->uids->revoked)
-       {
-         fprintf (stderr, "First user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->invalid)
-       {
-         fprintf (stderr, "First user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "First user ID has unexpectedly validity: %i\n",
-                  key->uids->validity);
-         exit (1);
-       }
-      if (key->uids && key->uids->signatures)
-       {
-         fprintf (stderr, "First user ID unexpectedly signed\n");
-         exit (1);
-       }
-      if (keys[i].uid[0].name
-         && strcmp (keys[i].uid[0].name, key->uids->name))
-       {
-         fprintf (stderr, "Unexpected name in first user ID: %s\n",
-                  key->uids->name);
-         exit (1);
-       }
-      if (keys[i].uid[0].comment
-         && strcmp (keys[i].uid[0].comment, key->uids->comment))
-       {
-         fprintf (stderr, "Unexpected comment in first user ID: %s\n",
-                  key->uids->comment);
-         exit (1);
-       }
-      if (keys[i].uid[0].email
-         && strcmp (keys[i].uid[0].email, key->uids->email))
-       {
-         fprintf (stderr, "Unexpected email in first user ID: %s\n",
-                  key->uids->email);
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->revoked)
-       {
-         fprintf (stderr, "Second user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->invalid)
-       {
-         fprintf (stderr, "Second user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next
-         && key->uids->next->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Second user ID has unexpectedly validity: %i\n",
-                  key->uids->next->validity);
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->signatures)
-       {
-         fprintf (stderr, "Second user ID unexpectedly signed\n");
-         exit (1);
-       }
-      if (keys[i].uid[1].name
-         && strcmp (keys[i].uid[1].name, key->uids->next->name))
-       {
-         fprintf (stderr, "Unexpected name in second user ID: %s\n",
-                  key->uids->next->name);
-         exit (1);
-       }
-      if (keys[i].uid[1].comment
-         && strcmp (keys[i].uid[1].comment, key->uids->next->comment))
-       {
-         fprintf (stderr, "Unexpected comment in second user ID: %s\n",
-                  key->uids->next->comment);
-         exit (1);
-       }
-      if (keys[i].uid[1].email
-         && strcmp (keys[i].uid[1].email, key->uids->next->email))
-       {
-         fprintf (stderr, "Unexpected email in second user ID: %s\n",
-                  key->uids->next->email);
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->revoked)
-       {
-         fprintf (stderr, "Third user ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->invalid)
-       {
-         fprintf (stderr, "Third user ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->validity != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Third user ID has unexpectedly validity: %i\n",
-                  key->uids->next->next->validity);
-         exit (1);
-       }
-      if (key->uids && key->uids->next && key->uids->next->next
-         && key->uids->next->next->signatures)
-       {
-         fprintf (stderr, "Third user ID unexpectedly signed\n");
-         exit (1);
-       }
-      if (keys[i].uid[2].name
-         && strcmp (keys[i].uid[2].name, key->uids->next->next->name))
-       {
-         fprintf (stderr, "Unexpected name in third user ID: %s\n",
-                  key->uids->next->next->name);
-         exit (1);
-       }
-      if (keys[i].uid[2].comment
-         && strcmp (keys[i].uid[2].comment, key->uids->next->next->comment))
-       {
-         fprintf (stderr, "Unexpected comment in third user ID: %s\n",
-                  key->uids->next->next->comment);
-         exit (1);
-       }
-      if (keys[i].uid[2].email
-         && strcmp (keys[i].uid[2].email, key->uids->next->next->email))
-       {
-         fprintf (stderr, "Unexpected email in third user ID: %s\n",
-                  key->uids->next->next->email);
-         exit (1);
-       }
-
-      if (keys[i].misc_check)
-        keys[i].misc_check (keys+i, key);
-
-      gpgme_key_unref (key);
-      i++;
-    }
-  if (gpg_err_code (err) != GPG_ERR_EOF)
-    fail_if_err (err);
-  err = gpgme_op_keylist_end (ctx);
-  fail_if_err (err);
-
-  result = gpgme_op_keylist_result (ctx);
-  if (result->truncated)
-    {
-      fprintf (stderr, "Key listing unexpectedly truncated\n");
-      exit (1);
-    }
-
-  if (keys[i].fpr)
-    {
-      fprintf (stderr, "Less keys returned than expected\n");
-      exit (1);
-    }
-
-  gpgme_release (ctx);
-  return 0;
-}
-
-
-
-/* Check expration of keys.  This test assumes three subkeys of which
-   2 are expired; it is used with the "Whisky" test key.  It has
-   already been checked that these 3 subkeys are available. */
-static void
-check_whisky (struct key_info_s *keyinfo, gpgme_key_t key)
-{
-  const char *name = keyinfo->uid[0].name;
-  gpgme_subkey_t sub1, sub2;
-  
-  sub1 = key->subkeys->next->next;
-  sub2 = sub1->next;
-
-  if (!sub1->expired || !sub2->expired)
-    {
-      fprintf (stderr, "Subkey of `%s' not flagged as expired\n", name);
-      exit (1);
-    }
-  if (sub1->expires != 1129636886 || sub2->expires != 1129636939)
-    {
-      fprintf (stderr, "Subkey of `%s' has wrong expiration date\n", name);
-      exit (1);
-    }
-
-}
-
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-sig-notation.c b/tags/gpgme-1-1-1/tests/gpg/t-sig-notation.c
deleted file mode 100644 (file)
index 7345a52..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-/* t-sig-notation.c - Regression test.
-   Copyright (C) 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static struct {
-  const char *name;
-  const char *value;
-  gpgme_sig_notation_flags_t flags;
-  int seen;
-} expected_notations[] = { 
-  { "laughing@me",
-    "Just Squeeze Me",
-    GPGME_SIG_NOTATION_HUMAN_READABLE },
-  { "preferred-email-encoding@pgp.com",
-    "pgpmime",
-    GPGME_SIG_NOTATION_HUMAN_READABLE | GPGME_SIG_NOTATION_CRITICAL },
-  { NULL, 
-    "http://www.gnu.org/policy/",
-    0 }
-};
-
-static void
-check_result (gpgme_verify_result_t result)
-{
-  int i;
-  gpgme_sig_notation_t r;
-  
-  gpgme_signature_t sig;
-
-  sig = result->signatures;
-  if (!sig || sig->next)
-    {
-      fprintf (stderr, "%s:%i: Unexpected number of signatures\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-
-  for (i=0; i < DIM(expected_notations); i++ )
-    expected_notations[i].seen = 0;
-  
-  for (r = result->signatures->notations; r; r = r->next)
-    {
-      int any = 0;
-      for (i=0; i < DIM(expected_notations); i++)
-       {
-         if ( ((r->name && expected_notations[i].name
-                && !strcmp (r->name, expected_notations[i].name)
-                && r->name_len
-                == strlen (expected_notations[i].name))
-               || (!r->name && !expected_notations[i].name
-                   && r->name_len == 0))
-              && r->value
-              && !strcmp (r->value, expected_notations[i].value)
-              && r->value_len == strlen (expected_notations[i].value)
-              && r->flags
-              == (expected_notations[i].flags & ~GPGME_SIG_NOTATION_CRITICAL)
-              && r->human_readable
-              == !!(r->flags & GPGME_SIG_NOTATION_HUMAN_READABLE)
-              && r->critical == 0)
-           {
-             expected_notations[i].seen++;
-             any++;
-           }
-       }
-      if (!any)
-       {
-         fprintf (stderr, "%s:%i: Unexpected notation data\n",
-                  __FILE__, __LINE__);
-         exit (1);
-       }
-    }
-  for (i=0; i < DIM(expected_notations); i++ )
-    {
-      if (expected_notations[i].seen != 1)
-       {
-         fprintf (stderr, "%s:%i: Missing or duplicate notation data\n",
-                  __FILE__, __LINE__);
-         exit (1);
-       }
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_verify_result_t result;
-  char *agent_info;
-  int i;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  agent_info = getenv ("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  for (i = 0; i < sizeof (expected_notations) / sizeof (expected_notations[0]);
-       i++)
-    {
-      err = gpgme_sig_notation_add (ctx, expected_notations[i].name,
-                                   expected_notations[i].value,
-                                   expected_notations[i].flags);
-      fail_if_err (err);
-    }
-  
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_NORMAL);
-  fail_if_err (err);
-
-  gpgme_data_release (in);
-  err = gpgme_data_new (&in);
-  fail_if_err (err);
-
-  gpgme_data_seek (out, 0, SEEK_SET);
-
-  err = gpgme_op_verify (ctx, out, NULL, in);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result);
-
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-sign.c b/tags/gpgme-1-1-1/tests/gpg/t-sign.c
deleted file mode 100644 (file)
index 3b71dc4..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* t-sign.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static void
-check_result (gpgme_sign_result_t result, gpgme_sig_mode_t type)
-{
-  if (result->invalid_signers)
-    {
-      fprintf (stderr, "Invalid signer found: %s\n",
-              result->invalid_signers->fpr);
-      exit (1);
-    }
-  if (!result->signatures || result->signatures->next)
-    {
-      fprintf (stderr, "Unexpected number of signatures created\n");
-      exit (1);
-    }
-  if (result->signatures->type != type)
-    {
-      fprintf (stderr, "Wrong type of signature created\n");
-      exit (1);
-    }
-  if (result->signatures->pubkey_algo != GPGME_PK_DSA)
-    {
-      fprintf (stderr, "Wrong pubkey algorithm reported: %i\n",
-              result->signatures->pubkey_algo);
-      exit (1);
-    }
-  if (result->signatures->hash_algo != GPGME_MD_SHA1)
-    {
-      fprintf (stderr, "Wrong hash algorithm reported: %i\n",
-              result->signatures->hash_algo);
-      exit (1);
-    }
-  if (result->signatures->sig_class != 1)
-    {
-      fprintf (stderr, "Wrong signature class reported: %u\n",
-              result->signatures->sig_class);
-      exit (1);
-    }
-  if (strcmp ("A0FF4590BB6122EDEF6E3C542D727CC768697734",
-             result->signatures->fpr))
-    {
-      fprintf (stderr, "Wrong fingerprint reported: %s\n",
-              result->signatures->fpr);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_sign_result_t result;
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  agent_info = getenv ("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  gpgme_set_textmode (ctx, 1);
-  gpgme_set_armor (ctx, 1);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  /* First a normal signature.  */
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_NORMAL);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_NORMAL);
-  print_data (out);
-  gpgme_data_release (out);
-    
-  /* Now a detached signature.  */ 
-  gpgme_data_seek (in, 0, SEEK_SET);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_DETACH);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_DETACH);
-  print_data (out);
-  gpgme_data_release (out);
-
-  /* And finally a cleartext signature.  */
-  gpgme_data_seek (in, 0, SEEK_SET);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_CLEAR);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_CLEAR);
-  print_data (out);
-  gpgme_data_release (out);
-
-  gpgme_data_release (in);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-signers.c b/tags/gpgme-1-1-1/tests/gpg/t-signers.c
deleted file mode 100644 (file)
index c75c1d4..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/* t-signers.c - Regression tests for the multiple signers interface.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static void
-check_result (gpgme_sign_result_t result, gpgme_sig_mode_t type)
-{
-  gpgme_new_signature_t signature;
-
-  if (result->invalid_signers)
-    {
-      fprintf (stderr, "Invalid signer found: %s\n",
-              result->invalid_signers->fpr);
-      exit (1);
-    }
-  if (!result->signatures || !result->signatures->next
-      || result->signatures->next->next)
-    {
-      fprintf (stderr, "Unexpected number of signatures created\n");
-      exit (1);
-    }
-
-  signature = result->signatures;
-  while (signature)
-    {
-      if (signature->type != type)
-       {
-         fprintf (stderr, "Wrong type of signature created\n");
-         exit (1);
-       }
-      if (signature->pubkey_algo != GPGME_PK_DSA)
-       {
-         fprintf (stderr, "Wrong pubkey algorithm reported: %i\n",
-                  signature->pubkey_algo);
-         exit (1);
-       }
-      if (signature->hash_algo != GPGME_MD_SHA1)
-       {
-         fprintf (stderr, "Wrong hash algorithm reported: %i\n",
-                  signature->hash_algo);
-         exit (1);
-       }
-      if (signature->sig_class != 1)
-       {
-         fprintf (stderr, "Wrong signature class reported: %u\n",
-                  signature->sig_class);
-         exit (1);
-       }
-      if (strcmp ("A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                  signature->fpr)
-         && strcmp ("23FD347A419429BACCD5E72D6BC4778054ACD246",
-                    signature->fpr))
-       {
-         fprintf (stderr, "Wrong fingerprint reported: %s\n",
-                  signature->fpr);
-         exit (1);
-       }
-      signature = signature->next;
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[2];
-  gpgme_sign_result_t result;
-  char *agent_info;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  agent_info = getenv("GPG_AGENT_INFO");
-  if (!(agent_info && strchr (agent_info, ':')))
-    gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-  gpgme_set_textmode (ctx, 1);
-  gpgme_set_armor (ctx, 1);
-
-  err = gpgme_op_keylist_start (ctx, NULL, 1);
-  fail_if_err (err);
-  err = gpgme_op_keylist_next (ctx, &key[0]);
-  fail_if_err (err);
-  err = gpgme_op_keylist_next (ctx, &key[1]);
-  fail_if_err (err);
-  err = gpgme_op_keylist_end (ctx);
-  fail_if_err (err);
-
-  err = gpgme_signers_add (ctx, key[0]);
-  fail_if_err (err);
-  err = gpgme_signers_add (ctx, key[1]);
-  fail_if_err (err);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  /* First a normal signature.  */
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_NORMAL);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_NORMAL);
-  print_data (out);
-  gpgme_data_release (out);
-  
-  /* Now a detached signature.  */
-  gpgme_data_seek (in, 0, SEEK_SET);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_DETACH);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_DETACH);
-  print_data (out);
-  gpgme_data_release (out);
-    
-  /* And finally a cleartext signature.  */
-  gpgme_data_seek (in, 0, SEEK_SET);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_CLEAR);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_CLEAR);
-  print_data (out);  
-  gpgme_data_release (out);
-  gpgme_data_seek (in, 0, SEEK_SET);
-      
-  gpgme_data_release (in);
-  gpgme_release (ctx);
-
-  gpgme_key_unref (key[0]);
-  gpgme_key_unref (key[1]);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-support.h b/tags/gpgme-1-1-1/tests/gpg/t-support.h
deleted file mode 100644 (file)
index 0ed1ac8..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* t-support.h - Helper routines for regression tests.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#include <unistd.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <locale.h>
-
-#include <gpgme.h>
-
-#ifndef DIM
-#define DIM(v)              (sizeof(v)/sizeof((v)[0]))
-#endif
-
-#define fail_if_err(err)                                       \
-  do                                                           \
-    {                                                          \
-      if (err)                                                 \
-        {                                                      \
-          fprintf (stderr, "%s:%d: %s: %s\n",                  \
-                   __FILE__, __LINE__, gpgme_strsource (err),  \
-                  gpgme_strerror (err));                       \
-          exit (1);                                            \
-        }                                                      \
-    }                                                          \
-  while (0)
-
-
-void
-print_data (gpgme_data_t dh)
-{
-#define BUF_SIZE 512
-  char buf[BUF_SIZE + 1];
-  int ret;
-  
-  ret = gpgme_data_seek (dh, 0, SEEK_SET);
-  if (ret)
-    fail_if_err (gpgme_err_code_from_errno (errno));
-  while ((ret = gpgme_data_read (dh, buf, BUF_SIZE)) > 0)
-    fwrite (buf, ret, 1, stdout);
-  if (ret < 0)
-    fail_if_err (gpgme_err_code_from_errno (errno));
-}
-
-
-gpgme_error_t
-passphrase_cb (void *opaque, const char *uid_hint, const char *passphrase_info,
-              int last_was_bad, int fd)
-{
-  write (fd, "abc\n", 4);
-  return 0;
-}
-
-
-char *
-make_filename (const char *fname)
-{
-  const char *srcdir = getenv ("srcdir");
-  char *buf;
-
-  if (!srcdir)
-    srcdir = ".";
-  buf = malloc (strlen(srcdir) + strlen(fname) + 2);
-  if (!buf) 
-    exit (8);
-  strcpy (buf, srcdir);
-  strcat (buf, "/");
-  strcat (buf, fname);
-  return buf;
-}
-
-
-void
-init_gpgme (gpgme_protocol_t proto)
-{
-  gpgme_error_t err;
-
-  gpgme_check_version (NULL);
-  setlocale (LC_ALL, "");
-  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
-#ifndef HAVE_W32_SYSTEM
-  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
-#endif
-
-  err = gpgme_engine_check_version (proto);
-  fail_if_err (err);
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-thread1.c b/tags/gpgme-1-1-1/tests/gpg/t-thread1.c
deleted file mode 100644 (file)
index 86ea51a..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/* t-thread1.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <pthread.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-#define ROUNDS 20
-
-\f
-void *
-thread_one (void *name)
-{
-  int i;
-
-  for (i = 0; i < ROUNDS; i++)
-    {
-      gpgme_ctx_t ctx;
-      gpgme_error_t err;
-      gpgme_data_t in, out;
-      gpgme_key_t key[3] = { NULL, NULL, NULL };
-      gpgme_encrypt_result_t result;
-
-      err = gpgme_new (&ctx);
-      fail_if_err (err);
-      gpgme_set_armor (ctx, 1);
-
-      err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-      fail_if_err (err);
-
-      err = gpgme_data_new (&out);
-      fail_if_err (err);
-
-      err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-                          &key[0], 0);
-      fail_if_err (err);
-      err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
-                          &key[1], 0);
-      fail_if_err (err);
-      
-      err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
-      fail_if_err (err);
-      result = gpgme_op_encrypt_result (ctx);
-      if (result->invalid_recipients)
-       {
-         fprintf (stderr, "Invalid recipient encountered: %s\n",
-                  result->invalid_recipients->fpr);
-         exit (1);
-       }
-      printf ("Encrypt %s %i\n", (char *) name, i);
-
-      gpgme_key_unref (key[0]);
-      gpgme_key_unref (key[1]);
-      gpgme_data_release (in);
-      gpgme_data_release (out);
-      gpgme_release (ctx);
-    }
-  return NULL;
-}
-
-
-void *
-thread_two (void *name)
-{
-  int i;
-  const char *cipher_1_asc = make_filename ("cipher-1.asc");
-  char *agent_info;
-
-  agent_info = getenv("GPG_AGENT_INFO");
-
-  for (i = 0; i < ROUNDS; i++)
-    {
-      gpgme_ctx_t ctx;
-      gpgme_error_t err;
-      gpgme_data_t in, out;
-      gpgme_decrypt_result_t result;
-
-      init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-      err = gpgme_new (&ctx);
-      fail_if_err (err);
-
-      if (!(agent_info && strchr (agent_info, ':')))
-       gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
-
-      err = gpgme_data_new_from_file (&in, cipher_1_asc, 1);
-      fail_if_err (err);
-
-      err = gpgme_data_new (&out);
-      fail_if_err (err);
-      
-      err = gpgme_op_decrypt (ctx, in, out);
-      fail_if_err (err);
-      result = gpgme_op_decrypt_result (ctx);
-      if (result->unsupported_algorithm)
-       {
-         fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
-                  __FILE__, __LINE__, result->unsupported_algorithm);
-         exit (1);
-       }
-      printf ("Decrypt %s %i\n", (char *) name, i);
-   
-      gpgme_data_release (in);
-      gpgme_data_release (out);
-      gpgme_release (ctx);
-    }
-  return NULL;
-}
-
-int 
-main (int argc, char *argv[])
-{
-  pthread_t tone;
-  pthread_t ttwo;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  pthread_create (&tone, NULL, thread_one, "A");
-  pthread_create (&ttwo, NULL, thread_two, "B");
-
-  pthread_join (tone, NULL);
-  pthread_join (ttwo, NULL);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-trustlist.c b/tags/gpgme-1-1-1/tests/gpg/t-trustlist.c
deleted file mode 100644 (file)
index 7707639..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* t-trustlist.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_trust_item_t item;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  err = gpgme_op_trustlist_start (ctx, "alice", 0);
-  fail_if_err (err);
-
-  while (!(err = gpgme_op_trustlist_next (ctx, &item)))
-    {
-      printf ("l=%d k=%s t=%d o=%s v=%s u=%s\n",
-             item->level, item->keyid, item->type, item->owner_trust,
-             item->validity, item->name);
-      gpgme_trust_item_unref (item);
-    }
-  if (gpg_err_code (err) != GPG_ERR_EOF)
-    fail_if_err (err);
-
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-verify.c b/tags/gpgme-1-1-1/tests/gpg/t-verify.c
deleted file mode 100644 (file)
index 22f0477..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/* t-verify.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static const char test_text1[] = "Just GNU it!\n";
-static const char test_text1f[]= "Just GNU it?\n";
-static const char test_sig1[] =
-#if 0
-"-----BEGIN PGP SIGNATURE-----\n"
-"\n"
-"iEYEABECAAYFAjoKgjIACgkQLXJ8x2hpdzQMSwCeO/xUrhysZ7zJKPf/FyXA//u1\n"
-"ZgIAn0204PBR7yxSdQx6CFxugstNqmRv\n"
-"=yku6\n"
-"-----END PGP SIGNATURE-----\n"
-#elif 0
-"-----BEGIN PGP SIGNATURE-----\n"
-"Version: GnuPG v1.0.4-2 (GNU/Linux)\n"
-"Comment: For info see http://www.gnupg.org\n"
-"\n"
-"iJcEABECAFcFAjoS8/E1FIAAAAAACAAkZm9vYmFyLjF0aGlzIGlzIGEgbm90YXRp\n"
-"b24gZGF0YSB3aXRoIDIgbGluZXMaGmh0dHA6Ly93d3cuZ3Uub3JnL3BvbGljeS8A\n"
-"CgkQLXJ8x2hpdzQLyQCbBW/fgU8ZeWSlWPM1F8umHX17bAAAoIfSNDSp5zM85XcG\n"
-"iwxMrf+u8v4r\n"
-"=88Zo\n"
-"-----END PGP SIGNATURE-----\n"
-#elif 1
-"-----BEGIN PGP SIGNATURE-----\n"
-"\n"
-"iN0EABECAJ0FAjoS+i9FFIAAAAAAAwA5YmFyw7bDpMO8w58gZGFzIHdhcmVuIFVt\n"
-"bGF1dGUgdW5kIGpldHp0IGVpbiBwcm96ZW50JS1aZWljaGVuNRSAAAAAAAgAJGZv\n"
-"b2Jhci4xdGhpcyBpcyBhIG5vdGF0aW9uIGRhdGEgd2l0aCAyIGxpbmVzGhpodHRw\n"
-"Oi8vd3d3Lmd1Lm9yZy9wb2xpY3kvAAoJEC1yfMdoaXc0JBIAoIiLlUsvpMDOyGEc\n"
-"dADGKXF/Hcb+AKCJWPphZCphduxSvrzH0hgzHdeQaA==\n"
-"=nts1\n"
-"-----END PGP SIGNATURE-----\n"
-#endif
-;
-static const char test_sig2[] =
-"-----BEGIN PGP MESSAGE-----\n"
-"\n"
-"owGbwMvMwCSoW1RzPCOz3IRxjXQSR0lqcYleSUWJTZOvjVdpcYmCu1+oQmaJIleH\n"
-"GwuDIBMDGysTSIqBi1MApi+nlGGuwDeHao53HBr+FoVGP3xX+kvuu9fCMJvl6IOf\n"
-"y1kvP4y+8D5a11ang0udywsA\n"
-"=Crq6\n"
-"-----END PGP MESSAGE-----\n";
-
-
-static void
-check_result (gpgme_verify_result_t result, unsigned int summary, char *fpr,
-             gpgme_error_t status, int notation)
-{
-  gpgme_signature_t sig;
-
-  sig = result->signatures;
-  if (!sig || sig->next)
-    {
-      fprintf (stderr, "%s:%i: Unexpected number of signatures\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->summary != summary)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature summary: "
-               "want=0x%x have=0x%x\n",
-              __FILE__, __LINE__, summary, sig->summary);
-      exit (1);
-    }
-  if (strcmp (sig->fpr, fpr))
-    {
-      fprintf (stderr, "%s:%i: Unexpected fingerprint: %s\n",
-              __FILE__, __LINE__, sig->fpr);
-      exit (1);
-    }
-  if (gpg_err_code (sig->status) != status)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature status: %s\n",
-              __FILE__, __LINE__, gpg_strerror (sig->status));
-      exit (1);
-    }
-  if (notation)
-    {
-      static struct {
-        const char *name;
-        const char *value;
-        int seen;
-      } expected_notations[] = {
-        { "bar",
-         "\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x9f"
-          " das waren Umlaute und jetzt ein prozent%-Zeichen" },
-        { "foobar.1",
-         "this is a notation data with 2 lines" },
-        { NULL, 
-         "http://www.gu.org/policy/" }
-      };
-      int i;
-      gpgme_sig_notation_t r;
-
-      for (i=0; i < DIM(expected_notations); i++ )
-        expected_notations[i].seen = 0;
-
-      for (r = sig->notations; r; r = r->next)
-        {
-          int any = 0;
-          for (i=0; i < DIM(expected_notations); i++)
-            {
-              if ( ((r->name && expected_notations[i].name
-                     && !strcmp (r->name, expected_notations[i].name)
-                    && r->name_len
-                    == strlen (expected_notations[i].name))
-                    || (!r->name && !expected_notations[i].name
-                       && r->name_len == 0))
-                   && r->value
-                   && !strcmp (r->value, expected_notations[i].value)
-                  && r->value_len == strlen (expected_notations[i].value))
-                {
-                  expected_notations[i].seen++;
-                  any++;
-                }
-            }
-          if (!any)
-            {
-              fprintf (stderr, "%s:%i: Unexpected notation data\n",
-                       __FILE__, __LINE__);
-              exit (1);
-            }
-        }
-      for (i=0; i < DIM(expected_notations); i++ )
-        {
-          if (expected_notations[i].seen != 1)
-            {
-              fprintf (stderr, "%s:%i: Missing or duplicate notation data\n",
-                       __FILE__, __LINE__);
-              exit (1);
-            }
-        }
-    }
-  if (sig->wrong_key_usage)
-    {
-      fprintf (stderr, "%s:%i: Unexpectedly wrong key usage\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->validity != GPGME_VALIDITY_UNKNOWN)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity: %i\n",
-              __FILE__, __LINE__, sig->validity);
-      exit (1);
-    }
-  if (gpg_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity reason: %s\n",
-              __FILE__, __LINE__, gpgme_strerror (sig->validity_reason));
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t sig, text;
-  gpgme_verify_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  /* Checking a valid message.  */
-  err = gpgme_data_new_from_mem (&text, test_text1, strlen (test_text1), 0);
-  fail_if_err (err);
-  err = gpgme_data_new_from_mem (&sig, test_sig1, strlen (test_sig1), 0);
-  fail_if_err (err);
-  err = gpgme_op_verify (ctx, sig, text, NULL);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-               GPG_ERR_NO_ERROR, 1);
-
-  /* Checking a manipulated message.  */
-  gpgme_data_release (text);
-  err = gpgme_data_new_from_mem (&text, test_text1f, strlen (test_text1f), 0);
-  fail_if_err (err);
-  gpgme_data_seek (sig, 0, SEEK_SET);
-  err = gpgme_op_verify (ctx, sig, text, NULL);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result, GPGME_SIGSUM_RED, "2D727CC768697734",
-               GPG_ERR_BAD_SIGNATURE, 0);
-
-  /* Checking a normal signature.  */
-  gpgme_data_release (sig);
-  gpgme_data_release (text);
-  err = gpgme_data_new_from_mem (&sig, test_sig2, strlen (test_sig2), 0);
-  fail_if_err (err);
-  err = gpgme_data_new (&text);
-  fail_if_err (err);
-  err = gpgme_op_verify (ctx, sig, NULL, text);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result, 0, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
-               GPG_ERR_NO_ERROR, 0);
-
-  gpgme_data_release (sig);
-  gpgme_data_release (text);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpg/t-wait.c b/tags/gpgme-1-1-1/tests/gpg/t-wait.c
deleted file mode 100644 (file)
index c12835d..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* t-wait.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t sig, text;
-
-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  /* Checking a message without a signature.  */
-  err = gpgme_data_new_from_mem (&sig, "foo\n", 4, 0);
-  fail_if_err (err);
-  err = gpgme_data_new (&text);
-  fail_if_err (err);
-  err = gpgme_op_verify_start (ctx, sig, NULL, text);
-  fail_if_err (err);
-
-  while (gpgme_wait (ctx, &err, 0) == NULL && err == 0)
-    sleep(1);
-
-  if (gpg_err_code (err) != GPG_ERR_NO_DATA)
-    {
-      fprintf (stderr, "%s:%d: %s: %s\n",
-              __FILE__, __LINE__, gpgme_strsource (err),
-              gpgme_strerror (err));
-      exit (1);
-    }
-
-  gpgme_data_release (sig);
-  gpgme_data_release (text);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/32100C27173EF6E9C4E9A25D3D69F86D37A4F939 b/tags/gpgme-1-1-1/tests/gpgsm/32100C27173EF6E9C4E9A25D3D69F86D37A4F939
deleted file mode 100644 (file)
index cf0535f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(private-key
- (oid.1.2.840.113549.1.1.1
-  (n #00e0ce96f90b6c9e02f3922beada93fe50a875eac6bcc18bb9a9cf2e84965caa2d1ff95a7f542465c6c0c19d276e4526ce048868a7a914fd343cc3a87dd74291ffc565506d5bbb25cbac6a0e2dd1f8bcaab0d4a29c2f37c950f363484bf269f7891440464baf79827e03a36e70b814938eebdc63e964247be75dc58b014b7ea251#)
-  (e #010001#)
-  (d #046129F2489D71579BE0A75FE029BD6CDB574EBF57EA8A5B0FDA942CAB943B117D7BB95E5D28875E0F9FC5FCC06A72F6D502464DABDED78EF6B716177B83D5BDC543DC5D3FED932E59F5897E92E6F58A0F33424106A3B6FA2CBF877510E4AC21C3EE47851E97D12996222AC3566D4CCB0B83D164074ABF7DE655FC2446DA1781#)
-  (p #00e861b700e17e8afe6837e7512e35b6ca11d0ae47d8b85161c67baf64377213fe52d772f2035b3ca830af41d8a4120e1c1c70d12cc22f00d28d31dd48a8d424f1#)
-  (q #00f7a7ca5367c661f8e62df34f0d05c10c88e5492348dd7bddc942c9a8f369f935a07785d2db805215ed786e4285df1658eed3ce84f469b81b50d358407b4ad361#)
-  (u #304559a9ead56d2309d203811a641bb1a09626bc8eb36fffa23c968ec5bd891eebbafc73ae666e01ba7c8990bae06cc2bbe10b75e69fcacb353a6473079d8e9b#)
- )
-)
-
-
-
-
-
-
-
-
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/Makefile.am b/tags/gpgme-1-1-1/tests/gpgsm/Makefile.am
deleted file mode 100644 (file)
index 2be6c62..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (C) 2000 Werner Koch (dd9jn)
-# Copyright (C) 2001 g10 Code GmbH
-# 
-# This file is part of GPGME.
-# 
-# GPGME is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as
-# published by the Free Software Foundation; either version 2.1 of the
-# License, or (at your option) any later version.
-# 
-# GPGME 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 Lesser General
-# Public License for more details.
-# 
-# You should have received a copy of the GNU Lesser 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
-
-## Process this file with automake to produce Makefile.in
-
-GPGSM = @GPGSM@
-
-TESTS_ENVIRONMENT = GNUPGHOME=. GPG_AGENT_INFO= 
-
-noinst_HEADERS = t-support.h
-TESTS = t-import t-keylist t-encrypt t-verify t-decrypt t-sign t-export
-
-EXTRA_DIST = cert_dfn_pca01.der cert_dfn_pca15.der cert_g10code_test1.der \
-       $(key_id)
-
-INCLUDES = -I$(top_srcdir)/gpgme
-
-AM_CPPFLAGS = @GPG_ERROR_CFLAGS@
-LDADD = ../../gpgme/libgpgme.la
-
-# We don't run t-genkey in the test suite, because it takes too long
-# and needs a working pinentry.
-noinst_PROGRAMS = $(TESTS) t-genkey
-
-key_id := 32100C27173EF6E9C4E9A25D3D69F86D37A4F939
-
-DISTCLEANFILES = pubring.kbx pubring.kbx~ gpgsm.conf trustlist.txt \
-       private-keys-v1.d/$(key_id).key random_seed
-
-
-all-local: ./pubring.kbx ./gpgsm.conf ./private-keys-v1.d/$(key_id).key ./trustlist.txt
-
-./pubring.kbx: $(srcdir)/cert_g10code_test1.der
-       $(GPGSM) --homedir . --import $(srcdir)/cert_g10code_test1.der
-
-./gpgsm.conf:
-       echo disable-crl-checks > ./gpgsm.conf
-       echo faked-system-time 1008241200 >> ./gpgsm.conf
-
-./private-keys-v1.d/$(key_id).key: $(srcdir)/$(key_id)
-       test -d ./private-keys-v1.d || mkdir ./private-keys-v1.d
-       cp $(srcdir)/$(key_id) private-keys-v1.d/$(key_id).key
-
-./trustlist.txt:
-       echo $(key_id) > ./trustlist.txt
-       echo >> ./trustlist.txt
-       echo "# CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=Düsseldorf,C=DE" >> ./trustlist.txt
-       echo "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E S" >> ./trustlist.txt
-
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca01.der b/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca01.der
deleted file mode 100644 (file)
index 4c8593c..0000000
Binary files a/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca01.der and /dev/null differ
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca15.der b/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca15.der
deleted file mode 100644 (file)
index c28f137..0000000
Binary files a/tags/gpgme-1-1-1/tests/gpgsm/cert_dfn_pca15.der and /dev/null differ
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/cert_g10code_test1.der b/tags/gpgme-1-1-1/tests/gpgsm/cert_g10code_test1.der
deleted file mode 100644 (file)
index 67c7db6..0000000
Binary files a/tags/gpgme-1-1-1/tests/gpgsm/cert_g10code_test1.der and /dev/null differ
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-decrypt.c b/tags/gpgme-1-1-1/tests/gpgsm/t-decrypt.c
deleted file mode 100644 (file)
index 654c7e1..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/* t-encrypt.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <gpgme.h>
-#include "t-support.h"
-
-\f
-static const char test_text1[] = "Hallo Leute!\n";
-static const char test_cip1[] =
-"-----BEGIN CMS OBJECT-----\n"
-"MIAGCSqGSIb3DQEHA6CAMIACAQAxggEJMIIBBQIBADBwMGsxCzAJBgNVBAYTAkRF\n"
-"MRMwEQYDVQQHFApE/HNzZWxkb3JmMRYwFAYDVQQKEw1nMTAgQ29kZSBHbWJIMRkw\n"
-"FwYDVQQLExBBZWd5cHRlbiBQcm9qZWN0MRQwEgYDVQQDEwt0ZXN0IGNlcnQgMQIB\n"
-"ADALBgkqhkiG9w0BAQEEgYBOFcOfUtAav+XjKGM1RJtF+8JLkbnu46S3T3709Iok\n"
-"u+Z9dwpOyfHwxXOmjzkSKQSBBxxi6ar+sKjU/KfPIvaMpARwT+NfIVSCZRWIJ27z\n"
-"wbSrav/kcRRDDA0wXV7dHVmSLPUJNCpiFMNZbkYtI+ai15g0PVeDw+szYd9zdsjJ\n"
-"2zCABgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECA8gPQY2NtJToIAECAeoY3MIcz9h\n"
-"BAiiytWtOSmqnwAA\n"
-"-----END CMS OBJECT-----\n";
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_decrypt_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-
-  err = gpgme_data_new_from_mem (&in, test_cip1, strlen (test_cip1), 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-
-  err = gpgme_op_decrypt (ctx, in, out);
-  fail_if_err (err);
-  result = gpgme_op_decrypt_result (ctx);
-  if (result->unsupported_algorithm)
-    {
-      fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
-              __FILE__, __LINE__, result->unsupported_algorithm);
-      exit (1);
-    }
-  print_data (out);
-   
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-encrypt.c b/tags/gpgme-1-1-1/tests/gpgsm/t-encrypt.c
deleted file mode 100644 (file)
index 45c772b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* t-encrypt.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_key_t key[] = { NULL, NULL };
-  gpgme_encrypt_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-  gpgme_set_armor (ctx, 1);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
-  fail_if_err (err);
-
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-    
-  err = gpgme_get_key (ctx, "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-                      &key[0], 0);
-  fail_if_err (err);
-
-  err = gpgme_op_encrypt (ctx, key, 0, in, out);
-  fail_if_err (err);
-  result = gpgme_op_encrypt_result (ctx);
-  if (result->invalid_recipients)
-    {
-      fprintf (stderr, "Invalid recipient encountered: %s\n",
-              result->invalid_recipients->fpr);
-      exit (1);
-    }
-  print_data (out);
-
-  gpgme_key_unref (key[0]);
-  gpgme_data_release (in);
-  gpgme_data_release (out);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-export.c b/tags/gpgme-1-1-1/tests/gpgsm/t-export.c
deleted file mode 100644 (file)
index d8856f2..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/* t-export.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-#include <gpgme.h>
-#include "t-support.h"
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t out;
-  const char *pattern1[] = { "DFN Top Level Certification Authority", NULL };
-  const char *pattern2[] = { "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-                             "DFN Server Certification Authority", 
-                             NULL };
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-
-  gpgme_set_armor (ctx, 1);
-
-  /* Check exporting of one certificate. */
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_export_ext (ctx, pattern1, 0, out);
-  fail_if_err (err);
-
-  fflush (NULL);
-  fputs ("Begin Result:\n", stdout);
-  print_data (out);
-  fputs ("End Result.\n", stdout);
-
-  gpgme_data_release (out);
-
-  /* Check exporting of 2 certificates. */
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_export_ext (ctx, pattern2, 0, out);
-  fail_if_err (err);
-
-  fflush (NULL);
-  fputs ("Begin Result:\n", stdout);
-  print_data (out);
-  fputs ("End Result.\n", stdout);
-
-  gpgme_data_release (out);
-
-
-  gpgme_release (ctx);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-genkey.c b/tags/gpgme-1-1-1/tests/gpgsm/t-genkey.c
deleted file mode 100644 (file)
index 9de9d54..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/* t-genkey.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <gpgme.h>
-#include "t-support.h"
-
-
-/* True if progress function printed something on the screen.  */
-static int progress_called;
-
-static void
-progress (void *self, const char *what, int type, int current, int total)
-{
-  if (!strcmp (what, "primegen") && !current && !total
-      && (type == '.' || type == '+' || type == '!'
-         || type == '^' || type == '<' || type == '>'))
-    {
-      printf ("%c", type);
-      fflush (stdout);
-      progress_called = 1;
-    }
-  else
-    {
-      fprintf (stderr, "unknown progress `%s' %d %d %d\n", what, type,
-              current, total);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  const char *parms = "<GnupgKeyParms format=\"internal\">\n"
-    "Key-Type: RSA\n"
-    "Key-Length: 1024\n"
-    "Name-DN: C=de,O=g10 code,OU=Testlab,CN=Joe 2 Tester\n"
-    "Name-Email: joe@foo.bar\n"
-    "</GnupgKeyParms>\n";
-  gpgme_genkey_result_t result;
-  gpgme_data_t certreq;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_data_new (&certreq);
-  fail_if_err (err);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-  gpgme_set_armor (ctx, 1);
-
-  gpgme_set_progress_cb (ctx, progress, NULL);
-  
-  err = gpgme_op_genkey (ctx, parms, certreq, NULL);
-  fail_if_err (err);
-
-  result = gpgme_op_genkey_result (ctx);
-  if (!result)
-    {
-      fprintf (stderr, "%s:%d: gpgme_op_genkey_result returns NULL\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (progress_called)
-    printf ("\n");
-
-  printf ("Generated key: %s (%s)\n", result->fpr ? result->fpr : "none",
-         result->primary ? (result->sub ? "primary, sub" : "primary")
-         : (result->sub ? "sub" : "none"));
-
-  if (result->fpr)
-    {
-      fprintf (stderr, "%s:%d: generated key has (unexpectdly) a fingerprint\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (!result->primary)
-    {
-      fprintf (stderr, "%s:%d: primary key was not generated\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (result->sub)
-    {
-      fprintf (stderr, "%s:%d: sub key was (unexpectedly) generated\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  gpgme_release (ctx);
-
-  print_data (certreq);
-  gpgme_data_release (certreq);
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-import.c b/tags/gpgme-1-1-1/tests/gpgsm/t-import.c
deleted file mode 100644 (file)
index 2d23779..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/* t-import.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-
-void
-check_result (gpgme_import_result_t result, char *fpr, int total,
-             int total_stat)
-{
-  if (result->considered != total)
-    {
-      fprintf (stderr, "Unexpected number of considered keys %i\n",
-              result->considered);
-      exit (1);
-    }
-  if (result->no_user_id != 0)
-    {
-      fprintf (stderr, "Unexpected number of user ids %i\n",
-              result->no_user_id);
-      exit (1);
-    }
-  if (result->imported != 0 && result->imported != 1)
-    {
-      fprintf (stderr, "Unexpected number of imported keys %i\n",
-              result->imported);
-      exit (1);
-    }
-  if (result->imported_rsa != 0)
-    {
-      fprintf (stderr, "Unexpected number of imported RSA keys %i\n",
-              result->imported_rsa);
-      exit (1);
-    }
-  if ((result->imported == 0 && result->unchanged != total)
-      || (result->imported == 1 && result->unchanged != total - 1))
-    {
-      fprintf (stderr, "Unexpected number of unchanged keys %i\n",
-              result->unchanged);
-      exit (1);
-    }
-  if (result->new_user_ids != 0)
-    {
-      fprintf (stderr, "Unexpected number of new user IDs %i\n",
-              result->new_user_ids);
-      exit (1);
-    }
-  if (result->new_sub_keys != 0)
-    {
-      fprintf (stderr, "Unexpected number of new sub keys %i\n",
-              result->new_sub_keys);
-      exit (1);
-    }
-  if (result->new_signatures != 0)
-    {
-      fprintf (stderr, "Unexpected number of new signatures %i\n",
-              result->new_signatures);
-      exit (1);
-    }
-  if (result->new_revocations != 0)
-    {
-      fprintf (stderr, "Unexpected number of new revocations %i\n",
-              result->new_revocations);
-      exit (1);
-    }
-  if (result->secret_read != 0)
-    {
-      fprintf (stderr, "Unexpected number of secret keys read %i\n",
-              result->secret_read);
-      exit (1);
-    }
-  if (result->secret_imported != 0)
-    {
-      fprintf (stderr, "Unexpected number of secret keys imported %i\n",
-              result->secret_imported);
-      exit (1);
-    }
-  if (result->secret_unchanged != 0)
-    {
-      fprintf (stderr, "Unexpected number of secret keys unchanged %i\n",
-              result->secret_unchanged);
-      exit (1);
-    }
-  if (result->not_imported != 0)
-    {
-      fprintf (stderr, "Unexpected number of secret keys not imported %i\n",
-              result->not_imported);
-      exit (1);
-    }
-  
-  {
-    int n;
-    gpgme_import_status_t r;
-
-    for (n=0, r=result->imports; r; r=r->next)
-      n++;
-      
-    if (n != total_stat)
-    {
-      fprintf (stderr, "Unexpected number of status reports\n");
-      exit (1);
-    }
-  }
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in;
-  gpgme_import_result_t result;
-  const char *cert_1 = make_filename ("cert_dfn_pca01.der");
-  const char *cert_2 = make_filename ("cert_dfn_pca15.der");
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-
-  err = gpgme_data_new_from_file (&in, cert_1, 1);
-  fail_if_err (err);
-
-  err = gpgme_op_import (ctx, in);
-  fail_if_err (err);
-  result = gpgme_op_import_result (ctx);
-  check_result (result, "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD", 1, 1);
-  gpgme_data_release (in);
-
-  err = gpgme_data_new_from_file (&in, cert_2, 1);
-  fail_if_err (err);
-
-  err = gpgme_op_import (ctx, in);
-  fail_if_err (err);
-  result = gpgme_op_import_result (ctx);
-  check_result (result, "2C8F3C356AB761CB3674835B792CDA52937F9285", 1, 2);
-  gpgme_data_release (in);
-
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-keylist.c b/tags/gpgme-1-1-1/tests/gpgsm/t-keylist.c
deleted file mode 100644 (file)
index 79a61ea..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/* t-keylist.c  - regression test
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-struct
-{
-  char *fpr;
-  int secret;
-  long timestamp;
-  long expires;
-  char *issuer_serial;
-  char *issuer_name;
-  char *chain_id;
-  char *uid;
-  char *email;
-  gpgme_validity_t validity;
-  unsigned int key_length;
-}
-keys[] =
-  {
-    { "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E", 1, 1007372198, 1038908198, "00",
-      "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE",
-      "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-      "CN=test cert 1,OU=Aegypten Project,O=g10 Code GmbH,L=D\xc3\xbcsseldorf,C=DE",
-      NULL, GPGME_VALIDITY_ULTIMATE, 1024
-    },
-    { "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD", 0, 909684190, 1009821790, "01",
-      "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
-      "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
-      "O=Deutsches Forschungsnetz,C=DE",
-      "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD",
-      "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
-      "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
-      "O=Deutsches Forschungsnetz,C=DE",
-      "<certify@pca.dfn.de>", GPGME_VALIDITY_NEVER, 2048
-    },
-    { "2C8F3C356AB761CB3674835B792CDA52937F9285", 0, 973183644, 1009735200, "15",
-      "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
-      "CN=DFN Top Level Certification Authority,OU=DFN-PCA,"
-      "O=Deutsches Forschungsnetz,C=DE",
-      "DFA56FB5FC41E3A8921F77AD1622EEFD9152A5AD",
-      "1.2.840.113549.1.9.1=#63657274696679407063612E64666E2E6465,"
-      "CN=DFN Server Certification Authority,OU=DFN-PCA,"
-      "O=Deutsches Forschungsnetz,C=DE",
-      "<certify@pca.dfn.de>", GPGME_VALIDITY_UNKNOWN, 2048
-    },
-    { NULL }
-  };
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_error_t err;
-  gpgme_ctx_t ctx;
-  gpgme_key_t key;
-  gpgme_keylist_result_t result;
-  int i = 0;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-
-  err = gpgme_op_keylist_start (ctx, NULL, 0);
-  fail_if_err (err);
-    
-  while (!(err = gpgme_op_keylist_next (ctx, &key)))
-    {
-      if (!keys[i].fpr)
-       {
-         fprintf (stderr, "More keys returned than expected\n");
-         exit (1);
-       }
-
-      /* Global key flags.  */
-      if (key->revoked)
-       {
-         fprintf (stderr, "Key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->expired)
-       {
-         fprintf (stderr, "Key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->disabled)
-       {
-         fprintf (stderr, "Key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->invalid)
-       {
-         fprintf (stderr, "Key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->can_encrypt != keys[i].secret)
-       {
-         fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
-                  key->can_encrypt ? "" : " not");
-         exit (1);
-       }
-      if (key->can_sign != keys[i].secret)
-       {
-         fprintf (stderr, "Key unexpectedly%s usable for signing\n",
-                  key->can_sign ? "" : " not");
-         exit (1);
-       }
-      if (!key->can_certify)
-       {
-         fprintf (stderr, "Key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->secret != keys[i].secret)
-       {
-         fprintf (stderr, "Key unexpectedly%s secret\n",
-                  key->secret ? "" : " not");
-         exit (1);
-       }
-      if (key->protocol != GPGME_PROTOCOL_CMS)
-       {
-         fprintf (stderr, "Key has unexpected protocol: %s\n",
-                  gpgme_get_protocol_name (key->protocol));
-         exit (1);
-       }
-      if (!key->issuer_serial)
-       {
-         fprintf (stderr, "Key unexpectedly misses issuer serial\n");
-         exit (1);
-       }
-      if (strcmp (key->issuer_serial, keys[i].issuer_serial))
-       {
-         fprintf (stderr, "Key has unexpected issuer serial: %s\n",
-                  key->issuer_serial);
-         exit (1);
-       }
-      if (!key->issuer_name)
-       {
-         fprintf (stderr, "Key unexpectedly misses issuer name\n");
-         exit (1);
-       }
-      if (strcmp (key->issuer_name, keys[i].issuer_name))
-       {
-         fprintf (stderr, "Key has unexpected issuer name: %s\n",
-                  key->issuer_name);
-         exit (1);
-       }
-      if (key->chain_id && !keys[i].chain_id)
-       {
-         fprintf (stderr, "Key unexpectedly carries chain ID: %s\n",
-                  key->chain_id);
-         exit (1);
-       }
-      if (!key->chain_id && keys[i].chain_id)
-       {
-         fprintf (stderr, "Key unexpectedly carries no chain ID\n");
-         exit (1);
-       }
-      if (key->chain_id && strcmp (key->chain_id, keys[i].chain_id))
-       {
-         fprintf (stderr, "Key carries unexpected chain ID: %s\n",
-                  key->chain_id);
-         exit (1);
-       }
-      if (key->owner_trust != GPGME_VALIDITY_UNKNOWN)
-       {
-         fprintf (stderr, "Key has unexpected owner trust: %i\n",
-                  key->owner_trust);
-         exit (1);
-       }
-      if (!key->subkeys || key->subkeys->next)
-       {
-         fprintf (stderr, "Key has unexpected number of subkeys\n");
-         exit (1);
-       }
-
-      /* Primary key.  */
-      if (key->subkeys->revoked)
-       {
-         fprintf (stderr, "Primary key unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->subkeys->expired)
-       {
-         fprintf (stderr, "Primary key unexpectedly expired\n");
-         exit (1);
-       }
-      if (key->subkeys->disabled)
-       {
-         fprintf (stderr, "Primary key unexpectedly disabled\n");
-         exit (1);
-       }
-      if (key->subkeys->invalid)
-       {
-         fprintf (stderr, "Primary key unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->subkeys->can_encrypt != keys[i].secret)
-       {
-         fprintf (stderr, "Key unexpectedly%s usable for encryption\n",
-                  key->subkeys->can_encrypt ? "" : " not");
-         exit (1);
-       }
-      if (key->subkeys->can_sign != keys[i].secret)
-       {
-         fprintf (stderr, "Key unexpectedly%s usable for signing\n",
-                  key->subkeys->can_sign ? "" : " not");
-         exit (1);
-       }
-      if (!key->subkeys->can_certify)
-       {
-         fprintf (stderr, "Primary key unexpectedly unusable for certifications\n");
-         exit (1);
-       }
-      if (key->subkeys->secret != keys[i].secret)
-       {
-         fprintf (stderr, "Primary Key unexpectedly%s secret\n",
-                  key->secret ? "" : " not");
-         exit (1);
-       }
-      if (key->subkeys->pubkey_algo != GPGME_PK_RSA)
-       {
-         fprintf (stderr, "Primary key has unexpected public key algo: %s\n",
-                  gpgme_pubkey_algo_name (key->subkeys->pubkey_algo));
-         exit (1);
-       }
-      if (key->subkeys->length != keys[i].key_length)
-       {
-         fprintf (stderr, "Primary key has unexpected length: %i\n",
-                  key->subkeys->length);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->keyid, &keys[i].fpr[40 - 16]))
-       {
-         fprintf (stderr, "Primary key has unexpected key ID: %s\n",
-                  key->subkeys->keyid);
-         exit (1);
-       }
-      if (strcmp (key->subkeys->fpr, keys[i].fpr))
-       {
-         fprintf (stderr, "Primary key has unexpected fingerprint: %s\n",
-                  key->subkeys->fpr);
-         exit (1);
-       }
-      if (key->subkeys->timestamp != keys[i].timestamp)
-       {
-         fprintf (stderr, "Primary key unexpected timestamp: %lu\n",
-                  key->subkeys->timestamp);
-         exit (1);
-       }
-      if (key->subkeys->expires != keys[i].expires)
-       {
-         fprintf (stderr, "Primary key unexpectedly expires: %lu\n",
-                  key->subkeys->expires);
-         exit (1);
-       }
-
-      /* Be tolerant against a missing email (ie, older gpgsm versions).  */
-      if (!key->uids || (key->uids->next && !keys[i].email))
-       {
-         fprintf (stderr, "Key has unexpected number of user IDs\n");
-         exit (1);
-       }
-      if (key->uids->revoked)
-       {
-         fprintf (stderr, "User ID unexpectedly revoked\n");
-         exit (1);
-       }
-      if (key->uids->invalid)
-       {
-         fprintf (stderr, "User ID unexpectedly invalid\n");
-         exit (1);
-       }
-      if (key->uids->validity != keys[i].validity)
-       {
-         fprintf (stderr, "User ID unexpectedly validity: %i\n",
-                  key->uids->validity);
-         exit (1);
-       }
-      if (key->uids->signatures)
-       {
-         fprintf (stderr, "User ID unexpectedly signed\n");
-         exit (1);
-       }
-      if (!key->uids->name || key->uids->name[0])
-       {
-         fprintf (stderr, "Unexpected name in user ID: %s\n",
-                  key->uids->name);
-         exit (1);
-       }
-      if (!key->uids->comment || key->uids->comment[0])
-       {
-         fprintf (stderr, "Unexpected comment in user ID: %s\n",
-                  key->uids->comment);
-         exit (1);
-       }
-      if (!key->uids->email || key->uids->email[0])
-       {
-         fprintf (stderr, "Unexpected email in user ID: %s\n",
-                  key->uids->email);
-         exit (1);
-       }
-      if (!key->uids->uid || strcmp (key->uids->uid, keys[i].uid))
-       {
-         fprintf (stderr, "Unexpected uid in user ID: %s\n",
-                  key->uids->uid);
-         exit (1);
-       }
-      if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
-       {
-         fprintf (stderr, "Unexpected email in user ID: %s\n",
-                  key->uids->next->uid);
-         exit (1);
-       }
-      if (key->uids->next && strcmp (key->uids->next->uid, keys[i].email))
-       {
-         fprintf (stderr, "Unexpected email in user ID: %s\n",
-                  key->uids->next->uid);
-         exit (1);
-       }
-
-
-
-      gpgme_key_unref (key);
-      i++;
-    }
-  if (gpg_err_code (err) != GPG_ERR_EOF)
-    fail_if_err (err);
-  err = gpgme_op_keylist_end (ctx);
-  fail_if_err (err);
-
-  result = gpgme_op_keylist_result (ctx);
-  if (result->truncated)
-    {
-      fprintf (stderr, "Key listing unexpectedly truncated\n");
-      exit (1);
-    }
-
-  if (keys[i].fpr)
-    {
-      fprintf (stderr, "Less keys returned than expected\n");
-      exit (1);
-    }
-
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-sign.c b/tags/gpgme-1-1-1/tests/gpgsm/t-sign.c
deleted file mode 100644 (file)
index dc2d841..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* t-sign.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-#include "t-support.h"
-
-
-static void
-check_result (gpgme_sign_result_t result, gpgme_sig_mode_t type)
-{
-  if (result->invalid_signers)
-    {
-      fprintf (stderr, "Invalid signer found: %s\n",
-              result->invalid_signers->fpr);
-      exit (1);
-    }
-  if (!result->signatures || result->signatures->next)
-    {
-      fprintf (stderr, "Unexpected number of signatures created\n");
-      exit (1);
-    }
-  if (result->signatures->type != type)
-    {
-      fprintf (stderr, "Wrong type of signature created\n");
-      exit (1);
-    }
-  if (result->signatures->pubkey_algo != GPGME_PK_RSA)
-    {
-      fprintf (stderr, "Wrong pubkey algorithm reported: %i\n",
-              result->signatures->pubkey_algo);
-      exit (1);
-    }
-  if (result->signatures->hash_algo != GPGME_MD_SHA1)
-    {
-      fprintf (stderr, "Wrong hash algorithm reported: %i\n",
-              result->signatures->hash_algo);
-      exit (1);
-    }
-  if (result->signatures->sig_class != 0)
-    {
-      fprintf (stderr, "Wrong signature class reported: %u\n",
-              result->signatures->sig_class);
-      exit (1);
-    }
-  if (strcmp ("3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-             result->signatures->fpr))
-    {
-      fprintf (stderr, "Wrong fingerprint reported: %s\n",
-              result->signatures->fpr);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char *argv[])
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t in, out;
-  gpgme_sign_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-  gpgme_set_textmode (ctx, 1);
-  gpgme_set_armor (ctx, 1);
-
-  err = gpgme_data_new_from_mem (&in, "Hallo Leute!\n", 13, 0);
-  fail_if_err (err);
-
-  /* First a normal signature.  */
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_NORMAL);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_NORMAL);
-  print_data (out);
-  gpgme_data_release (out);
-    
-  /* Now a detached signature.  */ 
-  gpgme_data_seek (in, 0, SEEK_SET);
-  err = gpgme_data_new (&out);
-  fail_if_err (err);
-  err = gpgme_op_sign (ctx, in, out, GPGME_SIG_MODE_DETACH);
-  fail_if_err (err);
-  result = gpgme_op_sign_result (ctx);
-  check_result (result, GPGME_SIG_MODE_DETACH);
-  print_data (out);
-  gpgme_data_release (out);
-
-  gpgme_data_release (in);
-  gpgme_release (ctx);
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-support.h b/tags/gpgme-1-1-1/tests/gpgsm/t-support.h
deleted file mode 100644 (file)
index 671317f..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/* t-support.h - Helper routines for regression tests.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#include <unistd.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <locale.h>
-
-#include <gpgme.h>
-
-#define fail_if_err(err)                                       \
-  do                                                           \
-    {                                                          \
-      if (err)                                                 \
-        {                                                      \
-          fprintf (stderr, "%s:%d: %s: %s (%d.%d)\n",          \
-                   __FILE__, __LINE__, gpg_strsource (err),    \
-                  gpg_strerror (err),                          \
-                   gpg_err_source (err), gpg_err_code (err));  \
-          exit (1);                                            \
-        }                                                      \
-    }                                                          \
-  while (0)
-
-
-void
-print_data (gpgme_data_t dh)
-{
-#define BUF_SIZE 512
-  char buf[BUF_SIZE + 1];
-  int ret;
-  
-  ret = gpgme_data_seek (dh, 0, SEEK_SET);
-  if (ret)
-    fail_if_err (gpg_error_from_errno (errno));
-  while ((ret = gpgme_data_read (dh, buf, BUF_SIZE)) > 0)
-    fwrite (buf, ret, 1, stdout);
-  if (ret < 0)
-    fail_if_err (gpg_error_from_errno (errno));
-}
-
-
-gpgme_error_t
-passphrase_cb (void *opaque, const char *uid_hint, const char *passphrase_info,
-              int last_was_bad, int fd)
-{
-  write (fd, "abc\n", 4);
-  return 0;
-}
-
-
-char *
-make_filename (const char *fname)
-{
-  const char *srcdir = getenv ("srcdir");
-  char *buf;
-
-  if (!srcdir)
-    srcdir = ".";
-  buf = malloc (strlen(srcdir) + strlen(fname) + 2);
-  if (!buf) 
-    exit (8);
-  strcpy (buf, srcdir);
-  strcat (buf, "/");
-  strcat (buf, fname);
-  return buf;
-}
-
-
-void
-init_gpgme (gpgme_protocol_t proto)
-{
-  gpgme_error_t err;
-
-  gpgme_check_version (NULL);
-  setlocale (LC_ALL, "");
-  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
-  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
-
-  err = gpgme_engine_check_version (proto);
-  fail_if_err (err);
-}
diff --git a/tags/gpgme-1-1-1/tests/gpgsm/t-verify.c b/tags/gpgme-1-1-1/tests/gpgsm/t-verify.c
deleted file mode 100644 (file)
index 8166206..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-/* t-verify.c - Regression test.
-   Copyright (C) 2000 Werner Koch (dd9jn)
-   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-#include "t-support.h"
-
-\f
-static const char test_text1[] = "Hallo Leute!\n";
-static const char test_text1f[]= "Hallo Leute?\n";
-static const char test_sig1[] =
-"-----BEGIN CMS OBJECT-----\n"
-"MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAA\n"
-"MYIBOTCCATUCAQEwcDBrMQswCQYDVQQGEwJERTETMBEGA1UEBxQKRPxzc2VsZG9y\n"
-"ZjEWMBQGA1UEChMNZzEwIENvZGUgR21iSDEZMBcGA1UECxMQQWVneXB0ZW4gUHJv\n"
-"amVjdDEUMBIGA1UEAxMLdGVzdCBjZXJ0IDECAQAwBwYFKw4DAhqgJTAjBgkqhkiG\n"
-"9w0BCQQxFgQU7FC/ibH3lC9GE24RJJxa8zqP7wEwCwYJKoZIhvcNAQEBBIGAA3oC\n"
-"DUmKERmD1eoJYFw38y/qnncS/6ZPjWINDIphZeK8mzAANpvpIaRPf3sNBznb89QF\n"
-"mRgCXIWcjlHT0DTRLBf192Ve22IyKH00L52CqFsSN3a2sajqRUlXH8RY2D+Al71e\n"
-"MYdRclgjObCcoilA8fZ13VR4DiMJVFCxJL4qVWI=\n"
-"-----END CMS OBJECT-----\n";
-
-
-static void
-check_result (gpgme_verify_result_t result, int summary, char *fpr,
-             gpgme_error_t status, gpgme_validity_t validity)
-{
-  gpgme_signature_t sig;
-
-  sig = result->signatures;
-  if (!sig || sig->next)
-    {
-      fprintf (stderr, "%s:%i: Unexpected number of signatures\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->summary != summary)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature summary: "
-               "want=0x%x have=0x%x\n",
-              __FILE__, __LINE__, summary, sig->summary);
-      exit (1);
-    }
-  if (strcmp (sig->fpr, fpr))
-    {
-      fprintf (stderr, "%s:%i: Unexpected fingerprint: %s\n",
-              __FILE__, __LINE__, sig->fpr);
-      exit (1);
-    }
-  if (gpg_err_code (sig->status) != status)
-    {
-      fprintf (stderr, "%s:%i: Unexpected signature status: %s\n",
-              __FILE__, __LINE__, gpgme_strerror (sig->status));
-      exit (1);
-    }
-  if (sig->notations)
-    {
-      fprintf (stderr, "%s:%i: Unexpected notation data\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->wrong_key_usage)
-    {
-      fprintf (stderr, "%s:%i: Unexpectedly wrong key usage\n",
-              __FILE__, __LINE__);
-      exit (1);
-    }
-  if (sig->validity != validity)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity: %i\n",
-              __FILE__, __LINE__, sig->validity);
-      exit (1);
-    }
-  if (gpg_err_code (sig->validity_reason) != GPG_ERR_NO_ERROR)
-    {
-      fprintf (stderr, "%s:%i: Unexpected validity reason: %s\n",
-              __FILE__, __LINE__, gpgme_strerror (sig->validity_reason));
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char **argv)
-{
-  gpgme_ctx_t ctx;
-  gpgme_error_t err;
-  gpgme_data_t sig, text;
-  gpgme_verify_result_t result;
-
-  init_gpgme (GPGME_PROTOCOL_CMS);
-
-  err = gpgme_new (&ctx);
-  fail_if_err (err);
-  gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
-  
-  /* Checking a valid message.  */
-  err = gpgme_data_new_from_mem (&text, test_text1, strlen (test_text1), 0);
-  fail_if_err (err);
-  err = gpgme_data_new_from_mem (&sig, test_sig1, strlen (test_sig1), 0);
-  fail_if_err (err);
-
-  err = gpgme_op_verify (ctx, sig, text, NULL);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result, GPGME_SIGSUM_VALID | GPGME_SIGSUM_GREEN,
-               "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-               GPG_ERR_NO_ERROR, GPGME_VALIDITY_FULL);
-
-  /* Checking a manipulated message.  */
-  gpgme_data_release (text);
-  err = gpgme_data_new_from_mem (&text, test_text1f, strlen (test_text1f), 0);
-  fail_if_err (err);
-  gpgme_data_seek (sig, 0, SEEK_SET);
-  err = gpgme_op_verify (ctx, sig, text, NULL);
-  fail_if_err (err);
-  result = gpgme_op_verify_result (ctx);
-  check_result (result, GPGME_SIGSUM_RED,
-               "3CF405464F66ED4A7DF45BBDD1E4282E33BDB76E",
-               GPG_ERR_BAD_SIGNATURE, GPGME_VALIDITY_UNKNOWN);
-
-  gpgme_release (ctx);  
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/t-data-1.txt b/tags/gpgme-1-1-1/tests/t-data-1.txt
deleted file mode 100644 (file)
index 16a15f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Just GNU it!
diff --git a/tags/gpgme-1-1-1/tests/t-data-2.txt b/tags/gpgme-1-1-1/tests/t-data-2.txt
deleted file mode 100644 (file)
index 9ae851c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Just GNU it!
-Just GNU it!
-Just GNU it!
diff --git a/tags/gpgme-1-1-1/tests/t-data.c b/tags/gpgme-1-1-1/tests/t-data.c
deleted file mode 100644 (file)
index 713da0a..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/* t-data - Regression tests for the gpgme_data_t abstraction.
-   Copyright (C) 2001, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-/* We need to include config.h so that we know whether we are building
-   with large file system (LFS) support. */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <gpgme.h>
-
-#define fail_if_err(a) do { if(a) {                                          \
-                               fprintf (stderr, "%s:%d: (%i) gpgme_error_t " \
-                                "%s\n", __FILE__, __LINE__, round,           \
-                                gpgme_strerror(a));                          \
-                                exit (1); }                                  \
-                             } while(0)
-
-static char *
-make_filename (const char *fname)
-{
-  const char *srcdir = getenv ("srcdir");
-  char *buf;
-
-  if (!srcdir)
-    srcdir = ".";
-  buf = malloc (strlen(srcdir) + strlen(fname) + 2 );
-  if (!buf)
-    {
-      fprintf (stderr, "%s:%d: could not allocate string: %s\n",
-              __FILE__, __LINE__, strerror (errno));
-      exit (1);
-    }
-  strcpy (buf, srcdir);
-  strcat (buf, "/");
-  strcat (buf, fname);
-  return buf;
-}
-
-typedef enum
-  {
-    TEST_INITIALIZER,
-    TEST_INVALID_ARGUMENT,
-    TEST_INOUT_NONE,
-    TEST_INOUT_MEM_NO_COPY,
-    TEST_INOUT_MEM_COPY,
-    TEST_INOUT_MEM_FROM_FILE_COPY,
-    TEST_INOUT_MEM_FROM_INEXISTANT_FILE,
-    TEST_INOUT_MEM_FROM_FILE_NO_COPY,
-    TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME,
-    TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART,
-    TEST_INOUT_MEM_FROM_FILE_PART_BY_FP,
-    TEST_END
-  } round_t;
-
-const char *text = "Just GNU it!\n";
-const char *text2 = "Just GNU it!\nJust GNU it!\n";
-
-int
-read_cb (void *cb_value, char *buffer, size_t count, size_t *nread)
-{
-  static int off = 0;
-  unsigned int amount = strlen (text) - off;
-  /*  round_t round = *((round_t *) cb_value);  */
-
-  if (!buffer && !count && !nread)
-    {
-      /* Rewind requested.  */
-      off = 0;
-      return 0;
-    }
-  if (! buffer || !nread)
-    return -1;
-  if (amount <= 0)
-    {
-      /* End of file.  */
-      *nread = 0;
-      return -1;
-    }
-  if (amount > count)
-    amount = count;
-  memcpy (buffer, text, amount);
-  off += amount;
-  *nread = amount;
-  return 0;
-}
-
-void
-read_once_test (round_t round, gpgme_data_t data)
-{
-  char buffer[1024];
-  size_t read;
-
-  read = gpgme_data_read (data, buffer, sizeof (buffer));
-
-  if (read != strlen (text) || strncmp (buffer, text, strlen (text)))
-    {
-      fprintf (stderr, "%s:%d: (%i) gpgme_data_read returned wrong data\n",
-              __FILE__, __LINE__, round);
-      exit (1);
-    }
-
-  read = gpgme_data_read (data, buffer, sizeof (buffer));
-  if (read)
-    {
-      fprintf (stderr, "%s:%d: (%i) gpgme_data_read did not signal EOF\n",
-              __FILE__, __LINE__, round);
-      exit (1);
-    }
-}
-
-void
-read_test (round_t round, gpgme_data_t data)
-{
-  char buffer[1024];
-  size_t read;
-
-  if (round == TEST_INOUT_NONE)
-    {
-      read = gpgme_data_read (data, buffer, sizeof (buffer));
-      if (read > 0)
-       {
-         fprintf (stderr, "%s:%d: (%i) gpgme_data_read succeded unexpectedly\n",
-                  __FILE__, __LINE__, round);
-         exit (1);
-       }
-      return;
-    }
-
-  read_once_test (round, data);
-  gpgme_data_seek (data, 0, SEEK_SET);
-  read_once_test (round, data);
-}
-
-void
-write_test (round_t round, gpgme_data_t data)
-{
-  char buffer[1024];
-  size_t amt;
-
-  amt = gpgme_data_write (data, text, strlen (text));
-  if (amt != strlen (text))
-    fail_if_err (gpg_error_from_errno (errno));
-
-  gpgme_data_seek (data, 0, SEEK_SET);
-
-  if (round == TEST_INOUT_NONE)
-    read_once_test (round, data);
-  else
-    {
-      amt = gpgme_data_read (data, buffer, sizeof (buffer));
-
-      if (amt != strlen (text2) || strncmp (buffer, text2, strlen (text2)))
-       {
-         fprintf (stderr, "%s:%d: (%i) gpgme_data_read returned wrong data\n",
-                  __FILE__, __LINE__, round);
-         exit (1);
-       }
-
-      amt = gpgme_data_read (data, buffer, sizeof (buffer));
-      if (amt)
-       {
-         fprintf (stderr, "%s:%d: (%i) gpgme_data_read did not signal EOF\n",
-                  __FILE__, __LINE__, round);
-         exit (1);
-       }
-    }
-}
-
-int 
-main (int argc, char **argv)
-{
-  round_t round = TEST_INITIALIZER;
-  const char *text_filename = make_filename ("t-data-1.txt");
-  const char *longer_text_filename = make_filename ("t-data-2.txt");
-  const char *missing_filename = "this-file-surely-does-not-exist";
-  gpgme_error_t err = 0;
-  gpgme_data_t data;
-
-  while (++round)
-    {
-      switch (round)
-       {
-       case TEST_INVALID_ARGUMENT:
-         err = gpgme_data_new (NULL);
-         if (!err)
-           {
-             fprintf (stderr, "%s:%d: gpgme_data_new on NULL pointer succeeded "
-                      "unexpectedly\n", __FILE__, __LINE__);
-             exit (1);
-           }
-         continue;
-       case TEST_INOUT_NONE:
-         err = gpgme_data_new (&data);
-         break;
-       case TEST_INOUT_MEM_NO_COPY:
-         err = gpgme_data_new_from_mem (&data, text, strlen (text), 0);
-         break;
-       case TEST_INOUT_MEM_COPY:
-         err = gpgme_data_new_from_mem (&data, text, strlen (text), 1);
-         break;
-       case TEST_INOUT_MEM_FROM_FILE_COPY:
-         err = gpgme_data_new_from_file (&data, text_filename, 1);
-         break;
-       case TEST_INOUT_MEM_FROM_INEXISTANT_FILE:
-         err = gpgme_data_new_from_file (&data, missing_filename, 1);
-         if (!err)
-           {
-             fprintf (stderr, "%s:%d: gpgme_data_new_from_file on inexistant "
-                      "file succeeded unexpectedly\n", __FILE__, __LINE__);
-             exit (1);
-           }
-         continue;
-       case TEST_INOUT_MEM_FROM_FILE_NO_COPY:
-         err = gpgme_data_new_from_file (&data, text_filename, 0);
-         /* This is not implemented yet.  */
-         if (gpg_err_code (err) == GPG_ERR_NOT_IMPLEMENTED
-             || gpg_err_code (err) == GPG_ERR_INV_VALUE)
-           continue;
-         break;
-       case TEST_INOUT_MEM_FROM_FILE_PART_BY_NAME:
-         err = gpgme_data_new_from_filepart (&data, longer_text_filename, 0,
-                                             strlen (text), strlen (text));
-         break;
-       case TEST_INOUT_MEM_FROM_INEXISTANT_FILE_PART:
-         err = gpgme_data_new_from_filepart (&data, missing_filename, 0,
-                                             strlen (text), strlen (text));
-         if (!err)
-           {
-             fprintf (stderr, "%s:%d: gpgme_data_new_from_file on inexistant "
-                      "file succeeded unexpectedly\n", __FILE__, __LINE__);
-             exit (1);
-           }
-         continue;
-       case TEST_INOUT_MEM_FROM_FILE_PART_BY_FP:
-         {
-           FILE *fp = fopen (longer_text_filename, "rb");
-           if (! fp)
-             {
-               fprintf (stderr, "%s:%d: fopen: %s\n", __FILE__, __LINE__,
-                        strerror (errno));
-               exit (1);
-             }
-           err = gpgme_data_new_from_filepart (&data, 0, fp,
-                                               strlen (text), strlen (text));
-         }
-         break;
-       case TEST_END:
-         return 0;
-       case TEST_INITIALIZER:
-         /* Shouldn't happen.  */
-         fprintf (stderr, "%s:%d: impossible condition\n", __FILE__, __LINE__);
-         exit (1);
-       }
-      fail_if_err (err);
-
-      read_test (round, data);
-      write_test (round, data);
-      gpgme_data_release (data);
-    }
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/t-engine-info.c b/tags/gpgme-1-1-1/tests/t-engine-info.c
deleted file mode 100644 (file)
index 4af2d4a..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* t-engine-info.c - Regression test for gpgme_get_engine_info.
-   Copyright (C) 2003, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gpgme.h>
-
-\f
-#define fail_if_err(err)                                       \
-  do                                                           \
-    {                                                          \
-      if (err)                                                 \
-        {                                                      \
-          fprintf (stderr, "%s:%d: gpgme_error_t %s\n",                \
-                   __FILE__, __LINE__, gpgme_strerror (err));   \
-          exit (1);                                            \
-        }                                                      \
-    }                                                          \
-  while (0)
-
-\f
-void
-check_engine_info (gpgme_engine_info_t info, gpgme_protocol_t protocol,
-                  const char *file_name, const char *req_version)
-{
-  if (info->protocol != protocol)
-    {
-      fprintf (stderr, "Unexpected protocol %i (expected %i instead)\n",
-              info->protocol, protocol);
-      exit (1);
-    }
-  if (strcmp (info->file_name, file_name))
-    {
-      fprintf (stderr, "Unexpected file name to executable %s (expected %s instead)",
-              info->file_name, file_name);
-      exit (1);
-    }
-  if (strcmp (info->req_version, req_version))
-    {
-      fprintf (stderr, "Unexpected required version %s (expected %s instead)",
-              info->req_version, req_version);
-      exit (1);
-    }
-}
-
-
-int 
-main (int argc, char **argv )
-{
-  gpgme_engine_info_t info;
-  gpgme_error_t err;
-
-  err = gpgme_get_engine_info (&info);
-  fail_if_err (err);
-
-  check_engine_info (info, GPGME_PROTOCOL_OpenPGP, GPG_PATH, NEED_GPG_VERSION);
-
-  info = info->next;
-#ifdef GPGSM_PATH
-  check_engine_info (info, GPGME_PROTOCOL_CMS, GPGSM_PATH, NEED_GPGSM_VERSION);
-#else
-  if (info)
-    {
-      fprintf (stderr, "Unexpected engine info.\n");
-      exit (1);
-    }
-#endif
-
-  return 0;
-}
diff --git a/tags/gpgme-1-1-1/tests/t-version.c b/tags/gpgme-1-1-1/tests/t-version.c
deleted file mode 100644 (file)
index 06bff60..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* t-version.c - Regression test.
-   Copyright (C) 2001, 2004 g10 Code GmbH
-
-   This file is part of GPGME.
-
-   GPGME is free software; you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as
-   published by the Free Software Foundation; either version 2.1 of
-   the License, or (at your option) any later version.
-   
-   GPGME 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
-   Lesser General Public License for more details.
-   
-   You should have received a copy of the GNU Lesser 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.  */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <gpgme.h>
-
-int 
-main (int argc, char **argv)
-{
-  const char *null_result;
-  const char *current_result;
-  const char *future_result;
-
-  null_result = gpgme_check_version (NULL);
-  current_result = gpgme_check_version (VERSION);
-  future_result = gpgme_check_version (VERSION ".1");
-
-  return !(null_result
-          && ! strcmp (null_result, VERSION)
-          && current_result
-          && ! strcmp (current_result, VERSION)
-          && ! future_result);
-}