aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am39
-rw-r--r--src/gpg-error-config.in2
-rw-r--r--src/gpg-error.def.in5
-rw-r--r--src/gpg-error.h.in13
-rw-r--r--src/version.c121
-rw-r--r--src/versioninfo.rc.in4
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