From 3248801a925449644071671dcd85e370303071b4 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 23 Jan 2015 17:04:14 +0100 Subject: Improve version information Add version number and string as macros and symbols. Version numbers can be easily compared, for example in the C preprocessor: #include #if CMARK_VERSION < 0x020200 #error Requires libcmark 2.2.0 or higher #endif Storing the version in a global variable allows to check the library version at runtime. For example: if (CMARK_VERSION != cmark_version) { warn("Compiled against libcmark %s, but using %s", CMARK_VERSION_STRING, cmark_version_string); } The version should be updated whenever the public API is changed. --- src/cmark.c | 3 +++ src/cmark.h | 33 +++++++++++++++++++++++++++++---- src/main.c | 2 +- 3 files changed, 33 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/cmark.c b/src/cmark.c index 1d7a500..2ec9be9 100644 --- a/src/cmark.c +++ b/src/cmark.c @@ -6,6 +6,9 @@ #include "cmark.h" #include "buffer.h" +const int cmark_version = CMARK_VERSION; +const char cmark_version_string[] = CMARK_VERSION_STRING; + char *cmark_markdown_to_html(const char *text, int len) { cmark_node *doc; diff --git a/src/cmark.h b/src/cmark.h index 8177fa8..faa5150 100644 --- a/src/cmark.h +++ b/src/cmark.h @@ -18,10 +18,6 @@ extern "C" { * ## Simple Interface */ -/** Current version of library. - */ -#define CMARK_VERSION "0.1" - /** Convert 'text' (assumed to be a UTF-8 encoded string with length * 'len' from CommonMark Markdown to HTML, returning a null-terminated, * UTF-8-encoded string. @@ -499,6 +495,35 @@ char *cmark_render_man(cmark_node *root, long options); */ #define CMARK_OPT_NORMALIZE 4 +/** + * ## Version information + */ + +/** Macro containing the library version as integer for compile time + * checks. + * + * * Bits 16-23 contain the major version. + * * Bits 8-15 contain the minor version. + * * Bits 0-7 contain the patchlevel. + * + * In hexadecimal format, the number 0x010203 represents version 1.2.3. + */ +#define CMARK_VERSION 0x000100 + +/** Macro containing the library version string for compile time checks. + */ +#define CMARK_VERSION_STRING "0.1.0" + +/** The library version as integer for runtime checks. + */ +CMARK_EXPORT +extern const int cmark_version; + +/** The library version string for runtime checks. + */ +CMARK_EXPORT +extern const char cmark_version_string[]; + /** # AUTHORS * * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. diff --git a/src/main.c b/src/main.c index 5855868..ef40a88 100644 --- a/src/main.c +++ b/src/main.c @@ -73,7 +73,7 @@ int main(int argc, char *argv[]) for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { - printf("cmark %s", CMARK_VERSION); + printf("cmark %s", CMARK_VERSION_STRING); printf(" - CommonMark converter (c) 2014 John MacFarlane\n"); exit(0); } else if (strcmp(argv[i], "--sourcepos") == 0) { -- cgit v1.2.3