diff --git a/girepository.h b/girepository.h index e3ed8372e..3934ab31f 100644 --- a/girepository.h +++ b/girepository.h @@ -47,6 +47,7 @@ #include #include #include +#include G_BEGIN_DECLS diff --git a/giversion.c b/giversion.c new file mode 100644 index 000000000..927190fb4 --- /dev/null +++ b/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 + +/** + * 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/giversion.h.in b/giversion.h.in new file mode 100644 index 000000000..177d33d19 --- /dev/null +++ b/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 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/giversionmacros.h b/giversionmacros.h index bf8a08619..c32e5bb86 100644 --- a/giversionmacros.h +++ b/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/meson.build b/meson.build index 6a8c5b5d8..cc8d84204 100644 --- a/meson.build +++ b/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')