1251881Speter/** 2251881Speter * @copyright 3251881Speter * ==================================================================== 4251881Speter * Licensed to the Apache Software Foundation (ASF) under one 5251881Speter * or more contributor license agreements. See the NOTICE file 6251881Speter * distributed with this work for additional information 7251881Speter * regarding copyright ownership. The ASF licenses this file 8251881Speter * to you under the Apache License, Version 2.0 (the 9251881Speter * "License"); you may not use this file except in compliance 10251881Speter * with the License. You may obtain a copy of the License at 11251881Speter * 12251881Speter * http://www.apache.org/licenses/LICENSE-2.0 13251881Speter * 14251881Speter * Unless required by applicable law or agreed to in writing, 15251881Speter * software distributed under the License is distributed on an 16251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17251881Speter * KIND, either express or implied. See the License for the 18251881Speter * specific language governing permissions and limitations 19251881Speter * under the License. 20251881Speter * ==================================================================== 21251881Speter * @endcopyright 22251881Speter * 23251881Speter * @file svn_version.h 24251881Speter * @brief Version information. 25251881Speter */ 26251881Speter 27251881Speter#ifndef SVN_VERSION_H 28251881Speter#define SVN_VERSION_H 29251881Speter 30251881Speter/* Hack to prevent the resource compiler from including 31289166Speter apr and other headers. */ 32289166Speter#ifndef SVN_WIN32_RESOURCE_COMPILATION 33251881Speter#include <apr_general.h> 34251881Speter#include <apr_tables.h> 35251881Speter 36251881Speter#include "svn_types.h" 37289166Speter#endif 38251881Speter 39251881Speter#ifdef __cplusplus 40251881Speterextern "C" { 41251881Speter#endif /* __cplusplus */ 42251881Speter 43251881Speter 44251881Speter/* Symbols that define the version number. */ 45251881Speter 46251881Speter/* Version numbers: <major>.<minor>.<micro> 47251881Speter * 48251881Speter * The version numbers in this file follow the rules established by: 49251881Speter * 50251881Speter * http://apr.apache.org/versioning.html 51251881Speter */ 52251881Speter 53251881Speter/** Major version number. 54251881Speter * 55251881Speter * Modify when incompatible changes are made to published interfaces. 56251881Speter */ 57251881Speter#define SVN_VER_MAJOR 1 58251881Speter 59251881Speter/** Minor version number. 60251881Speter * 61251881Speter * Modify when new functionality is added or new interfaces are 62251881Speter * defined, but all changes are backward compatible. 63251881Speter */ 64299742Sdim#define SVN_VER_MINOR 9 65251881Speter 66251881Speter/** 67251881Speter * Patch number. 68251881Speter * 69251881Speter * Modify for every released patch. 70251881Speter * 71251881Speter * @since New in 1.1. 72251881Speter */ 73309512Speter#define SVN_VER_PATCH 5 74251881Speter 75251881Speter 76251881Speter/** @deprecated Provided for backward compatibility with the 1.0 API. */ 77251881Speter#define SVN_VER_MICRO SVN_VER_PATCH 78251881Speter 79251881Speter/** @deprecated Provided for backward compatibility with the 1.0 API. */ 80251881Speter#define SVN_VER_LIBRARY SVN_VER_MAJOR 81251881Speter 82251881Speter 83251881Speter/** Version tag: a string describing the version. 84251881Speter * 85299742Sdim * This tag remains " (under development)" in the repository so that we can 86251881Speter * always see from "svn --version" that the software has been built 87251881Speter * from the repository rather than a "blessed" distribution. 88251881Speter * 89251881Speter * When rolling a tarball, we automatically replace this text with " (r1234)" 90251881Speter * (where 1234 is the last revision on the branch prior to the release) 91251881Speter * for final releases; in prereleases, it becomes " (Alpha 1)", 92251881Speter * " (Beta 1)", etc., as appropriate. 93251881Speter * 94251881Speter * Always change this at the same time as SVN_VER_NUMTAG. 95251881Speter */ 96309512Speter#define SVN_VER_TAG " (r1770682)" 97251881Speter 98251881Speter 99251881Speter/** Number tag: a string describing the version. 100251881Speter * 101251881Speter * This tag is used to generate a version number string to identify 102251881Speter * the client and server in HTTP requests, for example. It must not 103251881Speter * contain any spaces. This value remains "-dev" in the repository. 104251881Speter * 105251881Speter * When rolling a tarball, we automatically replace this text with "" 106251881Speter * for final releases; in prereleases, it becomes "-alpha1, "-beta1", 107251881Speter * etc., as appropriate. 108251881Speter * 109251881Speter * Always change this at the same time as SVN_VER_TAG. 110251881Speter */ 111251956Speter#define SVN_VER_NUMTAG "" 112251881Speter 113251881Speter 114251881Speter/** Revision number: The repository revision number of this release. 115251881Speter * 116251881Speter * This constant is used to generate the build number part of the Windows 117299742Sdim * file version. Its value remains 0 in the repository except in release 118299742Sdim * tags where it is the revision from which the tag was created. 119251881Speter */ 120309512Speter#define SVN_VER_REVISION 1770682 121251881Speter 122251881Speter 123251881Speter/* Version strings composed from the above definitions. */ 124251881Speter 125251881Speter/** Version number */ 126251881Speter#define SVN_VER_NUM APR_STRINGIFY(SVN_VER_MAJOR) \ 127251881Speter "." APR_STRINGIFY(SVN_VER_MINOR) \ 128251881Speter "." APR_STRINGIFY(SVN_VER_PATCH) 129251881Speter 130251881Speter/** Version number with tag (contains no whitespace) */ 131251881Speter#define SVN_VER_NUMBER SVN_VER_NUM SVN_VER_NUMTAG 132251881Speter 133251881Speter/** Complete version string */ 134251881Speter#define SVN_VERSION SVN_VER_NUMBER SVN_VER_TAG 135251881Speter 136251881Speter 137251881Speter 138251881Speter/* Version queries and compatibility checks */ 139251881Speter 140251881Speter/** 141251881Speter * Version information. Each library contains a function called 142251881Speter * svn_<i>libname</i>_version() that returns a pointer to a statically 143251881Speter * allocated object of this type. 144251881Speter * 145251881Speter * @since New in 1.1. 146251881Speter */ 147251881Speterstruct svn_version_t 148251881Speter{ 149251881Speter int major; /**< Major version number */ 150251881Speter int minor; /**< Minor version number */ 151251881Speter int patch; /**< Patch number */ 152251881Speter 153251881Speter /** 154251881Speter * The version tag (#SVN_VER_NUMTAG). Must always point to a 155251881Speter * statically allocated string. 156251881Speter */ 157251881Speter const char *tag; 158251881Speter}; 159251881Speter 160251881Speter/** 161251881Speter * Define a static svn_version_t object. 162251881Speter * 163251881Speter * @since New in 1.1. 164251881Speter */ 165251881Speter#define SVN_VERSION_DEFINE(name) \ 166251881Speter static const svn_version_t name = \ 167251881Speter { \ 168251881Speter SVN_VER_MAJOR, \ 169251881Speter SVN_VER_MINOR, \ 170251881Speter SVN_VER_PATCH, \ 171251881Speter SVN_VER_NUMTAG \ 172251881Speter } \ 173251881Speter 174251881Speter/** 175251881Speter * Generate the implementation of a version query function. 176251881Speter * 177251881Speter * @since New in 1.1. 178299742Sdim * @since Since 1.9, embeds a string into the compiled object 179299742Sdim * file that can be queried with the 'what' utility. 180251881Speter */ 181299742Sdim#define SVN_VERSION_BODY \ 182299742Sdim static struct versioninfo_t \ 183299742Sdim { \ 184299742Sdim const char *const str; \ 185299742Sdim const svn_version_t num; \ 186299742Sdim } const versioninfo = \ 187299742Sdim { \ 188299742Sdim "@(#)" SVN_VERSION, \ 189299742Sdim { \ 190299742Sdim SVN_VER_MAJOR, \ 191299742Sdim SVN_VER_MINOR, \ 192299742Sdim SVN_VER_PATCH, \ 193299742Sdim SVN_VER_NUMTAG \ 194299742Sdim } \ 195299742Sdim }; \ 196299742Sdim return &versioninfo.num 197251881Speter 198251881Speter/** 199251881Speter * Check library version compatibility. Return #TRUE if the client's 200251881Speter * version, given in @a my_version, is compatible with the library 201251881Speter * version, provided in @a lib_version. 202251881Speter * 203251881Speter * This function checks for version compatibility as per our 204251881Speter * guarantees, but requires an exact match when linking to an 205251881Speter * unreleased library. A development client is always compatible with 206251881Speter * a previous released library. 207251881Speter * 208299742Sdim * @note Implements the #svn_ver_check_list2.@a comparator interface. 209299742Sdim * 210251881Speter * @since New in 1.1. 211251881Speter */ 212251881Spetersvn_boolean_t 213251881Spetersvn_ver_compatible(const svn_version_t *my_version, 214251881Speter const svn_version_t *lib_version); 215251881Speter 216251881Speter/** 217251881Speter * Check if @a my_version and @a lib_version encode the same version number. 218251881Speter * 219299742Sdim * @note Implements the #svn_ver_check_list2.@a comparator interface. 220299742Sdim * 221251881Speter * @since New in 1.2. 222251881Speter */ 223251881Spetersvn_boolean_t 224251881Spetersvn_ver_equal(const svn_version_t *my_version, 225251881Speter const svn_version_t *lib_version); 226251881Speter 227251881Speter 228251881Speter/** 229251881Speter * An entry in the compatibility checklist. 230251881Speter * @see svn_ver_check_list() 231251881Speter * 232251881Speter * @since New in 1.1. 233251881Speter */ 234251881Spetertypedef struct svn_version_checklist_t 235251881Speter{ 236251881Speter const char *label; /**< Entry label */ 237251881Speter 238251881Speter /** Version query function for this entry */ 239251881Speter const svn_version_t *(*version_query)(void); 240251881Speter} svn_version_checklist_t; 241251881Speter 242251881Speter 243251881Speter/** 244251881Speter * Perform a series of version compatibility checks. Checks if @a 245251881Speter * my_version is compatible with each entry in @a checklist. @a 246251881Speter * checklist must end with an entry whose label is @c NULL. 247251881Speter * 248299742Sdim * @a my_version is considered to be compatible with a version in @a checklist 249299742Sdim * if @a comparator returns #TRUE when called with @a my_version as the first 250299742Sdim * parammeter and the @a checklist version as the second parameter. 251251881Speter * 252299742Sdim * @see svn_ver_compatible(), svn_ver_equal() 253299742Sdim * 254299742Sdim * @note Subversion's own code invariably uses svn_ver_equal() as @a comparator, 255299742Sdim * since the cmdline tools sometimes use non-public APIs (such as utility 256299742Sdim * functions that haven't been promoted to svn_cmdline.h). Third-party code 257299742Sdim * SHOULD use svn_ver_compatible() as @a comparator. 258299742Sdim * 259299742Sdim * @since New in 1.9. 260251881Speter */ 261251881Spetersvn_error_t * 262299742Sdimsvn_ver_check_list2(const svn_version_t *my_version, 263299742Sdim const svn_version_checklist_t *checklist, 264299742Sdim svn_boolean_t (*comparator)(const svn_version_t *, 265299742Sdim const svn_version_t *)); 266299742Sdim 267299742Sdim/** Similar to svn_ver_check_list2(), with @a comparator set to 268299742Sdim * #svn_ver_compatible. 269299742Sdim * 270299742Sdim * @deprecated Provided for backward compatibility with 1.8 API. 271299742Sdim */ 272299742SdimSVN_DEPRECATED 273299742Sdimsvn_error_t * 274251881Spetersvn_ver_check_list(const svn_version_t *my_version, 275251881Speter const svn_version_checklist_t *checklist); 276251881Speter 277251881Speter 278251881Speter/** 279251881Speter * Type of function returning library version. 280251881Speter * 281251881Speter * @since New in 1.6. 282251881Speter */ 283251881Spetertypedef const svn_version_t *(*svn_version_func_t)(void); 284251881Speter 285251881Speter 286251881Speter/* libsvn_subr doesn't have an svn_subr header, so put the prototype here. */ 287251881Speter/** 288251881Speter * Get libsvn_subr version information. 289251881Speter * 290251881Speter * @since New in 1.1. 291251881Speter */ 292251881Speterconst svn_version_t * 293251881Spetersvn_subr_version(void); 294251881Speter 295251881Speter 296251881Speter/** 297251881Speter * Extended version information, including info about the running system. 298251881Speter * 299251881Speter * @since New in 1.8. 300251881Speter */ 301251881Spetertypedef struct svn_version_extended_t svn_version_extended_t; 302251881Speter 303251881Speter/** 304251881Speter * Return version information for the running program. If @a verbose 305251881Speter * is #TRUE, collect extra information that may be expensive to 306251881Speter * retrieve (for example, the OS release name, list of shared 307251881Speter * libraries, etc.). Use @a pool for all allocations. 308251881Speter * 309299742Sdim * @note This function may allocate significant auxiliary resources 310299742Sdim * (memory and file descriptors) in @a pool. It is recommended to 311299742Sdim * copy the returned data to suitable longer-lived memory and clear 312299742Sdim * @a pool after calling this function. 313299742Sdim * 314251881Speter * @since New in 1.8. 315251881Speter */ 316251881Speterconst svn_version_extended_t * 317251881Spetersvn_version_extended(svn_boolean_t verbose, 318251881Speter apr_pool_t *pool); 319251881Speter 320251881Speter 321251881Speter/** 322251881Speter * Accessor for svn_version_extended_t. 323251881Speter * 324251881Speter * @return The date when the libsvn_subr library was compiled, in the 325251881Speter * format defined by the C standard macro @c __DATE__. 326251881Speter * 327251881Speter * @since New in 1.8. 328251881Speter */ 329251881Speterconst char * 330251881Spetersvn_version_ext_build_date(const svn_version_extended_t *ext_info); 331251881Speter 332251881Speter/** 333251881Speter * Accessor for svn_version_extended_t. 334251881Speter * 335251881Speter * @return The time when the libsvn_subr library was compiled, in the 336251881Speter * format defined by the C standard macro @c __TIME__. 337251881Speter * 338251881Speter * @since New in 1.8. 339251881Speter */ 340251881Speterconst char * 341251881Spetersvn_version_ext_build_time(const svn_version_extended_t *ext_info); 342251881Speter 343251881Speter/** 344251881Speter * Accessor for svn_version_extended_t. 345251881Speter * 346251881Speter * @return The canonical host triplet (arch-vendor-osname) of the 347251881Speter * system where libsvn_subr was compiled. 348251881Speter * 349251881Speter * @note On Unix-like systems (includng Mac OS X), this string is the 350251881Speter * same as the output of the config.guess script. 351251881Speter * 352251881Speter * @since New in 1.8. 353251881Speter */ 354251881Speterconst char * 355251881Spetersvn_version_ext_build_host(const svn_version_extended_t *ext_info); 356251881Speter 357251881Speter/** 358251881Speter * Accessor for svn_version_extended_t. 359251881Speter * 360251881Speter * @return The localized copyright notice. 361251881Speter * 362251881Speter * @since New in 1.8. 363251881Speter */ 364251881Speterconst char * 365251881Spetersvn_version_ext_copyright(const svn_version_extended_t *ext_info); 366251881Speter 367251881Speter/** 368251881Speter * Accessor for svn_version_extended_t. 369251881Speter * 370251881Speter * @return The canonical host triplet (arch-vendor-osname) of the 371251881Speter * system where the current process is running. 372251881Speter * 373251881Speter * @note This string may not be the same as the output of config.guess 374251881Speter * on the same system. 375251881Speter * 376251881Speter * @since New in 1.8. 377251881Speter */ 378251881Speterconst char * 379251881Spetersvn_version_ext_runtime_host(const svn_version_extended_t *ext_info); 380251881Speter 381251881Speter/** 382251881Speter * Accessor for svn_version_extended_t. 383251881Speter * 384251881Speter * @return The "commercial" release name of the running operating 385251881Speter * system, if available. Not to be confused with, e.g., the output of 386251881Speter * "uname -v" or "uname -r". The returned value may be @c NULL. 387251881Speter * 388251881Speter * @since New in 1.8. 389251881Speter */ 390251881Speterconst char * 391251881Spetersvn_version_ext_runtime_osname(const svn_version_extended_t *ext_info); 392251881Speter 393251881Speter/** 394251881Speter * Dependent library information. 395251881Speter * Describes the name and versions of known dependencies 396251881Speter * used by libsvn_subr. 397251881Speter * 398251881Speter * @since New in 1.8. 399251881Speter */ 400251881Spetertypedef struct svn_version_ext_linked_lib_t 401251881Speter{ 402251881Speter const char *name; /**< Library name */ 403251881Speter const char *compiled_version; /**< Compile-time version string */ 404251881Speter const char *runtime_version; /**< Run-time version string (optional) */ 405251881Speter} svn_version_ext_linked_lib_t; 406251881Speter 407251881Speter/** 408251881Speter * Accessor for svn_version_extended_t. 409251881Speter * 410251881Speter * @return Array of svn_version_ext_linked_lib_t describing dependent 411251881Speter * libraries. The returned value may be @c NULL. 412251881Speter * 413251881Speter * @since New in 1.8. 414251881Speter */ 415251881Speterconst apr_array_header_t * 416251881Spetersvn_version_ext_linked_libs(const svn_version_extended_t *ext_info); 417251881Speter 418251881Speter 419251881Speter/** 420251881Speter * Loaded shared library information. 421251881Speter * Describes the name and, where available, version of the shared libraries 422251881Speter * loaded by the running program. 423251881Speter * 424251881Speter * @since New in 1.8. 425251881Speter */ 426251881Spetertypedef struct svn_version_ext_loaded_lib_t 427251881Speter{ 428251881Speter const char *name; /**< Library name */ 429251881Speter const char *version; /**< Library version (optional) */ 430251881Speter} svn_version_ext_loaded_lib_t; 431251881Speter 432251881Speter 433251881Speter/** 434251881Speter * Accessor for svn_version_extended_t. 435251881Speter * 436251881Speter * @return Array of svn_version_ext_loaded_lib_t describing loaded 437251881Speter * shared libraries. The returned value may be @c NULL. 438251881Speter * 439251881Speter * @note On Mac OS X, the loaded frameworks, private frameworks and 440251881Speter * system libraries will not be listed. 441251881Speter * 442251881Speter * @since New in 1.8. 443251881Speter */ 444251881Speterconst apr_array_header_t * 445251881Spetersvn_version_ext_loaded_libs(const svn_version_extended_t *ext_info); 446251881Speter 447251881Speter 448251881Speter#ifdef __cplusplus 449251881Speter} 450251881Speter#endif /* __cplusplus */ 451251881Speter 452251881Speter#endif /* SVN_VERSION_H */ 453