summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Johnson <stevenj@mit.edu>2015-03-27 12:35:41 -0400
committerSteven G. Johnson <stevenj@mit.edu>2015-03-27 12:35:41 -0400
commitc851c678881fe3d910b29d20f1c813ecd3b9d920 (patch)
treeb95ce4e39dcb9019cf327a5f28efc233903b8286
parent164cc48aaf325cb4ffe227712e6488e1cb359d1c (diff)
downloadlibutf8proc-c851c678881fe3d910b29d20f1c813ecd3b9d920.tar.gz
libutf8proc-c851c678881fe3d910b29d20f1c813ecd3b9d920.tar.bz2
put the API version as #defines in the header file (as discussed in #30)
-rw-r--r--NEWS.md4
-rw-r--r--test/printproperty.c4
-rw-r--r--utf8proc.c4
-rw-r--r--utf8proc.h25
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 <stdlib.h>
#include <sys/types.h>
@@ -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);