57 lines
2.2 KiB
C
57 lines
2.2 KiB
C
|
|
/**
|
||
|
|
* @file version.h
|
||
|
|
* @brief Declares the libakgl version, both as compiled against and as linked.
|
||
|
|
*
|
||
|
|
* GENERATED FILE -- edit include/akgl/version.h.in, never the copy in the build
|
||
|
|
* tree. Every value here comes from the project() call in CMakeLists.txt, which
|
||
|
|
* is also what sets the shared library's VERSION and SOVERSION and the Version
|
||
|
|
* field in akgl.pc. One number, one place, so the header, the soname and
|
||
|
|
* pkg-config cannot drift apart.
|
||
|
|
*
|
||
|
|
* AKGL_VERSION is the version you *compiled against*. akgl_version() reports the
|
||
|
|
* version of the libakgl you actually *linked*. They disagree when a stale
|
||
|
|
* shared library is ahead of the new one on the loader path -- the failure the
|
||
|
|
* soname exists to prevent and this pair exists to diagnose.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef _AKGL_VERSION_H_
|
||
|
|
#define _AKGL_VERSION_H_
|
||
|
|
|
||
|
|
#define AKGL_VERSION "@PROJECT_VERSION@"
|
||
|
|
#define AKGL_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
|
||
|
|
#define AKGL_VERSION_MINOR @PROJECT_VERSION_MINOR@
|
||
|
|
#define AKGL_VERSION_PATCH @PROJECT_VERSION_PATCH@
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief True when the headers on the include path are at least the given version.
|
||
|
|
*
|
||
|
|
* For consumers that must build against more than one libakgl release. This is
|
||
|
|
* the test libakstdlib could not write against libakerror, which published no
|
||
|
|
* version macro and had to feature-test on AKERR_FIRST_CONSUMER_STATUS instead.
|
||
|
|
*
|
||
|
|
* @code
|
||
|
|
* #if AKGL_VERSION_AT_LEAST(0, 2, 0)
|
||
|
|
* akgl_something_new();
|
||
|
|
* #endif
|
||
|
|
* @endcode
|
||
|
|
*/
|
||
|
|
#define AKGL_VERSION_AT_LEAST(major, minor, patch) \
|
||
|
|
((AKGL_VERSION_MAJOR > (major)) || \
|
||
|
|
(AKGL_VERSION_MAJOR == (major) && AKGL_VERSION_MINOR > (minor)) || \
|
||
|
|
(AKGL_VERSION_MAJOR == (major) && AKGL_VERSION_MINOR == (minor) && \
|
||
|
|
AKGL_VERSION_PATCH >= (patch)))
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Report the version of the libakgl that is actually linked.
|
||
|
|
*
|
||
|
|
* Returns "major.minor.patch". Compare it against AKGL_VERSION to detect a
|
||
|
|
* stale shared library. Never returns NULL, and the storage is static -- the
|
||
|
|
* caller must not free or modify it.
|
||
|
|
*
|
||
|
|
* This returns a string rather than an akerr_ErrorContext * because it cannot
|
||
|
|
* fail, the same reason akerr_name_for_status() returns a name directly.
|
||
|
|
*/
|
||
|
|
const char *akgl_version(void);
|
||
|
|
|
||
|
|
#endif // _AKGL_VERSION_H_
|