#!/usr/bin/env python # # SPDX-FileCopyrightText: 2017-2024 Espressif Systems (Shanghai) CO LTD # # SPDX-License-Identifier: Apache-2.0 # import argparse import os import subprocess import sys if __name__ == '__main__': # Here the argparse is used only to "peek" into arguments if # legacy version is requested or if old json format is specified. # In these two cases the esp_idf_size legacy version is spawned. parser = argparse.ArgumentParser(add_help=False) # Make the --format arg optional, so this argparse instance does not # fail with an error and the proper underlying help is displayed. # Note that exit_on_error is supported from python3.9, so this is # a workaround how to make sure that the args parsing doesn't fail here if idf_size.py # is invoked e.g. without specifying the format, like "idf_size.py --format". parser.add_argument('--format', nargs='?') parser.add_argument('-l', '--legacy', action='store_true', default=os.environ.get('ESP_IDF_SIZE_LEGACY', '0') == '1') # The sys.argv is parsed with "exit_on_error", but the argparse.ArgumentError # exception should never occur, because unknown args should be put into # the rest variable, since the parse_known_args() method is used. args, rest = parser.parse_known_args() if not args.legacy and args.format != 'json': # By default start the refactored version, unless legacy version is explicitly requested with # -l/--legacy option or if old json format is specified. try: import esp_idf_size.ng # noqa: F401 except ImportError: print('warning: refactored esp-idf-size not installed, using legacy mode', file=sys.stderr) args.legacy = True else: os.environ['ESP_IDF_SIZE_NG'] = '1' if not rest or '-h' in rest or '--help' in rest: print(('Note: legacy esp_idf_size version can be invoked by specifying the -l/--legacy ' 'option or by setting the ESP_IDF_SIZE_LEGACY environment variable. Additionally, the ' 'legacy version is automatically employed when the JSON format is specified for ' 'compatibility with previous versions.')) if args.format is not None: rest = ['--format', args.format] + rest sys.exit(subprocess.run([sys.executable, '-m', 'esp_idf_size'] + rest).returncode)