aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2004-03-01 23:06:58 +0000
committerMarcus Brinkmann <[email protected]>2004-03-01 23:06:58 +0000
commitb1fd915a4cbb105754b5d32a0a74f6afca200973 (patch)
tree2dc3481623c36f9bd089b4f461d62dbe24a84fe1
parent2004-03-01 Marcus Brinkmann <[email protected]> (diff)
downloadlibgpg-error-b1fd915a4cbb105754b5d32a0a74f6afca200973.tar.gz
libgpg-error-b1fd915a4cbb105754b5d32a0a74f6afca200973.zip
2004-03-01 Marcus Brinkmann <[email protected]>
* configure.ac: Define CC_FOR_BUILD. * src/Makefile.am (BUILT_SOURCES): Add gpg-error.h. (EXTRA_DIST): Add mkerrcodes.awk and mkerrcodes.c. (CLEANFILES): Add mkerrcodes.h and mkerrcodes. (mkerrcodes.h): New target. (mkerrcodes): New target. (code-from-errno.h): Rewritten. * src/errnos.in: Remove include statement (which was ignored anyway). * src/mkerrcodes.awk: New file. * src/mkerrcodes.c: New file.
-rw-r--r--ChangeLog15
-rw-r--r--NEWS88
-rw-r--r--configure.ac13
-rw-r--r--src/Makefile.am21
-rw-r--r--src/errnos.in2
-rw-r--r--src/mkerrcodes.awk93
-rw-r--r--src/mkerrcodes.c76
7 files changed, 258 insertions, 50 deletions
diff --git a/ChangeLog b/ChangeLog
index f35c731..459c0b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2004-03-01 Marcus Brinkmann <[email protected]>
+
+ * configure.ac: Define CC_FOR_BUILD.
+ * src/Makefile.am (BUILT_SOURCES): Add gpg-error.h.
+ (EXTRA_DIST): Add mkerrcodes.awk and mkerrcodes.c.
+ (CLEANFILES): Add mkerrcodes.h and mkerrcodes.
+ (mkerrcodes.h): New target.
+ (mkerrcodes): New target.
+ (code-from-errno.h): Rewritten.
+
+ * src/errnos.in: Remove include statement (which was ignored
+ anyway).
+ * src/mkerrcodes.awk: New file.
+ * src/mkerrcodes.c: New file.
+
2004-02-27 Marcus Brinkmann <[email protected]>
* src/Makefile.am (noinst_PROGRAMS): Rename to ...
diff --git a/NEWS b/NEWS
index b6092c3..dc21564 100644
--- a/NEWS
+++ b/NEWS
@@ -1,13 +1,17 @@
Noteworthy changes in version 0.7 (unreleased)
----------------------------------------------
+ * libgpg-error can be built on systems where the errno macros do not
+ evaluate to plain numbers, but expressions. If you want to
+ cross-compile, you might have to set CC_FOR_BUILD, though.
+
* A new tool gpg-error to convert error numbers into symbols into
strings is provided.
* Interface changes relative to the 0.6 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GPG_ERR_LOCALE_PROBLEM NEW.
-GPG_ERR_NOT_LOCKED NEW.
+GPG_ERR_LOCALE_PROBLEM NEW
+GPG_ERR_NOT_LOCKED NEW
Noteworthy changes in version 0.6 (2003-11-14)
@@ -22,46 +26,46 @@ Noteworthy changes in version 0.6 (2003-11-14)
* Interface changes relative to the 0.5 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-GPG_ERR_SOURCE_KSBA NEW.
-GPG_ERR_SOURCE_DIRMNGR NEW.
-GPG_ERR_TRUNCATED NEW.
-GPG_ERR_NO_ENCODING_METHOD NEW.
-GPG_ERR_NO_ENCRYPTION_SCHEME NEW.
-GPG_ERR_NO_SIGNATURE_SCHEME NEW.
-GPG_ERR_INV_ATTR NEW.
-GPG_ERR_NO_VALUE NEW.
-GPG_ERR_NOT_FOUND NEW.
-GPG_ERR_VALUE_NOT_FOUND NEW.
-GPG_ERR_SYNTAX NEW.
-GPG_ERR_INV_CRL NEW.
-GPG_ERR_BAD_BER NEW.
-GPG_ERR_INV_BER NEW.
-GPG_ERR_ELEMENT_NOT_FOUND NEW.
-GPG_ERR_IDENTIFIER_NOT_FOUND NEW.
-GPG_ERR_INV_TAG NEW.
-GPG_ERR_INV_LENGTH NEW.
-GPG_ERR_INV_KEYINFO NEW.
-GPG_ERR_UNEXPECTED_TAG NEW.
-GPG_ERR_NOT_DER_ENCODED, NEW.
-GPG_ERR_NO_CMS_OBJ NEW.
-GPG_ERR_INV_CMS_OBJ NEW.
-GPG_ERR_UNKNOWN_CMS_OBJ, NEW.
-GPG_ERR_UNSUPPORTED_CMS_OBJ NEW.
-GPG_ERR_UNSUPPORTED_ENCODING, NEW.
-GPG_ERR_UNSUPPORTED_CMS_VERSION NEW.
-GPG_ERR_UNKNOWN_ALGORITHM NEW.
-GPG_ERR_ENCODING_PROBLEM NEW.
-GPG_ERR_INV_STATE NEW.
-GPG_ERR_DUP_VALUE, NEW.
-GPG_ERR_MISSING_ACTION NEW.
-GPG_ERR_MODULE_NOT_FOUND NEW.
-GPG_ERR_INV_OID_STRING NEW.
-GPG_ERR_INV_TIME NEW.
-GPG_ERR_INV_CRL_OBJ NEW.
-GPG_ERR_UNSUPPORTED_CRL_VERSION NEW.
-GPG_ERR_INV_CERT_OBJ NEW.
-GPG_ERR_UNKNOWN_NAME NEW.
-GPG_ERR_BUFFER_TOO_SHORT. NEW.
+GPG_ERR_SOURCE_KSBA NEW
+GPG_ERR_SOURCE_DIRMNGR NEW
+GPG_ERR_TRUNCATED NEW
+GPG_ERR_NO_ENCODING_METHOD NEW
+GPG_ERR_NO_ENCRYPTION_SCHEME NEW
+GPG_ERR_NO_SIGNATURE_SCHEME NEW
+GPG_ERR_INV_ATTR NEW
+GPG_ERR_NO_VALUE NEW
+GPG_ERR_NOT_FOUND NEW
+GPG_ERR_VALUE_NOT_FOUND NEW
+GPG_ERR_SYNTAX NEW
+GPG_ERR_INV_CRL NEW
+GPG_ERR_BAD_BER NEW
+GPG_ERR_INV_BER NEW
+GPG_ERR_ELEMENT_NOT_FOUND NEW
+GPG_ERR_IDENTIFIER_NOT_FOUND NEW
+GPG_ERR_INV_TAG NEW
+GPG_ERR_INV_LENGTH NEW
+GPG_ERR_INV_KEYINFO NEW
+GPG_ERR_UNEXPECTED_TAG NEW
+GPG_ERR_NOT_DER_ENCODED, NEW
+GPG_ERR_NO_CMS_OBJ NEW
+GPG_ERR_INV_CMS_OBJ NEW
+GPG_ERR_UNKNOWN_CMS_OBJ, NEW
+GPG_ERR_UNSUPPORTED_CMS_OBJ NEW
+GPG_ERR_UNSUPPORTED_ENCODING, NEW
+GPG_ERR_UNSUPPORTED_CMS_VERSION NEW
+GPG_ERR_UNKNOWN_ALGORITHM NEW
+GPG_ERR_ENCODING_PROBLEM NEW
+GPG_ERR_INV_STATE NEW
+GPG_ERR_DUP_VALUE, NEW
+GPG_ERR_MISSING_ACTION NEW
+GPG_ERR_MODULE_NOT_FOUND NEW
+GPG_ERR_INV_OID_STRING NEW
+GPG_ERR_INV_TIME NEW
+GPG_ERR_INV_CRL_OBJ NEW
+GPG_ERR_UNSUPPORTED_CRL_VERSION NEW
+GPG_ERR_INV_CERT_OBJ NEW
+GPG_ERR_UNKNOWN_NAME NEW
+GPG_ERR_BUFFER_TOO_SHORT. NEW
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Noteworthy changes in version 0.5 (2003-10-06)
diff --git a/configure.ac b/configure.ac
index fa8bef1..74f3af1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,6 +48,19 @@ AC_PROG_CC
AC_PROG_LIBTOOL
AC_PROG_AWK
+# We need to compile and run a program on the build machine.
+dnl The AC_PROG_CC_FOR_BUILD macro in the AC archive is broken for
+dnl autoconf 2.57.
+dnl AC_PROG_CC_FOR_BUILD
+AC_MSG_CHECKING(for cc for build)
+if test "$cross_compiling" = "yes"; then
+ CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
+else
+ CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
+fi
+AC_MSG_RESULT($CC_FOR_BUILD)
+AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
+
# Checks for libraries.
# Note, that autogen.sh greps for the next line.
diff --git a/src/Makefile.am b/src/Makefile.am
index 11f7165..4f333df 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,13 +21,14 @@
# because they are needed to build the po directory, and they don't
# depend on the configuration anyway.
EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \
- mkerrnos.awk errnos.in mkerrcodes1.awk mkerrcodes2.awk \
+ mkerrnos.awk errnos.in \
+ mkerrcodes.awk mkerrcodes1.awk mkerrcodes2.awk mkerrcodes.c \
mkheader.awk gpg-error.h.in \
err-sources.h err-codes.h gpg-error-config.in gpg-error.m4
BUILT_SOURCES = err-sources.h err-codes.h code-to-errno.h code-from-errno.h \
- err-sources-sym.h err-codes-sym.h errnos-sym.h
+ err-sources-sym.h err-codes-sym.h errnos-sym.h gpg-error.h
CLEANFILES = err-sources.h err-codes.h code-to-errno.h code-from-errno.h \
- gpg-error.h \
+ gpg-error.h mkerrcodes mkerrcodes.h \
err-sources-sym.h err-codes-sym.h errnos-sym.h
bin_SCRIPTS = gpg-error-config
@@ -69,10 +70,18 @@ err-codes-sym.h: Makefile mkstrtable.awk err-codes.h.in
code-to-errno.h: Makefile mkerrnos.awk errnos.in
$(AWK) -f $(srcdir)/mkerrnos.awk $(srcdir)/errnos.in >$@
-code-from-errno.h: Makefile mkerrcodes1.awk errnos.in
+# It is correct to use $(CPP). We want the host's idea of the error codes.
+mkerrcodes.h: Makefile mkerrcodes.awk
$(AWK) -f $(srcdir)/mkerrcodes1.awk $(srcdir)/errnos.in \
- | $(CPP) - | grep GPG_ERR_ | sort -n \
- | $(AWK) -f $(srcdir)/mkerrcodes2.awk >$@
+ | $(CPP) - | grep GPG_ERR_ | $(AWK) -f $(srcdir)/mkerrcodes.awk >$@
+
+# It is correct to use $(CC_FOR_BUILD) here. We want to run the
+# program at build time.
+mkerrcodes: mkerrcodes.c mkerrcodes.h Makefile
+ $(CC_FOR_BUILD) -I. -I$(srcdir) -o $@ $<
+
+code-from-errno.h: mkerrcodes Makefile
+ ./$< | $(AWK) -f $(srcdir)/mkerrcodes2.awk >$@
errnos-sym.h: Makefile mkstrtable.awk errnos.in
$(AWK) -f $(srcdir)/mkstrtable.awk -v textidx=2 -v nogettext=1 \
diff --git a/src/errnos.in b/src/errnos.in
index 322ec05..1c703b8 100644
--- a/src/errnos.in
+++ b/src/errnos.in
@@ -19,8 +19,6 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-#include <errno.h>
-
# Everything up to the first line that starts with a number in the
# first column is copied into the output verbatim. Then, empty lines
# are ignored. Other lines must have an error code number, followed
diff --git a/src/mkerrcodes.awk b/src/mkerrcodes.awk
new file mode 100644
index 0000000..b12dc7d
--- /dev/null
+++ b/src/mkerrcodes.awk
@@ -0,0 +1,93 @@
+# mkerrcodes.awk
+# Copyright (C) 2003 g10 Code GmbH
+#
+# 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, g10 Code GmbH gives unlimited permission to
+# copy, distribute and modify the C source files that are the output
+# of mkerrcodes.awk. You need not follow the terms of the GNU General
+# Public License when using or distributing such scripts, even though
+# portions of the text of mkerrcodes.awk appear in them. The GNU
+# General Public License (GPL) does govern all other use of the material
+# that constitutes the mkerrcodes.awk program.
+#
+# Certain portions of the mkerrcodes.awk source text are designed to be
+# copied (in certain cases, depending on the input) into the output of
+# mkerrcodes.awk. We call these the "data" portions. The rest of the
+# mkerrcodes.awk source text consists of comments plus executable code
+# that decides which of the data portions to output in any given case.
+# We call these comments and executable code the "non-data" portions.
+# mkerrcodes.h never copies any of the non-data portions into its output.
+#
+# This special exception to the GPL applies to versions of mkerrcodes.awk
+# released by g10 Code GmbH. When you make and distribute a modified version
+# of mkerrcodes.awk, you may extend this special exception to the GPL to
+# apply to your modified version as well, *unless* your modified version
+# has the potential to copy into its output some of the text that was the
+# non-data portion of the version that you started with. (In other words,
+# unless your change moves or copies text from the non-data portions to the
+# data portions.) If your modification has such potential, you must delete
+# any notice of this special exception to the GPL from your modified version.
+
+# This script outputs an intermediate file that contains the following block
+# for each error value symbol in the input file (example for EINVAL):
+#
+# #ifdef EINVAL
+# EINVAL GPG_ERR_EINVAL
+# #endif
+#
+# The input file is a list of possible system errors.
+#
+# Comments (starting with # and ending at the end of the line) are removed,
+# as is trailing whitespace.
+
+BEGIN {
+ FS="[ \t]+GPG_ERR_";
+ print "/* Output of mkerrcodes.awk. DO NOT EDIT. */";
+ print "";
+ header = 1;
+}
+
+/^#/ { next; }
+
+header {
+ if ($0 ~ /^[0-9]+/)
+ {
+ header = 0;
+
+ print "static struct";
+ print " {";
+ print " int err;";
+ print " const char *err_sym;";
+ print " } err_table[] = ";
+ print "{";
+ }
+ else
+ print;
+}
+
+!header {
+ sub (/\#.+/, "");
+ sub (/[ ]+$/, ""); # Strip trailing space and tab characters.
+
+ if (/^$/)
+ next;
+
+ print " { " $1 ", \"GPG_ERR_" $2 "\" },";
+}
+
+END {
+ print "};";
+}
diff --git a/src/mkerrcodes.c b/src/mkerrcodes.c
new file mode 100644
index 0000000..7d1a7f2
--- /dev/null
+++ b/src/mkerrcodes.c
@@ -0,0 +1,76 @@
+/* mkerrcodes.c - Generate list of system error values.
+ Copyright (C) 2004 g10 Code GmbH
+
+ This file is part of libgpg-error.
+
+ 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.
+
+ libgpg-error 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 libgpg-error; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+/* This file must not include config.h, as that is for the host
+ system, while this file will be run on the build system. */
+
+#include <stdio.h>
+
+#include "mkerrcodes.h"
+
+static const char header[] =
+"/* errnos.h - List of system error values.\n"
+" Copyright (C) 2004 g10 Code GmbH\n"
+" This file is part of libgpg-error.\n"
+"\n"
+" libgpg-error is free software; you can redistribute it and/or\n"
+" modify it under the terms of the GNU Lesser General Public License\n"
+" as published by the Free Software Foundation; either version 2.1 of\n"
+" the License, or (at your option) any later version.\n"
+"\n"
+" libgpg-error is distributed in the hope that it will be useful, but\n"
+" WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+" Lesser General Public License for more details.\n"
+"\n"
+" You should have received a copy of the GNU Lesser General Public\n"
+" License along with libgpg-error; if not, write to the Free\n"
+" Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA\n"
+" 02111-1307, USA. */\n"
+"\n";
+
+int
+main (int argc, char *argv)
+{
+ int sorted;
+ int i;
+
+ printf ("%s", header);
+ do
+ {
+ sorted = 1;
+ for (i = 0; i < sizeof (err_table) / sizeof (err_table[0]) - 1; i++)
+ if (err_table[i].err > err_table[i + 1].err)
+ {
+ int err = err_table[i].err;
+ const char *err_sym = err_table[i].err_sym;
+
+ err_table[i].err = err_table[i + 1].err;
+ err_table[i].err_sym = err_table[i + 1].err_sym;
+ err_table[i + 1].err = err;
+ err_table[i + 1].err_sym = err_sym;
+ sorted = 0;
+ }
+ }
+ while (!sorted);
+
+ for (i = 0; i < sizeof (err_table) / sizeof (err_table[0]); i++)
+ printf ("%i\t%s\n", err_table[i].err, err_table[i].err_sym);
+}