diff options
author | Marcus Brinkmann <[email protected]> | 2004-03-01 23:06:58 +0000 |
---|---|---|
committer | Marcus Brinkmann <[email protected]> | 2004-03-01 23:06:58 +0000 |
commit | b1fd915a4cbb105754b5d32a0a74f6afca200973 (patch) | |
tree | 2dc3481623c36f9bd089b4f461d62dbe24a84fe1 | |
parent | 2004-03-01 Marcus Brinkmann <[email protected]> (diff) | |
download | libgpg-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-- | ChangeLog | 15 | ||||
-rw-r--r-- | NEWS | 88 | ||||
-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | src/Makefile.am | 21 | ||||
-rw-r--r-- | src/errnos.in | 2 | ||||
-rw-r--r-- | src/mkerrcodes.awk | 93 | ||||
-rw-r--r-- | src/mkerrcodes.c | 76 |
7 files changed, 258 insertions, 50 deletions
@@ -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 ... @@ -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); +} |