Subversion
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
svn_version.h
Go to the documentation of this file.
1 /**
2  * @copyright
3  * ====================================================================
4  * Copyright (c) 2001-2008 CollabNet. All rights reserved.
5  *
6  * This software is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution. The terms
8  * are also available at http://subversion.tigris.org/license-1.html.
9  * If newer versions of this license are posted there, you may use a
10  * newer version instead, at your option.
11  *
12  * This software consists of voluntary contributions made by many
13  * individuals. For exact contribution history, see the revision
14  * history and logs, available at http://subversion.tigris.org/.
15  * ====================================================================
16  * @endcopyright
17  *
18  * @file svn_version.h
19  * @brief Version information.
20  */
21 
22 #ifndef SVN_VERSION_H
23 #define SVN_VERSION_H
24 
25 /* Hack to prevent the resource compiler from including
26  apr_general.h. It doesn't resolve the include paths
27  correctly and blows up without this.
28  */
29 #ifndef APR_STRINGIFY
30 #include <apr_general.h>
31 #endif
32 
33 #include "svn_types.h"
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif /* __cplusplus */
38 
39 
40 /* Symbols that define the version number. */
41 
42 /* Version numbers: <major>.<minor>.<micro>
43  *
44  * The version numbers in this file follow the rules established by:
45  *
46  * http://apr.apache.org/versioning.html
47  */
48 
49 /** Major version number.
50  *
51  * Modify when incompatible changes are made to published interfaces.
52  */
53 #define SVN_VER_MAJOR 1
54 
55 /** Minor version number.
56  *
57  * Modify when new functionality is added or new interfaces are
58  * defined, but all changes are backward compatible.
59  */
60 #define SVN_VER_MINOR 6
61 
62 /**
63  * Patch number.
64  *
65  * Modify for every released patch.
66  *
67  * @since New in 1.1.
68  */
69 #define SVN_VER_PATCH 17
70 
71 
72 /** @deprecated Provided for backward compatibility with the 1.0 API. */
73 #define SVN_VER_MICRO SVN_VER_PATCH
74 
75 /** @deprecated Provided for backward compatibility with the 1.0 API. */
76 #define SVN_VER_LIBRARY SVN_VER_MAJOR
77 
78 
79 /** Version tag: a string describing the version.
80  *
81  * This tag remains " (dev build)" in the repository so that we can
82  * always see from "svn --version" that the software has been built
83  * from the repository rather than a "blessed" distribution.
84  *
85  * When rolling a tarball, we automatically replace this text with " (r1234)"
86  * (where 1234 is the last revision on the branch prior to the release)
87  * for final releases; in prereleases, it becomes " (Alpha 1)",
88  * " (Beta 1)", etc., as appropriate.
89  *
90  * Always change this at the same time as SVN_VER_NUMTAG.
91  */
92 #define SVN_VER_TAG " (r1128011)"
93 
94 
95 /** Number tag: a string describing the version.
96  *
97  * This tag is used to generate a version number string to identify
98  * the client and server in HTTP requests, for example. It must not
99  * contain any spaces. This value remains "-dev" in the repository.
100  *
101  * When rolling a tarball, we automatically replace this text with ""
102  * for final releases; in prereleases, it becomes "-alpha1, "-beta1",
103  * etc., as appropriate.
104  *
105  * Always change this at the same time as SVN_VER_TAG.
106  */
107 #define SVN_VER_NUMTAG ""
108 
109 
110 /** Revision number: The repository revision number of this release.
111  *
112  * This constant is used to generate the build number part of the Windows
113  * file version. Its value remains 0 in the repository.
114  *
115  * When rolling a tarball, we automatically replace it with what we
116  * guess to be the correct revision number.
117  */
118 #define SVN_VER_REVISION 1128011
119 
120 
121 /* Version strings composed from the above definitions. */
122 
123 /** Version number */
124 #define SVN_VER_NUM APR_STRINGIFY(SVN_VER_MAJOR) \
125  "." APR_STRINGIFY(SVN_VER_MINOR) \
126  "." APR_STRINGIFY(SVN_VER_PATCH)
127 
128 /** Version number with tag (contains no whitespace) */
129 #define SVN_VER_NUMBER SVN_VER_NUM SVN_VER_NUMTAG
130 
131 /** Complete version string */
132 #define SVN_VERSION SVN_VER_NUMBER SVN_VER_TAG
133 
134 
135 
136 /* Version queries and compatibility checks */
137 
138 /**
139  * Version information. Each library contains a function called
140  * svn_<i>libname</i>_version() that returns a pointer to a statically
141  * allocated object of this type.
142  *
143  * @since New in 1.1.
144  */
145 typedef struct svn_version_t
146 {
147  int major; /**< Major version number */
148  int minor; /**< Minor version number */
149  int patch; /**< Patch number */
150 
151  /**
152  * The version tag (#SVN_VER_NUMTAG).\ Must always point to a
153  * statically allocated string.
154  */
155  const char *tag;
156 } svn_version_t;
157 
158 /**
159  * Define a static svn_version_t object.
160  *
161  * @since New in 1.1.
162  */
163 #define SVN_VERSION_DEFINE(name) \
164  static const svn_version_t name = \
165  { \
166  SVN_VER_MAJOR, \
167  SVN_VER_MINOR, \
168  SVN_VER_PATCH, \
169  SVN_VER_NUMTAG \
170  } \
171 
172 /**
173  * Generate the implementation of a version query function.
174  *
175  * @since New in 1.1.
176  */
177 #define SVN_VERSION_BODY \
178  SVN_VERSION_DEFINE(versioninfo); \
179  return &versioninfo
180 
181 /**
182  * Check library version compatibility. Return #TRUE if the client's
183  * version, given in @a my_version, is compatible with the library
184  * version, provided in @a lib_version.
185  *
186  * This function checks for version compatibility as per our
187  * guarantees, but requires an exact match when linking to an
188  * unreleased library. A development client is always compatible with
189  * a previous released library.
190  *
191  * @since New in 1.1.
192  */
194 svn_ver_compatible(const svn_version_t *my_version,
195  const svn_version_t *lib_version);
196 
197 /**
198  * Check if @a my_version and @a lib_version encode the same version number.
199  *
200  * @since New in 1.2.
201  */
203 svn_ver_equal(const svn_version_t *my_version,
204  const svn_version_t *lib_version);
205 
206 
207 /**
208  * An entry in the compatibility checklist.
209  * @see svn_ver_check_list()
210  *
211  * @since New in 1.1.
212  */
214 {
215  const char *label; /**< Entry label */
216 
217  /** Version query function for this entry */
218  const svn_version_t *(*version_query)(void);
220 
221 
222 /**
223  * Perform a series of version compatibility checks. Checks if @a
224  * my_version is compatible with each entry in @a checklist. @a
225  * checklist must end with an entry whose label is @c NULL.
226  *
227  * @see svn_ver_compatible()
228  *
229  * @since New in 1.1.
230  */
231 svn_error_t *
232 svn_ver_check_list(const svn_version_t *my_version,
233  const svn_version_checklist_t *checklist);
234 
235 
236 /**
237  * Type of function returning library version.
238  *
239  * @since New in 1.6.
240  */
241 typedef const svn_version_t *(*svn_version_func_t)(void);
242 
243 
244 /* libsvn_subr doesn't have an svn_subr header, so put the prototype here. */
245 /**
246  * Get libsvn_subr version information.
247  *
248  * @since New in 1.1.
249  */
250 const svn_version_t *
251 svn_subr_version(void);
252 
253 
254 #ifdef __cplusplus
255 }
256 #endif /* __cplusplus */
257 
258 #endif /* SVN_VERSION_H */