diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 39 | ||||
-rw-r--r-- | src/gpg-error-config.in | 2 | ||||
-rw-r--r-- | src/gpg-error.def.in | 5 | ||||
-rw-r--r-- | src/gpg-error.h.in | 13 | ||||
-rw-r--r-- | src/version.c | 121 | ||||
-rw-r--r-- | src/versioninfo.rc.in | 4 |
6 files changed, 159 insertions, 25 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index a84e3f0..cf9a364 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,33 +1,33 @@ # Makefile.am for libgpg-error. # Copyright (C) 2003, 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA # We distribute the generated sources err-sources.h and err-codes.h, # because they are needed to build the po directory, and they don't -# depend on the configuration anyway. +# depend on the configuration anyway. if HAVE_W32CE_SYSTEM gpg_extra_headers = gpg-extra/errno.h extra_cppflags = -idirafter gpg-extra else -gpg_extra_headers = -extra_cppflags = +gpg_extra_headers = +extra_cppflags = endif localedir = $(datadir)/locale @@ -47,9 +47,9 @@ EXTRA_DIST = mkstrtable.awk err-sources.h.in err-codes.h.in \ 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 gpg-error.h \ - gpg-error.def extra-h.in mkw32errmap.map.c + gpg-error.def extra-h.in mkw32errmap.map.c -tmp_files = _mkerrcodes.h _gpg-error.def.h mkw32errmap.tab.h mkw32errmap.map.c +tmp_files = _mkerrcodes.h _gpg-error.def.h mkw32errmap.tab.h mkw32errmap.map.c CLEANFILES = err-sources.h err-codes.h code-to-errno.h code-from-errno.h \ gpg-error.h mkerrcodes mkerrcodes.h gpg-error.def mkw32errmap.tab.h \ @@ -79,7 +79,7 @@ uninstall-def-file: -rm $(DESTDIR)$(libdir)/gpg-error.def libgpg_error_la_DEPENDENCIES = $(gpg_error_res) gpg-error.def -intllibs = +intllibs = else arch_sources = @@ -99,7 +99,8 @@ libgpg_error_la_LDFLAGS = -version-info \ $(no_undefined) $(export_symbols) libgpg_error_la_SOURCES = gpg-error.h gettext.h $(arch_sources) \ - init.c init.h strsource.c strerror.c code-to-errno.c code-from-errno.c + init.c init.h version.c \ + strsource.c strerror.c code-to-errno.c code-from-errno.c # Note that RCCOMPILE needs the same defines as ..._la_CPPFLAGS but # without the extra_cppflags because they may include am -idirafter @@ -107,7 +108,7 @@ libgpg_error_la_SOURCES = gpg-error.h gettext.h $(arch_sources) \ libgpg_error_la_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" $(extra_cppflags) libgpg_error_la_LIBADD = $(gpg_error_res) $(intllibs) -gpg_error_SOURCES = strsource-sym.c strerror-sym.c gpg-error.c +gpg_error_SOURCES = strsource-sym.c strerror-sym.c gpg-error.c gpg_error_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" $(extra_cppflags) gpg_error_LDADD = ./libgpg-error.la @LTLIBINTL@ @@ -185,14 +186,22 @@ errnos-sym.h: Makefile mkstrtable.awk errnos.in -v prefix=GPG_ERR_ -v namespace=errnos_ \ $(srcdir)/errnos.in >$@ -extra-h.in: Makefile w32-add.h w32ce-add.h +# We depend on versioninfo.rc because that is build by config.status +# and thus has up-to-date version numbers. +extra-h.in: Makefile w32-add.h w32ce-add.h versioninfo.rc -rm extra-h.in + echo "/* The version string of this header. */" >>extra-h.in + echo "#define GPG_ERROR_VERSION \"$(PACKAGE_VERSION)\"" >>extra-h.in + echo >>extra-h.in + echo "/* The version number of this header. */" >>extra-h.in + echo "#define GPG_ERROR_VERSION_NUMBER $(VERSION_NUMBER)" >>extra-h.in + echo >>extra-h.in if HAVE_W32_SYSTEM cat $(srcdir)/w32-add.h >>extra-h.in -endif +endif if HAVE_W32CE_SYSTEM cat $(srcdir)/w32ce-add.h >>extra-h.in -endif +endif echo EOF >>extra-h.in gpg-error.h: Makefile mkheader.awk err-sources.h.in err-codes.h.in \ diff --git a/src/gpg-error-config.in b/src/gpg-error-config.in index df27f0a..b132314 100644 --- a/src/gpg-error-config.in +++ b/src/gpg-error-config.in @@ -54,7 +54,7 @@ while test $# -gt 0; do output="$output $exec_prefix" ;; --version) - echo "@VERSION@" + echo "@PACKAGE_VERSION@" exit 0 ;; --cflags) diff --git a/src/gpg-error.def.in b/src/gpg-error.def.in index cbabd57..62e0681 100644 --- a/src/gpg-error.def.in +++ b/src/gpg-error.def.in @@ -6,8 +6,8 @@ EXPORTS gpg_strerror @1 - gpg_strerror_r @2 - gpg_strsource @3 + gpg_strerror_r @2 + gpg_strsource @3 gpg_err_code_from_errno @4 gpg_err_code_to_errno @5 gpg_err_init @6 @@ -27,3 +27,4 @@ EXPORTS _gpg_w32_gettext_use_utf8 @17 #endif gpg_err_deinit @18 + gpg_error_check_version @19 diff --git a/src/gpg-error.h.in b/src/gpg-error.h.in index f89945a..303fac0 100644 --- a/src/gpg-error.h.in +++ b/src/gpg-error.h.in @@ -1,18 +1,18 @@ /* gpg-error.h - Public interface to libgpg-error. - Copyright (C) 2003, 2004, 2010 g10 Code GmbH + Copyright (C) 2003, 2004, 2010, 2013 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 this program; if not, see <http://www.gnu.org/licenses/>. */ @@ -32,7 +32,7 @@ #else #ifndef GPG_ERR_INLINE #define GPG_ERR_INLINE -#endif +#endif #endif @@ -245,6 +245,9 @@ gpg_err_code_t gpg_err_code_from_syserror (void); ERRNO due to peculiarities on WindowsCE. */ void gpg_err_set_errno (int err); +/* Return or check the version. */ +const char *gpg_error_check_version (const char *req_version); + @include extra-h.in /* Self-documenting convenience functions. */ diff --git a/src/version.c b/src/version.c new file mode 100644 index 0000000..36e2d58 --- /dev/null +++ b/src/version.c @@ -0,0 +1,121 @@ +/* version.c - Version checking + * Copyright (C) 2001, 2002, 2012, 2013 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 this program; if not, see <http://www.gnu.org/licenses/>. + */ + +#if HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <gpg-error.h> + + +#define digitp(a) ((a) >= '0' && (a) <= '9') + + +/* This is actually a dummy function to make sure that is module is + not empty. Some compilers barf on empty modules. */ +static const char * +cright_blurb (void) +{ + static const char blurb[] = + "\n\n" + "This is Libgpg-error " PACKAGE_VERSION " - An error code library\n" + "Copyright 2003, 2004, 2010, 2013 g10 Code GmbH\n" + "\n" + "(" BUILD_REVISION " " BUILD_TIMESTAMP ")\n" + "\n\n"; + return blurb; +} + + +static const char* +parse_version_number (const char *s, int *number) +{ + int val = 0; + + if (*s == '0' && digitp (s[1])) + return NULL; /* Leading zeros are not allowed. */ + for (; digitp (*s); s++) + { + val *= 10; + val += *s - '0'; + } + *number = val; + return val < 0 ? NULL : s; +} + + +static const char * +parse_version_string (const char *s, int *major, int *minor) +{ + s = parse_version_number (s, major); + if (!s || *s != '.') + return NULL; + s++; + s = parse_version_number (s, minor); + if (!s) + return NULL; + return s; /* Patchlevel. */ +} + + +static const char * +compare_versions (const char *my_version, const char *req_version) +{ + int my_major, my_minor; + int rq_major, rq_minor; + const char *my_plvl, *rq_plvl; + + if (!req_version) + return my_version; + if (!my_version) + return NULL; + + my_plvl = parse_version_string (my_version, &my_major, &my_minor); + if (!my_plvl) + return NULL; /* Very strange: our own version is bogus. */ + rq_plvl = parse_version_string(req_version, &rq_major, &rq_minor); + if (!rq_plvl) + return NULL; /* Requested version string is invalid. */ + + if (my_major > rq_major + || (my_major == rq_major && my_minor >= rq_minor)) + { + return my_version; + } + return NULL; +} + + +/* + * Check that the the version of the library is at minimum REQ_VERSION + * and return the actual version string; return NULL if the condition + * is not met. If NULL is passed to this function, no check is done + * and the version string is simply returned. + */ +const char * +gpg_error_check_version (const char *req_version) +{ + if (req_version && req_version[0] == 1 && req_version[1] == 1) + return cright_blurb (); + return compare_versions (PACKAGE_VERSION, req_version); +} diff --git a/src/versioninfo.rc.in b/src/versioninfo.rc.in index 284195b..bcf5893 100644 --- a/src/versioninfo.rc.in +++ b/src/versioninfo.rc.in @@ -39,12 +39,12 @@ BEGIN VALUE "FileDescription", "libgpg-error - Common error codes\0" VALUE "FileVersion", "@LIBGPG_ERROR_LT_CURRENT@.@LIBGPG_ERROR_LT_AGE@.@LIBGPG_ERROR_LT_REVISION@.@BUILD_REVISION@\0" VALUE "InternalName", "libgpg-error\0" - VALUE "LegalCopyright", "Copyright � 2012 g10 Code GmbH\0" + VALUE "LegalCopyright", "Copyright � 2013 g10 Code GmbH\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "libgpg-error.dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "libgpg-error\0" - VALUE "ProductVersion", "@VERSION@\0" + VALUE "ProductVersion", "@PACKAGE_VERSION@\0" VALUE "SpecialBuild", "@BUILD_TIMESTAMP@\0" END END |