diff --git a/.gitignore b/.gitignore
index 0c8c394..5f2e41a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,6 +73,7 @@ stamp*
/libsecret/*-dbus-generated.[ch]
/libsecret/secret-enum-types.[ch]
+/libsecret/secret-version.h
/libsecret/tests/test-*
/libsecret/tests/*.metadata
!/libsecret/tests/test-*.c
diff --git a/configure.ac b/configure.ac
index 05fe195..1ce2375 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,9 +1,18 @@
AC_PREREQ(2.63)
-AC_INIT([libsecret],[0.18.8],
+m4_define([libsecret_major_version], 0)
+m4_define([libsecret_minor_version], 18)
+m4_define([libsecret_micro_version], 8)
+m4_define([libsecret_version],
+ [libsecret_major_version.libsecret_minor_version.libsecret_micro_version])
+AC_INIT([libsecret],[libsecret_version],
[https://gitlab.gnome.org/GNOME/libsecret/issues/],
[libsecret])
+AC_SUBST(SECRET_MAJOR_VERSION, libsecret_major_version)
+AC_SUBST(SECRET_MINOR_VERSION, libsecret_minor_version)
+AC_SUBST(SECRET_MICRO_VERSION, libsecret_micro_version)
+
dnl ****************************************************************************
dnl Dependency versions
@@ -281,6 +290,7 @@ AC_CONFIG_FILES([
po/Makefile
libsecret/libsecret.pc
libsecret/libsecret-unstable.pc
+ libsecret/secret-version.h
])
AC_OUTPUT
diff --git a/docs/reference/libsecret/libsecret-docs.sgml b/docs/reference/libsecret/libsecret-docs.sgml
index 92e6346..6ce3dba 100644
--- a/docs/reference/libsecret/libsecret-docs.sgml
+++ b/docs/reference/libsecret/libsecret-docs.sgml
@@ -31,6 +31,7 @@
+
diff --git a/docs/reference/libsecret/libsecret-sections.txt b/docs/reference/libsecret/libsecret-sections.txt
index de28b3b..2ae7250 100644
--- a/docs/reference/libsecret/libsecret-sections.txt
+++ b/docs/reference/libsecret/libsecret-sections.txt
@@ -337,3 +337,11 @@ secret_attributes_buildv
+
+
+secret-version
+SECRET_CHECK_VERSION
+SECRET_MAJOR_VERSION
+SECRET_MICRO_VERSION
+SECRET_MINOR_VERSION
+
diff --git a/libsecret/Makefile.am b/libsecret/Makefile.am
index 3dff582..c91b733 100644
--- a/libsecret/Makefile.am
+++ b/libsecret/Makefile.am
@@ -22,6 +22,7 @@ libsecret_HEADS = \
inc_HEADERS = \
$(libsecret_HEADS) \
libsecret/secret-enum-types.h \
+ libsecret/secret-version.h \
$(NULL)
libsecret_BUILT_ENUMS = \
@@ -31,6 +32,7 @@ libsecret_BUILT_ENUMS = \
libsecret_BUILT = \
secret-dbus-generated.c secret-dbus-generated.h \
$(libsecret_BUILT_ENUMS) \
+ libsecret/secret-version.h \
$(NULL)
libsecret_PUBLIC = \
@@ -121,7 +123,11 @@ Secret_@SECRET_MAJOR@_gir_EXPORT_PACKAGES = libsecret-@SECRET_MAJOR@
Secret_@SECRET_MAJOR@_gir_INCLUDES = GObject-2.0 Gio-2.0
Secret_@SECRET_MAJOR@_gir_LIBS = libsecret-@SECRET_MAJOR@.la
Secret_@SECRET_MAJOR@_gir_CFLAGS = -I$(srcdir) -I$(builddir) -DSECRET_COMPILATION
-Secret_@SECRET_MAJOR@_gir_FILES = $(libsecret_PUBLIC) $(libsecret_BUILT_ENUMS)
+Secret_@SECRET_MAJOR@_gir_FILES = \
+ $(libsecret_PUBLIC) \
+ $(libsecret_BUILT_ENUMS) \
+ libsecret/secret-version.h \
+ $(NULL)
Secret_@SECRET_MAJOR@_gir_SCANNERFLAGS = --c-include "libsecret/secret.h"
gir_DATA += Secret-@SECRET_MAJOR@.gir
diff --git a/libsecret/meson.build b/libsecret/meson.build
index 590694e..f35c396 100644
--- a/libsecret/meson.build
+++ b/libsecret/meson.build
@@ -31,6 +31,19 @@ libsecret_headers = [
'secret-value.h',
]
+version_numbers = meson.project_version().split('.')
+version_major = version_numbers[0].to_int()
+version_minor = version_numbers[1].to_int()
+version_micro = version_numbers[2].to_int()
+version_h_conf = configuration_data()
+version_h_conf.set('SECRET_MAJOR_VERSION', version_major)
+version_h_conf.set('SECRET_MINOR_VERSION', version_minor)
+version_h_conf.set('SECRET_MICRO_VERSION', version_micro)
+version_h = configure_file(input: 'secret-version.h.in',
+ output: 'secret-version.h',
+ configuration: version_h_conf)
+libsecret_headers += version_h
+
_dbus_generated = gnome.gdbus_codegen('secret-dbus-generated',
sources: 'org.freedesktop.Secrets.xml',
interface_prefix: 'org.freedesktop.Secret.',
@@ -101,6 +114,7 @@ libsecret_gir_sources = [
'secret-value.c',
'secret-value.h',
]
+libsecret_gir_sources += version_h
libsecret_gir_sources += _enums_generated
libsecret_gir = gnome.generate_gir(libsecret,
diff --git a/libsecret/secret-version.h.in b/libsecret/secret-version.h.in
new file mode 100644
index 0000000..30a8389
--- /dev/null
+++ b/libsecret/secret-version.h.in
@@ -0,0 +1,65 @@
+/* libsecret - GLib wrapper for Secret Service
+ *
+ * Copyright 2019 Sutou Kouhei
+ *
+ * This program 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 licence or (at
+ * your option) any later version.
+ *
+ * See the included COPYING file for more information.
+ *
+ * Author: Sutou Kouhei
+ */
+
+#if !defined (__SECRET_INSIDE_HEADER__) && !defined (SECRET_COMPILATION)
+#error "Only can be included directly."
+#endif
+
+#pragma __once__
+
+/**
+ * SECTION:secret-version
+ * @short_description: Variables and macros to check the libsecret version
+ * @title: Version Information
+ *
+ * Stability: Stable
+ */
+
+/**
+ * SECRET_MAJOR_VERSION:
+ *
+ * The major version of libsecret.
+ */
+#define SECRET_MAJOR_VERSION (@SECRET_MAJOR_VERSION@)
+
+/**
+ * SECRET_MINOR_VERSION:
+ *
+ * The minor version of libsecret.
+ */
+#define SECRET_MINOR_VERSION (@SECRET_MINOR_VERSION@)
+
+/**
+ * SECRET_MICRO_VERSION:
+ *
+ * The micro version of libsecret.
+ */
+#define SECRET_MICRO_VERSION (@SECRET_MICRO_VERSION@)
+
+/**
+ * SECRET_CHECK_VERSION:
+ * @major: major version to be satisfied
+ * @minor: minor version to be satisfied
+ * @micro: micro version to be satisfied
+ *
+ * Returns: %TRUE if using libsecret is newer than or equal to the
+ * given version
+ */
+#define SECRET_CHECK_VERSION(major, minor, micro) \
+ (SECRET_MAJOR_VERSION > (major) || \
+ (SECRET_MAJOR_VERSION == (major) && \
+ SECRET_MINOR_VERSION > (minor)) || \
+ (SECRET_MAJOR_VERSION == (major) && \
+ SECRET_MINOR_VERSION == (minor) && \
+ SECRET_MICRO_VERSION >= (micro)))
diff --git a/libsecret/secret.h b/libsecret/secret.h
index 12c22f6..8d11324 100644
--- a/libsecret/secret.h
+++ b/libsecret/secret.h
@@ -30,6 +30,7 @@
#include
#include
#include
+#include
/* SECRET_WITH_UNSTABLE is defined in the secret-unstable.pc pkg-config file */
#if defined(SECRET_WITH_UNSTABLE) || defined(SECRET_API_SUBJECT_TO_CHANGE)