.. _versions: *************** Library version *************** .. highlight:: c :: #include The macros and functions in this section let you determine the version of the libcork library at compile-time and runtime, and make it easier for you to define similar macros and functions in your own libraries. libcork version --------------- .. macro:: CORK_VERSION The libcork library version, encoded as a single number as follows:: (major * 1000000) + (minor * 1000) + patch For instance, version 1.2.10 would be encoded as 1002010. .. macro:: CORK_VERSION_MAJOR CORK_VERSION_MINOR CORK_VERSION_PATCH The libcork library version, with each part of the version number separated out into separate macros. .. function:: const char \*cork_version_string(void) const char \*cork_revision_string(void) Return the libcork library version or revision as a string. The *version* is the simple three-part version number (``major:minor:patch``). The *revision* is an opaque string that identifies the specific revision in libcork's code history. (Right now, this is a SHA-1 git commit identifier.) .. tip:: Compile-time vs runtime There's an important difference between the :c:macro:`CORK_VERSION` macro and :c:func:`cork_version_string` function, even though they seemingly return the same information. The macro version be evaluated by the preprocessor, and so it will return the version that was available *when your code was compiled*. If you later install a newer (but backwards-compatible) version of libcork, any code that called the macro will still have the original version, and not the new version. The function version, on the other hand, calculates the version information *at runtime*, when the function is actually called. That means that the function result will always give you the current installed libcork version, even as newer versions are installed on the system. Constructing version information -------------------------------- If you're writing a library that uses libcork, it's a good idea to provide your own version information, similar to how libcork does. .. function:: CORK_MAKE_VERSION(major, minor, patch) Assemble a ``major.minor.patch`` version into a single number, using the same pattern as :c:macro:`CORK_VERSION`.