diff options
author | Christoph Reiter <reiter.christoph@gmail.com> | 2018-12-14 11:21:29 +0100 |
---|---|---|
committer | Christoph Reiter <reiter.christoph@gmail.com> | 2018-12-16 12:51:58 +0100 |
commit | 9c339f8b0d73c3475edeab37c52dbf991f67b7fa (patch) | |
tree | 0b87aeb20b2b8f17076d90510b68f1d02410891a /girepository | |
parent | c0dd66c3f6cf25404124b5a4d2e49f5cdc9b7110 (diff) | |
download | gobject-introspection-9c339f8b0d73c3475edeab37c52dbf991f67b7fa.tar.gz |
girepository: Add version macros and functions. Fixes #200
This adds the following macros and functions: GI_MAJOR_VERSION, GI_MICRO_VERSION,
GI_MINOR_VERSION, GI_CHECK_VERSION, gi_get_major_version,gi_get_micro_version,
gi_get_minor_version.
Since we share a prefix with glib we have to namespace these by using the gi_
prefix. g_gi would also work but we already export symbols with gi_ like
gi_cclosure_marshal_generic(), gi_type_tag_get_ffi_type() and
gi_type_info_extract_ffi_return_value(), so let's not add another naming scheme.
Diffstat (limited to 'girepository')
-rw-r--r-- | girepository/girepository.h | 1 | ||||
-rw-r--r-- | girepository/giversion.c | 114 | ||||
-rw-r--r-- | girepository/giversion.h.in | 47 | ||||
-rw-r--r-- | girepository/giversionmacros.h | 6 | ||||
-rw-r--r-- | girepository/meson.build | 12 |
5 files changed, 179 insertions, 1 deletions
diff --git a/girepository/girepository.h b/girepository/girepository.h index e3ed8372..3934ab31 100644 --- a/girepository/girepository.h +++ b/girepository/girepository.h @@ -47,6 +47,7 @@ #include <giunioninfo.h> #include <giversionmacros.h> #include <givfuncinfo.h> +#include <giversion.h> G_BEGIN_DECLS diff --git a/girepository/giversion.c b/girepository/giversion.c new file mode 100644 index 00000000..927190fb --- /dev/null +++ b/girepository/giversion.c @@ -0,0 +1,114 @@ +/* Copyright (C) 2018 Christoph Reiter + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include <girepository.h> + +/** + * SECTION:giversion + * @Title: Version Information + * @Short_description: macros and functions to check the girepository version + */ + +/** + * GI_MAJOR_VERSION: + * + * The major version number of the girepository library. + * + * Since: 1.60 + */ + +/** + * GI_MINOR_VERSION: + * + * The minor version number of the girepository library. + * + * Since: 1.60 + */ + +/** + * GI_MICRO_VERSION: + * + * The micro version number of the girepository library. + * + * Since: 1.60 + */ + +/** + * GI_CHECK_VERSION: + * @major: the major version to check for + * @minor: the minor version to check for + * @micro: the micro version to check for + * + * Checks the version of the girepository library that is being compiled + * against. + * + * Returns: %TRUE if the version of the girepository header files + * is the same as or newer than the passed-in version. + * + * Since: 1.60 + */ + +/** + * gi_get_major_version: + * + * Returns the major version number of the girepository library. + * (e.g. in version 1.58.2 this is 1.) + * + * Returns: the major version number of the girepository library + * + * Since: 1.60 + */ +guint +gi_get_major_version (void) +{ + return GI_MAJOR_VERSION; +} + +/** + * gi_get_minor_version: + * + * Returns the minor version number of the girepository library. + * (e.g. in version 1.58.2 this is 58.) + * + * Returns: the minor version number of the girepository library + * + * Since: 1.60 + */ +guint +gi_get_minor_version (void) +{ + return GI_MINOR_VERSION; +} + +/** + * gi_get_micro_version: + * + * Returns the micro version number of the girepository library. + * (e.g. in version 1.58.2 this is 2.) + * + * Returns: the micro version number of the girepository library + * + * Since: 1.60 + */ +guint +gi_get_micro_version (void) +{ + return GI_MICRO_VERSION; +} diff --git a/girepository/giversion.h.in b/girepository/giversion.h.in new file mode 100644 index 00000000..177d33d1 --- /dev/null +++ b/girepository/giversion.h.in @@ -0,0 +1,47 @@ +/* Copyright (C) 2018 Christoph Reiter + * + * This library 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 of the License, or (at your option) any later version. + * + * This library 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 library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GIVERISON_H__ +#define __GIVERISON_H__ + +#if !defined (__GIREPOSITORY_H_INSIDE__) && !defined (GI_COMPILATION) +#error "Only <girepository.h> can be included directly." +#endif + +G_BEGIN_DECLS + +#define GI_MAJOR_VERSION @GI_MAJOR_VERSION@ +#define GI_MINOR_VERSION @GI_MINOR_VERSION@ +#define GI_MICRO_VERSION @GI_MICRO_VERSION@ + +#define GI_CHECK_VERSION(major,minor,micro) \ + (GI_MAJOR_VERSION > (major) || \ + (GI_MAJOR_VERSION == (major) && GI_MINOR_VERSION > (minor)) || \ + (GI_MAJOR_VERSION == (major) && GI_MINOR_VERSION == (minor) && \ + GI_MICRO_VERSION >= (micro))) + +GI_AVAILABLE_IN_1_60 +guint gi_get_major_version (void) G_GNUC_CONST; +GI_AVAILABLE_IN_1_60 +guint gi_get_minor_version (void) G_GNUC_CONST; +GI_AVAILABLE_IN_1_60 +guint gi_get_micro_version (void) G_GNUC_CONST; + +G_END_DECLS + +#endif /* __GIVERISON_H__ */ diff --git a/girepository/giversionmacros.h b/girepository/giversionmacros.h index bf8a0861..c32e5bb8 100644 --- a/girepository/giversionmacros.h +++ b/girepository/giversionmacros.h @@ -153,4 +153,10 @@ # define GI_AVAILABLE_IN_1_46 _GI_EXTERN #endif +#if defined(GLIB_VERSION_2_60) && GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_60 +# define GI_AVAILABLE_IN_1_60 GLIB_UNAVAILABLE(2, 60) +#else +# define GI_AVAILABLE_IN_1_60 _GI_EXTERN +#endif + #endif /* __GIVERSIONMACROS_H__ */ diff --git a/girepository/meson.build b/girepository/meson.build index 6a8c5b5d..cc8d8420 100644 --- a/girepository/meson.build +++ b/girepository/meson.build @@ -36,6 +36,12 @@ girepo_internals_dep = declare_dependency( include_directories: include_directories('.'), ) +gi_version_h = configure_file( + configuration: config, + input: 'giversion.h.in', + output: 'giversion.h', +) + girepo_headers = [ 'giarginfo.h', 'gibaseinfo.h', @@ -58,6 +64,7 @@ girepo_headers = [ 'giunioninfo.h', 'giversionmacros.h', 'givfuncinfo.h', + gi_version_h, ] girepo_sources = [ @@ -81,6 +88,7 @@ girepo_sources = [ 'gitypeinfo.c', 'gitypelib.c', 'giunioninfo.c', + 'giversion.c', 'givfuncinfo.c', ] @@ -102,6 +110,7 @@ girepo_gir_sources = files( 'gistructinfo.c', 'gitypeinfo.c', 'giunioninfo.c', + 'giversion.c', 'givfuncinfo.c', 'giarginfo.h', 'gibaseinfo.h', @@ -122,7 +131,8 @@ girepo_gir_sources = files( 'gitypes.h', 'giunioninfo.h', 'givfuncinfo.h', -) +) + [gi_version_h] + install_headers(girepo_headers, subdir: 'gobject-introspection-1.0') |