blob: e25d8e803550ce1fd11d42bee8580af84237c45b [file] [log] [blame]
############################################################################
# tools/espressif/check_esptool.py
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
import argparse
import re
import subprocess
import sys
parser = argparse.ArgumentParser(
prog="check_esptool",
description="Checks esptool version and returns true or \
false if it matches target version",
)
parser.add_argument("-v", "--version", action="store", required=True)
def parse_version(version_string) -> list:
"""Regex patteren to extract version major and minor."""
pattern = r"(\d+)\.(\d+)"
match = re.search(pattern, version_string)
if match:
major = int(match.group(1))
minor = int(match.group(2))
return [major, minor]
else:
return []
def check_version(min_esptool_version: str) -> bool:
"""Attempts to read 'esptool' version using subprocess command
which improves compatibility with esptool installed by pipx like tools.
Compare current version with 'min_esptool_version' and returns.
Returns:
True: packages does not exist or outdated
False: package installed and up-to-date
"""
try:
# Run esptool.py version command
result = subprocess.run(
["esptool.py", "version"], capture_output=True, text=True, check=True
)
version_str = result.stdout.strip()
except (subprocess.CalledProcessError, FileNotFoundError):
print("esptool.py not found. Please run: 'pip install esptool'")
print("Run make again to create the nuttx.bin image.")
return True
esptool_version = parse_version(version_str)
min_esptool_version = parse_version(parser.version)
if esptool_version >= min_esptool_version:
return False
print("Unsupported esptool version:", version_str, "expects >=", parser.version)
print("Upgrade using: 'pip install --upgrade esptool' and run 'make' again")
return True
if __name__ == "__main__":
parser = parser.parse_args()
sys.exit(check_version(parser.version))