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 31251881Speter apr_general.h. It doesn't resolve the include paths 32251881Speter correctly and blows up without this. 33251881Speter */ 34251881Speter#ifndef APR_STRINGIFY 35251881Speter#include <apr_general.h> 36251881Speter#endif 37251881Speter#include <apr_tables.h> 38251881Speter 39251881Speter#include "svn_types.h" 40251881Speter 41251881Speter#ifdef __cplusplus 42251881Speterextern "C" { 43251881Speter#endif /* __cplusplus */ 44251881Speter 45251881Speter 46251881Speter/* Symbols that define the version number. */ 47251881Speter 48251881Speter/* Version numbers: <major>.<minor>.<micro> 49251881Speter * 50251881Speter * The version numbers in this file follow the rules established by: 51251881Speter * 52251881Speter * http://apr.apache.org/versioning.html 53251881Speter */ 54251881Speter 55251881Speter/** Major version number. 56251881Speter * 57251881Speter * Modify when incompatible changes are made to published interfaces. 58251881Speter */ 59251881Speter#define SVN_VER_MAJOR 1 60251881Speter 61251881Speter/** Minor version number. 62251881Speter * 63251881Speter * Modify when new functionality is added or new interfaces are 64251881Speter * defined, but all changes are backward compatible. 65251881Speter */ 66251881Speter#define SVN_VER_MINOR 8 67251881Speter 68251881Speter/** 69251881Speter * Patch number. 70251881Speter * 71251881Speter * Modify for every released patch. 72251881Speter * 73251881Speter * @since New in 1.1. 74251881Speter */ 75269847Speter#define SVN_VER_PATCH 10 76251881Speter 77251881Speter 78251881Speter/** @deprecated Provided for backward compatibility with the 1.0 API. */ 79251881Speter#define SVN_VER_MICRO SVN_VER_PATCH 80251881Speter 81251881Speter/** @deprecated Provided for backward compatibility with the 1.0 API. */ 82251881Speter#define SVN_VER_LIBRARY SVN_VER_MAJOR 83251881Speter 84251881Speter 85251881Speter/** Version tag: a string describing the version. 86251881Speter * 87251881Speter * This tag remains " (dev build)" in the repository so that we can 88251881Speter * always see from "svn --version" that the software has been built 89251881Speter * from the repository rather than a "blessed" distribution. 90251881Speter * 91251881Speter * When rolling a tarball, we automatically replace this text with " (r1234)" 92251881Speter * (where 1234 is the last revision on the branch prior to the release) 93251881Speter * for final releases; in prereleases, it becomes " (Alpha 1)", 94251881Speter * " (Beta 1)", etc., as appropriate. 95251881Speter * 96251881Speter * Always change this at the same time as SVN_VER_NUMTAG. 97251881Speter */ 98269847Speter#define SVN_VER_TAG " (r1615264)" 99251881Speter 100251881Speter 101251881Speter/** Number tag: a string describing the version. 102251881Speter * 103251881Speter * This tag is used to generate a version number string to identify 104251881Speter * the client and server in HTTP requests, for example. It must not 105251881Speter * contain any spaces. This value remains "-dev" in the repository. 106251881Speter * 107251881Speter * When rolling a tarball, we automatically replace this text with "" 108251881Speter * for final releases; in prereleases, it becomes "-alpha1, "-beta1", 109251881Speter * etc., as appropriate. 110251881Speter * 111251881Speter * Always change this at the same time as SVN_VER_TAG. 112251881Speter */ 113251956Speter#define SVN_VER_NUMTAG "" 114251881Speter 115251881Speter 116251881Speter/** Revision number: The repository revision number of this release. 117251881Speter * 118251881Speter * This constant is used to generate the build number part of the Windows 119251881Speter * file version. Its value remains 0 in the repository. 120251881Speter * 121251881Speter * When rolling a tarball, we automatically replace it with what we 122251881Speter * guess to be the correct revision number. 123251881Speter */ 124269847Speter#define SVN_VER_REVISION 1615264 125251881Speter 126251881Speter 127251881Speter/* Version strings composed from the above definitions. */ 128251881Speter 129251881Speter/** Version number */ 130251881Speter#define SVN_VER_NUM APR_STRINGIFY(SVN_VER_MAJOR) \ 131251881Speter "." APR_STRINGIFY(SVN_VER_MINOR) \ 132251881Speter "." APR_STRINGIFY(SVN_VER_PATCH) 133251881Speter 134251881Speter/** Version number with tag (contains no whitespace) */ 135251881Speter#define SVN_VER_NUMBER SVN_VER_NUM SVN_VER_NUMTAG 136251881Speter 137251881Speter/** Complete version string */ 138251881Speter#define SVN_VERSION SVN_VER_NUMBER SVN_VER_TAG 139251881Speter 140251881Speter 141251881Speter 142251881Speter/* Version queries and compatibility checks */ 143251881Speter 144251881Speter/** 145251881Speter * Version information. Each library contains a function called 146251881Speter * svn_<i>libname</i>_version() that returns a pointer to a statically 147251881Speter * allocated object of this type. 148251881Speter * 149251881Speter * @since New in 1.1. 150251881Speter */ 151251881Speterstruct svn_version_t 152251881Speter{ 153251881Speter int major; /**< Major version number */ 154251881Speter int minor; /**< Minor version number */ 155251881Speter int patch; /**< Patch number */ 156251881Speter 157251881Speter /** 158251881Speter * The version tag (#SVN_VER_NUMTAG). Must always point to a 159251881Speter * statically allocated string. 160251881Speter */ 161251881Speter const char *tag; 162251881Speter}; 163251881Speter 164251881Speter/** 165251881Speter * Define a static svn_version_t object. 166251881Speter * 167251881Speter * @since New in 1.1. 168251881Speter */ 169251881Speter#define SVN_VERSION_DEFINE(name) \ 170251881Speter static const svn_version_t name = \ 171251881Speter { \ 172251881Speter SVN_VER_MAJOR, \ 173251881Speter SVN_VER_MINOR, \ 174251881Speter SVN_VER_PATCH, \ 175251881Speter SVN_VER_NUMTAG \ 176251881Speter } \ 177251881Speter 178251881Speter/** 179251881Speter * Generate the implementation of a version query function. 180251881Speter * 181251881Speter * @since New in 1.1. 182251881Speter */ 183251881Speter#define SVN_VERSION_BODY \ 184251881Speter SVN_VERSION_DEFINE(versioninfo); \ 185251881Speter return &versioninfo 186251881Speter 187251881Speter/** 188251881Speter * Check library version compatibility. Return #TRUE if the client's 189251881Speter * version, given in @a my_version, is compatible with the library 190251881Speter * version, provided in @a lib_version. 191251881Speter * 192251881Speter * This function checks for version compatibility as per our 193251881Speter * guarantees, but requires an exact match when linking to an 194251881Speter * unreleased library. A development client is always compatible with 195251881Speter * a previous released library. 196251881Speter * 197251881Speter * @since New in 1.1. 198251881Speter */ 199251881Spetersvn_boolean_t 200251881Spetersvn_ver_compatible(const svn_version_t *my_version, 201251881Speter const svn_version_t *lib_version); 202251881Speter 203251881Speter/** 204251881Speter * Check if @a my_version and @a lib_version encode the same version number. 205251881Speter * 206251881Speter * @since New in 1.2. 207251881Speter */ 208251881Spetersvn_boolean_t 209251881Spetersvn_ver_equal(const svn_version_t *my_version, 210251881Speter const svn_version_t *lib_version); 211251881Speter 212251881Speter 213251881Speter/** 214251881Speter * An entry in the compatibility checklist. 215251881Speter * @see svn_ver_check_list() 216251881Speter * 217251881Speter * @since New in 1.1. 218251881Speter */ 219251881Spetertypedef struct svn_version_checklist_t 220251881Speter{ 221251881Speter const char *label; /**< Entry label */ 222251881Speter 223251881Speter /** Version query function for this entry */ 224251881Speter const svn_version_t *(*version_query)(void); 225251881Speter} svn_version_checklist_t; 226251881Speter 227251881Speter 228251881Speter/** 229251881Speter * Perform a series of version compatibility checks. Checks if @a 230251881Speter * my_version is compatible with each entry in @a checklist. @a 231251881Speter * checklist must end with an entry whose label is @c NULL. 232251881Speter * 233251881Speter * @see svn_ver_compatible() 234251881Speter * 235251881Speter * @since New in 1.1. 236251881Speter */ 237251881Spetersvn_error_t * 238251881Spetersvn_ver_check_list(const svn_version_t *my_version, 239251881Speter const svn_version_checklist_t *checklist); 240251881Speter 241251881Speter 242251881Speter/** 243251881Speter * Type of function returning library version. 244251881Speter * 245251881Speter * @since New in 1.6. 246251881Speter */ 247251881Spetertypedef const svn_version_t *(*svn_version_func_t)(void); 248251881Speter 249251881Speter 250251881Speter/* libsvn_subr doesn't have an svn_subr header, so put the prototype here. */ 251251881Speter/** 252251881Speter * Get libsvn_subr version information. 253251881Speter * 254251881Speter * @since New in 1.1. 255251881Speter */ 256251881Speterconst svn_version_t * 257251881Spetersvn_subr_version(void); 258251881Speter 259251881Speter 260251881Speter/** 261251881Speter * Extended version information, including info about the running system. 262251881Speter * 263251881Speter * @since New in 1.8. 264251881Speter */ 265251881Spetertypedef struct svn_version_extended_t svn_version_extended_t; 266251881Speter 267251881Speter/** 268251881Speter * Return version information for the running program. If @a verbose 269251881Speter * is #TRUE, collect extra information that may be expensive to 270251881Speter * retrieve (for example, the OS release name, list of shared 271251881Speter * libraries, etc.). Use @a pool for all allocations. 272251881Speter * 273251881Speter * @since New in 1.8. 274251881Speter */ 275251881Speterconst svn_version_extended_t * 276251881Spetersvn_version_extended(svn_boolean_t verbose, 277251881Speter apr_pool_t *pool); 278251881Speter 279251881Speter 280251881Speter/** 281251881Speter * Accessor for svn_version_extended_t. 282251881Speter * 283251881Speter * @return The date when the libsvn_subr library was compiled, in the 284251881Speter * format defined by the C standard macro @c __DATE__. 285251881Speter * 286251881Speter * @since New in 1.8. 287251881Speter */ 288251881Speterconst char * 289251881Spetersvn_version_ext_build_date(const svn_version_extended_t *ext_info); 290251881Speter 291251881Speter/** 292251881Speter * Accessor for svn_version_extended_t. 293251881Speter * 294251881Speter * @return The time when the libsvn_subr library was compiled, in the 295251881Speter * format defined by the C standard macro @c __TIME__. 296251881Speter * 297251881Speter * @since New in 1.8. 298251881Speter */ 299251881Speterconst char * 300251881Spetersvn_version_ext_build_time(const svn_version_extended_t *ext_info); 301251881Speter 302251881Speter/** 303251881Speter * Accessor for svn_version_extended_t. 304251881Speter * 305251881Speter * @return The canonical host triplet (arch-vendor-osname) of the 306251881Speter * system where libsvn_subr was compiled. 307251881Speter * 308251881Speter * @note On Unix-like systems (includng Mac OS X), this string is the 309251881Speter * same as the output of the config.guess script. 310251881Speter * 311251881Speter * @since New in 1.8. 312251881Speter */ 313251881Speterconst char * 314251881Spetersvn_version_ext_build_host(const svn_version_extended_t *ext_info); 315251881Speter 316251881Speter/** 317251881Speter * Accessor for svn_version_extended_t. 318251881Speter * 319251881Speter * @return The localized copyright notice. 320251881Speter * 321251881Speter * @since New in 1.8. 322251881Speter */ 323251881Speterconst char * 324251881Spetersvn_version_ext_copyright(const svn_version_extended_t *ext_info); 325251881Speter 326251881Speter/** 327251881Speter * Accessor for svn_version_extended_t. 328251881Speter * 329251881Speter * @return The canonical host triplet (arch-vendor-osname) of the 330251881Speter * system where the current process is running. 331251881Speter * 332251881Speter * @note This string may not be the same as the output of config.guess 333251881Speter * on the same system. 334251881Speter * 335251881Speter * @since New in 1.8. 336251881Speter */ 337251881Speterconst char * 338251881Spetersvn_version_ext_runtime_host(const svn_version_extended_t *ext_info); 339251881Speter 340251881Speter/** 341251881Speter * Accessor for svn_version_extended_t. 342251881Speter * 343251881Speter * @return The "commercial" release name of the running operating 344251881Speter * system, if available. Not to be confused with, e.g., the output of 345251881Speter * "uname -v" or "uname -r". The returned value may be @c NULL. 346251881Speter * 347251881Speter * @since New in 1.8. 348251881Speter */ 349251881Speterconst char * 350251881Spetersvn_version_ext_runtime_osname(const svn_version_extended_t *ext_info); 351251881Speter 352251881Speter/** 353251881Speter * Dependent library information. 354251881Speter * Describes the name and versions of known dependencies 355251881Speter * used by libsvn_subr. 356251881Speter * 357251881Speter * @since New in 1.8. 358251881Speter */ 359251881Spetertypedef struct svn_version_ext_linked_lib_t 360251881Speter{ 361251881Speter const char *name; /**< Library name */ 362251881Speter const char *compiled_version; /**< Compile-time version string */ 363251881Speter const char *runtime_version; /**< Run-time version string (optional) */ 364251881Speter} svn_version_ext_linked_lib_t; 365251881Speter 366251881Speter/** 367251881Speter * Accessor for svn_version_extended_t. 368251881Speter * 369251881Speter * @return Array of svn_version_ext_linked_lib_t describing dependent 370251881Speter * libraries. The returned value may be @c NULL. 371251881Speter * 372251881Speter * @since New in 1.8. 373251881Speter */ 374251881Speterconst apr_array_header_t * 375251881Spetersvn_version_ext_linked_libs(const svn_version_extended_t *ext_info); 376251881Speter 377251881Speter 378251881Speter/** 379251881Speter * Loaded shared library information. 380251881Speter * Describes the name and, where available, version of the shared libraries 381251881Speter * loaded by the running program. 382251881Speter * 383251881Speter * @since New in 1.8. 384251881Speter */ 385251881Spetertypedef struct svn_version_ext_loaded_lib_t 386251881Speter{ 387251881Speter const char *name; /**< Library name */ 388251881Speter const char *version; /**< Library version (optional) */ 389251881Speter} svn_version_ext_loaded_lib_t; 390251881Speter 391251881Speter 392251881Speter/** 393251881Speter * Accessor for svn_version_extended_t. 394251881Speter * 395251881Speter * @return Array of svn_version_ext_loaded_lib_t describing loaded 396251881Speter * shared libraries. The returned value may be @c NULL. 397251881Speter * 398251881Speter * @note On Mac OS X, the loaded frameworks, private frameworks and 399251881Speter * system libraries will not be listed. 400251881Speter * 401251881Speter * @since New in 1.8. 402251881Speter */ 403251881Speterconst apr_array_header_t * 404251881Spetersvn_version_ext_loaded_libs(const svn_version_extended_t *ext_info); 405251881Speter 406251881Speter 407251881Speter#ifdef __cplusplus 408251881Speter} 409251881Speter#endif /* __cplusplus */ 410251881Speter 411251881Speter#endif /* SVN_VERSION_H */ 412