# ----------------------------------------------------------------------------------------------------------- # Copyright (c) 2025 Huawei Technologies Co., Ltd. # This program is free software, you can redistribute it and/or modify it under the terms and conditions of # CANN Open Software License Agreement Version 2.0 (the "License"). # Please refer to the License for details. You may not use this file except in compliance with the License. # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. # See LICENSE in the root of the software repository for the full text of the License. # ----------------------------------------------------------------------------------------------------------- function strip(input) { sub("^ +", "", input) sub(" +$", "", input) return input } function check_compatible_le(version_arr, len_version_arr, require_arr, len_require_arr, i) { for (i = 1; i <= len_require_arr; i++) { if (require_arr[i] == "") { continue } # len_version_arr lt len_require_arr if (i > len_version_arr) { return 1 } if (version_arr[i] < require_arr[i]) { return 1 } if (version_arr[i] > require_arr[i]) { return 0 } } if (len_version_arr > len_require_arr) { return 1 } # len_version_arr eq len_require_arr return 1 } function check_compatible_lt(version_arr, len_version_arr, require_arr, len_require_arr, i) { for (i = 1; i <= len_require_arr; i++) { if (require_arr[i] == "") { continue } # len_version_arr lt len_require_arr if (i > len_version_arr) { return 1 } if (version_arr[i] < require_arr[i]) { return 1 } if (version_arr[i] > require_arr[i]) { return 0 } } if (len_version_arr > len_require_arr) { return 0 } # len_version_arr eq len_require_arr return 0 } function check_compatible_ge(version_arr, len_version_arr, require_arr, len_require_arr, i) { for (i = 1; i <= len_require_arr; i++) { if (require_arr[i] == "") { continue } # len_version_arr lt len_require_arr if (i > len_version_arr) { return 0 } if (version_arr[i] < require_arr[i]) { return 0 } if (version_arr[i] > require_arr[i]) { return 1 } } if (len_version_arr > len_require_arr) { return 1 } # len_version_arr eq len_require_arr return 1 } function check_compatible_gt(version_arr, len_version_arr, require_arr, len_require_arr, i) { for (i = 1; i <= len_require_arr; i++) { if (require_arr[i] == "") { continue } # len_version_arr lt len_require_arr if (i > len_version_arr) { return 0 } if (version_arr[i] < require_arr[i]) { return 0 } if (version_arr[i] > require_arr[i]) { return 1 } } if (len_version_arr > len_require_arr) { return 1 } # len_version_arr eq len_require_arr return 0 } function check_compatible_eq(version_arr, len_version_arr, require_arr, len_require_arr, i) { for (i = 1; i <= len_require_arr; i++) { if (require_arr[i] == "") { continue } # len_version_arr lt len_require_arr if (i > len_version_arr) { return 0 } if (version_arr[i] != require_arr[i]) { return 0 } } if (len_version_arr > len_require_arr) { return 1 } # len_version_arr eq len_require_arr return 1 } function check_compatible(version_arr, len_version_arr, require, require_arr, len_require_arr, pos) { len_require_arr = split(require, require_arr, ".") pos = match(require_arr[1], /^>=/) if (pos != 0) { require_arr[1] = substr(require_arr[1], pos + RLENGTH) return check_compatible_ge(version_arr, len_version_arr, require_arr, len_require_arr) } pos = match(require_arr[1], /^>/) if (pos != 0) { require_arr[1] = substr(require_arr[1], pos + RLENGTH) return check_compatible_gt(version_arr, len_version_arr, require_arr, len_require_arr) } pos = match(require_arr[1], /^<=/) if (pos != 0) { require_arr[1] = substr(require_arr[1], pos + RLENGTH) return check_compatible_le(version_arr, len_version_arr, require_arr, len_require_arr) } pos = match(require_arr[1], /^/) if (pos != 0) { gt_require = 1 lt_require = 0 eq_require = 0 } else { pos = match(all_required_arr[i], /^