summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <pgriffis@igalia.com>2020-10-30 14:58:35 -0500
committerPatrick Griffis <pgriffis@igalia.com>2020-10-30 14:58:49 -0500
commitd1fea9a31f38899e16c0aef0f129d9b21a0473ed (patch)
tree6fc27710c4f64d54fbcec594585b8c5087f9563f
parent04e63757e8c783e7779985dc29a34155cb1deab5 (diff)
downloadlibsoup-d1fea9a31f38899e16c0aef0f129d9b21a0473ed.tar.gz
Automatically generate soup-version.h macros
-rwxr-xr-xlibsoup/generate-version-header.py68
-rw-r--r--libsoup/meson.build6
-rw-r--r--libsoup/soup-version.h.in337
3 files changed, 77 insertions, 334 deletions
diff --git a/libsoup/generate-version-header.py b/libsoup/generate-version-header.py
new file mode 100755
index 00000000..486a9e9b
--- /dev/null
+++ b/libsoup/generate-version-header.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+import sys
+
+input_file = sys.argv[1]
+output_file = sys.argv[2]
+current_version = sys.argv[3]
+major, minor, micro = (int(v) for v in current_version.split('.'))
+
+def is_stable(version):
+ return not version % 2
+
+with open(input_file) as i:
+ template = i.read()
+
+versions = []
+for i in range(24, 73):
+ if is_stable(i):
+ versions.append((2, i))
+
+if major == 2:
+ # Specific to 3.x dev releases
+ versions.append((3, 0))
+else:
+ minor_max = minor if minor != 0 and is_stable(minor) else minor + 1
+ for i in range(0, minor_max):
+ if is_stable(i):
+ versions.append((3, i))
+
+version_macros = ''
+version_attributes = ''
+
+for version in versions:
+ version_macros += '''/**
+ * SOUP_VERSION_{major_version}_{minor_version}:
+ *
+ * A macro that evaluates to the {major_version}.{minor_version} version of libsoup, in a format
+ * that can be used by the C pre-processor.
+ *
+ * Since: {major_version}.{minor_version}
+ */
+#define SOUP_VERSION_{major_version}_{minor_version} (G_ENCODE_VERSION ({major_version}, {minor_version}))
+
+'''.format(major_version=version[0], minor_version=version[1])
+
+ version_attributes += '''#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_{major_version}_{minor_version}
+# define SOUP_DEPRECATED_IN_{major_version}_{minor_version} G_DEPRECATED
+# define SOUP_DEPRECATED_IN_{major_version}_{minor_version}_FOR(f) G_DEPRECATED_FOR(f)
+#else
+# define SOUP_DEPRECATED_IN_{major_version}_{minor_version}
+# define SOUP_DEPRECATED_IN_{major_version}_{minor_version}_FOR(f)
+#endif
+
+#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_{major_version}_{minor_version}
+# define SOUP_AVAILABLE_IN_{major_version}_{minor_version} G_UNAVAILABLE({major_version}, {minor_version}) _SOUP_EXTERN
+#else
+# define SOUP_AVAILABLE_IN_{major_version}_{minor_version} _SOUP_EXTERN
+#endif
+'''.format(major_version=version[0], minor_version=version[1])
+
+header = template.format(version_macros=version_macros,
+ version_attributes=version_attributes,
+ major_version=major,
+ minor_version=minor,
+ micro_version=micro)
+
+with open(output_file, 'w+') as o:
+ o.write(header)
diff --git a/libsoup/meson.build b/libsoup/meson.build
index e9756508..6b37f4c8 100644
--- a/libsoup/meson.build
+++ b/libsoup/meson.build
@@ -150,10 +150,12 @@ version_cdata.set('SOUP_MAJOR_VERSION', soup_version_major)
version_cdata.set('SOUP_MINOR_VERSION', soup_version_minor)
version_cdata.set('SOUP_MICRO_VERSION', soup_version_micro)
-soup_version_h = configure_file(input : 'soup-version.h.in',
+soup_version_h = configure_file(
+ input : 'soup-version.h.in',
output : 'soup-version.h',
install_dir : join_paths(get_option('includedir'), includedir),
- configuration : version_cdata)
+ command : [find_program('generate-version-header.py'), '@INPUT@', '@OUTPUT@', meson.project_version()]
+)
enum_types = 'soup-enum-types'
soup_enums = gnome.mkenums('soup-enum-types',
diff --git a/libsoup/soup-version.h.in b/libsoup/soup-version.h.in
index 308c2f27..10b5330d 100644
--- a/libsoup/soup-version.h.in
+++ b/libsoup/soup-version.h.in
@@ -11,9 +11,9 @@
G_BEGIN_DECLS
-#define SOUP_MAJOR_VERSION (@SOUP_MAJOR_VERSION@)
-#define SOUP_MINOR_VERSION (@SOUP_MINOR_VERSION@)
-#define SOUP_MICRO_VERSION (@SOUP_MICRO_VERSION@)
+#define SOUP_MAJOR_VERSION ({major_version})
+#define SOUP_MINOR_VERSION ({minor_version})
+#define SOUP_MICRO_VERSION ({micro_version})
#define SOUP_CHECK_VERSION(major, minor, micro) \
(SOUP_MAJOR_VERSION > (major) || \
@@ -45,30 +45,7 @@ G_BEGIN_DECLS
#endif /* SOUP_VAR */
/* Deprecation / Availability macros */
-
-#define SOUP_VERSION_2_24 (G_ENCODE_VERSION (2, 24))
-#define SOUP_VERSION_2_26 (G_ENCODE_VERSION (2, 26))
-#define SOUP_VERSION_2_28 (G_ENCODE_VERSION (2, 28))
-#define SOUP_VERSION_2_30 (G_ENCODE_VERSION (2, 30))
-#define SOUP_VERSION_2_32 (G_ENCODE_VERSION (2, 32))
-#define SOUP_VERSION_2_34 (G_ENCODE_VERSION (2, 34))
-#define SOUP_VERSION_2_36 (G_ENCODE_VERSION (2, 36))
-#define SOUP_VERSION_2_38 (G_ENCODE_VERSION (2, 38))
-#define SOUP_VERSION_2_40 (G_ENCODE_VERSION (2, 40))
-#define SOUP_VERSION_2_42 (G_ENCODE_VERSION (2, 42))
-#define SOUP_VERSION_2_44 (G_ENCODE_VERSION (2, 44))
-#define SOUP_VERSION_2_46 (G_ENCODE_VERSION (2, 46))
-#define SOUP_VERSION_2_48 (G_ENCODE_VERSION (2, 48))
-#define SOUP_VERSION_2_50 (G_ENCODE_VERSION (2, 50))
-#define SOUP_VERSION_2_52 (G_ENCODE_VERSION (2, 52))
-#define SOUP_VERSION_2_54 (G_ENCODE_VERSION (2, 54))
-#define SOUP_VERSION_2_56 (G_ENCODE_VERSION (2, 56))
-#define SOUP_VERSION_2_58 (G_ENCODE_VERSION (2, 58))
-#define SOUP_VERSION_2_62 (G_ENCODE_VERSION (2, 62))
-#define SOUP_VERSION_2_66 (G_ENCODE_VERSION (2, 66))
-#define SOUP_VERSION_2_68 (G_ENCODE_VERSION (2, 68))
-#define SOUP_VERSION_2_70 (G_ENCODE_VERSION (2, 70))
-#define SOUP_VERSION_2_72 (G_ENCODE_VERSION (2, 72))
+{version_macros}
/* evaluates to the current stable version; for development cycles,
* this means the next stable target
@@ -112,311 +89,7 @@ G_BEGIN_DECLS
#define SOUP_AVAILABLE_IN_ALL _SOUP_EXTERN
#define SOUP_AVAILABLE_IN_2_4 _SOUP_EXTERN
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_24
-# define SOUP_DEPRECATED_IN_2_24 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_24_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_24
-# define SOUP_DEPRECATED_IN_2_24_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_24
-# define SOUP_AVAILABLE_IN_2_24 G_UNAVAILABLE(2, 24) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_24 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_26
-# define SOUP_DEPRECATED_IN_2_26 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_26_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_26
-# define SOUP_DEPRECATED_IN_2_26_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_26
-# define SOUP_AVAILABLE_IN_2_26 G_UNAVAILABLE(2, 26) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_26 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_28
-# define SOUP_DEPRECATED_IN_2_28 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_28_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_28
-# define SOUP_DEPRECATED_IN_2_28_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_28
-# define SOUP_AVAILABLE_IN_2_28 G_UNAVAILABLE(2, 28) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_28 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_30
-# define SOUP_DEPRECATED_IN_2_30 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_30_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_30
-# define SOUP_DEPRECATED_IN_2_30_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_30
-# define SOUP_AVAILABLE_IN_2_30 G_UNAVAILABLE(2, 30) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_30 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_32
-# define SOUP_DEPRECATED_IN_2_32 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_32_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_32
-# define SOUP_DEPRECATED_IN_2_32_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_32
-# define SOUP_AVAILABLE_IN_2_32 G_UNAVAILABLE(2, 32) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_32 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_34
-# define SOUP_DEPRECATED_IN_2_34 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_34_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_34
-# define SOUP_DEPRECATED_IN_2_34_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_34
-# define SOUP_AVAILABLE_IN_2_34 G_UNAVAILABLE(2, 34) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_34 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_36
-# define SOUP_DEPRECATED_IN_2_36 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_36_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_36
-# define SOUP_DEPRECATED_IN_2_36_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_36
-# define SOUP_AVAILABLE_IN_2_36 G_UNAVAILABLE(2, 36) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_36 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_38
-# define SOUP_DEPRECATED_IN_2_38 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_38_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_38
-# define SOUP_DEPRECATED_IN_2_38_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_38
-# define SOUP_AVAILABLE_IN_2_38 G_UNAVAILABLE(2, 38) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_38 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_40
-# define SOUP_DEPRECATED_IN_2_40 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_40_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_40
-# define SOUP_DEPRECATED_IN_2_40_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_40
-# define SOUP_AVAILABLE_IN_2_40 G_UNAVAILABLE(2, 40) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_40 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_42
-# define SOUP_DEPRECATED_IN_2_42 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_42_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_42
-# define SOUP_DEPRECATED_IN_2_42_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_42
-# define SOUP_AVAILABLE_IN_2_42 G_UNAVAILABLE(2, 42) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_42 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_44
-# define SOUP_DEPRECATED_IN_2_44 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_44_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_44
-# define SOUP_DEPRECATED_IN_2_44_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_44
-# define SOUP_AVAILABLE_IN_2_44 G_UNAVAILABLE(2, 44) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_44 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_46
-# define SOUP_DEPRECATED_IN_2_46 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_46_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_46
-# define SOUP_DEPRECATED_IN_2_46_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_46
-# define SOUP_AVAILABLE_IN_2_46 G_UNAVAILABLE(2, 46) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_46 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_48
-# define SOUP_DEPRECATED_IN_2_48 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_48_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_48
-# define SOUP_DEPRECATED_IN_2_48_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_48
-# define SOUP_AVAILABLE_IN_2_48 G_UNAVAILABLE(2, 48) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_48 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_50
-# define SOUP_DEPRECATED_IN_2_50 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_50_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_50
-# define SOUP_DEPRECATED_IN_2_50_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_50
-# define SOUP_AVAILABLE_IN_2_50 G_UNAVAILABLE(2, 50) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_50 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_52
-# define SOUP_DEPRECATED_IN_2_52 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_52_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_52
-# define SOUP_DEPRECATED_IN_2_52_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_52
-# define SOUP_AVAILABLE_IN_2_52 G_UNAVAILABLE(2, 52) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_52 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_54
-# define SOUP_DEPRECATED_IN_2_54 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_54_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_54
-# define SOUP_DEPRECATED_IN_2_54_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_54
-# define SOUP_AVAILABLE_IN_2_54 G_UNAVAILABLE(2, 54) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_54 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_56
-# define SOUP_DEPRECATED_IN_2_56 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_56_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_56
-# define SOUP_DEPRECATED_IN_2_56_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_56
-# define SOUP_AVAILABLE_IN_2_56 G_UNAVAILABLE(2, 56) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_56 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_58
-# define SOUP_DEPRECATED_IN_2_58 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_58_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_58
-# define SOUP_DEPRECATED_IN_2_58_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_58
-# define SOUP_AVAILABLE_IN_2_58 G_UNAVAILABLE(2, 58) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_58 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_62
-# define SOUP_DEPRECATED_IN_2_62 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_62_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_62
-# define SOUP_DEPRECATED_IN_2_62_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_62
-# define SOUP_AVAILABLE_IN_2_62 G_UNAVAILABLE(2, 62) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_62 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_66
-# define SOUP_DEPRECATED_IN_2_66 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_66_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_66
-# define SOUP_DEPRECATED_IN_2_66_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_66
-# define SOUP_AVAILABLE_IN_2_66 G_UNAVAILABLE(2, 66) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_66 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_68
-# define SOUP_AVAILABLE_IN_2_68 G_UNAVAILABLE(2, 68) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_68 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MIN_REQUIRED >= SOUP_VERSION_2_70
-# define SOUP_DEPRECATED_IN_2_70 G_DEPRECATED
-# define SOUP_DEPRECATED_IN_2_70_FOR(f) G_DEPRECATED_FOR(f)
-#else
-# define SOUP_DEPRECATED_IN_2_70
-# define SOUP_DEPRECATED_IN_2_70_FOR(f)
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_70
-# define SOUP_AVAILABLE_IN_2_70 G_UNAVAILABLE(2, 70) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_70 _SOUP_EXTERN
-#endif
-
-#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_2_72
-# define SOUP_AVAILABLE_IN_2_72 G_UNAVAILABLE(2, 72) _SOUP_EXTERN
-#else
-# define SOUP_AVAILABLE_IN_2_72 _SOUP_EXTERN
-#endif
+{version_attributes}
SOUP_AVAILABLE_IN_2_42
guint soup_get_major_version (void);