From c851c678881fe3d910b29d20f1c813ecd3b9d920 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Fri, 27 Mar 2015 12:35:41 -0400 Subject: put the API version as #defines in the header file (as discussed in #30) --- NEWS.md | 4 ++++ test/printproperty.c | 4 ++++ utf8proc.c | 4 +++- utf8proc.h | 25 ++++++++++++++++++++++++- 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index a45e9ac..37f3a89 100644 --- a/NEWS.md +++ b/NEWS.md @@ -28,6 +28,10 @@ - Most `#defined` constants are now `enums`. +- New preprocessor constants `UTF8PROC_VERSION_MAJOR`, + `UTF8PROC_VERSION_MINOR`, and `UTF8PROC_VERSION_PATCH` for compile-time + detection of the API version. + - Doxygen-formatted documentation. ## Version 1.1.6 ## diff --git a/test/printproperty.c b/test/printproperty.c index 6be8cb1..b876f0c 100644 --- a/test/printproperty.c +++ b/test/printproperty.c @@ -8,6 +8,10 @@ int main(int argc, char **argv) for (i = 1; i < argc; ++i) { int c; + if (!strcmp(argv[i], "-V")) { + printf("utf8proc version %s\n", utf8proc_version()); + continue; + } check(sscanf(argv[i],"%x",&c) == 1, "invalid hex input %s", argv[i]); const utf8proc_property_t *p = utf8proc_get_property(c); printf("U+%s:\n" diff --git a/utf8proc.c b/utf8proc.c index b0c68e7..c66b1ae 100644 --- a/utf8proc.c +++ b/utf8proc.c @@ -84,8 +84,10 @@ DLLEXPORT const int8_t utf8proc_utf8class[256] = { /* Should follow semantic-versioning rules (semver.org) based on API compatibility. (Note that the shared-library version number will be different, being based on ABI compatibility.): */ +#define STRINGIZEx(x) #x +#define STRINGIZE(x) STRINGIZEx(x) DLLEXPORT const char *utf8proc_version(void) { - return "1.2-dev"; + return STRINGIZE(UTF8PROC_VERSION_MAJOR) "." STRINGIZE(UTF8PROC_VERSION_MINOR) "." STRINGIZE(UTF8PROC_VERSION_PATCH) "-dev"; } DLLEXPORT const char *utf8proc_errmsg(ssize_t errcode) { diff --git a/utf8proc.h b/utf8proc.h index dc97b85..d1085fc 100644 --- a/utf8proc.h +++ b/utf8proc.h @@ -56,6 +56,27 @@ #ifndef UTF8PROC_H #define UTF8PROC_H +/** @name API version + * + * The utf8proc API version MAJOR.MINOR.PATCH, following + * semantic-versioning rules (http://semver.org) based on API + * compatibility. + * + * This is also returned at runtime by @ref utf8proc_version; however, the + * runtime version may append a string like "-dev" to the version number + * for prerelease versions. + * + * @note The shared-library version number in the Makefile will be different, + * being based on ABI compatibility rather than API compatibility. + */ +/** @{ */ +/** The MAJOR version number (increased when backwards API compatibility is broken). */ +#define UTF8PROC_VERSION_MAJOR 1 +/** The MINOR version number (increased when new functionality is added in a backwards-compatible manner). */ +#define UTF8PROC_VERSION_MINOR 2 +/** The PATCH version (increased for fixes that do not change the API). */ +#define UTF8PROC_VERSION_PATCH 0 +/** @} */ #include #include @@ -337,7 +358,9 @@ typedef enum { DLLEXPORT extern const int8_t utf8proc_utf8class[256]; /** - * Returns the version as a string. + * Returns the utf8proc API version as a string MAJOR.MINOR.PATCH + * (http://semver.org format), possibly with a "-dev" suffix for + * development versions. */ DLLEXPORT const char *utf8proc_version(void); -- cgit v1.2.3