From 21313d08e506d3c3ff2ab107af3fa1a5c7db8ed0 Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Sun, 5 Nov 2023 09:45:26 +0100 Subject: [PATCH] Add a header with the version of xkbcommon Currently there is no easy way to universally check the version of xkbcommon. Make clear we use the semantic version schema MAJOR.MINOR.PATCH and add an auto-generated header `version.h` that provide the following macros: - `XKBCOMMON_VERSION_MAJOR`: `MAJOR` version component - `XKBCOMMON_VERSION_MINOR`: `MINOR` version component - `XKBCOMMON_VERSION_PATCH`: `PATCH` version component - `XKBCOMMON_VERSION(a, b, c)`: create a version number from its components - `XKBCOMMON_VERSION_NUMBER`: version as a number, e.g. 1.6.0 is transformed into `0x010600`. Intended use example: `#if XKBCOMMON_VERSION_NUMBER >= XKBCOMMON_VERSION(1,7,0)` - `XKBCOMMON_VERSION_STR`: version as a string --- include/xkbcommon/version.h.in | 14 ++++++++++++++ meson.build | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 include/xkbcommon/version.h.in diff --git a/include/xkbcommon/version.h.in b/include/xkbcommon/version.h.in new file mode 100644 index 000000000..c1949c6f8 --- /dev/null +++ b/include/xkbcommon/version.h.in @@ -0,0 +1,14 @@ +#ifndef _XKBCOMMON_VERSION_H +#define _XKBCOMMON_VERSION_H + +#define XKBCOMMON_VERSION_MAJOR @XKBCOMMON_VERSION_MAJOR@ +#define XKBCOMMON_VERSION_MINOR @XKBCOMMON_VERSION_MINOR@ +#define XKBCOMMON_VERSION_PATCH @XKBCOMMON_VERSION_PATCH@ +#define XKBCOMMON_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c))) +#define XKBCOMMON_VERSION_NUMBER XKBCOMMON_VERSION( \ + XKBCOMMON_VERSION_MAJOR, \ + XKBCOMMON_VERSION_MINOR, \ + XKBCOMMON_VERSION_PATCH ) +#define XKBCOMMON_VERSION_STR "@XKBCOMMON_VERSION_STR@" + +#endif diff --git a/meson.build b/meson.build index eaef4fb6d..54b38211a 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,8 @@ project( 'libxkbcommon', 'c', + # Semantic version MAJOR.MINOR.PATCH, with each component between [0,255]. + # See `version_file` below. version: '1.6.0', default_options: [ 'c_std=c11', @@ -256,7 +258,22 @@ libxkbcommon = library( install: true, include_directories: include_directories('src', 'include'), ) + +# Version header file +version_components = meson.project_version().split('.') +version_file = configure_file( + input: 'include/xkbcommon/version.h.in', + output: 'version.h', + configuration: { + 'XKBCOMMON_VERSION_MAJOR': version_components[0], + 'XKBCOMMON_VERSION_MINOR': version_components[1], + 'XKBCOMMON_VERSION_PATCH': version_components[2], + 'XKBCOMMON_VERSION_STR': meson.project_version(), + }, +) + install_headers( + version_file, 'include/xkbcommon/xkbcommon.h', 'include/xkbcommon/xkbcommon-compat.h', 'include/xkbcommon/xkbcommon-compose.h',