Line data Source code
1 : /*! 2 : * \file esys/repo/version.cpp 3 : * \brief Version info for esystest 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2023 Michel Gillet 9 : * Distributed under the MIT License. 10 : * (See accompanying file LICENSE.txt or 11 : * copy at https://opensource.org/licenses/MIT) 12 : * 13 : * __legal_e__ 14 : * \endcond 15 : * 16 : */ 17 : 18 : #include "esys/repo/esysrepo_prec.h" 19 : #include "esys/repo/version.h" 20 : 21 : #include <string.h> 22 : #include <stdlib.h> 23 : 24 : namespace esys::repo 25 : { 26 : 27 0 : ESYSREPO_API int get_major_version() 28 : { 29 0 : return ESYSREPO_MAJOR_VERSION; 30 : } 31 : 32 0 : ESYSREPO_API int get_minor_version() 33 : { 34 0 : return ESYSREPO_MINOR_VERSION; 35 : } 36 : 37 0 : ESYSREPO_API int get_patch_version() 38 : { 39 0 : return ESYSREPO_RELEASE_NUMBER; 40 : } 41 : 42 0 : ESYSREPO_API bool check_at_least_version(int major, int minor, int patch) 43 : { 44 0 : return check_at_least_version(ESYSREPO_VERSION_NUM_DOT_STRING, major, minor, patch); 45 : } 46 : 47 0 : ESYSREPO_API bool check_at_least_version(const char *version, int major, int minor, int patch) 48 : { 49 0 : int major_test = get_int_till_dot(version); 50 0 : bool minor_till_end = (patch == -1); 51 0 : int minor_test = get_int_till_dot(version, 1, minor_till_end); 52 0 : int patch_test = get_int_till_dot(version, 2, true); 53 : 54 0 : if (major < 0) return false; 55 0 : if (major_test < major) return false; 56 0 : if (major_test > major) return true; 57 : 58 0 : if (minor < 0) return false; 59 0 : if (minor_test < minor) return false; 60 0 : if (minor_test > minor) return true; 61 : 62 0 : if ((patch < 0) && (patch_test < 0)) return true; 63 0 : if (patch_test >= patch) return true; 64 : 65 : return false; 66 : } 67 : 68 0 : ESYSREPO_API int get_int_till_dot(const char *str, int skip_dot, bool till_end_str) 69 : { 70 0 : int idx = 0; 71 0 : int value = 0; 72 : 73 0 : while (skip_dot != 0) 74 : { 75 0 : while ((idx < strlen(str)) && (str[idx] != '.')) ++idx; 76 0 : if (str[idx] != '.') return -1; 77 0 : ++idx; 78 0 : --skip_dot; 79 : } 80 : 81 0 : while (idx < strlen(str)) 82 : { 83 0 : if (idx > 0) value *= 10; 84 : 85 0 : if ((str[idx] < '0') || (str[idx] > '9')) return -1; 86 0 : value += str[idx] - '0'; 87 : 88 0 : ++idx; 89 : 90 0 : if (str[idx] == '.') 91 : { 92 0 : return value; 93 : } 94 : } 95 0 : if (till_end_str) return value; 96 : return -1; 97 : } 98 : 99 : } // namespace esys::repo