libgpg-error
============

This is a library that defines common error values for all GnuPG
components.  Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,
Libksba, DirMngr, Pinentry, SmartCard Daemon and more.

libgpg-error 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.  See the file
COPYING.LIB for copyright and warranty information.

However, some files (for example src/mkerrnos.awk) used in the build
process of the library are covered by a different license.  Please see
the header of these files and the file COPYING for copyright and
warranty information on these files.  A special exception in the
copyright license of these files makes sure that the output in the
build process, which is used in libgpg-error, is not affected by the
GPL.


Installation
------------

Please read the file INSTALL!

Here is a quick summary:

1) Check that you have unmodified sources.  You can find instructions
   how to verify the sources below.  Don't skip this - it is an
   important step!

2) Unpack the archive.  With GNU tar you can do it this way:
   "tar xjvf libgpg-error-x.y.tar.bz2"

3) "cd libgpg-error-x.y"

4) "./configure"

5) "make"

6) "make install"


How to Verify the Source
------------------------

In order to check that the version of libgpg-error which you are going
to install is an original and unmodified copy of the original, you can
do it in one of the following ways:

a) If you already have a trusted version of GnuPG installed, you can
   simply check the supplied signature:

   $ gpg --verify libgpg-error-x.y.tar.bz2.sig

   This checks that the detached signature libgpg-error-x.y.tar.bz2.sig
   is indeed a a signature of libgpg-error-x.y.tar.bz2.

   Please note that you have to use an old version of GnuPG to do all
   this stuff.  *Never* use the version which was built using the
   library you are trying to verify!

b) If you don't have any a trusted version of GnuPG, you can attempt
   to verify the SHA1 checksum, using a trusted version of the sha1sum
   program:

   $ sha1sum libgpg-error-x.y.tar.bz2

   This should yield an output _similar_ to this:

   610064e5b77700f5771c8fde2691c4365e1ca100  libgpg-error-x.y.tar.bz2

   Now check that this checksum is _exactly_ the same as the one
   published via the announcement list and probably via Usenet.


Hints
-----

To build for Windows you you may use the convenience command:

   ./autogen.sh --build-w32

which runs configure with suitable options.  For WindowsCE the command
is:

   ./autogen.sh --build-w32ce


Known Problems
--------------

On Windows, WSA Error Codes can be provided as system error codes and
will be transparently converted to the corresponding gpg error codes.
There are two problems with this support:

* Not all error codes corresponding to WSA Error codes have a detailed
  description when printed with gpg_strerror.  Some will default to
  "Unknown error" for pretty printing.  For example, WSAEHOSTDOWN will
  be translated to GPG_ERR_EHOSTDOWN, but there is no corresponding
  EHOSTDOWN in Windows and thus gpg_strerror will default to "Unknown
  error" as printed by the system's strerror function for the argument
  WSAEHOSTDOWN.  (This could be fixed by adding our own error strings
  replacing or extending the system error strings, including their
  translations).

* The translation to a gpg error code and back to a system error code
  in some cases does not preserve information.  For example, the error code
  WSAEACCES translates to GPG_ERR_EACCES, which translates back to
  EACCES.

Any WSA Error code has either the first problem or the second (but not
both), depending on if there is a corresponding Windows error code.
