svn_version.h revision 309512
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 and other headers. */ 32#ifndef SVN_WIN32_RESOURCE_COMPILATION 33#include <apr_general.h> 34#include <apr_tables.h> 35 36#include "svn_types.h" 37#endif 38 39#ifdef __cplusplus 40extern "C" { 41#endif /* __cplusplus */ 42 43 44/* Symbols that define the version number. */ 45 46/* Version numbers: <major>.<minor>.<micro> 47 * 48 * The version numbers in this file follow the rules established by: 49 * 50 * http://apr.apache.org/versioning.html 51 */ 52 53/** Major version number. 54 * 55 * Modify when incompatible changes are made to published interfaces. 56 */ 57#define SVN_VER_MAJOR 1 58 59/** Minor version number. 60 * 61 * Modify when new functionality is added or new interfaces are 62 * defined, but all changes are backward compatible. 63 */ 64#define SVN_VER_MINOR 9 65 66/** 67 * Patch number. 68 * 69 * Modify for every released patch. 70 * 71 * @since New in 1.1. 72 */ 73#define SVN_VER_PATCH 5 74 75 76/** @deprecated Provided for backward compatibility with the 1.0 API. */ 77#define SVN_VER_MICRO SVN_VER_PATCH 78 79/** @deprecated Provided for backward compatibility with the 1.0 API. */ 80#define SVN_VER_LIBRARY SVN_VER_MAJOR 81 82 83/** Version tag: a string describing the version. 84 * 85 * This tag remains " (under development)" in the repository so that we can 86 * always see from "svn --version" that the software has been built 87 * from the repository rather than a "blessed" distribution. 88 * 89 * When rolling a tarball, we automatically replace this text with " (r1234)" 90 * (where 1234 is the last revision on the branch prior to the release) 91 * for final releases; in prereleases, it becomes " (Alpha 1)", 92 * " (Beta 1)", etc., as appropriate. 93 * 94 * Always change this at the same time as SVN_VER_NUMTAG. 95 */ 96#define SVN_VER_TAG " (r1770682)" 97 98 99/** Number tag: a string describing the version. 100 * 101 * This tag is used to generate a version number string to identify 102 * the client and server in HTTP requests, for example. It must not 103 * contain any spaces. This value remains "-dev" in the repository. 104 * 105 * When rolling a tarball, we automatically replace this text with "" 106 * for final releases; in prereleases, it becomes "-alpha1, "-beta1", 107 * etc., as appropriate. 108 * 109 * Always change this at the same time as SVN_VER_TAG. 110 */ 111#define SVN_VER_NUMTAG "" 112 113 114/** Revision number: The repository revision number of this release. 115 * 116 * This constant is used to generate the build number part of the Windows 117 * file version. Its value remains 0 in the repository except in release 118 * tags where it is the revision from which the tag was created. 119 */ 120#define SVN_VER_REVISION 1770682 121 122 123/* Version strings composed from the above definitions. */ 124 125/** Version number */ 126#define SVN_VER_NUM APR_STRINGIFY(SVN_VER_MAJOR) \ 127 "." APR_STRINGIFY(SVN_VER_MINOR) \ 128 "." APR_STRINGIFY(SVN_VER_PATCH) 129 130/** Version number with tag (contains no whitespace) */ 131#define SVN_VER_NUMBER SVN_VER_NUM SVN_VER_NUMTAG 132 133/** Complete version string */ 134#define SVN_VERSION SVN_VER_NUMBER SVN_VER_TAG 135 136 137 138/* Version queries and compatibility checks */ 139 140/** 141 * Version information. Each library contains a function called 142 * svn_<i>libname</i>_version() that returns a pointer to a statically 143 * allocated object of this type. 144 * 145 * @since New in 1.1. 146 */ 147struct svn_version_t 148{ 149 int major; /**< Major version number */ 150 int minor; /**< Minor version number */ 151 int patch; /**< Patch number */ 152 153 /** 154 * The version tag (#SVN_VER_NUMTAG). Must always point to a 155 * statically allocated string. 156 */ 157 const char *tag; 158}; 159 160/** 161 * Define a static svn_version_t object. 162 * 163 * @since New in 1.1. 164 */ 165#define SVN_VERSION_DEFINE(name) \ 166 static const svn_version_t name = \ 167 { \ 168 SVN_VER_MAJOR, \ 169 SVN_VER_MINOR, \ 170 SVN_VER_PATCH, \ 171 SVN_VER_NUMTAG \ 172 } \ 173 174/** 175 * Generate the implementation of a version query function. 176 * 177 * @since New in 1.1. 178 * @since Since 1.9, embeds a string into the compiled object 179 * file that can be queried with the 'what' utility. 180 */ 181#define SVN_VERSION_BODY \ 182 static struct versioninfo_t \ 183 { \ 184 const char *const str; \ 185 const svn_version_t num; \ 186 } const versioninfo = \ 187 { \ 188 "@(#)" SVN_VERSION, \ 189 { \ 190 SVN_VER_MAJOR, \ 191 SVN_VER_MINOR, \ 192 SVN_VER_PATCH, \ 193 SVN_VER_NUMTAG \ 194 } \ 195 }; \ 196 return &versioninfo.num 197 198/** 199 * Check library version compatibility. Return #TRUE if the client's 200 * version, given in @a my_version, is compatible with the library 201 * version, provided in @a lib_version. 202 * 203 * This function checks for version compatibility as per our 204 * guarantees, but requires an exact match when linking to an 205 * unreleased library. A development client is always compatible with 206 * a previous released library. 207 * 208 * @note Implements the #svn_ver_check_list2.@a comparator interface. 209 * 210 * @since New in 1.1. 211 */ 212svn_boolean_t 213svn_ver_compatible(const svn_version_t *my_version, 214 const svn_version_t *lib_version); 215 216/** 217 * Check if @a my_version and @a lib_version encode the same version number. 218 * 219 * @note Implements the #svn_ver_check_list2.@a comparator interface. 220 * 221 * @since New in 1.2. 222 */ 223svn_boolean_t 224svn_ver_equal(const svn_version_t *my_version, 225 const svn_version_t *lib_version); 226 227 228/** 229 * An entry in the compatibility checklist. 230 * @see svn_ver_check_list() 231 * 232 * @since New in 1.1. 233 */ 234typedef struct svn_version_checklist_t 235{ 236 const char *label; /**< Entry label */ 237 238 /** Version query function for this entry */ 239 const svn_version_t *(*version_query)(void); 240} svn_version_checklist_t; 241 242 243/** 244 * Perform a series of version compatibility checks. Checks if @a 245 * my_version is compatible with each entry in @a checklist. @a 246 * checklist must end with an entry whose label is @c NULL. 247 * 248 * @a my_version is considered to be compatible with a version in @a checklist 249 * if @a comparator returns #TRUE when called with @a my_version as the first 250 * parammeter and the @a checklist version as the second parameter. 251 * 252 * @see svn_ver_compatible(), svn_ver_equal() 253 * 254 * @note Subversion's own code invariably uses svn_ver_equal() as @a comparator, 255 * since the cmdline tools sometimes use non-public APIs (such as utility 256 * functions that haven't been promoted to svn_cmdline.h). Third-party code 257 * SHOULD use svn_ver_compatible() as @a comparator. 258 * 259 * @since New in 1.9. 260 */ 261svn_error_t * 262svn_ver_check_list2(const svn_version_t *my_version, 263 const svn_version_checklist_t *checklist, 264 svn_boolean_t (*comparator)(const svn_version_t *, 265 const svn_version_t *)); 266 267/** Similar to svn_ver_check_list2(), with @a comparator set to 268 * #svn_ver_compatible. 269 * 270 * @deprecated Provided for backward compatibility with 1.8 API. 271 */ 272SVN_DEPRECATED 273svn_error_t * 274svn_ver_check_list(const svn_version_t *my_version, 275 const svn_version_checklist_t *checklist); 276 277 278/** 279 * Type of function returning library version. 280 * 281 * @since New in 1.6. 282 */ 283typedef const svn_version_t *(*svn_version_func_t)(void); 284 285 286/* libsvn_subr doesn't have an svn_subr header, so put the prototype here. */ 287/** 288 * Get libsvn_subr version information. 289 * 290 * @since New in 1.1. 291 */ 292const svn_version_t * 293svn_subr_version(void); 294 295 296/** 297 * Extended version information, including info about the running system. 298 * 299 * @since New in 1.8. 300 */ 301typedef struct svn_version_extended_t svn_version_extended_t; 302 303/** 304 * Return version information for the running program. If @a verbose 305 * is #TRUE, collect extra information that may be expensive to 306 * retrieve (for example, the OS release name, list of shared 307 * libraries, etc.). Use @a pool for all allocations. 308 * 309 * @note This function may allocate significant auxiliary resources 310 * (memory and file descriptors) in @a pool. It is recommended to 311 * copy the returned data to suitable longer-lived memory and clear 312 * @a pool after calling this function. 313 * 314 * @since New in 1.8. 315 */ 316const svn_version_extended_t * 317svn_version_extended(svn_boolean_t verbose, 318 apr_pool_t *pool); 319 320 321/** 322 * Accessor for svn_version_extended_t. 323 * 324 * @return The date when the libsvn_subr library was compiled, in the 325 * format defined by the C standard macro @c __DATE__. 326 * 327 * @since New in 1.8. 328 */ 329const char * 330svn_version_ext_build_date(const svn_version_extended_t *ext_info); 331 332/** 333 * Accessor for svn_version_extended_t. 334 * 335 * @return The time when the libsvn_subr library was compiled, in the 336 * format defined by the C standard macro @c __TIME__. 337 * 338 * @since New in 1.8. 339 */ 340const char * 341svn_version_ext_build_time(const svn_version_extended_t *ext_info); 342 343/** 344 * Accessor for svn_version_extended_t. 345 * 346 * @return The canonical host triplet (arch-vendor-osname) of the 347 * system where libsvn_subr was compiled. 348 * 349 * @note On Unix-like systems (includng Mac OS X), this string is the 350 * same as the output of the config.guess script. 351 * 352 * @since New in 1.8. 353 */ 354const char * 355svn_version_ext_build_host(const svn_version_extended_t *ext_info); 356 357/** 358 * Accessor for svn_version_extended_t. 359 * 360 * @return The localized copyright notice. 361 * 362 * @since New in 1.8. 363 */ 364const char * 365svn_version_ext_copyright(const svn_version_extended_t *ext_info); 366 367/** 368 * Accessor for svn_version_extended_t. 369 * 370 * @return The canonical host triplet (arch-vendor-osname) of the 371 * system where the current process is running. 372 * 373 * @note This string may not be the same as the output of config.guess 374 * on the same system. 375 * 376 * @since New in 1.8. 377 */ 378const char * 379svn_version_ext_runtime_host(const svn_version_extended_t *ext_info); 380 381/** 382 * Accessor for svn_version_extended_t. 383 * 384 * @return The "commercial" release name of the running operating 385 * system, if available. Not to be confused with, e.g., the output of 386 * "uname -v" or "uname -r". The returned value may be @c NULL. 387 * 388 * @since New in 1.8. 389 */ 390const char * 391svn_version_ext_runtime_osname(const svn_version_extended_t *ext_info); 392 393/** 394 * Dependent library information. 395 * Describes the name and versions of known dependencies 396 * used by libsvn_subr. 397 * 398 * @since New in 1.8. 399 */ 400typedef struct svn_version_ext_linked_lib_t 401{ 402 const char *name; /**< Library name */ 403 const char *compiled_version; /**< Compile-time version string */ 404 const char *runtime_version; /**< Run-time version string (optional) */ 405} svn_version_ext_linked_lib_t; 406 407/** 408 * Accessor for svn_version_extended_t. 409 * 410 * @return Array of svn_version_ext_linked_lib_t describing dependent 411 * libraries. The returned value may be @c NULL. 412 * 413 * @since New in 1.8. 414 */ 415const apr_array_header_t * 416svn_version_ext_linked_libs(const svn_version_extended_t *ext_info); 417 418 419/** 420 * Loaded shared library information. 421 * Describes the name and, where available, version of the shared libraries 422 * loaded by the running program. 423 * 424 * @since New in 1.8. 425 */ 426typedef struct svn_version_ext_loaded_lib_t 427{ 428 const char *name; /**< Library name */ 429 const char *version; /**< Library version (optional) */ 430} svn_version_ext_loaded_lib_t; 431 432 433/** 434 * Accessor for svn_version_extended_t. 435 * 436 * @return Array of svn_version_ext_loaded_lib_t describing loaded 437 * shared libraries. The returned value may be @c NULL. 438 * 439 * @note On Mac OS X, the loaded frameworks, private frameworks and 440 * system libraries will not be listed. 441 * 442 * @since New in 1.8. 443 */ 444const apr_array_header_t * 445svn_version_ext_loaded_libs(const svn_version_extended_t *ext_info); 446 447 448#ifdef __cplusplus 449} 450#endif /* __cplusplus */ 451 452#endif /* SVN_VERSION_H */ 453