281
csrc/scripts/package/common/sh/check_version_required.awk
Normal file
281
csrc/scripts/package/common/sh/check_version_required.awk
Normal file
@@ -0,0 +1,281 @@
|
||||
# -----------------------------------------------------------------------------------------------------------
|
||||
# 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) {
|
||||
require_arr[1] = substr(require_arr[1], pos + RLENGTH)
|
||||
return check_compatible_lt(version_arr, len_version_arr, require_arr, len_require_arr)
|
||||
}
|
||||
|
||||
return check_compatible_eq(version_arr, len_version_arr, require_arr, len_require_arr)
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
len_all_required_arr = split(all_required, all_required_arr, ",")
|
||||
|
||||
compated = 0
|
||||
|
||||
in_gt = 0
|
||||
matched_gt = 0
|
||||
|
||||
len_version_arr = split(version, version_arr, ".")
|
||||
|
||||
for (i = 1; i <= len_all_required_arr; i++) {
|
||||
all_required_arr[i] = strip(all_required_arr[i])
|
||||
one_compated = check_compatible(version_arr, len_version_arr, all_required_arr[i])
|
||||
|
||||
pos = match(all_required_arr[i], /^>/)
|
||||
if (pos != 0) {
|
||||
gt_require = 1
|
||||
lt_require = 0
|
||||
eq_require = 0
|
||||
} else {
|
||||
pos = match(all_required_arr[i], /^</)
|
||||
if (pos != 0) {
|
||||
gt_require = 0
|
||||
lt_require = 1
|
||||
eq_require = 0
|
||||
} else {
|
||||
gt_require = 0
|
||||
lt_require = 0
|
||||
eq_require = 1
|
||||
}
|
||||
}
|
||||
|
||||
if (matched_gt) {
|
||||
if (one_compated) {
|
||||
# gt after gt, all compated.
|
||||
if (gt_require) {
|
||||
matched_gt = 1
|
||||
in_gt = 1
|
||||
continue
|
||||
}
|
||||
# lt after gt, all compated.
|
||||
if (lt_require) {
|
||||
compated = 1
|
||||
matched_gt = 0
|
||||
in_gt = 0
|
||||
break
|
||||
}
|
||||
# eq after gt, all compated.
|
||||
if (eq_require) {
|
||||
# eq compated, go.
|
||||
compated = 1
|
||||
break
|
||||
}
|
||||
} else {
|
||||
# miscompated.
|
||||
# gt after gt, compated first gt. miscompated second gt.
|
||||
if (gt_require) {
|
||||
matched_gt = 0
|
||||
in_gt = 1
|
||||
continue
|
||||
}
|
||||
# lt after gt, compated first gt. miscompated second lt.
|
||||
if (lt_require) {
|
||||
matched_gt = 0
|
||||
in_gt = 0
|
||||
continue
|
||||
}
|
||||
# eq after gt, compated first gt. miscompated second eq.
|
||||
if (eq_require) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (one_compated) {
|
||||
if (gt_require) {
|
||||
matched_gt = 1
|
||||
in_gt = 1
|
||||
continue
|
||||
}
|
||||
if (lt_require) {
|
||||
if (in_gt) {
|
||||
matched_gt = 0
|
||||
in_gt = 0
|
||||
continue
|
||||
} else {
|
||||
compated = 1
|
||||
break
|
||||
}
|
||||
}
|
||||
if (eq_require) {
|
||||
# eq compated, go.
|
||||
compated = 1
|
||||
break
|
||||
}
|
||||
} else {
|
||||
# miscompated.
|
||||
if (gt_require) {
|
||||
matched_gt = 0
|
||||
in_gt = 1
|
||||
continue
|
||||
}
|
||||
if (lt_require) {
|
||||
matched_gt = 0
|
||||
in_gt = 0
|
||||
continue
|
||||
}
|
||||
if (eq_require) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (matched_gt) {
|
||||
compated = 1
|
||||
}
|
||||
|
||||
if (compated == 0) {
|
||||
printf("F")
|
||||
} else {
|
||||
printf("T")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user