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