diff --git a/CMakeLists.txt b/CMakeLists.txt index cd597ae..91a391e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,40 @@ cmake_minimum_required(VERSION 3.21 FATAL_ERROR) +# +# version +# + +file(READ "headers/meta.hpp/meta_base/base.hpp" META_HPP_BASE_HEADER_CONTENT) + +set(META_HPP_VERSION_MAJOR_MATCHER "#[\t\r\n ]*define[\t\r\n ]*META_HPP_VERSION_MAJOR[\t\r\n ]*([0-9]+)") +set(META_HPP_VERSION_MINOR_MATCHER "#[\t\r\n ]*define[\t\r\n ]*META_HPP_VERSION_MINOR[\t\r\n ]*([0-9]+)") +set(META_HPP_VERSION_PATCH_MATCHER "#[\t\r\n ]*define[\t\r\n ]*META_HPP_VERSION_PATCH[\t\r\n ]*([0-9]+)") + +if(META_HPP_BASE_HEADER_CONTENT MATCHES ${META_HPP_VERSION_MAJOR_MATCHER}) + set(META_HPP_VERSION_MAJOR ${CMAKE_MATCH_1}) +else() + message(FATAL_ERROR "meta.hpp: failed to resolve a major version number") +endif() + +if(META_HPP_BASE_HEADER_CONTENT MATCHES ${META_HPP_VERSION_MINOR_MATCHER}) + set(META_HPP_VERSION_MINOR ${CMAKE_MATCH_1}) +else() + message(FATAL_ERROR "meta.hpp: failed to resolve a minor version number") +endif() + +if(META_HPP_BASE_HEADER_CONTENT MATCHES ${META_HPP_VERSION_PATCH_MATCHER}) + set(META_HPP_VERSION_PATCH ${CMAKE_MATCH_1}) +else() + message(FATAL_ERROR "meta.hpp: failed to resolve a patch version number") +endif() + +# +# project +# + project(meta.hpp - VERSION "0.0.1" - DESCRIPTION "C++20 tiny dynamic reflection library" + VERSION "${META_HPP_VERSION_MAJOR}.${META_HPP_VERSION_MINOR}.${META_HPP_VERSION_PATCH}" + DESCRIPTION "C++20 Dynamic Reflection Library" HOMEPAGE_URL "https://github.com/blackmatov/meta.hpp" LANGUAGES CXX) diff --git a/README.md b/README.md index 7d81096..0adfbf5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # meta.hpp -> C++20 tiny dynamic reflection library +> C++20 Dynamic Reflection Library [![linux][badge.linux]][linux] [![darwin][badge.darwin]][darwin] diff --git a/ROADMAP.md b/ROADMAP.md index c71737f..b775ffa 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -5,7 +5,6 @@ - type conversions - non-linear search of methods/functions/... - register base types by `META_HPP_ENABLE_POLY_INFO` -- add the library version to sources - fix all includes to work with the library more flexible - test and support shared libraries diff --git a/develop/singles/headers/meta.hpp/meta_all.hpp b/develop/singles/headers/meta.hpp/meta_all.hpp index b23bd24..8110722 100644 --- a/develop/singles/headers/meta.hpp/meta_all.hpp +++ b/develop/singles/headers/meta.hpp/meta_all.hpp @@ -38,6 +38,36 @@ // // +#if !defined(META_HPP_VERSION_MAJOR) +# define META_HPP_VERSION_MAJOR 0 +#endif + +#if !defined(META_HPP_VERSION_MINOR) +# define META_HPP_VERSION_MINOR 0 +#endif + +#if !defined(META_HPP_VERSION_PATCH) +# define META_HPP_VERSION_PATCH 1 +#endif + +// +// +// + +#if META_HPP_VERSION_MINOR < 0 || META_HPP_VERSION_MINOR > 99 +# error "meta.hpp: incorrect minor version number" +#endif + +#if META_HPP_VERSION_PATCH < 0 || META_HPP_VERSION_PATCH > 99 +# error "meta.hpp: incorrect patch version number" +#endif + +#define META_HPP_VERSION META_HPP_VERSION_MAJOR * 10000 + META_HPP_VERSION_MINOR * 100 + META_HPP_VERSION_PATCH + +// +// +// + #if !defined(META_HPP_NO_EXCEPTIONS) && !defined(__cpp_exceptions) # define META_HPP_NO_EXCEPTIONS #endif @@ -58,15 +88,12 @@ # define META_HPP_ASSERT(...) assert(__VA_ARGS__) // NOLINT #endif -#if defined(META_HPP_SANITIZERS) -# define META_HPP_DEV_ASSERT(...) META_HPP_ASSERT(__VA_ARGS__) -#else -# define META_HPP_DEV_ASSERT(...) (void)0 -#endif - -#if !defined(META_HPP_PP_CAT) -# define META_HPP_PP_CAT(x, y) META_HPP_PP_CAT_I(x, y) -# define META_HPP_PP_CAT_I(x, y) x##y +#if !defined(META_HPP_DEV_ASSERT) +# if defined(META_HPP_SANITIZERS) +# define META_HPP_DEV_ASSERT(...) META_HPP_ASSERT(__VA_ARGS__) +# else +# define META_HPP_DEV_ASSERT(...) (void)0 +# endif #endif // diff --git a/headers/meta.hpp/meta_base/base.hpp b/headers/meta.hpp/meta_base/base.hpp index 7897c26..683f051 100644 --- a/headers/meta.hpp/meta_base/base.hpp +++ b/headers/meta.hpp/meta_base/base.hpp @@ -39,6 +39,36 @@ // // +#if !defined(META_HPP_VERSION_MAJOR) +# define META_HPP_VERSION_MAJOR 0 +#endif + +#if !defined(META_HPP_VERSION_MINOR) +# define META_HPP_VERSION_MINOR 0 +#endif + +#if !defined(META_HPP_VERSION_PATCH) +# define META_HPP_VERSION_PATCH 1 +#endif + +// +// +// + +#if META_HPP_VERSION_MINOR < 0 || META_HPP_VERSION_MINOR > 99 +# error "meta.hpp: incorrect minor version number" +#endif + +#if META_HPP_VERSION_PATCH < 0 || META_HPP_VERSION_PATCH > 99 +# error "meta.hpp: incorrect patch version number" +#endif + +#define META_HPP_VERSION META_HPP_VERSION_MAJOR * 10000 + META_HPP_VERSION_MINOR * 100 + META_HPP_VERSION_PATCH + +// +// +// + #if !defined(META_HPP_NO_EXCEPTIONS) && !defined(__cpp_exceptions) # define META_HPP_NO_EXCEPTIONS #endif @@ -59,15 +89,12 @@ # define META_HPP_ASSERT(...) assert(__VA_ARGS__) // NOLINT #endif -#if defined(META_HPP_SANITIZERS) -# define META_HPP_DEV_ASSERT(...) META_HPP_ASSERT(__VA_ARGS__) -#else -# define META_HPP_DEV_ASSERT(...) (void)0 -#endif - -#if !defined(META_HPP_PP_CAT) -# define META_HPP_PP_CAT(x, y) META_HPP_PP_CAT_I(x, y) -# define META_HPP_PP_CAT_I(x, y) x##y +#if !defined(META_HPP_DEV_ASSERT) +# if defined(META_HPP_SANITIZERS) +# define META_HPP_DEV_ASSERT(...) META_HPP_ASSERT(__VA_ARGS__) +# else +# define META_HPP_DEV_ASSERT(...) (void)0 +# endif #endif //