1/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2/*
3 * soup-version.h: Version information
4 *
5 * Copyright (C) 2012 Igalia S.L.
6 */
7
8#pragma once
9
10#include <glib.h>
11
12G_BEGIN_DECLS
13
14#define SOUP_MAJOR_VERSION ({major_version})
15#define SOUP_MINOR_VERSION ({minor_version})
16#define SOUP_MICRO_VERSION ({micro_version})
17
18#define SOUP_CHECK_VERSION(major, minor, micro) \
19    (SOUP_MAJOR_VERSION > (major) || \
20    (SOUP_MAJOR_VERSION == (major) && SOUP_MINOR_VERSION > (minor)) || \
21    (SOUP_MAJOR_VERSION == (major) && SOUP_MINOR_VERSION == (minor) && \
22     SOUP_MICRO_VERSION >= (micro)))
23
24#ifndef _SOUP_EXTERN
25#define _SOUP_EXTERN extern
26#endif
27
28/* We prefix variable declarations so they can
29 * properly get exported in Windows DLLs.
30 */
31#ifndef SOUP_VAR
32#  ifdef G_PLATFORM_WIN32
33#    ifdef LIBSOUP_COMPILATION
34#      ifdef DLL_EXPORT
35#        define SOUP_VAR __declspec(dllexport)
36#      else /* !DLL_EXPORT */
37#        define SOUP_VAR extern
38#      endif /* !DLL_EXPORT */
39#    else /* !SOUP_COMPILATION */
40#      define SOUP_VAR extern __declspec(dllimport)
41#    endif /* !LIBSOUP_COMPILATION */
42#  else /* !G_PLATFORM_WIN32 */
43#    define SOUP_VAR _SOUP_EXTERN
44#  endif /* !G_PLATFORM_WIN32 */
45#endif /* SOUP_VAR */
46
47/* Deprecation / Availability macros */
48{version_macros}
49
50/* evaluates to the current stable version; for development cycles,
51 * this means the next stable target
52 */
53#if (SOUP_MINOR_VERSION % 2)
54#define SOUP_VERSION_CUR_STABLE (G_ENCODE_VERSION (SOUP_MAJOR_VERSION, SOUP_MINOR_VERSION + 1))
55#else
56#define SOUP_VERSION_CUR_STABLE (G_ENCODE_VERSION (SOUP_MAJOR_VERSION, SOUP_MINOR_VERSION))
57#endif
58
59/* evaluates to the previous stable version */
60#if (SOUP_MINOR_VERSION == 0)
61/* Can't have -1 for previous version */
62# define SOUP_VERSION_PREV_STABLE (G_ENCODE_VERSION (SOUP_MAJOR_VERSION, 0))
63#else
64# if (SOUP_MINOR_VERSION % 2)
65#  define SOUP_VERSION_PREV_STABLE (G_ENCODE_VERSION (SOUP_MAJOR_VERSION, SOUP_MINOR_VERSION - 1))
66# else
67#  define SOUP_VERSION_PREV_STABLE (G_ENCODE_VERSION (SOUP_MAJOR_VERSION, SOUP_MINOR_VERSION - 2))
68# endif
69#endif
70
71#ifndef SOUP_VERSION_MIN_REQUIRED
72# define SOUP_VERSION_MIN_REQUIRED (SOUP_VERSION_CUR_STABLE)
73#elif SOUP_VERSION_MIN_REQUIRED == 0
74# undef  SOUP_VERSION_MIN_REQUIRED
75# define SOUP_VERSION_MIN_REQUIRED (SOUP_VERSION_CUR_STABLE + 2)
76#endif
77
78#if !defined (SOUP_VERSION_MAX_ALLOWED) || (SOUP_VERSION_MAX_ALLOWED == 0)
79# undef SOUP_VERSION_MAX_ALLOWED
80# define SOUP_VERSION_MAX_ALLOWED (SOUP_VERSION_CUR_STABLE)
81#endif
82
83/* sanity checks */
84#if SOUP_VERSION_MIN_REQUIRED > SOUP_VERSION_CUR_STABLE
85#error "SOUP_VERSION_MIN_REQUIRED must be <= SOUP_VERSION_CUR_STABLE"
86#endif
87#if SOUP_VERSION_MAX_ALLOWED < SOUP_VERSION_MIN_REQUIRED
88#error "SOUP_VERSION_MAX_ALLOWED must be >= SOUP_VERSION_MIN_REQUIRED"
89#endif
90#if SOUP_VERSION_MIN_REQUIRED < SOUP_VERSION_3_0
91#error "SOUP_VERSION_MIN_REQUIRED must be >= SOUP_VERSION_3_0"
92#endif
93
94#define SOUP_AVAILABLE_IN_ALL                   _SOUP_EXTERN
95
96{version_attributes}
97
98SOUP_AVAILABLE_IN_ALL
99guint    soup_get_major_version (void);
100
101SOUP_AVAILABLE_IN_ALL
102guint    soup_get_minor_version (void);
103
104SOUP_AVAILABLE_IN_ALL
105guint    soup_get_micro_version (void);
106
107SOUP_AVAILABLE_IN_ALL
108gboolean soup_check_version     (guint major,
109				 guint minor,
110				 guint micro);
111
112G_END_DECLS
113