--- a/gplugin/gplugin-version.c Fri Feb 21 00:11:31 2020 -0600
+++ b/gplugin/gplugin-version.c Sun Feb 23 04:35:25 2020 +0000
@@ -160,6 +160,49 @@
+ * gplugin_version_check: + * @major: The required major version. + * @minro: The required minor version. + * @micro: The required micro version. + * Checks that the GPlugin library in use is compatible with the given version. + * Generally you would pass in the constants #GPLUGIN_MAJOR_VERSION, + * #GPLUGIN_MINOR_VERSION, #GPLUGIN_MICRO_VERSION as the three arguments to + * this function; that produces a check that the library in use is compatible + * with the version of GPlugin the application or module was compiled against. + * Compatibility is defined by two things: first the version of the running + * library is newer than the version @major.@minor.@micro. Second the running + * library must be binary compatible with the version @major.@minor.@micro + * (same major version). + * Returns: %NULL if the GPlugin library is compatible with the given version, + * or a string describing the version mismatch. The returned string + * is owned by GPlugin and must not be modified or freed. +gplugin_version_check(guint major, guint minor, guint micro) { + if(major > GPLUGIN_MAJOR_VERSION) { + return "gplugin version too old (major mismatch)"; + /* disable the pvs-studio suppression after 1.0.0 is released */ + if(major < GPLUGIN_MAJOR_VERSION) { //-V547 + return "gplugin version too new (major mismatch)"; + if(minor > GPLUGIN_MINOR_VERSION) { + return "gplugin version too old (minor mismatch)"; + if(minor == GPLUGIN_MINOR_VERSION && micro > GPLUGIN_MICRO_VERSION) { + return "gplugin version too old (micro mismatch)"; * gplugin_version_compare:
* @v1: The first version to compare.
* @v2: The second version to compare.
--- a/gplugin/gplugin-version.h.in Fri Feb 21 00:11:31 2020 -0600
+++ b/gplugin/gplugin-version.h.in Sun Feb 23 04:35:25 2020 +0000
@@ -38,6 +38,8 @@
+const gchar *gplugin_version_check(guint major, guint minor, guint micro); gint gplugin_version_compare(const gchar *v1, const gchar *v2, GError **error);
--- a/gplugin/tests/test-version-compare.c Fri Feb 21 00:11:31 2020 -0600
+++ b/gplugin/tests/test-version-compare.c Sun Feb 23 04:35:25 2020 +0000
@@ -28,7 +28,7 @@
test_gplugin_version_null__null(void) {
- g_test_trap_subprocess("/version-check/null__null/subprocess", 0, 0);
+ g_test_trap_subprocess("/version-compare/null__null/subprocess", 0, 0); g_test_trap_assert_failed();
g_test_trap_assert_stderr("*gplugin_version_compare*assertion*");
@@ -41,7 +41,7 @@
test_gplugin_version_null__1_2_3(void) {
- g_test_trap_subprocess("/version-check/null__1_2_3/subprocess", 0, 0);
+ g_test_trap_subprocess("/version-compare/null__1_2_3/subprocess", 0, 0); g_test_trap_assert_failed();
g_test_trap_assert_stderr("*gplugin_version_compare*assertion*");
@@ -54,7 +54,7 @@
test_gplugin_version_1_2_3__null(void) {
- g_test_trap_subprocess("/version-check/1_2_3__null/subprocess", 0, 0);
+ g_test_trap_subprocess("/version-compare/1_2_3__null/subprocess", 0, 0); g_test_trap_assert_failed();
g_test_trap_assert_stderr("*gplugin_version_compare*assertion*");
@@ -73,7 +73,7 @@
test_gplugin_version_abc__1_2_3(void) {
- g_test_trap_subprocess("/version-check/abc__1_2_3/subprocess", 0, 0);
+ g_test_trap_subprocess("/version-compare/abc__1_2_3/subprocess", 0, 0); g_test_trap_assert_failed();
g_test_trap_assert_stderr("*assertion*");
@@ -92,7 +92,7 @@
test_gplugin_version_1_2_3__abc(void) {
- g_test_trap_subprocess("/version-check/1_2_3__abc/subprocess", 0, 0);
+ g_test_trap_subprocess("/version-compare/1_2_3__abc/subprocess", 0, 0); g_test_trap_assert_failed();
g_test_trap_assert_stderr("*assertion*");
@@ -182,65 +182,65 @@
- g_test_add_func("/version-check/null__null",
+ g_test_add_func("/version-compare/null__null", test_gplugin_version_null__null);
- g_test_add_func("/version-check/null__1_2_3",
+ g_test_add_func("/version-compare/null__1_2_3", test_gplugin_version_null__1_2_3);
- g_test_add_func("/version-check/1_2_3__null",
+ g_test_add_func("/version-compare/1_2_3__null", test_gplugin_version_1_2_3__null);
- g_test_add_func("/version-check/abc__1_2_3",
+ g_test_add_func("/version-compare/abc__1_2_3", test_gplugin_version_abc__1_2_3);
- g_test_add_func("/version-check/1_2_3__abc",
+ g_test_add_func("/version-compare/1_2_3__abc", test_gplugin_version_1_2_3__abc);
- g_test_add_func("/version-check/null__null/subprocess",
+ g_test_add_func("/version-compare/null__null/subprocess", test_gplugin_version_null__null_subprocess);
- g_test_add_func("/version-check/null__1_2_3/subprocess",
+ g_test_add_func("/version-compare/null__1_2_3/subprocess", test_gplugin_version_null__1_2_3_subprocess);
- g_test_add_func("/version-check/1_2_3__null/subprocess",
+ g_test_add_func("/version-compare/1_2_3__null/subprocess", test_gplugin_version_1_2_3__null_subprocess);
- g_test_add_func("/version-check/abc__1_2_3/subprocess",
+ g_test_add_func("/version-compare/abc__1_2_3/subprocess", test_gplugin_version_abc__1_2_3_subprocess);
- g_test_add_func("/version-check/1_2_3__abc/subprocess",
+ g_test_add_func("/version-compare/1_2_3__abc/subprocess", test_gplugin_version_1_2_3__abc_subprocess);
- g_test_add_func("/version-check/1_0_0__0_0_0",
+ g_test_add_func("/version-compare/1_0_0__0_0_0", test_gplugin_version_1_0_0__0_0_0);
- g_test_add_func("/version-check/1_0_0__1_0_0",
+ g_test_add_func("/version-compare/1_0_0__1_0_0", test_gplugin_version_1_0_0__1_0_0);
- g_test_add_func("/version-check/0_0_0__1_0_0",
+ g_test_add_func("/version-compare/0_0_0__1_0_0", test_gplugin_version_0_0_0__1_0_0);
- g_test_add_func("/version-check/0_1_0__0_0_0",
+ g_test_add_func("/version-compare/0_1_0__0_0_0", test_gplugin_version_0_1_0__0_0_0);
- g_test_add_func("/version-check/0_1_0__0_1_0",
+ g_test_add_func("/version-compare/0_1_0__0_1_0", test_gplugin_version_0_1_0__0_1_0);
- g_test_add_func("/version-check/0_0_0__0_1_0",
+ g_test_add_func("/version-compare/0_0_0__0_1_0", test_gplugin_version_0_0_0__0_1_0);
- g_test_add_func("/version-check/0_0_1__0_0_0",
+ g_test_add_func("/version-compare/0_0_1__0_0_0", test_gplugin_version_0_0_1__0_0_0);
- g_test_add_func("/version-check/0_0_1__0_0_1",
+ g_test_add_func("/version-compare/0_0_1__0_0_1", test_gplugin_version_0_0_1__0_0_1);
- g_test_add_func("/version-check/0_0_0__0_0_1",
+ g_test_add_func("/version-compare/0_0_0__0_0_1", test_gplugin_version_0_0_0__0_0_1);
- g_test_add_func("/version-check/1_0__0_1",
+ g_test_add_func("/version-compare/1_0__0_1", test_gplugin_version_1_0__0_1);
- g_test_add_func("/version-check/1_0__1_0",
+ g_test_add_func("/version-compare/1_0__1_0", test_gplugin_version_1_0__1_0);
- g_test_add_func("/version-check/0_1__1_0",
+ g_test_add_func("/version-compare/0_1__1_0", test_gplugin_version_0_1__1_0);
- g_test_add_func("/version-check/1__0",
+ g_test_add_func("/version-compare/1__0", test_gplugin_version_1__0);
- g_test_add_func("/version-check/1__1",
+ g_test_add_func("/version-compare/1__1", test_gplugin_version_1__1);
- g_test_add_func("/version-check/0__1",
+ g_test_add_func("/version-compare/0__1", test_gplugin_version_0__1);